def setUp(self):
     """
     """
     app = self.layer['app']
     self.portal = self.layer['portal']
     self.request = self.layer['request']
     self.tool = getToolByName(self.portal, SUBSCRIPTION_TOOL, None)
     self.markRequestWithLayer()
     self.portal_url = self.portal.absolute_url()
     self.browser = Browser(app)
     self.browser.addHeader('Authorization', 'Basic %s:%s' % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD,))
     #Create some rules
     for x in ["first", "second", "third"]:
         #set some rules
         rule = Rule()
         rule.event = IObjectAddedEvent
         rule.title = "%s rule" % x
         #add the rules to rule's storage
         storage = getUtility(IRuleStorage)
         chooser = INameChooser(storage)
         storage[chooser.chooseName(None, rule)] = rule
         #set the action and add it to the rule
         action = MailSubscriptionsAction()
         action.subject = "Test %s action subject" % x
         rule.actions.append(action)
         email1 = "*****@*****.**"
         email2 = "*****@*****.**"
         self.tool.registerUser(action.actionUID, email1)
         self.tool.registerUser(action.actionUID, email2)
     transaction.commit()
    def __call__(self):
        self.errors = {}

        if self.request.get('form.actions.add', False):
            self.authorize()
            am = ActionManager()
            rule = am.get_rule(self.selected_transition)
            if rule is None:
                rule_id = generateRuleName(self.selected_transition)
                r = Rule()
                r.title = u"%s transition content rule" % (
                    self.selected_transition.id)
                r.description = """This content rule was automatically created
by the workflow manager to support actions on workflow transitions. If you want
the behavior to work as expected, do not modify this outside of the workflow
manager."""
                am.storage[rule_id] = r
                rule = RuleAdapter(r, self.selected_transition)
                rule.activate()

            editurl = '%s/%s/+action' % (self.portal.absolute_url(), rule.id)
            data = urlencode({
                ':action': self.request.get('action-type',
                                            'plone.actions.Mail'),
                'form.button.AddAction': 'Add'})

            return self.handle_response(load=editurl + '?' + data)
        else:
            return self.handle_response(tmpl=self.template)
Exemplo n.º 3
0
    def createRule(self, context, rule_context, rule_id, rule_title, rule_description,
                   rule_event, message, subject, for_types=None, area_id=None):
        """
        Enabled types are taken from the Plone registry, or you can manually set them using for_types
        Id of the area (used for getting the notification group) is taken from current area, or by area_id param
        """
        registry = queryUtility(IRegistry)
        settings = registry.forInterface(IGroupwareNotifySettings, check=False)
        #create the rule
        rule = Rule()
        rule.__name__ = rule_id
        rule.event = rule_event
        rule.title = rule_title
        rule.description = rule_description
        #add the rule to rule's storage
        storage = getUtility(IRuleStorage)
        # chooser = INameChooser(storage)
        if rule_id not in storage.keys():
            storage[rule_id] = rule
            #set the action and add it to the rule
            action = MailForGroupwareNotificationAction(area_id)
            if settings and settings.default_email_sender:
                action.source = settings.default_email_sender
            action.sender = None
            action.subject = subject
            action.message = message
            rule.actions.append(action)
            if not for_types:
                #set the condition and add it to the rule
                if settings:

                    behavior = ISelectableConstrainTypes(rule_context)
                    allowed_types = behavior.getLocallyAllowedTypes()
                    types_list =  set(allowed_types).difference(settings.black_list)
                    condition = PortalTypeCondition()
                    condition.check_types=tuple(types_list)
                    rule.conditions.append(condition)
            else:
                # explicit types
                condition=PortalTypeCondition()
                condition.check_types=tuple(for_types)
                rule.conditions.append(condition)

            logger.info('Created rule %s' % rule_id)

        #assignment
        rule_id=rule.id.replace('++rule++','')
        assignable = IRuleAssignmentManager(rule_context)
        assignable[rule_id] = RuleAssignment(rule_id)
        assignable[rule_id].bubbles=True
        get_assignments(storage[rule_id]).insert('/'.join(rule_context.getPhysicalPath()))
        logger.info('Enabled rule %s on %s' % (rule_id, rule_context.Title().decode('utf-8')))
 def create(self, transition):
     rule = self.get_rule(transition)
     if rule is None:
         id = generateRuleName(transition)
         r = Rule()
         r.title = u"%s transition content rule" % transition.id
         r.description = _(u"This content rule was automatically created "
                           u"the workflow manager to create actions on "
                           u"workflow events. If you want the behavior to "
                           u"work as expected, do not modify this out of "
                           u"the workflow manager.")
         self.storage[id] = r
         rule = RuleAdapter(r, transition)
         rule.activate()
     return rule
 def test_already_registered_email(self):
     """
     try to re-register an email for the same rule id
     """
     rule = Rule()
     rule.event = IObjectAddedEvent
     rule.title = "Test rule"
     #add the rule to rule's storage
     storage = getUtility(IRuleStorage)
     chooser = INameChooser(storage)
     storage[chooser.chooseName(None, rule)] = rule
     #set the action and add it to the rule
     action = MailSubscriptionsAction()
     action.subject = "Test Rule subject"
     action.message = "Test Rule message"
     rule.actions.append(action)
     tool = getToolByName(self.portal, SUBSCRIPTION_TOOL, None)
     email = "*****@*****.**"
     result, msg = tool.registerUser(action.actionUID, email)
     result2, msg2 = tool.registerUser(action.actionUID, email)
     self.assertTrue(result)
     self.assertFalse(result2)
     self.assertEquals(msg2, 'already_subscribed_error')
 def setUp(self):
     """
     """
     self.portal = self.layer['portal']
     self.request = self.layer['request']
     self.markRequestWithLayer()
     # Creating empty value for ACTUAL_URL to prevent KeyError
     self.request['ACTUAL_URL'] = ''
     app = self.layer['app']
     #set some things
     #create a test user with email
     self.acl_users = getToolByName(self.portal, 'acl_users')
     self.acl_users.userFolderAddUser('user1', 'secret', ['Member'], [])
     self.user1 = self.acl_users.getUser('user1')
     self.user1.setProperties(email='*****@*****.**')
     #now set some rules
     self.tool = getToolByName(self.portal, SUBSCRIPTION_TOOL, None)
     self.portal_url = self.portal.absolute_url()
     self.browser = Browser(app)
     for x in ["first", "second", "third"]:
         #set some rules
         rule = Rule()
         rule.event = IObjectAddedEvent
         rule.title = "%s rule" % x
         #add the rules to rule's storage
         storage = getUtility(IRuleStorage)
         chooser = INameChooser(storage)
         storage[chooser.chooseName(None, rule)] = rule
         #set the action and add it to the rule
         action = MailSubscriptionsAction()
         action.subject = "Test %s action subject" % x
         rule.actions.append(action)
     #set one only norobots question
     registry = queryUtility(IRegistry)
     settings = registry.forInterface(INorobotsWidgetSettings, check=False)
     settings.questions = (u'What is 4 + 4 ?::8',)
     transaction.commit()
