instant-python 0.12.1__tar.gz → 0.13.0__tar.gz

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 (374) hide show
  1. {instant_python-0.12.1 → instant_python-0.13.0}/.github/workflows/ci.yml +0 -26
  2. {instant_python-0.12.1 → instant_python-0.13.0}/CHANGELOG.md +74 -0
  3. {instant_python-0.12.1 → instant_python-0.13.0}/PKG-INFO +1 -1
  4. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/domain/config_parser.py +2 -1
  5. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/domain/git_configuration.py +7 -1
  6. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/infra/parser/parser.py +16 -6
  7. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/dependency_manager/pdm_dependency_manager.py +10 -1
  8. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/dependency_manager/uv_dependency_manager.py +10 -1
  9. instant_python-0.13.0/instant_python/initialize/application/config_reader.py +14 -0
  10. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/initialize/delivery/cli.py +18 -12
  11. instant_python-0.13.0/instant_python/initialize/domain/configuration_repository.py +7 -0
  12. instant_python-0.13.0/instant_python/initialize/infra/configuration_repository.py +15 -0
  13. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/render/jinja_environment.py +8 -3
  14. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/shared/application_error.py +1 -4
  15. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/event_bus_domain.yml.j2 +1 -1
  16. {instant_python-0.12.1 → instant_python-0.13.0}/pyproject.toml +6 -1
  17. {instant_python-0.12.1 → instant_python-0.13.0}/test/config/domain/test_git_configuration.py +23 -4
  18. instant_python-0.13.0/test/initialize/application/__init__.py +0 -0
  19. instant_python-0.13.0/test/initialize/application/test_config_reader.py +29 -0
  20. instant_python-0.13.0/test/initialize/delivery/__init__.py +0 -0
  21. instant_python-0.13.0/test/initialize/delivery/approved_files/TestInitCli.test_initializes_project_with_general_section_combinations.approved.txt +24 -0
  22. instant_python-0.13.0/test/initialize/delivery/approved_files/TestInitCli.test_initializes_project_with_git_section_combinations.approved.txt +2 -0
  23. instant_python-0.13.0/test/initialize/delivery/approved_files/TestInitCli.test_initializes_project_with_template_section_combinations.approved.txt +48 -0
  24. instant_python-0.13.0/test/initialize/delivery/approved_files/TestInitCli.test_should_initializes_project_with_predefined_dependencies_and_different_managers.approved.txt +4 -0
  25. instant_python-0.13.0/test/initialize/delivery/ipy.yml +21 -0
  26. instant_python-0.13.0/test/initialize/delivery/test_init_cli.py +178 -0
  27. instant_python-0.13.0/test/initialize/infra/__init__.py +0 -0
  28. instant_python-0.13.0/test/initialize/infra/approved_files/TestConfigurationRepository.test_should_read_existing_config_file.approved.txt +33 -0
  29. instant_python-0.13.0/test/initialize/infra/resources/config.yml +23 -0
  30. instant_python-0.13.0/test/initialize/infra/test_configuration_repository.py +25 -0
  31. instant_python-0.13.0/test/project_creator/__init__.py +0 -0
  32. instant_python-0.13.0/test/project_creator/approvaltests_config.json +3 -0
  33. instant_python-0.13.0/test/project_creator/resources/boilerplate/fastapi/__init__.py +0 -0
  34. instant_python-0.13.0/test/project_creator/resources/boilerplate/logger/__init__.py +0 -0
  35. instant_python-0.13.0/test/render/__init__.py +0 -0
  36. instant_python-0.13.0/test/render/approvaltests_config.json +3 -0
  37. {instant_python-0.12.1 → instant_python-0.13.0}/uv.lock +1 -1
  38. {instant_python-0.12.1 → instant_python-0.13.0}/.github/FUNDING.yml +0 -0
  39. {instant_python-0.12.1 → instant_python-0.13.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  40. {instant_python-0.12.1 → instant_python-0.13.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  41. {instant_python-0.12.1 → instant_python-0.13.0}/.github/actions/python_setup/action.yml +0 -0
  42. {instant_python-0.12.1 → instant_python-0.13.0}/.github/pull_request_template.md +0 -0
  43. {instant_python-0.12.1 → instant_python-0.13.0}/.github/workflows/pages.yml +0 -0
  44. {instant_python-0.12.1 → instant_python-0.13.0}/.github/workflows/release.yml +0 -0
  45. {instant_python-0.12.1 → instant_python-0.13.0}/.gitignore +0 -0
  46. {instant_python-0.12.1 → instant_python-0.13.0}/.pre-commit-config.yaml +0 -0
  47. {instant_python-0.12.1 → instant_python-0.13.0}/.python-version +0 -0
  48. {instant_python-0.12.1 → instant_python-0.13.0}/CITATION.cff +0 -0
  49. {instant_python-0.12.1 → instant_python-0.13.0}/LICENSE +0 -0
  50. {instant_python-0.12.1 → instant_python-0.13.0}/README.md +0 -0
  51. {instant_python-0.12.1 → instant_python-0.13.0}/SECURITY.md +0 -0
  52. {instant_python-0.12.1 → instant_python-0.13.0}/codeql-config.yml +0 -0
  53. {instant_python-0.12.1 → instant_python-0.13.0}/docs/assets/favicon.svg +0 -0
  54. {instant_python-0.12.1 → instant_python-0.13.0}/docs/assets/logo.svg +0 -0
  55. {instant_python-0.12.1 → instant_python-0.13.0}/docs/changelog/.components/changelog_header.md.j2 +0 -0
  56. {instant_python-0.12.1 → instant_python-0.13.0}/docs/changelog/.components/changelog_init.md.j2 +0 -0
  57. {instant_python-0.12.1 → instant_python-0.13.0}/docs/changelog/.components/changelog_update.md.j2 +0 -0
  58. {instant_python-0.12.1 → instant_python-0.13.0}/docs/changelog/.components/changes.md.j2 +0 -0
  59. {instant_python-0.12.1 → instant_python-0.13.0}/docs/changelog/.components/first_release.md.j2 +0 -0
  60. {instant_python-0.12.1 → instant_python-0.13.0}/docs/changelog/.components/macros.md.j2 +0 -0
  61. {instant_python-0.12.1 → instant_python-0.13.0}/docs/changelog/.components/versioned_changes.md.j2 +0 -0
  62. {instant_python-0.12.1 → instant_python-0.13.0}/docs/changelog/.release_notes.md.j2 +0 -0
  63. {instant_python-0.12.1 → instant_python-0.13.0}/docs/changelog/CHANGELOG.md.j2 +0 -0
  64. {instant_python-0.12.1 → instant_python-0.13.0}/docs/downloads_macro.py +0 -0
  65. {instant_python-0.12.1 → instant_python-0.13.0}/docs/examples/configuration.md +0 -0
  66. {instant_python-0.12.1 → instant_python-0.13.0}/docs/examples/custom_template.md +0 -0
  67. {instant_python-0.12.1 → instant_python-0.13.0}/docs/guide/command_config.md +0 -0
  68. {instant_python-0.12.1 → instant_python-0.13.0}/docs/guide/command_init.md +0 -0
  69. {instant_python-0.12.1 → instant_python-0.13.0}/docs/home/contributing.md +0 -0
  70. {instant_python-0.12.1 → instant_python-0.13.0}/docs/home/getting_started.md +0 -0
  71. {instant_python-0.12.1 → instant_python-0.13.0}/docs/home/index.md +0 -0
  72. {instant_python-0.12.1 → instant_python-0.13.0}/docs/home/releases.md +0 -0
  73. {instant_python-0.12.1 → instant_python-0.13.0}/docs/home/security.md +0 -0
  74. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/__init__.py +0 -0
  75. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/cli/__init__.py +0 -0
  76. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/cli/cli.py +0 -0
  77. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/cli/instant_python_typer.py +0 -0
  78. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/__init__.py +0 -0
  79. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/application/__init__.py +0 -0
  80. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/application/config_generator.py +0 -0
  81. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/delivery/__init__.py +0 -0
  82. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/delivery/cli.py +0 -0
  83. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/domain/__init__.py +0 -0
  84. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/domain/config_writer.py +0 -0
  85. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/domain/configuration_schema.py +0 -0
  86. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/domain/dependency_configuration.py +0 -0
  87. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/domain/general_configuration.py +0 -0
  88. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/domain/question_wizard.py +0 -0
  89. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/domain/template_configuration.py +0 -0
  90. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/infra/__init__.py +0 -0
  91. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/infra/parser/__init__.py +0 -0
  92. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/infra/parser/errors.py +0 -0
  93. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/infra/question_wizard/__init__.py +0 -0
  94. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/infra/question_wizard/questionary_console_wizard.py +0 -0
  95. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/infra/question_wizard/step/__init__.py +0 -0
  96. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/infra/question_wizard/step/dependencies_step.py +0 -0
  97. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/infra/question_wizard/step/general_step.py +0 -0
  98. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/infra/question_wizard/step/git_step.py +0 -0
  99. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/infra/question_wizard/step/questionary.py +0 -0
  100. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/infra/question_wizard/step/steps.py +0 -0
  101. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/infra/question_wizard/step/template_step.py +0 -0
  102. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/infra/writer/__init__.py +0 -0
  103. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/config/infra/writer/yaml_config_writer.py +0 -0
  104. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/configuration/__init__.py +0 -0
  105. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/configuration/parser/__init__.py +0 -0
  106. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/configuration/parser/configuration_file_not_found.py +0 -0
  107. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/configuration/parser/parser.py +0 -0
  108. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/dependency_manager/__init__.py +0 -0
  109. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/dependency_manager/command_execution_error.py +0 -0
  110. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/dependency_manager/dependency_manager.py +0 -0
  111. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/dependency_manager/dependency_manager_factory.py +0 -0
  112. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/dependency_manager/unknown_dependency_manager_error.py +0 -0
  113. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/formatter/__init__.py +0 -0
  114. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/formatter/project_formatter.py +0 -0
  115. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/git/__init__.py +0 -0
  116. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/git/git_configurer.py +0 -0
  117. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/initialize/__init__.py +0 -0
  118. {instant_python-0.12.1/instant_python/initialize/delivery → instant_python-0.13.0/instant_python/initialize/application}/__init__.py +0 -0
  119. {instant_python-0.12.1/instant_python/project_creator → instant_python-0.13.0/instant_python/initialize/delivery}/__init__.py +0 -0
  120. {instant_python-0.12.1/instant_python/render → instant_python-0.13.0/instant_python/initialize/domain}/__init__.py +0 -0
  121. {instant_python-0.12.1/instant_python/shared → instant_python-0.13.0/instant_python/initialize/infra}/__init__.py +0 -0
  122. {instant_python-0.12.1/instant_python/templates/boilerplate/event_bus → instant_python-0.13.0/instant_python/project_creator}/__init__.py +0 -0
  123. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/project_creator/directory.py +0 -0
  124. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/project_creator/file.py +0 -0
  125. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/project_creator/file_has_not_been_created.py +0 -0
  126. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/project_creator/file_system.py +0 -0
  127. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/project_creator/node.py +0 -0
  128. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/project_creator/unknown_node_typer_error.py +0 -0
  129. {instant_python-0.12.1/instant_python/templates/boilerplate/exceptions → instant_python-0.13.0/instant_python/render}/__init__.py +0 -0
  130. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/render/custom_project_renderer.py +0 -0
  131. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/render/jinja_custom_filters.py +0 -0
  132. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/render/jinja_project_renderer.py +0 -0
  133. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/render/template_file_not_found_error.py +0 -0
  134. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/render/unknown_template_error.py +0 -0
  135. {instant_python-0.12.1/instant_python/templates/boilerplate/fastapi → instant_python-0.13.0/instant_python/shared}/__init__.py +0 -0
  136. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/shared/error_types.py +0 -0
  137. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/shared/supported_built_in_features.py +0 -0
  138. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/shared/supported_licenses.py +0 -0
  139. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/shared/supported_managers.py +0 -0
  140. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/shared/supported_python_versions.py +0 -0
  141. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/shared/supported_templates.py +0 -0
  142. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/.gitignore +0 -0
  143. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/.pre-commit-config.yml +0 -0
  144. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/.python-version +0 -0
  145. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/CITATION.cff +0 -0
  146. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/LICENSE +0 -0
  147. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/README.md +0 -0
  148. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/SECURITY.md +0 -0
  149. {instant_python-0.12.1/instant_python/templates/boilerplate/logger → instant_python-0.13.0/instant_python/templates/boilerplate/event_bus}/__init__.py +0 -0
  150. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/domain_event.py +0 -0
  151. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/domain_event_json_deserializer.py +0 -0
  152. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/domain_event_json_serializer.py +0 -0
  153. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/domain_event_subscriber.py +0 -0
  154. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/event_aggregate.py +0 -0
  155. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/event_bus.py +0 -0
  156. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/exchange_type.py +0 -0
  157. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/mock_event_bus.py +0 -0
  158. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_configurer.py +0 -0
  159. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_connection.py +0 -0
  160. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_consumer.py +0 -0
  161. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_event_bus.py +0 -0
  162. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_queue_formatter.py +0 -0
  163. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_settings.py +0 -0
  164. {instant_python-0.12.1/instant_python/templates/boilerplate/persistence → instant_python-0.13.0/instant_python/templates/boilerplate/exceptions}/__init__.py +0 -0
  165. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/exceptions/base_error.py +0 -0
  166. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/exceptions/domain_error.py +0 -0
  167. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/exceptions/domain_event_type_not_found_error.py +0 -0
  168. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/exceptions/incorrect_value_type_error.py +0 -0
  169. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/exceptions/invalid_id_format_error.py +0 -0
  170. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/exceptions/invalid_negative_value_error.py +0 -0
  171. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/exceptions/rabbit_mq_connection_not_established_error.py +0 -0
  172. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/exceptions/required_value_error.py +0 -0
  173. {instant_python-0.12.1/instant_python/templates/boilerplate/persistence/async → instant_python-0.13.0/instant_python/templates/boilerplate/fastapi}/__init__.py +0 -0
  174. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/fastapi/application.py +0 -0
  175. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/fastapi/error_handlers.py +0 -0
  176. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/fastapi/error_response.py +0 -0
  177. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/fastapi/fastapi_log_middleware.py +0 -0
  178. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/fastapi/lifespan.py +0 -0
  179. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/fastapi/success_response.py +0 -0
  180. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/github/action.yml +0 -0
  181. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/github/bug_report.yml +0 -0
  182. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/github/ci.yml +0 -0
  183. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/github/feature_request.yml +0 -0
  184. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/github/release.yml +0 -0
  185. {instant_python-0.12.1/instant_python/templates/boilerplate/persistence/synchronous → instant_python-0.13.0/instant_python/templates/boilerplate/logger}/__init__.py +0 -0
  186. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/logger/file_logger.py +0 -0
  187. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/logger/file_rotating_handler.py +0 -0
  188. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/logger/json_formatter.py +0 -0
  189. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/mypy.ini +0 -0
  190. {instant_python-0.12.1/instant_python/templates/boilerplate/value_object → instant_python-0.13.0/instant_python/templates/boilerplate/persistence}/__init__.py +0 -0
  191. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/persistence/alembic_migrator.py +0 -0
  192. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/persistence/async/README.md +0 -0
  193. {instant_python-0.12.1/test → instant_python-0.13.0/instant_python/templates/boilerplate/persistence/async}/__init__.py +0 -0
  194. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/persistence/async/alembic.ini +0 -0
  195. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/persistence/async/async_engine_fixture.py +0 -0
  196. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/persistence/async/env.py +0 -0
  197. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/persistence/async/models_metadata.py +0 -0
  198. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/persistence/async/postgres_settings.py +0 -0
  199. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/persistence/async/script.py.mako +0 -0
  200. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/persistence/async/sqlalchemy_repository.py +0 -0
  201. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/persistence/base.py +0 -0
  202. {instant_python-0.12.1/test/config → instant_python-0.13.0/instant_python/templates/boilerplate/persistence/synchronous}/__init__.py +0 -0
  203. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/persistence/synchronous/session_maker.py +0 -0
  204. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/persistence/synchronous/sqlalchemy_repository.py +0 -0
  205. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/pyproject.toml +0 -0
  206. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/pytest.ini +0 -0
  207. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/random_generator.py +0 -0
  208. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/scripts/add_dependency.py +0 -0
  209. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/scripts/create_aggregate.py +0 -0
  210. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/scripts/insert_template.py +0 -0
  211. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/scripts/integration.sh +0 -0
  212. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/scripts/local_setup.py +0 -0
  213. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/scripts/makefile +0 -0
  214. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/scripts/post-merge.py +0 -0
  215. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/scripts/pre-commit.py +0 -0
  216. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/scripts/pre-push.py +0 -0
  217. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/scripts/remove_dependency.py +0 -0
  218. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/scripts/unit.sh +0 -0
  219. {instant_python-0.12.1/test/config/application → instant_python-0.13.0/instant_python/templates/boilerplate/value_object}/__init__.py +0 -0
  220. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/value_object/aggregate.py +0 -0
  221. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/value_object/int_primitives_mother.py +0 -0
  222. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/value_object/int_value_object.py +0 -0
  223. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/value_object/string_primitives_mother.py +0 -0
  224. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/value_object/string_value_object.py +0 -0
  225. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/value_object/test_int_value_object.py +0 -0
  226. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/value_object/test_string_value_object.py +0 -0
  227. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/value_object/test_uuid_value_object.py +0 -0
  228. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/value_object/uuid.py +0 -0
  229. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/value_object/uuid_primitives_mother.py +0 -0
  230. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/value_object/validation.py +0 -0
  231. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/boilerplate/value_object/value_object.py +0 -0
  232. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/alembic_migrator.yml.j2 +0 -0
  233. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/async_alembic.yml.j2 +0 -0
  234. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/async_sqlalchemy.yml.j2 +0 -0
  235. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/citation.yml.j2 +0 -0
  236. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/clean_architecture/main_structure.yml.j2 +0 -0
  237. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/clean_architecture/source.yml.j2 +0 -0
  238. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/clean_architecture/test.yml.j2 +0 -0
  239. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/domain_driven_design/bounded_context.yml.j2 +0 -0
  240. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/domain_driven_design/main_structure.yml.j2 +0 -0
  241. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/domain_driven_design/source.yml.j2 +0 -0
  242. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/domain_driven_design/test.yml.j2 +0 -0
  243. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/event_bus_infra.yml.j2 +0 -0
  244. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/fastapi_app.yml.j2 +0 -0
  245. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/fastapi_domain.yml.j2 +0 -0
  246. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/fastapi_infra.yml.j2 +0 -0
  247. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/github_action.yml.j2 +0 -0
  248. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/github_issues_template.yml.j2 +0 -0
  249. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/gitignore.yml.j2 +0 -0
  250. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/license.yml.j2 +0 -0
  251. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/logger.yml.j2 +0 -0
  252. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/macros.j2 +0 -0
  253. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/makefile.yml.j2 +0 -0
  254. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/mypy.yml.j2 +0 -0
  255. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/precommit_hook.yml.j2 +0 -0
  256. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/pyproject.yml.j2 +0 -0
  257. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/pytest.yml.j2 +0 -0
  258. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/python_version.yml.j2 +0 -0
  259. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/readme.yml.j2 +0 -0
  260. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/security.yml.j2 +0 -0
  261. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/standard_project/main_structure.yml.j2 +0 -0
  262. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/standard_project/source.yml.j2 +0 -0
  263. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/standard_project/test.yml.j2 +0 -0
  264. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/synchronous_sqlalchemy.yml.j2 +0 -0
  265. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/test_value_objects.yml.j2 +0 -0
  266. {instant_python-0.12.1 → instant_python-0.13.0}/instant_python/templates/project_structure/value_objects.yml.j2 +0 -0
  267. {instant_python-0.12.1 → instant_python-0.13.0}/makefile +0 -0
  268. {instant_python-0.12.1 → instant_python-0.13.0}/mkdocs.yml +0 -0
  269. {instant_python-0.12.1 → instant_python-0.13.0}/mypy.ini +0 -0
  270. {instant_python-0.12.1 → instant_python-0.13.0}/scripts/add_dependency.py +0 -0
  271. {instant_python-0.12.1 → instant_python-0.13.0}/scripts/remove_dependency.py +0 -0
  272. {instant_python-0.12.1/test/config/domain → instant_python-0.13.0/test}/__init__.py +0 -0
  273. {instant_python-0.12.1/test/config/domain/mothers → instant_python-0.13.0/test/config}/__init__.py +0 -0
  274. {instant_python-0.12.1/test/config/infra → instant_python-0.13.0/test/config/application}/__init__.py +0 -0
  275. {instant_python-0.12.1 → instant_python-0.13.0}/test/config/application/test_config_generator.py +0 -0
  276. {instant_python-0.12.1/test/config/infra/parser → instant_python-0.13.0/test/config/domain}/__init__.py +0 -0
  277. {instant_python-0.12.1/test/config/infra/parser/resources → instant_python-0.13.0/test/config/domain/mothers}/__init__.py +0 -0
  278. {instant_python-0.12.1 → instant_python-0.13.0}/test/config/domain/mothers/configuration_schema_mother.py +0 -0
  279. {instant_python-0.12.1 → instant_python-0.13.0}/test/config/domain/mothers/dependency_configuration_mother.py +0 -0
  280. {instant_python-0.12.1 → instant_python-0.13.0}/test/config/domain/mothers/general_configuration_mother.py +0 -0
  281. {instant_python-0.12.1 → instant_python-0.13.0}/test/config/domain/mothers/git_configuration_mother.py +0 -0
  282. {instant_python-0.12.1 → instant_python-0.13.0}/test/config/domain/mothers/template_configuration_mother.py +0 -0
  283. {instant_python-0.12.1 → instant_python-0.13.0}/test/config/domain/test_dependency_configuration.py +0 -0
  284. {instant_python-0.12.1 → instant_python-0.13.0}/test/config/domain/test_general_configuration.py +0 -0
  285. {instant_python-0.12.1 → instant_python-0.13.0}/test/config/domain/test_template_configuration.py +0 -0
  286. {instant_python-0.12.1/test/config/infra/writer → instant_python-0.13.0/test/config/infra}/__init__.py +0 -0
  287. {instant_python-0.12.1/test/configuration → instant_python-0.13.0/test/config/infra/parser}/__init__.py +0 -0
  288. {instant_python-0.12.1 → instant_python-0.13.0}/test/config/infra/parser/approvaltests_config.json +0 -0
  289. {instant_python-0.12.1 → instant_python-0.13.0}/test/config/infra/parser/approved_files/TestParser.test_should_parse_valid_answers.approved.txt +0 -0
  290. {instant_python-0.12.1/test/configuration/parser → instant_python-0.13.0/test/config/infra/parser/resources}/__init__.py +0 -0
  291. {instant_python-0.12.1 → instant_python-0.13.0}/test/config/infra/parser/resources/missing_dependencies_fields.yml +0 -0
  292. {instant_python-0.12.1 → instant_python-0.13.0}/test/config/infra/parser/resources/missing_general_fields.yml +0 -0
  293. {instant_python-0.12.1 → instant_python-0.13.0}/test/config/infra/parser/resources/missing_git_fields.yml +0 -0
  294. {instant_python-0.12.1 → instant_python-0.13.0}/test/config/infra/parser/resources/missing_keys_answers.yml +0 -0
  295. {instant_python-0.12.1 → instant_python-0.13.0}/test/config/infra/parser/resources/missing_template_fields.yml +0 -0
  296. {instant_python-0.12.1 → instant_python-0.13.0}/test/config/infra/parser/resources/valid_answers.yml +0 -0
  297. {instant_python-0.12.1 → instant_python-0.13.0}/test/config/infra/parser/test_parser.py +0 -0
  298. {instant_python-0.12.1/test/configuration/parser/resources → instant_python-0.13.0/test/config/infra/writer}/__init__.py +0 -0
  299. {instant_python-0.12.1 → instant_python-0.13.0}/test/config/infra/writer/test_yaml_config_writer.py +0 -0
  300. {instant_python-0.12.1/test/dependency_manager → instant_python-0.13.0/test/configuration}/__init__.py +0 -0
  301. {instant_python-0.12.1/test/formatter → instant_python-0.13.0/test/configuration/parser}/__init__.py +0 -0
  302. {instant_python-0.12.1 → instant_python-0.13.0}/test/configuration/parser/approvaltests_config.json +0 -0
  303. {instant_python-0.12.1 → instant_python-0.13.0}/test/configuration/parser/approved_files/TestParser.test_should_parse_configuration.approved.txt +0 -0
  304. {instant_python-0.12.1/test/git → instant_python-0.13.0/test/configuration/parser/resources}/__init__.py +0 -0
  305. {instant_python-0.12.1 → instant_python-0.13.0}/test/configuration/parser/resources/config.yml +0 -0
  306. {instant_python-0.12.1 → instant_python-0.13.0}/test/configuration/parser/resources/empty_config.yml +0 -0
  307. {instant_python-0.12.1 → instant_python-0.13.0}/test/configuration/parser/resources/missing_dependencies_fields_config.yml +0 -0
  308. {instant_python-0.12.1 → instant_python-0.13.0}/test/configuration/parser/resources/missing_general_fields_config.yml +0 -0
  309. {instant_python-0.12.1 → instant_python-0.13.0}/test/configuration/parser/resources/missing_git_fields_config.yml +0 -0
  310. {instant_python-0.12.1 → instant_python-0.13.0}/test/configuration/parser/resources/missing_keys_config.yml +0 -0
  311. {instant_python-0.12.1 → instant_python-0.13.0}/test/configuration/parser/resources/missing_template_fields_config.yml +0 -0
  312. {instant_python-0.12.1 → instant_python-0.13.0}/test/configuration/parser/test_parser.py +0 -0
  313. {instant_python-0.12.1/test/project_creator → instant_python-0.13.0/test/dependency_manager}/__init__.py +0 -0
  314. {instant_python-0.12.1 → instant_python-0.13.0}/test/dependency_manager/mock_pdm_dependency_manager.py +0 -0
  315. {instant_python-0.12.1 → instant_python-0.13.0}/test/dependency_manager/mock_uv_dependency_manager.py +0 -0
  316. {instant_python-0.12.1 → instant_python-0.13.0}/test/dependency_manager/test_pdm_dependency_manager.py +0 -0
  317. {instant_python-0.12.1 → instant_python-0.13.0}/test/dependency_manager/test_uv_dependency_manager.py +0 -0
  318. {instant_python-0.12.1/test/project_creator/resources/boilerplate/fastapi → instant_python-0.13.0/test/formatter}/__init__.py +0 -0
  319. {instant_python-0.12.1 → instant_python-0.13.0}/test/formatter/mock_project_formatter.py +0 -0
  320. {instant_python-0.12.1 → instant_python-0.13.0}/test/formatter/test_project_formatter.py +0 -0
  321. {instant_python-0.12.1/test/project_creator/resources/boilerplate/logger → instant_python-0.13.0/test/git}/__init__.py +0 -0
  322. {instant_python-0.12.1 → instant_python-0.13.0}/test/git/mock_git_configurer.py +0 -0
  323. {instant_python-0.12.1 → instant_python-0.13.0}/test/git/test_git_configurer.py +0 -0
  324. {instant_python-0.12.1/test/render → instant_python-0.13.0/test/initialize}/__init__.py +0 -0
  325. {instant_python-0.12.1/test/project_creator → instant_python-0.13.0/test/initialize/delivery}/approvaltests_config.json +0 -0
  326. {instant_python-0.12.1/test/render → instant_python-0.13.0/test/initialize/infra}/approvaltests_config.json +0 -0
  327. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/approved_files/TestFileSystem.test_should_create_file_system_in_disk.rendered_custom_project_structure.json.approved.txt +0 -0
  328. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/approved_files/TestFileSystem.test_should_create_file_system_in_disk.rendered_project_structure.json.approved.txt +0 -0
  329. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/approved_files/TestFileSystem.test_should_create_file_system_in_disk.rendered_project_structure_fastapi_with_logger.json.approved.txt +0 -0
  330. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/approved_files/TestFileSystem.test_should_create_file_system_in_disk.rendered_project_structure_fastapi_with_migrator.json.approved.txt +0 -0
  331. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/approved_files/TestFileSystem.test_should_create_file_system_in_disk.rendered_project_structure_only_with_fastapi.json.approved.txt +0 -0
  332. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/approved_files/TestFileSystem.test_should_create_folders_and_files.approved.txt +0 -0
  333. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/approved_files/TestFileSystem.test_should_generate_file_system_tree.approved.txt +0 -0
  334. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/directory_mother.py +0 -0
  335. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/resources/boilerplate/exceptions/domain_error.py +0 -0
  336. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/resources/boilerplate/exceptions/domain_error_simple.py +0 -0
  337. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/resources/boilerplate/fastapi/application.py +0 -0
  338. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/resources/boilerplate/fastapi/http_response.py +0 -0
  339. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/resources/boilerplate/fastapi/lifespan.py +0 -0
  340. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/resources/boilerplate/logger/logger.py +0 -0
  341. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/resources/boilerplate/persistence/alembic_migrator.py +0 -0
  342. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/resources/clean_architecture/main_structure.yml.j2 +0 -0
  343. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/resources/config.yml +0 -0
  344. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/resources/config_fastapi_with_logger.yml +0 -0
  345. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/resources/config_fastapi_with_migrator.yml +0 -0
  346. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/resources/config_with_only_fastapi.yml +0 -0
  347. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/resources/rendered_custom_project_structure.json +0 -0
  348. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/resources/rendered_project_structure.json +0 -0
  349. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/resources/rendered_project_structure_fastapi_with_logger.json +0 -0
  350. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/resources/rendered_project_structure_fastapi_with_migrator.json +0 -0
  351. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/resources/rendered_project_structure_only_with_fastapi.json +0 -0
  352. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/test_directory.py +0 -0
  353. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/test_file.py +0 -0
  354. {instant_python-0.12.1 → instant_python-0.13.0}/test/project_creator/test_file_system.py +0 -0
  355. {instant_python-0.12.1 → instant_python-0.13.0}/test/random_generator.py +0 -0
  356. {instant_python-0.12.1 → instant_python-0.13.0}/test/render/approved_files/TestCustomProjectRenderer.test_should_render_custom_template.approved.txt +0 -0
  357. {instant_python-0.12.1 → instant_python-0.13.0}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.clean_architecture_config.yml.approved.txt +0 -0
  358. {instant_python-0.12.1 → instant_python-0.13.0}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.domain_driven_design_config.yml.approved.txt +0 -0
  359. {instant_python-0.12.1 → instant_python-0.13.0}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.received.txt +0 -0
  360. {instant_python-0.12.1 → instant_python-0.13.0}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.standard_project_with_dependency_config.yml.approved.txt +0 -0
  361. {instant_python-0.12.1 → instant_python-0.13.0}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.standard_project_with_git_config.yml.approved.txt +0 -0
  362. {instant_python-0.12.1 → instant_python-0.13.0}/test/render/resources/clean_architecture/main_structure.yml.j2 +0 -0
  363. {instant_python-0.12.1 → instant_python-0.13.0}/test/render/resources/clean_architecture_config.yml +0 -0
  364. {instant_python-0.12.1 → instant_python-0.13.0}/test/render/resources/custom_template.yml +0 -0
  365. {instant_python-0.12.1 → instant_python-0.13.0}/test/render/resources/domain_driven_design/main_structure.yml.j2 +0 -0
  366. {instant_python-0.12.1 → instant_python-0.13.0}/test/render/resources/domain_driven_design_config.yml +0 -0
  367. {instant_python-0.12.1 → instant_python-0.13.0}/test/render/resources/standard_project/main_structure.yml.j2 +0 -0
  368. {instant_python-0.12.1 → instant_python-0.13.0}/test/render/resources/standard_project_with_dependency_config.yml +0 -0
  369. {instant_python-0.12.1 → instant_python-0.13.0}/test/render/resources/standard_project_with_git_config.yml +0 -0
  370. {instant_python-0.12.1 → instant_python-0.13.0}/test/render/resources/test_template.j2 +0 -0
  371. {instant_python-0.12.1 → instant_python-0.13.0}/test/render/test_custom_project_renderer.py +0 -0
  372. {instant_python-0.12.1 → instant_python-0.13.0}/test/render/test_jinja_environment.py +0 -0
  373. {instant_python-0.12.1 → instant_python-0.13.0}/test/render/test_jinja_project_renderer.py +0 -0
  374. {instant_python-0.12.1 → instant_python-0.13.0}/tox.ini +0 -0
@@ -172,32 +172,6 @@ jobs:
172
172
  token: ${{ secrets.CODECOV_TOKEN }}
173
173
  slug: dimanu-py/instant-python
174
174
 
175
- rollback:
176
- name: rollback
177
- runs-on: ubuntu-latest
178
- needs: [ test ]
179
- if: ${{ always() && needs.test.result == 'failure' }}
180
- steps:
181
- - name: 🛡️ Harden runner
182
- uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
183
- with:
184
- egress-policy: audit
185
-
186
- - name: 📥 Checkout the repository
187
- uses: actions/checkout@v4
188
- with:
189
- fetch-depth: 0
190
- persist-credentials: false
191
-
192
- - name: ⏪️ Reset to previous commit
193
- run: |
194
- git config user.name ${{ vars.GIT_COMMITTER_NAME }}
195
- git config user.email ${{ vars.GIT_COMMITTER_EMAIL }}
196
- git reset --hard ${{ github.event.before }}
197
- git push --force-with-lease origin main
198
- env:
199
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
200
-
201
175
  tox-test:
202
176
  name: tox
203
177
  runs-on: ubuntu-latest
@@ -2,6 +2,80 @@
2
2
 
3
3
  <!-- version list -->
4
4
 
5
+ ## v0.13.0 (2025-10-26)
6
+
7
+ ### ✨ Features
8
+
9
+ - **config**: Raise error when git repo is set to be initialized but username or email is either not
10
+ passed or an empty string
11
+ ([`2e9f852`](https://github.com/dimanu-py/instant-python/commit/2e9f85287b3beab29bfd2745a830d6972939938f))
12
+
13
+ - **dependency-manager**: Inform the user that the selected dependency manager is already installed
14
+ ([`71ac1f7`](https://github.com/dimanu-py/instant-python/commit/71ac1f7c7da63ce55d27aacb9c1db03c34963de4))
15
+
16
+ - **config**: Allow custom configuration path for loading configurations
17
+ ([`b7bfc97`](https://github.com/dimanu-py/instant-python/commit/b7bfc97fa8d7ada19d39c2c04a491e625ab83366))
18
+
19
+ - **config**: Add 'custom_config_path' parameter to Parser port to be able to generate
20
+ configurations with custom paths to the config file
21
+ ([`350dbeb`](https://github.com/dimanu-py/instant-python/commit/350dbebab016dda71f42bef4d389e48e0ca2b197))
22
+
23
+ - **initialize**: Handle FileNotFoundError in read_from_file method
24
+ ([`00fb79f`](https://github.com/dimanu-py/instant-python/commit/00fb79f5ec282525433b5d0e6abb4880cac23b33))
25
+
26
+ - **initialize**: Implement read_from_file method to load YAML configuration
27
+ ([`5630929`](https://github.com/dimanu-py/instant-python/commit/5630929f3a5615e0f93d6d688e01d07cc31bafbd))
28
+
29
+ - **initialize**: Convert ConfigurationRepository into an interface and define the signature of
30
+ 'read_from_file' method
31
+ ([`b8c768f`](https://github.com/dimanu-py/instant-python/commit/b8c768fb958b96f9fa2749cf9668c02951d0426c))
32
+
33
+ - **initialize**: Implement execute method to return parsed configuration schema from config file
34
+ ([`a009371`](https://github.com/dimanu-py/instant-python/commit/a00937100e8cef46036dce1dc16db18f20602a03))
35
+
36
+ ### 🪲 Bug Fixes
37
+
38
+ - **dependency-manager**: Use dynamic command for version check in dependency managers
39
+ ([`46c9726`](https://github.com/dimanu-py/instant-python/commit/46c972601cf1ad217d6a0aca845fe0410d8cc176))
40
+
41
+ - **config**: Configure parser mock in config reader unit test to be called with the config file
42
+ path
43
+ ([`71655ea`](https://github.com/dimanu-py/instant-python/commit/71655ea654392978c339314482a5e94a51fbf888))
44
+
45
+ - **templates**: Correct error exception boilerplate file to base_error
46
+ ([`8dda0d7`](https://github.com/dimanu-py/instant-python/commit/8dda0d7ae296c42d9eed496920785e6f5b608779))
47
+
48
+ - **dependency-manager**: Install uv manager only if is not installed
49
+ ([`e2a9ad5`](https://github.com/dimanu-py/instant-python/commit/e2a9ad5fdede2da1bb94e2bf7c75c74f04be9a23))
50
+
51
+ - **dependency-manager**: Install pdm manager only if is not installed
52
+ ([`f4eb3ff`](https://github.com/dimanu-py/instant-python/commit/f4eb3fffbfe5c067f1997ddb7eb70dcddde43de4))
53
+
54
+ - **initialize**: Pass config file path to parser for accurate parsing
55
+ ([`de58185`](https://github.com/dimanu-py/instant-python/commit/de58185ab722863a92627adf6b065c796e1860d5))
56
+
57
+ ### ⚙️ Build System
58
+
59
+ - Add pytest marks to be able to discriminate which tests are run
60
+ ([`33e8e3d`](https://github.com/dimanu-py/instant-python/commit/33e8e3df683483a3745583cc03cd9a877c33f937))
61
+
62
+ ### ♻️ Refactoring
63
+
64
+ - **render**: Encapsulate filter addition in _add_filter method
65
+ ([`caf805b`](https://github.com/dimanu-py/instant-python/commit/caf805b1f9c38782e011d237cc131798c6c9b565))
66
+
67
+ - **initialize**: Use config reader in init cli application
68
+ ([`20f8178`](https://github.com/dimanu-py/instant-python/commit/20f8178f398b5db6b8cb7f48f12fc1a4143fe1b8))
69
+
70
+ - **initialize**: Rename read_from_file method to read to not expose implementation details on the
71
+ interface
72
+ ([`2aa94f4`](https://github.com/dimanu-py/instant-python/commit/2aa94f44835122421eaa8af3303c76addf30b1b0))
73
+
74
+ - **shared**: Modify ApplicationError to not be abstract class so it can be instantiated as a
75
+ general app error
76
+ ([`da086de`](https://github.com/dimanu-py/instant-python/commit/da086def1d643fed11b3ee7005435b6d45bea40c))
77
+
78
+
5
79
  ## v0.12.1 (2025-10-23)
6
80
 
7
81
  ### 🪲 Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: instant-python
3
- Version: 0.12.1
3
+ Version: 0.13.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/
@@ -1,9 +1,10 @@
1
1
  from abc import ABC, abstractmethod
2
+ from typing import Union
2
3
 
3
4
  from instant_python.config.domain.configuration_schema import ConfigurationSchema
4
5
 
5
6
 
6
7
  class ConfigParser(ABC):
7
8
  @abstractmethod
8
- def parse(self, content: dict[str, dict]) -> ConfigurationSchema:
9
+ def parse(self, content: dict[str, dict], custom_config_path: Union[str, None] = None) -> ConfigurationSchema:
9
10
  raise NotImplementedError
@@ -15,9 +15,15 @@ class GitConfiguration:
15
15
  self._ensure_username_and_email_are_set_if_initializing()
16
16
 
17
17
  def _ensure_username_and_email_are_set_if_initializing(self) -> None:
18
- if self.initialize and (self.username is None or self.email is None):
18
+ if self.initialize and (self._username_is_not_specified() or self._email_is_not_specified()):
19
19
  raise GitUserOrEmailNotPresent()
20
20
 
21
+ def _email_is_not_specified(self) -> bool:
22
+ return self.email is None or self.email == ""
23
+
24
+ def _username_is_not_specified(self) -> bool:
25
+ return self.username is None or self.username == ""
26
+
21
27
  def to_primitives(self) -> dict[str, str | bool]:
22
28
  return asdict(self)
23
29
 
@@ -20,18 +20,28 @@ class Parser(ConfigParser):
20
20
  _GIT = "git"
21
21
  _REQUIRED_CONFIG_KEYS = [_GENERAL, _DEPENDENCIES, _TEMPLATE, _GIT]
22
22
 
23
- def parse(self, content: dict[str, dict]) -> ConfigurationSchema:
23
+ def parse(self, content: dict[str, dict], custom_config_path: Union[str, None] = None) -> ConfigurationSchema:
24
24
  self._ensure_configuration_is_not_empty(content)
25
25
  self._ensure_all_required_sections_are_present(content)
26
26
  general_section = self._parse_general_section(content[self._GENERAL])
27
27
  dependencies_section = self._parse_dependencies_section(content[self._DEPENDENCIES])
28
28
  template_section = self._parse_template_section(content[self._TEMPLATE])
29
29
  git_section = self._parse_git_section(content[self._GIT])
30
- return ConfigurationSchema(
31
- general=general_section,
32
- dependencies=dependencies_section,
33
- template=template_section,
34
- git=git_section,
30
+ return (
31
+ ConfigurationSchema(
32
+ general=general_section,
33
+ dependencies=dependencies_section,
34
+ template=template_section,
35
+ git=git_section,
36
+ )
37
+ if not custom_config_path
38
+ else ConfigurationSchema.from_file(
39
+ config_file_path=custom_config_path,
40
+ general=general_section,
41
+ dependencies=dependencies_section,
42
+ template=template_section,
43
+ git=git_section,
44
+ )
35
45
  )
36
46
 
37
47
  def _parse_general_section(self, fields: dict[str, str]) -> GeneralConfiguration:
@@ -13,12 +13,21 @@ class PdmDependencyManager(DependencyManager):
13
13
 
14
14
  def setup_environment(self, python_version: str, dependencies: list[DependencyConfiguration]) -> None:
15
15
  try:
16
- self._install()
16
+ if self._pdm_is_not_installed():
17
+ self._install()
17
18
  self._install_python(python_version)
18
19
  self._install_dependencies(dependencies)
19
20
  except subprocess.CalledProcessError as error:
20
21
  raise CommandExecutionError(exit_code=error.returncode, stderr_output=error.stderr)
21
22
 
23
+ def _pdm_is_not_installed(self) -> bool:
24
+ try:
25
+ self._run_command(f"{self._pdm} --version")
26
+ print(">>> pdm is already installed, skipping installation")
27
+ return False
28
+ except subprocess.CalledProcessError:
29
+ return True
30
+
22
31
  def _install(self) -> None:
23
32
  print(">>> Installing pdm...")
24
33
  self._run_command(command=self._get_installation_command_based_on_os())
@@ -13,7 +13,8 @@ class UvDependencyManager(DependencyManager):
13
13
 
14
14
  def setup_environment(self, python_version: str, dependencies: list[DependencyConfiguration]) -> None:
15
15
  try:
16
- self._install()
16
+ if self._uv_is_not_installed():
17
+ self._install()
17
18
  self._install_python(python_version)
18
19
  self._install_dependencies(dependencies)
19
20
  except subprocess.CalledProcessError as error:
@@ -66,3 +67,11 @@ class UvDependencyManager(DependencyManager):
66
67
 
67
68
  def _create_virtual_environment(self) -> None:
68
69
  self._run_command(f"{self._uv} sync")
70
+
71
+ def _uv_is_not_installed(self) -> bool:
72
+ try:
73
+ self._run_command(f"{self._uv} --version")
74
+ print(">>> uv is already installed, skipping installation")
75
+ return False
76
+ except subprocess.CalledProcessError:
77
+ return True
@@ -0,0 +1,14 @@
1
+ from instant_python.config.domain.config_parser import ConfigParser
2
+ from instant_python.config.domain.configuration_schema import ConfigurationSchema
3
+ from instant_python.initialize.domain.configuration_repository import ConfigurationRepository
4
+
5
+
6
+ class ConfigReader:
7
+ def __init__(self, repository: ConfigurationRepository, parser: ConfigParser) -> None:
8
+ self._repository = repository
9
+ self._parser = parser
10
+
11
+ def execute(self, config_file_path: str) -> ConfigurationSchema:
12
+ raw_config = self._repository.read(config_file_path)
13
+ configuration = self._parser.parse(raw_config, config_file_path)
14
+ return configuration
@@ -1,9 +1,11 @@
1
1
  import typer
2
2
 
3
- from instant_python.configuration.parser.parser import Parser
3
+ from instant_python.config.infra.parser.parser import Parser
4
4
  from instant_python.dependency_manager.dependency_manager_factory import DependencyManagerFactory
5
5
  from instant_python.formatter.project_formatter import ProjectFormatter
6
6
  from instant_python.git.git_configurer import GitConfigurer
7
+ from instant_python.initialize.application.config_reader import ConfigReader
8
+ from instant_python.initialize.infra.configuration_repository import YamlConfigurationRepository
7
9
  from instant_python.project_creator.file_system import FileSystem
8
10
  from instant_python.render.custom_project_renderer import CustomProjectRenderer
9
11
  from instant_python.render.jinja_environment import JinjaEnvironment
@@ -17,7 +19,11 @@ def create_new_project(
17
19
  config_file: str = typer.Option("ipy.yml", "--config", "-c", help="Path to yml configuration file"),
18
20
  template: str | None = typer.Option(None, "--template", "-t", help="Path to custom template file"),
19
21
  ) -> None:
20
- configuration = Parser.parse_from_file(config_file_path=config_file)
22
+ config_reader = ConfigReader(
23
+ repository=YamlConfigurationRepository(),
24
+ parser=Parser(),
25
+ )
26
+ config = config_reader.execute(config_file_path=config_file)
21
27
  environment = JinjaEnvironment(package_name="instant_python", template_directory="templates")
22
28
 
23
29
  if template:
@@ -26,31 +32,31 @@ def create_new_project(
26
32
  else:
27
33
  project_renderer = JinjaProjectRenderer(jinja_environment=environment)
28
34
  project_structure = project_renderer.render_project_structure(
29
- context_config=configuration,
35
+ context_config=config,
30
36
  template_base_dir="project_structure",
31
37
  )
32
38
 
33
39
  file_system = FileSystem(project_structure=project_structure)
34
40
  file_system.write_on_disk(
35
41
  file_renderer=environment,
36
- context=configuration,
42
+ context=config,
37
43
  )
38
44
 
39
45
  dependency_manager = DependencyManagerFactory.create(
40
- dependency_manager=configuration.dependency_manager,
41
- project_directory=configuration.project_folder_name,
46
+ dependency_manager=config.dependency_manager,
47
+ project_directory=config.project_folder_name,
42
48
  )
43
49
  dependency_manager.setup_environment(
44
- python_version=configuration.python_version,
45
- dependencies=configuration.dependencies,
50
+ python_version=config.python_version,
51
+ dependencies=config.dependencies,
46
52
  )
47
53
 
48
- formatter = ProjectFormatter(project_directory=configuration.project_folder_name)
54
+ formatter = ProjectFormatter(project_directory=config.project_folder_name)
49
55
  formatter.format()
50
56
 
51
- configuration.save_on_project_folder()
52
- git_configurer = GitConfigurer(project_directory=configuration.project_folder_name)
53
- git_configurer.setup_repository(configuration.git)
57
+ config.save_on_project_folder()
58
+ git_configurer = GitConfigurer(project_directory=config.project_folder_name)
59
+ git_configurer.setup_repository(config.git)
54
60
 
55
61
 
56
62
  if __name__ == "__main__":
@@ -0,0 +1,7 @@
1
+ from abc import ABC, abstractmethod
2
+
3
+
4
+ class ConfigurationRepository(ABC):
5
+ @abstractmethod
6
+ def read(self, path: str) -> dict:
7
+ raise NotImplementedError
@@ -0,0 +1,15 @@
1
+ from pathlib import Path
2
+
3
+ import yaml
4
+
5
+ from instant_python.configuration.parser.configuration_file_not_found import ConfigurationFileNotFound
6
+ from instant_python.initialize.domain.configuration_repository import ConfigurationRepository
7
+
8
+
9
+ class YamlConfigurationRepository(ConfigurationRepository):
10
+ def read(self, path: str) -> dict:
11
+ try:
12
+ with Path(path).open("r") as file:
13
+ return yaml.safe_load(file)
14
+ except FileNotFoundError:
15
+ raise ConfigurationFileNotFound(path)
@@ -1,3 +1,5 @@
1
+ from collections.abc import Callable
2
+
1
3
  from jinja2 import Environment, PackageLoader
2
4
 
3
5
  from instant_python.render.jinja_custom_filters import is_in, compute_base_path, has_dependency
@@ -11,9 +13,9 @@ class JinjaEnvironment:
11
13
  lstrip_blocks=True,
12
14
  autoescape=True,
13
15
  )
14
- self._env.filters["is_in"] = is_in
15
- self._env.filters["compute_base_path"] = compute_base_path
16
- self._env.filters["has_dependency"] = has_dependency
16
+ self._add_filter("is_in", is_in)
17
+ self._add_filter("compute_base_path", compute_base_path)
18
+ self._add_filter("has_dependency", has_dependency)
17
19
 
18
20
  def render_template(self, name: str, context: dict[str, str] = None) -> str:
19
21
  """Renders a template with the given context.
@@ -27,3 +29,6 @@ class JinjaEnvironment:
27
29
  """
28
30
  template = self._env.get_template(name)
29
31
  return template.render(**(context or {}))
32
+
33
+ def _add_filter(self, name: str, filter_: Callable) -> None:
34
+ self._env.filters[name] = filter_
@@ -1,7 +1,4 @@
1
- from abc import ABC
2
-
3
-
4
- class ApplicationError(Exception, ABC):
1
+ class ApplicationError(Exception):
5
2
  def __init__(self, message: str, error_type: str) -> None:
6
3
  self._message = message
7
4
  self._type = error_type
@@ -18,7 +18,7 @@
18
18
  type: directory
19
19
  python: True
20
20
  children:
21
- - name: exceptions/error
21
+ - name: exceptions/base_error
22
22
  type: boilerplate_file
23
23
  extension: .py
24
24
  - name: exceptions/domain_error
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "instant-python"
7
- version = "0.12.1"
7
+ version = "0.13.0"
8
8
  description = "Instant boilerplate generation for Python projects"
9
9
  readme = "README.md"
10
10
  license = { file = "LICENSE" }
@@ -97,6 +97,11 @@ line-length = 120
97
97
 
98
98
  [tools.pytest.ini_options]
99
99
  testpaths = ["tests"]
100
+ markers = [
101
+ "acceptance: mark a test as an acceptance test.",
102
+ "integration: mark a test as an integration test.",
103
+ "unit: mark a test as a unit test.",
104
+ ]
100
105
 
101
106
  [tool.semantic_release]
102
107
  version_toml = ["pyproject.toml:project.version"]
@@ -1,3 +1,6 @@
1
+ from typing import Union
2
+
3
+ import pytest
1
4
  from expects import expect, be_true, be_none, be_false, raise_error
2
5
 
3
6
  from instant_python.config.domain.git_configuration import GitUserOrEmailNotPresent
@@ -19,8 +22,24 @@ class TestGitConfiguration:
19
22
  expect(git_configuration.username).to(be_none)
20
23
  expect(git_configuration.email).to(be_none)
21
24
 
22
- def test_should_not_allow_to_initialize_git_if_user_is_not_present(self) -> None:
23
- expect(lambda: GitConfigurationMother.with_parameters(username=None)).to(raise_error(GitUserOrEmailNotPresent))
24
-
25
- def test_should_not_allow_to_initialize_git_if_email_is_not_present(self) -> None:
25
+ @pytest.mark.parametrize(
26
+ "username",
27
+ [
28
+ pytest.param(None, id="username is None"),
29
+ pytest.param("", id="username is empty"),
30
+ ],
31
+ )
32
+ def test_should_not_allow_to_initialize_git_if_user_is_not_present(self, username: Union[str, None]) -> None:
33
+ expect(lambda: GitConfigurationMother.with_parameters(username=username)).to(
34
+ raise_error(GitUserOrEmailNotPresent)
35
+ )
36
+
37
+ @pytest.mark.parametrize(
38
+ "email",
39
+ [
40
+ pytest.param(None, id="email is None"),
41
+ pytest.param("", id="email is empty"),
42
+ ],
43
+ )
44
+ def test_should_not_allow_to_initialize_git_if_email_is_not_present(self, email: Union[str, None]) -> None:
26
45
  expect(lambda: GitConfigurationMother.with_parameters(email=None)).to(raise_error(GitUserOrEmailNotPresent))
@@ -0,0 +1,29 @@
1
+ from doublex import Mock, expect_call
2
+ from doublex_expects import have_been_satisfied
3
+ from expects import expect, be_none
4
+
5
+ from instant_python.config.domain.config_parser import ConfigParser
6
+ from instant_python.initialize.application.config_reader import ConfigReader
7
+ from instant_python.initialize.domain.configuration_repository import ConfigurationRepository
8
+ from test.config.domain.mothers.configuration_schema_mother import ConfigurationSchemaMother
9
+
10
+
11
+ class TestConfigReader:
12
+ def test_should_read_existing_configuration_from_file(self) -> None:
13
+ configuration_repository = Mock(ConfigurationRepository)
14
+ configuration_parser = Mock(ConfigParser)
15
+ config_reader = ConfigReader(
16
+ repository=configuration_repository,
17
+ parser=configuration_parser,
18
+ )
19
+ config_file_path = "path/to/config/file.yml"
20
+ config = ConfigurationSchemaMother.any()
21
+
22
+ expect_call(configuration_repository).read(config_file_path).returns(config.to_primitives())
23
+ expect_call(configuration_parser).parse(config.to_primitives(), config_file_path).returns(config)
24
+
25
+ parsed_config = config_reader.execute(config_file_path)
26
+
27
+ expect(parsed_config).to_not(be_none)
28
+ expect(configuration_repository).to(have_been_satisfied)
29
+ expect(configuration_parser).to(have_been_satisfied)
@@ -0,0 +1,24 @@
1
+ args: ('uv', 'MIT', '3.10') => {'exit_code': 0, 'errors': None}
2
+ args: ('uv', 'MIT', '3.11') => {'exit_code': 0, 'errors': None}
3
+ args: ('uv', 'MIT', '3.12') => {'exit_code': 0, 'errors': None}
4
+ args: ('uv', 'MIT', '3.13') => {'exit_code': 0, 'errors': None}
5
+ args: ('uv', 'Apache', '3.10') => {'exit_code': 0, 'errors': None}
6
+ args: ('uv', 'Apache', '3.11') => {'exit_code': 0, 'errors': None}
7
+ args: ('uv', 'Apache', '3.12') => {'exit_code': 0, 'errors': None}
8
+ args: ('uv', 'Apache', '3.13') => {'exit_code': 0, 'errors': None}
9
+ args: ('uv', 'GPL', '3.10') => {'exit_code': 0, 'errors': None}
10
+ args: ('uv', 'GPL', '3.11') => {'exit_code': 0, 'errors': None}
11
+ args: ('uv', 'GPL', '3.12') => {'exit_code': 0, 'errors': None}
12
+ args: ('uv', 'GPL', '3.13') => {'exit_code': 0, 'errors': None}
13
+ args: ('pdm', 'MIT', '3.10') => {'exit_code': 0, 'errors': None}
14
+ args: ('pdm', 'MIT', '3.11') => {'exit_code': 0, 'errors': None}
15
+ args: ('pdm', 'MIT', '3.12') => {'exit_code': 0, 'errors': None}
16
+ args: ('pdm', 'MIT', '3.13') => {'exit_code': 0, 'errors': None}
17
+ args: ('pdm', 'Apache', '3.10') => {'exit_code': 0, 'errors': None}
18
+ args: ('pdm', 'Apache', '3.11') => {'exit_code': 0, 'errors': None}
19
+ args: ('pdm', 'Apache', '3.12') => {'exit_code': 0, 'errors': None}
20
+ args: ('pdm', 'Apache', '3.13') => {'exit_code': 0, 'errors': None}
21
+ args: ('pdm', 'GPL', '3.10') => {'exit_code': 0, 'errors': None}
22
+ args: ('pdm', 'GPL', '3.11') => {'exit_code': 0, 'errors': None}
23
+ args: ('pdm', 'GPL', '3.12') => {'exit_code': 0, 'errors': None}
24
+ args: ('pdm', 'GPL', '3.13') => {'exit_code': 0, 'errors': None}
@@ -0,0 +1,2 @@
1
+ args: (True,) => {'exit_code': 0, 'errors': None}
2
+ args: (False,) => {'exit_code': 0, 'errors': None}
@@ -0,0 +1,48 @@
1
+ args: ('domain_driven_design', 'value_objects') => {'exit_code': 0, 'errors': None}
2
+ args: ('domain_driven_design', 'github_actions') => {'exit_code': 0, 'errors': None}
3
+ args: ('domain_driven_design', 'github_issues_template') => {'exit_code': 0, 'errors': None}
4
+ args: ('domain_driven_design', 'makefile') => {'exit_code': 0, 'errors': None}
5
+ args: ('domain_driven_design', 'logger') => {'exit_code': 0, 'errors': None}
6
+ args: ('domain_driven_design', 'event_bus') => {'exit_code': 0, 'errors': None}
7
+ args: ('domain_driven_design', 'async_sqlalchemy') => {'exit_code': 0, 'errors': None}
8
+ args: ('domain_driven_design', 'async_alembic') => {'exit_code': 0, 'errors': None}
9
+ args: ('domain_driven_design', 'fastapi_application') => {'exit_code': 0, 'errors': None}
10
+ args: ('domain_driven_design', 'precommit_hook') => {'exit_code': 0, 'errors': None}
11
+ args: ('domain_driven_design', 'citation_file') => {'exit_code': 0, 'errors': None}
12
+ args: ('domain_driven_design', 'security_file') => {'exit_code': 0, 'errors': None}
13
+ args: ('clean_architecture', 'value_objects') => {'exit_code': 0, 'errors': None}
14
+ args: ('clean_architecture', 'github_actions') => {'exit_code': 0, 'errors': None}
15
+ args: ('clean_architecture', 'github_issues_template') => {'exit_code': 0, 'errors': None}
16
+ args: ('clean_architecture', 'makefile') => {'exit_code': 0, 'errors': None}
17
+ args: ('clean_architecture', 'logger') => {'exit_code': 0, 'errors': None}
18
+ args: ('clean_architecture', 'event_bus') => {'exit_code': 0, 'errors': None}
19
+ args: ('clean_architecture', 'async_sqlalchemy') => {'exit_code': 0, 'errors': None}
20
+ args: ('clean_architecture', 'async_alembic') => {'exit_code': 0, 'errors': None}
21
+ args: ('clean_architecture', 'fastapi_application') => {'exit_code': 0, 'errors': None}
22
+ args: ('clean_architecture', 'precommit_hook') => {'exit_code': 0, 'errors': None}
23
+ args: ('clean_architecture', 'citation_file') => {'exit_code': 0, 'errors': None}
24
+ args: ('clean_architecture', 'security_file') => {'exit_code': 0, 'errors': None}
25
+ args: ('standard_project', 'value_objects') => {'exit_code': 0, 'errors': None}
26
+ args: ('standard_project', 'github_actions') => {'exit_code': 0, 'errors': None}
27
+ args: ('standard_project', 'github_issues_template') => {'exit_code': 0, 'errors': None}
28
+ args: ('standard_project', 'makefile') => {'exit_code': 0, 'errors': None}
29
+ args: ('standard_project', 'logger') => {'exit_code': 0, 'errors': None}
30
+ args: ('standard_project', 'event_bus') => {'exit_code': 1, 'errors': CalledProcessError(2, 'uvx ruff format')}
31
+ args: ('standard_project', 'async_sqlalchemy') => {'exit_code': 0, 'errors': None}
32
+ args: ('standard_project', 'async_alembic') => {'exit_code': 0, 'errors': None}
33
+ args: ('standard_project', 'fastapi_application') => {'exit_code': 0, 'errors': None}
34
+ args: ('standard_project', 'precommit_hook') => {'exit_code': 0, 'errors': None}
35
+ args: ('standard_project', 'citation_file') => {'exit_code': 0, 'errors': None}
36
+ args: ('standard_project', 'security_file') => {'exit_code': 0, 'errors': None}
37
+ args: ('custom', 'value_objects') => {'exit_code': 1, 'errors': TemplateNotFound('project_structure/custom/main_structure.yml.j2')}
38
+ args: ('custom', 'github_actions') => {'exit_code': 1, 'errors': TemplateNotFound('project_structure/custom/main_structure.yml.j2')}
39
+ args: ('custom', 'github_issues_template') => {'exit_code': 1, 'errors': TemplateNotFound('project_structure/custom/main_structure.yml.j2')}
40
+ args: ('custom', 'makefile') => {'exit_code': 1, 'errors': TemplateNotFound('project_structure/custom/main_structure.yml.j2')}
41
+ args: ('custom', 'logger') => {'exit_code': 1, 'errors': TemplateNotFound('project_structure/custom/main_structure.yml.j2')}
42
+ args: ('custom', 'event_bus') => {'exit_code': 1, 'errors': TemplateNotFound('project_structure/custom/main_structure.yml.j2')}
43
+ args: ('custom', 'async_sqlalchemy') => {'exit_code': 1, 'errors': TemplateNotFound('project_structure/custom/main_structure.yml.j2')}
44
+ args: ('custom', 'async_alembic') => {'exit_code': 1, 'errors': TemplateNotFound('project_structure/custom/main_structure.yml.j2')}
45
+ args: ('custom', 'fastapi_application') => {'exit_code': 1, 'errors': TemplateNotFound('project_structure/custom/main_structure.yml.j2')}
46
+ args: ('custom', 'precommit_hook') => {'exit_code': 1, 'errors': TemplateNotFound('project_structure/custom/main_structure.yml.j2')}
47
+ args: ('custom', 'citation_file') => {'exit_code': 1, 'errors': TemplateNotFound('project_structure/custom/main_structure.yml.j2')}
48
+ args: ('custom', 'security_file') => {'exit_code': 1, 'errors': TemplateNotFound('project_structure/custom/main_structure.yml.j2')}
@@ -0,0 +1,4 @@
1
+ args: ('uv', {'name': 'requests', 'version': 'latest', 'is_dev': False, 'group': ''}) => {'exit_code': 0, 'errors': None}
2
+ args: ('uv', {'name': 'pytest', 'version': '6.2.5', 'is_dev': True, 'group': 'testing'}) => {'exit_code': 0, 'errors': None}
3
+ args: ('pdm', {'name': 'requests', 'version': 'latest', 'is_dev': False, 'group': ''}) => {'exit_code': 0, 'errors': None}
4
+ args: ('pdm', {'name': 'pytest', 'version': '6.2.5', 'is_dev': True, 'group': 'testing'}) => {'exit_code': 0, 'errors': None}
@@ -0,0 +1,21 @@
1
+ dependencies: []
2
+ general:
3
+ author: ''
4
+ dependency_manager: uv
5
+ description: Python Project Description
6
+ license: MIT
7
+ python_version: '3.10'
8
+ slug: python-project
9
+ source_name: src
10
+ version: 0.1.0
11
+ year: 2025
12
+ git:
13
+ email: johndoe@gmail.com
14
+ initialize: false
15
+ username: johndoe
16
+ template:
17
+ aggregate_name: null
18
+ bounded_context: null
19
+ built_in_features: []
20
+ name: standard_project
21
+ specify_bounded_context: false