instant-python 0.6.1__py3-none-any.whl → 0.7.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. instant_python/commands/init.py +4 -0
  2. instant_python/configuration/configuration_schema.py +2 -2
  3. instant_python/configuration/step/template_step.py +35 -36
  4. instant_python/formatter/__init__.py +0 -0
  5. instant_python/formatter/project_formatter.py +19 -0
  6. instant_python/templates/boilerplate/github/{test_lint.yml → lint.yml} +4 -10
  7. instant_python/templates/boilerplate/github/test.yml +30 -0
  8. instant_python/templates/boilerplate/pyproject.toml +24 -1
  9. instant_python/templates/boilerplate/scripts/makefile +16 -28
  10. instant_python/templates/project_structure/clean_architecture/main_structure.yml.j2 +1 -0
  11. instant_python/templates/project_structure/clean_architecture/source.yml.j2 +4 -1
  12. instant_python/templates/project_structure/domain_driven_design/main_structure.yml.j2 +1 -0
  13. instant_python/templates/project_structure/domain_driven_design/source.yml.j2 +5 -2
  14. instant_python/templates/project_structure/fastapi_domain.yml.j2 +7 -0
  15. instant_python/templates/project_structure/github_action.yml.j2 +4 -1
  16. instant_python/templates/project_structure/logger.yml.j2 +1 -1
  17. instant_python/templates/project_structure/standard_project/main_structure.yml.j2 +1 -0
  18. instant_python/templates/project_structure/standard_project/source.yml.j2 +1 -0
  19. {instant_python-0.6.1.dist-info → instant_python-0.7.0.dist-info}/METADATA +1 -1
  20. {instant_python-0.6.1.dist-info → instant_python-0.7.0.dist-info}/RECORD +23 -19
  21. {instant_python-0.6.1.dist-info → instant_python-0.7.0.dist-info}/WHEEL +0 -0
  22. {instant_python-0.6.1.dist-info → instant_python-0.7.0.dist-info}/entry_points.txt +0 -0
  23. {instant_python-0.6.1.dist-info → instant_python-0.7.0.dist-info}/licenses/LICENSE +0 -0
@@ -2,6 +2,7 @@ import typer
2
2
 
3
3
  from instant_python.configuration.parser.parser import Parser
4
4
  from instant_python.dependency_manager.dependency_manager_factory import DependencyManagerFactory
5
+ from instant_python.formatter.project_formatter import ProjectFormatter
5
6
  from instant_python.git.git_configurer import GitConfigurer
6
7
  from instant_python.project_creator.file_system import FileSystem
7
8
  from instant_python.render.custom_project_renderer import CustomProjectRenderer
@@ -44,6 +45,9 @@ def create_new_project(
44
45
  dependencies=configuration.dependencies,
45
46
  )
46
47
 
48
+ formatter = ProjectFormatter(project_directory=configuration.project_folder_name)
49
+ formatter.format()
50
+
47
51
  git_configurer = GitConfigurer(project_directory=configuration.project_folder_name)
48
52
  git_configurer.setup_repository(configuration.git)
49
53
  configuration.save_on_project_folder()
@@ -1,7 +1,7 @@
1
1
  import shutil
2
2
  from dataclasses import dataclass, field
3
3
  from pathlib import Path
4
- from typing import TypedDict, Self, Union
4
+ from typing import TypedDict, Union
5
5
 
6
6
  import yaml
7
7
 
@@ -33,7 +33,7 @@ class ConfigurationSchema:
33
33
  dependencies: list[DependencyConfiguration],
34
34
  template: TemplateConfiguration,
35
35
  git: GitConfiguration,