Exemplo n.º 7
0
    def testInvokeAddView(self):
        element = getUtility(IRuleCondition, name='plone.conditions.Group')
        storage = getUtility(IRuleStorage)
        storage[u'foo'] = Rule()
        rule = self.portal.restrictedTraverse('++rule++foo')

        adding = getMultiAdapter((rule, self.portal.REQUEST),
                                 name='+condition')
        addview = getMultiAdapter((adding, self.portal.REQUEST),
                                  name=element.addview)

        addview.createAndAdd(data={'group_names': ['Manager']})

        e = rule.conditions[0]
        self.failUnless(isinstance(e, GroupCondition))
        self.assertEquals(['Manager'], e.group_names)
Exemplo n.º 8
0
    def testInvokeAddView(self):
        element = getUtility(IRuleAction,
                             name='sc.contentrules.actions.layout')
        storage = getUtility(IRuleStorage)
        storage[u'foo'] = Rule()
        rule = self.portal.restrictedTraverse('++rule++foo')

        adding = getMultiAdapter((rule, self.portal.REQUEST), name='+action')
        addview = getMultiAdapter((adding, self.portal.REQUEST),
                                  name=element.addview)

        addview.createAndAdd(data={'layout': 'folder_summary_view'})

        e = rule.actions[0]
        self.failUnless(isinstance(e, SetLayoutAction))
        self.assertEquals('folder_summary_view', e.layout)
