Exemplo n.º 1
0
 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
Exemplo n.º 2
0
 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
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
 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
Exemplo n.º 5
0
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
Exemplo n.º 6
0
 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)
Exemplo n.º 8
0
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__
Exemplo n.º 9
0
    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
Exemplo n.º 10
0
 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)
Exemplo n.º 11
0
 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)
Exemplo n.º 12
0
 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
Exemplo n.º 13
0
 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
Exemplo n.º 14
0
 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
Exemplo n.º 15
0
 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)
Exemplo n.º 16
0
    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)
Exemplo n.º 17
0
    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)
Exemplo n.º 18
0
    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
Exemplo n.º 19
0
 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
Exemplo n.º 20
0
    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
Exemplo n.º 21
0
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
Exemplo n.º 22
0
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
Exemplo n.º 23
0
 def _customizeUnprotected(self, adapter, context):
     if ILocation.providedBy(adapter) and adapter.__parent__ is None:
         adapter.__parent__ = context
     return adapter
Exemplo n.º 24
0
 def getLocalRegistry(self):
     reg = self._registry
     if not ILocation.providedBy(reg):
         reg = LocationProxy(reg)
         locate(reg, self, '@registry')
     return reg
Exemplo n.º 25
0
 def _customizeUnprotected(self, adapter, context):
     if (ILocation.providedBy(adapter) and adapter.__parent__ is None):
         adapter.__parent__ = context
     return adapter
Exemplo n.º 26
0
def get_name(context):
    """Get context name"""
    return ILocation(context).__name__
Exemplo n.º 27
0
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()