36
- ) -> Self:
36
+ ) -> "ConfigurationSchema":
37
37
  return cls(
38
38
  general=general,
39
39
  dependencies=dependencies,
@@ -14,50 +14,49 @@ from instant_python.shared.supported_templates import SupportedTemplates
14
14
  class TemplateStep(Step):
15
15
  def __init__(self, questionary: Questionary) -> None:
16
16
  super().__init__(questionary)
17
- self._questions = [
18
- MultipleChoiceQuestion(
19
- key="built_in_features",
20
- message="Select the built-in features you want to include",
21
- options=SupportedBuiltInFeatures.get_supported_built_in_features(),
17
+ self._built_in_features_question = MultipleChoiceQuestion(
18
+ key="built_in_features",
19
+ message="Select the built-in features you want to include",
20
+ options=SupportedBuiltInFeatures.get_supported_built_in_features(),
21
+ questionary=self._questionary,
22
+ )
23
+ self._template_question = ConditionalQuestion(
24
+ base_question=ChoiceQuestion(
25
+ key="name",
26
+ message="Select a template",
27
+ options=SupportedTemplates.get_supported_templates(),
22
28
  questionary=self._questionary,
23
29
  ),
24
- ConditionalQuestion(
25
- base_question=ChoiceQuestion(
26
- key="name",
27
- message="Select a template",
28
- options=SupportedTemplates.get_supported_templates(),
30
+ subquestions=ConditionalQuestion(
31
+ base_question=BooleanQuestion(
32
+ key="specify_bounded_context",
33
+ message="Do you want to specify your first bounded context?",
34
+ default=True,
29
35
  questionary=self._questionary,
30
36
  ),
31
- subquestions=ConditionalQuestion(
32
- base_question=BooleanQuestion(
33
- key="specify_bounded_context",
34
- message="Do you want to specify your first bounded context?",
35
- default=True,
37
+ subquestions=[
38
+ FreeTextQuestion(
39
+ key="bounded_context",
40
+ message="Enter the bounded context name",
41
+ default="backoffice",
36
42
  questionary=self._questionary,
37
43
  ),
38
- subquestions=[
39
- FreeTextQuestion(
40
- key="bounded_context",
41
- message="Enter the bounded context name",
42
- default="backoffice",
43
- questionary=self._questionary,
44
- ),
45
- FreeTextQuestion(
46
- key="aggregate_name",
47
- message="Enter the aggregate name",
48
- default="user",
49
- questionary=self._questionary,
50
- ),
51
- ],
52
- condition=True,
53
- ),
54
- condition=SupportedTemplates.DDD,
44
+ FreeTextQuestion(
45
+ key="aggregate_name",
46
+ message="Enter the aggregate name",
47
+ default="user",
48
+ questionary=self._questionary,
49
+ ),
50
+ ],
51
+ condition=True,
55
52
  ),
56
- ]
53
+ condition=SupportedTemplates.DDD,
54
+ )
57
55
 
58
56
  def run(self) -> dict[str, dict[str, Union[str, list[str]]]]:
59
- answers = {}
60
- for question in self._questions:
61
- answers.update(question.ask())
57
+ answers = self._template_question.ask()
58
+
59
+ if answers["name"] != SupportedTemplates.CUSTOM:
60
+ answers.update(self._built_in_features_question.ask())
62
61
 
63
62
  return {"template": answers}
File without changes
@@ -0,0 +1,19 @@
1
+ import subprocess
2
+
3
+
4
+ class ProjectFormatter:
5
+ def __init__(self, project_directory: str) -> None:
6
+ self._project_directory = project_directory
7
+
8
+ def format(self) -> None:
9
+ self._run_command(command="uvx ruff format")
10
+
11
+ def _run_command(self, command: str) -> None:
12
+ subprocess.run(
13
+ command,
14
+ shell=True,
15
+ check=True,
16
+ cwd=self._project_directory,
17
+ stdout=subprocess.DEVNULL,
18
+ stderr=subprocess.PIPE,
19
+ )
@@ -1,4 +1,4 @@
1
- name: Pass checks and tests
1
+ name: Run lint, format and type checks
2
2
 
3
3
  on:
4
4
  push:
@@ -13,24 +13,18 @@ jobs:
13
13
  lint:
14
14
  runs-on: ubuntu-latest
15
15
  steps:
16
- - uses: actions/checkout@v5
16
+ - uses: actions/checkout@v4
17
17
  - uses: ./.github/actions/python_setup
18
18
  - run: make check-lint
19
19
  format:
20
20
  runs-on: ubuntu-latest
21
21
  steps:
22
- - uses: actions/checkout@v5
22
+ - uses: actions/checkout@v4
23
23
  - uses: ./.github/actions/python_setup
24
24
  - run: make check-format
25
25
  typing:
26
26
  runs-on: ubuntu-latest
27
27
  steps:
28
- - uses: actions/checkout@v5
28
+ - uses: actions/checkout@v4
29
29
  - uses: ./.github/actions/python_setup
30
30
  - run: make check-typing
31
- test:
32
- runs-on: ubuntu-latest
33
- steps:
34
- - uses: actions/checkout@v5
35
- - uses: ./.github/actions/python_setup
36
- - run: make test
@@ -0,0 +1,30 @@
1
+ name: Run tests
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ unit:
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+ - uses: ./.github/actions/python_setup
18
+ - run: make unit
19
+ integration:
20
+ runs-on: ubuntu-latest
21
+ steps:
22
+ - uses: actions/checkout@v4
23
+ - uses: ./.github/actions/python_setup
24
+ - run: make integration
25
+ acceptance:
26
+ runs-on: ubuntu-latest
27
+ steps:
28
+ - uses: actions/checkout@v4
29
+ - uses: ./.github/actions/python_setup
30
+ - run: make acceptance
@@ -28,13 +28,36 @@ license = { file = "LICENSE" }
28
28
  distribution = false
29
29
  {% endif %}
30
30
 
31
- {% if "github_actions" in template.built_in_features %}
31
+ {% if ["github_actions", "makefile"] | is_in(template.built_in_features) or dependencies | has_dependency("pytest") and template.name != template_types.CUSTOM %}
32
32
  [dependency-groups]
33
+ {% if ["github_actions", "makefile"] | is_in(template.built_in_features) and dependencies | has_dependency("pytest") %}
33
34
  lint = [
34
35
  "mypy",
35
36
  "ruff",
36
37
  ]
37
38
  test = [
39
+ "faker",
38
40
  "pytest",
41
+ "pytest-asyncio",
39
42
  ]
43
+ {% elif ["github_actions", "makefile"] | is_in(template.built_in_features) %}
44
+ lint = [
45
+ "mypy",
46
+ "ruff",
47
+ ]
48
+ test = [
49
+ "faker",
50
+ "pytest",
51
+ "pytest-asyncio",
52
+ ]
53
+ {% elif dependencies | has_dependency("pytest") %}
54
+ test = [
55
+ "faker",
56
+ "pytest-asyncio",
57
+ ]
58
+ {% elif template.name != template_types.CUSTOM %}
59
+ test = [
60
+ "faker",
61
+ ]
62
+ {% endif %}
40
63
  {% endif %}
@@ -7,31 +7,23 @@ help: ## Show this help.
7
7
 
8
8
  .PHONY: test
9
9
  test: ## Run all test.
10
- @{{ general.dependency_manager }} run pytest -n 0 tests -ra
10
+ @{{ general.dependency_manager }} run pytest test -ra
11
11
 
12
12
  .PHONY: unit
13
- unit: ## Run unit test in changed files.
14
- @scripts/tests/unit.sh
13
+ unit: ## Run all unit test.
14
+ @{{ general.dependency_manager }} run pytest -m "unit" -ra
15
15
 
16
16
  .PHONY: integration
17
- integration: ## Run integration test in changed files.
18
- @scripts/tests/integration.sh
19
-
20
- .PHONY: all-unit
21
- all-unit: ## Run all unit test.
22
- @{{ general.dependency_manager }} run pytest -n auto -m "unit" -ra
23
-
24
- .PHONY: all-integration
25
- all-integration: ## Run all integration test.
17
+ integration: ## Run all integration test.
26
18
  @{{ general.dependency_manager }} run pytest -m "integration" -ra
27
19
 
28
- .PHONY: all-acceptance
29
- all-acceptance: ## Run all acceptance test.
20
+ .PHONY: acceptance
21
+ acceptance: ## Run all acceptance test.
30
22
  @{{ general.dependency_manager }} run pytest -m "acceptance" -ra
31
23
 
32
24
  .PHONY: coverage
33
25
  coverage: ## Run all test with coverage.
34
- @{{ general.dependency_manager }} run coverage run --branch -m pytest tests
26
+ @{{ general.dependency_manager }} run coverage run --branch -m pytest test
35
27
  @{{ general.dependency_manager }} run coverage html
36
28
  @$(BROWSER) htmlcov/index.html
37
29
 
@@ -71,33 +63,33 @@ check-typing: ## Run mypy type checking.
71
63
  .PHONY: check-lint
72
64
  check-lint: ## Run ruff linting check.
73
65
  {% if general.dependency_manager == "pdm" %}
74
- @pdm run ruff check src tests
66
+ @pdm run ruff check src test
75
67
  {% elif general.dependency_manager == "uv" %}
76
- @uvx ruff check src tests
68
+ @uvx ruff check src test
77
69
  {% endif %}
78
70
 
79
71
  .PHONY: lint
80
72
  lint: ## Apply ruff linting fix.
81
73
  {% if general.dependency_manager == "pdm" %}
82
- @pdm run ruff check --fix src tests
74
+ @pdm run ruff check --fix src test
83
75
  {% elif general.dependency_manager == "uv" %}
84
- @uvx ruff check --fix src tests
76
+ @uvx ruff check --fix src test
85
77
  {% endif %}
86
78
 
87
79
  .PHONY: check-format
88
80
  check-format: ## Run ruff format check.
89
81
  {% if general.dependency_manager == "pdm" %}
90
- @pdm run ruff format --check src tests
82
+ @pdm run ruff format --check src test
91
83
  {% elif general.dependency_manager == "uv" %}
92
- @uvx ruff format --check src tests
84
+ @uvx ruff format --check src test
93
85
  {% endif %}
94
86
 
95
87
  .PHONY: format
96
88
  format: ## Apply ruff format fix.
97
89
  {% if general.dependency_manager == "pdm" %}
98
- @pdm run ruff format src tests
90
+ @pdm run ruff format src test
99
91
  {% elif general.dependency_manager == "uv" %}
100
- @uvx ruff format src tests
92
+ @uvx ruff format src test
101
93
  {% endif %}
102
94
 
103
95
  .PHONY: pre-commit
@@ -108,11 +100,7 @@ pre-push: all-integration all-acceptance ## Run pre-push checks.
108
100
 
109
101
  .PHONY: watch
110
102
  watch: ## Run all test with every change.
111
- @{{ general.dependency_manager }} run ptw --runner "pytest -n auto tests -ra"
112
-
113
- .PHONY: insert-template
114
- insert-template: ## Insert a template class among the existing ones.
115
- @{{ general.dependency_manager }} run python -m scripts.insert_template
103
+ @{{ general.dependency_manager }} run ptw --runner "pytest -n auto test -ra"
116
104
 
117
105
  .PHONY: create-aggregate
118
106
  create-aggregate: ## Create a new aggregate inside contexts folder.
@@ -3,6 +3,7 @@
3
3
  {{ macros.include_and_indent("project_structure/clean_architecture/test.yml.j2", 0) }}
4
4
  {% if "github_actions" in template.built_in_features %}
5
5
  {{ macros.include_and_indent("project_structure/github_action.yml.j2", 0) }}
6
+ {{ macros.include_and_indent("project_structure/makefile.yml.j2", 0) }}
6
7
  {% endif %}
7
8
  {% if "makefile" in template.built_in_features %}
8
9
  {{ macros.include_and_indent("project_structure/makefile.yml.j2", 0) }}
@@ -13,7 +13,7 @@
13
13
  - name: domain
14
14
  type: directory
15
15
  python: True
16
- {% if ["value_objects", "event_bus"] | is_in(template.built_in_features) %}
16
+ {% if ["value_objects", "event_bus", "fastapi_application"] | is_in(template.built_in_features) %}
17
17
  children:
18
18
  {% if "value_objects" in template.built_in_features %}
19
19
  {{ macros.include_and_indent("project_structure/value_objects.yml.j2", 8) }}
@@ -21,6 +21,9 @@
21
21
  {% if "event_bus" in template.built_in_features %}
22
22
  {{ macros.include_and_indent("project_structure/event_bus_domain.yml.j2", 8) }}
23
23
  {% endif %}
24
+ {% if "fastapi_application" in template.built_in_features %}
25
+ {{ macros.include_and_indent("project_structure/fastapi_domain.yml.j2", 8) }}
26
+ {% endif %}
24
27
  {% endif %}
25
28
  - name: application
26
29
  type: directory
@@ -3,6 +3,7 @@
3
3
  {{ macros.include_and_indent("project_structure/domain_driven_design/test.yml.j2", 0) }}
4
4
  {% if "github_actions" in template.built_in_features %}
5
5
  {{ macros.include_and_indent("project_structure/github_action.yml.j2", 0) }}
6
+ {{ macros.include_and_indent("project_structure/makefile.yml.j2", 0) }}
6
7
  {% endif %}
7
8
  {% if "makefile" in template.built_in_features %}
8
9
  {{ macros.include_and_indent("project_structure/makefile.yml.j2", 0) }}
@@ -13,9 +13,9 @@
13
13
  - name: shared
14
14
  type: directory
15
15
  python: True
16
- {% if ["value_objects", "synchronous_sqlalchemy", "event_bus", "async_alembic"] | is_in(template.built_in_features) %}
16
+ {% if ["value_objects", "synchronous_sqlalchemy", "event_bus", "async_alembic", "fastapi_application"] | is_in(template.built_in_features) %}
17
17
  children:
18
- {% if ["value_objects", "event_bus"] | is_in(template.built_in_features) %}
18
+ {% if ["value_objects", "event_bus", "fastapi_application"] | is_in(template.built_in_features) %}
19
19
  - name: domain
20
20
  type: directory
21
21
  python: True
@@ -26,6 +26,9 @@
26
26
  {% if "event_bus" in template.built_in_features %}
27
27
  {{ macros.include_and_indent("project_structure/event_bus_domain.yml.j2", 12) }}
28
28
  {% endif %}
29
+ {% if "fastapi_application" in template.built_in_features %}
30
+ {{ macros.include_and_indent("project_structure/fastapi_domain.yml.j2", 12) }}
31
+ {% endif %}
29
32
  {% endif %}
30
33
  {% if ["synchronous_sqlalchemy", "event_bus", "logger", "async_sqlalchemy", "async_alembic", "fastapi_application"] | is_in(template.built_in_features) %}
31
34
  - name: infra
@@ -0,0 +1,7 @@
1
+ - name: exceptions
2
+ type: directory
3
+ python: True
4
+ children:
5
+ - name: exceptions/domain_error
6
+ type: boilerplate_file
7
+ extension: .py
@@ -13,6 +13,9 @@
13
13
  - name: workflows
14
14
  type: directory
15
15
  children:
16
- - name: github/test_lint
16
+ - name: github/test
17
+ type: boilerplate_file
18
+ extension: .yml
19
+ - name: github/lint
17
20
  type: boilerplate_file
18
21
  extension: .yml
@@ -1,4 +1,4 @@
1
- - name: log
1
+ - name: logger
2
2
  type: directory
3
3
  python: True
4
4
  children:
@@ -3,6 +3,7 @@
3
3
  {{ macros.include_and_indent("project_structure/standard_project/test.yml.j2", 0) }}
4
4
  {% if "github_actions" in template.built_in_features %}
5
5
  {{ macros.include_and_indent("project_structure/github_action.yml.j2", 0) }}
6
+ {{ macros.include_and_indent("project_structure/makefile.yml.j2", 0) }}
6
7
  {% endif %}
7
8
  {% if "makefile" in template.built_in_features %}
8
9
  {{ macros.include_and_indent("project_structure/makefile.yml.j2", 0) }}
@@ -26,5 +26,6 @@
26
26
  {% if "fastapi_application" in template.built_in_features %}
27
27
  {{ macros.include_and_indent("project_structure/fastapi_app.yml.j2", 4) }}
28
28
  {{ macros.include_and_indent("project_structure/fastapi_infra.yml.j2", 4) }}
29
+ {{ macros.include_and_indent("project_structure/fastapi_domain.yml.j2", 4) }}
29
30
  {% endif %}
30
31
  {% endif %}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: instant-python
3
- Version: 0.6.1
3
+ Version: 0.7.0
4
4
  Summary: Instant boilerplate generation for Python projects
5
5
  Project-URL: documentation, https://dimanu-py.github.io/instant-python/
6
6
  Project-URL: repository, https://github.com/dimanu-py/instant-python/
@@ -3,9 +3,9 @@ instant_python/cli.py,sha256=gjBeCHZzuG1OHw0gZ_2gBByZ9UB_yq6JPSVUz3pLo3c,804
3
3
  instant_python/instant_python_typer.py,sha256=jVk2VV8O4WHbyVGGn56D8Id-oo03KriwfmxgPTQOdy4,1230
4
4
  instant_python/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  instant_python/commands/config.py,sha256=m62zbX9A_dKaYdLmYaG89kZqRQmqtVQZyeHCyJOP9pU,1169
6
- instant_python/commands/init.py,sha256=6TEltKNKt-SDw8P7hj5GZTZao8Wuo9ksPiv0rzoz0fk,2174
6
+ instant_python/commands/init.py,sha256=jdRQufnBG-29abOOkYeVJ8FwrRarQkRSMqsYZ2CGFNw,2356
7
7
  instant_python/configuration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- instant_python/configuration/configuration_schema.py,sha256=2lfI3cPnQDXFFU9eCoEuxD1bE2Cu8UvjXaPP36e8ZZw,2669
8
+ instant_python/configuration/configuration_schema.py,sha256=KjZsLgY8IQynHaNIvhdBjFfvoVrtxMonkGuPijIrJTw,2680
9
9
  instant_python/configuration/question_wizard.py,sha256=mK_tWJ88g-wETNxlW6n9OXCmzZ32177u56TM42OdOtA,347
10
10
  instant_python/configuration/dependency/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  instant_python/configuration/dependency/dependency_configuration.py,sha256=uNkvPjZkPmS3d_FdpiDB-zq41ME_jkijhvTu1dAe3Tg,1098
@@ -37,7 +37,7 @@ instant_python/configuration/step/dependencies_step.py,sha256=61V142RE6OGHv9zx3P
37
37
  instant_python/configuration/step/general_step.py,sha256=Unel2DQo1f_dknx9I22jb9dtHfue5XzA5Md5ZWUUOn0,2701
38
38
  instant_python/configuration/step/git_step.py,sha256=-B0PXgXT8q0bTHndrX4YBlYqnyFuBG5m9AmE1XmH67A,1589
39
39
  instant_python/configuration/step/steps.py,sha256=65vt0yyQur39ZAkuv3ThEvI25UyhhtgW0uZdorKTMEk,527
40
- instant_python/configuration/step/template_step.py,sha256=tKZEzZx5pB5iEjRLd94KV8_Mbuivk0mZ4LRHFamI1aw,2852
40
+ instant_python/configuration/step/template_step.py,sha256=_x3X-mk2rrf4fN9H4O0r60e5gpPhwlFWLCsw9okIbRk,2789
41
41
  instant_python/configuration/template/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
42
  instant_python/configuration/template/bounded_context_not_applicable.py,sha256=YtfMAWu7X-zvq4gwSecIjVWR8BF4dDfV8XnEKlcvb50,453
43
43
  instant_python/configuration/template/bounded_context_not_especified.py,sha256=U0MoQxN5JMWlZQoksGwVpULFXVJLhOhhbc_XytBZJMY,430
@@ -51,6 +51,8 @@ instant_python/dependency_manager/dependency_manager_factory.py,sha256=WRP7LwPho
51
51
  instant_python/dependency_manager/pdm_dependency_manager.py,sha256=O5EjtA0QeBNU81nhFYfzzrqZnyB-hdodQ6F2R3HJqyM,2064
52
52
  instant_python/dependency_manager/unknown_dependency_manager_error.py,sha256=WYV3MGRgzHwJ5HwSOIPBowfIxadg_L6VdbNOKHRbNTE,396
53
53
  instant_python/dependency_manager/uv_dependency_manager.py,sha256=U9glowDvi0JA4MSoeGANKYeoeE5grTHSXdWj3Rw5GVw,2039
54
+ instant_python/formatter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
+ instant_python/formatter/project_formatter.py,sha256=EeAlb7_LA6ZaBLopzx3ZA1p3q-Fgi7gEi5sxzDkVWsU,506
54
56
  instant_python/git/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
57
  instant_python/git/git_configurer.py,sha256=Z6sQpvAk_BYB_eGzJuAomPY0nu2dPPxOsDh3dUPeuuA,1422
56
58
  instant_python/project_creator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -81,7 +83,7 @@ instant_python/templates/boilerplate/.python-version,sha256=7b_kfEdqh7QsWx4IDCSW
81
83
  instant_python/templates/boilerplate/LICENSE,sha256=wzw1JFV1qGbnRMfokpku4CO4ZKvtreFsyIksljC7hLI,47428
82
84
  instant_python/templates/boilerplate/README.md,sha256=qlaO6Tnd8k0A_ccRNVI8yt5Vn1dQP6AwxW_WH80P8Is,238
83
85
  instant_python/templates/boilerplate/mypy.ini,sha256=unPeeeN5XStcdwqobdxtHsPj-Ru1NWPyZ5WF4PbQqik,889
84
- instant_python/templates/boilerplate/pyproject.toml,sha256=8L7Uvglh8N1s0io4IuTlRel_1pau3qFXwiO_vtX3BT0,961
86
+ instant_python/templates/boilerplate/pyproject.toml,sha256=uta5rbctMyXOzyH7TBdDcN96elaJknoVGnpa19T_ZEw,1578
85
87
  instant_python/templates/boilerplate/pytest.ini,sha256=UKGay9Gune7ft1FAy1O4VyVmnuLunQW5YeZfcuOKTZg,249
86
88
  instant_python/templates/boilerplate/random_generator.py,sha256=WHyhk9xfRsziGH1PtVFSZavQGy5LzJkWLN8wwyKz3As,134
87
89
  instant_python/templates/boilerplate/event_bus/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -113,7 +115,8 @@ instant_python/templates/boilerplate/fastapi/http_response.py,sha256=xbxY3erNh8l
113
115
  instant_python/templates/boilerplate/fastapi/lifespan.py,sha256=zbsmwtC_9PWJnGlO__5yOqLdEBklnl6f_FUOumy80oE,444
114
116
  instant_python/templates/boilerplate/fastapi/status_code.py,sha256=bXHig0TFnfwGb_DmvQX3ovwWPWdI03mDmVb2Y-Oi7so,143
115
117
  instant_python/templates/boilerplate/github/action.yml,sha256=52HH17dcMu2NOBUbydPP7nOkV2DZxzu7gX4IwYwjYts,668
116
- instant_python/templates/boilerplate/github/test_lint.yml,sha256=sxIRLoJ0znyc4eIbcjnLB4O15yqMZ3RJeuf9pxQqKD8,739
118
+ instant_python/templates/boilerplate/github/lint.yml,sha256=liaEzb_S4NKXgOtnwenp1J-Y9l5UhJOj580bPghSxHI,603
119
+ instant_python/templates/boilerplate/github/test.yml,sha256=jlPPZQra5EQH05HHqov8fBZ_inBg4BP6lwNFn0-zvWY,580
117
120
  instant_python/templates/boilerplate/logger/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
118
121
  instant_python/templates/boilerplate/logger/json_formatter.py,sha256=8usKxcT3-dZ7CeRExOES7NVq13pXmJnGVZyw129CDJ0,383
119
122
  instant_python/templates/boilerplate/logger/logger.py,sha256=6UrnlWzSepJvKmK_39cXKEHDFB6Os5s5uV4c-cjYTjc,1210
@@ -137,7 +140,7 @@ instant_python/templates/boilerplate/scripts/create_aggregate.py,sha256=dgMCAtJE
137
140
  instant_python/templates/boilerplate/scripts/insert_template.py,sha256=nkzSXIIj-KdQ30B_4tjut0LKeZNPUyy419A7YU6hVCw,4276
138
141
  instant_python/templates/boilerplate/scripts/integration.sh,sha256=bQe0acRChPrdBqzeEIviZezfZxlt8CeibHj1QXjLyZE,972
139
142
  instant_python/templates/boilerplate/scripts/local_setup.sh,sha256=XfH8vmHOPYfob6TTgnLQZsudOZ8hoAilndS1fKXDPFQ,261
140
- instant_python/templates/boilerplate/scripts/makefile,sha256=i5bfFEFpCNNfUVtrFkJKkFVvdHe1SltHNEHdD68oE_g,3878
143
+ instant_python/templates/boilerplate/scripts/makefile,sha256=sXy4n44XyitaEAfYhpsmhcM-N97uv1Y9IzLn8bvhvyo,3474
141
144
  instant_python/templates/boilerplate/scripts/post-merge,sha256=s1yHZr5sAb-4aGya6xZivChBx6ZVYEZHQ-57Ds7P0w8,380
142
145
  instant_python/templates/boilerplate/scripts/pre-commit,sha256=t5DTgY4IyBcS4obd22-DKqUmmiGgBGW_jCckytdOG78,35
143
146
  instant_python/templates/boilerplate/scripts/pre-push,sha256=2UpPIkPTnwO8UusCAij18JSSzYArrYBqFEQWjaXG1Po,50
@@ -154,11 +157,12 @@ instant_python/templates/project_structure/async_sqlalchemy.yml.j2,sha256=XaOKwR
154
157
  instant_python/templates/project_structure/event_bus_domain.yml.j2,sha256=kqnY9EZaZ2O3HWaQb16jISpR287tBAKxyiq6IaPt1PA,769
155
158
  instant_python/templates/project_structure/event_bus_infra.yml.j2,sha256=pCKtjiIfi6VSBdM7n1QL7lQgM-lRqm2_7eOXYOstwaQ,971
156
159
  instant_python/templates/project_structure/fastapi_app.yml.j2,sha256=e3n1OXSea7LkOPlRCIbKwzyT6n-Y_YhSXwF1-TWX34Y,217
160
+ instant_python/templates/project_structure/fastapi_domain.yml.j2,sha256=21fFqN6Ncm_9pQ5eUH2mwZe73B8d3YGf7q4cSebBQfw,149
157
161
  instant_python/templates/project_structure/fastapi_infra.yml.j2,sha256=VJg6fLYL20iYugnE-Q4QpZg7TfM62zKdkuAxE_gWWmI,223
158
- instant_python/templates/project_structure/github_action.yml.j2,sha256=3QLShPuxi8TyUgUW52_41faqIaspNR5Ak12L8DZy1AU,431
162
+ instant_python/templates/project_structure/github_action.yml.j2,sha256=rMEddCYNUWE3kda2LhBu85FpxEWHZqQrOPBTm8mekkk,513
159
163
  instant_python/templates/project_structure/gitignore.yml.j2,sha256=Ex3A7rvCvuIqxTVdeHxM3DPyTl73AcrHyiceHOIzFuw,43
160
164
  instant_python/templates/project_structure/license.yml.j2,sha256=0h2OAyK4-HKWsM6Gllkh1wGRXmEl2mRJLlKgOPlyCY0,40
161
- instant_python/templates/project_structure/logger.yml.j2,sha256=RxAYOeHK7qhBR1uxXtdPvt12v7rOwaNTWfhXw8ogxUs,216
165
+ instant_python/templates/project_structure/logger.yml.j2,sha256=VRZHVXjFWJsGXgLh8m5YJWS9tuOApWPXnb48bvClRvQ,219
162
166
  instant_python/templates/project_structure/macros.j2,sha256=oAvJhQDJsk6yLm1r6P_kUdKAuLpOmuqmMauJdhKYv0U,173
163
167
  instant_python/templates/project_structure/makefile.yml.j2,sha256=OBxI5k7ybQZ0NQWOItPiWUgRJDGKbH-60ur_M3E1wWY,1066
164
168
  instant_python/templates/project_structure/mypy.yml.j2,sha256=Th3HkMdEu2xgORRhMV5QoqkilF90xfKb8JAEOXmEGUc,55
@@ -169,18 +173,18 @@ instant_python/templates/project_structure/python_version.yml.j2,sha256=zlkshfPr
169
173
  instant_python/templates/project_structure/readme.yml.j2,sha256=Km1zSVKfGwx7GHn0CMMAKQieCO089wKb8QoPVUnoDUU,56
170
174
  instant_python/templates/project_structure/synchronous_sqlalchemy.yml.j2,sha256=mC7WBchO0bzHcGkTw0k4woDstUvoQaJKlrCW82A96o8,467
171
175
  instant_python/templates/project_structure/value_objects.yml.j2,sha256=X5AyyZoRllCYdvRUaXSYlcZk_EQg2OyfdCS8pejjFpc,963
172
- instant_python/templates/project_structure/clean_architecture/main_structure.yml.j2,sha256=oKHKIQW6s4CnrPcQpwVXBmoZoC79XNbgKkXp8Uno1UQ,1323
173
- instant_python/templates/project_structure/clean_architecture/source.yml.j2,sha256=MT0HV_5-DhWt8vjry6z8FXnVHTjfsquVtw4QlU6uXXs,2307
176
+ instant_python/templates/project_structure/clean_architecture/main_structure.yml.j2,sha256=hh4bYTAmrOPWugWqDXX3qPrRJiTUG8iUNPKSo2RBwfQ,1395
177
+ instant_python/templates/project_structure/clean_architecture/source.yml.j2,sha256=EOlKRnuYigc49LqLFhCKlCrfrdW673doyGryWnQhHhU,2505
174
178
  instant_python/templates/project_structure/clean_architecture/test.yml.j2,sha256=q2Yqa4SXgEkg_xErGgESkObhRhPluA1fzKJgPMNIEOk,580
175
179
  instant_python/templates/project_structure/domain_driven_design/bounded_context.yml.j2,sha256=BTuT5fQBdw4o3Ev-iN8THAr2-bLlLG8mgLpbQOcL0x4,471
176
- instant_python/templates/project_structure/domain_driven_design/main_structure.yml.j2,sha256=pziz6HChS-nZ-kEwWFTo_7brULweuesNDedYsB49Mfg,1327
177
- instant_python/templates/project_structure/domain_driven_design/source.yml.j2,sha256=7gtu0CTJxGUqYY8-icHFFWc2TG_ykomS62dMH9DMuo4,2763
180
+ instant_python/templates/project_structure/domain_driven_design/main_structure.yml.j2,sha256=NxA5Nw84DvJvfnag6-9jssZbe416fHXBzq4u1WeiDEY,1399
181
+ instant_python/templates/project_structure/domain_driven_design/source.yml.j2,sha256=L5N-C5EAQI8Nn4Nx6zEgTeaDbxHEm-zLKGEoFIcsdqA,2997
178
182
  instant_python/templates/project_structure/domain_driven_design/test.yml.j2,sha256=sUVO0jWeDEoShMXIDSTBw-14vStjoHCcTm5DuuI9V2A,841
179
- instant_python/templates/project_structure/standard_project/main_structure.yml.j2,sha256=huaj1q7-gMPOHRqxLON5pI-KCB52QbeJJ7yEbtfYfeU,1309
180
- instant_python/templates/project_structure/standard_project/source.yml.j2,sha256=NKY6763zZ1xxJnYyOxzqS6K0nJQP49EOkWzZOWp137M,1666
183
+ instant_python/templates/project_structure/standard_project/main_structure.yml.j2,sha256=Gy11qNOtTDzGgIbhDPmAUkipmjwJPHa33-_WL_xlR3U,1381
184
+ instant_python/templates/project_structure/standard_project/source.yml.j2,sha256=8QdB1AY22BzHRCidNdEJ9a6PRzq9ZWRPKIpqyoD6tmE,1748
181
185
  instant_python/templates/project_structure/standard_project/test.yml.j2,sha256=NxzsDeBKYzNaR3t8BY2VOuyhzwlp3Pa49OQNDF78gas,381
182
- instant_python-0.6.1.dist-info/METADATA,sha256=aF3WjrC2xhPOEmZ81E8R78pXPQZ-C5nSGFzmG-5SmgQ,17574
183
- instant_python-0.6.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
184
- instant_python-0.6.1.dist-info/entry_points.txt,sha256=EdBTj3b3N9Pa4oNzPLPivE_AnMcQIFsmRC3RsSkoLLA,47
185
- instant_python-0.6.1.dist-info/licenses/LICENSE,sha256=kf7wA-1IsqXkzXjlsG95sdQJtsqUON_lNXombfPlklo,11353
186
- instant_python-0.6.1.dist-info/RECORD,,
186
+ instant_python-0.7.0.dist-info/METADATA,sha256=xe10FPc5bRWfdm6kwwcJhBZxTwq1Phlc2cmtt8g73ew,17574
187
+ instant_python-0.7.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
188
+ instant_python-0.7.0.dist-info/entry_points.txt,sha256=EdBTj3b3N9Pa4oNzPLPivE_AnMcQIFsmRC3RsSkoLLA,47
189
+ instant_python-0.7.0.dist-info/licenses/LICENSE,sha256=kf7wA-1IsqXkzXjlsG95sdQJtsqUON_lNXombfPlklo,11353
190
+ instant_python-0.7.0.dist-info/RECORD,,