Exemplo n.º 9
0
    def testInvokeAddView(self):
        element = getUtility(IRuleAction, name='plone.actions.MailGroup')
        storage = getUtility(IRuleStorage)
        storage[u'foo'] = Rule()
        rule = self.portal.restrictedTraverse('++rule++foo')

        adding = getMultiAdapter((rule, self.portal.REQUEST), name='+action')
        addview = getMultiAdapter((adding, self.portal.REQUEST),
                                  name=element.addview)
        self.assertTrue(isinstance(addview, MailGroupAddFormView))

        if IS_PLONE_5:
            addview.form_instance.update()
            output = addview.form_instance()
            self.assertIn('<h1>Substitutions</h1>', output)
            content = addview.form_instance.create(
                data={
                    'subject': 'My Subject',
                    'source': '*****@*****.**',
                    'groups': ['group1', 'group2'],
                    'members': [
                        default_user,
                    ],
                    'message': 'Hey, Oh!'
                })
            addview.form_instance.add(content)
        else:
            addview.createAndAdd(
                data={
                    'subject': 'My Subject',
                    'source': '*****@*****.**',
                    'groups': ['group1', 'group2'],
                    'members': [
                        default_user,
                    ],
                    'message': 'Hey, Oh!'
                })

        e = rule.actions[0]
        self.assertTrue(isinstance(e, MailGroupAction))
        self.assertEqual('My Subject', e.subject)
        self.assertEqual('*****@*****.**', e.source)
        self.assertEqual(['group1', 'group2'], e.groups)
        self.assertEqual([
            default_user,
        ], e.members)
        self.assertEqual('Hey, Oh!', e.message)
Exemplo n.º 10
0
    def testInvokeAddView(self):
        element = getUtility(IRuleCondition,
                             name='plone.conditions.WorkflowState')
        storage = getUtility(IRuleStorage)
        storage[u'foo'] = Rule()
        rule = self.portal.restrictedTraverse('++rule++foo')

        adding = getMultiAdapter((rule, self.portal.REQUEST),
                                 name='+condition')
        addview = getMultiAdapter((adding, self.portal.REQUEST),
                                  name=element.addview)

        addview.createAndAdd(data={'wf_states': ['visible', 'published']})

        e = rule.conditions[0]
        self.assertTrue(isinstance(e, WorkflowStateCondition))
        self.assertEqual(['visible', 'published'], e.wf_states)
    def testInvokeAddView(self):
        element = getUtility(IRuleAction, name='plone.actions.Copy')
        storage = getUtility(IRuleStorage)
        storage[u'foo'] = Rule()
        rule = self.portal.restrictedTraverse('++rule++foo')

        adding = getMultiAdapter((rule, self.portal.REQUEST), name='+action')
        addview = getMultiAdapter((adding, self.portal.REQUEST),
                                  name=element.addview)

        addview.createAndAdd(data={
            'target_folder': '/target',
        })

        e = rule.actions[0]
        self.failUnless(isinstance(e, CopyAction))
        self.assertEquals('/target', e.target_folder)
    def test_invoke_add_view(self):
        element = getUtility(IRuleAction,
                             name='sc.contentrules.actions.Creators')
        storage = getUtility(IRuleStorage)
        storage[u'foo'] = Rule()
        rule = self.portal.restrictedTraverse('++rule++foo')

        adding = getMultiAdapter((rule, self.portal.REQUEST), name='+action')
        addview = getMultiAdapter((adding, self.portal.REQUEST),
                                  name=element.addview)

        addview.createAndAdd(data={'creators': ('bar', ), 'only_empty': False})

        e = rule.actions[0]
        self.failUnless(isinstance(e, CreatorsAction))
        self.assertEquals(('bar', ), e.creators)
        self.assertEquals(False, e.only_empty)
Exemplo n.º 13
0
    def testInvokeAddView(self):
        element = getUtility(IRuleCondition,
                             name='plone.conditions.PortalType')
        storage = getUtility(IRuleStorage)
        storage[u'foo'] = Rule()
        rule = self.portal.restrictedTraverse('++rule++foo')

        adding = getMultiAdapter((rule, self.portal.REQUEST),
                                 name='+condition')
        addview = getMultiAdapter((adding, self.portal.REQUEST),
                                  name=element.addview)

        addview.createAndAdd(data={'check_types': ['Folder', 'Image']})

        e = rule.conditions[0]
        self.assertTrue(isinstance(e, PortalTypeCondition))
        self.assertEqual(['Folder', 'Image'], e.check_types)
Exemplo n.º 14
0
    def testInvokeAddView(self):
        element = getUtility(IRuleAction, name='plone.actions.Workflow')
        storage = getUtility(IRuleStorage)
        storage[u'foo'] = Rule()
        rule = self.portal.restrictedTraverse('++rule++foo')

        adding = getMultiAdapter((rule, self.portal.REQUEST), name='+action')
        addview = getMultiAdapter((adding, self.portal.REQUEST),
                                  name=element.addview)

        addview.createAndAdd(data={
            'transition': 'publish',
        })

        e = rule.actions[0]
        self.assertTrue(isinstance(e, WorkflowAction))
        self.assertEqual('publish', e.transition)
