Exemplo n.º 1
0
    def register_RelationsType(self):
        xmlconfig.xmlconfig(StringIO(
            '''
            <configure
                 package="plone.behavior"
                 xmlns="http://namespaces.zope.org/zope"
                 xmlns:plone="http://namespaces.plone.org/plone"
                 i18n_domain="plone.behavior.tests">

                 <include package="plone.behavior" file="meta.zcml" />

                <plone:behavior
                    title="Relations behavior"
                    description="A behavior"
                    provides="plone.app.versioningbehavior.tests.test_modifiers.IRelationsBehavior"
                    />
            </configure>
            '''
        ))
        rel_fti = DexterityFTI(
            'RelationsType',
            behaviors=[IRelationsBehavior.__identifier__]
        )
        self.portal.portal_types._setObject('RelationsType', rel_fti)

        # Setup IIntIds utility which is required for relations to work
        site.add_intids(self.portal)
Exemplo n.º 2
0
def installRelations(context):
    if context.readDataFile('install_relations.txt') is None:
        return
    portal = context.getSite()
    add_intids(portal)
    add_relations(portal)
    return "Added relations and intid utilities"
    def testRelations(self):
        rel_fti = DexterityFTI(
            'RelationsType',
            schema=
            'plone.app.versioningbehavior.tests.test_modifiers.IRelationsType')
        self.portal.portal_types._setObject('RelationsType', rel_fti)

        # Setup IIntIds utility which is required for relations to work
        from five.intid import site
        from zope.app.intid.interfaces import IIntIds
        site.add_intids(self.portal)
        intids = getUtility(IIntIds)

        source = createContentInContainer(self.portal, 'RelationsType')
        target = createContentInContainer(self.portal, 'RelationsType')

        # Test modifier when no relations are set
        modifier = SkipRelations('modifier', 'Modifier')
        pers_id, pers_load, empty1, empty2 = modifier.getOnCloneModifiers(
            source)
        self.assertTrue(pers_id(None) is None)
        self.assertTrue(pers_id(None) is None)
        self.assertTrue(pers_load(None) is None)
        self.assertTrue(pers_load(None) is None)
        self.assertTrue(empty1 == [])
        self.assertTrue(empty2 == [])

        repo_clone = createContent('RelationsType')
        modifier.afterRetrieveModifier(source, repo_clone)
        self.assertTrue(repo_clone.single is source.single)
        self.assertTrue(repo_clone.multiple is source.multiple)

        # Add some relations
        source.single = RelationValue(intids.getId(target))
        source.multiple = [RelationValue(intids.getId(target))]

        # Update relations
        from zope.lifecycleevent import ObjectModifiedEvent
        from zope.event import notify
        notify(ObjectModifiedEvent(source))

        modifier = SkipRelations('modifier', 'Modifier')
        pers_id, pers_load, empty1, empty2 = modifier.getOnCloneModifiers(
            source)
        self.assertTrue(pers_id(source.single))
        self.assertTrue(pers_id(source.multiple))
        self.assertTrue(pers_load(source.single) is None)
        self.assertTrue(pers_load(source.multiple) is None)
        self.assertTrue(empty1 == [])
        self.assertTrue(empty2 == [])

        repo_clone = createContent('RelationsType')
        modifier.afterRetrieveModifier(source, repo_clone)
        self.assertTrue(repo_clone.single is source.single)
        self.assertTrue(repo_clone.multiple is source.multiple)
