Source code for atramhasis.protected_resources

# -*- coding: utf-8 -*-
import re
from atramhasis.errors import ConceptSchemeNotFoundException

Thid module is used when blocking operations on a certain Concept or Collection
that might be used in external applications.

:versionadded: 0.4.0

[docs]class ProtectedResourceEvent(object): """ Event triggered when calling a protected operation on a resource """ def __init__(self, uri, request): self.uri = uri self.request = request
[docs]def protected_operation(fn): """ use this decorator to prevent an operation from being executed when the related resource is still in use """ def advice(parent_object, *args, **kw): request = parent_object.request url = request.path match = re.compile('/conceptschemes/(\w+)/c/(\w+)').match(url) scheme_id = c_id = provider = request.skos_registry.get_provider(scheme_id) if not provider: raise ConceptSchemeNotFoundException(scheme_id) uri = provider.uri_generator.generate(id=c_id) event = ProtectedResourceEvent(uri, request) parent_object.request.registry.notify(event) return fn(parent_object, *args, **kw) return advice
[docs]class ProtectedResourceException(Exception): """ raise this exception when the resource is still used somewhere referenced_in should contain locations where the resource is still referenced """ def __init__(self, value, referenced_in): self.value = value self.referenced_in = referenced_in def __str__(self): return repr(self.value)