Exemplo n.º 15
0
    def testInvokeAddView(self):
        self._loadAccounts(2)
        element = getUtility(IRuleAction,
                             name='collective.twitter.tweet.TweetContent')
        storage = getUtility(IRuleStorage)
        storage[u'tweet'] = Rule()

        rule = self.portal.restrictedTraverse('++rule++tweet')

        adding = getMultiAdapter((rule, self.request), name='+action')
        addview = getMultiAdapter((adding, self.request), name=element.addview)

        addview.createAndAdd(data={'tw_account': 'first-valid-account'})

        e = rule.actions[0]
        self.failUnless(isinstance(e, Action))
        self.assertEquals(e.tw_account, 'first-valid-account')
        self.assertEquals(e.different_host, '')
Exemplo n.º 16
0
    def testInvokeAddView(self):
        element = getUtility(IRuleAction, name='plone.actions.Notify')
        storage = getUtility(IRuleStorage)
        storage[u'foo'] = Rule()
        rule = self.portal.restrictedTraverse('++rule++foo')

        adding = getMultiAdapter((rule, self.request), name='+action')
        addview = getMultiAdapter((adding, self.request), name=element.addview)

        addview.createAndAdd(data={
            'message': 'Hello world',
            'message_type': 'info'
        })

        e = rule.actions[0]
        self.assertTrue(isinstance(e, NotifyAction))
        self.assertEqual('Hello world', e.message)
        self.assertEqual('info', e.message_type)
    def testInvokeAddView(self):
        """ testInvokeAddView
        """
        element = self._element()
        storage = getUtility(IRuleStorage)
        storage[u'foo'] = Rule()
        rule = self.portal.restrictedTraverse('++rule++foo')

        adding = getMultiAdapter((rule, self.portal.REQUEST), name='+action')
        addview = getMultiAdapter((adding, self.portal.REQUEST),
                                  name=element.addview)

        addview.createAndAdd(data={
            'action': 'enabled',
        })

        e = rule.actions[0]
        self.failUnless(isinstance(e, EnableDisableDiscussionAction))
        self.assertEquals('enabled', e.action)
Exemplo n.º 18
0
    def testInvokeAddView(self):
        element = getUtility(IRuleCondition,
                             name='plone.conditions.TalesExpression')
        storage = getUtility(IRuleStorage)
        storage[u'foo'] = Rule()
        rule = self.portal.restrictedTraverse('++rule++foo')

        adding = getMultiAdapter((rule, self.portal.REQUEST),
                                 name='+condition')
        addview = getMultiAdapter((adding, self.portal.REQUEST),
                                  name=element.addview)

        addview.createAndAdd(
            data={'tales_expression': 'python:"plone" in object.Subject()'})

        e = rule.conditions[0]
        self.assertTrue(isinstance(e, TalesExpressionCondition))
        self.assertEqual('python:"plone" in object.Subject()',
                         e.tales_expression)
Exemplo n.º 19
0
    def testInvokeAddView(self):
        element = getUtility(IRuleAction,
                             name='sc.contentrules.actions.groupbydate')
        storage = getUtility(IRuleStorage)
        storage[u'foo'] = Rule()
        rule = self.portal.restrictedTraverse('++rule++foo')

        adding = getMultiAdapter((rule, self.portal.REQUEST), name='+action')
        addview = getMultiAdapter((adding, self.portal.REQUEST),
                                  name=element.addview)

        addview.createAndAdd(data={
            'base_folder': '/target',
            'structure': 'ymd'
        })

        e = rule.actions[0]
        self.failUnless(isinstance(e, GroupByDateAction))
        self.assertEquals('/target', e.base_folder)
Exemplo n.º 20
0
    def test_invoke_add_view(self):
        element = getUtility(IRuleAction,
                             name='sc.contentrules.actions.Subject')
        storage = getUtility(IRuleStorage)
        storage[u'foo'] = Rule()
        rule = self.portal.restrictedTraverse('++rule++foo')

        adding = getMultiAdapter((rule, self.portal.REQUEST),
                                 name='+action')
        addview = getMultiAdapter((adding, self.portal.REQUEST),
                                  name=element.addview)

        addview.createAndAdd(data={'same_as_parent': False,
                                   'subject': ['Foo', ]})

        e = rule.actions[0]
        self.failUnless(isinstance(e, SubjectAction))
        self.assertEquals(False, e.same_as_parent)
        self.assertEquals(['Foo', ], e.subject)
