source: WAeUP_SRP/trunk/exportimport.py @ 5036

Last change on this file since 5036 was 4302, checked in by Henrik Bettermann, 15 years ago

store ids when removing students and check for removed ids when csdding new students

WAeUPTable alraedy contains methods for position ind course calculation

  • Property svn:keywords set to Id
File size: 9.1 KB
Line 
1#-*- mode: python; mode: fold -*-
2# $Id: exportimport.py 4302 2009-06-17 13:53:22Z henrik $
3"""WAeUP Tool XML Adapter.
4
5An XML adapter tells the GenericSetup machinery howto im- / export persistent
6configuration that is relative to a specific CMF component such as our WAeUP
7Tool.
8
9GenericSetup uses the Zope3 interfaces and components machinery to find the
10right XML adapter for the right object. This is why we flagged our waeup tool
11with the `implements(IWAeUPTool)` class attribute and made an adapter
12association in the `configure.zcml` file.
13"""
14import csv,re
15
16# Zope3 component architecture
17from zope.app import zapi
18from zope.component import adapts
19from zope.interface import implements
20
21# Standard GenericSetup base classes and functions
22from Products.GenericSetup.utils import exportObjects
23from Products.GenericSetup.utils import importObjects
24from Products.GenericSetup.utils import XMLAdapterBase
25from Products.GenericSetup.utils import PropertyManagerHelpers
26
27from Products.CMFCore.utils import getToolByName
28
29# GenericSetup multi adapts a class that implement IWAeUP and a particular
30# ISetupEnvironment to and IBody (piece of XML configuration).
31from Products.GenericSetup.interfaces import IBody
32from Products.GenericSetup.interfaces import ISetupEnviron
33from Products.WAeUP_SRP.interfaces import IWAeUPTool
34import Globals
35p_home = Globals.package_home(globals())
36i_home = Globals.INSTANCE_HOME
37
38TOOL = 'portal_waeup'
39NAME = 'waeup'
40
41def importWAeUPTable(obj, parent_path, context, name):
42    """ Import subobjects recursively.
43    """
44    importer = zapi.queryMultiAdapter((obj, context), IBody)
45
46    path = '%s%s' % (parent_path, obj.getId().replace(' ', '_'))
47    __traceback_info__ = path
48    if importer:
49        path = '%s%s' % (parent_path, name)
50        filename = '%s%s' % (path, importer.suffix)
51        body = context.readDataFile(filename)
52        if body is not None:
53            importer.filename = filename # for error reporting
54            importer.body = body
55
56    if getattr(obj, 'objectValues', False):
57        for sub in obj.objectValues():
58            importObjects(sub, path+'/', context)
59
60def exportWAeUP(context):
61    """Export our WAeUP tool configuration
62    """
63    site = context.getSite()
64    tool = getattr(context,"campus",None)
65    if tool is None:
66        logger = context.getLogger(NAME)
67        logger.info("Nothing to export.")
68        return
69    exportObjects(tool, '', context)
70
71def importWAeUP(context):
72    """Import WAeUP tool configuration
73    """
74    site = context.getSite()
75    pm = site.portal_membership
76    campus = getattr(site.portal_url.getPortalObject(),'campus',None)
77    if campus is not None:
78        academics = getattr(campus,'academics',None)
79        students = getattr(campus,'students',None)
80        accommodation = getattr(campus,'accommodation',None)
81        uploads = getattr(campus,'uploads',None)
82        campus.manage_setLocalGroupRoles(groupid='CampusOfficers',
83                                         roles=('SectionOfficer',))
84        if academics is not None:
85            academics.manage_setLocalGroupRoles(groupid='role:Authenticated',
86                                         roles=('SectionReader',))
87            academics.manage_setLocalGroupRoles(groupid='AcademicsOfficers',
88                                         roles=('SectionOfficer',))
89        if students is not None:
90            students.manage_setLocalGroupRoles(groupid = 'StudentsReaders',
91                                              roles=('SectionReader',))
92            students.manage_setLocalGroupRoles(groupid = 'ClearanceOfficers',
93                                              roles=('SectionReader',))
94            students.manage_setLocalGroupRoles(groupid = 'CourseAdvisers',
95                                              roles=('SectionReader',))
96            students.manage_setLocalGroupRoles(groupid='MemberAdmins',
97                                         roles=('SectionOfficer',))
98            students.manage_setLocalGroupRoles(groupid='StudentsOfficers',
99                                         roles=('SectionOfficer',))
100            students.manage_setLocalGroupRoles(groupid = 'role:Student',
101                                              roles=('SectionReader',))
102        if accommodation is not None:
103            accommodation.manage_setLocalGroupRoles(groupid='role:Student',
104                                         roles=('SectionReader',))
105            accommodation.manage_setLocalGroupRoles(groupid='AccommodationOfficers',
106                                         roles=('SectionOfficer',))
107        if uploads is not None:
108            uploads.manage_setLocalGroupRoles(groupid='UploadOfficers',
109                                         roles=('SectionOfficer',))
110    members = getattr(site.portal_directories,'members')
111    if members is not None:
112        members.manage_setLocalGroupRoles(groupid='MemberAdmins',
113                                         roles=('SectionOfficer',))
114    students = getattr(site.portal_directories,'students')
115    if students is not None:
116        students.manage_setLocalGroupRoles(groupid='MemberAdmins',
117                                         roles=('SectionOfficer',))
118    waeup_stacking_dir = getattr(site.portal_directories,'waeup_stacking_dir')
119    if waeup_stacking_dir is not None:
120        waeup_stacking_dir.manage_setLocalGroupRoles(groupid='MemberAdmins',
121                                         roles=('SectionOfficer',))
122
123##    pm.setLocalGroupRoles(campus.academics,['role:Authenticated',
124##                                           ],'SectionReader')
125    importWAeUPTable(site.portal_accommodation, '', context,'accommodation')
126    importWAeUPTable(site.courses_catalog, '', context,'courses_catalog')
127    importWAeUPTable(site.certificates_catalog, '', context,'certificates_catalog')
128    importWAeUPTable(site.payments_catalog, '', context,'payments_catalog')
129    importWAeUPTable(site.online_payments_import, '', context,'online_payments_import')
130    importWAeUPTable(site.portal_pins, '', context,'pins')
131    importWAeUPTable(site.portal_pumeresults, '', context,'pumeresults')
132    importWAeUPTable(site.returning_import, '', context,'returning_import')
133    importWAeUPTable(site.results_import, '', context,'results_import')
134    importWAeUPTable(site.students_catalog, '', context,'students_catalog')
135    importWAeUPTable(site.applicants_catalog, '', context,'applicants_catalog')
136    importWAeUPTable(site.course_results, '', context,'course_results')
137    importWAeUPTable(site.portal_catalog, '', context,'portal_catalog')
138    importWAeUPTable(site.portal_catalog_real, '', context,'portal_catalog_real')
139    importWAeUPTable(site.removed_student_ids, '', context,'removed_student_ids')
140
141    site.students_catalog.manage_setLocalGroupRoles(groupid='CampusOfficers',
142                                         roles=('SectionOfficer',))
143    site.payments_catalog.manage_setLocalGroupRoles(groupid='CampusOfficers',
144                                         roles=('SectionOfficer',))
145    site.applicants_catalog.manage_setLocalGroupRoles(groupid='CampusOfficers',
146                                         roles=('SectionOfficer',))
147    site.course_results.manage_setLocalGroupRoles(groupid='CampusOfficers',
148                                         roles=('SectionOfficer',))
149
150    site.portal_catalog.id = 'portal_catalog'
151    site.portal_catalog_real.id = 'portal_catalog_real'
152
153
154from Products.CPSCore.exportimport.catalog import CatalogToolXMLAdapter
155#from Products.GenericSetup.ZCatalog.exportimport import ZCatalogXMLAdapter
156
157from interfaces import IWAeUPTable
158
159class WAeUPTableXMLAdapter(CatalogToolXMLAdapter):
160#class WAeUPTableXMLAdapter(ZCatalogXMLAdapter):
161    __used_for__ = IWAeUPTable
162    _LOGGER_ID = 'waeup_table'
163
164##    def _importNode(self, node):
165##        """Import the object from the DOM node.
166##        """
167##        if self.environ.shouldPurge():
168##            self._purgeProperties()
169##            self._purgeObjects()
170##            self._purgeIndexes()
171##            self._purgeColumns()
172##
173##        self._logger.info('Catalog imported.')
174# This the XMLAdapter itself. It encodes the im- / export logic that is specific
175# to our tool. `im- / exportObjects` functions will find it thanks to the zope
176# components machinery and the associations made in the configure.zcml file.
177
178##class WAeUPXMLAdapter(XMLAdapterBase, PropertyManagerHelpers):
179##    """XML importer and exporter for the WAeUP tool.
180##
181##    Hence this XMLAdapter is really simple. To get more complete examples of
182##    what XMLAdapters are meant to do, please have a look at the
183##    CPSSkins.exportimport.py or CPSDirectory.exportimport.py files, for
184##    instance.
185##    """
186##
187##    adapts(IWAeUPTool, ISetupEnviron)
188##    implements(IBody)
189##
190##    _LOGGER_ID = NAME
191##    name = NAME
192##
193##    def _exportNode(self):
194##        """Export the object as a DOM node.
195##        """
196##        node = self._getObjectNode('object')
197##        node.appendChild(self._extractProperties())
198##        self._logger.info("WAeUP tool exported.")
199##        return node
200##
201##    def _importNode(self, node):
202##        """Import the object from the DOM node.
203##        """
204##        if self.environ.shouldPurge():
205##            self._purgeProperties()
206##        self._initProperties(node)
207##        self._logger.info("WAeUP tool imported.")
208##
Note: See TracBrowser for help on using the repository browser.