def test_no_IRedirectionStorage(self): self.assertEqual(len(list(self.redirector)), 0) # create a piece of content to pretend it was imported with # the pipeline self.portal.invokeFactory("Folder", NEW_NAME) # let's unregister the redirector: getSiteManager().unregisterUtility(provided=IRedirectionStorage) self.assertRaises(ComponentLookupError, getUtility, IRedirectionStorage) # This should not fail: self.transmogrify(ignore_seen=True) # and obviously no redirection should be set-up: self.assertEqual(len(list(self.redirector)), 0)
def test_no_IRedirectionStorage(self): self.assertEqual(len(list(self.redirector)), 0) # create a piece of content to pretend it was imported with # the pipeline self.portal.invokeFactory('Folder', NEW_NAME) # let's unregister the redirector: getSiteManager().unregisterUtility(provided=IRedirectionStorage) self.assertRaises(ComponentLookupError, getUtility, IRedirectionStorage) # This should not fail: self.transmogrify(ignore_seen=True) # and obviously no redirection should be set-up: self.assertEqual(len(list(self.redirector)), 0)
def register(fti): """Helper method to: - register an FTI as a local utility - register a local factory utility - register an add view """ fti = aq_base(fti) # remove acquisition wrapper site = getUtility(ISiteRoot) site_manager = getSiteManager(site) portal_type = fti.getId() fti_utility = queryUtility(IDexterityFTI, name=portal_type) if fti_utility is None: site_manager.registerUtility( fti, IDexterityFTI, portal_type, info='plone.dexterity.dynamic' ) factory_utility = queryUtility(IFactory, name=fti.factory) if factory_utility is None: site_manager.registerUtility( DexterityFactory(portal_type), IFactory, fti.factory, info='plone.dexterity.dynamic' )
def register(fti): """Helper method to: - register an FTI as a local utility - register a local factory utility - register an add view """ fti = aq_base(fti) # remove acquisition wrapper site = getUtility(ISiteRoot) site_manager = getSiteManager(site) portal_type = fti.getId() fti_utility = queryUtility(IDexterityFTI, name=portal_type) if fti_utility is None: site_manager.registerUtility(fti, IDexterityFTI, portal_type, info='plone.dexterity.dynamic') factory_utility = queryUtility(IFactory, name=fti.factory) if factory_utility is None: site_manager.registerUtility(DexterityFactory(portal_type), IFactory, fti.factory, info='plone.dexterity.dynamic')
def ftiModified(object, event): """When an FTI is modified, re-sync and invalidate the schema, if necessary. """ if not IDexterityFTI.providedBy(event.object): return fti = event.object portal_type = fti.getId() mod = {} for desc in event.descriptions: if IDexterityFTIModificationDescription.providedBy(desc): mod[desc.attribute] = desc.oldValue # If the factory utility name was modified, we may get an orphan if one # was registered as a local utility to begin with. If so, remove the # orphan. if 'factory' in mod: old_factory = mod['factory'] site = getUtility(ISiteRoot) site_manager = getSiteManager(site) # Remove previously registered factory, if no other type uses it. unregister_factory(old_factory, site_manager) # Register a new local factory if one doesn't exist already new_factory_utility = queryUtility(IFactory, name=fti.factory) if new_factory_utility is None: site_manager.registerUtility(DexterityFactory(portal_type), IFactory, fti.factory, info='plone.dexterity.dynamic') # Determine if we need to invalidate the schema at all if 'behaviors' in mod \ or 'schema' in mod \ or 'model_source' in mod \ or 'model_file' in mod \ or 'schema_policy' in mod: # Determine if we need to re-sync a dynamic schema if (fti.model_source or fti.model_file) \ and ('model_source' in mod or 'model_file' in mod or 'schema_policy' in mod): schemaName = portalTypeToSchemaName(portal_type) schema = getattr(plone.dexterity.schema.generated, schemaName) model = fti.lookupModel() sync_bases = 'schema_policy' in mod syncSchema(model.schema, schema, overwrite=True, sync_bases=sync_bases) notify(SchemaInvalidatedEvent(portal_type))
def ftiModified(object, event): """When an FTI is modified, re-sync and invalidate the schema, if necessary. """ if not IDexterityFTI.providedBy(event.object): return fti = event.object portal_type = fti.getId() mod = {} for desc in event.descriptions: if IDexterityFTIModificationDescription.providedBy(desc): mod[desc.attribute] = desc.oldValue # If the factory utility name was modified, we may get an orphan if one # was registered as a local utility to begin with. If so, remove the # orphan. if 'factory' in mod: old_factory = mod['factory'] site = getUtility(ISiteRoot) site_manager = getSiteManager(site) # Remove previously registered factory, if no other type uses it. unregister_factory(old_factory, site_manager) # Register a new local factory if one doesn't exist already new_factory_utility = queryUtility(IFactory, name=fti.factory) if new_factory_utility is None: site_manager.registerUtility( DexterityFactory(portal_type), IFactory, fti.factory, info='plone.dexterity.dynamic' ) # Determine if we need to invalidate the schema at all if 'behaviors' in mod \ or 'schema' in mod \ or 'model_source' in mod \ or 'model_file' in mod \ or 'schema_policy' in mod: # Determine if we need to re-sync a dynamic schema if (fti.model_source or fti.model_file) \ and ('model_source' in mod or 'model_file' in mod or 'schema_policy' in mod): schemaName = portalTypeToSchemaName(portal_type) schema = getattr(plone.dexterity.schema.generated, schemaName) model = fti.lookupModel() sync_bases = 'schema_policy' in mod syncSchema(model.schema, schema, overwrite=True, sync_bases=sync_bases) notify(SchemaInvalidatedEvent(portal_type))
def unregister(fti, old_name=None): """Helper method to: - unregister the FTI local utility - unregister any local factory utility associated with the FTI - unregister any local add view associated with the FTI """ site = queryUtility(ISiteRoot) if site is None: return site_manager = getSiteManager(site) portal_type = old_name or fti.getId() notify(SchemaInvalidatedEvent(portal_type)) site_manager.unregisterUtility(provided=IDexterityFTI, name=portal_type) unregister_factory(fti.factory, site_manager)
def unregister(fti, old_name=None): """Helper method to: - unregister the FTI local utility - unregister any local factory utility associated with the FTI - unregister any local add view associated with the FTI """ site = queryUtility(ISiteRoot) if site is None: return site_manager = getSiteManager(site) portal_type = old_name or fti.getId() notify(SchemaInvalidatedEvent(portal_type)) site_manager.unregisterUtility(provided=IDexterityFTI, name=portal_type) unregister_factory(fti.factory, site_manager)