Exemplo n.º 21
0
    def testInvokeAddView(self):
        element = getUtility(IRuleCondition, name='plone.conditions.Role')
        storage = getUtility(IRuleStorage)
        storage[u'foo'] = Rule()
        rule = self.portal.restrictedTraverse('++rule++foo')

        adding = getMultiAdapter((rule, self.portal.REQUEST),
                                 name='+condition')
        addview = getMultiAdapter((adding, self.portal.REQUEST),
                                  name=element.addview)

        addview.form_instance.update()
        content = addview.form_instance.create(
            data={'role_names': ['Manager', 'Member']})
        addview.form_instance.add(content)

        e = rule.conditions[0]
        self.assertTrue(isinstance(e, RoleCondition))
        self.assertEqual(['Manager', 'Member'], e.role_names)
    def testInvokeAddView(self):
        element = getUtility(IRuleAction, name='plone.actions.Move')
        storage = getUtility(IRuleStorage)
        storage[u'foo'] = Rule()
        rule = self.portal.restrictedTraverse('++rule++foo')

        adding = getMultiAdapter((rule, self.portal.REQUEST), name='+action')
        addview = getMultiAdapter((adding, self.portal.REQUEST),
                                  name=element.addview)

        addview.form_instance.update()
        content = addview.form_instance.create(data={
            'target_folder': '/target',
        })
        addview.form_instance.add(content)

        e = rule.actions[0]
        self.assertTrue(isinstance(e, MoveAction))
        self.assertEqual('/target', e.target_folder)
Exemplo n.º 23
0
    def testInvokeAddView(self):
        element = getUtility(IRuleCondition,
                             name='plone.conditions.WorkflowTransition')
        storage = getUtility(IRuleStorage)
        storage[u'foo'] = Rule()
        rule = self.portal.restrictedTraverse('++rule++foo')

        adding = getMultiAdapter((rule, self.portal.REQUEST),
                                 name='+condition')
        addview = getMultiAdapter((adding, self.portal.REQUEST),
                                  name=element.addview)

        addview.form_instance.update()
        content = addview.form_instance.create(
            data={'wf_transitions': ['publish', 'hide']})
        addview.form_instance.add(content)

        e = rule.conditions[0]
        self.assertTrue(isinstance(e, WorkflowTransitionCondition))
        self.assertEqual(['publish', 'hide'], e.wf_transitions)
Exemplo n.º 24
0
    def testInvokeAddView(self):
        element = getUtility(IRuleAction, name='plone.actions.Logger')
        storage = getUtility(IRuleStorage)
        storage[u'foo'] = Rule()
        rule = self.portal.restrictedTraverse('++rule++foo')

        adding = getMultiAdapter((rule, self.portal.REQUEST), name='+action')
        addview = getMultiAdapter(
            (adding, self.portal.REQUEST), name=element.addview)

        addview.form_instance.update()
        content = addview.form_instance.create(
            data={'targetLogger': 'foo', 'loggingLevel': 10, 'message': 'bar'})
        addview.form_instance.add(content)

        e = rule.actions[0]
        self.assertTrue(isinstance(e, LoggerAction))
        self.assertEqual('foo', e.targetLogger)
        self.assertEqual(10, e.loggingLevel)
        self.assertEqual('bar', e.message)
    def test_invoke_add_view(self):
        element = getUtility(IRuleCondition,
                             name='brasil.gov.vcge.conditions.VCGE')
        storage = getUtility(IRuleStorage)
        storage[u'foo'] = Rule()
        rule = self.portal.restrictedTraverse('++rule++foo')

        adding = getMultiAdapter((rule, self.portal.REQUEST),
                                 name='+condition')
        addview = getMultiAdapter((adding, self.portal.REQUEST),
                                  name=element.addview)

        addview.createAndAdd(data={'skos': [
            self.term,
        ]})

        e = rule.conditions[0]
        self.assertTrue(isinstance(e, VCGECondition))
        self.assertEqual([
            self.term,
        ], e.skos)
Exemplo n.º 26
0
    def testTraverseToRuleAction(self):
        r = Rule()
        e1 = DummyAction()
        e1.x = 'x'

        e2 = DummyAction()
        e2.x = 'y'

        r.actions.append(e1)
        r.actions.append(e2)
        storage = getUtility(IRuleStorage)
        storage[u'r1'] = r

        tr = self.portal.restrictedTraverse('++rule++r1')
        te1 = tr.restrictedTraverse('++action++0')
        te2 = tr.restrictedTraverse('++action++1')

        self.assertTrue(aq_parent(te1) is tr)
        self.assertEqual('x', te1.x)

        self.assertTrue(aq_parent(te2) is tr)
        self.assertEqual('y', te2.x)
