instant-python 0.6.2__tar.gz → 0.8.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 (298) hide show
  1. {instant_python-0.6.2 → instant_python-0.8.0}/CHANGELOG.md +25 -0
  2. {instant_python-0.6.2 → instant_python-0.8.0}/PKG-INFO +2 -1
  3. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/commands/init.py +4 -0
  4. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/dependency_manager/dependency_manager.py +2 -0
  5. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/dependency_manager/pdm_dependency_manager.py +16 -2
  6. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/dependency_manager/uv_dependency_manager.py +25 -2
  7. instant_python-0.8.0/instant_python/formatter/project_formatter.py +19 -0
  8. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/clean_architecture/source.yml.j2 +4 -1
  9. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/domain_driven_design/source.yml.j2 +5 -2
  10. instant_python-0.8.0/instant_python/templates/project_structure/fastapi_domain.yml.j2 +7 -0
  11. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/standard_project/source.yml.j2 +1 -0
  12. {instant_python-0.6.2 → instant_python-0.8.0}/pyproject.toml +4 -3
  13. instant_python-0.8.0/test/formatter/mock_project_formatter.py +15 -0
  14. instant_python-0.8.0/test/formatter/test_project_formatter.py +13 -0
  15. instant_python-0.8.0/test/project_creator/__init__.py +0 -0
  16. instant_python-0.8.0/test/render/__init__.py +0 -0
  17. {instant_python-0.6.2 → instant_python-0.8.0}/uv.lock +1 -1
  18. {instant_python-0.6.2 → instant_python-0.8.0}/.github/FUNDING.yml +0 -0
  19. {instant_python-0.6.2 → instant_python-0.8.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  20. {instant_python-0.6.2 → instant_python-0.8.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  21. {instant_python-0.6.2 → instant_python-0.8.0}/.github/actions/python_setup/action.yml +0 -0
  22. {instant_python-0.6.2 → instant_python-0.8.0}/.github/workflows/pages.yml +0 -0
  23. {instant_python-0.6.2 → instant_python-0.8.0}/.github/workflows/publish.yml +0 -0
  24. {instant_python-0.6.2 → instant_python-0.8.0}/.github/workflows/release.yml +0 -0
  25. {instant_python-0.6.2 → instant_python-0.8.0}/.github/workflows/test_lint.yml +0 -0
  26. {instant_python-0.6.2 → instant_python-0.8.0}/.gitignore +0 -0
  27. {instant_python-0.6.2 → instant_python-0.8.0}/.python-version +0 -0
  28. {instant_python-0.6.2 → instant_python-0.8.0}/LICENSE +0 -0
  29. {instant_python-0.6.2 → instant_python-0.8.0}/README.md +0 -0
  30. {instant_python-0.6.2 → instant_python-0.8.0}/cz.yaml +0 -0
  31. {instant_python-0.6.2 → instant_python-0.8.0}/docs/assets/favicon.svg +0 -0
  32. {instant_python-0.6.2 → instant_python-0.8.0}/docs/assets/logo.svg +0 -0
  33. {instant_python-0.6.2 → instant_python-0.8.0}/docs/downloads_macro.py +0 -0
  34. {instant_python-0.6.2 → instant_python-0.8.0}/docs/examples/configuration.md +0 -0
  35. {instant_python-0.6.2 → instant_python-0.8.0}/docs/examples/custom_template.md +0 -0
  36. {instant_python-0.6.2 → instant_python-0.8.0}/docs/guide/command_config.md +0 -0
  37. {instant_python-0.6.2 → instant_python-0.8.0}/docs/guide/command_init.md +0 -0
  38. {instant_python-0.6.2 → instant_python-0.8.0}/docs/home/contributing.md +0 -0
  39. {instant_python-0.6.2 → instant_python-0.8.0}/docs/home/getting_started.md +0 -0
  40. {instant_python-0.6.2 → instant_python-0.8.0}/docs/home/index.md +0 -0
  41. {instant_python-0.6.2 → instant_python-0.8.0}/docs/home/releases.md +0 -0
  42. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/__init__.py +0 -0
  43. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/cli.py +0 -0
  44. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/commands/__init__.py +0 -0
  45. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/commands/config.py +0 -0
  46. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/__init__.py +0 -0
  47. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/configuration_schema.py +0 -0
  48. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/dependency/__init__.py +0 -0
  49. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/dependency/dependency_configuration.py +0 -0
  50. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/dependency/not_dev_dependency_included_in_group.py +0 -0
  51. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/general/__init__.py +0 -0
  52. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/general/general_configuration.py +0 -0
  53. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/general/invalid_dependency_manager_value.py +0 -0
  54. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/general/invalid_license_value.py +0 -0
  55. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/general/invalid_python_version_value.py +0 -0
  56. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/git/__init__.py +0 -0
  57. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/git/git_configuration.py +0 -0
  58. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/git/git_user_or_email_not_present.py +0 -0
  59. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/parser/__init__.py +0 -0
  60. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/parser/config_key_not_present.py +0 -0
  61. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/parser/configuration_file_not_found.py +0 -0
  62. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/parser/empty_configuration_not_allowed.py +0 -0
  63. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/parser/missing_mandatory_fields.py +0 -0
  64. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/parser/parser.py +0 -0
  65. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/question/__init__.py +0 -0
  66. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/question/boolean_question.py +0 -0
  67. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/question/choice_question.py +0 -0
  68. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/question/conditional_question.py +0 -0
  69. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/question/free_text_question.py +0 -0
  70. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/question/multiple_choice_question.py +0 -0
  71. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/question/question.py +0 -0
  72. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/question/questionary.py +0 -0
  73. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/question_wizard.py +0 -0
  74. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/step/__init__.py +0 -0
  75. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/step/dependencies_step.py +0 -0
  76. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/step/general_step.py +0 -0
  77. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/step/git_step.py +0 -0
  78. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/step/steps.py +0 -0
  79. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/step/template_step.py +0 -0
  80. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/template/__init__.py +0 -0
  81. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/template/bounded_context_not_applicable.py +0 -0
  82. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/template/bounded_context_not_especified.py +0 -0
  83. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/template/invalid_built_in_features_values.py +0 -0
  84. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/template/invalid_template_value.py +0 -0
  85. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/configuration/template/template_configuration.py +0 -0
  86. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/dependency_manager/__init__.py +0 -0
  87. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/dependency_manager/command_execution_error.py +0 -0
  88. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/dependency_manager/dependency_manager_factory.py +0 -0
  89. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/dependency_manager/unknown_dependency_manager_error.py +0 -0
  90. {instant_python-0.6.2/instant_python/git → instant_python-0.8.0/instant_python/formatter}/__init__.py +0 -0
  91. {instant_python-0.6.2/instant_python/project_creator → instant_python-0.8.0/instant_python/git}/__init__.py +0 -0
  92. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/git/git_configurer.py +0 -0
  93. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/instant_python_typer.py +0 -0
  94. {instant_python-0.6.2/instant_python/render → instant_python-0.8.0/instant_python/project_creator}/__init__.py +0 -0
  95. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/project_creator/directory.py +0 -0
  96. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/project_creator/file.py +0 -0
  97. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/project_creator/file_has_not_been_created.py +0 -0
  98. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/project_creator/file_system.py +0 -0
  99. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/project_creator/node.py +0 -0
  100. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/project_creator/unknown_node_typer_error.py +0 -0
  101. {instant_python-0.6.2/instant_python/shared → instant_python-0.8.0/instant_python/render}/__init__.py +0 -0
  102. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/render/custom_project_renderer.py +0 -0
  103. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/render/jinja_custom_filters.py +0 -0
  104. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/render/jinja_environment.py +0 -0
  105. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/render/jinja_project_renderer.py +0 -0
  106. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/render/template_file_not_found_error.py +0 -0
  107. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/render/unknown_template_error.py +0 -0
  108. {instant_python-0.6.2/instant_python/templates/boilerplate/event_bus → instant_python-0.8.0/instant_python/shared}/__init__.py +0 -0
  109. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/shared/application_error.py +0 -0
  110. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/shared/error_types.py +0 -0
  111. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/shared/supported_built_in_features.py +0 -0
  112. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/shared/supported_licenses.py +0 -0
  113. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/shared/supported_managers.py +0 -0
  114. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/shared/supported_python_versions.py +0 -0
  115. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/shared/supported_templates.py +0 -0
  116. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/.gitignore +0 -0
  117. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/.pre-commit-config.yml +0 -0
  118. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/.python-version +0 -0
  119. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/LICENSE +0 -0
  120. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/README.md +0 -0
  121. {instant_python-0.6.2/instant_python/templates/boilerplate/exceptions → instant_python-0.8.0/instant_python/templates/boilerplate/event_bus}/__init__.py +0 -0
  122. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/event_bus/aggregate_root.py +0 -0
  123. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/event_bus/domain_event.py +0 -0
  124. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/event_bus/domain_event_json_deserializer.py +0 -0
  125. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/event_bus/domain_event_json_serializer.py +0 -0
  126. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/event_bus/domain_event_subscriber.py +0 -0
  127. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/event_bus/event_bus.py +0 -0
  128. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/event_bus/exchange_type.py +0 -0
  129. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/event_bus/mock_event_bus.py +0 -0
  130. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_configurer.py +0 -0
  131. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_connection.py +0 -0
  132. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_consumer.py +0 -0
  133. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_event_bus.py +0 -0
  134. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_queue_formatter.py +0 -0
  135. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_settings.py +0 -0
  136. {instant_python-0.6.2/instant_python/templates/boilerplate/fastapi → instant_python-0.8.0/instant_python/templates/boilerplate/exceptions}/__init__.py +0 -0
  137. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/exceptions/domain_error.py +0 -0
  138. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/exceptions/domain_event_type_not_found_error.py +0 -0
  139. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/exceptions/incorrect_value_type_error.py +0 -0
  140. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/exceptions/invalid_id_format_error.py +0 -0
  141. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/exceptions/invalid_negative_value_error.py +0 -0
  142. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/exceptions/rabbit_mq_connection_not_established_error.py +0 -0
  143. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/exceptions/required_value_error.py +0 -0
  144. {instant_python-0.6.2/instant_python/templates/boilerplate/logger → instant_python-0.8.0/instant_python/templates/boilerplate/fastapi}/__init__.py +0 -0
  145. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/fastapi/application.py +0 -0
  146. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/fastapi/http_response.py +0 -0
  147. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/fastapi/lifespan.py +0 -0
  148. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/fastapi/status_code.py +0 -0
  149. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/github/action.yml +0 -0
  150. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/github/lint.yml +0 -0
  151. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/github/test.yml +0 -0
  152. {instant_python-0.6.2/instant_python/templates/boilerplate/persistence → instant_python-0.8.0/instant_python/templates/boilerplate/logger}/__init__.py +0 -0
  153. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/logger/json_formatter.py +0 -0
  154. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/logger/logger.py +0 -0
  155. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/mypy.ini +0 -0
  156. {instant_python-0.6.2/instant_python/templates/boilerplate/persistence/async → instant_python-0.8.0/instant_python/templates/boilerplate/persistence}/__init__.py +0 -0
  157. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/persistence/alembic_migrator.py +0 -0
  158. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/persistence/async/README.md +0 -0
  159. {instant_python-0.6.2/instant_python/templates/boilerplate/persistence/synchronous → instant_python-0.8.0/instant_python/templates/boilerplate/persistence/async}/__init__.py +0 -0
  160. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/persistence/async/alembic.ini +0 -0
  161. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/persistence/async/async_engine_fixture.py +0 -0
  162. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/persistence/async/env.py +0 -0
  163. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/persistence/async/models_metadata.py +0 -0
  164. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/persistence/async/postgres_settings.py +0 -0
  165. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/persistence/async/script.py.mako +0 -0
  166. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/persistence/async/sqlalchemy_repository.py +0 -0
  167. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/persistence/base.py +0 -0
  168. {instant_python-0.6.2/instant_python/templates/boilerplate/value_object → instant_python-0.8.0/instant_python/templates/boilerplate/persistence/synchronous}/__init__.py +0 -0
  169. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/persistence/synchronous/session_maker.py +0 -0
  170. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/persistence/synchronous/sqlalchemy_repository.py +0 -0
  171. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/pyproject.toml +0 -0
  172. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/pytest.ini +0 -0
  173. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/random_generator.py +0 -0
  174. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/scripts/add_dependency.sh +0 -0
  175. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/scripts/create_aggregate.py +0 -0
  176. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/scripts/insert_template.py +0 -0
  177. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/scripts/integration.sh +0 -0
  178. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/scripts/local_setup.sh +0 -0
  179. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/scripts/makefile +0 -0
  180. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/scripts/post-merge +0 -0
  181. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/scripts/pre-commit +0 -0
  182. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/scripts/pre-push +0 -0
  183. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/scripts/remove_dependency.sh +0 -0
  184. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/scripts/unit.sh +0 -0
  185. {instant_python-0.6.2/test → instant_python-0.8.0/instant_python/templates/boilerplate/value_object}/__init__.py +0 -0
  186. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/value_object/int_value_object.py +0 -0
  187. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/value_object/string_value_object.py +0 -0
  188. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/value_object/uuid.py +0 -0
  189. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/boilerplate/value_object/value_object.py +0 -0
  190. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/alembic_migrator.yml.j2 +0 -0
  191. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/async_alembic.yml.j2 +0 -0
  192. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/async_sqlalchemy.yml.j2 +0 -0
  193. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/clean_architecture/main_structure.yml.j2 +0 -0
  194. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/clean_architecture/test.yml.j2 +0 -0
  195. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/domain_driven_design/bounded_context.yml.j2 +0 -0
  196. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/domain_driven_design/main_structure.yml.j2 +0 -0
  197. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/domain_driven_design/test.yml.j2 +0 -0
  198. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/event_bus_domain.yml.j2 +0 -0
  199. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/event_bus_infra.yml.j2 +0 -0
  200. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/fastapi_app.yml.j2 +0 -0
  201. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/fastapi_infra.yml.j2 +0 -0
  202. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/github_action.yml.j2 +0 -0
  203. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/gitignore.yml.j2 +0 -0
  204. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/license.yml.j2 +0 -0
  205. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/logger.yml.j2 +0 -0
  206. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/macros.j2 +0 -0
  207. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/makefile.yml.j2 +0 -0
  208. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/mypy.yml.j2 +0 -0
  209. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/pre_commit.yml.j2 +0 -0
  210. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/pyproject.yml.j2 +0 -0
  211. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/pytest.yml.j2 +0 -0
  212. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/python_version.yml.j2 +0 -0
  213. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/readme.yml.j2 +0 -0
  214. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/standard_project/main_structure.yml.j2 +0 -0
  215. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/standard_project/test.yml.j2 +0 -0
  216. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/synchronous_sqlalchemy.yml.j2 +0 -0
  217. {instant_python-0.6.2 → instant_python-0.8.0}/instant_python/templates/project_structure/value_objects.yml.j2 +0 -0
  218. {instant_python-0.6.2 → instant_python-0.8.0}/makefile +0 -0
  219. {instant_python-0.6.2 → instant_python-0.8.0}/mkdocs.yml +0 -0
  220. {instant_python-0.6.2 → instant_python-0.8.0}/mypy.ini +0 -0
  221. {instant_python-0.6.2 → instant_python-0.8.0}/scripts/add_dependency.sh +0 -0
  222. {instant_python-0.6.2 → instant_python-0.8.0}/scripts/remove_dependency.sh +0 -0
  223. {instant_python-0.6.2/test/configuration → instant_python-0.8.0/test}/__init__.py +0 -0
  224. {instant_python-0.6.2/test/configuration/dependency → instant_python-0.8.0/test/configuration}/__init__.py +0 -0
  225. {instant_python-0.6.2/test/configuration/general → instant_python-0.8.0/test/configuration/dependency}/__init__.py +0 -0
  226. {instant_python-0.6.2 → instant_python-0.8.0}/test/configuration/dependency/dependency_configuration_mother.py +0 -0
  227. {instant_python-0.6.2 → instant_python-0.8.0}/test/configuration/dependency/test_dependency_configuration.py +0 -0
  228. {instant_python-0.6.2/test/configuration/git → instant_python-0.8.0/test/configuration/general}/__init__.py +0 -0
  229. {instant_python-0.6.2 → instant_python-0.8.0}/test/configuration/general/general_configuration_mother.py +0 -0
  230. {instant_python-0.6.2 → instant_python-0.8.0}/test/configuration/general/test_general_configuration.py +0 -0
  231. {instant_python-0.6.2/test/configuration/parser → instant_python-0.8.0/test/configuration/git}/__init__.py +0 -0
  232. {instant_python-0.6.2 → instant_python-0.8.0}/test/configuration/git/git_configuration_mother.py +0 -0
  233. {instant_python-0.6.2 → instant_python-0.8.0}/test/configuration/git/test_git_configuration.py +0 -0
  234. {instant_python-0.6.2/test/configuration/parser/resources → instant_python-0.8.0/test/configuration/parser}/__init__.py +0 -0
  235. {instant_python-0.6.2 → instant_python-0.8.0}/test/configuration/parser/approvaltests_config.json +0 -0
  236. {instant_python-0.6.2 → instant_python-0.8.0}/test/configuration/parser/approved_files/TestParser.test_should_parse_configuration.approved.txt +0 -0
  237. {instant_python-0.6.2/test/configuration/question → instant_python-0.8.0/test/configuration/parser/resources}/__init__.py +0 -0
  238. {instant_python-0.6.2 → instant_python-0.8.0}/test/configuration/parser/resources/config.yml +0 -0
  239. {instant_python-0.6.2 → instant_python-0.8.0}/test/configuration/parser/resources/empty_config.yml +0 -0
  240. {instant_python-0.6.2 → instant_python-0.8.0}/test/configuration/parser/resources/missing_dependencies_fields_config.yml +0 -0
  241. {instant_python-0.6.2 → instant_python-0.8.0}/test/configuration/parser/resources/missing_general_fields_config.yml +0 -0
  242. {instant_python-0.6.2 → instant_python-0.8.0}/test/configuration/parser/resources/missing_git_fields_config.yml +0 -0
  243. {instant_python-0.6.2 → instant_python-0.8.0}/test/configuration/parser/resources/missing_keys_config.yml +0 -0
  244. {instant_python-0.6.2 → instant_python-0.8.0}/test/configuration/parser/resources/missing_template_fields_config.yml +0 -0
  245. {instant_python-0.6.2 → instant_python-0.8.0}/test/configuration/parser/test_parser.py +0 -0
  246. {instant_python-0.6.2/test/configuration/template → instant_python-0.8.0/test/configuration/question}/__init__.py +0 -0
  247. {instant_python-0.6.2 → instant_python-0.8.0}/test/configuration/question/test_boolean_question.py +0 -0
  248. {instant_python-0.6.2 → instant_python-0.8.0}/test/configuration/question/test_choice_question.py +0 -0
  249. {instant_python-0.6.2 → instant_python-0.8.0}/test/configuration/question/test_free_text_question.py +0 -0
  250. {instant_python-0.6.2 → instant_python-0.8.0}/test/configuration/question/test_multiple_choice_question.py +0 -0
  251. {instant_python-0.6.2/test/dependency_manager → instant_python-0.8.0/test/configuration/template}/__init__.py +0 -0
  252. {instant_python-0.6.2 → instant_python-0.8.0}/test/configuration/template/template_configuration_mother.py +0 -0
  253. {instant_python-0.6.2 → instant_python-0.8.0}/test/configuration/template/test_template_configuration.py +0 -0
  254. {instant_python-0.6.2/test/git → instant_python-0.8.0/test/dependency_manager}/__init__.py +0 -0
  255. {instant_python-0.6.2 → instant_python-0.8.0}/test/dependency_manager/mock_pdm_dependency_manager.py +0 -0
  256. {instant_python-0.6.2 → instant_python-0.8.0}/test/dependency_manager/mock_uv_dependency_manager.py +0 -0
  257. {instant_python-0.6.2 → instant_python-0.8.0}/test/dependency_manager/test_pdm_dependency_manager.py +0 -0
  258. {instant_python-0.6.2 → instant_python-0.8.0}/test/dependency_manager/test_uv_dependency_manager.py +0 -0
  259. {instant_python-0.6.2/test/project_creator → instant_python-0.8.0/test/formatter}/__init__.py +0 -0
  260. {instant_python-0.6.2/test/render → instant_python-0.8.0/test/git}/__init__.py +0 -0
  261. {instant_python-0.6.2 → instant_python-0.8.0}/test/git/mock_git_configurer.py +0 -0
  262. {instant_python-0.6.2 → instant_python-0.8.0}/test/git/test_git_configurer.py +0 -0
  263. {instant_python-0.6.2 → instant_python-0.8.0}/test/project_creator/approvaltests_config.json +0 -0
  264. {instant_python-0.6.2 → instant_python-0.8.0}/test/project_creator/approved_files/TestFileSystem.test_should_create_file_system_in_disk.rendered_custom_project_structure.json.approved.txt +0 -0
  265. {instant_python-0.6.2 → instant_python-0.8.0}/test/project_creator/approved_files/TestFileSystem.test_should_create_file_system_in_disk.rendered_project_structure.json.approved.txt +0 -0
  266. {instant_python-0.6.2 → instant_python-0.8.0}/test/project_creator/approved_files/TestFileSystem.test_should_create_folders_and_files.approved.txt +0 -0
  267. {instant_python-0.6.2 → instant_python-0.8.0}/test/project_creator/approved_files/TestFileSystem.test_should_generate_file_system_tree.approved.txt +0 -0
  268. {instant_python-0.6.2 → instant_python-0.8.0}/test/project_creator/directory_mother.py +0 -0
  269. {instant_python-0.6.2 → instant_python-0.8.0}/test/project_creator/resources/boilerplate/exceptions/domain_error.py +0 -0
  270. {instant_python-0.6.2 → instant_python-0.8.0}/test/project_creator/resources/boilerplate/exceptions/domain_error_simple.py +0 -0
  271. {instant_python-0.6.2 → instant_python-0.8.0}/test/project_creator/resources/clean_architecture/main_structure.yml.j2 +0 -0
  272. {instant_python-0.6.2 → instant_python-0.8.0}/test/project_creator/resources/config.yml +0 -0
  273. {instant_python-0.6.2 → instant_python-0.8.0}/test/project_creator/resources/rendered_custom_project_structure.json +0 -0
  274. {instant_python-0.6.2 → instant_python-0.8.0}/test/project_creator/resources/rendered_project_structure.json +0 -0
  275. {instant_python-0.6.2 → instant_python-0.8.0}/test/project_creator/test_directory.py +0 -0
  276. {instant_python-0.6.2 → instant_python-0.8.0}/test/project_creator/test_file.py +0 -0
  277. {instant_python-0.6.2 → instant_python-0.8.0}/test/project_creator/test_file_system.py +0 -0
  278. {instant_python-0.6.2 → instant_python-0.8.0}/test/random_generator.py +0 -0
  279. {instant_python-0.6.2 → instant_python-0.8.0}/test/render/approvaltests_config.json +0 -0
  280. {instant_python-0.6.2 → instant_python-0.8.0}/test/render/approved_files/TestCustomProjectRenderer.test_should_render_custom_template.approved.txt +0 -0
  281. {instant_python-0.6.2 → instant_python-0.8.0}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.clean_architecture_config.yml.approved.txt +0 -0
  282. {instant_python-0.6.2 → instant_python-0.8.0}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.domain_driven_design_config.yml.approved.txt +0 -0
  283. {instant_python-0.6.2 → instant_python-0.8.0}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.received.txt +0 -0
  284. {instant_python-0.6.2 → instant_python-0.8.0}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.standard_project_with_dependency_config.yml.approved.txt +0 -0
  285. {instant_python-0.6.2 → instant_python-0.8.0}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.standard_project_with_git_config.yml.approved.txt +0 -0
  286. {instant_python-0.6.2 → instant_python-0.8.0}/test/render/resources/clean_architecture/main_structure.yml.j2 +0 -0
  287. {instant_python-0.6.2 → instant_python-0.8.0}/test/render/resources/clean_architecture_config.yml +0 -0
  288. {instant_python-0.6.2 → instant_python-0.8.0}/test/render/resources/custom_template.yml +0 -0
  289. {instant_python-0.6.2 → instant_python-0.8.0}/test/render/resources/domain_driven_design/main_structure.yml.j2 +0 -0
  290. {instant_python-0.6.2 → instant_python-0.8.0}/test/render/resources/domain_driven_design_config.yml +0 -0
  291. {instant_python-0.6.2 → instant_python-0.8.0}/test/render/resources/standard_project/main_structure.yml.j2 +0 -0
  292. {instant_python-0.6.2 → instant_python-0.8.0}/test/render/resources/standard_project_with_dependency_config.yml +0 -0
  293. {instant_python-0.6.2 → instant_python-0.8.0}/test/render/resources/standard_project_with_git_config.yml +0 -0
  294. {instant_python-0.6.2 → instant_python-0.8.0}/test/render/resources/test_template.j2 +0 -0
  295. {instant_python-0.6.2 → instant_python-0.8.0}/test/render/test_custom_project_renderer.py +0 -0
  296. {instant_python-0.6.2 → instant_python-0.8.0}/test/render/test_jinja_environment.py +0 -0
  297. {instant_python-0.6.2 → instant_python-0.8.0}/test/render/test_jinja_project_renderer.py +0 -0
  298. {instant_python-0.6.2 → instant_python-0.8.0}/tox.ini +0 -0
@@ -1,3 +1,28 @@
1
+ ## 0.8.0 (2025-07-01)
2
+
3
+ ### ✨ Features
4
+
5
+ - **dependency-manager**: get dependency manager installation command based on system os
6
+ - **dependency-manager**: set different commands for dependency executable based on system os
7
+ - **dependency-manager**: add os information in dependency manager to be able to modify installation depending on user os
8
+
9
+ ### ♻️ Code Refactoring
10
+
11
+ - **dependency-manager**: add message for the user to notify uv should be added to the path when installing it on windows
12
+ - **dependency-manager**: notify the user when all dependencies have been installed
13
+ - **dependency-manager**: extract method to set executable path setting based on system os
14
+
15
+ ## 0.7.0 (2025-06-30)
16
+
17
+ ### ✨ Features
18
+
19
+ - **commands**: call project formatter in 'init' command once the file system has been generated
20
+ - **formatter**: add project formatter to be able to format included code in the project
21
+
22
+ ### 🐛 Bug Fixes
23
+
24
+ - **templates**: include DomainError template when using fastapi application built in feature
25
+
1
26
  ## 0.6.2 (2025-06-30)
2
27
 
3
28
  ### 🐛 Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: instant-python
3
- Version: 0.6.2
3
+ Version: 0.8.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/
@@ -210,6 +210,7 @@ License-File: LICENSE
210
210
  Classifier: Environment :: Console
211
211
  Classifier: Intended Audience :: Developers
212
212
  Classifier: Operating System :: MacOS
213
+ Classifier: Operating System :: Microsoft :: Windows
213
214
  Classifier: Operating System :: POSIX :: Linux
214
215
  Classifier: Operating System :: Unix
215
216
  Classifier: Topic :: Software Development :: Code Generators
@@ -2,6 +2,7 @@ import typer
2
2
 
3
3
  from instant_python.configuration.parser.parser import Parser
4
4
  from instant_python.dependency_manager.dependency_manager_factory import DependencyManagerFactory
5
+ from instant_python.formatter.project_formatter import ProjectFormatter
5
6
  from instant_python.git.git_configurer import GitConfigurer
6
7
  from instant_python.project_creator.file_system import FileSystem
7
8
  from instant_python.render.custom_project_renderer import CustomProjectRenderer
@@ -44,6 +45,9 @@ def create_new_project(
44
45
  dependencies=configuration.dependencies,
45
46
  )
46
47
 
48
+ formatter = ProjectFormatter(project_directory=configuration.project_folder_name)
49
+ formatter.format()
50
+
47
51
  git_configurer = GitConfigurer(project_directory=configuration.project_folder_name)
48
52
  git_configurer.setup_repository(configuration.git)
49
53
  configuration.save_on_project_folder()
@@ -1,5 +1,6 @@
1
1
  import subprocess
2
2
  from abc import ABC, abstractmethod
3
+ import sys
3
4
 
4
5
  from instant_python.configuration.dependency.dependency_configuration import DependencyConfiguration
5
6
 
@@ -7,6 +8,7 @@ from instant_python.configuration.dependency.dependency_configuration import Dep
7
8
  class DependencyManager(ABC):
8
9
  def __init__(self, project_directory: str) -> None:
9
10
  self._project_directory = project_directory
11
+ self._system_os = sys.platform
10
12
 
11
13
  @abstractmethod
12
14
  def setup_environment(self, python_version: str, dependencies: list[DependencyConfiguration]) -> None:
@@ -1,3 +1,4 @@
1
+ from pathlib import Path
1
2
  import subprocess
2
3
 
3
4
  from instant_python.configuration.dependency.dependency_configuration import DependencyConfiguration
@@ -8,7 +9,7 @@ from instant_python.dependency_manager.command_execution_error import CommandExe
8
9
  class PdmDependencyManager(DependencyManager):
9
10
  def __init__(self, project_directory: str) -> None:
10
11
  super().__init__(project_directory)
11
- self._pdm = "~/.local/bin/pdm"
12
+ self._pdm = self._set_pdm_executable_based_on_os()
12
13
 
13
14
  def setup_environment(self, python_version: str, dependencies: list[DependencyConfiguration]) -> None:
14
15
  try:
@@ -20,9 +21,21 @@ class PdmDependencyManager(DependencyManager):
20
21
 
21
22
  def _install(self) -> None:
22
23
  print(">>> Installing pdm...")
23
- self._run_command(command="curl -sSL https://pdm-project.org/install-pdm.py | python3 -")
24
+ self._run_command(command=self._get_installation_command_based_on_os())
24
25
  print(">>> pdm installed successfully")
25
26
 
27
+ def _set_pdm_executable_based_on_os(self):
28
+ return (
29
+ f"{str(Path.home() / 'AppData' / 'Roaming' / 'Python' / 'Scripts' / 'pdm.exe')}"
30
+ if self._system_os.startswith("win")
31
+ else "~/.local/bin/pdm"
32
+ )
33
+
34
+ def _get_installation_command_based_on_os(self) -> str:
35
+ if self._system_os.startswith("win"):
36
+ return 'powershell -ExecutionPolicy ByPass -c "irm https://pdm-project.org/install-pdm.py | py -"'
37
+ return "curl -sSL https://pdm-project.org/install-pdm.py | python3 -"
38
+
26
39
  def _install_python(self, version: str) -> None:
27
40
  print(f">>> Installing Python {version}...")
28
41
  self._run_command(command=f"{self._pdm} python install {version}")
@@ -34,6 +47,7 @@ class PdmDependencyManager(DependencyManager):
34
47
  for dependency in dependencies:
35
48
  command = self._build_dependency_install_command(dependency)
36
49
  self._run_command(command)
50
+ print(">>> Dependencies installed successfully")
37
51
 
38
52
  def _build_dependency_install_command(self, dependency: DependencyConfiguration) -> str:
39
53
  command = [f"{self._pdm} add"]
@@ -1,3 +1,4 @@
1
+ from pathlib import Path
1
2
  import subprocess
2
3
 
3
4
  from instant_python.configuration.dependency.dependency_configuration import DependencyConfiguration
@@ -8,7 +9,7 @@ from instant_python.dependency_manager.command_execution_error import CommandExe
8
9
  class UvDependencyManager(DependencyManager):
9
10
  def __init__(self, project_directory: str) -> None:
10
11
  super().__init__(project_directory)
11
- self._uv = "~/.local/bin/uv"
12
+ self._uv = self._set_uv_executable_based_on_os()
12
13
 
13
14
  def setup_environment(self, python_version: str, dependencies: list[DependencyConfiguration]) -> None:
14
15
  try:
@@ -20,8 +21,29 @@ class UvDependencyManager(DependencyManager):
20
21
 
21
22
  def _install(self) -> None:
22
23
  print(">>> Installing uv...")
23
- self._run_command(command="curl -LsSf https://astral.sh/uv/install.sh | sh")
24
+ self._run_command(command=self._get_installation_command_based_on_os())
24
25
  print(">>> uv installed successfully")
26
+ if self._system_os.startswith("win"):
27
+ print(
28
+ ">>> Remember to add uv to your PATH environment variable. You can do this:\n"
29
+ " 1. Running the following command if you use cmd:\n"
30
+ " set Path=%Path%;%USERPROFILE%\\.local\\bin\n"
31
+ " 2. Running the following command if you use PowerShell:\n"
32
+ " $env:Path = '$env:USERPROFILE\\.local\\bin;$env:Path'\n"
33
+ " 3. Restarting your shell."
34
+ )
35
+
36
+ def _get_installation_command_based_on_os(self) -> str:
37
+ if self._system_os.startswith("win"):
38
+ return 'powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"'
39
+ return "curl -LsSf https://astral.sh/uv/install.sh | sh"
40
+
41
+ def _set_uv_executable_based_on_os(self):
42
+ return (
43
+ f"{str(Path.home() / '.local' / 'bin' / 'uv.exe')}"
44
+ if self._system_os.startswith("win")
45
+ else "~/.local/bin/uv"
46
+ )
25
47
 
26
48
  def _install_python(self, version: str) -> None:
27
49
  print(f">>> Installing Python {version}...")
@@ -34,6 +56,7 @@ class UvDependencyManager(DependencyManager):
34
56
  for dependency in dependencies:
35
57
  command = self._build_dependency_install_command(dependency)
36
58
  self._run_command(command)
59
+ print(">>> Dependencies installed successfully")
37
60
 
38
61
  def _build_dependency_install_command(self, dependency: DependencyConfiguration) -> str:
39
62
  command = [f"{self._uv} add"]
@@ -0,0 +1,19 @@
1
+ import subprocess
2
+
3
+
4
+ class ProjectFormatter:
5
+ def __init__(self, project_directory: str) -> None:
6
+ self._project_directory = project_directory
7
+
8
+ def format(self) -> None:
9
+ self._run_command(command="uvx ruff format")
10
+
11
+ def _run_command(self, command: str) -> None:
12
+ subprocess.run(
13
+ command,
14
+ shell=True,
15
+ check=True,
16
+ cwd=self._project_directory,
17
+ stdout=subprocess.DEVNULL,
18
+ stderr=subprocess.PIPE,
19
+ )
@@ -13,7 +13,7 @@
13
13
  - name: domain
14
14
  type: directory
15
15
  python: True
16
- {% if ["value_objects", "event_bus"] | is_in(template.built_in_features) %}
16
+ {% if ["value_objects", "event_bus", "fastapi_application"] | is_in(template.built_in_features) %}
17
17
  children:
18
18
  {% if "value_objects" in template.built_in_features %}
19
19
  {{ macros.include_and_indent("project_structure/value_objects.yml.j2", 8) }}
@@ -21,6 +21,9 @@
21
21
  {% if "event_bus" in template.built_in_features %}
22
22
  {{ macros.include_and_indent("project_structure/event_bus_domain.yml.j2", 8) }}
23
23
  {% endif %}
24
+ {% if "fastapi_application" in template.built_in_features %}
25
+ {{ macros.include_and_indent("project_structure/fastapi_domain.yml.j2", 8) }}
26
+ {% endif %}
24
27
  {% endif %}
25
28
  - name: application
26
29
  type: directory
@@ -13,9 +13,9 @@
13
13
  - name: shared
14
14
  type: directory
15
15
  python: True
16
- {% if ["value_objects", "synchronous_sqlalchemy", "event_bus", "async_alembic"] | is_in(template.built_in_features) %}
16
+ {% if ["value_objects", "synchronous_sqlalchemy", "event_bus", "async_alembic", "fastapi_application"] | is_in(template.built_in_features) %}
17
17
  children:
18
- {% if ["value_objects", "event_bus"] | is_in(template.built_in_features) %}
18
+ {% if ["value_objects", "event_bus", "fastapi_application"] | is_in(template.built_in_features) %}
19
19
  - name: domain
20
20
  type: directory
21
21
  python: True
@@ -26,6 +26,9 @@
26
26
  {% if "event_bus" in template.built_in_features %}
27
27
  {{ macros.include_and_indent("project_structure/event_bus_domain.yml.j2", 12) }}
28
28
  {% endif %}
29
+ {% if "fastapi_application" in template.built_in_features %}
30
+ {{ macros.include_and_indent("project_structure/fastapi_domain.yml.j2", 12) }}
31
+ {% endif %}
29
32
  {% endif %}
30
33
  {% if ["synchronous_sqlalchemy", "event_bus", "logger", "async_sqlalchemy", "async_alembic", "fastapi_application"] | is_in(template.built_in_features) %}
31
34
  - name: infra
@@ -0,0 +1,7 @@
1
+ - name: exceptions
2
+ type: directory
3
+ python: True
4
+ children:
5
+ - name: exceptions/domain_error
6
+ type: boilerplate_file
7
+ extension: .py
@@ -26,5 +26,6 @@
26
26
  {% if "fastapi_application" in template.built_in_features %}
27
27
  {{ macros.include_and_indent("project_structure/fastapi_app.yml.j2", 4) }}
28
28
  {{ macros.include_and_indent("project_structure/fastapi_infra.yml.j2", 4) }}
29
+ {{ macros.include_and_indent("project_structure/fastapi_domain.yml.j2", 4) }}
29
30
  {% endif %}
30
31
  {% endif %}
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "instant-python"
7
- version = "0.6.2"
7
+ version = "0.8.0"
8
8
  description = "Instant boilerplate generation for Python projects"
9
9
  readme = "README.md"
10
10
  license = { file = "LICENSE" }
@@ -26,7 +26,8 @@ classifiers = [
26
26
  "Intended Audience :: Developers",
27
27
  "Operating System :: MacOS",
28
28
  "Operating System :: POSIX :: Linux",
29
- "Operating System :: Unix"
29
+ "Operating System :: Unix",
30
+ "Operating System :: Microsoft :: Windows",
30
31
  ]
31
32
 
32
33
  include = [
@@ -41,7 +42,7 @@ repository = "https://github.com/dimanu-py/instant-python/"
41
42
  ipy = "instant_python.cli:app"
42
43
 
43
44
  [tool.ruff]
44
- exclude = ["instant_python/templates/**", "instant_python/new_templates/**"]
45
+ exclude = ["instant_python/templates/**"]
45
46
  line-length = 120
46
47
 
47
48
  [tools.pytest.ini_options]
@@ -0,0 +1,15 @@
1
+ from expects import expect, contain
2
+
3
+ from instant_python.formatter.project_formatter import ProjectFormatter
4
+
5
+
6
+ class MockProjectFormatter(ProjectFormatter):
7
+ def __init__(self, project_directory: str) -> None:
8
+ super().__init__(project_directory)
9
+ self._commands: list[str] = []
10
+
11
+ def _run_command(self, command: str) -> None:
12
+ self._commands.append(command)
13
+
14
+ def expect_to_have_been_called_with(self, command: str) -> None:
15
+ expect(self._commands).to(contain(command))
@@ -0,0 +1,13 @@
1
+ import os
2
+
3
+ from test.formatter.mock_project_formatter import MockProjectFormatter
4
+
5
+
6
+ class TestProjectFormatter:
7
+ def setup_method(self) -> None:
8
+ self._formatter = MockProjectFormatter(project_directory=os.getcwd())
9
+
10
+ def test_should_format_project_files(self) -> None:
11
+ self._formatter.format()
12
+
13
+ self._formatter.expect_to_have_been_called_with("uvx ruff format")
File without changes
File without changes
@@ -378,7 +378,7 @@ wheels = [
378
378
 
379
379
  [[package]]
380
380
  name = "instant-python"
381
- version = "0.6.2"
381
+ version = "0.8.0"
382
382
  source = { editable = "." }
383
383
  dependencies = [
384
384
  { name = "jinja2" },
File without changes
File without changes
File without changes