[schemas] always give a list of schemas
This commit is contained in:
parent
648841d90f
commit
d5f39a7929
|
@ -1,5 +1,13 @@
|
||||||
# HalfAPI
|
# HalfAPI
|
||||||
|
|
||||||
|
## 0.6.2
|
||||||
|
|
||||||
|
- Domains now need to include the following variables in their __init__.py
|
||||||
|
- __name__ (str, optional)
|
||||||
|
- __id__ (str, optional)
|
||||||
|
- halfapi domain
|
||||||
|
|
||||||
|
|
||||||
## 0.1.0
|
## 0.1.0
|
||||||
|
|
||||||
- Mounts domain routers with their ACLs as decorator
|
- Mounts domain routers with their ACLs as decorator
|
||||||
|
|
|
@ -42,22 +42,6 @@ class HalfDomain(Starlette):
|
||||||
|
|
||||||
self.config = config
|
self.config = config
|
||||||
|
|
||||||
"""
|
|
||||||
if domain:
|
|
||||||
m_domain = importlib.import_module(domain)
|
|
||||||
if not router:
|
|
||||||
router = getattr('__router__', domain, '.routers')
|
|
||||||
m_domain_router = importlib.import_module(router, domain)
|
|
||||||
m_domain_acl = importlib.import_module(f'{domain}.acl')
|
|
||||||
|
|
||||||
if not(m_domain and m_domain_router and m_domain_acl):
|
|
||||||
raise Exception('Cannot import domain')
|
|
||||||
|
|
||||||
self.schema = domain_schema(m_domain)
|
|
||||||
|
|
||||||
routes = [ Route('/', JSONRoute(self.schema)) ]
|
|
||||||
"""
|
|
||||||
|
|
||||||
logger.info('HalfDomain creation %s %s', domain, config)
|
logger.info('HalfDomain creation %s %s', domain, config)
|
||||||
super().__init__(
|
super().__init__(
|
||||||
routes=self.gen_domain_routes(),
|
routes=self.gen_domain_routes(),
|
||||||
|
@ -141,30 +125,6 @@ class HalfDomain(Starlette):
|
||||||
else:
|
else:
|
||||||
return acl.args_check(fct), params
|
return acl.args_check(fct), params
|
||||||
|
|
||||||
# @staticmethod
|
|
||||||
# def gen_routes(m_router):
|
|
||||||
# """
|
|
||||||
# Yields the Route objects for a domain
|
|
||||||
|
|
||||||
# Parameters:
|
|
||||||
# m_domains: ModuleType
|
|
||||||
|
|
||||||
# Returns:
|
|
||||||
# Generator(HalfRoute)
|
|
||||||
# """
|
|
||||||
# """
|
|
||||||
# yield HalfRoute('/',
|
|
||||||
# JSONRoute(self.schema(self.m_domain)),
|
|
||||||
# [{'acl': acl.public}],
|
|
||||||
# 'GET'
|
|
||||||
# )
|
|
||||||
# """
|
|
||||||
|
|
||||||
# for path, method, _, fct, params \
|
|
||||||
# in HalfDomain.gen_router_routes(m_router, []):
|
|
||||||
|
|
||||||
# yield HalfRoute(f'/{path}', fct, params, method)
|
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def gen_router_routes(m_router, path: List[str]) -> \
|
def gen_router_routes(m_router, path: List[str]) -> \
|
||||||
|
@ -292,7 +252,7 @@ class HalfDomain(Starlette):
|
||||||
Generator(HalfRoute)
|
Generator(HalfRoute)
|
||||||
"""
|
"""
|
||||||
yield HalfRoute('/',
|
yield HalfRoute('/',
|
||||||
JSONRoute(self.schema()),
|
JSONRoute([ self.schema() ]),
|
||||||
[{'acl': acl.public}],
|
[{'acl': acl.public}],
|
||||||
'GET'
|
'GET'
|
||||||
)
|
)
|
||||||
|
@ -346,33 +306,3 @@ class HalfDomain(Starlette):
|
||||||
}
|
}
|
||||||
schema['paths'] = self.schema_dict()
|
schema['paths'] = self.schema_dict()
|
||||||
return schema
|
return schema
|
||||||
|
|
||||||
|
|
||||||
# def domain_schema_list(m_router: ModuleType) -> List:
|
|
||||||
# """ Schema as list, one row by route/acl
|
|
||||||
# Parameters:
|
|
||||||
#
|
|
||||||
# m_router (ModuleType): The domain routers' module
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
#
|
|
||||||
# List[Tuple]: (path, verb, callable, doc, acls)
|
|
||||||
# """
|
|
||||||
# res = []
|
|
||||||
#
|
|
||||||
# for path, verb, m_router, fct, parameters in gen_router_routes(m_router, []):
|
|
||||||
# for params in parameters:
|
|
||||||
# res.append((
|
|
||||||
# path,
|
|
||||||
# verb,
|
|
||||||
# f'{m_router.__name__}:{fct.__name__}',
|
|
||||||
# params.get('acl').__name__,
|
|
||||||
# params.get('args', {}).get('required', []),
|
|
||||||
# params.get('args', {}).get('optional', []),
|
|
||||||
# params.get('out', [])
|
|
||||||
# ))
|
|
||||||
#
|
|
||||||
# return res
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -104,6 +104,8 @@ class HalfAPI:
|
||||||
on_startup=startup_fcts
|
on_startup=startup_fcts
|
||||||
)
|
)
|
||||||
|
|
||||||
|
schemas = []
|
||||||
|
|
||||||
for key, domain in self.config.get('domain', {}).items():
|
for key, domain in self.config.get('domain', {}).items():
|
||||||
if not isinstance(domain, dict):
|
if not isinstance(domain, dict):
|
||||||
continue
|
continue
|
||||||
|
@ -120,22 +122,19 @@ class HalfAPI:
|
||||||
path = f'/{dom_name}'
|
path = f'/{dom_name}'
|
||||||
|
|
||||||
logger.debug('Mounting domain %s on %s', domain.get('name'), path)
|
logger.debug('Mounting domain %s on %s', domain.get('name'), path)
|
||||||
self.__application.mount(path,
|
|
||||||
HalfDomain(
|
half_domain = HalfDomain(
|
||||||
domain.get('name', key),
|
domain.get('name', key),
|
||||||
domain.get('router'),
|
domain.get('router'),
|
||||||
domain.get('config', {}),
|
domain.get('config', {}),
|
||||||
self.application
|
self.application
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
"""
|
schemas.append(half_domain.schema())
|
||||||
self.__application.add_middleware(
|
|
||||||
DomainMiddleware,
|
self.__application.mount(path, half_domain)
|
||||||
domain=domain,
|
|
||||||
config=CONFIG
|
self.__application.add_route('/', JSONRoute(schemas))
|
||||||
)
|
|
||||||
"""
|
|
||||||
|
|
||||||
self.__application.add_middleware(
|
self.__application.add_middleware(
|
||||||
AuthenticationMiddleware,
|
AuthenticationMiddleware,
|
||||||
|
|
Loading…
Reference in New Issue