zope.browserresource

raw JSON →
6.0 verified Mon Apr 27 auth: no python

Implementation of browser resources for Zope, providing a way to publish static and dynamic resources over HTTP. Version 6.0 requires Python >=3.9 and is part of the Zope toolkit. Stable release cadence.

pip install zope.browserresource
error ImportError: cannot import name 'Resource' from 'zope.browserresource'
cause Resource is not exposed at package level; must be imported from submodule.
fix
Use: from zope.browserresource.resource import Resource
error TypeError: __init__() missing 1 required positional argument: 'request'
cause Resource.__init__ requires a request argument when called directly without adapter.
fix
Instantiate with request: MyResource(request) or register as adapter and let Zope provide the request.
breaking In version 5.x, the resource base class was in zope.browserresource.browserresource; in version 6.x it is in zope.browserresource.resource.
fix Change import: from zope.browserresource.browserresource import Resource → from zope.browserresource.resource import Resource
deprecated IResource interface no longer directly inherits from IBrowserPublisher; use separate publication directives if needed.
fix Explicitly implement zope.publisher.interfaces.IBrowserPublisher if you need custom publication.
gotcha Resource instances must be registered as named adapters (from IBrowserRequest to IResource) to be usable in Zope's traversal.
fix Use zope.component registration: <adapter factory="..." provides="zope.browserresource.interfaces.IResource" for="zope.publisher.interfaces.IBrowserRequest" name="myresource" />

Define a basic browser resource that returns a simple response.

from zope.browserresource.resource import Resource
from zope.browserresource.interfaces import IResource
from zope.interface import implementer

@implementer(IResource)
class MyResource(Resource):
    def __init__(self, request):
        self.request = request
    def __call__(self):
        return b"Hello, world!"