Exemplo n.º 27
0
    def testTraverseToRuleAction(self):
        r = Rule()
        e1 = DummyAction()
        e1.x = "x"

        e2 = DummyAction()
        e2.x = "y"

        r.actions.append(e1)
        r.actions.append(e2)
        storage = getUtility(IRuleStorage)
        storage[u'r1'] = r

        tr = self.portal.restrictedTraverse('++rule++r1')
        te1 = tr.restrictedTraverse('++action++0')
        te2 = tr.restrictedTraverse('++action++1')

        self.failUnless(aq_parent(te1) is tr)
        self.assertEquals("x", te1.x)

        self.failUnless(aq_parent(te2) is tr)
        self.assertEquals("y", te2.x)
    def testInvokeAddView(self):
        element = getUtility(IRuleAction, name='plone.actions.Mail')
        storage = getUtility(IRuleStorage)
        storage[u'foo'] = Rule()
        rule = self.portal.restrictedTraverse('++rule++foo')

        adding = getMultiAdapter((rule, self.portal.REQUEST), name='+action')
        addview = getMultiAdapter((adding, self.portal.REQUEST),
                                  name=element.addview)
        self.failUnless(isinstance(addview, MailAddForm))

        addview.createAndAdd(data={'subject': 'My Subject',
                                   'source': '*****@*****.**',
                                   'recipients': '[email protected],[email protected]',
                                   'message': 'Hey, Oh!'})

        e = rule.actions[0]
        self.failUnless(isinstance(e, MailAction))
        self.assertEquals('My Subject', e.subject)
        self.assertEquals('*****@*****.**', e.source)
        self.assertEquals('[email protected],[email protected]', e.recipients)
        self.assertEquals('Hey, Oh!', e.message)
Exemplo n.º 29
0
    def testInvokeAddView(self):
        element = getUtility(IRuleAction, name='rapido.plone.Action')
        storage = getUtility(IRuleStorage)
        storage[u'foo'] = Rule()
        rule = self.portal.restrictedTraverse('++rule++foo')

        adding = getMultiAdapter((rule, self.request), name='+action')
        addview = getMultiAdapter((adding, self.request), name=element.addview)

        addview.form_instance.update()
        content = addview.form_instance.create(data={
            'app': 'testapp',
            'block': 'rule',
            'method': 'hello',
        })
        addview.form_instance.add(content)

        e = rule.actions[0]
        self.assertTrue(isinstance(e, Action))
        self.assertEqual('testapp', e.app)
        self.assertEqual(e.summary,
            u'Call Rapido method hello from testapp/rule')
Exemplo n.º 30
0
    def testInvokeAddView(self):
        element = getUtility(
            IRuleAction,
            name='collective.contentrules.parentchild.ParentTransition')
        storage = getUtility(IRuleStorage)
        storage[u'foo'] = Rule()
        rule = self.portal.restrictedTraverse('++rule++foo')

        adding = getMultiAdapter((rule, self.portal.REQUEST), name='+action')
        addview = getMultiAdapter((adding, self.portal.REQUEST),
                                  name=element.addview).form_instance

        addview.updateFields()
        addview.add(
            addview.create(data={
                'transition': 'publish',
                'check_types': set(['Document'])
            }))

        e = rule.actions[0]
        self.assertTrue(isinstance(e, ParentTransitionAction))
        self.assertEqual('publish', e.transition)
        self.assertEqual(set(['Document']), e.check_types)
Exemplo n.º 31
0
    def test_AddFormView(self):
        element = getUtility(IRuleAction, name='plone.actions.Ifttt')
        storage = getUtility(IRuleStorage)
        storage[u'ifttt_applet'] = Rule()
        rule = self.portal.restrictedTraverse('++rule++ifttt_applet')

        adding = getMultiAdapter((rule, self.portal.REQUEST), name='+action')
        addview = getMultiAdapter((adding, self.portal.REQUEST),
                                  name=element.addview)

        addview.form_instance.update()

        for index, option in enumerate(payload_options):

            content = addview.form_instance.create(data={
                'ifttt_event_name': 'ifttt_applet',
                'payload_option': option,
            })
            addview.form_instance.add(content)

            e = rule.actions[index]
            self.assertTrue(isinstance(e, IftttTriggerAction))
            self.assertEqual('ifttt_applet', e.ifttt_event_name)
            self.assertEqual(option, e.payload_option)
