From 429b26dec6aa2dcdb51005c9ecc5bef0d20ad7d6 Mon Sep 17 00:00:00 2001 From: Maxime Alves LIRMM Date: Sun, 4 Oct 2020 17:27:02 +0200 Subject: [PATCH] clean code + logs in conf --- halfapi/cli/domain.py | 190 ------------------------------------------ halfapi/conf.py | 5 +- 2 files changed, 4 insertions(+), 191 deletions(-) diff --git a/halfapi/cli/domain.py b/halfapi/cli/domain.py index 6321caa..b78c95b 100644 --- a/halfapi/cli/domain.py +++ b/halfapi/cli/domain.py @@ -38,194 +38,6 @@ def list_routes(domain): click.echo(f'{key} : {methods}') -################# -# domain update # -################# -def update_db(domain): - - def add_domain(): - """ - Inserts Domain into database - """ - new_domain = Domain(name=domain) - if len(new_domain) == 0: - click.echo(f'New domain {domain}') - new_domain.insert() - - - def add_router(name): - """ - Inserts Router into database - - Parameters: - - name (str): The Router's name - """ - router = APIRouter() - router.name = name - router.domain = domain - - if len(router) == 0: - router.insert() - - - def add_acl_fct(fct): - """ - Inserts ACL function into database - - Parameters: - - fct (Callable): The ACL function reference - """ - acl = AclFunction() - acl.domain = domain - acl.name = fct.__name__ - if len(acl) == 0: - acl.insert() - - - def add_acls(acls, **route): - """ - Inserts ACL into database - - Parameters: - - acls [(Callable, [str])]: List of the Route's ACL's - - route (dict): The Route - """ - route.pop('fct_name') - acl = Acl(**route) - - for fct, keys in acls: - acl.acl_fct_name = fct.__name__ - - if len(acl) != 0: - raise Exception( - 'An ACL row for this route with this function already exists. Check your routers') - else: - acl.keys = keys - add_acl_fct(fct) - acl.insert() - - - - - def add_route(http_verb, path, router, acls): - """ - Inserts Route into database - - Parameters: - - http_verb (str): The Route's HTTP method (GET, POST, ...) - - path (str): A path beginning by '/' for the route - - router (str): The Route's Router name - - acls (List[Callable]): The list of ACL functions for this Route - """ - - click.echo(f'Adding route /{domain}/{router}{path}') - - route = APIRoute() - # Route definition - route.http_verb = http_verb - route.path = path - route.fct_name = get_fct_name(http_verb, path) - route.router = router - route.domain = domain - - if len(route) == 0: - route.insert() - - add_acls(acls, **route.to_dict()) - - - sys.path.insert(0, BASE_DIR) - - # Reset Domain relations - delete_domain(domain) - - acl_set = set() - - try: - # Module retrieval - dom_mod = importlib.import_module(domain) - except ImportError: - # Domain is not available in current PYTHONPATH - click.echo(f"Can't import *{domain}*", err=True) - return False - - try: - add_domain() - except Exception as e: - # Could not insert Domain - # @TODO : Insertion exception handling - click.echo(e) - click.echo(f"Could not insert *{domain}*", err=True) - return False - - # add sub routers - try: - ROUTERS = dom_mod.ROUTERS - except AttributeError: - # No ROUTERS variable in current domain, check domain/__init__.py - click.echo(f'The domain {domain} has no *ROUTERS* variable', err=True) - - for router_name in dom_mod.ROUTERS: - try: - router_mod = None - for router_subname in router_name.split('.'): - router_mod = getattr(router_mod or dom_mod.routers, router_subname) - - except AttributeError: - # Missing router, continue - click.echo(f'The domain {domain} has no *{router_name}* router', err=True) - continue - - - try: - add_router(router_name) - except Exception as e: - # Could not insert Router - # @TODO : Insertion exception handling - print(e) - continue - - - d_routes = {} - - if hasattr(router_mod, 'ROUTES'): - d_routes.update(router_mod.ROUTES) - else: - logger.warning(f'{router_name} is missing a ROUTES variable') - - if hasattr(router_mod, 'ROUTERS'): - for router_router in router_mod.ROUTERS: - if hasattr(router_router, 'ROUTES'): - d_routes.update(router_routes.ROUTES) - else: - logger.warning(f'{router_name}.{router_router.__name__} is missing a ROUTES variable') - else: - logger.warning(f'{router_mod} is missing a ROUTERS variable') - - for route_path, route_params in d_routes.items(): - for http_verb, acls in route_params.items(): - try: - # Insert a route and it's ACLS - add_route(http_verb, route_path, router_name, acls) - except Exception as e: - # Could not insert route - # @TODO : Insertion exception handling - print(e) - continue - - -################# -# domain delete # -################# -def delete_domain(domain): - d = Domain(name=domain) - if len(d) != 1: - return False - - d.delete(delete_all=True) - return True - - @click.option('--read',default=False, is_flag=True) @click.option('--create',default=False, is_flag=True) @click.option('--update',default=False, is_flag=True) @@ -266,10 +78,8 @@ def domain(domains, delete, update, create, read): #, domains, read, create, up for domain in domains: if update: raise NotImplementedError - update_db(domain) if delete: raise NotImplementedError - delete_domain(domain) else: list_routes(domain) diff --git a/halfapi/conf.py b/halfapi/conf.py index f3f8222..f55fb36 100644 --- a/halfapi/conf.py +++ b/halfapi/conf.py @@ -1,10 +1,13 @@ #!/usr/bin/env python3 +import logging import os from os import environ import sys from configparser import ConfigParser import importlib +logger = logging.getLogger('halfapi') + PROJECT_NAME = '' DOMAINS = [] DOMAINSDICT = {} @@ -49,7 +52,7 @@ if IS_PROJECT: for dom in DOMAINS } except ImportError as e: - logger.error('Could not load a domain', e) + logger.error('Could not load a domain : %s', e) HALFAPI_CONF_FILE=os.path.join(