Source code for espressodb.management.utilities.files

"""Functions for identifying files relevant for EspressoDB.
"""
from typing import Dict
from typing import Any

import os
import logging

import yaml

from django.core.exceptions import ImproperlyConfigured

LOGGER = logging.getLogger("espressodb")


[docs]def get_project_settings(root_dir: str) -> Dict[str, Any]: """Reads the settings file for given project and performs checks. Expects to find the keys ``SECRET_KEY``, ``DEBUG``, ``ALLOWED_HOSTS`` and ``PROJECT_APPS``. Args: root_dir: The root directory of the project. Returns: Settings found in settings file. Raises: ImproperlyConfigured: If not all of the essential keys are set. """ settings_file = os.path.join(root_dir, "settings.yaml") if not os.path.exists(settings_file): raise ImproperlyConfigured( f"Was not able to find the `settings.yaml` file in directory `{root_dir}`." " This file is required to run the espressodb app." ) with open(settings_file, "r") as fin: settings = yaml.safe_load(fin.read()) for key in ["SECRET_KEY", "DEBUG", "ALLOWED_HOSTS", "PROJECT_APPS"]: if key not in settings: raise ImproperlyConfigured( f"The EspressoDB depends on you setting the '{key}' value" f" in the `settings.yaml` file. Searched in directory `{root_dir}`" f" but only found keys: {settings.keys()}" ) return settings
[docs]def get_db_config(root_dir: str) -> Dict[str, str]: """Reads the db settings file for given project and performs checks. Expects to find the keys ``ENGINE`` and ``NAME``. Args: root_dir: The root directory of the project. Returns: Database settings found in settings file. Raises: ImproperlyConfigured: If not all of the essential keys are set. """ db_config_file = os.path.join(root_dir, "db-config.yaml") if not os.path.exists(db_config_file): raise ImproperlyConfigured( f"Was not able to find the `db-config.yaml` file in directory `{root_dir}`." " This file is required to run the espressodb app." ) with open(db_config_file, "r") as fin: db_config = yaml.safe_load(fin.read()) if "ENGINE" not in db_config: raise KeyError( "The espressodb depends on you setting the 'ENGINE' argument" f" in the `db-config.yaml` file. Searched in directory `{root_dir}`" f" Here is a list of available keys: {db_config.keys()}" ) if "NAME" not in db_config: raise KeyError( "The espressodb depends on you setting the 'NAME' argument" f" in the `db-config.yaml` file. Searched in directory `{root_dir}`" f" Here is a list of available keys: {db_config.keys()}" ) return db_config
#: Root directory of the EspressoDB installation ESPRESSO_DB_ROOT = os.path.abspath( os.path.join(os.path.realpath(__file__), os.pardir, os.pardir, os.pardir, os.pardir) )