Exemplo n.º 32
0
    def _initRules(self, node):
        """Import rules from the given node
        """

        site = self.environ.getSite()
        storage = queryUtility(IRuleStorage)
        if storage is None:
            return

        for child in node.childNodes:
            if child.nodeName == 'rule':

                rule = None
                name = child.getAttribute('name')
                if name:
                    rule = storage.get(name, None)

                if rule is None:
                    rule = Rule()

                    if not name:
                        chooser = INameChooser(storage)
                        name = chooser.chooseName(None, rule)

                    storage[name] = rule
                else:
                    # Clear out conditions and actions since we're expecting new ones
                    del rule.conditions[:]
                    del rule.actions[:]

                rule.title = child.getAttribute('title')
                rule.description = child.getAttribute('description')
                event_name = child.getAttribute('event')
                rule.event = _resolveDottedName(event_name)
                if not rule.event:
                    raise ImportError("Can not import %s" % event_name)

                rule.enabled = as_bool(child.getAttribute('enabled'), True)
                rule.stop = as_bool(child.getAttribute('stop-after'))

                # Aq-wrap to enable complex setters for elements below
                # to work

                rule = rule.__of__(site)

                for rule_config_node in child.childNodes:
                    if rule_config_node.nodeName == 'conditions':
                        for condition_node in rule_config_node.childNodes:
                            if not condition_node.nodeName == 'condition':
                                continue

                            type_ = condition_node.getAttribute('type')
                            element_type = getUtility(IRuleCondition,
                                                      name=type_)
                            if element_type.factory is None:
                                continue

                            condition = element_type.factory()

                            # Aq-wrap in case of complex setters
                            condition = condition.__of__(rule)

                            handler = IRuleElementExportImportHandler(
                                condition)
                            handler.import_element(condition_node)

                            rule.conditions.append(aq_base(condition))

                    elif rule_config_node.nodeName == 'actions':
                        for action_node in rule_config_node.childNodes:
                            if not action_node.nodeName == 'action':
                                continue

                            type_ = action_node.getAttribute('type')
                            element_type = getUtility(IRuleAction, name=type_)
                            if element_type.factory is None:
                                continue

                            action = element_type.factory()

                            # Aq-wrap in case of complex setters
                            action = action.__of__(rule)

                            handler = IRuleElementExportImportHandler(action)
                            handler.import_element(action_node)

                            rule.actions.append(aq_base(action))

            elif child.nodeName == 'assignment':
                location = child.getAttribute('location')
                if location.startswith("/"):
                    location = location[1:]

                try:
                    container = site.unrestrictedTraverse(str(location))
                except KeyError:
                    continue

                assignable = IRuleAssignmentManager(container, None)
                if assignable is None:
                    continue

                name = child.getAttribute('name')
                assignment = assignable.get(name, None)
                if assignment is None:
                    assignment = assignable[name] = RuleAssignment(name)

                assignment.enabled = as_bool(child.getAttribute('enabled'))
                assignment.bubbles = as_bool(child.getAttribute('bubbles'))

                insert_before = child.getAttribute('insert-before')
                if insert_before:
                    position = None
                    keys = list(assignable.keys())

                    if insert_before == "*":
                        position = 0
                    elif insert_before in keys:
                        position = keys.index(insert_before)

                    if position is not None:
                        keys.remove(name)
                        keys.insert(position, name)
                        assignable.updateOrder(keys)

                path = '/'.join(container.getPhysicalPath())
                get_assignments(storage[name]).insert(path)
Exemplo n.º 33
0
 def testRuleEditView(self):
     r = Rule()
     editview = getMultiAdapter((r, self.portal.REQUEST), name='edit')
     self.assertTrue(isinstance(editview, RuleEditFormView))
Exemplo n.º 34
0
    def _initRules(self, node):
        """Import rules from the given node
        """

        site = self.environ.getSite()
        storage = queryUtility(IRuleStorage)
        if storage is None:
            return

        for child in node.childNodes:
            if child.nodeName == 'rule':

                rule = None
                name = child.getAttribute('name')
                if name:
                    rule = storage.get(name, None)

                if rule is None:
                    rule = Rule()

                    if not name:
                        chooser = INameChooser(storage)
                        name = chooser.chooseName(None, rule)

                    storage[name] = rule
                else:
                    # Clear out conditions and actions since we're expecting new ones
                    del rule.conditions[:]
                    del rule.actions[:]

                rule.title = child.getAttribute('title')
                rule.description = child.getAttribute('description')
                event_name = child.getAttribute('event')
                rule.event = _resolveDottedName(event_name)
                if not rule.event:
                    raise ImportError("Can not import %s" % event_name)

                rule.enabled = as_bool(child.getAttribute('enabled'), True)
                rule.stop = as_bool(child.getAttribute('stop-after'))
                rule.cascading = as_bool(child.getAttribute('cascading'))
                # Aq-wrap to enable complex setters for elements below
                # to work

                rule = rule.__of__(site)

                for rule_config_node in child.childNodes:
                    if rule_config_node.nodeName == 'conditions':
                        for condition_node in rule_config_node.childNodes:
                            if not condition_node.nodeName == 'condition':
                                continue

                            type_ = condition_node.getAttribute('type')
                            element_type = getUtility(IRuleCondition, name=type_)
                            if element_type.factory is None:
                                continue

                            condition = element_type.factory()

                            # Aq-wrap in case of complex setters
                            condition = condition.__of__(rule)

                            handler = IRuleElementExportImportHandler(condition)
                            handler.import_element(condition_node)

                            rule.conditions.append(aq_base(condition))

                    elif rule_config_node.nodeName == 'actions':
                        for action_node in rule_config_node.childNodes:
                            if not action_node.nodeName == 'action':
                                continue

                            type_ = action_node.getAttribute('type')
                            element_type = getUtility(IRuleAction, name=type_)
                            if element_type.factory is None:
                                continue

                            action = element_type.factory()

                            # Aq-wrap in case of complex setters
                            action = action.__of__(rule)

                            handler = IRuleElementExportImportHandler(action)
                            handler.import_element(action_node)

                            rule.actions.append(aq_base(action))

            elif child.nodeName == 'assignment':
                location = child.getAttribute('location')
                if location.startswith("/"):
                    location = location[1:]

                try:
                    container = site.unrestrictedTraverse(str(location))
                except KeyError:
                    continue

                name = child.getAttribute('name')
                api.assign_rule(container, name,
                                enabled=as_bool(child.getAttribute('enabled')),
                                bubbles=as_bool(child.getAttribute('bubbles')),
                                insert_before=child.getAttribute('insert-before'),
                                )
