def available(self, form): content = form.getContentData().getContent() if ILocation.providedBy(content): container = content.__parent__ return (hasattr(container, '__delitem__') and hasattr(container, '__contains__')) return False
def locate_view(request, obj, name=""): view = func(request, obj, name=name) if view is not None: if not ILocation.providedBy(view): view = LocationProxy(view) locate(view, name=name, parent=obj) return view
def setLocalRegistry(self, reg, locate=locate): assert IRegistry.providedBy(reg) if locate is not None: if ILocation.providedBy(reg): locate(reg, self, '@registry') else: raise TypeError("Can't locate non ILocation registries.") self._registry = reg
def exception_view(request, exception): view = IView(exception, request) if view is not None: # Make sure it's properly located. if not ILocation.providedBy(view): view = LocationProxy(view) locate(view, parent=exception, name='exception') return IResponseFactory(view) return None
def update_batch(self): if self.createBatch: content = self.getContentData().getContent() if not ILocation.providedBy(content): content = LocationProxy(content) content.__parent__ = self content.__name__ = '' self.batcher = Batcher( content, self.request, self.prefix, size=self.batchSize) self.batcher.update(self.lines)
def publishTraverse(self, request, name): """See zope.publisher.interfaces.IPublishTraverse""" if name in self.collection_attributes: container = getattr(self.context, name) if ILocation.providedBy(container): trusted_ctx = removeSecurityProxy(container) trusted_ctx.__parent__ = self.context trusted_ctx.__name__ = name return container raise NotFound(self.context, name, request)
def lineage(item): while item is not None: yield item try: item = item.__parent__ except AttributeError: # We try an adaptation. If it fails, this time, we let it # bubble up. item = ILocation(item) item = item.__parent__
def getStudent(self, key): model = self.query_filters(self.session.query(self.model)).get(key) if model is None: raise KeyError(key) if not ILocation.providedBy(model): model = LocationProxy(model) locate(model, self, self.key_reverse(model)) return model
def publishTraverse(self, request, name): """See zope.publisher.interfaces.IPublishTraverse""" if name in self.collection_attributes: container = getattr( self.context, name ) if ILocation.providedBy( container ): trusted_ctx = removeSecurityProxy( container ) trusted_ctx.__parent__ = self.context trusted_ctx.__name__ = name return container raise NotFound( self.context, name, request)
def __getitem__(self, id): try: obj = self._data[int(id)] if obj is not None: if not ILocation.providedBy(obj): return LocationProxy(obj, self, id) else: obj.__parent__ = self return obj except: pass raise KeyError(id)
def lookup(self, name): provider = queryMultiAdapter((self.context, self.request, self.view), interfaces.IContentProvider, name) if provider is None: provider = queryMultiAdapter( (self.context, self.request, self.view), zope.contentprovider.interfaces.IContentProvider, name) if provider is not None: provider = interfaces.IContentProvider(provider, None) if (provider is not None and ILocation.providedBy(provider)): unproxied = removeSecurityProxy(provider) unproxied.__name__ = name return provider
def lookup(self, name): provider = queryMultiAdapter( (self.context, self.request, self.view), interfaces.IContentProvider, name) if provider is None: provider = queryMultiAdapter( (self.context, self.request, self.view), zope.contentprovider.interfaces.IContentProvider, name) if provider is not None: provider = interfaces.IContentProvider(provider, None) if (provider is not None and ILocation.providedBy(provider)): unproxied = removeSecurityProxy(provider) unproxied.__name__ = name return provider
def publish_handle_errors(publisher, request, root, handle_errors=True): if handle_errors is True: try: response = func(publisher, request, root, handle_errors) except Exception, e: if not ILocation.providedBy(e): # Make sure it's properly located. e = LocationProxy(e) locate(e, root, 'error') factory = queryMultiAdapter((request, e), IResponseFactory) if factory is not None: if ITracebackAware.providedBy(factory): exc_info = sys.exc_info() factory.set_exc_info(exc_info) response = factory() else: raise return response
def publish_handle_errors(publisher, request, root, handle_errors=True): if handle_errors is True: try: response = func(publisher, request, root, handle_errors) except Exception as e: if not ILocation.providedBy(e): # Make sure it's properly located. error = LocationProxy(e) locate(error, root, 'error') try: factory = IResponseFactory(request, error) if ITracebackAware.providedBy(factory): exc_info = sys.exc_info() factory.set_exc_info(exc_info) response = factory() except ComponentLookupError: raise e return response return func(publisher, request, root, handle_errors=handle_errors)
def update(self): SchemaFieldWidget.update(self) if not self.form.ignoreContent: content = self.form.getContentData().getContent() fileobj = self.component._field.get(content) if fileobj: self.allow_action = True if IFile.providedBy(fileobj): self.filename = fileobj.filename self.filesize = ISized(fileobj, None) else: self.filename = _(u'download', default=u"Download") if ILocation.providedBy(content): self.url = get_absolute_url(content, self.request) self.download = "%s/++download++%s" % ( self.url, self.component.identifier)
def __call__(self, form): content = form.getContentData().getContent() if ILocation.providedBy(content): container = content.__parent__ name = content.__name__ if name in container: try: del container[name] form.status = self.successMessage message(form.status) url = str(IURL(container, form.request)) return SuccessMarker('Deleted', True, url=url) except ValueError: pass form.status = self.failureMessage message(form.status) return FAILURE
def generate_line_form(self, content, prefix): """ Generate form for a specific line, using content. """ form = cloneFormData(self, content=content, prefix=prefix) # TODO : if cloneFormData would copy dataValidators # and accept kwargs to override eg. dataManager # this would not happen, fix it in forms.base! form.dataManager = self.tableDataManager form.dataValidators = self.dataValidators form.setContentData(content) # context is content so that vocabularies work ! if not ILocation.providedBy(content): content = LocationProxy(content) form.context = content if getattr(content, '__parent__', None) is None: setattr(content, '__parent__', form) form.__parent__ = self return form
def __call__(self, form): content = form.getContentData().getContent() if ILocation.providedBy(content): container = content.__parent__ name = content.__name__ if name in container: try: del container[name] form.status = self.successMessage message(form.status) url = get_absolute_url(container, form.request) return SuccessMarker('Deleted', True, url=url) except ValueError: pass form.status = self.failureMessage message(form.status) return FAILURE
def assertLocation(adapter, parent): """Assert locatable adapters. This function asserts that the adapter get location-proxied if it doesn't provide ILocation itself. Further more the returned locatable adapter get its parent set if its __parent__ attribute is currently None. """ # handle none-locatable adapters (A) if not ILocation.providedBy(adapter): locatable = LocationProxy(adapter) locatable.__parent__ = parent return locatable # handle locatable, parentless adapters (B) if adapter.__parent__ is None: adapter.__parent__ = parent return adapter # handle locatable, parentful adapters (C) return adapter
def _customizeUnprotected(self, adapter, context): if ILocation.providedBy(adapter) and adapter.__parent__ is None: adapter.__parent__ = context return adapter
def getLocalRegistry(self): reg = self._registry if not ILocation.providedBy(reg): reg = LocationProxy(reg) locate(reg, self, '@registry') return reg
def _customizeUnprotected(self, adapter, context): if (ILocation.providedBy(adapter) and adapter.__parent__ is None): adapter.__parent__ = context return adapter
def get_name(context): """Get context name""" return ILocation(context).__name__
def test_manager_viewlet(): """The manager is a location (a slot) where viewlet will display. It supervises the rendering of each viewlet and merged the output. """ # We define the actors mammoth = object() request = TestRequest() view = TestView(mammoth, request) generic_template = Template() class LeftColumn(dolmen.viewlet.ViewletManager): pass assert not getattr(LeftColumn, '__component_name__', None) assert grok_component('left', LeftColumn) is True assert getattr(LeftColumn, '__component_name__') == 'leftcolumn' # We instanciate, verify and try to render left = LeftColumn(mammoth, request, view) assert verifyObject(dolmen.viewlet.IViewletManager, left) left.update() assert left.render() == u'' manager = getMultiAdapter((mammoth, request, view), IViewSlot, name='leftcolumn') assert manager.__class__ == LeftColumn manager = dolmen.viewlet.query_viewlet_manager(view, name='leftcolumn') assert manager.__class__ == LeftColumn left.template = generic_template left.update() assert left.render() == 'A simple template for LeftColumn.' # We now assign a viewlet to our manager class WeatherBlock(dolmen.viewlet.Viewlet): require('zope.Public') dolmen.viewlet.slot(LeftColumn) assert dolmen.viewlet.IViewlet.implementedBy(WeatherBlock) is True assert grok_component('weather', WeatherBlock) is True newInteraction(Participation(Principal('User'))) left.template = None left.update() assert len(list(dolmen.viewlet.query_components( mammoth, request, view, left))) == 1 assert manager.__class__ == LeftColumn assert len(left.viewlets) == 1 # A manager should be a valid ILocation assert ILocation.providedBy(manager) assert manager.__parent__ == view assert manager.__name__ == 'leftcolumn' # We need a template defined or it fails. with pytest.raises(NotImplementedError) as e: left.update() left.render() assert str(e.value) == ( "<class 'dolmen.viewlet.tests.test_package.WeatherBlock'> : " "Provide a template or override the render method") # We now define a template WeatherBlock.template = generic_template left.update() assert left.render() == u'A simple template for WeatherBlock.' # Let's register another viewlet class AnotherBlock(dolmen.viewlet.Viewlet): require('zope.ManageContent') dolmen.viewlet.slot(LeftColumn) template = generic_template assert grok_component('another', AnotherBlock) left.update() assert left.render() == u'A simple template for WeatherBlock.' # A viewlet should be a valid ILocation viewlet = left.viewlets[0] assert ILocation.providedBy(viewlet) assert viewlet.__parent__.__class__ == LeftColumn assert viewlet.__name__ == 'weatherblock' endInteraction() newInteraction(Participation(Principal('Master'))) left.update() assert left.render() == (u'A simple template for AnotherBlock.\n' u'A simple template for WeatherBlock.') # We should be able to set an order dolmen.viewlet.order.set(AnotherBlock, (10, 10)) left.update() assert left.render() == (u'A simple template for WeatherBlock.\n' u'A simple template for AnotherBlock.') endInteraction() # Let's register a secured viewlet manage class Secured(dolmen.viewlet.ViewletManager): require('zope.ManageContent') assert grok_component('secured', Secured) is True newInteraction(Participation(Principal('User'))) # We instanciate, verify and try to render secured = ProxyFactory(Secured(mammoth, request, view)) with pytest.raises(Unauthorized): secured.update() endInteraction() newInteraction(Participation(Principal('Master'))) # We instanciate, verify and try to render secured.update() assert secured.render() == u'' endInteraction()