instant-python 0.6.0__tar.gz → 0.6.2__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 (293) hide show
  1. {instant_python-0.6.0 → instant_python-0.6.2}/.github/workflows/test_lint.yml +6 -2
  2. {instant_python-0.6.0 → instant_python-0.6.2}/CHANGELOG.md +26 -0
  3. {instant_python-0.6.0 → instant_python-0.6.2}/PKG-INFO +6 -6
  4. {instant_python-0.6.0 → instant_python-0.6.2}/README.md +5 -5
  5. {instant_python-0.6.0 → instant_python-0.6.2}/docs/guide/command_init.md +51 -31
  6. {instant_python-0.6.0 → instant_python-0.6.2}/docs/home/index.md +3 -0
  7. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/configuration_schema.py +2 -2
  8. instant_python-0.6.2/instant_python/configuration/step/template_step.py +62 -0
  9. instant_python-0.6.0/instant_python/templates/boilerplate/github/test_lint.yml → instant_python-0.6.2/instant_python/templates/boilerplate/github/lint.yml +4 -10
  10. instant_python-0.6.2/instant_python/templates/boilerplate/github/test.yml +30 -0
  11. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/pyproject.toml +24 -1
  12. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/scripts/makefile +16 -28
  13. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/clean_architecture/main_structure.yml.j2 +1 -0
  14. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/domain_driven_design/main_structure.yml.j2 +1 -0
  15. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/github_action.yml.j2 +4 -1
  16. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/logger.yml.j2 +1 -1
  17. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/standard_project/main_structure.yml.j2 +1 -0
  18. {instant_python-0.6.0 → instant_python-0.6.2}/makefile +4 -0
  19. {instant_python-0.6.0 → instant_python-0.6.2}/pyproject.toml +3 -3
  20. {instant_python-0.6.0 → instant_python-0.6.2}/uv.lock +5 -5
  21. instant_python-0.6.0/instant_python/configuration/step/template_step.py +0 -63
  22. {instant_python-0.6.0 → instant_python-0.6.2}/.github/FUNDING.yml +0 -0
  23. {instant_python-0.6.0 → instant_python-0.6.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  24. {instant_python-0.6.0 → instant_python-0.6.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  25. {instant_python-0.6.0 → instant_python-0.6.2}/.github/actions/python_setup/action.yml +0 -0
  26. {instant_python-0.6.0 → instant_python-0.6.2}/.github/workflows/pages.yml +0 -0
  27. {instant_python-0.6.0 → instant_python-0.6.2}/.github/workflows/publish.yml +0 -0
  28. {instant_python-0.6.0 → instant_python-0.6.2}/.github/workflows/release.yml +0 -0
  29. {instant_python-0.6.0 → instant_python-0.6.2}/.gitignore +0 -0
  30. {instant_python-0.6.0 → instant_python-0.6.2}/.python-version +0 -0
  31. {instant_python-0.6.0 → instant_python-0.6.2}/LICENSE +0 -0
  32. {instant_python-0.6.0 → instant_python-0.6.2}/cz.yaml +0 -0
  33. {instant_python-0.6.0 → instant_python-0.6.2}/docs/assets/favicon.svg +0 -0
  34. {instant_python-0.6.0 → instant_python-0.6.2}/docs/assets/logo.svg +0 -0
  35. {instant_python-0.6.0 → instant_python-0.6.2}/docs/downloads_macro.py +0 -0
  36. {instant_python-0.6.0 → instant_python-0.6.2}/docs/examples/configuration.md +0 -0
  37. {instant_python-0.6.0 → instant_python-0.6.2}/docs/examples/custom_template.md +0 -0
  38. {instant_python-0.6.0 → instant_python-0.6.2}/docs/guide/command_config.md +0 -0
  39. {instant_python-0.6.0 → instant_python-0.6.2}/docs/home/contributing.md +0 -0
  40. {instant_python-0.6.0 → instant_python-0.6.2}/docs/home/getting_started.md +0 -0
  41. {instant_python-0.6.0 → instant_python-0.6.2}/docs/home/releases.md +0 -0
  42. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/__init__.py +0 -0
  43. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/cli.py +0 -0
  44. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/commands/__init__.py +0 -0
  45. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/commands/config.py +0 -0
  46. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/commands/init.py +0 -0
  47. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/__init__.py +0 -0
  48. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/dependency/__init__.py +0 -0
  49. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/dependency/dependency_configuration.py +0 -0
  50. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/dependency/not_dev_dependency_included_in_group.py +0 -0
  51. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/general/__init__.py +0 -0
  52. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/general/general_configuration.py +0 -0
  53. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/general/invalid_dependency_manager_value.py +0 -0
  54. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/general/invalid_license_value.py +0 -0
  55. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/general/invalid_python_version_value.py +0 -0
  56. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/git/__init__.py +0 -0
  57. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/git/git_configuration.py +0 -0
  58. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/git/git_user_or_email_not_present.py +0 -0
  59. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/parser/__init__.py +0 -0
  60. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/parser/config_key_not_present.py +0 -0
  61. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/parser/configuration_file_not_found.py +0 -0
  62. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/parser/empty_configuration_not_allowed.py +0 -0
  63. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/parser/missing_mandatory_fields.py +0 -0
  64. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/parser/parser.py +0 -0
  65. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/question/__init__.py +0 -0
  66. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/question/boolean_question.py +0 -0
  67. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/question/choice_question.py +0 -0
  68. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/question/conditional_question.py +0 -0
  69. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/question/free_text_question.py +0 -0
  70. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/question/multiple_choice_question.py +0 -0
  71. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/question/question.py +0 -0
  72. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/question/questionary.py +0 -0
  73. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/question_wizard.py +0 -0
  74. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/step/__init__.py +0 -0
  75. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/step/dependencies_step.py +0 -0
  76. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/step/general_step.py +0 -0
  77. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/step/git_step.py +0 -0
  78. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/step/steps.py +0 -0
  79. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/template/__init__.py +0 -0
  80. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/template/bounded_context_not_applicable.py +0 -0
  81. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/template/bounded_context_not_especified.py +0 -0
  82. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/template/invalid_built_in_features_values.py +0 -0
  83. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/template/invalid_template_value.py +0 -0
  84. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/configuration/template/template_configuration.py +0 -0
  85. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/dependency_manager/__init__.py +0 -0
  86. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/dependency_manager/command_execution_error.py +0 -0
  87. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/dependency_manager/dependency_manager.py +0 -0
  88. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/dependency_manager/dependency_manager_factory.py +0 -0
  89. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/dependency_manager/pdm_dependency_manager.py +0 -0
  90. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/dependency_manager/unknown_dependency_manager_error.py +0 -0
  91. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/dependency_manager/uv_dependency_manager.py +0 -0
  92. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/git/__init__.py +0 -0
  93. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/git/git_configurer.py +0 -0
  94. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/instant_python_typer.py +0 -0
  95. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/project_creator/__init__.py +0 -0
  96. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/project_creator/directory.py +0 -0
  97. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/project_creator/file.py +0 -0
  98. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/project_creator/file_has_not_been_created.py +0 -0
  99. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/project_creator/file_system.py +0 -0
  100. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/project_creator/node.py +0 -0
  101. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/project_creator/unknown_node_typer_error.py +0 -0
  102. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/render/__init__.py +0 -0
  103. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/render/custom_project_renderer.py +0 -0
  104. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/render/jinja_custom_filters.py +0 -0
  105. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/render/jinja_environment.py +0 -0
  106. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/render/jinja_project_renderer.py +0 -0
  107. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/render/template_file_not_found_error.py +0 -0
  108. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/render/unknown_template_error.py +0 -0
  109. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/shared/__init__.py +0 -0
  110. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/shared/application_error.py +0 -0
  111. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/shared/error_types.py +0 -0
  112. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/shared/supported_built_in_features.py +0 -0
  113. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/shared/supported_licenses.py +0 -0
  114. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/shared/supported_managers.py +0 -0
  115. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/shared/supported_python_versions.py +0 -0
  116. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/shared/supported_templates.py +0 -0
  117. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/.gitignore +0 -0
  118. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/.pre-commit-config.yml +0 -0
  119. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/.python-version +0 -0
  120. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/LICENSE +0 -0
  121. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/README.md +0 -0
  122. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/__init__.py +0 -0
  123. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/aggregate_root.py +0 -0
  124. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/domain_event.py +0 -0
  125. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/domain_event_json_deserializer.py +0 -0
  126. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/domain_event_json_serializer.py +0 -0
  127. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/domain_event_subscriber.py +0 -0
  128. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/event_bus.py +0 -0
  129. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/exchange_type.py +0 -0
  130. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/mock_event_bus.py +0 -0
  131. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/rabbit_mq_configurer.py +0 -0
  132. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/rabbit_mq_connection.py +0 -0
  133. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/rabbit_mq_consumer.py +0 -0
  134. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/rabbit_mq_event_bus.py +0 -0
  135. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/rabbit_mq_queue_formatter.py +0 -0
  136. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/rabbit_mq_settings.py +0 -0
  137. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/exceptions/__init__.py +0 -0
  138. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/exceptions/domain_error.py +0 -0
  139. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/exceptions/domain_event_type_not_found_error.py +0 -0
  140. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/exceptions/incorrect_value_type_error.py +0 -0
  141. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/exceptions/invalid_id_format_error.py +0 -0
  142. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/exceptions/invalid_negative_value_error.py +0 -0
  143. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/exceptions/rabbit_mq_connection_not_established_error.py +0 -0
  144. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/exceptions/required_value_error.py +0 -0
  145. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/fastapi/__init__.py +0 -0
  146. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/fastapi/application.py +0 -0
  147. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/fastapi/http_response.py +0 -0
  148. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/fastapi/lifespan.py +0 -0
  149. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/fastapi/status_code.py +0 -0
  150. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/github/action.yml +0 -0
  151. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/logger/__init__.py +0 -0
  152. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/logger/json_formatter.py +0 -0
  153. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/logger/logger.py +0 -0
  154. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/mypy.ini +0 -0
  155. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/__init__.py +0 -0
  156. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/alembic_migrator.py +0 -0
  157. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/async/README.md +0 -0
  158. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/async/__init__.py +0 -0
  159. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/async/alembic.ini +0 -0
  160. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/async/async_engine_fixture.py +0 -0
  161. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/async/env.py +0 -0
  162. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/async/models_metadata.py +0 -0
  163. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/async/postgres_settings.py +0 -0
  164. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/async/script.py.mako +0 -0
  165. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/async/sqlalchemy_repository.py +0 -0
  166. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/base.py +0 -0
  167. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/synchronous/__init__.py +0 -0
  168. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/synchronous/session_maker.py +0 -0
  169. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/synchronous/sqlalchemy_repository.py +0 -0
  170. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/pytest.ini +0 -0
  171. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/random_generator.py +0 -0
  172. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/scripts/add_dependency.sh +0 -0
  173. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/scripts/create_aggregate.py +0 -0
  174. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/scripts/insert_template.py +0 -0
  175. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/scripts/integration.sh +0 -0
  176. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/scripts/local_setup.sh +0 -0
  177. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/scripts/post-merge +0 -0
  178. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/scripts/pre-commit +0 -0
  179. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/scripts/pre-push +0 -0
  180. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/scripts/remove_dependency.sh +0 -0
  181. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/scripts/unit.sh +0 -0
  182. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/value_object/__init__.py +0 -0
  183. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/value_object/int_value_object.py +0 -0
  184. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/value_object/string_value_object.py +0 -0
  185. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/value_object/uuid.py +0 -0
  186. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/boilerplate/value_object/value_object.py +0 -0
  187. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/alembic_migrator.yml.j2 +0 -0
  188. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/async_alembic.yml.j2 +0 -0
  189. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/async_sqlalchemy.yml.j2 +0 -0
  190. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/clean_architecture/source.yml.j2 +0 -0
  191. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/clean_architecture/test.yml.j2 +0 -0
  192. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/domain_driven_design/bounded_context.yml.j2 +0 -0
  193. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/domain_driven_design/source.yml.j2 +0 -0
  194. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/domain_driven_design/test.yml.j2 +0 -0
  195. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/event_bus_domain.yml.j2 +0 -0
  196. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/event_bus_infra.yml.j2 +0 -0
  197. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/fastapi_app.yml.j2 +0 -0
  198. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/fastapi_infra.yml.j2 +0 -0
  199. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/gitignore.yml.j2 +0 -0
  200. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/license.yml.j2 +0 -0
  201. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/macros.j2 +0 -0
  202. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/makefile.yml.j2 +0 -0
  203. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/mypy.yml.j2 +0 -0
  204. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/pre_commit.yml.j2 +0 -0
  205. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/pyproject.yml.j2 +0 -0
  206. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/pytest.yml.j2 +0 -0
  207. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/python_version.yml.j2 +0 -0
  208. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/readme.yml.j2 +0 -0
  209. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/standard_project/source.yml.j2 +0 -0
  210. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/standard_project/test.yml.j2 +0 -0
  211. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/synchronous_sqlalchemy.yml.j2 +0 -0
  212. {instant_python-0.6.0 → instant_python-0.6.2}/instant_python/templates/project_structure/value_objects.yml.j2 +0 -0
  213. {instant_python-0.6.0 → instant_python-0.6.2}/mkdocs.yml +0 -0
  214. {instant_python-0.6.0 → instant_python-0.6.2}/mypy.ini +0 -0
  215. {instant_python-0.6.0 → instant_python-0.6.2}/scripts/add_dependency.sh +0 -0
  216. {instant_python-0.6.0 → instant_python-0.6.2}/scripts/remove_dependency.sh +0 -0
  217. {instant_python-0.6.0 → instant_python-0.6.2}/test/__init__.py +0 -0
  218. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/__init__.py +0 -0
  219. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/dependency/__init__.py +0 -0
  220. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/dependency/dependency_configuration_mother.py +0 -0
  221. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/dependency/test_dependency_configuration.py +0 -0
  222. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/general/__init__.py +0 -0
  223. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/general/general_configuration_mother.py +0 -0
  224. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/general/test_general_configuration.py +0 -0
  225. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/git/__init__.py +0 -0
  226. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/git/git_configuration_mother.py +0 -0
  227. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/git/test_git_configuration.py +0 -0
  228. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/parser/__init__.py +0 -0
  229. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/parser/approvaltests_config.json +0 -0
  230. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/parser/approved_files/TestParser.test_should_parse_configuration.approved.txt +0 -0
  231. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/parser/resources/__init__.py +0 -0
  232. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/parser/resources/config.yml +0 -0
  233. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/parser/resources/empty_config.yml +0 -0
  234. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/parser/resources/missing_dependencies_fields_config.yml +0 -0
  235. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/parser/resources/missing_general_fields_config.yml +0 -0
  236. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/parser/resources/missing_git_fields_config.yml +0 -0
  237. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/parser/resources/missing_keys_config.yml +0 -0
  238. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/parser/resources/missing_template_fields_config.yml +0 -0
  239. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/parser/test_parser.py +0 -0
  240. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/question/__init__.py +0 -0
  241. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/question/test_boolean_question.py +0 -0
  242. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/question/test_choice_question.py +0 -0
  243. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/question/test_free_text_question.py +0 -0
  244. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/question/test_multiple_choice_question.py +0 -0
  245. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/template/__init__.py +0 -0
  246. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/template/template_configuration_mother.py +0 -0
  247. {instant_python-0.6.0 → instant_python-0.6.2}/test/configuration/template/test_template_configuration.py +0 -0
  248. {instant_python-0.6.0 → instant_python-0.6.2}/test/dependency_manager/__init__.py +0 -0
  249. {instant_python-0.6.0 → instant_python-0.6.2}/test/dependency_manager/mock_pdm_dependency_manager.py +0 -0
  250. {instant_python-0.6.0 → instant_python-0.6.2}/test/dependency_manager/mock_uv_dependency_manager.py +0 -0
  251. {instant_python-0.6.0 → instant_python-0.6.2}/test/dependency_manager/test_pdm_dependency_manager.py +0 -0
  252. {instant_python-0.6.0 → instant_python-0.6.2}/test/dependency_manager/test_uv_dependency_manager.py +0 -0
  253. {instant_python-0.6.0 → instant_python-0.6.2}/test/git/__init__.py +0 -0
  254. {instant_python-0.6.0 → instant_python-0.6.2}/test/git/mock_git_configurer.py +0 -0
  255. {instant_python-0.6.0 → instant_python-0.6.2}/test/git/test_git_configurer.py +0 -0
  256. {instant_python-0.6.0 → instant_python-0.6.2}/test/project_creator/__init__.py +0 -0
  257. {instant_python-0.6.0 → instant_python-0.6.2}/test/project_creator/approvaltests_config.json +0 -0
  258. {instant_python-0.6.0 → instant_python-0.6.2}/test/project_creator/approved_files/TestFileSystem.test_should_create_file_system_in_disk.rendered_custom_project_structure.json.approved.txt +0 -0
  259. {instant_python-0.6.0 → instant_python-0.6.2}/test/project_creator/approved_files/TestFileSystem.test_should_create_file_system_in_disk.rendered_project_structure.json.approved.txt +0 -0
  260. {instant_python-0.6.0 → instant_python-0.6.2}/test/project_creator/approved_files/TestFileSystem.test_should_create_folders_and_files.approved.txt +0 -0
  261. {instant_python-0.6.0 → instant_python-0.6.2}/test/project_creator/approved_files/TestFileSystem.test_should_generate_file_system_tree.approved.txt +0 -0
  262. {instant_python-0.6.0 → instant_python-0.6.2}/test/project_creator/directory_mother.py +0 -0
  263. {instant_python-0.6.0 → instant_python-0.6.2}/test/project_creator/resources/boilerplate/exceptions/domain_error.py +0 -0
  264. {instant_python-0.6.0 → instant_python-0.6.2}/test/project_creator/resources/boilerplate/exceptions/domain_error_simple.py +0 -0
  265. {instant_python-0.6.0 → instant_python-0.6.2}/test/project_creator/resources/clean_architecture/main_structure.yml.j2 +0 -0
  266. {instant_python-0.6.0 → instant_python-0.6.2}/test/project_creator/resources/config.yml +0 -0
  267. {instant_python-0.6.0 → instant_python-0.6.2}/test/project_creator/resources/rendered_custom_project_structure.json +0 -0
  268. {instant_python-0.6.0 → instant_python-0.6.2}/test/project_creator/resources/rendered_project_structure.json +0 -0
  269. {instant_python-0.6.0 → instant_python-0.6.2}/test/project_creator/test_directory.py +0 -0
  270. {instant_python-0.6.0 → instant_python-0.6.2}/test/project_creator/test_file.py +0 -0
  271. {instant_python-0.6.0 → instant_python-0.6.2}/test/project_creator/test_file_system.py +0 -0
  272. {instant_python-0.6.0 → instant_python-0.6.2}/test/random_generator.py +0 -0
  273. {instant_python-0.6.0 → instant_python-0.6.2}/test/render/__init__.py +0 -0
  274. {instant_python-0.6.0 → instant_python-0.6.2}/test/render/approvaltests_config.json +0 -0
  275. {instant_python-0.6.0 → instant_python-0.6.2}/test/render/approved_files/TestCustomProjectRenderer.test_should_render_custom_template.approved.txt +0 -0
  276. {instant_python-0.6.0 → instant_python-0.6.2}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.clean_architecture_config.yml.approved.txt +0 -0
  277. {instant_python-0.6.0 → instant_python-0.6.2}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.domain_driven_design_config.yml.approved.txt +0 -0
  278. {instant_python-0.6.0 → instant_python-0.6.2}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.received.txt +0 -0
  279. {instant_python-0.6.0 → instant_python-0.6.2}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.standard_project_with_dependency_config.yml.approved.txt +0 -0
  280. {instant_python-0.6.0 → instant_python-0.6.2}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.standard_project_with_git_config.yml.approved.txt +0 -0
  281. {instant_python-0.6.0 → instant_python-0.6.2}/test/render/resources/clean_architecture/main_structure.yml.j2 +0 -0
  282. {instant_python-0.6.0 → instant_python-0.6.2}/test/render/resources/clean_architecture_config.yml +0 -0
  283. {instant_python-0.6.0 → instant_python-0.6.2}/test/render/resources/custom_template.yml +0 -0
  284. {instant_python-0.6.0 → instant_python-0.6.2}/test/render/resources/domain_driven_design/main_structure.yml.j2 +0 -0
  285. {instant_python-0.6.0 → instant_python-0.6.2}/test/render/resources/domain_driven_design_config.yml +0 -0
  286. {instant_python-0.6.0 → instant_python-0.6.2}/test/render/resources/standard_project/main_structure.yml.j2 +0 -0
  287. {instant_python-0.6.0 → instant_python-0.6.2}/test/render/resources/standard_project_with_dependency_config.yml +0 -0
  288. {instant_python-0.6.0 → instant_python-0.6.2}/test/render/resources/standard_project_with_git_config.yml +0 -0
  289. {instant_python-0.6.0 → instant_python-0.6.2}/test/render/resources/test_template.j2 +0 -0
  290. {instant_python-0.6.0 → instant_python-0.6.2}/test/render/test_custom_project_renderer.py +0 -0
  291. {instant_python-0.6.0 → instant_python-0.6.2}/test/render/test_jinja_environment.py +0 -0
  292. {instant_python-0.6.0 → instant_python-0.6.2}/test/render/test_jinja_project_renderer.py +0 -0
  293. {instant_python-0.6.0 → instant_python-0.6.2}/tox.ini +0 -0
@@ -28,7 +28,9 @@ jobs:
28
28
  - name: Auto fix lint errors
29
29
  id: fix_lint
30
30
  if: ${{ steps.check_lint.outcome == 'failure' }}
31
- run: uvx ruff check --fix --exclude "instant_python/templates,instant_python/templates" instant_python test
31
+ run: |
32
+ git pull --rebase origin main
33
+ uvx ruff check --fix --exclude "instant_python/templates,instant_python/templates" instant_python test
32
34
  - name: Commit lint fixes
33
35
  if: ${{ steps.fix_lint.outcome == 'success' }}
34
36
  run: |
@@ -65,7 +67,9 @@ jobs:
65
67
  - name: Auto format code
66
68
  id: format_code
67
69
  if: ${{ steps.check_format.outcome == 'failure' }}
68
- run: uvx ruff format --exclude "instant_python/templates,instant_python/templates" instant_python test
70
+ run: |
71
+ git pull --rebase origin main
72
+ uvx ruff format --exclude "instant_python/templates,instant_python/templates" instant_python test
69
73
  - name: Commit formatted code
70
74
  if: ${{ steps.format_code.outcome == 'success' }}
71
75
  run: |
@@ -1,3 +1,29 @@
1
+ ## 0.6.2 (2025-06-30)
2
+
3
+ ### 🐛 Bug Fixes
4
+
5
+ - **configuration**: ask built in template question only if selected template is not custom
6
+ - **templates**: use valid checkout action in test_lint.yml github action template
7
+ - **templates**: correct test path folder in makefile commands
8
+ - **templates**: rename _log_ folder that gets created when logger built in feature is selected to _logger_ to avoid git ignore its content
9
+ - **templates**: include faker library by default when template is not custom
10
+ - **templates**: include basic dependencies for makefile when is selected in built in features
11
+
12
+ ### ♻️ Code Refactoring
13
+
14
+ - **templates**: separate template github action in two different workflows, one for test and one for linting and checks
15
+ - **templates**: include makefile by default if github actions built in feature has been selected to be able to reuse its commands
16
+ - **templates**: remove test execution in parallel by default in makefile template
17
+ - **templates**: remove unit and integration commands from makefile
18
+ - **templates**: remove insert_templates command from makefile template
19
+ - **configuration**: do not use Self typing to ensure compatibility with older python versions
20
+
21
+ ## 0.6.1 (2025-06-27)
22
+
23
+ ### 🐛 Bug Fixes
24
+
25
+ - correct links to README.md
26
+
1
27
  ## 0.6.0 (2025-06-27)
2
28
 
3
29
  ### ✨ Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: instant-python
3
- Version: 0.6.0
3
+ Version: 0.6.2
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/
@@ -267,11 +267,11 @@ commands like `ng new` or `create-react-app`, but for Python projects.
267
267
  ## Documentation
268
268
 
269
269
  This section provides a high-level overview of the `instant-python` library, its features, and how to get started.
270
- For detailed instructions and examples, please refer to the [full Instant Python documentation](https://dimanu-py.github.io/instant-python/).
270
+ For detailed instructions and examples, please refer to the [full Instant Python documentation](https://dimanu-py.github.io/instant-python/home/).
271
271
 
272
- - [Installation](#installation)
273
- - [Getting Started](docs/home/getting_started.md)
274
- - [Examples](./docs/examples/index.md)
272
+ - [Installation](https://dimanu-py.github.io/instant-python/home/#installation)
273
+ - [Getting Started](https://dimanu-py.github.io/instant-python/home/getting_started/)
274
+ - [Examples](https://dimanu-py.github.io/instant-python/examples/configuration/)
275
275
 
276
276
  ### Need help?
277
277
 
@@ -312,4 +312,4 @@ Older versions of Python may work, but they are not guaranteed to be compatible.
312
312
  ## Contributing
313
313
 
314
314
  We welcome contributions to `instant-python`! If you have ideas, suggestions, or improvements, please check out our
315
- [contributing guide](docs/home/contributing.md) for details on how to get involved.
315
+ [contributing guide](https://dimanu-py.github.io/instant-python/home/contributing/) for details on how to get involved.
@@ -41,11 +41,11 @@ commands like `ng new` or `create-react-app`, but for Python projects.
41
41
  ## Documentation
42
42
 
43
43
  This section provides a high-level overview of the `instant-python` library, its features, and how to get started.
44
- For detailed instructions and examples, please refer to the [full Instant Python documentation](https://dimanu-py.github.io/instant-python/).
44
+ For detailed instructions and examples, please refer to the [full Instant Python documentation](https://dimanu-py.github.io/instant-python/home/).
45
45
 
46
- - [Installation](#installation)
47
- - [Getting Started](docs/home/getting_started.md)
48
- - [Examples](./docs/examples/index.md)
46
+ - [Installation](https://dimanu-py.github.io/instant-python/home/#installation)
47
+ - [Getting Started](https://dimanu-py.github.io/instant-python/home/getting_started/)
48
+ - [Examples](https://dimanu-py.github.io/instant-python/examples/configuration/)
49
49
 
50
50
  ### Need help?
51
51
 
@@ -86,4 +86,4 @@ Older versions of Python may work, but they are not guaranteed to be compatible.
86
86
  ## Contributing
87
87
 
88
88
  We welcome contributions to `instant-python`! If you have ideas, suggestions, or improvements, please check out our
89
- [contributing guide](docs/home/contributing.md) for details on how to get involved.
89
+ [contributing guide](https://dimanu-py.github.io/instant-python/home/contributing/) for details on how to get involved.
@@ -8,13 +8,17 @@ ipy init
8
8
 
9
9
  By default `instant-python` will look for **ipy.yml** in the current directory. A different file can be provided with `--config` or `-c` flags.
10
10
 
11
- Additionally, a custom template for your project structure can be used, you tell `ipy` to use that
12
- template with the `--template` or `-t` flag.
11
+ Additionally, a [custom template](#using-custom-template) for your project structure can be used, you tell `ipy` to use that
12
+ template with the `--template` or `-t` flag and providing the path to the template file.
13
13
 
14
14
  ```bash
15
15
  ipy init -t /path/to/template.yml
16
16
  ```
17
17
 
18
+ !!! important
19
+ When using a [custom template](#using-custom-template), the possibility of using [out-of-the-box implementations](#out-of-the-box-implementations)
20
+ is not available. The custom template will only create the folder structure and files defined in it.
21
+
18
22
  ## Overview
19
23
 
20
24
  The command performs the following steps:
@@ -119,6 +123,9 @@ that will help you to start your project.
119
123
  them in the same way or that they are the best way to implement them. You can use them as a starting point
120
124
  and iterate them as you need.
121
125
 
126
+ !!! warning
127
+ These implementations are only available when using one of the [default templates](#default-templates).
128
+
122
129
  ### Value objects and exceptions
123
130
 
124
131
  Value objects are a common pattern to encapsulate primitives and encapsulate domain logic. If
@@ -257,44 +264,53 @@ some common exceptions that you can use in your project:
257
264
  super().__init__(message=self._message, error_type=self._type)
258
265
  ```
259
266
 
260
- ### GitHub actions and workflows
267
+ ### Makefile
261
268
 
262
- A common feature in projects is to have a CI/CD pipeline that will run some tasks. This option will include the following:
269
+ A Makefile is a common tool to run tasks in your project. This feature is specially useful when automating tasks and
270
+ avoid remembering all the commands. The default Makefile will include the following commands:
263
271
 
264
- - A GitHub action that will set up your Python environment in your pipeline using the dependency manager you selected.
265
- - A workflow that will execute all the test, lint, type check and code formatting tasks.
272
+ | Command | Description |
273
+ |-------------------|------------------------------------------|
274
+ | `make help` | Show available commands |
275
+ | `make test` | Run all tests |
276
+ | `make unit` | Run all unit tests |
277
+ | `make integration` | Run all integration tests |
278
+ | `make acceptance` | Run all acceptance tests |
279
+ | `make coverage` | Run coverage tests |
280
+ | `make install` | Install all dependencies |
281
+ | `make update` | Update all dependencies |
282
+ | `make add-dep` | Add a new dependency |
283
+ | `make remove-dep` | Remove a dependency |
284
+ | `make check-typing` | Runs type checker |
285
+ | `make check-lint` | Checks lint code with Ruff |
286
+ | `make lint` | Fixes lint errors code with Ruff |
287
+ | `make check-format` | Checks format code with Ruff |
288
+ | `make format` | Format code with Ruff |
289
+ | `make local-setup` | Set up the local development environment |
290
+ | `make show` | Show all installed dependencies |
291
+ | `make search` | Show details of a specific package |
292
+
293
+ !!! info
294
+ The commands `unit`, `integration` and `acceptance` are defined based on the assumption that you will mark your tests with
295
+ the `@pytest.mark.unit`, `@pytest.mark.integration` and `@pytest.mark.acceptance` decorators.
296
+ If this is not your case, you change the commands as needed in the Makefile to match your test structure.
297
+
298
+ ### GitHub actions and workflows
266
299
 
267
300
  !!! info
268
301
  When selecting this feature, by default, the library will include `mypy` as a type checker, `ruff` as a linter and formatter, and
269
302
  `pytest` as a test runner. If you want to use different tools, you can change them later in the workflow file.
270
303
 
271
- ### Makefile
304
+ A common feature in projects is to have a CI/CD pipeline that will run some tasks. This option will include the following:
272
305
 
273
- A Makefile is a common tool to run tasks in your project. This feature is specially useful when automating tasks and
274
- avoid remembering all the commands. The default Makefile will include the following commands:
306
+ - A GitHub action that will set up your Python environment in your pipeline using the dependency manager you selected.
307
+ - A workflow that will execute all lint, type and code formatting checks.
308
+ - A workflow that will run all tests in your project.
275
309
 
276
- | Command | Description |
277
- |------------------------|------------------------------------------|
278
- | `make help` | Show available commands |
279
- | `make test` | Run all tests |
280
- | `make unit` | Run unit tests for changed files |
281
- | `make all-unit` | Run all unit tests |
282
- | `make integration` | Run integration tests for changed files |
283
- | `make all-integration` | Run all integration tests |
284
- | `make all-acceptance` | Run all acceptance tests |
285
- | `make coverage` | Run coverage tests |
286
- | `make install` | Install all dependencies |
287
- | `make update` | Update all dependencies |
288
- | `make add-dep` | Add a new dependency |
289
- | `make remove-dep` | Remove a dependency |
290
- | `make check-typing` | Runs type checker |
291
- | `make check-lint` | Checks lint code with Ruff |
292
- | `make lint` | Fixes lint errors code with Ruff |
293
- | `make check-format` | Checks format code with Ruff |
294
- | `make format` | Format code with Ruff |
295
- | `make local-setup` | Set up the local development environment |
296
- | `make show` | Show all installed dependencies |
297
- | `make search` | Show details of a specific package |
310
+ !!! info
311
+ The test workflow will use `unit`, `integration` and `acceptance` make commands presented in the [previous section](#makefile).
312
+ These commands are defined based on the assumption that you will mark your tests with the `@pytest.mark.unit`, `@pytest.mark.integration` and `@pytest.mark.acceptance` decorators.
313
+ If this is not your case, you change the commands in the workflow file to match your test structure.
298
314
 
299
315
  ### Logger
300
316
 
@@ -348,6 +364,10 @@ will set up a decoupled implementation of an event bus using RabbitMQ. This impl
348
364
 
349
365
  You can create a new project using a custom template instead of one of the [default templates](#default-templates).
350
366
 
367
+ !!! important
368
+ When using a custom template, the possibility of using [out-of-the-box implementations](#out-of-the-box-implementations)
369
+ is not available.
370
+
351
371
  This custom template must follow a specific structure and syntax to be able to generate the project correctly.
352
372
 
353
373
  - You must use a yml file to define the folder structure.
@@ -43,6 +43,9 @@ For detailed instructions and examples, please refer to the [Commands documentat
43
43
 
44
44
  ## Installation
45
45
 
46
+ !!! important
47
+ For the moment, `instant-python` is only supported in Unix-like systems. Windows support is coming soon.
48
+
46
49
  The latest version of `instant-python` can be installed from PyPI:
47
50
 
48
51
  ```bash
@@ -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,
@@ -0,0 +1,62 @@
1
+ from typing import Union
2
+
3
+ from instant_python.configuration.question.boolean_question import BooleanQuestion
4
+ from instant_python.configuration.question.choice_question import ChoiceQuestion
5
+ from instant_python.configuration.question.conditional_question import ConditionalQuestion
6
+ from instant_python.configuration.question.free_text_question import FreeTextQuestion
7
+ from instant_python.configuration.question.multiple_choice_question import MultipleChoiceQuestion
8
+ from instant_python.configuration.question.questionary import Questionary
9
+ from instant_python.configuration.step.steps import Step
10
+ from instant_python.shared.supported_built_in_features import SupportedBuiltInFeatures
11
+ from instant_python.shared.supported_templates import SupportedTemplates
12
+
13
+
14
+ class TemplateStep(Step):
15
+ def __init__(self, questionary: Questionary) -> None:
16
+ super().__init__(questionary)
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(),
28
+ questionary=self._questionary,
29
+ ),
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,
35
+ questionary=self._questionary,
36
+ ),
37
+ subquestions=[
38
+ FreeTextQuestion(
39
+ key="bounded_context",
40
+ message="Enter the bounded context name",
41
+ default="backoffice",
42
+ questionary=self._questionary,
43
+ ),
44
+ FreeTextQuestion(
45
+ key="aggregate_name",
46
+ message="Enter the aggregate name",
47
+ default="user",
48
+ questionary=self._questionary,
49
+ ),
50
+ ],
51
+ condition=True,
52
+ ),
53
+ condition=SupportedTemplates.DDD,
54
+ )
55
+
56
+ def run(self) -> dict[str, dict[str, Union[str, list[str]]]]:
57
+ answers = self._template_question.ask()
58
+
59
+ if answers["name"] != SupportedTemplates.CUSTOM:
60
+ answers.update(self._built_in_features_question.ask())
61
+
62
+ return {"template": answers}
@@ -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) }}
@@ -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,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) }}
@@ -63,3 +63,7 @@ show: ## Show installed dependencies.
63
63
  search: ## Show package details.
64
64
  @read -p "Enter package name to search: " package;\
65
65
  uv pip show $$package
66
+
67
+ .PHONY: tox
68
+ tox: ## Run tox tests
69
+ @uv run tox
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "instant-python"
7
- version = "0.6.0"
7
+ version = "0.6.2"
8
8
  description = "Instant boilerplate generation for Python projects"
9
9
  readme = "README.md"
10
10
  license = { file = "LICENSE" }
@@ -61,8 +61,6 @@ git = [
61
61
  lint = [
62
62
  "mypy>=1.16.0",
63
63
  "ruff>=0.11.12",
64
- "tox>=4.25.0",
65
- "vermin>=1.6.0",
66
64
  ]
67
65
  test = [
68
66
  "approvaltests>=14.6.0",
@@ -73,4 +71,6 @@ test = [
73
71
  "pytest>=8.3.5",
74
72
  "pytest-sugar>=1.0.0",
75
73
  "pytest-watch>=4.2.0",
74
+ "tox>=4.25.0",
75
+ "vermin>=1.6.0",
76
76
  ]
@@ -378,7 +378,7 @@ wheels = [
378
378
 
379
379
  [[package]]
380
380
  name = "instant-python"
381
- version = "0.6.0"
381
+ version = "0.6.2"
382
382
  source = { editable = "." }
383
383
  dependencies = [
384
384
  { name = "jinja2" },
@@ -401,8 +401,6 @@ git = [
401
401
  lint = [
402
402
  { name = "mypy" },
403
403
  { name = "ruff" },
404
- { name = "tox" },
405
- { name = "vermin" },
406
404
  ]
407
405
  test = [
408
406
  { name = "approvaltests" },
@@ -413,6 +411,8 @@ test = [
413
411
  { name = "pytest" },
414
412
  { name = "pytest-sugar" },
415
413
  { name = "pytest-watch" },
414
+ { name = "tox" },
415
+ { name = "vermin" },
416
416
  ]
417
417
 
418
418
  [package.metadata]
@@ -435,8 +435,6 @@ git = [{ name = "commitizen", specifier = ">=4.2.2" }]
435
435
  lint = [
436
436
  { name = "mypy", specifier = ">=1.16.0" },
437
437
  { name = "ruff", specifier = ">=0.11.12" },
438
- { name = "tox", specifier = ">=4.25.0" },
439
- { name = "vermin", specifier = ">=1.6.0" },
440
438
  ]
441
439
  test = [
442
440
  { name = "approvaltests", specifier = ">=14.6.0" },
@@ -447,6 +445,8 @@ test = [
447
445
  { name = "pytest", specifier = ">=8.3.5" },
448
446
  { name = "pytest-sugar", specifier = ">=1.0.0" },
449
447
  { name = "pytest-watch", specifier = ">=4.2.0" },
448
+ { name = "tox", specifier = ">=4.25.0" },
449
+ { name = "vermin", specifier = ">=1.6.0" },
450
450
  ]
451
451
 
452
452
  [[package]]