source: WAeUP_SRP/trunk/exportimport.py @ 10447

Last change on this file since 10447 was 5614, checked in by Henrik Bettermann, 14 years ago

Implement first part of new accommodation allocation module. This part contains the new student accommodation catalog which replaces the accommodation objects.

  • Property svn:keywords set to Id
File size: 9.4 KB
Line 
1#-*- mode: python; mode: fold -*-
2# $Id: exportimport.py 5614 2010-12-27 07:25:11Z 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        pins = getattr(campus,'pins',None)
83        campus.manage_setLocalGroupRoles(groupid='CampusOfficers',
84                                         roles=('SectionOfficer',))
85        if academics is not None:
86            academics.manage_setLocalGroupRoles(groupid='role:Authenticated',
87                                         roles=('SectionReader',))
88            academics.manage_setLocalGroupRoles(groupid='AcademicsOfficers',
89                                         roles=('SectionOfficer',))
90        if students is not None:
91            students.manage_setLocalGroupRoles(groupid = 'StudentsReaders',
92                                              roles=('SectionReader',))
93            students.manage_setLocalGroupRoles(groupid = 'ClearanceOfficers',
94                                              roles=('SectionReader',))
95            students.manage_setLocalGroupRoles(groupid = 'CourseAdvisers',
96                                              roles=('SectionReader',))
97            students.manage_setLocalGroupRoles(groupid='MemberAdmins',
98                                         roles=('SectionOfficer',))
99            students.manage_setLocalGroupRoles(groupid='StudentsOfficers',
100                                         roles=('SectionOfficer',))
101            students.manage_setLocalGroupRoles(groupid = 'role:Student',
102                                              roles=('SectionReader',))
103        if accommodation is not None:
104            accommodation.manage_setLocalGroupRoles(groupid='role:Student',
105                                         roles=('SectionReader',))
106            accommodation.manage_setLocalGroupRoles(groupid='AccommodationOfficers',
107                                         roles=('SectionOfficer',))
108        if uploads is not None:
109            uploads.manage_setLocalGroupRoles(groupid='UploadOfficers',
110                                         roles=('SectionOfficer',))
111        if pins is not None:
112            uploads.manage_setLocalGroupRoles(groupid='AccessCodeOfficers',
113                                         roles=('SectionOfficer',))                                         
114    members = getattr(site.portal_directories,'members')
115    if members is not None:
116        members.manage_setLocalGroupRoles(groupid='MemberAdmins',
117                                         roles=('SectionOfficer',))
118    students = getattr(site.portal_directories,'students')
119    if students is not None:
120        students.manage_setLocalGroupRoles(groupid='MemberAdmins',
121                                         roles=('SectionOfficer',))
122    waeup_stacking_dir = getattr(site.portal_directories,'waeup_stacking_dir')
123    if waeup_stacking_dir is not None:
124        waeup_stacking_dir.manage_setLocalGroupRoles(groupid='MemberAdmins',
125                                         roles=('SectionOfficer',))
126
127##    pm.setLocalGroupRoles(campus.academics,['role:Authenticated',
128##                                           ],'SectionReader')
129    importWAeUPTable(site.portal_accommodation, '', context,'accommodation')
130    importWAeUPTable(site.courses_catalog, '', context,'courses_catalog')
131    importWAeUPTable(site.certificates_catalog, '', context,'certificates_catalog')
132    importWAeUPTable(site.payments_catalog, '', context,'payments_catalog')
133    importWAeUPTable(site.online_payments_import, '', context,'online_payments_import')
134    importWAeUPTable(site.portal_pins, '', context,'pins')
135    importWAeUPTable(site.portal_pumeresults, '', context,'pumeresults')
136    importWAeUPTable(site.returning_import, '', context,'returning_import')
137    importWAeUPTable(site.results_import, '', context,'results_import')
138    importWAeUPTable(site.students_catalog, '', context,'students_catalog')
139    importWAeUPTable(site.applicants_catalog, '', context,'applicants_catalog')
140    importWAeUPTable(site.course_results, '', context,'course_results')
141    importWAeUPTable(site.portal_catalog, '', context,'portal_catalog')
142    importWAeUPTable(site.portal_catalog_real, '', context,'portal_catalog_real')
143    importWAeUPTable(site.removed_student_ids, '', context,'removed_student_ids')
144    importWAeUPTable(site.accommodation_catalog, '', context,'accommodation_catalog')
145
146    site.students_catalog.manage_setLocalGroupRoles(groupid='CampusOfficers',
147                                         roles=('SectionOfficer',))
148    site.payments_catalog.manage_setLocalGroupRoles(groupid='CampusOfficers',
149                                         roles=('SectionOfficer',))
150    site.applicants_catalog.manage_setLocalGroupRoles(groupid='CampusOfficers',
151                                         roles=('SectionOfficer',))
152    site.course_results.manage_setLocalGroupRoles(groupid='CampusOfficers',
153                                         roles=('SectionOfficer',))
154
155    site.portal_catalog.id = 'portal_catalog'
156    site.portal_catalog_real.id = 'portal_catalog_real'
157
158
159from Products.CPSCore.exportimport.catalog import CatalogToolXMLAdapter
160#from Products.GenericSetup.ZCatalog.exportimport import ZCatalogXMLAdapter
161
162from interfaces import IWAeUPTable
163
164class WAeUPTableXMLAdapter(CatalogToolXMLAdapter):
165#class WAeUPTableXMLAdapter(ZCatalogXMLAdapter):
166    __used_for__ = IWAeUPTable
167    _LOGGER_ID = 'waeup_table'
168
169##    def _importNode(self, node):
170##        """Import the object from the DOM node.
171##        """
172##        if self.environ.shouldPurge():
173##            self._purgeProperties()
174##            self._purgeObjects()
175##            self._purgeIndexes()
176##            self._purgeColumns()
177##
178##        self._logger.info('Catalog imported.')
179# This the XMLAdapter itself. It encodes the im- / export logic that is specific
180# to our tool. `im- / exportObjects` functions will find it thanks to the zope
181# components machinery and the associations made in the configure.zcml file.
182
183##class WAeUPXMLAdapter(XMLAdapterBase, PropertyManagerHelpers):
184##    """XML importer and exporter for the WAeUP tool.
185##
186##    Hence this XMLAdapter is really simple. To get more complete examples of
187##    what XMLAdapters are meant to do, please have a look at the
188##    CPSSkins.exportimport.py or CPSDirectory.exportimport.py files, for
189##    instance.
190##    """
191##
192##    adapts(IWAeUPTool, ISetupEnviron)
193##    implements(IBody)
194##
195##    _LOGGER_ID = NAME
196##    name = NAME
197##
198##    def _exportNode(self):
199##        """Export the object as a DOM node.
200##        """
201##        node = self._getObjectNode('object')
202##        node.appendChild(self._extractProperties())
203##        self._logger.info("WAeUP tool exported.")
204##        return node
205##
206##    def _importNode(self, node):
207##        """Import the object from the DOM node.
208##        """
209##        if self.environ.shouldPurge():
210##            self._purgeProperties()
211##        self._initProperties(node)
212##        self._logger.info("WAeUP tool imported.")
213##
Note: See TracBrowser for help on using the repository browser.