def setData(self, interfacedata, metadata):
        """
        Sets a list of properties on a object.
        Warning: all currently set properties which are not in the
        properties-list wille be removed!

        @param object:      Plone-Object to set the properties on
        @type object:       Plone-Object
        @param properties:  list of propertes.
                            See ftw.publisher.sender.extractor
                            for format details.
        @param type:        list
        @return:            None
        """
        self.logger.info('Updating interface data (UID %s)' %
                (self.object.UID())
        )

        current_ifaces = set(self.adapted.getDirectlyProvidedNames())
        desired_ifaces = set(interfacedata)

        for iface_dotted in current_ifaces - desired_ifaces:
            iface = resolve(iface_dotted)
            noLongerProvides(self.object, iface)

        for iface_dotted in desired_ifaces - current_ifaces:
            iface = resolve(iface_dotted)
            alsoProvides(self.object, iface)
def unmarkTargetOnRemove(alias, event):
    """When the alias is created, 
    """
    target = aq_inner(alias._target)
    if target is not None and IHasAlias.providedBy(target):
        
        intids = queryUtility(IIntIds)
        catalog = queryUtility(ICatalog)
        
        if intids is not None and catalog is not None:
            
            try:
                to_id = intids.getId(target)
            except KeyError:
                logger.error("Alias target %s does not have an intid" % target)
                return
            
            alias_base = aq_base(alias)
            
            for rel in catalog.findRelations({
                'to_id': to_id,
                'from_interfaces_flattened': IAlias,
                'from_attribute': '_aliasTarget',
            }):
                # abort if there is another alias
                if alias_base is not rel.from_object:
                    return
        
        noLongerProvides(target, IHasAlias)
예제 #3
0
 def clear(self):
     """ Clear the markage
     """
     if not IOpengraphable.providedBy(self.context):
         return
     noLongerProvides(self.context, IOpengraphable)
     self.context.reindexObject(idxs=['object_provides'])
예제 #4
0
    def test_form_checked_options(self):
        login(self.portal, TEST_USER_NAME)
        alsoProvides(self.document, IPreventDelete)
        form = PreventActionsForm(self.document, self.request)
        form.updateWidgets()

        widget = form.widgets.get('delete')
        delete_widget_value = widget.items[0]
        self.assertTrue(delete_widget_value['checked'])
        widget = form.widgets.get('move_or_rename')
        move_or_rename_widget_value = widget.items[0]
        self.assertFalse(move_or_rename_widget_value['checked'])

        noLongerProvides(self.document, IPreventDelete)
        form.updateWidgets()

        widget = form.widgets.get('delete')
        delete_widget_value = widget.items[0]
        self.assertFalse(delete_widget_value['checked'])
        widget = form.widgets.get('move_or_rename')
        move_or_rename_widget_value = widget.items[0]
        self.assertFalse(move_or_rename_widget_value['checked'])

        alsoProvides(self.document, IPreventMoveOrRename)
        form.updateWidgets()

        widget = form.widgets.get('delete')
        delete_widget_value = widget.items[0]
        self.assertFalse(delete_widget_value['checked'])
        widget = form.widgets.get('move_or_rename')
        move_or_rename_widget_value = widget.items[0]
        self.assertTrue(move_or_rename_widget_value['checked'])
 def content(self):
     try:
         return futures.resultOrSubmit(
             'futures.testing', u'placeholder',
             echo, u'testing-result-or-submit')
     finally:
         noLongerProvides(self.request, IContainsPromises)
예제 #6
0
 def rebuild_catalog(self):
     context = self.context
     upgrades.upgrade_plone(context)
     catalog = getToolByName(self.context, 'portal_catalog')
     upgrades.log('Recataloging items')
     brains = catalog.search({})
     lb = len(brains)
     for i, itm in enumerate(brains):
         try:
             obj = context.unrestrictedTraverse(itm.getPath())
             uid = '/'.join(obj.getPhysicalPath())
             if not uid in catalog._catalog.uids:
                 catalog.catalog_object(obj)
                 catalog.indexObject(obj)
             # let the objects be wrapped now by plone.indexer
             if IIndexableObject.providedBy(obj):
                 interface.noLongerProvides(obj, IIndexableObject)
                 catalog.reindexObject(obj, [
                     "allowedRolesAndUsers",
                     "object_provides",
                     "sortable_title",
                     "getObjPositionInParent",
                     "getObjSize",
                     "is_folderish",
                     "syndication_enabled",
                     "is_default_page",
                     "getIcon"]
                 )
         except Exception, e:
             upgrades.log('pb cataloging %s; %s' % (itm.getPath(), e))
         if i % 10 == 0:
             upgrades.log('Recatalog: %s on %s (%s %s)' % (
                 i, lb, (i / (1.0 * lb) * 100), '%'))
             upgrades.commit(context)
 def disable(self):
     """ See IFacetedSubtyper
     """
     if not self.can_disable:
         return self._redirect('Faceted search navigation not supported')
     noLongerProvides(self.context, IFacetedSearchMode)
     self._redirect(_('Faceted search disabled'))
예제 #8
0
    def mark_section(self, element):

        if self.already_marked(element, 'section'):
            return

        catalog = getToolByName(self.context, 'portal_catalog')
        # search *only* in this section
        existing = catalog(object_provides=ISectionArticle.__identifier__,
                           section=element.section)

        # existe el caso donde se puede marcar una nota para una seccion,
        # luego cambiarle manualmente la misma, lo que nos dejaria con mas de
        # una *nota de seccion* por seccion
        for article in existing:
            elem = article.getObject()
            context = aq_inner(elem)
            noLongerProvides(context, ISectionArticle)
            context.reindexObject(idxs=['object_provides'])

        context = aq_inner(element)

        alsoProvides(context, ISectionArticle)
        context.reindexObject(idxs=['object_provides'])

        # Disparo un evento sobre el objeto para que se purge desde
        # el handler del policy.
        notify(ObjectModifiedEvent(element))