Exemplo n.º 4
0
    def testRelations(self):
        rel_fti = DexterityFTI(
            'RelationsType',
            schema=IRelationsType.__identifier__
        )
        self.portal.portal_types._setObject('RelationsType', rel_fti)

        # Setup IIntIds utility which is required for relations to work
        from five.intid import site
        from zope.app.intid.interfaces import IIntIds
        site.add_intids(self.portal)
        intids = getUtility(IIntIds)

        source = createContentInContainer(self.portal, 'RelationsType')
        target = createContentInContainer(self.portal, 'RelationsType')

        # Test modifier when no relations are set
        modifier = SkipRelations('modifier', 'Modifier')
        on_clone_modifiers = modifier.getOnCloneModifiers(source)
        pers_id, pers_load, empty1, empty2 = on_clone_modifiers
        self.assertTrue(pers_id(None) is None)
        self.assertTrue(pers_id(None) is None)
        self.assertTrue(pers_load(None) is None)
        self.assertTrue(pers_load(None) is None)
        self.assertTrue(empty1 == [])
        self.assertTrue(empty2 == [])

        repo_clone = createContent('RelationsType')
        modifier.afterRetrieveModifier(source, repo_clone)
        self.assertTrue(repo_clone.single is source.single)
        self.assertTrue(repo_clone.multiple is source.multiple)

        # Add some relations
        source.single = RelationValue(intids.getId(target))
        source.multiple = [RelationValue(intids.getId(target))]

        # Update relations
        from zope.lifecycleevent import ObjectModifiedEvent
        from zope.event import notify
        notify(ObjectModifiedEvent(source))

        modifier = SkipRelations('modifier', 'Modifier')
        on_clone_modifiers = modifier.getOnCloneModifiers(source)
        pers_id, pers_load, empty1, empty2 = on_clone_modifiers
        self.assertTrue(pers_id(source.single))
        self.assertTrue(pers_id(source.multiple))
        self.assertTrue(pers_load(source.single) is None)
        self.assertTrue(pers_load(source.multiple) is None)
        self.assertTrue(empty1 == [])
        self.assertTrue(empty2 == [])

        repo_clone = createContent('RelationsType')
        modifier.afterRetrieveModifier(source, repo_clone)
        self.assertTrue(repo_clone.single is source.single)
        self.assertTrue(repo_clone.multiple is source.multiple)
Exemplo n.º 5
0
def Command(app):
    """Questo script migra i contenuti di un vecchio sito eprice
    con collective.transmogrifier.

    Le pipelines sono definite in eprice.migrations
    """
    with api.env.adopt_user(username=params.admin_user):
        portal = getSite()
        if not portal:
            raise ValueError("Site is not set. "
                             "Please call this script with -O param. "
                             "E.g. {}".format(USAGE))
        userids = {}
        emails = {}
        deleted = []
        for user in api.user.get_users():
            email = user.getProperty('email').lower()
            raw_userid = user.getUserId()
            userid = user.getUserId().lower()
            needs_deletion_reason = []
            if emails.get(email, 0) == 0:
                emails[email] = 1
            else:
                emails[email] = emails[email] + 1
                needs_deletion_reason.append('duplicate email')
            if userids.get(userid, 0) == 0:
                userids[userid] = 1
            else:
                userids[userid] = userids[userid] + 1
                needs_deletion_reason.append('duplicate userid')
            if len(needs_deletion_reason) > 0:
                api.user.delete(user=user)
                deleted.append([raw_userid, needs_deletion_reason])
        if len(deleted) > 1:
            logger.warning("We have deleted some users:\n%s" %
                           ('\n'.join('%s: %s' % (d[0], ', '.join(d[1]))
                                      for d in deleted)))
        # Adding intid to every content
        logger.info("Now adding intids")
        add_intids(portal)
        catalog = portal.portal_catalog
        intids = getUtility(IIntIds)
        results = catalog.searchResults(object_provides=(
            'Products.CMFCore.interfaces._content.IContentish', ))
        for brain in results:
            obj = brain.getObject()
            addIntIdSubscriber(obj, ObjectCreatedEvent(obj))
            intids.getId(obj)
        # Delete problematic content
        for path in DELETE_CONTENT:
            obj = portal.restrictedTraverse(path)
            api.content.delete(obj=obj, check_linkintegrity=False)
Exemplo n.º 6
0
def base_setup(app):
    """Setup without basic CA stuff because PTC already provides this"""
    from plone.app import relations
    try:
        zcml.load_config('configure.zcml', relations)
    except:
        # XXX: When ptc has setup plone, then the zcml product
        # registration causes errors when run twice :-(
        pass
    if not USE_LSM:
        # monkey in our hooks
        from Products.Five.site.metaconfigure import classSiteHook
        from Products.Five.site.localsite import FiveSite
        from zope.interface import classImplements
        from zope.site.interfaces import IPossibleSite
        klass = app.__class__
        classSiteHook(klass, FiveSite)
        classImplements(klass, IPossibleSite)
    add_intids(app)
    add_relations(app)
    contentSetUp(app)
