source: main/waeup.sirp/trunk/src/waeup/sirp/app.py @ 6610

Last change on this file since 6610 was 6592, checked in by uli, 13 years ago

Shorten University init. It seems we nowhere use keywords on
initialization and there is also no need to do it.

  • Property svn:eol-style set to native
File size: 2.8 KB
Line 
1import grok
2from hurry.file.interfaces import IFileRetrieval
3from zope.authentication.interfaces import IAuthentication
4from zope.component import createObject, getUtilitiesFor
5from zope.component.interfaces import ObjectEvent
6from zope.pluggableauth import PluggableAuthentication
7from waeup.sirp.authentication import setup_authentication
8from waeup.sirp.datacenter import DataCenter
9from waeup.sirp.imagestorage import ImageStorageFileRetrieval, ImageStorage
10from waeup.sirp.interfaces import (
11    IUniversity, IWAeUPSIRPPluggable, IObjectUpgradeEvent, )
12from waeup.sirp.users import UserContainer
13from waeup.sirp.utils.logger import Logger
14from waeup.sirp.utils.helpers import attrs_to_fields
15
16class University(grok.Application, grok.Container, Logger):
17    """A university.
18    """
19    grok.implements(IUniversity)
20
21    # Setup authentication for this app. Note: this is only
22    # initialized, when a new instance of this app is created.
23    grok.local_utility(
24        PluggableAuthentication, provides = IAuthentication,
25        setup = setup_authentication,)
26
27    grok.local_utility(
28        ImageStorageFileRetrieval, provides = IFileRetrieval)
29
30    def __init__(self, *args, **kw):
31        super(University, self).__init__(*args, **kw)
32        self.setup()
33        return
34
35    def setup(self):
36        """Setup some hard-wired components.
37
38        Create local datacenter, containers for users, students and
39        the like.
40        """
41        self['users'] = UserContainer()
42        self['datacenter'] = DataCenter()
43        self['images'] = ImageStorage()
44
45        self['students'] = createObject(u'waeup.StudentContainer')
46        self['hostels'] = createObject(u'waeup.HostelContainer')
47        self._createPlugins()
48
49    def _createPlugins(self):
50        """Create instances of all plugins defined somewhere.
51        """
52        for name, plugin in getUtilitiesFor(IWAeUPSIRPPluggable):
53            plugin.setup(self, name, self.logger)
54        return
55
56    def updatePlugins(self):
57        """Lookup all plugins and call their `update()` method.
58        """
59        name = getattr(self, '__name__', '<Unnamed>')
60        self.logger.info('Fire upgrade event for site %s' % name)
61        grok.notify(ObjectUpgradeEvent(self))
62        self.logger.info('Done.')
63        self.logger.info('Now upgrading any plugins.')
64        for name, plugin in getUtilitiesFor(IWAeUPSIRPPluggable):
65            plugin.update(self, name, self.logger)
66        self.logger.info('Plugin update finished.')
67        return
68attrs_to_fields(University)
69
70class ObjectUpgradeEvent(ObjectEvent):
71    """An event fired, when datacenter storage moves.
72    """
73    grok.implements(IObjectUpgradeEvent)
74
75@grok.subscribe(University, grok.IObjectAddedEvent)
76def handle_university_add(app, event):
77    app.logger.info('University `%s` added.' % getattr(app, '__name__', None))
78    return
Note: See TracBrowser for help on using the repository browser.