source: WAeUP_SRP/branches/srpp_on_branch/exportimport.py @ 1979

Last change on this file since 1979 was 1221, checked in by Henrik Bettermann, 18 years ago

rolemap changed
condition for actions changed
delegetion of roles in students folder disabled

  • Property svn:keywords set to Id
File size: 6.4 KB
Line 
1#-*- mode: python; mode: fold -*-
2# $Id: exportimport.py 1221 2007-01-07 10:47:01Z 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        if academics is not None:
82            academics.manage_setLocalGroupRoles(groupid='role:Authenticated',
83                                         roles=('SectionReader',))
84        if students is not None:
85            students.manage_setLocalGroupRoles(groupid = 'ClearanceOfficers',
86                                              roles=('SectionReader',))
87            students.manage_setLocalGroupRoles(groupid='MemberAdmins',
88                                         roles=('SectionOfficer',))                                         
89            students.manage_setLocalGroupRoles(groupid = 'role:Student',
90                                              roles=('SectionReader',))
91        if accommodation is not None:
92            accommodation.manage_setLocalGroupRoles(groupid='role:Student',
93                                         roles=('SectionReader',))
94    members = getattr(site.portal_directories,'members')
95    if members is not None:
96        members.manage_setLocalGroupRoles(groupid='MemberAdmins',
97                                         roles=('SectionOfficer',))
98
99##    pm.setLocalGroupRoles(campus.academics,['role:Authenticated',
100##                                           ],'SectionReader')
101    importWAeUPTable(site.portal_accommodation, '', context,'accommodation')
102    importWAeUPTable(site.courses_catalog, '', context,'courses_catalog')
103    importWAeUPTable(site.payments_catalog, '', context,'payments_catalog')
104    importWAeUPTable(site.portal_pins, '', context,'pins')
105    importWAeUPTable(site.portal_pumeresults, '', context,'pumeresults')
106    importWAeUPTable(site.returning_import, '', context,'returning_import')
107    importWAeUPTable(site.results_import, '', context,'results_import')
108    importWAeUPTable(site.students_catalog, '', context,'students_catalog')
109
110from Products.CPSCore.exportimport.catalog import CatalogToolXMLAdapter
111#from Products.GenericSetup.ZCatalog.exportimport import ZCatalogXMLAdapter
112
113from interfaces import IWAeUPTable
114
115class WAeUPTableXMLAdapter(CatalogToolXMLAdapter):
116#class WAeUPTableXMLAdapter(ZCatalogXMLAdapter):
117    __used_for__ = IWAeUPTable
118    _LOGGER_ID = 'waeup_table'
119
120##    def _importNode(self, node):
121##        """Import the object from the DOM node.
122##        """
123##        if self.environ.shouldPurge():
124##            self._purgeProperties()
125##            self._purgeObjects()
126##            self._purgeIndexes()
127##            self._purgeColumns()
128##
129##        self._logger.info('Catalog imported.')
130# This the XMLAdapter itself. It encodes the im- / export logic that is specific
131# to our tool. `im- / exportObjects` functions will find it thanks to the zope
132# components machinery and the associations made in the configure.zcml file.
133
134##class WAeUPXMLAdapter(XMLAdapterBase, PropertyManagerHelpers):
135##    """XML importer and exporter for the WAeUP tool.
136##
137##    Hence this XMLAdapter is really simple. To get more complete examples of
138##    what XMLAdapters are meant to do, please have a look at the
139##    CPSSkins.exportimport.py or CPSDirectory.exportimport.py files, for
140##    instance.
141##    """
142##
143##    adapts(IWAeUPTool, ISetupEnviron)
144##    implements(IBody)
145##
146##    _LOGGER_ID = NAME
147##    name = NAME
148##
149##    def _exportNode(self):
150##        """Export the object as a DOM node.
151##        """
152##        node = self._getObjectNode('object')
153##        node.appendChild(self._extractProperties())
154##        self._logger.info("WAeUP tool exported.")
155##        return node
156##
157##    def _importNode(self, node):
158##        """Import the object from the DOM node.
159##        """
160##        if self.environ.shouldPurge():
161##            self._purgeProperties()
162##        self._initProperties(node)
163##        self._logger.info("WAeUP tool imported.")
164##
Note: See TracBrowser for help on using the repository browser.