~ubuntu-branches/ubuntu/raring/schooltool.intervention/raring

« back to all changes in this revision

Viewing changes to src/schooltool/intervention/catalog.py

  • Committer: Gediminas Paulauskas
  • Date: 2011-09-19 16:56:45 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: menesis@pov.lt-20110919165645-718diuud5tc4mjsx
Tags: 0.5.0-0ubuntu1
* New upstream release.
* debian/rules: move gradebook to Suggests.

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
 
20
20
from zope.catalog.interfaces import ICatalog
21
21
from zope.component import getUtility
 
22
from zope.intid.interfaces import IIntIds
22
23
from zope.security.proxy import removeSecurityProxy
23
24
 
24
 
from zc.catalog.catalogindex import ValueIndex
25
 
from zc.catalog.extentcatalog import Catalog
26
 
from zc.catalog.extentcatalog import FilterExtent
27
 
 
 
25
from schooltool.app.catalog import AttributeCatalog
 
26
from schooltool.contact.interfaces import IContact
 
27
from schooltool.person.interfaces import IPerson
28
28
from schooltool.table.catalog import ConvertingIndex
29
 
from schooltool.table.catalog import FilterImplementing
30
 
from schooltool.utility.utility import UtilitySetUp
31
 
 
32
 
import interfaces
33
 
 
34
 
 
35
 
INTERVENTION_CATALOG_KEY = 'schooltool.intervention'
36
 
 
37
 
 
38
 
def catalogFactory():
39
 
    return Catalog(FilterExtent(FilterImplementing(
40
 
        interfaces.IInterventionMarker)))
41
 
 
42
 
 
43
 
def catalogSetUp(catalog):
44
 
    catalog['first_name'] = ConvertingIndex(converter=getStudentFirstName)
45
 
    catalog['last_name'] = ConvertingIndex(converter=getStudentLastName)
46
 
    catalog['persons_responsible'] = ConvertingIndex(
47
 
        converter=interfaces.IInterventionPersonsResponsible)
48
 
    catalog['created'] = ValueIndex('created')
49
 
    catalog['schoolYearId'] = ConvertingIndex(converter=getSchoolYearId)
50
 
    catalog['intervention_type'] = ConvertingIndex(
51
 
        converter=interfaces.IInterventionType)
52
 
 
53
 
 
54
 
catalogSetUpSubscriber = UtilitySetUp(
55
 
    catalogFactory, ICatalog, INTERVENTION_CATALOG_KEY, setUp=catalogSetUp)
56
 
 
57
 
 
58
 
def getInterventionCatalog(container):
59
 
    return getUtility(ICatalog, INTERVENTION_CATALOG_KEY)
 
29
 
 
30
import interfaces, intervention
 
31
 
 
32
 
 
33
class InterventionCatalog(AttributeCatalog):
 
34
    version = '1 - replaced catalog utility'
 
35
    interface = interfaces.IInterventionMarker
 
36
    attributes = ('created',)
 
37
 
 
38
    def setIndexes(self, catalog):
 
39
        super(InterventionCatalog, self).setIndexes(catalog)
 
40
        catalog['first_name'] = ConvertingIndex(converter=getStudentFirstName)
 
41
        catalog['last_name'] = ConvertingIndex(converter=getStudentLastName)
 
42
        catalog['persons_responsible'] = ConvertingIndex(
 
43
            converter=interfaces.IInterventionPersonsResponsible)
 
44
        catalog['schoolYearId'] = ConvertingIndex(converter=getSchoolYearId)
 
45
        catalog['intervention_type'] = ConvertingIndex(
 
46
            converter=interfaces.IInterventionType)
 
47
 
 
48
 
 
49
getInterventionCatalog = InterventionCatalog.get
60
50
 
61
51
 
62
52
def getStudentFirstName(obj):
63
 
    return obj.student.first_name
 
53
    return IContact(IPerson(obj)).first_name
64
54
 
65
55
 
66
56
def getStudentLastName(obj):
67
 
    return obj.student.last_name
 
57
    return IContact(IPerson(obj)).last_name
68
58
 
69
59
 
70
60
def getMessagePersonsResponsible(obj):
71
 
    return obj.recipients
 
61
    util = getUtility(IIntIds)
 
62
    return [util.getId(contact) for contact in obj.recipients]
72
63
 
73
64
 
74
65
def getGoalPersonsResponsible(obj):
75
66
    # XXX not using removeSecurityProxy caused ZODB to crash
76
67
    # Cannot pickle <type 'zope.security._proxy._Proxy'> objects
77
 
    return removeSecurityProxy(obj.persons_responsible)
 
68
    util = getUtility(IIntIds)
 
69
    return [util.getId(contact)
 
70
            for contact in removeSecurityProxy(obj.persons_responsible)]
78
71
 
79
72
 
80
73
def getMessageType(obj):
103
96
        value = value[:47] + '...'
104
97
    return value
105
98
 
 
99
 
 
100
def updatePersonsResponsibleIndex(event):
 
101
    if event.rel_type != intervention.URIResponsible:
 
102
        return
 
103
    if (interfaces.IInterventionMessage.providedBy(event.participant1) or
 
104
        interfaces.IInterventionGoal.providedBy(event.participant1)):
 
105
        obj = event.participant1
 
106
    else:
 
107
        obj = event.participant2
 
108
 
 
109
    util = getUtility(IIntIds)
 
110
    catalog = getInterventionCatalog()
 
111
    if catalog is None:
 
112
        return
 
113
    obj_intid = util.queryId(obj)
 
114
    if obj_intid is not None and obj_intid in catalog.extent:
 
115
        catalog.index_doc(obj_intid, obj)
 
116