Source code for larigira.config

#!/usr/bin/env python
"""
Taken from flask-appconfig
"""

import json
import os

from xdg import BaseDirectory


[docs]def get_conf(prefix="LARIGIRA_"): """This is where everyone should get configuration from""" conf_dir = BaseDirectory.save_config_path("larigira") conf = {} conf["CONTINOUS_AUDIOSPEC"] = 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"] = os.path.join(conf_dir, "db.json") conf["SCRIPTS_PATH"] = os.path.join(conf_dir, "scripts") conf["EXTRA_STATIC_PATH"] = os.path.join(conf_dir, "extra") conf["EXTRA_MENU_LINKS"] = [] conf["ROUTE_PREFIX"] = "" conf["BOOTSTRAP_SERVE_LOCAL"] = True conf["SECRET_KEY"] = "Please replace me!" conf["MPD_WAIT_START"] = True conf["MPD_WAIT_START_RETRYSECS"] = 5 conf["CHECK_SECS"] = 20 # period for checking playlist length conf["EVENT_TICK_SECS"] = 30 # period for scheduling events conf["DEBUG"] = False conf["LOG_CONFIG"] = False conf["TMPDIR"] = os.getenv("TMPDIR", "/tmp/") conf["FILE_PATH_SUGGESTION"] = () # tuple of paths # UI_CALENDAR_FREQUENCY_THRESHOLD"] has been removed # use UI_CALENDAR_OCCURRENCIES_THRESHOLD instead conf["UI_CALENDAR_FREQUENCY_THRESHOLD"] = 4 * 60 * 60 # 4 hours conf["UI_CALENDAR_OCCURRENCIES_THRESHOLD"] = 40 conf["UI_CALENDAR_DATE_FMT"] = "medium" conf["EVENT_FILTERS"] = [] conf["HTTP_PORT"] = 5000 conf["HOME_URL"] = "/db/calendar" conf.update(from_envvars(prefix=prefix)) return conf
[docs]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