From 39f7686b5c104a38fe0455dc0900a53d627bdd7d Mon Sep 17 00:00:00 2001 From: Daniel Gray Date: Mon, 29 Apr 2024 08:20:41 +0200 Subject: [PATCH] added basic logging and updated environment variables added ls testing dir change added linting tools added dev requirement file updated install testing tests - added github actions testing - updated enviroment variables in settings --- .env.example | 11 +++++++ .env.testing | 11 +++++++ .github/workflows/testing.yml | 22 +++++++++++++ .gitignore | 1 + README.md | 8 +++++ app/app/settings.py | 58 +++++++++++++++++++++++++++++++++++ requirements-test.txt | 3 ++ requirements.txt | 4 ++- 8 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 .env.example create mode 100644 .env.testing create mode 100644 .github/workflows/testing.yml create mode 100644 requirements-test.txt diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..bfcf91b6 --- /dev/null +++ b/.env.example @@ -0,0 +1,11 @@ +SECRET_KEY='django-insecure-w!h85bp^$$e8gm%c23r!0%9i7yzd=6w$$s&ic+6!%306&kj8@k*5' +DEBUG=True +DB_HOST=db +DB_PORT=5432 +DB_NAME=term_db +DB_USER=sadilar +DB_PASSWORD=sadilar +LOGGING_FILE=logs/debug.log +LOGGING_HANDLERS_LEVEL=INFO +LOGGING_LOGGERS_LEVEL=INFO +LOGGING_LOGGERS_DJANGO_LEVEL=INFO diff --git a/.env.testing b/.env.testing new file mode 100644 index 00000000..bfcf91b6 --- /dev/null +++ b/.env.testing @@ -0,0 +1,11 @@ +SECRET_KEY='django-insecure-w!h85bp^$$e8gm%c23r!0%9i7yzd=6w$$s&ic+6!%306&kj8@k*5' +DEBUG=True +DB_HOST=db +DB_PORT=5432 +DB_NAME=term_db +DB_USER=sadilar +DB_PASSWORD=sadilar +LOGGING_FILE=logs/debug.log +LOGGING_HANDLERS_LEVEL=INFO +LOGGING_LOGGERS_LEVEL=INFO +LOGGING_LOGGERS_DJANGO_LEVEL=INFO diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml new file mode 100644 index 00000000..83778423 --- /dev/null +++ b/.github/workflows/testing.yml @@ -0,0 +1,22 @@ +name: Testing Django +on: [ pull_request, push ] # activates the workflow when there is a push or pull request in the repo +jobs: + test_project: + runs-on: ubuntu-latest # operating system your code will run on + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + - name: Install Dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements-test.txt + - name: Run linting tools + run: | + cd app/ + ruff format . + - name: Run Tests + run: | + cp .env.testing app/.env + cd app/ + mkdir static_files + python manage.py test diff --git a/.gitignore b/.gitignore index ec66bba8..5be98dc2 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,4 @@ venv.bak/ app/static_files/ /app/documents/ app/media/ +/app/logging/ diff --git a/README.md b/README.md index d2f4ae1f..f7038241 100644 --- a/README.md +++ b/README.md @@ -24,8 +24,16 @@ About the project: 3. Run `make run` to run the docker container 4. Run `make stop` to stop the docker container +## Production ### Plugins installed + #### Django Simple History https://django-simple-history.readthedocs.io/en/latest/ + +#### Basic setup for production + +### environment variables + +please use .env.example as example diff --git a/app/app/settings.py b/app/app/settings.py index f8680adf..b805d96c 100644 --- a/app/app/settings.py +++ b/app/app/settings.py @@ -11,11 +11,17 @@ """ import os +import sys from pathlib import Path +import environ + # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent +# Take environment variables from .env file +environ.Env.read_env(os.path.join(BASE_DIR, ".env")) + # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/ @@ -98,6 +104,9 @@ } } +if "test" in sys.argv or "test_coverage" in sys.argv: # Covers regular testing and django-coverage + DATABASES["default"]["ENGINE"] = "django.db.backends.sqlite3" + # Password validation # https://docs.djangoproject.com/en/5.0/ref/settings/#auth-password-validators @@ -154,3 +163,52 @@ # https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" + + +if DEBUG: + LOGGING = { + "version": 1, + "disable_existing_loggers": False, + "handlers": { + "console": { + "class": "logging.StreamHandler", + }, + }, + "root": { + "handlers": ["console"], + "level": "DEBUG", + }, + } +else: + LOGGING = { + "version": 1, + "disable_existing_loggers": False, + "handlers": { + "console": { + "class": "logging.StreamHandler", + }, + "file": { + "level": os.environ.get("LOGGING_HANDLERS_LEVEL", "WARNING"), + "class": "logging.FileHandler", + "filename": os.environ.get("LOGGING_FILE", "logging/debug.log"), + "formatter": "verbose", + }, + }, + "root": { + "handlers": ["console", "file"], + "level": os.environ.get("LOGGING_LOGGERS_LEVEL", "WARNING"), + }, + "loggers": { + "django": { + "handlers": ["file"], + "level": os.environ.get("LOGGING_LOGGERS_DJANGO_LEVEL", "WARNING"), + "propagate": True, + }, + }, + "formatters": { + "verbose": { + "format": "{asctime} {levelname} - {name} {module}.py (line: {lineno:d}). - {message}", + "style": "{", + }, + }, + } diff --git a/requirements-test.txt b/requirements-test.txt new file mode 100644 index 00000000..e00d50bd --- /dev/null +++ b/requirements-test.txt @@ -0,0 +1,3 @@ +-r requirements.txt +django-extensions +ruff diff --git a/requirements.txt b/requirements.txt index 6c93a0f9..3fb9b967 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,7 @@ django==5.0.2 -psycopg2-binary +django-environ +django-simple-history gunicorn +psycopg2-binary whitenoise django-simple-history