Beispiel #1
0
    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)
Beispiel #2
0
    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)