Skip to content

Commit

Permalink
added basic logging and updated environment variables
Browse files Browse the repository at this point in the history
- added github actions testing
- updated enviroment variables in settings
- added tests for logging files
- updated setting to check for testing
  • Loading branch information
daniel-gray-tangent committed May 8, 2024
1 parent 835f688 commit 59ef7fd
Show file tree
Hide file tree
Showing 11 changed files with 179 additions and 4 deletions.
11 changes: 11 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
SECRET_KEY=''
DEBUG=True
DB_HOST=db
DB_PORT=5432
DB_NAME=term_db
DB_USER=sadilar
DB_PASSWORD=sadilar
LOGGING_FILE=debug.log
LOGGING_HANDLERS_LEVEL=INFO
LOGGING_LOGGERS_LEVEL=INFO
LOGGING_LOGGERS_DJANGO_LEVEL=INFO
11 changes: 11 additions & 0 deletions .env.testing
Original file line number Diff line number Diff line change
@@ -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=debug.log
LOGGING_HANDLERS_LEVEL=INFO
LOGGING_LOGGERS_LEVEL=INFO
LOGGING_LOGGERS_DJANGO_LEVEL=INFO
30 changes: 30 additions & 0 deletions .github/workflows/testing.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
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: Create logging folder
run: |
sudo mkdir -p /logging
sudo chown runner:runner /logging
- name: Run Tests
run: |
cp .env.testing app/.env
cd app/
mkdir -p static_files
python manage.py test
- name: Manager Check
run: |
cd app/
python manage.py check
7 changes: 5 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,7 @@ db.sqlite3
db.sqlite3-journal
media

# macOS template
# General
# General Files
.DS_Store
.AppleDouble
.LSOverride
Expand All @@ -30,6 +29,10 @@ venv/
ENV/
env.bak/
venv.bak/

#folders
app/static_files/
/app/documents/
app/media/
/app/logging/
/logging/
8 changes: 8 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -112,3 +112,11 @@ dev-quick-install:
@make load-fixtures
echo "Creating superuser"
@make create-super-user

shell:
clear
docker exec -it sadilar-terminology-web bash

check:
clear
@docker-compose run --rm web python manage.py check
16 changes: 16 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,24 @@ 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


## Production Information

Docker Volumes for production:

/media
/logging
67 changes: 67 additions & 0 deletions app/app/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -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/

Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -154,3 +163,61 @@
# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field

DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"

LOGGING_FOLDER_DEFAULT = os.path.abspath(os.path.join("/logging/"))

# Check if the application is under testing
if "test" in sys.argv:
DEBUG = False
else:
DEBUG = True

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.path.join(
LOGGING_FOLDER_DEFAULT, os.environ.get("LOGGING_FILE", "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": "{",
},
},
}
24 changes: 24 additions & 0 deletions app/general/tests/test_logging.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import logging
import os
import sys

from django.test import TestCase


class LoggingTest(TestCase):
def setUp(self):
LOGGING_FOLDER_DEFAULT = os.path.abspath(os.path.join("/logging/"))
self.logger = logging.getLogger("django")
self.log_file = os.path.join(LOGGING_FOLDER_DEFAULT, "debug.log")

def test_log_file_created(self):
"""Test if the log file is created."""
self.logger.error("This is a test error message.")

self.assertTrue(os.path.exists(self.log_file))

def test_log_message(self):
"""Test if the log message is written to the file."""
with open(self.log_file, "r") as f:
content = f.read()
self.assertIn("This is a test error message.", content)
1 change: 1 addition & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ services:
command: python manage.py runserver 0.0.0.0:8000
volumes:
- ./app:/app
- ./logging:/logging
ports:
- "8000:8000"
depends_on:
Expand Down
3 changes: 3 additions & 0 deletions requirements-test.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
-r requirements.txt
django-extensions
ruff
5 changes: 3 additions & 2 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
django==5.0.2
psycopg2-binary
django-environ
django-simple-history
gunicorn
psycopg2-binary
whitenoise
django-simple-history

0 comments on commit 59ef7fd

Please sign in to comment.