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 Common errors
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.
Warnings
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" />
Imports
- IResource wrong
from zope.browserresource import IResourcecorrectfrom zope.browserresource.interfaces import IResource - Resource wrong
from zope.browserresource import Resourcecorrectfrom zope.browserresource.resource import Resource
Quickstart
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!"