Exemplo n.º 7
0
def setUp(app):
    # turn on all needed zcml
    placeless.setUp()
    import Products.Five
    from Zope2.App import zcml
    from plone import relations
    zcml.load_config('meta.zcml', Products.Five)
    zcml.load_config('configure.zcml', Products.Five)
    zcml.load_config('configure.zcml', relations)
    # Make a site, turn on the local site hooks, add the five.intid utility
    from zope.site.hooks import setSite, setHooks
    if not USE_LSM:
        # monkey in our hooks
        from Products.Five.site.metaconfigure import classSiteHook
        from Products.Five.site.localsite import FiveSite
        from zope.interface import classImplements
        from zope.site.interfaces import IPossibleSite
        klass = app.__class__
        classSiteHook(klass, FiveSite)
        classImplements(klass, IPossibleSite)
    add_intids(app)
    setSite(app)
    setHooks()
    contentSetUp(app)
Exemplo n.º 8
0
    def register_RelationsType(self):
        xmlconfig.xmlconfig(
            StringIO('''
            <configure
                 package="plone.behavior"
                 xmlns="http://namespaces.zope.org/zope"
                 xmlns:plone="http://namespaces.plone.org/plone"
                 i18n_domain="plone.behavior.tests">

                 <include package="plone.behavior" file="meta.zcml" />

                <plone:behavior
                    title="Relations behavior"
                    description="A behavior"
                    provides="plone.app.versioningbehavior.tests.test_modifiers.IRelationsBehavior"
                    />
            </configure>
            '''))
        rel_fti = DexterityFTI('RelationsType',
                               behaviors=[IRelationsBehavior.__identifier__])
        self.portal.portal_types._setObject('RelationsType', rel_fti)

        # Setup IIntIds utility which is required for relations to work
        site.add_intids(self.portal)
    def testRelationsInBehaviors(self):
        configuration = """\
        <configure
             package="plone.behavior"
             xmlns="http://namespaces.zope.org/zope"
             xmlns:plone="http://namespaces.plone.org/plone"
             i18n_domain="plone.behavior.tests">

             <include package="plone.behavior" file="meta.zcml" />

            <plone:behavior
                title="Relations behavior"
                description="A behavior"
                provides="plone.app.versioningbehavior.tests.test_modifiers.IRelationsBehavior"
                />
        </configure>
        """
        xmlconfig.xmlconfig(StringIO(configuration))
        rel_fti = DexterityFTI('RelationsType',
                               behaviors=[IRelationsBehavior.__identifier__])
        self.portal.portal_types._setObject('RelationsType', rel_fti)

        # Setup IIntIds utility which is required for relations to work
        from five.intid import site
        from zope.app.intid.interfaces import IIntIds
        site.add_intids(self.portal)
        intids = getUtility(IIntIds)

        source = createContentInContainer(self.portal, 'RelationsType')
        target = createContentInContainer(self.portal, 'RelationsType')

        # Test modifier when no relations are set
        modifier = SkipRelations('modifier', 'Modifier')
        pers_id, pers_load, empty1, empty2 = modifier.getOnCloneModifiers(
            source)
        self.assertTrue(pers_id(None) is None)
        self.assertTrue(pers_id(None) is None)
        self.assertTrue(pers_load(None) is None)
        self.assertTrue(pers_load(None) is None)
        self.assertTrue(empty1 == [])
        self.assertTrue(empty2 == [])

        repo_clone = createContent('RelationsType')
        modifier.afterRetrieveModifier(source, repo_clone)
        self.assertTrue(repo_clone.single is None)
        self.assertTrue(repo_clone.multiple is None)

        # Add some relations
        IRelationsBehavior(source).single = RelationValue(intids.getId(target))
        IRelationsBehavior(source).multiple = [
            RelationValue(intids.getId(target))
        ]

        # Update relations
        from zope.lifecycleevent import ObjectModifiedEvent
        from zope.event import notify
        notify(ObjectModifiedEvent(source))

        modifier = SkipRelations('modifier', 'Modifier')
        pers_id, pers_load, empty1, empty2 = modifier.getOnCloneModifiers(
            source)
        self.assertTrue(pers_id(IRelationsBehavior(source).single))
        self.assertTrue(pers_id(IRelationsBehavior(source).multiple))
        self.assertTrue(pers_load(IRelationsBehavior(source).single) is None)
        self.assertTrue(pers_load(IRelationsBehavior(source).multiple) is None)
        self.assertTrue(empty1 == [])
        self.assertTrue(empty2 == [])

        repo_clone = createContent('RelationsType')
        modifier.afterRetrieveModifier(source, repo_clone)
        self.assertTrue(
            IRelationsBehavior(repo_clone).single is IRelationsBehavior(
                source).single)
        self.assertTrue(
            IRelationsBehavior(repo_clone).multiple is IRelationsBehavior(
                source).multiple)
    def testRelationsInBehaviors(self):
        configuration = """\
        <configure
             package="plone.behavior"
             xmlns="http://namespaces.zope.org/zope"
             xmlns:plone="http://namespaces.plone.org/plone"
             i18n_domain="plone.behavior.tests">

             <include package="plone.behavior" file="meta.zcml" />

            <plone:behavior
                title="Relations behavior"
                description="A behavior"
                provides="plone.app.versioningbehavior.tests.test_modifiers.IRelationsBehavior"
                />
        </configure>
        """
        xmlconfig.xmlconfig(StringIO(configuration))
        rel_fti = DexterityFTI(
            'RelationsType',
            behaviors=[IRelationsBehavior.__identifier__])
        self.portal.portal_types._setObject('RelationsType', rel_fti)

        # Setup IIntIds utility which is required for relations to work
        from five.intid import site
        from zope.app.intid.interfaces import IIntIds
        site.add_intids(self.portal)
        intids = getUtility(IIntIds)

        source = createContentInContainer(self.portal, 'RelationsType')
        target = createContentInContainer(self.portal, 'RelationsType')

        # Test modifier when no relations are set
        modifier = SkipRelations('modifier', 'Modifier')
        pers_id, pers_load, empty1, empty2 = modifier.getOnCloneModifiers(source)
        self.assertTrue(pers_id(None) is None)
        self.assertTrue(pers_id(None) is None)
        self.assertTrue(pers_load(None) is None)
        self.assertTrue(pers_load(None) is None)
        self.assertTrue(empty1 == [])
        self.assertTrue(empty2 == [])

        repo_clone = createContent('RelationsType')
        modifier.afterRetrieveModifier(source, repo_clone)
        self.assertTrue(repo_clone.single is None)
        self.assertTrue(repo_clone.multiple is None)

        # Add some relations
        IRelationsBehavior(source).single = RelationValue(intids.getId(target))
        IRelationsBehavior(source).multiple = [RelationValue(intids.getId(target))]

        # Update relations
        from zope.lifecycleevent import ObjectModifiedEvent
        from zope.event import notify
        notify(ObjectModifiedEvent(source))

        modifier = SkipRelations('modifier', 'Modifier')
        pers_id, pers_load, empty1, empty2 = modifier.getOnCloneModifiers(source)
        self.assertTrue(pers_id(IRelationsBehavior(source).single))
        self.assertTrue(pers_id(IRelationsBehavior(source).multiple))
        self.assertTrue(pers_load(IRelationsBehavior(source).single) is None)
        self.assertTrue(pers_load(IRelationsBehavior(source).multiple) is None)
        self.assertTrue(empty1 == [])
        self.assertTrue(empty2 == [])

        repo_clone = createContent('RelationsType')
        modifier.afterRetrieveModifier(source, repo_clone)
        self.assertTrue(IRelationsBehavior(repo_clone).single
                        is IRelationsBehavior(source).single)
        self.assertTrue(IRelationsBehavior(repo_clone).multiple
                        is IRelationsBehavior(source).multiple)
Exemplo n.º 11
0
 def install(self):
     # Add the intids utiity if it doesn't exist
     portal = self.context
     add_intids(portal)
     add_relations(portal)