예제 #9
0
    def upgradeObj(self, obj, path=None):
        obj._p_activate()

        if self.delRemovedObj(obj, path):
            # Deleted don't do anything else
            return

        if '__implements__' in obj.__dict__:
            self.log('Deleting __implements__ instance attributre from %r'
                     % obj)
            del obj.__dict__['__implements__']
            obj._p_changed = True

        if zodb_ifaces.IBroken.providedBy(obj):
            self.log('Removing broken interfaces from %r: %r' %
                     (obj, list(interface.directlyProvidedBy(obj))))
            interface.noLongerProvides(obj, zodb_ifaces.IBroken)

        if not self.update_catalogs:
            return
        base = aq_base(obj)

        if (
                not isinstance(obj, ZCatalog.ZCatalog) and
                callable(getattr(base, 'indexObject', None))):
            obj.indexObject()

        if callable(getattr(base, '_updateCatalog', None)):
            obj._updateCatalog(obj)
예제 #10
0
 def enabled(self, value):
     context = removeAllProxies(self.context)
     if value:
         interface.alsoProvides(context, self.marker)
     else:
         if self.marker in interface.directlyProvidedBy(context):
             interface.noLongerProvides(context, self.marker)
예제 #11
0
    def __call__(self):
        if self.request.get('submitted'):
            dryrun = self.request.get('dryrun', False) == 'true' or False
            try:
                iface = resolve(self.request.get('dottedname'))
            except ImportError:
                # can't find, let's create it and maybe we can still fix it..
                module, name = self.request.get('dottedname').rsplit('.', 1)
                _, iface = classfactory.create_module(module, name)

            self.request.response.write('Removing %s\n' % \
                self.request.get('dottedname'))

            obj = self.context
            if iface.providedBy(obj):
                if not dryrun:
                    noLongerProvides(obj, iface)
                self.request.response.write('Removed from %s\n' % \
                    self.obj_path(obj))
            if not dryrun:
                undoom_transaction()
            self.check_folder(obj, iface, dryrun)
            self.request.response.write('done.')
        else:
            return super(RemoveInterfaces, self).__call__()
예제 #12
0
def remove_markers(content, event):
    target = content
    if IVersion.providedBy(content):
        target = content.get_silva_object()
    for marker in event.design.markers:
        if marker.providedBy(target):
            noLongerProvides(target, marker)
예제 #13
0
파일: test_five.py 프로젝트: jean/z3c.jbot
    def test_override_for_httprequest(self):
        from z3c.jbot.metaconfigure import handler
        from zope import interface
        from zope.publisher.interfaces.browser import IHTTPRequest

        class IHTTPSRequest(IHTTPRequest):
            pass

        # register handlers
        handler(
            "%s/overrides/interface" % self._tests, interface.Interface)
        handler(
            "%s/overrides/https" % self._tests, IHTTPSRequest)

        # we get the general override
        self.assertEqual(self._view.template(), self._interface_override)

        # provide the http layer
        from zope.interface import alsoProvides
        alsoProvides(self._request, IHTTPSRequest)
        self.assertEqual(self._view.template(), self._https_override)

        # revert to general override
        from zope.interface import noLongerProvides
        noLongerProvides(self._request, IHTTPSRequest)
        self.assertEqual(self._view.template(), self._interface_override)
예제 #14
0
    def set_image(self, image, contentType=None, filename=None):
        if image and not INamedBlobImage.providedBy(image):
            if hasattr(image, 'data'):
                data = image.data
            elif hasattr(image, 'read'):
                data = image.read()
            else:
                data = image
            if hasattr(image, 'filename') and not filename:
                filename = unicode(image.filename)
            elif hasattr(image, 'name') and not filename:
                filename = image.name.split('/').pop()
            if hasattr(image, 'contentType') and not contentType:
                contentType = image.contentType
            elif hasattr(image, 'encoding') and not contentType:
                contentType = image.encoding
            image = NamedBlobImage(data, contentType, unicode(filename))

        if not image and IGraphicallyCustomized.providedBy(self.context):
            noLongerProvides(self.context, IGraphicallyCustomized)
            del IAnnotations(self.context)[self._annotation]
        if image and not IGraphicallyCustomized.providedBy(self.context):
            alsoProvides(self.context, IGraphicallyCustomized)
        if image:
            IAnnotations(
                self.context)[self._annotation] = PersistentDict()
            IAnnotations(
                self.context).get(
                self._annotation)['original'] = image
    def filter(self, components):
        """Returns a filtered list of components.

        :param components: (name, component) pairs of article components and their names
        :type components: list
        :returns: sorted (name, component) pairs of article components and their names
        :rtype: list of tuples
        """

        # prevent crashing if passing in an empty list of components
        if not components:
            return []

        # temporary provide all interfaces of the registered components
        notprovided = self.provide_all_interfaces(components)

        # get a list of all viewlets, ordered by their viewlet manager
        order = self.get_ordered_viewlets()

        # no longer provide the interfaces previously set
        for iface in notprovided:
            interface.noLongerProvides(self.context, iface)

        # compile a list of components whose viewlets are present in the list
        # of ordered viewlets
        components = [(name, comp) for name, comp in components
                                                  if comp.viewlet in order]

        # sort components based on their position in 'order'
        components = self.sort_components(components, order)
        return components
