Load logging from settings.py to tell users about the things we do

This will tell them:
- If we created SERVER_DIR (info)
- If we generated a random SECRET_KEY (warn)
- What configuration file (ARA_SETTINGS) is in use (info)

Change-Id: I6a1bbc0032fc1d73859e9c7c3efec463e1574416
This commit is contained in:
David Moreau Simard 2019-01-15 11:36:07 -05:00
parent 8b8bc03f7c
commit e47f5afb2e
No known key found for this signature in database
GPG Key ID: CBEB466764A9E621
1 changed files with 40 additions and 30 deletions

View File

@ -1,3 +1,5 @@
import logging
import logging.config
import os
import textwrap
@ -7,10 +9,45 @@ from dynaconf import LazySettings
settings = LazySettings(GLOBAL_ENV_FOR_DYNACONF="ARA", ENVVAR_FOR_DYNACONF="ARA_SETTINGS")
# Django doesn't set up logging until it's too late to use it in settings.py.
# Set it up from the configuration so we can use it.
DEBUG = settings.get("DEBUG", False, "@bool")
LOG_LEVEL = settings.get("LOG_LEVEL", "INFO")
# fmt: off
LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {"normal": {"format": "%(asctime)s %(levelname)s %(name)s: %(message)s"}},
"handlers": {
"console": {
"class": "logging.StreamHandler",
"formatter": "normal",
"level": LOG_LEVEL,
"stream": "ext://sys.stdout",
}
},
"loggers": {
"ara": {
"handlers": ["console"],
"level": LOG_LEVEL,
"propagate": 0
}
},
"root": {
"handlers": ["console"],
"level": LOG_LEVEL
},
}
# fmt: on
logging.config.dictConfig(LOGGING)
logger = logging.getLogger(__name__)
logger.debug("Loaded logging configuration")
# Ensure default base configuration/data directory exists
BASE_DIR = settings.get("BASE_DIR", os.path.expanduser("~/.ara"))
SERVER_DIR = settings.get("SERVER_DIR", os.path.join(BASE_DIR, "server"))
if not os.path.isdir(SERVER_DIR):
logger.info(f"Creating SERVER_DIR data directory: {SERVER_DIR}")
os.makedirs(SERVER_DIR, mode=0o700)
# Django built-in server and npm development server
@ -23,7 +60,8 @@ ADMINS = settings.get("ADMINS", ())
def get_secret_key():
if not settings.get("SECRET_KEY"):
return get_random_string(length=25)
logger.warn(f"No configuration found for SECRET_KEY. Generating a random key...")
return get_random_string(length=50)
return settings.get("SECRET_KEY")
@ -128,35 +166,6 @@ REST_FRAMEWORK = {
"TEST_REQUEST_DEFAULT_FORMAT": "json",
}
DEBUG = settings.get("DEBUG", False, "@bool")
LOG_LEVEL = settings.get("LOG_LEVEL", "INFO")
# fmt: off
LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {"normal": {"format": "%(asctime)s %(levelname)s %(name)s: %(message)s"}},
"handlers": {
"console": {
"class": "logging.StreamHandler",
"formatter": "normal",
"level": LOG_LEVEL,
"stream": "ext://sys.stdout",
}
},
"loggers": {
"ara": {
"handlers": ["console"],
"level": LOG_LEVEL,
"propagate": 0
}
},
"root": {
"handlers": ["console"],
"level": LOG_LEVEL
},
}
# fmt: on
# TODO: Split this out to a CLI command (django-admin command ?)
DEFAULT_CONFIG = os.path.join(SERVER_DIR, "default_config.yaml")
if not os.path.exists(DEFAULT_CONFIG):
@ -188,3 +197,4 @@ if not os.path.exists(DEFAULT_CONFIG):
yaml.dump({"default": CONFIG}, config_file, default_flow_style=False)
ARA_SETTINGS = os.getenv("ARA_SETTINGS", DEFAULT_CONFIG)
logger.info(f"Using configuration file: {ARA_SETTINGS}")