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

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

We don't need a factory for StudentsContainer?.

Add addStudent method which automatically creates subcontainers.

Add StudentStudyCourse? container class which holds the study course data and contains student study level objects for course registration.

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