server.browser.register: allow for explicit string prefixes as context types

This commit is contained in:
Helmut Merz 2025-03-22 11:02:36 +01:00
parent f04297d570
commit b4051147ee

View file

@ -6,14 +6,16 @@ from scopes.interfaces import IContainer, IReference, IView
views = {} # registry for all views: {name: {prefix: viewClass, ...}, ...} views = {} # registry for all views: {name: {prefix: viewClass, ...}, ...}
def register(name, *contextClasses): def register(name, *contextTypes):
"""Use as decorator: `@register(name, class, ...). """Use as decorator: `@register(name, class_or_prefix, ...).
class `None` means default view for all classes.""" No class (or `None` or `''`) means default view for all classes."""
def doRegister(factory): def doRegister(factory):
implementer(IView)(factory) implementer(IView)(factory)
nameEntry = views.setdefault(name, {}) nameEntry = views.setdefault(name, {})
for cl in contextClasses: for ct in contextTypes:
nameEntry[cl.prefix] = factory if not isinstance(ct, string):
ct = ct.prefix
nameEntry[ct] = factory
else: else:
nameEntry[''] = factory nameEntry[''] = factory
return factory return factory