digitalfabrik/integreat-cms

View on GitHub
integreat_cms/integreat-cms-cli

Summary

Maintainability
Test Coverage
#!/usr/bin/env python3
""" Django's command-line utility for administrative tasks. """
from __future__ import annotations

import configparser
import os
import sys


def read_config() -> None:
    """
    Reads and parses the corresponding configurations.
    """
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "integreat_cms.core.settings")

    # Read config from config file
    config = configparser.ConfigParser(interpolation=None)
    config.read("/etc/integreat-cms.ini")
    for section in config.sections():
        for KEY, VALUE in config.items(section):
            os.environ.setdefault(f"INTEGREAT_CMS_{KEY.upper()}", VALUE)


def main() -> None:
    """
    Application entry point

    :raises ImportError: If the Django framework is not installed or not in the path, an import error is risen.

    """
    read_config()

    try:
        # pylint: disable=import-outside-toplevel
        from django.core.management import execute_from_command_line
    except ImportError:
        # The above import may fail for some other reason. Ensure that the
        # issue is really that Django is missing to avoid masking other
        # exceptions on Python 2.
        try:
            # pylint: disable=import-outside-toplevel,unused-import
            import django
        except ImportError as e:
            raise ImportError(
                "Couldn't import Django. Are you sure it's installed and "
                "available on your PYTHONPATH environment variable? Did you "
                "forget to activate a virtual environment?"
            ) from e
        raise
    execute_from_command_line(sys.argv)


if __name__ == "__main__":
    main()