def __call__(self, method_or_class=None, **kwargs): if not method_or_class and kwargs: return self.where(**kwargs) if isinstance(method_or_class, (MethodType, FunctionType)): routes = getattr(method_or_class, '_hug_http_routes', []) routes.append(self.route) method_or_class._hug_http_routes = routes return method_or_class instance = method_or_class if isinstance(method_or_class, type): instance = method_or_class() for argument in dir(instance): argument = getattr(instance, argument, None) http_routes = getattr(argument, '_hug_http_routes', ()) for route in http_routes: http(**self.where(**route).route)(argument) cli_routes = getattr(argument, '_hug_cli_routes', ()) for route in cli_routes: cli(**self.where(**route).route)(argument) return method_or_class
def decorator(class_definition): instance = class_definition if isinstance(class_definition, type): instance = class_definition() router = self.urls(urls if urls else "/{0}".format(instance.__class__.__name__.lower()), **route_data) for method in HTTP_METHODS: handler = getattr(instance, method.lower(), None) if handler: http_routes = getattr(handler, '_hug_http_routes', ()) if http_routes: for route in http_routes: http(**router.accept(method).where(**route).route)(handler) else: http(**router.accept(method).route)(handler) cli_routes = getattr(handler, '_hug_cli_routes', ()) if cli_routes: for route in cli_routes: cli(**self.where(**route).route)(handler) return class_definition
def decorator(class_definition): instance = class_definition if isinstance(class_definition, type): instance = class_definition() router = self.urls( urls if urls else "/{0}".format(instance.__class__.__name__.lower()), **route_data ) for method in HTTP_METHODS: handler = getattr(instance, method.lower(), None) if handler: http_routes = getattr(handler, "_hug_http_routes", ()) if http_routes: for route in http_routes: http(**router.accept(method).where(**route).route)(handler) else: http(**router.accept(method).route)(handler) cli_routes = getattr(handler, "_hug_cli_routes", ()) if cli_routes: for route in cli_routes: cli(**self.where(**route).route)(handler) return class_definition
def cli(self, *kargs, **kwargs): """Defines a CLI function that should be routed by this API""" kwargs['api'] = self.api return cli(*kargs, **kwargs)