Get conf from envvars
This commit is contained in:
parent
22bb84d1d4
commit
74579a20a9
3 changed files with 70 additions and 10 deletions
64
larigira/config.py
Normal file
64
larigira/config.py
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
'''
|
||||||
|
Taken from flask-appconfig
|
||||||
|
'''
|
||||||
|
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
def get_conf(prefix='LARIGIRA_'):
|
||||||
|
'''This is where everyone should get configuration from'''
|
||||||
|
conf = {}
|
||||||
|
conf['CONTINOUS_AUDIODESC'] = dict(kind='mpd', howmany=1)
|
||||||
|
conf['MPD_HOST'] = os.getenv('MPD_HOST', 'localhost')
|
||||||
|
conf['MPD_PORT'] = int(os.getenv('MPD_PORT', '6600'))
|
||||||
|
conf['CACHING_TIME'] = 10
|
||||||
|
conf['DB_URI'] = 'larigira.db'
|
||||||
|
conf.update(from_envvars(prefix=prefix))
|
||||||
|
return conf
|
||||||
|
|
||||||
|
|
||||||
|
def from_envvars(prefix=None, envvars=None, as_json=True):
|
||||||
|
"""Load environment variables in a dictionary
|
||||||
|
|
||||||
|
Values are parsed as JSON. If parsing fails with a ValueError,
|
||||||
|
values are instead used as verbatim strings.
|
||||||
|
|
||||||
|
:param prefix: If ``None`` is passed as envvars, all variables from
|
||||||
|
``environ`` starting with this prefix are imported. The
|
||||||
|
prefix is stripped upon import.
|
||||||
|
:param envvars: A dictionary of mappings of environment-variable-names
|
||||||
|
to Flask configuration names. If a list is passed
|
||||||
|
instead, names are mapped 1:1. If ``None``, see prefix
|
||||||
|
argument.
|
||||||
|
:param as_json: If False, values will not be parsed as JSON first.
|
||||||
|
"""
|
||||||
|
conf = {}
|
||||||
|
if prefix is None and envvars is None:
|
||||||
|
raise RuntimeError('Must either give prefix or envvars argument')
|
||||||
|
|
||||||
|
# if it's a list, convert to dict
|
||||||
|
if isinstance(envvars, list):
|
||||||
|
envvars = {k: None for k in envvars}
|
||||||
|
|
||||||
|
if not envvars:
|
||||||
|
envvars = {k: k[len(prefix):] for k in os.environ.keys()
|
||||||
|
if k.startswith(prefix)}
|
||||||
|
|
||||||
|
for env_name, name in envvars.items():
|
||||||
|
if name is None:
|
||||||
|
name = env_name
|
||||||
|
|
||||||
|
if env_name not in os.environ:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if as_json:
|
||||||
|
try:
|
||||||
|
conf[name] = json.loads(os.environ[env_name])
|
||||||
|
except ValueError:
|
||||||
|
conf[name] = os.environ[env_name]
|
||||||
|
else:
|
||||||
|
conf[name] = os.environ[env_name]
|
||||||
|
|
||||||
|
return conf
|
|
@ -3,6 +3,7 @@ import argparse
|
||||||
from pprint import pprint
|
from pprint import pprint
|
||||||
|
|
||||||
from .event import EventModel
|
from .event import EventModel
|
||||||
|
from .config import get_conf
|
||||||
|
|
||||||
|
|
||||||
def main_list(args):
|
def main_list(args):
|
||||||
|
@ -19,8 +20,10 @@ def main_add(args):
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
conf = get_conf()
|
||||||
p = argparse.ArgumentParser()
|
p = argparse.ArgumentParser()
|
||||||
p.add_argument('-f', '--file', help="Filepath for DB", required=True)
|
p.add_argument('-f', '--file', help="Filepath for DB", required=False,
|
||||||
|
default=conf['DB_URI'])
|
||||||
sub = p.add_subparsers()
|
sub = p.add_subparsers()
|
||||||
sub_list = sub.add_parser('list')
|
sub_list = sub.add_parser('list')
|
||||||
sub_list.set_defaults(func=main_list)
|
sub_list.set_defaults(func=main_list)
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
from gevent import monkey
|
from gevent import monkey
|
||||||
monkey.patch_all(subprocess=True)
|
monkey.patch_all(subprocess=True)
|
||||||
import os
|
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
FORMAT = '%(asctime)s|%(levelname)s[%(name)s:%(lineno)d] %(message)s'
|
FORMAT = '%(asctime)s|%(levelname)s[%(name)s:%(lineno)d] %(message)s'
|
||||||
|
@ -19,12 +18,7 @@ from eventutils import ParentedLet, Timer
|
||||||
import rpc
|
import rpc
|
||||||
from audiogen import audiogenerate
|
from audiogen import audiogenerate
|
||||||
from event import Monitor
|
from event import Monitor
|
||||||
|
from .config import get_conf
|
||||||
conf = {}
|
|
||||||
conf['CONTINOUS_AUDIODESC'] = dict(kind='mpd', howmany=1)
|
|
||||||
conf['MPD_HOST'] = os.getenv('MPD_HOST', 'localhost')
|
|
||||||
conf['MPD_PORT'] = int(os.getenv('MPD_PORT', '6600'))
|
|
||||||
conf['CACHING_TIME'] = 10
|
|
||||||
|
|
||||||
|
|
||||||
class MpcWatcher(ParentedLet):
|
class MpcWatcher(ParentedLet):
|
||||||
|
@ -107,8 +101,7 @@ def on_player_crash(*args, **kwargs):
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
# TODO: update conf from somewhere
|
conf = get_conf()
|
||||||
conf['DB_URI'] = 'larigira.db'
|
|
||||||
logging.basicConfig(level=logging.DEBUG)
|
logging.basicConfig(level=logging.DEBUG)
|
||||||
p = Player(conf)
|
p = Player(conf)
|
||||||
p.start()
|
p.start()
|
||||||
|
|
Loading…
Reference in a new issue