Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added basic logging and updated environment variables #37

Merged
merged 1 commit into from
May 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
daniel-gray-tangent marked this conversation as resolved.
Show resolved Hide resolved
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

docker-shell:
clear
docker exec -it sadilar-terminology-web bash
daniel-gray-tangent marked this conversation as resolved.
Show resolved Hide resolved

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
65 changes: 65 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,59 @@
# 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

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
Loading