def uninstall(context):
    # Note: this function is registered as a pre_handler instead of a
    # post_handler, because otherwise toolset.xml has already been applied,
    # which removes the portal_placeful_workflow tool.
    portal = getToolByName(context, 'portal_url').getPortalObject()
    tool = getattr(portal, 'portal_placeful_workflow', None)
    if tool is not None:
        getSiteManager(portal).unregisterUtility(
            tool,
            IPlacefulWorkflowTool)
        logger.info('Unregistered portal_placeful_workflow')
    # uninstall configlets
    try:
        cptool = getToolByName(portal, 'portal_controlpanel')
        cptool.unregisterConfiglet(placeful_prefs_configlet['id'])
        logger.info('Removing CMFPlacefulWorkflow Configlet')
    except:
        logger.info('Failed to remove CMFPlacefulWorkflow Configlet')

    wf_tool = getToolByName(portal, 'portal_workflow')
    if IPlacefulMarker.providedBy(wf_tool):
        noLongerProvides(wf_tool, IPlacefulMarker)
        logger.info('Removed placeful marker from portal_workflow.')
    # Mark our base profile as uninstalled, because:
    # 1. It is good practice.
    # 2. Otherwise when the user installs CMFPlacefulWorkflow again,
    #    portal_setup will not apply our base profile.
    portal_setup = getToolByName(portal, 'portal_setup')
    portal_setup.unsetLastVersionForProfile(
        'Products.CMFPlacefulWorkflow:base')
예제 #17
0
def unmarkAs(obj, typename):
    for i in interfaces.get(typename, ()):
        noLongerProvides(obj, i)
    z2 = z2interfaces.get(typename, None)
    if z2 is not None:
        implements = getattr(obj, '__implements__', [])
        obj.__implements__ = tuple(set(implements) - set(z2))
예제 #18
0
    def handle_demark(self, action, data):
        res = self.getFilteredContent(data)
        if res:
            exclids = data.get('excludeids', '')
            if exclids:
                exclids = filter(None, [i.strip() for i in exclids.split('\n')])
                res = filter(lambda b:not b.getId in exclids, res)

            exclpaths = data.get('excludepaths', '')
            if exclpaths:
                exclpaths = filter(None, [i.strip() for i in exclpaths.split('\n')])
                res = filter(lambda b:not [1 for ep in exclpaths if b.getPath().startswith(ep)], res)

            # DeMark objects with interface
            demarked = 0
            for b in res:
                ob = b.getObject()
                if IMobile.providedBy(ob):
                    noLongerProvides(ob, IMobile)
                    demarked += 1

            if demarked:
                catalog = getToolByName(self.context, 'portal_catalog')
                catalog.manage_reindexIndex(ids=['object_provides'])

            self.status = "DeMarked %d objects" % demarked
        else:
            self.status = "No objects found for given criterion"
예제 #19
0
 def make_not_cart_aware(self):
     context = aq_inner(self.context)
     noLongerProvides(context, ICartAware)
     parent = aq_parent(context)
     noLongerProvides(parent, ICartAware)
     url = context.absolute_url()
     return self.request.response.redirect(url)
예제 #20
0
파일: media.py 프로젝트: IMIO/cpskin.core
 def disable_media(self):
     """Disable the media"""
     context = self._get_real_context()
     noLongerProvides(context, IMediaActivated)
     catalog = api.portal.get_tool('portal_catalog')
     catalog.reindexObject(context)
     self._redirect(_(u'Multimedia viewlet disabled for content'))
예제 #21
0
 def update(self):
     form = self.request.form
     if form.get("form.button.UpdateContentTypes", None) is not None:
         types = form.get("types", None)
         if types is not None:
             if type(types).__name__ == "str":
                 types = [types]
             context = aq_inner(self.context)
             portal = getToolByName(context, "portal_url").getPortalObject()
             IPortal(portal).cart_properties.content_types = types
             catalog = getToolByName(context, "portal_catalog")
             brains = catalog(portal_type=types)
             if len(brains) != 0:
                 objects = []
                 for brain in brains:
                     obj = brain.getObject()
                     if not IPotentiallyAddableToCart.providedBy(obj):
                         alsoProvides(obj, IPotentiallyAddableToCart)
                 objects.append(obj)
             #                addables = catalog(
             #                    object_provides = IAddableToCart.__identifier__,
             #                )
             addables = [brain.getObject() for brain in catalog(object_provides=IAddableToCart.__identifier__)]
             #                objs = [ad.getObject() for ad in addables if ad in brains]
             objs = [ad.getObject() for ad in addables if ad in objects]
             if len(objs) != 0:
                 for obj in objs:
                     noLongerProvides(obj, [IAddableToCart, IPotentiallyAddableToCart])
예제 #22
0
 def disableFeature(self):
     noLongerProvides(self.context, self.feature_iface)
     self.context.portal_catalog.reindexObject(self.context,
                                               idxs=['object_provides'],
                                               update_metadata=1)
     self.context.plone_utils.addPortalMessage(self.disable_message)
     self.request.response.redirect(self.context.absolute_url())
def disable_behaviors(obj, behaviors, ifaces, reindex=True):
    """ Disable behaviors on an object.

    :param obj: The Dexterity content object to disable behaviors on.
    :type obj: object
    :param behaviors: Behaviors to be disabled on the object. This is a list of
                      dotted names of behavior schema interfaces.
    :type behaviors: list or tuple
    :param ifaces: Behavior marker interfaces belonging to the behaviors to be
                   disabled. This is a list of interface classes.
    :type ifaces: class
    :param reindex: Flag whether to reindex object after modification
    :type reindex: bool

    Use it like so:

    >>> from plone.app.event.dx.interfaces import IDXEvent
    >>> disable_behaviors(obj, ['plone.app.event.dx.behaviors.IEventBasic',],
    ...                        [IDXEvent,])
    """
    annotations = IAnnotations(obj)
    instance_behaviors = annotations.get(ANNOTATION_KEY, ())
    instance_behaviors = filter(lambda x: x not in behaviors,
                                instance_behaviors)
    annotations[ANNOTATION_KEY] = instance_behaviors

    for iface in ifaces:
        noLongerProvides(obj, iface)

    if reindex:
        obj.reindexObject(idxs=('object_provides'))
