From b603d203c3909e08609c9b279f1ed2ec0d9d804f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Kara=C5=9B?= Date: Mon, 7 Jul 2025 21:34:07 +0200 Subject: [PATCH 1/2] refactor: naming improvements --- .gitignore | 2 +- copier.yaml | 28 ++++++++++++++++++- justfile | 12 ++++---- skeleton/README.md.jinja | 6 ++-- skeleton/justfile.jinja | 6 ++-- skeleton/pyproject.toml.jinja | 6 ++-- ...cker %}docker-compose.yml{% endif %}.jinja | 2 +- ...er %}docker-entrypoint.sh{% endif %}.jinja | 2 +- .../{{ project_name_snake_case }}/__init__.py | 0 9 files changed, 45 insertions(+), 19 deletions(-) create mode 100644 skeleton/{{ project_name_snake_case }}/__init__.py diff --git a/.gitignore b/.gitignore index 200114f..7278252 100644 --- a/.gitignore +++ b/.gitignore @@ -19,4 +19,4 @@ htmlcov .pytest_cache/ /.vscode/ .mypy_cache -test_folder/ +test_catalog/ diff --git a/copier.yaml b/copier.yaml index bf14d9f..a09db94 100644 --- a/copier.yaml +++ b/copier.yaml @@ -7,7 +7,33 @@ _answers_file: .copier-answers.copier-python-project.yml # For a complete list of prompt options, see https://copier.readthedocs.io/en/stable/configuring/#advanced-prompt-formatting project_name: type: str - help: Provide the project name (snake case, e.g. my_project) + help: Provide the project name (use kebab-case, e.g. my-project-name) + +# Computed variables for different case formats +sanitized_project_name: + type: str + default: "{{ project_name | trim }}" + when: false + +project_name_kebab_case: + type: str + default: "{{ sanitized_project_name }}" + when: false + +project_name_snake_case: + type: str + default: "{{ sanitized_project_name | replace('-', '_') }}" + when: false + +project_name_flat_case: + type: str + default: "{{ sanitized_project_name | replace('-', '') }}" + when: false + +project_name_title_case: + type: str + default: "{{ sanitized_project_name | replace('-', ' ') | title }}" + when: false description: type: str diff --git a/justfile b/justfile index eeed0f1..611f37f 100644 --- a/justfile +++ b/justfile @@ -1,34 +1,34 @@ PROJECT_NAME := "copier-python-project" TEST_ANSWERS_FILE := ".copier/.copier-answers." + PROJECT_NAME + ".yml" -copy output="test_folder": +copy output="test_catalog": uv run copier copy . {{ output }} \ --vcs-ref=HEAD -recopy output="test_folder": +recopy output="test_catalog": uv run copier recopy {{ output }} \ --vcs-ref=HEAD \ --answers-file {{ TEST_ANSWERS_FILE }} \ --skip-answered \ --overwrite -update output="test_folder": +update output="test_catalog": uv run copier recopy {{ output }} \ --vcs-ref=HEAD \ --answers-file {{ TEST_ANSWERS_FILE }} \ --overwrite -all_ff output="test_folder": +all_ff output="test_catalog": just recopy {{ output }} just --justfile {{ output }}/justfile all_ff test: - uv run pytest + uv run pytest tests ci_lint_full: uv run copier copy . tmp/test_catalog \ --vcs-ref=HEAD \ - --data project_name="test_project" \ + --data project_name="test-project" \ --data description="..." \ --data author_name="Test Author" \ --data author_email="test@test.com" \ diff --git a/skeleton/README.md.jinja b/skeleton/README.md.jinja index d27334e..d351202 100644 --- a/skeleton/README.md.jinja +++ b/skeleton/README.md.jinja @@ -1,16 +1,16 @@ -# {{ project_name }} +# {{ project_name_title_case }} {{ description }} {%- if docker %} 1. Build docker image: ``` - docker compose build {{ project_name }} + docker compose build {{ project_name_snake_case }} ``` 2. Run docker container: ``` - docker compose {{ project_name }} run bash + docker compose {{ project_name_snake_case }} run bash ``` or with just ``` diff --git a/skeleton/justfile.jinja b/skeleton/justfile.jinja index be76677..35811d5 100644 --- a/skeleton/justfile.jinja +++ b/skeleton/justfile.jinja @@ -1,11 +1,11 @@ set dotenv-load := true -PYTHONPATH := "{{ project_name }}" -SRC_PATH := "{{ project_name }}" +PYTHONPATH := "{{ project_name_snake_case }}" +SRC_PATH := "{{ project_name_snake_case }}" TEST_PATH := "tests" ANSWERS_FILE := ".copier/.copier-answers.copier-python-project.yml" {%- if docker %} -CONTAINER_NAME := "{{ project_name }}" +CONTAINER_NAME := "{{ project_name_snake_case }}" WORKDIR := "/code/" {%- endif %} diff --git a/skeleton/pyproject.toml.jinja b/skeleton/pyproject.toml.jinja index 9b7f916..9da9e87 100644 --- a/skeleton/pyproject.toml.jinja +++ b/skeleton/pyproject.toml.jinja @@ -1,5 +1,5 @@ [project] -name = "{{ project_name }}" +name = "{{ project_name_kebab_case }}" version = "0.1.0" description = "{{ description }}" authors = [{ name = "{{ author_name }}", email = "{{ author_email }}" }] @@ -38,7 +38,7 @@ exclude_lines = [ ] [tool.fawltydeps] -code = ["{{ project_name }}"] +code = ["{{ project_name_snake_case }}"] deps = ["pyproject.toml"] ignore_unused = [ # Dev dependencies. This list should contain ALL of them! @@ -49,7 +49,6 @@ ignore_unused = [ "flake8-pyproject", "isort", "mypy", - "poetry-dynamic-versioning", "pytest", "pytest-cov", ] @@ -64,6 +63,7 @@ max-line-length = 120 profile = "black" line_length = 120 order_by_type = false +known_first_party = ["{{ project_name_snake_case }}"] [tool.mypy] disallow_untyped_defs = true diff --git a/skeleton/{% if docker %}docker-compose.yml{% endif %}.jinja b/skeleton/{% if docker %}docker-compose.yml{% endif %}.jinja index 0817752..9610ec5 100644 --- a/skeleton/{% if docker %}docker-compose.yml{% endif %}.jinja +++ b/skeleton/{% if docker %}docker-compose.yml{% endif %}.jinja @@ -1,5 +1,5 @@ services: - {{ project_name }}: + {{ project_name_snake_case }}: build: context: . volumes: diff --git a/skeleton/{% if docker %}docker-entrypoint.sh{% endif %}.jinja b/skeleton/{% if docker %}docker-entrypoint.sh{% endif %}.jinja index 4b12655..5897078 100644 --- a/skeleton/{% if docker %}docker-entrypoint.sh{% endif %}.jinja +++ b/skeleton/{% if docker %}docker-entrypoint.sh{% endif %}.jinja @@ -1,7 +1,7 @@ #!/bin/bash set -e -export APP=${APP:-{{project_name}}} +export APP=${APP:-{{project_name_kebab_case}}} function log() { local date status message diff --git a/skeleton/{{ project_name_snake_case }}/__init__.py b/skeleton/{{ project_name_snake_case }}/__init__.py new file mode 100644 index 0000000..e69de29 From 453a58e00cf61e2cce146f15b85d33ea11f1733e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Kara=C5=9B?= <92339606+pepe5p@users.noreply.github.com> Date: Sat, 9 Aug 2025 15:43:24 +0200 Subject: [PATCH 2/2] Update skeleton/README.md.jinja Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- skeleton/README.md.jinja | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skeleton/README.md.jinja b/skeleton/README.md.jinja index d351202..ab5edd7 100644 --- a/skeleton/README.md.jinja +++ b/skeleton/README.md.jinja @@ -10,7 +10,7 @@ 2. Run docker container: ``` - docker compose {{ project_name_snake_case }} run bash + docker compose run {{ project_name_snake_case }} bash ``` or with just ```