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)
def clear(self): """ Clear the markage """ if not IOpengraphable.providedBy(self.context): return noLongerProvides(self.context, IOpengraphable) self.context.reindexObject(idxs=['object_provides'])
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)
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'))
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))
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)
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)
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__()
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)
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)
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')
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))
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"
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)
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'))
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])
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'))
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)
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()
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')
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'))
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'))
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
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)
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
def _remove_browser_layer(self, layer): noLongerProvides(self.request, layer)
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)
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)
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())
def removeMarkerInterface(obj, *ifaces): for iface in ifaces: if iface.providedBy(obj): noLongerProvides(obj, iface)
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)
def _write_comments(self, value): if value: alsoProvides(self.field, IDiscussableField) else: noLongerProvides(self.field, IDiscussableField)
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)
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())
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)
def provide_dossier_journal_layer(request): try: provide_request_layer(request, IDossierJournalLayer) yield finally: noLongerProvides(request, IDossierJournalLayer)
def _disable_permission_checker(context): noLongerProvides(context, ICustomPermissionProvider) base.unregisterAdapter(required=(ICustomPermissionProvider, ), provided=IFieldPermissionChecker)
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)
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())
def _write_changelog(self, value): if value: alsoProvides(self.field, IVersionableField) else: noLongerProvides(self.field, IVersionableField)