예제 #24
0
def cleanup_p4a(context):
    """ eea.facetednavigation > 4.0 doesn't depend on p4a.subtyper anymore,
    but your instance will crash if it's missing as there are persistent
    references to p4a.subtyper.interfaces.ISubtyped. After you run this script,
    you should be able to drop p4a.subtyper from your buildout.
    """
    try:
        from p4a.subtyper.interfaces import ISubtyper, ISubtyped
    except ImportError:
        logger.info('p4a.subtyper not installed. Aborting...')
        return


    ctool = getToolByName(context, 'portal_catalog')
    iface = interfaceToName(context, IFacetedNavigable)
    brains = ctool.unrestrictedSearchResults(object_provides=iface)
    for brain in brains:
        doc = brain.getObject()
        anno = queryAdapter(doc, IAnnotations)

        subtyper = getUtility(ISubtyper)
        name = getattr(subtyper.existing_type(doc), 'name', '')
        if 'faceted' not in name.lower():
            continue

        logger.info(
            'Cleanup p4a.subtyper interface and descriptor info for: %s',
            doc.absolute_url())

        noLongerProvides(doc, ISubtyped)
        anno.pop('p4a.subtyper.DescriptorInfo', None)
예제 #25
0
def mark_file(ob, event):
    if safe_hasattr(ob, 'getFile'):
        obfile = ob.getFile()
        reindex = False

        set_track_view = False
        for name, adapter in getAdapters((obfile,), ITypeRecognition):
            iface = adapter.getIface()
            if adapter.isOfType():
                if not iface.providedBy(ob):
                    alsoProvides(ob, iface)
                    reindex = True
                # if there is set an interface, I also want to switch the view
                set_track_view = True
                # ok, found the type. do not check any more.
                break
            else:
                if iface.providedBy(ob):
                    # remove the marker if the file type changed!
                    noLongerProvides(ob, iface)
                    reindex = True

        if set_track_view:
            # if at least one interface is set, switch the view.
            ob.setLayout('track_view')
        else:
            # reset the view
            ob.setLayout(ob.getDefaultLayout())
        # we need to reindex the object, because ObjectEditedEvent is fired
        # after reindexing
        if reindex:
            # TODO: just reindex object_provides?
            ob.reindexObject()
    def setUp(self):
        self.portal = self.layer['portal']
        self.request = self.layer['request']
        # Marca o request
        noLongerProvides(self.request, ICalendarExLayer)
        alsoProvides(self.request, IBrowserLayer)
        alsoProvides(self.request, ICalendarExLayer)

        setRoles(self.portal, TEST_USER_ID, ['Manager'])
        self.folder = api.content.create(
            type='Folder',
            id='test-folder',
            container=self.portal
        )
        self.agenda = api.content.create(
            type='Agenda',
            id='agenda',
            container=self.folder
        )
        self.agendadiaria = api.content.create(
            type='AgendaDiaria',
            id='2014-03-29',
            container=self.agenda
        )
        self.agendadiaria.date = datetime.date(2014, 3, 29)
        self.agendadiaria.reindexObject()
예제 #27
0
def unmake_shopping_site(container, event):
    if container == event.object:
        parent = aq_parent(aq_inner(container))
        noLongerProvides(parent, IShoppingSiteRoot)
        parent.reindexObject(idxs=['object_provides'])
        message = _(u"This container is no longer a shopping site.")
        IStatusMessage(container.REQUEST).addStatusMessage(message, type='warn')
예제 #28
0
def disable_behaviors(obj, behaviors, ifaces):
    """ Disable behaviors on an object.

    :param obj: The Dexterity content object to disable behaviors on.
    :type obj: object
    :param behaviors: Behaviors to be disabled on the object. This is a list of
                      dotted names of behavior schema interfaces.
    :type behaviors: list
    :param ifaces: Behavior marker interfaces belonging to the behaviors to be
                   disabled. This is a list of interface classes.
    :type ifaces: class

    Use it like so:
    >>> from plone.app.event.dx.interfaces import IDXEvent
    >>> disable_behaviors(obj, ['plone.app.event.dx.behaviors.IEventBasic',],
    ...                        [IDXEvent,])

    """
    annotations = IAnnotations(obj)
    instance_behaviors = list(annotations.get(KEY, []))
    instance_behaviors = filter(lambda x: x not in behaviors,
                                instance_behaviors)
    annotations[KEY] = instance_behaviors

    for iface in ifaces:
        noLongerProvides(obj, iface)

    # TODO UNTESTED:
    obj.reindexObject(idxs=('object_provides'))
예제 #29
0
 def disable_banner(self):
     """ Disable the banner """
     context = self._get_real_context()
     noLongerProvides(context, IBannerActivated)
     catalog = api.portal.get_tool('portal_catalog')
     catalog.reindexObject(context)
     self._redirect(_(u'Banner disabled for content and sub-contents'))
