From 251013818aa769fd94ffbe059c2f3291c9245943 Mon Sep 17 00:00:00 2001 From: Wouter Vanden Hove Date: Fri, 15 Sep 2023 06:41:14 +0200 Subject: [PATCH] initial setings --- etc/logging.yaml | 2 - makefile | 9 +- pyproject.toml | 2 +- src/libranet_django/settings.py | 154 +++++++++++++++++++++++++ src/libranet_django/static/favicon.png | Bin 0 -> 24466 bytes src/libranet_django/urls.py | 27 +++++ src/libranet_django/utils/asgi.py | 13 +++ src/libranet_django/utils/wsgi.py | 13 +++ 8 files changed, 215 insertions(+), 5 deletions(-) create mode 100644 src/libranet_django/settings.py create mode 100644 src/libranet_django/static/favicon.png create mode 100644 src/libranet_django/urls.py create mode 100644 src/libranet_django/utils/asgi.py create mode 100644 src/libranet_django/utils/wsgi.py diff --git a/etc/logging.yaml b/etc/logging.yaml index a693d408..c457475a 100644 --- a/etc/logging.yaml +++ b/etc/logging.yaml @@ -231,7 +231,6 @@ loggers: handlers: - libranet_django_file - django: level: !env LOGLEVEL_DJANGO, DEBUG handlers: # review @@ -243,7 +242,6 @@ loggers: - django_db_backends_handler propagate': False - dotenv: level: !env LOGLEVEL_DOTENV, NOTSET diff --git a/makefile b/makefile index 63077bbd..ac1f9d1d 100644 --- a/makefile +++ b/makefile @@ -22,7 +22,7 @@ .PHONY: install ## full initial installation -install: create-dirs create-dirs-extra dotenv-install poetry-install symlink-venv-dirs +install: create-dirs create-dirs-extra dotenv-install poetry-install symlink-venv-dirs create-demo-project .PHONY: create-dirs-extra ## create additional directories @@ -44,4 +44,9 @@ post-install: create-dirs-extra: mkdir -p var/data mkdir -p var/static - mkdir -p var/upload \ No newline at end of file + mkdir -p var/upload + + +.PHONY: create-demo-project ## create a demo project +create-demo-project: + cd var/tmp && bin/django-admin startproject demo1 \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 6d46a61e..c5c9d736 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -218,7 +218,7 @@ hypothesis = ">=6.72" nox = ">=2022.11" nox-poetry = ">=1.0" pytest = ">=7.0" -pytest-clarity = "^1.0" +pytest-clarity = ">=1.0" pytest-codecov = ">=0.5" pytest-cov = ">=3.0" pytest-click = ">=1.1" diff --git a/src/libranet_django/settings.py b/src/libranet_django/settings.py new file mode 100644 index 00000000..4b6ef06a --- /dev/null +++ b/src/libranet_django/settings.py @@ -0,0 +1,154 @@ +"""libranet_django.settings. + +Django settings for libranet_django project. + +Generated by 'django-admin startproject' using Django 4.2.5. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/4.2/ref/settings/ +""" +import os +import pkg_resources +import pathlib as pl + + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +# BASE_DIR = pl.Path(__file__).resolve().parent.parent +DB_DIR = pl.Path(os.getenv("DB_DIR")) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = os.getenv("DJANGO_SECRET_KEY") + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = os.getenv("DJANGO_DEBUG") + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + "django.contrib.admin", + "django.contrib.auth", + "django.contrib.contenttypes", + "django.contrib.sessions", + "django.contrib.messages", + "django.contrib.staticfiles", +] + +MIDDLEWARE = [ + "django.middleware.security.SecurityMiddleware", + "django.contrib.sessions.middleware.SessionMiddleware", + "django.middleware.common.CommonMiddleware", + "django.middleware.csrf.CsrfViewMiddleware", + "django.contrib.auth.middleware.AuthenticationMiddleware", + "django.contrib.messages.middleware.MessageMiddleware", + "django.middleware.clickjacking.XFrameOptionsMiddleware", +] + +ROOT_URLCONF = "libranet_django.urls" + +TEMPLATES = [ + { + "BACKEND": "django.template.backends.django.DjangoTemplates", + "DIRS": [], + "APP_DIRS": True, + "OPTIONS": { + "context_processors": [ + "django.template.context_processors.debug", + "django.template.context_processors.request", + "django.contrib.auth.context_processors.auth", + "django.contrib.messages.context_processors.messages", + ], + }, + }, +] + +WSGI_APPLICATION = "libranet_django.utils.wsgi.application" +ASGI_APPLICATION = "libranet_django.utils.asgi.application" + +# Database +# https://docs.djangoproject.com/en/4.2/ref/settings/#databases + +DATABASES = { + "default": { + "ENGINE": "django.db.backends.sqlite3", + "NAME": DB_DIR / "db.sqlite3", + } +} + + +# Password validation +# https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", + }, + { + "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", + }, + { + "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator", + }, + { + "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator", + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/4.2/topics/i18n/ + +LANGUAGE_CODE = "en-us" + +TIME_ZONE = "UTC" + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/4.2/howto/static-files/ + +STATIC_URL = "static/" + +# Default primary key field type +# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" + + + +# Static files like css/js/png. cfr. https://docs.djangoproject.com/en/2.2/howto/static-files/ +STATIC_VERSION = "v1" +STATIC_ROOT = os.getenv("STATIC_DIR") # cfg.static_dir +STATIC_URL = "/static/" + +MEDIA_ROOT = os.getenv("MEDIA_DIR") # cfg.media_dir +MEDIA_URL = "/media/" + +ADMINS = [ + ("Wouter Vanden Hove", "wouter@libranet.eu"), +] + + + +STATICFILES_DIRS = [ + # cfg.package_static_dir, + pl.Path(pkg_resources.resource_filename("libranet_django", "static")) +] + +STATICFILES_FINDERS = [ + "django.contrib.staticfiles.finders.FileSystemFinder", + "django.contrib.staticfiles.finders.AppDirectoriesFinder", + # "sass_processor.finders.CssFinder", +] \ No newline at end of file diff --git a/src/libranet_django/static/favicon.png b/src/libranet_django/static/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..5a479c28381ca02d856603ad52687cc8a17db62c GIT binary patch literal 24466 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