From ef0b419fec38327f0c6ce4a114aa1d7a707f7b48 Mon Sep 17 00:00:00 2001 From: Nikolay Kiryanov Date: Mon, 2 Jun 2025 19:09:14 +0300 Subject: [PATCH 1/4] Static dir: absolute path and keep it out from --- {{ cookiecutter.name }}/Makefile | 1 - {{ cookiecutter.name }}/src/app/conf/boilerplate.py | 2 +- {{ cookiecutter.name }}/src/app/conf/environ.py | 2 +- {{ cookiecutter.name }}/src/app/conf/i18n.py | 6 +++--- {{ cookiecutter.name }}/src/app/conf/static.py | 3 ++- .../src/app/management/commands/startapp.py | 4 ++-- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/{{ cookiecutter.name }}/Makefile b/{{ cookiecutter.name }}/Makefile index 410c94fc..f575f4a7 100644 --- a/{{ cookiecutter.name }}/Makefile +++ b/{{ cookiecutter.name }}/Makefile @@ -25,7 +25,6 @@ lint: uv run dotenv-linter src/app/.env.ci test: - @mkdir -p src/static uv run pytest --dead-fixtures uv run pytest --create-db --exitfirst --numprocesses ${SIMULTANEOUS_TEST_JOBS} diff --git a/{{ cookiecutter.name }}/src/app/conf/boilerplate.py b/{{ cookiecutter.name }}/src/app/conf/boilerplate.py index 93170a60..7acb3f62 100644 --- a/{{ cookiecutter.name }}/src/app/conf/boilerplate.py +++ b/{{ cookiecutter.name }}/src/app/conf/boilerplate.py @@ -1,7 +1,7 @@ from pathlib import Path -BASE_DIR = Path(__file__).resolve().parent.parent +BASE_DIR = Path(__file__).resolve().parent.parent.parent # src directory ROOT_URLCONF = "app.urls" diff --git a/{{ cookiecutter.name }}/src/app/conf/environ.py b/{{ cookiecutter.name }}/src/app/conf/environ.py index 5d98314f..dbf901b1 100644 --- a/{{ cookiecutter.name }}/src/app/conf/environ.py +++ b/{{ cookiecutter.name }}/src/app/conf/environ.py @@ -8,7 +8,7 @@ CI=(bool, False), ) -envpath = BASE_DIR / ".env" +envpath = BASE_DIR / "app" / ".env" if envpath.exists(): env.read_env(envpath) diff --git a/{{ cookiecutter.name }}/src/app/conf/i18n.py b/{{ cookiecutter.name }}/src/app/conf/i18n.py index 177f9612..a000efcf 100644 --- a/{{ cookiecutter.name }}/src/app/conf/i18n.py +++ b/{{ cookiecutter.name }}/src/app/conf/i18n.py @@ -1,10 +1,10 @@ -from pathlib import Path - from app.conf.boilerplate import BASE_DIR LANGUAGE_CODE = "ru" -LOCALE_PATHS = [Path(BASE_DIR).parent / ".locale"] +LOCALE_PATHS = [ + BASE_DIR / ".locale", +] USE_i18N = True diff --git a/{{ cookiecutter.name }}/src/app/conf/static.py b/{{ cookiecutter.name }}/src/app/conf/static.py index 14f494b5..3784dfed 100644 --- a/{{ cookiecutter.name }}/src/app/conf/static.py +++ b/{{ cookiecutter.name }}/src/app/conf/static.py @@ -1,3 +1,4 @@ +from app.conf.boilerplate import BASE_DIR from app.conf.environ import env @@ -5,4 +6,4 @@ # https://docs.djangoproject.com/en/3.0/howto/static-files/ STATIC_URL = "/static/" -STATIC_ROOT = env("STATIC_ROOT", cast=str, default="static") +STATIC_ROOT = env.path("STATIC_ROOT", default=BASE_DIR.parent / "static") diff --git a/{{ cookiecutter.name }}/src/app/management/commands/startapp.py b/{{ cookiecutter.name }}/src/app/management/commands/startapp.py index c62f400e..c0833422 100644 --- a/{{ cookiecutter.name }}/src/app/management/commands/startapp.py +++ b/{{ cookiecutter.name }}/src/app/management/commands/startapp.py @@ -7,14 +7,14 @@ class Command(BaseCommand): def handle(self, **options): if "directory" not in options or options["directory"] is None: - directory = settings.BASE_DIR.parent / options["name"] + directory = settings.BASE_DIR / options["name"] directory.mkdir(exist_ok=True) options["directory"] = str(directory) if "template" not in options or options["template"] is None: - template = settings.BASE_DIR.parent / ".django-app-template" + template = settings.BASE_DIR / ".django-app-template" options["template"] = str(template) From bce6695c9211e66969ab438ec597dd5187894abe Mon Sep 17 00:00:00 2001 From: Nikolay Kiryanov Date: Mon, 2 Jun 2025 19:09:36 +0300 Subject: [PATCH 2/4] Media root dir: set absolute path --- {{ cookiecutter.name }}/src/app/conf/media.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/{{ cookiecutter.name }}/src/app/conf/media.py b/{{ cookiecutter.name }}/src/app/conf/media.py index 10a5aaa9..bb8ab444 100644 --- a/{{ cookiecutter.name }}/src/app/conf/media.py +++ b/{{ cookiecutter.name }}/src/app/conf/media.py @@ -1,5 +1,6 @@ +from app.conf.boilerplate import BASE_DIR from app.conf.environ import env MEDIA_URL = "/media/" -MEDIA_ROOT = env("MEDIA_ROOT", cast=str, default="media") +MEDIA_ROOT = env.path("MEDIA_ROOT", default=BASE_DIR.parent / "media") From 047e123841ca4e19c6bb0056f11b8c1a14456cbf Mon Sep 17 00:00:00 2001 From: Nikolay Kiryanov Date: Mon, 2 Jun 2025 19:10:03 +0300 Subject: [PATCH 3/4] Adjust .gitignore for new static and media directories --- {{ cookiecutter.name }}/.gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/{{ cookiecutter.name }}/.gitignore b/{{ cookiecutter.name }}/.gitignore index e3504745..b004738f 100644 --- a/{{ cookiecutter.name }}/.gitignore +++ b/{{ cookiecutter.name }}/.gitignore @@ -111,7 +111,7 @@ dmypy.json venv .venv -static .env db.sqlite +/static /media \ No newline at end of file From cf91ae1eeb0124601758d69e80d7b5cdfae72aee Mon Sep 17 00:00:00 2001 From: Nikolay Kiryanov Date: Wed, 4 Jun 2025 00:25:08 +0300 Subject: [PATCH 4/4] Introduce `SRC_DIR` directory settings --- {{ cookiecutter.name }}/src/app/conf/boilerplate.py | 5 ++++- {{ cookiecutter.name }}/src/app/conf/environ.py | 4 ++-- {{ cookiecutter.name }}/src/app/conf/i18n.py | 4 ++-- {{ cookiecutter.name }}/src/app/conf/media.py | 2 +- {{ cookiecutter.name }}/src/app/conf/static.py | 2 +- .../src/app/management/commands/startapp.py | 4 ++-- 6 files changed, 12 insertions(+), 9 deletions(-) diff --git a/{{ cookiecutter.name }}/src/app/conf/boilerplate.py b/{{ cookiecutter.name }}/src/app/conf/boilerplate.py index 7acb3f62..c4fed157 100644 --- a/{{ cookiecutter.name }}/src/app/conf/boilerplate.py +++ b/{{ cookiecutter.name }}/src/app/conf/boilerplate.py @@ -1,7 +1,10 @@ from pathlib import Path -BASE_DIR = Path(__file__).resolve().parent.parent.parent # src directory +# Repository root directory +BASE_DIR = Path(__file__).resolve().parent.parent.parent.parent + +SRC_DIR = BASE_DIR / "src" ROOT_URLCONF = "app.urls" diff --git a/{{ cookiecutter.name }}/src/app/conf/environ.py b/{{ cookiecutter.name }}/src/app/conf/environ.py index dbf901b1..21e22319 100644 --- a/{{ cookiecutter.name }}/src/app/conf/environ.py +++ b/{{ cookiecutter.name }}/src/app/conf/environ.py @@ -1,6 +1,6 @@ import environ # type: ignore[import-untyped] -from app.conf.boilerplate import BASE_DIR +from app.conf.boilerplate import SRC_DIR env = environ.Env( @@ -8,7 +8,7 @@ CI=(bool, False), ) -envpath = BASE_DIR / "app" / ".env" +envpath = SRC_DIR / "app" / ".env" if envpath.exists(): env.read_env(envpath) diff --git a/{{ cookiecutter.name }}/src/app/conf/i18n.py b/{{ cookiecutter.name }}/src/app/conf/i18n.py index a000efcf..040ac52f 100644 --- a/{{ cookiecutter.name }}/src/app/conf/i18n.py +++ b/{{ cookiecutter.name }}/src/app/conf/i18n.py @@ -1,10 +1,10 @@ -from app.conf.boilerplate import BASE_DIR +from app.conf.boilerplate import SRC_DIR LANGUAGE_CODE = "ru" LOCALE_PATHS = [ - BASE_DIR / ".locale", + SRC_DIR / ".locale", ] USE_i18N = True diff --git a/{{ cookiecutter.name }}/src/app/conf/media.py b/{{ cookiecutter.name }}/src/app/conf/media.py index bb8ab444..d6c605c1 100644 --- a/{{ cookiecutter.name }}/src/app/conf/media.py +++ b/{{ cookiecutter.name }}/src/app/conf/media.py @@ -3,4 +3,4 @@ MEDIA_URL = "/media/" -MEDIA_ROOT = env.path("MEDIA_ROOT", default=BASE_DIR.parent / "media") +MEDIA_ROOT = env.path("MEDIA_ROOT", default=BASE_DIR / "media") diff --git a/{{ cookiecutter.name }}/src/app/conf/static.py b/{{ cookiecutter.name }}/src/app/conf/static.py index 3784dfed..dc7a7333 100644 --- a/{{ cookiecutter.name }}/src/app/conf/static.py +++ b/{{ cookiecutter.name }}/src/app/conf/static.py @@ -6,4 +6,4 @@ # https://docs.djangoproject.com/en/3.0/howto/static-files/ STATIC_URL = "/static/" -STATIC_ROOT = env.path("STATIC_ROOT", default=BASE_DIR.parent / "static") +STATIC_ROOT = env.path("STATIC_ROOT", default=BASE_DIR / "static") diff --git a/{{ cookiecutter.name }}/src/app/management/commands/startapp.py b/{{ cookiecutter.name }}/src/app/management/commands/startapp.py index c0833422..171a55de 100644 --- a/{{ cookiecutter.name }}/src/app/management/commands/startapp.py +++ b/{{ cookiecutter.name }}/src/app/management/commands/startapp.py @@ -7,14 +7,14 @@ class Command(BaseCommand): def handle(self, **options): if "directory" not in options or options["directory"] is None: - directory = settings.BASE_DIR / options["name"] + directory = settings.SRC_DIR / options["name"] directory.mkdir(exist_ok=True) options["directory"] = str(directory) if "template" not in options or options["template"] is None: - template = settings.BASE_DIR / ".django-app-template" + template = settings.SRC_DIR / ".django-app-template" options["template"] = str(template)