Beispiel #1
0
    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(),
        }
Beispiel #2
0
    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()
        }
Beispiel #3
0
    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()}
Beispiel #4
0
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 __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()
Beispiel #6
0
    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()
Beispiel #8
0
    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)
Beispiel #9
0
    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)
Beispiel #11
0
    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'))
Beispiel #12
0
    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)
Beispiel #13
0
    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)