config.py 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #!/usr/bin/env python
  2. """
  3. Taken from flask-appconfig
  4. """
  5. import json
  6. import os
  7. from xdg import BaseDirectory
  8. def get_conf(prefix="LARIGIRA_"):
  9. """This is where everyone should get configuration from"""
  10. conf_dir = BaseDirectory.save_config_path("larigira")
  11. conf = {}
  12. conf["CONTINOUS_AUDIOSPEC"] = dict(kind="mpd", howmany=1)
  13. conf["MPD_HOST"] = os.getenv("MPD_HOST", "localhost")
  14. conf["MPD_PORT"] = int(os.getenv("MPD_PORT", "6600"))
  15. conf["UMASK"] = None
  16. conf["CACHING_TIME"] = 10
  17. conf["DB_URI"] = os.path.join(conf_dir, "db.json")
  18. conf["SCRIPTS_PATH"] = os.path.join(conf_dir, "scripts")
  19. conf["EXTRA_STATIC_PATH"] = os.path.join(conf_dir, "extra")
  20. conf["EXTRA_MENU_LINKS"] = []
  21. conf["ROUTE_PREFIX"] = ""
  22. conf["BOOTSTRAP_SERVE_LOCAL"] = True
  23. conf["SECRET_KEY"] = "Please replace me!"
  24. conf["MPD_WAIT_START"] = True
  25. conf["MPD_WAIT_START_RETRYSECS"] = 5
  26. conf["MPD_ENFORCE_ALWAYS_PLAYING"] = False
  27. conf["CHECK_SECS"] = 20 # period for checking playlist length
  28. conf["EVENT_TICK_SECS"] = 30 # period for scheduling events
  29. conf["DEBUG"] = False
  30. conf[
  31. "REMOVE_UNUSED_FILES"
  32. ] = True # please keep it to True unless you are into deep debugging!
  33. conf["LOG_CONFIG"] = False
  34. conf["TMPDIR"] = os.getenv("TMPDIR", "/tmp/")
  35. conf["FILE_PATH_SUGGESTION"] = () # tuple of paths
  36. # UI_CALENDAR_FREQUENCY_THRESHOLD"] has been removed
  37. # use UI_CALENDAR_OCCURRENCIES_THRESHOLD instead
  38. conf["UI_CALENDAR_FREQUENCY_THRESHOLD"] = 4 * 60 * 60 # 4 hours
  39. conf["UI_CALENDAR_OCCURRENCIES_THRESHOLD"] = 40
  40. conf["UI_CALENDAR_DATE_FMT"] = "medium"
  41. conf["EVENT_FILTERS"] = []
  42. conf["HTTP_ADDRESS"] = "0.0.0.0"
  43. conf["HTTP_PORT"] = 5000
  44. conf["HOME_URL"] = "/db/calendar"
  45. conf.update(from_envvars(prefix=prefix))
  46. return conf
  47. def from_envvars(prefix=None, envvars=None, as_json=True):
  48. """Load environment variables in a dictionary
  49. Values are parsed as JSON. If parsing fails with a ValueError,
  50. values are instead used as verbatim strings.
  51. :param prefix: If ``None`` is passed as envvars, all variables from
  52. ``environ`` starting with this prefix are imported. The
  53. prefix is stripped upon import.
  54. :param envvars: A dictionary of mappings of environment-variable-names
  55. to Flask configuration names. If a list is passed
  56. instead, names are mapped 1:1. If ``None``, see prefix
  57. argument.
  58. :param as_json: If False, values will not be parsed as JSON first.
  59. """
  60. conf = {}
  61. if prefix is None and envvars is None:
  62. raise RuntimeError("Must either give prefix or envvars argument")
  63. # if it's a list, convert to dict
  64. if isinstance(envvars, list):
  65. envvars = {k: None for k in envvars}
  66. if not envvars:
  67. envvars = {
  68. k: k[len(prefix) :]
  69. for k in os.environ.keys()
  70. if k.startswith(prefix)
  71. }
  72. for env_name, name in envvars.items():
  73. if name is None:
  74. name = env_name
  75. if env_name not in os.environ:
  76. continue
  77. if as_json:
  78. try:
  79. conf[name] = json.loads(os.environ[env_name])
  80. except ValueError:
  81. conf[name] = os.environ[env_name]
  82. else:
  83. conf[name] = os.environ[env_name]
  84. return conf