Source code for uriregistry.registry
from zope.interface import Interface
from .models import Application
from .models import UriTemplate
class IUriRegistry(Interface):
pass
[docs]class UriRegistry:
"""
Central registry that tracks uris and the applications they are being used in.
"""
def __init__(self, applications=[], uris=[]):
self.applications = [Application(app['uri'], app['name'], app['service_url']) for app in applications]
self.uris = [
UriTemplate(
u['match_uri'],
[app for app in self.applications if app.uri in u['applications']]
) for u in uris
]
[docs] def get_applications(self, uri):
"""
Get all applications that might have a reference to this URI.
:param string uri: Uri for which the applications need to be found.
"""
applications = []
for u in self.uris:
if u.matches(uri):
applications.extend(u.applications)
applications = list(set(applications))
return applications
[docs]def _build_uri_registry(registry, registryconfig):
"""
:param pyramid.registry.Registry registry: Pyramid registry
:param dict registryconfig: UriRegistry config in dict form.
:rtype: :class:`uriregistry.registry.UriRegistry`
"""
uri_registry = registry.queryUtility(IUriRegistry)
if uri_registry is not None:
return uri_registry
uri_registry = UriRegistry(
registryconfig['applications'],
registryconfig['uri_templates']
)
registry.registerUtility(uri_registry, IUriRegistry)
return registry.queryUtility(IUriRegistry)
[docs]def get_uri_registry(registry):
"""
Get the :class:`uriregistry.registry.UriRegistry` attached to this pyramid
application.
:rtype: :class:`uriregistry.registry.UriRegistry`
"""
# Argument might be a config or request
regis = getattr(registry, 'registry', None)
if regis is None:
regis = registry
return regis.queryUtility(IUriRegistry)