[conf] removed HALFORM_DSN from the env parameters, added support for the
env_file uvicorn parameter (specified by --envfile for the halfapi "run" command), added support for default environment variables in pytest.ini
This commit is contained in:
parent
644e5c5d3d
commit
44948be228
|
@ -1,3 +1,5 @@
|
||||||
HALFORM_SECRET="halform_secret"
|
HALFORM_SECRET=halform_secret
|
||||||
HALFORM_DSN="dbname=api user=api password= host=127.0.0.1 port=5432"
|
HALFORM_DSN=dbname=api user=api password= host=127.0.0.1 port=5432
|
||||||
|
DEV=1
|
||||||
DEBUG=1
|
DEBUG=1
|
||||||
|
DEBUG_ACL=public
|
||||||
|
|
|
@ -79,8 +79,8 @@ def mount_domains(app: ASGIApp, domains: list):
|
||||||
|
|
||||||
def startup():
|
def startup():
|
||||||
# This function is called at the instanciation of *app*
|
# This function is called at the instanciation of *app*
|
||||||
|
|
||||||
global app
|
global app
|
||||||
|
|
||||||
# Mount the registered domains
|
# Mount the registered domains
|
||||||
try:
|
try:
|
||||||
domains_list = [elt for elt in Domain().select()]
|
domains_list = [elt for elt in Domain().select()]
|
||||||
|
@ -97,9 +97,6 @@ def check_conf():
|
||||||
environ['HALFORM_SECRET'] = open('/etc/half_orm/secret').read()
|
environ['HALFORM_SECRET'] = open('/etc/half_orm/secret').read()
|
||||||
print('Missing HALFORM_SECRET variable from configuration, seting to default')
|
print('Missing HALFORM_SECRET variable from configuration, seting to default')
|
||||||
|
|
||||||
if not environ.get('HALFORM_DSN', False):
|
|
||||||
print('Missing HALFORM_DSN variable from configuration')
|
|
||||||
|
|
||||||
CONFIG={
|
CONFIG={
|
||||||
'DEBUG' : 'DEBUG' in environ.keys()
|
'DEBUG' : 'DEBUG' in environ.keys()
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,26 +35,21 @@ def cli(ctx):
|
||||||
@click.option('--envfile', default=None)
|
@click.option('--envfile', default=None)
|
||||||
@click.option('--host', default='127.0.0.1')
|
@click.option('--host', default='127.0.0.1')
|
||||||
@click.option('--port', default='8000')
|
@click.option('--port', default='8000')
|
||||||
@click.option('--debug', default=False)
|
|
||||||
@click.option('--dev', default=True)
|
|
||||||
@click.option('--dbname', default='api')
|
|
||||||
@click.option('--dbhost', default='127.0.0.1')
|
|
||||||
@click.option('--dbport', default=5432)
|
|
||||||
@click.option('--dbuser', default='api')
|
|
||||||
@click.option('--dbpassword', default='')
|
|
||||||
@cli.command()
|
@cli.command()
|
||||||
def run(envfile, host, port, debug, dev, dbname, dbhost, dbport, dbuser, dbpassword):
|
def run(envfile, host, port):
|
||||||
|
local_env = {}
|
||||||
if envfile:
|
if envfile:
|
||||||
try:
|
try:
|
||||||
with open(envfile) as f:
|
with open(envfile) as f:
|
||||||
print('Will use the following env parameters')
|
print('Will use the following env parameters :')
|
||||||
print(f.readlines())
|
local_env = dict([ tuple(line.strip().split('=', 1))
|
||||||
pass
|
for line in f.readlines() ])
|
||||||
|
print(local_env)
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
print(f'No file named {envfile}')
|
print(f'No file named {envfile}')
|
||||||
envfile = None
|
envfile = None
|
||||||
|
|
||||||
if dev:
|
if 'DEV' in local_env.keys():
|
||||||
debug = True
|
debug = True
|
||||||
reload = True
|
reload = True
|
||||||
log_level = 'debug'
|
log_level = 'debug'
|
||||||
|
@ -62,41 +57,13 @@ def run(envfile, host, port, debug, dev, dbname, dbhost, dbport, dbuser, dbpassw
|
||||||
reload = False
|
reload = False
|
||||||
log_level = 'info'
|
log_level = 'info'
|
||||||
|
|
||||||
# Helper function to convert the string-based dsn to a dict
|
click.echo('Launching application')
|
||||||
dsntodict = lambda dsn: dict(
|
|
||||||
map(lambda x:
|
|
||||||
map(lambda y: y.strip("'\""),
|
|
||||||
x.split('=')
|
|
||||||
),
|
|
||||||
dsn.split()))
|
|
||||||
|
|
||||||
dicttodsn = lambda dsn_d: (' '.join(
|
|
||||||
[ '{key}={val}'.format(key=key, val=dsn_d[key])
|
|
||||||
for key in dsn_d.keys()
|
|
||||||
]
|
|
||||||
))
|
|
||||||
|
|
||||||
click.echo('Launching application with default parameters')
|
|
||||||
click.echo(f'''Parameters : \n
|
|
||||||
Host : {host}
|
|
||||||
Port : {port}
|
|
||||||
Debug : {debug}
|
|
||||||
Dev : {dev}''')
|
|
||||||
|
|
||||||
HALFORM_DSN=os.environ.get('HALFORM_DSN', '')
|
|
||||||
db_params = dsntodict(HALFORM_DSN)
|
|
||||||
db_params['dbname'] = db_params.get('dbname', dbname)
|
|
||||||
db_params['host'] = db_params.get('host', dbhost)
|
|
||||||
db_params['port'] = db_params.get('port', dbport)
|
|
||||||
db_params['user'] = db_params.get('user', dbuser)
|
|
||||||
db_params['password'] = db_params.get('password', dbpassword)
|
|
||||||
|
|
||||||
os.environ['HALFORM_DSN'] = dicttodsn(db_params)
|
|
||||||
|
|
||||||
check_conf()
|
check_conf()
|
||||||
|
|
||||||
sys.path.insert(0, os.getcwd())
|
sys.path.insert(0, os.getcwd())
|
||||||
click.echo(sys.path)
|
click.echo(f'Current PYTHON_PATH : {sys.path}')
|
||||||
|
|
||||||
uvicorn.run('halfapi.app:app',
|
uvicorn.run('halfapi.app:app',
|
||||||
env_file=envfile,
|
env_file=envfile,
|
||||||
host=host,
|
host=host,
|
||||||
|
|
|
@ -54,14 +54,6 @@ optional = false
|
||||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
||||||
version = "0.4.3"
|
version = "0.4.3"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
category = "main"
|
|
||||||
description = "Handle .env files"
|
|
||||||
name = "dotenv"
|
|
||||||
optional = false
|
|
||||||
python-versions = "*"
|
|
||||||
version = "0.0.5"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
category = "main"
|
category = "main"
|
||||||
description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
|
description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
|
||||||
|
@ -158,15 +150,15 @@ python-versions = "^3.7"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
fastapi = "*"
|
fastapi = "^0"
|
||||||
half-orm = "branch master"
|
half-orm = "branch master"
|
||||||
halfapi = "branch master"
|
halfapi = "branch master"
|
||||||
sidb = "branch master"
|
sidb = "branch master"
|
||||||
starlette = "^0.13.0"
|
starlette = "^0"
|
||||||
uvicorn = "*"
|
uvicorn = "^0"
|
||||||
|
|
||||||
[package.source]
|
[package.source]
|
||||||
reference = "4f9cf92253b2ee526a528724877840c8ec158d3a"
|
reference = "f26fc6dcde165bfbb88d4664f842de33aacfb1f8"
|
||||||
type = "git"
|
type = "git"
|
||||||
url = "git@gite.lirmm.fr:newsi/api/organigramme.git"
|
url = "git@gite.lirmm.fr:newsi/api/organigramme.git"
|
||||||
|
|
||||||
|
@ -274,6 +266,28 @@ version = ">=0.12"
|
||||||
checkqa-mypy = ["mypy (v0.761)"]
|
checkqa-mypy = ["mypy (v0.761)"]
|
||||||
testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"]
|
testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
category = "dev"
|
||||||
|
description = "py.test plugin that allows you to add environment variables."
|
||||||
|
name = "pytest-env"
|
||||||
|
optional = false
|
||||||
|
python-versions = "*"
|
||||||
|
version = "0.6.2"
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
pytest = ">=2.6.0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
category = "main"
|
||||||
|
description = "Add .env support to your django/flask apps in development and deployments"
|
||||||
|
name = "python-dotenv"
|
||||||
|
optional = false
|
||||||
|
python-versions = "*"
|
||||||
|
version = "0.14.0"
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
cli = ["click (>=5.0)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
category = "main"
|
category = "main"
|
||||||
description = "YAML parser and emitter for Python"
|
description = "YAML parser and emitter for Python"
|
||||||
|
@ -408,7 +422,7 @@ testing = ["jaraco.itertools", "func-timeout"]
|
||||||
organigramme = ["fastapi", "organigramme"]
|
organigramme = ["fastapi", "organigramme"]
|
||||||
|
|
||||||
[metadata]
|
[metadata]
|
||||||
content-hash = "56e1f269ca07039fa6898fa427261f61cab9ef871c5a82edb592cbfb197c2d03"
|
content-hash = "b801de5aea1ab2defb9265cc25773b55f7c00e36e7206e19173cef5a0ee99eb4"
|
||||||
python-versions = "^3.7"
|
python-versions = "^3.7"
|
||||||
|
|
||||||
[metadata.files]
|
[metadata.files]
|
||||||
|
@ -436,9 +450,6 @@ colorama = [
|
||||||
{file = "colorama-0.4.3-py2.py3-none-any.whl", hash = "sha256:7d73d2a99753107a36ac6b455ee49046802e59d9d076ef8e47b61499fa29afff"},
|
{file = "colorama-0.4.3-py2.py3-none-any.whl", hash = "sha256:7d73d2a99753107a36ac6b455ee49046802e59d9d076ef8e47b61499fa29afff"},
|
||||||
{file = "colorama-0.4.3.tar.gz", hash = "sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1"},
|
{file = "colorama-0.4.3.tar.gz", hash = "sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1"},
|
||||||
]
|
]
|
||||||
dotenv = [
|
|
||||||
{file = "dotenv-0.0.5.tar.gz", hash = "sha256:b58d2ab3f83dbd4f8a362b21158a606bee87317a9444485566b3c8f0af847091"},
|
|
||||||
]
|
|
||||||
fastapi = [
|
fastapi = [
|
||||||
{file = "fastapi-0.58.1-py3-none-any.whl", hash = "sha256:d7499761d5ca901cdf5b6b73018d14729593f8ab1ea22d241f82fa574fc406ad"},
|
{file = "fastapi-0.58.1-py3-none-any.whl", hash = "sha256:d7499761d5ca901cdf5b6b73018d14729593f8ab1ea22d241f82fa574fc406ad"},
|
||||||
{file = "fastapi-0.58.1.tar.gz", hash = "sha256:92e59b77eef7d6eaa80b16d275adda06b5f33b12d777e3fc5521b2f7f4718e13"},
|
{file = "fastapi-0.58.1.tar.gz", hash = "sha256:92e59b77eef7d6eaa80b16d275adda06b5f33b12d777e3fc5521b2f7f4718e13"},
|
||||||
|
@ -550,6 +561,13 @@ pytest = [
|
||||||
{file = "pytest-5.4.3-py3-none-any.whl", hash = "sha256:5c0db86b698e8f170ba4582a492248919255fcd4c79b1ee64ace34301fb589a1"},
|
{file = "pytest-5.4.3-py3-none-any.whl", hash = "sha256:5c0db86b698e8f170ba4582a492248919255fcd4c79b1ee64ace34301fb589a1"},
|
||||||
{file = "pytest-5.4.3.tar.gz", hash = "sha256:7979331bfcba207414f5e1263b5a0f8f521d0f457318836a7355531ed1a4c7d8"},
|
{file = "pytest-5.4.3.tar.gz", hash = "sha256:7979331bfcba207414f5e1263b5a0f8f521d0f457318836a7355531ed1a4c7d8"},
|
||||||
]
|
]
|
||||||
|
pytest-env = [
|
||||||
|
{file = "pytest-env-0.6.2.tar.gz", hash = "sha256:7e94956aef7f2764f3c147d216ce066bf6c42948bb9e293169b1b1c880a580c2"},
|
||||||
|
]
|
||||||
|
python-dotenv = [
|
||||||
|
{file = "python-dotenv-0.14.0.tar.gz", hash = "sha256:8c10c99a1b25d9a68058a1ad6f90381a62ba68230ca93966882a4dbc3bc9c33d"},
|
||||||
|
{file = "python_dotenv-0.14.0-py2.py3-none-any.whl", hash = "sha256:c10863aee750ad720f4f43436565e4c1698798d763b63234fb5021b6c616e423"},
|
||||||
|
]
|
||||||
pyyaml = [
|
pyyaml = [
|
||||||
{file = "PyYAML-5.3.1-cp27-cp27m-win32.whl", hash = "sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f"},
|
{file = "PyYAML-5.3.1-cp27-cp27m-win32.whl", hash = "sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f"},
|
||||||
{file = "PyYAML-5.3.1-cp27-cp27m-win_amd64.whl", hash = "sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76"},
|
{file = "PyYAML-5.3.1-cp27-cp27m-win_amd64.whl", hash = "sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76"},
|
||||||
|
|
|
@ -14,10 +14,12 @@ starlette = "^0"
|
||||||
uvicorn = { version = "^0" }
|
uvicorn = { version = "^0" }
|
||||||
fastapi = { version = "^0", optional = true }
|
fastapi = { version = "^0", optional = true }
|
||||||
organigramme = { git = "git@gite.lirmm.fr:newsi/api/organigramme.git", optional = true }
|
organigramme = { git = "git@gite.lirmm.fr:newsi/api/organigramme.git", optional = true }
|
||||||
|
python-dotenv = "^0.14.0"
|
||||||
|
|
||||||
[tool.poetry.dev-dependencies]
|
[tool.poetry.dev-dependencies]
|
||||||
pytest = "^5"
|
pytest = "^5"
|
||||||
requests = "^2"
|
requests = "^2"
|
||||||
|
pytest-env = "^0.6.2"
|
||||||
|
|
||||||
[tool.poetry.extras]
|
[tool.poetry.extras]
|
||||||
organigramme = [ "fastapi", "organigramme" ]
|
organigramme = [ "fastapi", "organigramme" ]
|
||||||
|
|
Loading…
Reference in New Issue