Source code for espressodb.management.utilities.version

"""Tools to keep track of the current repository version and database.
"""
from typing import Tuple
from typing import Optional

import subprocess
import os

from django.conf import settings

DATABASES = getattr(settings, "DATABASES", {})

_FILE_PATH = os.path.dirname(os.path.realpath(os.path.abspath(__file__)))
BASE_DIR = os.path.abspath(
    os.path.join(_FILE_PATH, os.pardir, os.pardir, os.pardir, ".git")
)


[docs]def get_repo_version() -> Tuple[Optional[str], Optional[str]]: """Finds information about the EspressoDB repository if possible. Only works if EspressoDB is installed from the github repository. Returns: The branch and the git tag-commit version as strings if found. If not installed (and symlinked from the repo), returns the PyPi version. """ tag_commit_cmd = ["git", f"--git-dir={BASE_DIR}", "describe", "--always", "--long"] branch_cmd = ["git", f"--git-dir={BASE_DIR}", "rev-parse", "--abbrev-ref", "HEAD"] try: tag_commit = ( subprocess.check_output(tag_commit_cmd, stderr=subprocess.DEVNULL) .decode("utf-8") .strip() ) branch = ( subprocess.check_output(branch_cmd, stderr=subprocess.DEVNULL) .decode("utf-8") .strip() ) except subprocess.CalledProcessError: from espressodb import __version__ tag_commit = __version__ branch = None return branch, tag_commit
[docs]def get_db_info() -> Tuple[Optional[str], Optional[str]]: """Extract database informations from the settings. Returns: The name of the db and the name of the db user if found. Note: ``.sqlite`` databases do not specify a user. """ db = DATABASES.get("default", {}) name, user = db.get("NAME"), db.get("USER") if name is not None and os.sep in name: name = name.split(os.sep)[-1] return name, user