예제 #30
0
 def filter(self, components, manager=None):
     """ Returns a filtered list of components
     """
     order = []
     # temporary provide all interfaces of the registered components
     notprovided = []
     for name, comp in components:
         if not comp.interface.providedBy(self.context):
             notprovided.append(comp.interface)
             interface.alsoProvides(self.context, comp.interface)
     view = component.getMultiAdapter((self.context, self.request), name=u'view')
     if manager is not None:
         manager = component.getMultiAdapter((self.context, self.request, view), VIEWLET_MANAGER_MAP.get(manager, object()), name=manager)
         viewlets = component.getAdapters((self.context, self.request, view, manager), IViewlet)
         viewlets = manager.filter(viewlets)
         viewlets = manager.sort(viewlets)
         for name, viewlet in viewlets:
             order.append(name)
     else:
         for name, iface in ORDERED_VIEWLET_MANAGERS:
             manager = component.getMultiAdapter((self.context, self.request, view), iface, name=name)
             viewlets = component.getAdapters((self.context, self.request, view, manager), IViewlet)
             viewlets = manager.filter(viewlets)
             viewlets = manager.sort(viewlets)
             for name, viewlet in viewlets:
                 order.append(name)
     # no longer provide the interfaces previously set
     for iface in notprovided:
         interface.noLongerProvides(self.context, iface)
     components = [(name, comp) for name, comp in components if comp.viewlet in order]
     components.sort(lambda x, y: cmp(order.index(x[1].viewlet), order.index(y[1].viewlet)))
     return components
예제 #31
0
def after_submit(analysis):
    """Event fired when an analysis result gets submitted
    """
    if not IASTAnalysis.providedBy(analysis):
        return

    # Check that values for all interim fields are set
    interim_fields = analysis.getInterimFields()
    values = map(lambda interim: interim.get("value"), interim_fields)
    if not all(values):
        return

    # All siblings for same microorganism and sample have to be submitted
    siblings = utils.get_ast_siblings(analysis)
    submitted = map(ISubmitted.providedBy, siblings)
    if not all(submitted):
        return

    # Calculate the hidden analyses and results
    analyses = siblings + [analysis]

    # We only do report results from "resistance" analysis
    resistance = filter(lambda an: an.getKeyword() == RESISTANCE_KEY, analyses)
    resistance = resistance[0]

    # Results are the values (R/S/+/-) set for resistance' interim fields
    results = resistance.getInterimFields()

    # Find out the resistance results to report
    report_analysis = filter(lambda an: an.getKeyword() == REPORT_KEY,
                             analyses)
    if report_analysis:
        # The results to be reported are defined by the Y/N values set for the
        # interim fields of the "selective reporting" analysis
        to_report = report_analysis[0].getInterimFields()

        # XXX senaite.app.listing has no support boolean type for interim fields
        to_report = filter(lambda k: k.get("value") == "1", to_report)

        # Get the abbreviation of microorganisms (keyword)
        keywords = map(lambda k: k.get("keyword"), to_report)

        # Filter the interim fields from resistance
        results = filter(lambda r: r.get("keyword") in keywords, results)

    # The "selected" result options are those to be reported
    options = resistance.getResultOptions()

    def to_report(option):
        key = option.get("InterimKeyword")
        val = option.get("InterimValue")
        for target in results:
            if key == target.get("keyword") and val == target.get("value"):
                return True
        return False

    # Remove the antibiotics to not report from options
    options = filter(to_report, options)

    # The final result is a list with result option values
    result = map(lambda o: o.get("ResultValue"), options)

    # No need to keep track of this in audit (this is internal)
    noLongerProvides(resistance, IAuditable)

    # Set the final result
    capture_date = resistance.getResultCaptureDate()
    resistance.setResult(result)
    resistance.setResultCaptureDate(capture_date)

    # We do want to report this resistance analysis
    if IInternalUse.providedBy(resistance):
        noLongerProvides(resistance, IInternalUse)

    # Re-enable the audit for this analysis
    alsoProvides(resistance, IAuditable)
예제 #32
0
    def getItems(self):
        context = self.context
        request = self.request
        portal_state = getMultiAdapter((context, request),
                                       name="plone_portal_state")
        portal_url = portal_state.portal_url()
        settings = getMultiAdapter((context, request),
                                   name="megamenu-settings")
        ajax = settings.ajax
        # TODO: Restrict items?
        # Taken from Products/CMFPlone/skins/plone_scripts/getFolderContents.py to bypass show_inactive filter
        catalog = getToolByName(context, 'portal_catalog')
        query = {}
        query['sort_on'] = 'getObjPositionInParent'
        path = {}
        path['query'] = '/'.join(context.getPhysicalPath())
        path['depth'] = 1
        query['path'] = path
        contents = catalog.queryCatalog(
            query,
            show_all=1,
            show_inactive=True,
        )
        #contents = self.context.getFolderContents(contentFilter={'show_inactive': True})

        # Before getting items (actually, before rendering them), remove ICollageEditLayer from request
        composing = ICollageEditLayer.providedBy(request)
        if composing:
            noLongerProvides(request, ICollageEditLayer)

        current_url = request.get('ACTUAL_URL') + '/'
        items = []
        for content in contents:
            item = {}
            item['id'] = content.getId
            item['object'] = content
            is_collage = content.meta_type == 'Collage'
            if is_collage:
                collage = content.getObject()

            item['with_menu'] = is_collage
            item['title'] = content.Title or ''
            item['description'] = content.Description or ''
            if content.meta_type == 'ATLink':
                # For ATLinks, get the link
                remoteUrl = content.getRemoteUrl
                if remoteUrl[0] == '/':
                    item['url'] = '%s%s' % (portal_url, remoteUrl)
                else:
                    item['url'] = remoteUrl
            else:
                # For other contents, get its url
                item['url'] = content.getURL()
                if is_collage:
                    # Bug if it's a Collage, try to get its first related item
                    related = collage.getRelatedItems()
                    if len(related) > 0:
                        item['url'] = related[0].absolute_url()

            # Should item be rendererd as 'selected'?
            # 1. item.url==portal_url and current_url==item.url
            # 2. item.url!=portal_url and current_url.startswith(item.url)
            if (item['url']==portal_url+'/' and current_url==item['url']) or \
               (item['url']!=portal_url+'/' and current_url.startswith(item['url'])):
                item['selected_class'] = 'selected'
            else:
                item['selected_class'] = ''

            if is_collage:
                item['class'] = 'menu-dropdown'
                if not ajax:
                    item['dropdown'] = collage.restrictedTraverse(
                        '@@menu-renderer')()
                    item['deferred'] = ''
                else:
                    item['dropdown'] = ''
                    item['deferred'] = '%s%s' % (content.getURL(),
                                                 '/@@menu-renderer')
            else:
                item['class'] = ''
                item['dropdown'] = None
                item['deferred'] = ''

            items.append(item)

        if composing:
            alsoProvides(request, ICollageEditLayer)

        return items
