def _doRunExportSteps(self, steps): """ See ISetupTool. """ context = TarballExportContext(self) messages = {} marker = object() for step_id in steps: handler = self.getExportStep(step_id, marker) if handler is marker: raise ValueError('Invalid export step: %s' % step_id) if handler is None: msg = 'Step %s has an invalid export handler' % step_id logger = logging.getLogger('GenericSetup') logger.error(msg) messages[step_id] = msg else: messages[step_id] = handler(context) return { 'steps': steps, 'messages': messages, 'tarball': context.getArchive(), 'filename': context.getArchiveFilename() }
def _backup_profiles(context): """ Backup all profiles """ steps = context.listExportSteps() result = TarballExportContext(context) marker = object() for step_id in steps: handler = context.getExportStep(step_id, marker) if handler is marker: continue if handler is not None: try: handler(result) except Exception as err: logger.exception("Could not backup profile step %s: %s", step_id, err) continue filename = result.getArchiveFilename() tarball = result.getArchive() if not os.path.isdir(PATH): os.makedirs(PATH) path = os.path.join(PATH, filename) with open(path, 'w') as ofile: ofile.write(tarball)
def testPurgeMethod(self): sm = getSiteManager() context = TarballExportContext(self.portal.portal_setup) handler = getMultiAdapter((sm, context), IBody, name=u'plone.portlets') handler._purgePortlets() manager = queryUtility(IPortletManager, name=u"test.testcolumn") self.assertEqual(None, manager)
def __call__(self): """See ..interfaces.exportimport.IFormFolderExportView.__call__ """ ctx = TarballExportContext(self.context) self.request.RESPONSE.setHeader('Content-type', 'application/x-gzip') self.request.RESPONSE.setHeader( 'Content-disposition', 'attachment; filename=%s' % ctx.getArchiveFilename()) # export the structure treating the current form as our root context IFilesystemExporter(self.context).export(ctx, 'structure', True) return ctx.getArchive()
def __call__(self): """See ..interfaces.exportimport.IEasyFormExportView.__call__ """ ctx = TarballExportContext(self.context) response = self.request.RESPONSE disposition = 'attachment; filename="{0}-{1:{2}}.tar.gz"'.format( self.context.getId(), datetime.now(), '%Y%m%d%H%M%S') response.setHeader('Content-type', 'application/x-gzip') response.setHeader('Content-disposition', disposition) # export the structure treating the current form as our root context IFilesystemExporter(self.context).export(ctx, 'structure', True) return ctx.getArchive()
def test_export_standard(self): self.portal = self.layer['portal'] wf = self.portal.portal_workflow.plone_workflow context = TarballExportContext(self.portal.portal_setup) handler = getMultiAdapter((wf, context), IBody, name=u'collective.wtf') expected = plone_workflow_csv body = handler.body diff = '\n'.join( list( difflib.unified_diff(body.strip().splitlines(), expected.strip().splitlines()))) self.assertFalse(diff, diff)
def testExport(self): site = self.portal context = TarballExportContext(self.portal.portal_setup) exporter = getMultiAdapter((site, context), IBody, name=u'plone.contentrules') expected = """\ <?xml version="1.0"?> <contentrules> <rule name="test1" title="Test rule 1" description="A test rule" enabled="True" event="zope.lifecycleevent.interfaces.IObjectModifiedEvent" stop-after="False"> <conditions> <condition type="plone.conditions.PortalType"> <property name="check_types"> <element>Document</element> <element>News Item</element> </property> </condition> <condition type="plone.conditions.Role"> <property name="role_names"> <element>Manager</element> </property> </condition> </conditions> <actions> <action type="collective.contentrules.mail.actions.Mail"> <property name="mimetype">html</property> <property name="recipients">${owner_emails}</property> <property name="cc"></property> <property name="bcc">${contributor_emails}</property> <property name="source">${default_from_email}</property> <property name="message">Your content ${title} was modified.</property> <property name="model">collective.contentrules.mail.model.base</property> <property name="subject">Your content was modified</property> </action> </actions> </rule> <assignment name="test1" bubbles="False" enabled="True" location="/news"/> </contentrules> """ body = exporter.body self.assertEquals(expected.strip(), body.strip(), body)
def testExport(self): self.maxDiff = None sm = getSiteManager() context = TarballExportContext(self.portal.portal_setup) handler = getMultiAdapter((sm, context), IBody, name=u'plone.portlets') handler._purgePortlets() time.sleep(1) portal_setup = self.portal.portal_setup portal_setup.runAllImportStepsFromProfile('profile-plone.app.portlets:testing') expected = u"""\ <?xml version="1.0" encoding="utf-8"?> <portlets> <portletmanager name="test.testcolumn" type="plone.app.portlets.tests.test_configuration.ITestColumn"/> <portletmanager name="test.testcolumn2" type="plone.app.portlets.tests.test_configuration.ITestColumn"/> <portlet title="Test portlet" addview="portlets.test.Test" description="A test portlet"/> <assignment name="test.portlet6" category="group" key="Reviewers" manager="test.testcolumn" type="portlets.test.Test" visible="True"> <property name="test_bool"/> <property name="test_text"/> <property name="test_tuple"/> </assignment> <assignment name="test.portlet4" category="content_type" key="Folder" manager="test.testcolumn" type="portlets.test.Test" visible="True"> <property name="test_bool"/> <property name="test_text"/> <property name="test_tuple"/> </assignment> <assignment name="test.portlet5" category="content_type" key="Folder" manager="test.testcolumn" type="portlets.test.Test" visible="True"> <property name="test_bool"/> <property name="test_text"/> <property name="test_tuple"/> </assignment> <assignment name="test.portlet3" category="context" key="/" manager="test.testcolumn" type="portlets.test.Test" visible="True"> <property name="test_bool"/> <property name="test_text"/> <property name="test_tuple"/> </assignment> <assignment name="test.portlet2" category="context" key="/" manager="test.testcolumn" type="portlets.test.Test" visible="False"> <property name="test_bool">True</property> <property name="test_text">Test prop 2</property> <property name="test_tuple"/> </assignment> <assignment name="test.portlet1" category="context" key="/" manager="test.testcolumn" type="portlets.test.Test" visible="True"> <property name="test_bool">False</property> <property name="test_text">Test pröp 1</property> <property name="test_tuple"> <element>published</element> <element>private</element> </property> </assignment> <assignment name="navigation" category="context" key="/" manager="test.testcolumn2" type="portlets.Navigation" visible="True"> <property name="bottomLevel">0</property> <property name="currentFolderOnly">False</property> <property name="includeTop">False</property> <property name="name"></property> <property name="no_icons">False</property> <property name="no_thumbs">False</property> <property name="root_uid"/> <property name="thumb_scale"></property> <property name="topLevel">1</property> </assignment> <blacklist category="user" location="/" manager="test.testcolumn" status="acquire"/> <blacklist category="group" location="/" manager="test.testcolumn" status="show"/> <blacklist category="content_type" location="/" manager="test.testcolumn" status="block"/> <blacklist category="context" location="/" manager="test.testcolumn" status="acquire"/> <blacklist category="user" location="/" manager="test.testcolumn2" status="acquire"/> <blacklist category="group" location="/" manager="test.testcolumn2" status="acquire"/> <blacklist category="content_type" location="/" manager="test.testcolumn2" status="acquire"/> <blacklist category="context" location="/" manager="test.testcolumn2" status="acquire"/> </portlets> """ body = handler.body self.assertEqual(expected.strip(), body.strip().decode('utf8'))
def testExport(self): site = self.portal context = TarballExportContext(self.portal.portal_setup) exporter = getMultiAdapter((site, context), IBody, name=u'plone.contentrules') expected = """<?xml version="1.0"?> <contentrules> <rule name="test1" title="Test rule 1" cascading="False" description="A test rule" enabled="True" event="zope.lifecycleevent.interfaces.IObjectModifiedEvent" stop-after="False"> <conditions> <condition type="plone.conditions.PortalType"> <property name="check_types"> <element>Document</element> <element>News Item</element> </property> </condition> <condition type="plone.conditions.Role"> <property name="role_names"> <element>Manager</element> </property> </condition> </conditions> <actions> <action type="plone.actions.Notify"> <property name="message">A message: Hej då</property> <property name="message_type">info</property> </action> </actions> </rule> <rule name="test2" title="Test rule 2" cascading="False" description="Another test rule" enabled="False" event="zope.lifecycleevent.interfaces.IObjectModifiedEvent" stop-after="True"> <conditions> <condition type="plone.conditions.PortalType"> <property name="check_types"> <element>Event</element> </property> </condition> </conditions> <actions> <action type="plone.actions.Workflow"> <property name="transition">publish</property> </action> </actions> </rule> <rule name="test3" title="Test rule 3" cascading="False" description="Third test rule" enabled="True" event="zope.lifecycleevent.interfaces.IObjectMovedEvent" stop-after="False"> <conditions/> <actions/> </rule> <rule name="test4" title="Test rule 4" cascading="False" description="We move published events in a folder" enabled="True" event="Products.CMFCore.interfaces.IActionSucceededEvent" stop-after="True"> <conditions> <condition type="plone.conditions.PortalType"> <property name="check_types"> <element>Event</element> </property> </condition> <condition type="plone.conditions.WorkflowTransition"> <property name="wf_transitions"> <element>publish</element> </property> </condition> </conditions> <actions> <action type="plone.actions.Move"> <property name="target_folder">/events</property> </action> </actions> </rule> <rule name="test5" title="Test rule 5" cascading="True" description="Auto publish events" enabled="True" event="zope.lifecycleevent.interfaces.IObjectAddedEvent" stop-after="False"> <conditions> <condition type="plone.conditions.PortalType"> <property name="check_types"> <element>Event</element> </property> </condition> </conditions> <actions> <action type="plone.actions.Workflow"> <property name="transition">publish</property> </action> </actions> </rule> <assignment name="test3" bubbles="False" enabled="False" location="/news"/> <assignment name="test2" bubbles="True" enabled="False" location="/news"/> <assignment name="test1" bubbles="False" enabled="True" location="/news"/> <assignment name="test4" bubbles="False" enabled="False" location=""/> <assignment name="test5" bubbles="False" enabled="False" location=""/> </contentrules> """ body = exporter.body self.assertEqual(expected.strip(), body.strip(), body)
def test_export_imported(self): self.portal = self.layer['portal'] wf = self.portal.portal_workflow.test_wf context = TarballExportContext(self.portal.portal_setup) handler = getMultiAdapter((wf, context), IBody, name=u'collective.wtf') expected = """\ [Workflow] Id:,test_wf Title:,Test workflow Description:,Description of workflow Initial state:,state_one Type:,Workflow State variable:,defaults_to_review_state_but_here_is_another_one [State] Id:,state_one Title:,State one Description:,Description of state one Transitions,"to_state_two, to_state_three" Worklist:,State one worklist Worklist label:,Worklist stuff goes here Worklist guard permission:,Review portal content Worklist guard role:,Manager Worklist guard expression:,python:True==True Permissions,Acquire,Anonymous,Manager,Owner,Reader,Editor,Contributor,Member Access contents information,Y,N,Y,Y,N,N,N,N View,Y,N,Y,Y,N,N,N,Y Modify portal content,N,N,Y,N,N,N,N,N [State] Id:,state_three Title:,State three Description:,Description of state three Transitions,to_state_one Permissions,Acquire,Anonymous,Manager,Owner,Reader,Editor,Contributor,Member Access contents information,N,N,Y,Y,N,N,N,N View,N,N,Y,Y,N,N,N,N Modify portal content,N,N,N,N,N,N,N,N [State] Id:,state_two Title:,State two Description:,Description of state two Transitions,to_state_three Permissions,Acquire,Anonymous,Manager,Owner,Reader,Editor,Contributor,Member Access contents information,Y,N,Y,Y,N,N,N,N View,Y,N,Y,Y,N,N,N,N Modify portal content,N,N,Y,N,N,N,N,N [Transition] Id:,to_state_one Title:,Make it state one Description:,Make it go to state one Target state:,state_one URL:,%(portal_url)s/change_to_state_one Trigger:,User Guard permission:,Modify portal content Guard role:,Manager Guard expression:,python:True==True Script before:,shared_script Script after:,test_scripts.inline_test_one [Transition] Id:,to_state_three Title:,Make it state three Description:,Make it go to state one Target state:,state_three Trigger:,User [Transition] Id:,to_state_two Title:,Make it state two Description:,Make it go to state one Target state:,state_two Trigger:,User Guard permission:,Modify portal content Script before:,test_scripts.inline_test_two [Script] Id:,shared_script Type:,External Method Module:,collective.wtf.test_scripts Function:,script_section_test [Script] Id:,test_scripts.inline_test_one Type:,External Method Module:,collective.wtf.test_scripts Function:,inline_test_one [Script] Id:,test_scripts.inline_test_two Type:,External Method Module:,collective.wtf.test_scripts Function:,inline_test_two """ body = handler.body diff = '\n'.join( list( difflib.unified_diff(body.strip().splitlines(), expected.strip().splitlines()))) self.failIf(diff, diff)