[200] | 1 | #-*- mode: python; mode: fold -*- |
---|
[486] | 2 | # $Id: exportimport.py 3299 2008-03-09 16:33:32Z henrik $ |
---|
[199] | 3 | """WAeUP Tool XML Adapter. |
---|
| 4 | |
---|
| 5 | An XML adapter tells the GenericSetup machinery howto im- / export persistent |
---|
| 6 | configuration that is relative to a specific CMF component such as our WAeUP |
---|
| 7 | Tool. |
---|
| 8 | |
---|
| 9 | GenericSetup uses the Zope3 interfaces and components machinery to find the |
---|
| 10 | right XML adapter for the right object. This is why we flagged our waeup tool |
---|
| 11 | with the `implements(IWAeUPTool)` class attribute and made an adapter |
---|
| 12 | association in the `configure.zcml` file. |
---|
| 13 | """ |
---|
[238] | 14 | import csv,re |
---|
[199] | 15 | |
---|
| 16 | # Zope3 component architecture |
---|
[502] | 17 | from zope.app import zapi |
---|
[199] | 18 | from zope.component import adapts |
---|
| 19 | from zope.interface import implements |
---|
| 20 | |
---|
| 21 | # Standard GenericSetup base classes and functions |
---|
| 22 | from Products.GenericSetup.utils import exportObjects |
---|
| 23 | from Products.GenericSetup.utils import importObjects |
---|
| 24 | from Products.GenericSetup.utils import XMLAdapterBase |
---|
| 25 | from Products.GenericSetup.utils import PropertyManagerHelpers |
---|
| 26 | |
---|
| 27 | from 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). |
---|
| 31 | from Products.GenericSetup.interfaces import IBody |
---|
| 32 | from Products.GenericSetup.interfaces import ISetupEnviron |
---|
[274] | 33 | from Products.WAeUP_SRP.interfaces import IWAeUPTool |
---|
[238] | 34 | import Globals |
---|
| 35 | p_home = Globals.package_home(globals()) |
---|
| 36 | i_home = Globals.INSTANCE_HOME |
---|
[199] | 37 | |
---|
| 38 | TOOL = 'portal_waeup' |
---|
| 39 | NAME = 'waeup' |
---|
| 40 | |
---|
[502] | 41 | def importWAeUPTable(obj, parent_path, context, name): |
---|
| 42 | """ Import subobjects recursively. |
---|
| 43 | """ |
---|
| 44 | importer = zapi.queryMultiAdapter((obj, context), IBody) |
---|
[950] | 45 | |
---|
[502] | 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 | |
---|
[199] | 60 | def exportWAeUP(context): |
---|
| 61 | """Export our WAeUP tool configuration |
---|
| 62 | """ |
---|
| 63 | site = context.getSite() |
---|
[282] | 64 | tool = getattr(context,"campus",None) |
---|
[199] | 65 | if tool is None: |
---|
| 66 | logger = context.getLogger(NAME) |
---|
| 67 | logger.info("Nothing to export.") |
---|
| 68 | return |
---|
| 69 | exportObjects(tool, '', context) |
---|
| 70 | |
---|
| 71 | def importWAeUP(context): |
---|
| 72 | """Import WAeUP tool configuration |
---|
| 73 | """ |
---|
| 74 | site = context.getSite() |
---|
[350] | 75 | pm = site.portal_membership |
---|
[940] | 76 | campus = getattr(site.portal_url.getPortalObject(),'campus',None) |
---|
| 77 | if campus is not None: |
---|
[949] | 78 | academics = getattr(campus,'academics',None) |
---|
| 79 | students = getattr(campus,'students',None) |
---|
[963] | 80 | accommodation = getattr(campus,'accommodation',None) |
---|
[3299] | 81 | uploads = getattr(campus,'uploads',None) |
---|
[1414] | 82 | campus.manage_setLocalGroupRoles(groupid='CampusOfficers', |
---|
[1432] | 83 | roles=('SectionOfficer',)) |
---|
[949] | 84 | if academics is not None: |
---|
[955] | 85 | academics.manage_setLocalGroupRoles(groupid='role:Authenticated', |
---|
[926] | 86 | roles=('SectionReader',)) |
---|
[1414] | 87 | academics.manage_setLocalGroupRoles(groupid='AcademicsOfficers', |
---|
[1432] | 88 | roles=('SectionOfficer',)) |
---|
[949] | 89 | if students is not None: |
---|
[2304] | 90 | students.manage_setLocalGroupRoles(groupid = 'StudentsReaders', |
---|
| 91 | roles=('SectionReader',)) |
---|
[962] | 92 | students.manage_setLocalGroupRoles(groupid = 'ClearanceOfficers', |
---|
[955] | 93 | roles=('SectionReader',)) |
---|
[1515] | 94 | students.manage_setLocalGroupRoles(groupid = 'CourseAdvisers', |
---|
[1625] | 95 | roles=('SectionReader',)) |
---|
[1221] | 96 | students.manage_setLocalGroupRoles(groupid='MemberAdmins', |
---|
[1414] | 97 | roles=('SectionOfficer',)) |
---|
| 98 | students.manage_setLocalGroupRoles(groupid='StudentsOfficers', |
---|
[1432] | 99 | roles=('SectionOfficer',)) |
---|
[962] | 100 | students.manage_setLocalGroupRoles(groupid = 'role:Student', |
---|
| 101 | roles=('SectionReader',)) |
---|
[963] | 102 | if accommodation is not None: |
---|
| 103 | accommodation.manage_setLocalGroupRoles(groupid='role:Student', |
---|
[1221] | 104 | roles=('SectionReader',)) |
---|
[1414] | 105 | accommodation.manage_setLocalGroupRoles(groupid='AccommodationOfficers', |
---|
[1432] | 106 | roles=('SectionOfficer',)) |
---|
[3299] | 107 | if uploads is not None: |
---|
| 108 | uploads.manage_setLocalGroupRoles(groupid='UploadOfficers', |
---|
[3277] | 109 | roles=('SectionOfficer',)) |
---|
[955] | 110 | members = getattr(site.portal_directories,'members') |
---|
| 111 | if members is not None: |
---|
[957] | 112 | members.manage_setLocalGroupRoles(groupid='MemberAdmins', |
---|
[955] | 113 | roles=('SectionOfficer',)) |
---|
[1432] | 114 | students = getattr(site.portal_directories,'students') |
---|
| 115 | if students is not None: |
---|
| 116 | students.manage_setLocalGroupRoles(groupid='MemberAdmins', |
---|
[1433] | 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', |
---|
[1515] | 121 | roles=('SectionOfficer',)) |
---|
[956] | 122 | |
---|
[926] | 123 | ## pm.setLocalGroupRoles(campus.academics,['role:Authenticated', |
---|
| 124 | ## ],'SectionReader') |
---|
[502] | 125 | importWAeUPTable(site.portal_accommodation, '', context,'accommodation') |
---|
[1146] | 126 | importWAeUPTable(site.courses_catalog, '', context,'courses_catalog') |
---|
| 127 | importWAeUPTable(site.payments_catalog, '', context,'payments_catalog') |
---|
[1625] | 128 | importWAeUPTable(site.online_payments_import, '', context,'online_payments_import') |
---|
[502] | 129 | importWAeUPTable(site.portal_pins, '', context,'pins') |
---|
[966] | 130 | importWAeUPTable(site.portal_pumeresults, '', context,'pumeresults') |
---|
[1151] | 131 | importWAeUPTable(site.returning_import, '', context,'returning_import') |
---|
[1146] | 132 | importWAeUPTable(site.results_import, '', context,'results_import') |
---|
[2086] | 133 | importWAeUPTable(site.students_catalog, '', context,'students_catalog') |
---|
[2094] | 134 | importWAeUPTable(site.applicants_catalog, '', context,'applicants_catalog') |
---|
[2086] | 135 | importWAeUPTable(site.course_results, '', context,'course_results') |
---|
[2257] | 136 | importWAeUPTable(site.portal_catalog, '', context,'portal_catalog') |
---|
[1935] | 137 | importWAeUPTable(site.portal_catalog_real, '', context,'portal_catalog_real') |
---|
[3299] | 138 | |
---|
[2651] | 139 | site.students_catalog.manage_setLocalGroupRoles(groupid='CampusOfficers', |
---|
| 140 | roles=('SectionOfficer',)) |
---|
[3006] | 141 | site.payments_catalog.manage_setLocalGroupRoles(groupid='CampusOfficers', |
---|
| 142 | roles=('SectionOfficer',)) |
---|
| 143 | site.applicants_catalog.manage_setLocalGroupRoles(groupid='CampusOfficers', |
---|
[3299] | 144 | roles=('SectionOfficer',)) |
---|
[3006] | 145 | site.course_results.manage_setLocalGroupRoles(groupid='CampusOfficers', |
---|
[3299] | 146 | roles=('SectionOfficer',)) |
---|
[2304] | 147 | |
---|
[2258] | 148 | site.portal_catalog.id = 'portal_catalog' |
---|
| 149 | site.portal_catalog_real.id = 'portal_catalog_real' |
---|
[950] | 150 | |
---|
[2304] | 151 | |
---|
[502] | 152 | from Products.CPSCore.exportimport.catalog import CatalogToolXMLAdapter |
---|
| 153 | #from Products.GenericSetup.ZCatalog.exportimport import ZCatalogXMLAdapter |
---|
[363] | 154 | |
---|
| 155 | from interfaces import IWAeUPTable |
---|
| 156 | |
---|
[502] | 157 | class WAeUPTableXMLAdapter(CatalogToolXMLAdapter): |
---|
| 158 | #class WAeUPTableXMLAdapter(ZCatalogXMLAdapter): |
---|
[363] | 159 | __used_for__ = IWAeUPTable |
---|
| 160 | _LOGGER_ID = 'waeup_table' |
---|
| 161 | |
---|
[502] | 162 | ## def _importNode(self, node): |
---|
| 163 | ## """Import the object from the DOM node. |
---|
| 164 | ## """ |
---|
| 165 | ## if self.environ.shouldPurge(): |
---|
| 166 | ## self._purgeProperties() |
---|
| 167 | ## self._purgeObjects() |
---|
| 168 | ## self._purgeIndexes() |
---|
| 169 | ## self._purgeColumns() |
---|
| 170 | ## |
---|
| 171 | ## self._logger.info('Catalog imported.') |
---|
[199] | 172 | # This the XMLAdapter itself. It encodes the im- / export logic that is specific |
---|
| 173 | # to our tool. `im- / exportObjects` functions will find it thanks to the zope |
---|
| 174 | # components machinery and the associations made in the configure.zcml file. |
---|
| 175 | |
---|
[282] | 176 | ##class WAeUPXMLAdapter(XMLAdapterBase, PropertyManagerHelpers): |
---|
| 177 | ## """XML importer and exporter for the WAeUP tool. |
---|
| 178 | ## |
---|
| 179 | ## Hence this XMLAdapter is really simple. To get more complete examples of |
---|
| 180 | ## what XMLAdapters are meant to do, please have a look at the |
---|
| 181 | ## CPSSkins.exportimport.py or CPSDirectory.exportimport.py files, for |
---|
| 182 | ## instance. |
---|
| 183 | ## """ |
---|
| 184 | ## |
---|
| 185 | ## adapts(IWAeUPTool, ISetupEnviron) |
---|
| 186 | ## implements(IBody) |
---|
| 187 | ## |
---|
| 188 | ## _LOGGER_ID = NAME |
---|
| 189 | ## name = NAME |
---|
| 190 | ## |
---|
| 191 | ## def _exportNode(self): |
---|
| 192 | ## """Export the object as a DOM node. |
---|
| 193 | ## """ |
---|
| 194 | ## node = self._getObjectNode('object') |
---|
| 195 | ## node.appendChild(self._extractProperties()) |
---|
| 196 | ## self._logger.info("WAeUP tool exported.") |
---|
| 197 | ## return node |
---|
| 198 | ## |
---|
| 199 | ## def _importNode(self, node): |
---|
| 200 | ## """Import the object from the DOM node. |
---|
| 201 | ## """ |
---|
| 202 | ## if self.environ.shouldPurge(): |
---|
| 203 | ## self._purgeProperties() |
---|
| 204 | ## self._initProperties(node) |
---|
| 205 | ## self._logger.info("WAeUP tool imported.") |
---|
| 206 | ## |
---|