예제 #33
0
 def _remove_browser_layer(self, layer):
     noLongerProvides(self.request, layer)
예제 #34
0
def provide_dossier_task_layer(request):
    try:
        provide_request_layer(request, IDossierTasksLayer)
        yield
    finally:
        noLongerProvides(request, IDossierTasksLayer)
def removeMarkerInterface(obj, *ifaces):
    """ remove a marker interface
    """
    for iface in ifaces:
        if iface.providedBy(obj):
            interface.noLongerProvides(obj, iface)
예제 #36
0
def after_rollback_to_receive(analysis_request):
    """Function triggered after "rollback to receive" transition is performed
    """
    if IVerified.providedBy(analysis_request):
        noLongerProvides(analysis_request, IVerified)
예제 #37
0
 def disable(self):
     """Disable syndication for a folder"""
     self.revert()
     noLongerProvides(self.context, ISyndicatable)
 def disablePowerTokens(self, content):
     annotations = IAnnotations(content)
     del annotations[config.MAIN_TOKEN_NAME]
     noLongerProvides(content, IPowerTokenizedContent)
     content.reindexObject(idxs=['object_provides'])
 def make_order_number_unaware(self):
     context = aq_inner(self.context)
     noLongerProvides(context, IOrderNumberAware)
     del IAnnotations(context)['collective.pfg.payment']
     return self.request.response.redirect(context.absolute_url())
예제 #40
0
def removeMarkerInterface(obj, *ifaces):
    for iface in ifaces:
        if iface.providedBy(obj):
            noLongerProvides(obj, iface)
예제 #41
0
 def unmanage_dev_work(self):
     noLongerProvides(self.context, IManageDevWork)
     self.context.reindexObject(idxs=['object_provides'])
     url = self.context.absolute_url()
     return self.request.response.redirect(url)
예제 #42
0
 def _write_comments(self, value):
     if value:
         alsoProvides(self.field, IDiscussableField)
     else:
         noLongerProvides(self.field, IDiscussableField)
예제 #43
0
    def __call__(self):
        log = self.mklog()
        real = timer()

        self.install_folderish_types()
        log("collective.folderishtypes installed.")

        catalog = api.portal.get_tool("portal_catalog")
        catalog.clearFindAndRebuild()
        log("Portal catalog has been rebuilt.")

        changed_base_classes = [
            "plone.app.contenttypes.content.Document",
            "plone.app.contenttypes.content.NewsItem",
            "plone.app.contenttypes.content.Event",
        ]

        migrated = []
        not_migrated = []
        for brain in catalog():
            obj = brain.getObject()
            old_class_name = dxmigration.get_old_class_name_string(obj)
            if old_class_name in changed_base_classes:
                prevented_delete = prevented_move = False
                obj_id = obj.getId()
                parent = aq_parent(aq_inner(obj))
                if IPreventDelete.providedBy(obj):
                    prevented_delete = True
                    noLongerProvides(obj, IPreventDelete)
                if IPreventMoveOrRename.providedBy(obj):
                    prevented_move = True
                    noLongerProvides(obj, IPreventMoveOrRename)
                position_in_parent = None
                ordered = IOrderedContainer(parent, None)
                if ordered is not None:
                    position_in_parent = ordered.getObjectPosition(obj_id)
                if dxmigration.migrate_base_class_to_new_class(
                        obj, migrate_to_folderish=True):
                    migrated.append(obj)
                    if position_in_parent is not None:
                        ordered.moveObject(obj_id, position_in_parent)
                    if prevented_delete:
                        alsoProvides(obj, IPreventDelete)
                    if prevented_move:
                        alsoProvides(obj, IPreventMoveOrRename)
                else:
                    not_migrated.append(obj)

        if migrated:
            log("{0} objects have been migrated.".format(len(migrated)))
        if not_migrated:
            log(
                "{0} objects have NOT been migrated.".format(
                    len(not_migrated)),
                level="warn",
            )

        catalog.clearFindAndRebuild()
        log("Portal catalog has been rebuilt.")

        msg = "Processed folderish types migration in {0}.".format(real.next())
        log(msg)
