1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| class API: def __init__(self, name, prefix): self.name = name if not prefix.endswith('/'): prefix += '/' self.prefix = prefix self.handlers = [] self.resources = []
def route(self, path, kwargs=None, name=None): if path.startswith('/'): path = path[1:] path = '{0}{1}'.format(self.prefix, path) def handler_wrapper(handler): self.handlers.append((path, handler, kwargs, name)) def handler_initializer(*args, **kwargs): return handler(*args, **kwargs) return handler_initializer return handler_wrapper
def route_handler(self, path, handler, kwargs=None, name=None): if self.prefix: if path.startswith('/'): path = path[1:] path = '{0}{1}'.format(self.prefix, path)
self.handlers.append((path, handler, kwargs, name))
def create_resource(self, name, prefix): name = '{0}.{1}'.format(self.name, name) resource = _Resource(name, prefix) self.resources.append(resource) return resource
def register_source(self, source): records = source.route_records for record in records: record(self)
def register_resources(self): for resource in self.resources: self.register_source(resource)
|