class OCCI(object): ''' A OCCI compatible service. ''' # disabling 'Method could be func' pylint check (this is for extension) # pylint: disable=R0201 def __init__(self, registry=None): if registry is None: self.registry = NonePersistentRegistry() elif isinstance(registry, Registry): self.registry = registry else: raise AttributeError('Registry needs to derive from abstract' \ ' class \'Registry\'') self.registry.set_renderer('text/occi', TextOcciRendering(self.registry)) self.registry.set_renderer('text/plain', TextPlainRendering(self.registry)) self.registry.set_renderer('text/uri-list', TextUriListRendering(self.registry)) self.registry.set_renderer('text/html', HTMLRendering(self.registry)) application = tornado.web.Application([ (r"/-/", QueryHandler, dict(registry=self.registry)), (r"/.well-known/org/ogf/occi/-/", QueryHandler, dict(registry=self.registry)), (r"(.*)/", CollectionHandler, dict(registry=self.registry)), (r"(.*)", ResourceHandler, dict(registry=self.registry)), ]) self.http_server = tornado.httpserver.HTTPServer(application) def register_backend(self, category, backend): ''' Register a backend. Verifies that correct 'parent' backends are used. category -- The category the backend defines. backend -- The backend which handles the given category. ''' allow = False if repr(category) == 'kind' and isinstance(backend, KindBackend): allow = True elif repr(category) == 'mixin' and isinstance(backend, MixinBackend): allow = True elif repr(category) == 'action' and isinstance(backend, ActionBackend): allow = True if allow: self.registry.set_backend(category, backend) else: raise AttributeError('Backends handling kinds need to derive' \ ' from KindBackend; Backends handling' \ ' actions need to derive from' \ ' ActionBackend and backends handling' \ ' mixins need to derive from MixinBackend.') def start(self, port): ''' Start the service. ''' self.http_server.listen(port) tornado.ioloop.IOLoop.instance().start()