예제 #44
0
    def test_INode(self):
        # XXX: make tester object for INode contract
        # XXX: decide wether ``aliases`` or ``aliaser`` (still dunno) should be
        #      kept in base interface.

        # printtree
        mynode = create_tree(MyNode)
        self.check_output(
            """\
        <class 'node.testing.env.MyNode'>: None
          <class 'node.testing.env.MyNode'>: child_0
            <class 'node.testing.env.MyNode'>: subchild_0
            <class 'node.testing.env.MyNode'>: subchild_1
          <class 'node.testing.env.MyNode'>: child_1
            <class 'node.testing.env.MyNode'>: subchild_0
            <class 'node.testing.env.MyNode'>: subchild_1
          <class 'node.testing.env.MyNode'>: child_2
            <class 'node.testing.env.MyNode'>: subchild_0
            <class 'node.testing.env.MyNode'>: subchild_1
        """, mynode.treerepr())

        basenode = create_tree(BaseNode)
        self.check_output(
            """\
        <class 'node.base.BaseNode'>: None
          <class 'node.base.BaseNode'>: child_...
            <class 'node.base.BaseNode'>: subchild_...
            <class 'node.base.BaseNode'>: subchild_...
          <class 'node.base.BaseNode'>: child_...
            <class 'node.base.BaseNode'>: subchild_...
            <class 'node.base.BaseNode'>: subchild_...
          <class 'node.base.BaseNode'>: child_...
            <class 'node.base.BaseNode'>: subchild_...
            <class 'node.base.BaseNode'>: subchild_...
        """, basenode.treerepr())

        orderednode = create_tree(OrderedNode)
        self.check_output(
            """\
        <class 'node.base.OrderedNode'>: None
          <class 'node.base.OrderedNode'>: child_0
            <class 'node.base.OrderedNode'>: subchild_0
            <class 'node.base.OrderedNode'>: subchild_1
          <class 'node.base.OrderedNode'>: child_1
            <class 'node.base.OrderedNode'>: subchild_0
            <class 'node.base.OrderedNode'>: subchild_1
          <class 'node.base.OrderedNode'>: child_2
            <class 'node.base.OrderedNode'>: subchild_0
            <class 'node.base.OrderedNode'>: subchild_1
        """, orderednode.treerepr())

        # path
        mynode.__name__ = 'root'
        self.assertEqual(mynode.path, ['root'])
        self.assertEqual(mynode['child_1']['subchild_1'].path,
                         ['root', 'child_1', 'subchild_1'])

        basenode.__name__ = 'root'
        self.assertEqual(basenode.path, ['root'])
        self.assertEqual(basenode['child_1']['subchild_1'].path,
                         ['root', 'child_1', 'subchild_1'])

        orderednode.__name__ = 'root'
        self.assertEqual(orderednode.path, ['root'])
        self.assertEqual(orderednode['child_1']['subchild_1'].path,
                         ['root', 'child_1', 'subchild_1'])

        # root
        self.assertTrue(mynode['child_1']['subchild_1'].root is mynode)
        self.assertTrue(basenode['child_1']['subchild_1'].root is basenode)
        self.assertTrue(
            orderednode['child_1']['subchild_1'].root is orderednode)

        # allow_non_node_childs
        self.assertFalse(mynode.allow_non_node_childs)

        def non_node_childs_not_allowed():
            mynode['foo'] = object()

        err = self.expect_error(ValueError, non_node_childs_not_allowed)
        self.assertEqual(str(err), 'Non-node childs are not allowed.')

        def no_classes_as_values_allowed():
            mynode['foo'] = object

        err = self.expect_error(ValueError, no_classes_as_values_allowed)
        expected = 'It isn\'t allowed to use classes as values.'
        self.assertEqual(str(err), expected)

        mynode.allow_non_node_childs = True
        obj = mynode['foo'] = object()
        self.assertEqual(mynode['foo'], obj)

        del mynode['foo']
        mynode.allow_non_node_childs = False

        self.assertFalse(basenode.allow_non_node_childs)

        def non_node_childs_not_allowed2():
            basenode['foo'] = object()

        err = self.expect_error(ValueError, non_node_childs_not_allowed2)
        self.assertEqual(str(err), 'Non-node childs are not allowed.')

        def no_classes_as_values_allowed2():
            basenode['foo'] = object

        err = self.expect_error(ValueError, no_classes_as_values_allowed2)
        expected = 'It isn\'t allowed to use classes as values.'
        self.assertEqual(str(err), expected)

        basenode.allow_non_node_childs = True
        obj = basenode['foo'] = object()
        self.assertEqual(basenode['foo'], obj)

        del basenode['foo']
        basenode.allow_non_node_childs = False

        self.assertFalse(orderednode.allow_non_node_childs)

        def non_node_childs_not_allowed3():
            orderednode['foo'] = object()

        err = self.expect_error(ValueError, non_node_childs_not_allowed3)
        self.assertEqual(str(err), 'Non-node childs are not allowed.')

        def no_classes_as_values_allowed3():
            orderednode['foo'] = object

        err = self.expect_error(ValueError, no_classes_as_values_allowed3)
        expected = 'It isn\'t allowed to use classes as values.'
        self.assertEqual(str(err), expected)

        orderednode.allow_non_node_childs = True
        obj = orderednode['foo'] = object()
        self.assertEqual(orderednode['foo'], obj)

        del orderednode['foo']
        orderednode.allow_non_node_childs = False

        # filteredvalues and filtereditervalues
        class IFilter(Interface):
            pass

        directlyProvides(mynode['child_2'], IFilter)
        self.assertEqual(list(mynode.filtereditervalues(IFilter)),
                         [mynode['child_2']])
        self.assertEqual(mynode.filteredvalues(IFilter), [mynode['child_2']])
        noLongerProvides(mynode['child_2'], IFilter)
        self.assertEqual(list(mynode.filtereditervalues(IFilter)), [])
        self.assertEqual(mynode.filteredvalues(IFilter), [])

        directlyProvides(basenode['child_2'], IFilter)
        self.assertEqual(list(basenode.filtereditervalues(IFilter)),
                         [basenode['child_2']])
        self.assertEqual(basenode.filteredvalues(IFilter),
                         [basenode['child_2']])
        noLongerProvides(basenode['child_2'], IFilter)
        self.assertEqual(list(basenode.filtereditervalues(IFilter)), [])
        self.assertEqual(basenode.filteredvalues(IFilter), [])

        directlyProvides(orderednode['child_2'], IFilter)
        self.assertEqual(list(orderednode.filtereditervalues(IFilter)),
                         [orderednode['child_2']])
        self.assertEqual(orderednode.filteredvalues(IFilter),
                         [orderednode['child_2']])
        noLongerProvides(orderednode['child_2'], IFilter)
        self.assertEqual(list(orderednode.filtereditervalues(IFilter)), [])
        self.assertEqual(orderednode.filteredvalues(IFilter), [])

        # as_attribute_access
        myattrs = mynode.as_attribute_access()
        self.assertEqual(myattrs.__class__, AttributeAccess)
        self.assertEqual(myattrs.child_1, mynode['child_1'])
        myattrs.child_3 = MyNode()
        self.assertEqual(mynode['child_3'], myattrs.child_3)

        def no_classes_as_values_allowed4():
            myattrs.child_4 = object

        err = self.expect_error(ValueError, no_classes_as_values_allowed4)
        expected = 'It isn\'t allowed to use classes as values.'
        self.assertEqual(str(err), expected)

        baseattrs = basenode.as_attribute_access()
        self.assertEqual(baseattrs.__class__, AttributeAccess)
        self.assertEqual(baseattrs.child_1, basenode['child_1'])
        baseattrs.child_3 = BaseNode()
        self.assertEqual(basenode['child_3'], baseattrs.child_3)

        def no_classes_as_values_allowed5():
            baseattrs.child_4 = object

        err = self.expect_error(ValueError, no_classes_as_values_allowed5)
        expected = 'It isn\'t allowed to use classes as values.'
        self.assertEqual(str(err), expected)

        orderedattrs = orderednode.as_attribute_access()
        self.assertEqual(orderedattrs.__class__, AttributeAccess)
        self.assertEqual(orderedattrs.child_1, orderednode['child_1'])
        orderedattrs.child_3 = OrderedNode()
        self.assertEqual(orderednode['child_3'], orderedattrs.child_3)

        def no_classes_as_values_allowed6():
            orderedattrs.child_4 = object

        err = self.expect_error(ValueError, no_classes_as_values_allowed6)
        expected = 'It isn\'t allowed to use classes as values.'
        self.assertEqual(str(err), expected)
 def __call__(self):
     noLongerProvides(self.context, IPortletFace)
     plone_utils = getToolByName(self.context, 'plone_utils')
     plone_utils.addPortalMessage(_(u"Extra portlets have been disabled"))
     self.request.response.redirect(self.context.absolute_url())
