[domain] checks versions specified in __deps__ variable of domain module
This commit is contained in:
parent
63d6d1e8ea
commit
b63b0f52c6
|
@ -4,9 +4,6 @@ COPY . /halfapi
|
||||||
WORKDIR /halfapi
|
WORKDIR /halfapi
|
||||||
RUN apt-get update > /dev/null && apt-get -y install git > /dev/null
|
RUN apt-get update > /dev/null && apt-get -y install git > /dev/null
|
||||||
RUN pip install gunicorn uvicorn
|
RUN pip install gunicorn uvicorn
|
||||||
# Install package with extra_requires for testing
|
RUN pip install .
|
||||||
RUN pip install ".[tests]"
|
|
||||||
ENV PYTHONPATH=./tests
|
|
||||||
RUN pytest
|
|
||||||
CMD gunicorn halfapi.app
|
CMD gunicorn halfapi.app
|
||||||
|
|
||||||
|
|
1
Pipfile
1
Pipfile
|
@ -25,6 +25,7 @@ timing-asgi = ">=0.2.1,<1"
|
||||||
schema = ">=0.7.4,<1"
|
schema = ">=0.7.4,<1"
|
||||||
toml = "*"
|
toml = "*"
|
||||||
pip = "*"
|
pip = "*"
|
||||||
|
packaging = "*"
|
||||||
|
|
||||||
[scripts]
|
[scripts]
|
||||||
halfapi = "python -m halfapi"
|
halfapi = "python -m halfapi"
|
||||||
|
|
|
@ -3,6 +3,8 @@ import inspect
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
from packaging.specifiers import SpecifierSet
|
||||||
|
from packaging.version import Version
|
||||||
from typing import Coroutine, Dict, Iterator, List, Tuple
|
from typing import Coroutine, Dict, Iterator, List, Tuple
|
||||||
from types import ModuleType, FunctionType
|
from types import ModuleType, FunctionType
|
||||||
|
|
||||||
|
@ -42,6 +44,8 @@ class HalfDomain(Starlette):
|
||||||
# TODO: Check if given domain halfapi_version matches with __version__
|
# TODO: Check if given domain halfapi_version matches with __version__
|
||||||
self.halfapi_version = getattr(self.m_domain, '__halfapi_version__', __version__)
|
self.halfapi_version = getattr(self.m_domain, '__halfapi_version__', __version__)
|
||||||
|
|
||||||
|
self.deps = getattr(self.m_domain, '__deps__', tuple())
|
||||||
|
|
||||||
if not router:
|
if not router:
|
||||||
self.router = getattr('__router__', domain, '.routers')
|
self.router = getattr('__router__', domain, '.routers')
|
||||||
else:
|
else:
|
||||||
|
@ -54,6 +58,18 @@ class HalfDomain(Starlette):
|
||||||
self.config = { **app.config }
|
self.config = { **app.config }
|
||||||
|
|
||||||
logger.info('HalfDomain creation %s %s', domain, self.config)
|
logger.info('HalfDomain creation %s %s', domain, self.config)
|
||||||
|
|
||||||
|
for elt in self.deps:
|
||||||
|
package, version = elt
|
||||||
|
specifier = SpecifierSet(version)
|
||||||
|
package_module = importlib.import_module(package)
|
||||||
|
if Version(package_module.__version__) not in specifier:
|
||||||
|
raise Exception(
|
||||||
|
'Wrong version for package {} version {} (excepting {})'.format(
|
||||||
|
package, package_module.__version__, specifier
|
||||||
|
))
|
||||||
|
|
||||||
|
|
||||||
super().__init__(
|
super().__init__(
|
||||||
routes=self.gen_domain_routes(),
|
routes=self.gen_domain_routes(),
|
||||||
middleware=[
|
middleware=[
|
||||||
|
|
|
@ -3,6 +3,7 @@ import functools
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import json
|
import json
|
||||||
|
from json.decoder import JSONDecodeError
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
from starlette.testclient import TestClient
|
from starlette.testclient import TestClient
|
||||||
from click.testing import CliRunner
|
from click.testing import CliRunner
|
||||||
|
@ -84,6 +85,11 @@ class TestDomain(TestCase):
|
||||||
print(f'Stdout {result.stdout}')
|
print(f'Stdout {result.stdout}')
|
||||||
print(f'Stderr {result.stderr}')
|
print(f'Stderr {result.stderr}')
|
||||||
raise exc
|
raise exc
|
||||||
|
except JSONDecodeError as exc:
|
||||||
|
print(f'Result {result}')
|
||||||
|
print(f'Stdout {result.stdout}')
|
||||||
|
raise exc
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return result_d
|
return result_d
|
||||||
|
|
|
@ -1,6 +1,12 @@
|
||||||
|
from halfapi import __version__ as halfapi_version
|
||||||
|
|
||||||
__name__ = 'dummy_domain'
|
__name__ = 'dummy_domain'
|
||||||
__version__ = '0.0.0'
|
__version__ = '0.0.0'
|
||||||
__patch_release__ = '0.0.0'
|
__patch_release__ = '0.0.0'
|
||||||
__routers__ = '.routers'
|
__routers__ = '.routers'
|
||||||
__id__ = '8b88e60a625369235b36c2d6d70756a0c02c1c7fb169fcee6dc820bcf9723f5a'
|
__id__ = '8b88e60a625369235b36c2d6d70756a0c02c1c7fb169fcee6dc820bcf9723f5a'
|
||||||
|
|
||||||
|
__deps__ = (
|
||||||
|
('halfapi', '=={}'.format(halfapi_version)),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue