[halfdomain] add ability to specify a domain's acl module path in __acl__ attribute
This commit is contained in:
parent
739ffc9afa
commit
e70239433f
|
@ -1,5 +1,5 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
__version__ = '0.6.14'
|
__version__ = '0.6.15'
|
||||||
|
|
||||||
def version():
|
def version():
|
||||||
return f'HalfAPI version:{__version__}'
|
return f'HalfAPI version:{__version__}'
|
||||||
|
|
|
@ -27,7 +27,7 @@ from .lib.domain_middleware import DomainMiddleware
|
||||||
from .logging import logger
|
from .logging import logger
|
||||||
|
|
||||||
class HalfDomain(Starlette):
|
class HalfDomain(Starlette):
|
||||||
def __init__(self, domain, router=None, app=None):
|
def __init__(self, domain, router=None, acl=None, app=None):
|
||||||
"""
|
"""
|
||||||
Parameters:
|
Parameters:
|
||||||
domain (str): Module name (should be importable)
|
domain (str): Module name (should be importable)
|
||||||
|
@ -53,7 +53,7 @@ class HalfDomain(Starlette):
|
||||||
|
|
||||||
self.m_router = importlib.import_module(self.router, domain)
|
self.m_router = importlib.import_module(self.router, domain)
|
||||||
|
|
||||||
self.m_acl = importlib.import_module(f'{domain}.acl')
|
self.m_acl = HalfDomain.m_acl(domain, acl)
|
||||||
|
|
||||||
self.config = { **app.config }
|
self.config = { **app.config }
|
||||||
|
|
||||||
|
@ -85,11 +85,21 @@ class HalfDomain(Starlette):
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def m_acl(domain, acl=None):
|
||||||
|
""" Returns the imported acl module for the domain
|
||||||
|
"""
|
||||||
|
if (not acl):
|
||||||
|
acl = getattr('__acl__', domain, '.acl')
|
||||||
|
|
||||||
|
return importlib.import_module(acl, domain)
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def acls(domain):
|
def acls(domain):
|
||||||
""" Returns the ACLS constant for the given domain
|
""" Returns the ACLS constant for the given domain
|
||||||
"""
|
"""
|
||||||
m_acl = importlib.import_module(f'{domain}.acl')
|
m_acl = HalfDomain.m_acl(domain)
|
||||||
try:
|
try:
|
||||||
return getattr(m_acl, 'ACLS')
|
return getattr(m_acl, 'ACLS')
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
|
@ -98,7 +108,8 @@ class HalfDomain(Starlette):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def acls_route(domain):
|
def acls_route(domain):
|
||||||
d_res = {}
|
d_res = {}
|
||||||
m_acl = importlib.import_module(f'{domain}.acl')
|
m_acl = HalfDomain.m_acl(domain)
|
||||||
|
|
||||||
for acl_name, doc, order in HalfDomain.acls(domain):
|
for acl_name, doc, order in HalfDomain.acls(domain):
|
||||||
fct = getattr(m_acl, acl_name)
|
fct = getattr(m_acl, acl_name)
|
||||||
d_res[acl_name] = {
|
d_res[acl_name] = {
|
||||||
|
|
|
@ -122,7 +122,7 @@ class HalfAPI(Starlette):
|
||||||
|
|
||||||
domain_key = domain.get('name', key)
|
domain_key = domain.get('name', key)
|
||||||
|
|
||||||
self.add_domain(domain_key, domain.get('router'), path)
|
self.add_domain(domain_key, domain.get('router'), domain.get('acl'), path)
|
||||||
|
|
||||||
schemas.append(self.__domains[domain_key].schema())
|
schemas.append(self.__domains[domain_key].schema())
|
||||||
|
|
||||||
|
@ -237,13 +237,14 @@ class HalfAPI(Starlette):
|
||||||
def domains(self):
|
def domains(self):
|
||||||
return self.__domains
|
return self.__domains
|
||||||
|
|
||||||
def add_domain(self, name, router=None, path='/', config=None):
|
def add_domain(self, name, router=None, acl=None, path='/', config=None):
|
||||||
if config:
|
if config:
|
||||||
self.config['domain'][name] = config
|
self.config['domain'][name] = config
|
||||||
|
|
||||||
self.__domains[name] = HalfDomain(
|
self.__domains[name] = HalfDomain(
|
||||||
name,
|
name,
|
||||||
router,
|
router,
|
||||||
|
acl,
|
||||||
self
|
self
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -52,6 +52,7 @@ class TestDomain(TestCase):
|
||||||
self.halfapi_conf['domain'][self.DOMAIN] = {
|
self.halfapi_conf['domain'][self.DOMAIN] = {
|
||||||
'name': self.DOMAIN,
|
'name': self.DOMAIN,
|
||||||
'router': self.ROUTERS,
|
'router': self.ROUTERS,
|
||||||
|
'acl': self.ACL,
|
||||||
'prefix': False,
|
'prefix': False,
|
||||||
'enabled': True,
|
'enabled': True,
|
||||||
'config': {
|
'config': {
|
||||||
|
|
|
@ -6,6 +6,7 @@ class TestDummyDomain(TestDomain):
|
||||||
|
|
||||||
DOMAIN = __name__
|
DOMAIN = __name__
|
||||||
ROUTERS = __routers__
|
ROUTERS = __routers__
|
||||||
|
ACL = '.acl'
|
||||||
|
|
||||||
def test_domain(self):
|
def test_domain(self):
|
||||||
self.check_domain()
|
self.check_domain()
|
||||||
|
|
Loading…
Reference in New Issue