source: main/waeup.sirp/trunk/src/waeup/sirp/applicants/applicant.py @ 6632

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

Rename applicants.py, accesscodes.py and students.py modules. Their names should be singular like in the university package.

File size: 3.9 KB
Line 
1##
2## applicants.py
3## Login : <uli@pu.smp.net>
4## Started on  Fri Jul 16 11:46:55 2010 Uli Fouquet
5## $Id$
6##
7## Copyright (C) 2010 Uli Fouquet & Henrik Bettermann
8## This program is free software; you can redistribute it and/or modify
9## it under the terms of the GNU General Public License as published by
10## the Free Software Foundation; either version 2 of the License, or
11## (at your option) any later version.
12##
13## This program is distributed in the hope that it will be useful,
14## but WITHOUT ANY WARRANTY; without even the implied warranty of
15## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16## GNU General Public License for more details.
17##
18## You should have received a copy of the GNU General Public License
19## along with this program; if not, write to the Free Software
20## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21##
22import grok
23from grok import index
24from zope.component.interfaces import IFactory
25from zope.interface import implementedBy
26from hurry.workflow.interfaces import IWorkflowInfo, IWorkflowState
27from waeup.sirp.interfaces import IObjectHistory
28from waeup.sirp.app import University
29from waeup.sirp.applicants.interfaces import (
30    IResultEntry, IApplicant, IApplicantEdit, default_passport_image,
31    )
32from waeup.sirp.utils.helpers import attrs_to_fields
33
34class ResultEntry(grok.Context):
35    grok.implements(IResultEntry)
36
37    def __init__(self, subject=None, score=None):
38        self.subject = subject
39        self.score = score
40
41class Applicant(grok.Model):
42    grok.implements(IApplicant,IApplicantEdit)
43    grok.provides(IApplicant)
44
45    def __init__(self):
46        super(Applicant, self).__init__()
47        IWorkflowInfo(self).fireTransition('init')
48        self.application_date = None
49        return
50
51    #def getApplicantsRootLogger(self):
52    #    return grok.getSite()['applicants'].logger
53
54    def loggerInfo(self, ob_class, comment=None):
55        target = self.__name__
56        return grok.getSite()['applicants'].logger_info(ob_class,target,comment)
57
58    @property
59    def state(self):
60        state = IWorkflowState(self).getState()
61        return state
62
63    @property
64    def history(self):
65        history = IObjectHistory(self)
66        return history
67
68# Set all attributes of Applicant required in IApplicant as field
69# properties. Doing this, we do not have to set initial attributes
70# ourselves and as a bonus we get free validation when an attribute is
71# set.
72Applicant = attrs_to_fields(Applicant)
73
74class ApplicantCatalog(grok.Indexes):
75    """A catalog indexing :class:`Applicant` instances in the ZODB.
76    """
77    grok.site(University)
78    grok.name('applicants_catalog')
79    grok.context(IApplicant)
80
81    access_code = index.Field(attribute='access_code')
82
83class ApplicantTraverser(grok.Traverser):
84    """Get image of the context applicant.
85
86    Each applicant can provide a passport photograph which will be
87    returned by this traverser if:
88
89    - we request the exact filename of the picture or
90
91    - ask for a picture named 'passport.jpg'.
92
93    If no picture was stored yet, we get a placeholder image when
94    asking for `passport.jpg`.
95
96    If none of the above applies, we return ``None``, most probably
97    resulting a :exc:`NotFound` exception.
98
99    """
100    grok.context(IApplicant)
101    def traverse(self, name):
102        passport_filename = getattr(self.context.passport, 'filename', None)
103        if name == passport_filename:
104            return self.context.passport
105        if name == 'passport.jpg':
106            if self.context.passport is not None:
107                return self.context.passport
108        return
109
110class ApplicantFactory(grok.GlobalUtility):
111    """A factory for applicants.
112    """
113    grok.implements(IFactory)
114    grok.name(u'waeup.Applicant')
115    title = u"Create a new applicant.",
116    description = u"This factory instantiates new applicant instances."
117
118    def __call__(self, *args, **kw):
119        return Applicant()
120
121    def getInterfaces(self):
122        return implementedBy(Applicant)
Note: See TracBrowser for help on using the repository browser.