예제 #46
0
 def __exit__(self, exc_type, exc_val, exc_tb):
     noLongerProvides(getRequest(), IDontIssueDossierReferenceNumber)
 def _write_languageindependent(self, value):
     if value:
         alsoProvides(self.field, ILanguageIndependentField)
     else:
         noLongerProvides(self.field, ILanguageIndependentField)
예제 #48
0
def provide_dossier_journal_layer(request):
    try:
        provide_request_layer(request, IDossierJournalLayer)
        yield
    finally:
        noLongerProvides(request, IDossierJournalLayer)
예제 #49
0
def _disable_permission_checker(context):
    noLongerProvides(context, ICustomPermissionProvider)
    base.unregisterAdapter(required=(ICustomPermissionProvider, ),
                           provided=IFieldPermissionChecker)
예제 #50
0
    def traverse(self, name, ignored):

        form = self._prepareForm()

        # Since we cannot check security during traversal,
        # we delegate the check to the widget view.
        alsoProvides(self.request, IDeferSecurityCheck)
        form.update()
        noLongerProvides(self.request, IDeferSecurityCheck)

        # If name begins with form.widgets., remove it
        form_widgets_prefix = util.expandPrefix(
            form.prefix) + util.expandPrefix(form.widgets.prefix)
        if name.startswith(form_widgets_prefix):
            name = name[len(form_widgets_prefix):]

        # Split string up into dotted segments and work through
        target = aq_base(form)
        parts = name.split('.')
        while len(parts) > 0:
            part = parts.pop(0)
            # i.e. a z3c.form.widget.MultiWidget
            if isinstance(getattr(target, 'widgets', None), list):
                try:
                    # part should be integer index in list, look it up
                    target = target.widgets[int(part)]
                except IndexError:
                    raise TraversalError("'" + part + "' not in range")
                except ValueError:
                    # HACK: part isn't integer. Iterate through widgets to
                    # find matching name. This is required for
                    # DataGridField, which appends 'AA' and 'TT' rows to
                    # it's widget list.
                    full_name = util.expandPrefix(target.prefix) + part
                    filtered = [w for w in target.widgets
                                if w.name == full_name]
                    if len(filtered) == 1:
                        target = filtered[0]
                    else:
                        raise TraversalError("'" + part + "' not valid index")
            elif hasattr(target, 'widgets'):  # Either base form, or subform
                # Check to see if we can find a "Behaviour.widget"
                new_target = None
                if len(parts) > 0:
                    new_target = self._form_traverse(
                        target,
                        part +
                        '.' +
                        parts[0])

                if new_target is not None:
                    # Remove widget name from stack too
                    parts.pop(0)
                else:
                    # Find widget in form without behaviour prefix
                    new_target = self._form_traverse(target, part)

                target = new_target
            # subform-containing widget, only option is to go into subform
            elif hasattr(target, 'subform'):
                if part == 'widgets':
                    target = target.subform
                else:
                    target = None
            else:
                raise TraversalError(
                    'Cannot traverse through ' +
                    target.__repr__())

            # Could not traverse from target to part
            if target is None:
                raise TraversalError(part)

        # Make the parent of the widget the traversal parent.
        # This is required for security to work in Zope 2.12
        if target is not None:
            target.__parent__ = aq_inner(self.context)
            return target
        raise TraversalError(name)
예제 #51
0
 def disable(self):
     """Disable icalendar import on this context.
     """
     noLongerProvides(self.context, IICalendarImportEnabled)
     self.context.reindexObject(idxs=('object_provides'))
     self.request.response.redirect(self.context.absolute_url())
예제 #52
0
 def _write_changelog(self, value):
     if value:
         alsoProvides(self.field, IVersionableField)
     else:
         noLongerProvides(self.field, IVersionableField)