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 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)
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)
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)
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)
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)
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)
def install(self): # Add the intids utiity if it doesn't exist portal = self.context add_intids(portal) add_relations(portal)