Exemplo n.º 35
0
    def _initRules(self, node):
        """Import rules from the given node
        """

        site = self.environ.getSite()
        storage = queryUtility(IRuleStorage)
        if storage is None:
            return

        for child in node.childNodes:
            if child.nodeName == 'rule':

                rule = None
                name = child.getAttribute('name')
                if name:
                    rule = storage.get(name, None)

                if rule is None:
                    rule = Rule()

                    if not name:
                        chooser = INameChooser(storage)
                        name = chooser.chooseName(None, rule)

                    storage[name] = rule
                else:
                    # Clear out conditions and actions since we're expecting
                    # new ones
                    del rule.conditions[:]
                    del rule.actions[:]

                rule.title = child.getAttribute('title')
                rule.description = child.getAttribute('description')
                event_name = child.getAttribute('event')
                rule.event = _resolveDottedName(event_name)
                if not rule.event:
                    raise ImportError('Can not import {0}'.format(event_name))

                rule.enabled = as_bool(child.getAttribute('enabled'), True)
                rule.stop = as_bool(child.getAttribute('stop-after'))
                rule.cascading = as_bool(child.getAttribute('cascading'))
                # Aq-wrap to enable complex setters for elements below
                # to work

                rule = rule.__of__(site)

                for rule_config_node in child.childNodes:
                    if rule_config_node.nodeName == 'conditions':
                        for condition_node in rule_config_node.childNodes:
                            if not condition_node.nodeName == 'condition':
                                continue

                            type_ = condition_node.getAttribute('type')
                            element_type = getUtility(IRuleCondition,
                                                      name=type_)
                            if element_type.factory is None:
                                continue

                            condition = element_type.factory()

                            # Aq-wrap in case of complex setters
                            condition = condition.__of__(rule)

                            handler = IRuleElementExportImportHandler(
                                condition)
                            handler.import_element(condition_node)

                            rule.conditions.append(aq_base(condition))

                    elif rule_config_node.nodeName == 'actions':
                        for action_node in rule_config_node.childNodes:
                            if not action_node.nodeName == 'action':
                                continue

                            type_ = action_node.getAttribute('type')
                            element_type = getUtility(IRuleAction, name=type_)
                            if element_type.factory is None:
                                continue

                            action = element_type.factory()

                            # Aq-wrap in case of complex setters
                            action = action.__of__(rule)

                            handler = IRuleElementExportImportHandler(action)
                            handler.import_element(action_node)

                            rule.actions.append(aq_base(action))

            elif child.nodeName == 'assignment':
                location = child.getAttribute('location')
                if location.startswith('/'):
                    location = location[1:]

                try:
                    container = site.unrestrictedTraverse(str(location))
                except KeyError:
                    continue

                name = child.getAttribute('name')
                api.assign_rule(
                    container,
                    name,
                    enabled=as_bool(child.getAttribute('enabled')),
                    bubbles=as_bool(child.getAttribute('bubbles')),
                    insert_before=child.getAttribute('insert-before'),
                )
Exemplo n.º 36
0
 def create(self, data):
     rule = Rule()
     applyChanges(self, rule, data)
     return rule
Exemplo n.º 37
0
 def create(self, data):
     rule = Rule()
     form.applyChanges(rule, self.form_fields, data)
     return rule