source: main/waeup.kofa/trunk/src/waeup/kofa/applicants/root.py @ 9038

Last change on this file since 9038 was 8773, checked in by Henrik Bettermann, 13 years ago

Set main parameters in one buildout section.

  • Property svn:keywords set to Id
File size: 4.2 KB
RevLine 
[7192]1## $Id: root.py 8773 2012-06-21 05:49:59Z henrik $
[5648]2##
[6478]3## Copyright (C) 2011 Uli Fouquet & Henrik Bettermann
[5648]4## This program is free software; you can redistribute it and/or modify
5## it under the terms of the GNU General Public License as published by
6## the Free Software Foundation; either version 2 of the License, or
7## (at your option) any later version.
[7192]8##
[5648]9## This program is distributed in the hope that it will be useful,
10## but WITHOUT ANY WARRANTY; without even the implied warranty of
11## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12## GNU General Public License for more details.
[7192]13##
[5648]14## You should have received a copy of the GNU General Public License
15## along with this program; if not, write to the Free Software
16## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17##
18"""
[5676]19The root for applicants.
[5648]20"""
21import grok
[6121]22from hurry.query import Eq
23from hurry.query.interfaces import IQuery
24from zope.component import getUtility
[8388]25from zope.schema import getFields
[7819]26from waeup.kofa.interfaces import IKofaPluggable
[7811]27from waeup.kofa.applicants.interfaces import IApplicantsRoot
28from waeup.kofa.utils.logger import Logger
[8388]29from waeup.kofa.utils.helpers import attrs_to_fields
[5648]30
[6578]31class ApplicantsRoot(grok.Container, Logger):
[6119]32    """The root of applicants-related components. It contains only
[5676]33    containers for applicants.
[5648]34    """
[5676]35    grok.implements(IApplicantsRoot)
[5670]36
[7182]37    local_roles = []
[6370]38
[8388]39    #: A dictionary to hold per language translations of description string.
40    description_dict = {}
41
[7811]42    logger_name = 'waeup.kofa.${sitename}.applicants'
[6578]43    logger_filename = 'applicants.log'
[6348]44
[8388]45ApplicantsRoot = attrs_to_fields(ApplicantsRoot)
46
[5676]47class ApplicantsPlugin(grok.GlobalUtility):
[7819]48    """A KofaPlugin that creates an applicants root in portal.
[5670]49
50    This plugin should be called by a typical
[7811]51    `waeup.kofa.app.Universtiy` instance on creation time. The
[5670]52    :meth:`update` method normally can also be triggered manually over
53    the main site configuration.
54
[7819]55    Implements :class:`waeup.kofa.interfaces.IKofaPluggable`
[5670]56    """
[5676]57    grok.name('applicants')
[7819]58    grok.implements(IKofaPluggable)
[5676]59    log_prefix = 'ApplicantsPlugin'
[5670]60
61    def setup(self, site, name, logger):
[5676]62        """Create a new :class:`ApplicantsRoot` instance in `site`.
[5670]63        """
[5676]64        site['applicants'] = ApplicantsRoot()
[5670]65        logger.info(
[5676]66            '%s: Installed applicants root.' % (self.log_prefix,)
[5670]67            )
68        return
69
70    def update(self, site, name, logger):
[5676]71        """Update site wide ``applicants`` root.
[5670]72
[5676]73        If the site already contains a suitable ``applicants`` root,
[5670]74        leave it that way. If not create one and delete the old one if
75        appropriate.
76        """
[5676]77        app_folder = site.get('applicants', None)
[5684]78        site_name = getattr(site, '__name__', '<Unnamed Site>')
[5676]79        if IApplicantsRoot.providedBy(app_folder):
[8388]80            items = getFields(IApplicantsRoot).items()
81            nothing_to_do = True
[8412]82            #for i in items:
83            #    if not hasattr(app_folder,i[0]):
84            #        nothing_to_do = False
85            #        setattr(app_folder,i[0],i[1].missing_value)
86            #        logger.info(
87            #            '%s: %s added to root.' % (self.log_prefix,i[0]))
[8773]88            # can be removed after upgrading futminna
[8412]89            #if not hasattr(app_folder, 'description_dict'):
90            #    nothing_to_do = False
91            #    setattr(app_folder,'description_dict',{})
92            #    logger.info(
93            #        '%s: description_dict added to root.' % self.log_prefix)
[8388]94            if nothing_to_do:
95                logger.info(
96                    '%s: Updating site at %s: Nothing to do.' % (
97                        self.log_prefix, site_name,)
98                    )
[5670]99            return
100        elif app_folder is not None:
[5676]101            # Applicants need update. Remove old instance.
[5670]102            logger.warn(
[5676]103                '%s: Outdated applicants folder detected at site %s.'
[5670]104                'Removing it.' % (self.log_prefix, site_name)
105                    )
[5676]106            del site['applicants']
107        # Add new applicants.
[5670]108        logger.info(
109            '%s: Updating site at %s. Installing '
[5676]110            'applicants.' % (self.log_prefix, site_name,)
[5670]111            )
112        self.setup(site, name, logger)
113        return
Note: See TracBrowser for help on using the repository browser.