def _cascadeRemove(self, cascade): """Cascaded removal of objects """ portal = getToolByName(self, 'portal_url').getPortalObject() if 'types' in cascade: portal_types=getToolByName(self,'portal_types') delObjects(portal_types, self.types) if 'skins' in cascade: portal_skins=getToolByName(self,'portal_skins') delObjects(portal_skins, self.skins) if 'actions' in cascade: portal_actions=getToolByName(self,'portal_actions') for category, action in self.actions: if category in portal_actions.objectIds(): cat = portal_actions[category] if action in cat.objectIds(): cat._delObject(action) if len(cat.objectIds()) == 0: del cat portal_actions._delObject(category) if 'portalobjects' in cascade: delObjects(portal, self.portalobjects) if 'workflows' in cascade: portal_workflow=getToolByName(self, 'portal_workflow') delObjects(portal_workflow, self.workflows) if 'slots' in cascade: if self.getLeftSlots(): portal.left_slots=[s for s in portal.left_slots if s not in self.getLeftSlots()] if self.getRightSlots(): portal.right_slots=[s for s in portal.right_slots if s not in self.getRightSlots()] if 'registrypredicates' in cascade: ctr = getToolByName(self,'content_type_registry') ids = [id for id, predicate in ctr.listPredicates()] predicates=getattr(self,'registrypredicates',[]) for p in predicates: if p in ids: ctr.removePredicate(p) else: logger.log("Failed to delete '%s' from content type " \ "registry" % p, severity=logging.WARNING) if 'adapters' in cascade: adapters = getattr(self, 'adapters', []) if adapters: sm = getSiteManager() # TODO: expand this to actually cover adapter registrations if 'utilities' in cascade: utilities = getattr(self, 'utilities', []) if utilities: sm = getSiteManager() for registration in utilities: provided = _resolveDottedName(registration[0]) name = registration[1] if queryUtility(provided, name=name) is not None: sm.unregisterUtility(provided=provided, name=name) rr_js = getToolByName(self, 'portal_javascripts', None) rr_css = getToolByName(self, 'portal_css', None) if rr_js is not None: for js in getattr(self,'resources_js',[]): rr_js.unregisterResource(js) if rr_css is not None: for css in getattr(self,'resources_css',[]): rr_css.unregisterResource(css)
def _cascadeRemove(self, cascade): """Cascaded removal of objects """ portal = getToolByName(self, 'portal_url').getPortalObject() if 'types' in cascade: portal_types = getToolByName(self, 'portal_types') delObjects(portal_types, getattr(aq_base(self), 'types', [])) if 'skins' in cascade: portal_skins = getToolByName(self, 'portal_skins') delObjects(portal_skins, getattr(aq_base(self), 'skins', [])) if 'actions' in cascade and len(getattr(aq_base(self), 'actions', [])) > 0: portal_actions = getToolByName(self, 'portal_actions') for info in self.actions: if isinstance(info, basestring): action = info # Product was installed before CMF 2.1 # Try to remove the action from all categories for category in portal_actions.objectIds(): cat = portal_actions[category] if action in cat.objectIds(): cat._delObject(action) else: category, action = info if category in portal_actions.objectIds(): cat = portal_actions[category] if action in cat.objectIds(): cat._delObject(action) if len(cat.objectIds()) == 0: del cat portal_actions._delObject(category) if 'portalobjects' in cascade: delObjects(portal, getattr(aq_base(self), 'portalobjects', [])) if 'workflows' in cascade: portal_workflow = getToolByName(self, 'portal_workflow') delObjects(portal_workflow, getattr(aq_base(self), 'workflows', [])) if 'slots' in cascade: if self.getLeftSlots(): portal.left_slots = [s for s in portal.left_slots if s not in self.getLeftSlots()] if self.getRightSlots(): portal.right_slots = [s for s in portal.right_slots if s not in self.getRightSlots()] if 'registrypredicates' in cascade: ctr = getToolByName(self, 'content_type_registry') ids = [id for id, predicate in ctr.listPredicates()] predicates = getattr(aq_base(self), 'registrypredicates', []) for p in predicates: if p in ids: ctr.removePredicate(p) else: logger.warning("Failed to delete '%s' from content type " "registry" % p) if 'adapters' in cascade: adapters = getattr(aq_base(self), 'adapters', []) if adapters: sm = getSiteManager() # TODO: expand this to actually cover adapter registrations if 'utilities' in cascade: utilities = getattr(aq_base(self), 'utilities', []) if utilities: sm = getSiteManager() mapping = sm.objectItems() for registration in utilities: provided = _resolveDottedName(registration[0]) name = registration[1] utility = queryUtility(provided, name=name) if utility is not None: sm.unregisterUtility(provided=provided, name=name) # Make sure utilities are removed from the # site manager's mapping as well for name, value in mapping: if value is utility: sm._delObject(name, suppress_events=True) rr_js = getToolByName(self, 'portal_javascripts', None) rr_css = getToolByName(self, 'portal_css', None) if rr_js is not None: for js in getattr(aq_base(self), 'resources_js', []): rr_js.unregisterResource(js) if rr_css is not None: for css in getattr(aq_base(self), 'resources_css', []): rr_css.unregisterResource(css) portal_controlpanel = getToolByName(self, 'portal_controlpanel', None) if portal_controlpanel is not None: portal_controlpanel.unregisterApplication(self.id)
def _cascadeRemove(self, cascade): """Cascaded removal of objects """ portal = getToolByName(self, 'portal_url').getPortalObject() if 'types' in cascade: portal_types = getToolByName(self, 'portal_types') delObjects(portal_types, getattr(aq_base(self), 'types', [])) if 'skins' in cascade: portal_skins = getToolByName(self, 'portal_skins') delObjects(portal_skins, getattr(aq_base(self), 'skins', [])) if ( 'actions' in cascade and len(getattr(aq_base(self), 'actions', [])) > 0 ): portal_actions = getToolByName(self, 'portal_actions') for info in self.actions: if isinstance(info, six.string_types): action = info # Product was installed before CMF 2.1 # Try to remove the action from all categories for category in portal_actions.objectIds(): cat = portal_actions[category] if action in cat.objectIds(): cat._delObject(action) else: category, action = info if category in portal_actions.objectIds(): cat = portal_actions[category] if action in cat.objectIds(): cat._delObject(action) if len(cat.objectIds()) == 0: del cat portal_actions._delObject(category) if 'portalobjects' in cascade: delObjects(portal, getattr(aq_base(self), 'portalobjects', [])) if 'workflows' in cascade: portal_workflow = getToolByName(self, 'portal_workflow') delObjects( portal_workflow, getattr(aq_base(self), 'workflows', []) ) if 'slots' in cascade: if self.getLeftSlots(): portal.left_slots = [ s for s in portal.left_slots if s not in self.getLeftSlots() ] if self.getRightSlots(): portal.right_slots = [ s for s in portal.right_slots if s not in self.getRightSlots() ] if 'registrypredicates' in cascade: ctr = getToolByName(self, 'content_type_registry') ids = [id for id, predicate in ctr.listPredicates()] predicates = getattr(aq_base(self), 'registrypredicates', []) for pred in predicates: if pred in ids: ctr.removePredicate(pred) else: logger.warning("Failed to delete '%s' from content type " "registry" % pred) if 'adapters' in cascade: adapters = getattr(aq_base(self), 'adapters', []) if adapters: sm = getSiteManager() # TODO: expand this to actually cover adapter registrations if 'utilities' in cascade: utilities = getattr(aq_base(self), 'utilities', []) if utilities: sm = getSiteManager() mapping = sm.objectItems() for registration in utilities: provided = _resolveDottedName(registration[0]) name = registration[1] utility = queryUtility(provided, name=name) if utility is not None: sm.unregisterUtility(provided=provided, name=name) # Make sure utilities are removed from the # site manager's mapping as well for name, value in mapping: if value is utility: sm._delObject(name, suppress_events=True) rr_js = getToolByName(self, 'portal_javascripts', None) rr_css = getToolByName(self, 'portal_css', None) if rr_js is not None: for js in getattr(aq_base(self), 'resources_js', []): rr_js.unregisterResource(js) if rr_css is not None: for css in getattr(aq_base(self), 'resources_css', []): rr_css.unregisterResource(css) portal_controlpanel = getToolByName(self, 'portal_controlpanel', None) if portal_controlpanel is not None: portal_controlpanel.unregisterApplication(self.id)