instant-python 0.0.1__tar.gz → 0.2.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 (179) hide show
  1. instant_python-0.2.0/.github/workflows/pages.yml +34 -0
  2. {instant_python-0.0.1 → instant_python-0.2.0}/.github/workflows/release.yml +1 -3
  3. {instant_python-0.0.1 → instant_python-0.2.0}/CHANGELOG.md +118 -194
  4. {instant_python-0.0.1 → instant_python-0.2.0}/PKG-INFO +2 -2
  5. {instant_python-0.0.1 → instant_python-0.2.0}/docs/contributing.md +4 -1
  6. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/installer/managers.py +2 -2
  7. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/installer/pdm_manager.py +10 -3
  8. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/installer/uv_manager.py +11 -0
  9. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/project_generator/custom_template_manager.py +0 -2
  10. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/project_generator/default_template_manager.py +0 -3
  11. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/project_generator/file.py +1 -1
  12. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/project_generator/node.py +2 -2
  13. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/question_prompter/question/conditional_question.py +9 -3
  14. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/question_prompter/question/question.py +4 -1
  15. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/question_prompter/step/template_step.py +21 -13
  16. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/question_prompter/template_types.py +2 -2
  17. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/question_prompter/user_requirements.py +1 -0
  18. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/event_bus/domain_event_json_deserializer.py +3 -3
  19. instant_python-0.2.0/instant_python/templates/boilerplate/event_bus/domain_event_subscriber.py +34 -0
  20. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/event_bus/event_bus.py +1 -1
  21. instant_python-0.2.0/instant_python/templates/boilerplate/event_bus/exchange_type.py +14 -0
  22. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/exceptions/domain_event_type_not_found_error.py +1 -1
  23. instant_python-0.2.0/instant_python/templates/boilerplate/exceptions/rabbit_mq_connection_not_established_error.py +17 -0
  24. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/persistence/synchronous/sqlalchemy_repository.py +13 -6
  25. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/value_object/int_value_object.py +1 -1
  26. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/value_object/string_value_object.py +1 -1
  27. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/value_object/uuid.py +1 -1
  28. instant_python-0.2.0/instant_python/templates/boilerplate/value_object/value_object.py +48 -0
  29. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/clean_architecture/source.yml.j2 +2 -2
  30. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/domain_driven_design/source.yml.j2 +5 -3
  31. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/domain_driven_design/test.yml.j2 +2 -0
  32. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/event_bus_domain.yml.j2 +3 -0
  33. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/standard_project/source.yml.j2 +2 -2
  34. {instant_python-0.0.1 → instant_python-0.2.0}/pyproject.toml +6 -2
  35. instant_python-0.2.0/tox.ini +18 -0
  36. {instant_python-0.0.1 → instant_python-0.2.0}/uv.lock +290 -2
  37. instant_python-0.0.1/instant_python/installer/operating_systems.py +0 -7
  38. instant_python-0.0.1/instant_python/templates/boilerplate/event_bus/domain_event_subscriber.py +0 -15
  39. instant_python-0.0.1/instant_python/templates/boilerplate/event_bus/exchange_type.py +0 -7
  40. instant_python-0.0.1/instant_python/templates/boilerplate/value_object/value_object.py +0 -21
  41. {instant_python-0.0.1 → instant_python-0.2.0}/.github/FUNDING.yml +0 -0
  42. {instant_python-0.0.1 → instant_python-0.2.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  43. {instant_python-0.0.1 → instant_python-0.2.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  44. {instant_python-0.0.1 → instant_python-0.2.0}/.github/actions/python_setup/action.yml +0 -0
  45. {instant_python-0.0.1 → instant_python-0.2.0}/.github/workflows/publish.yml +0 -0
  46. {instant_python-0.0.1 → instant_python-0.2.0}/.gitignore +0 -0
  47. {instant_python-0.0.1 → instant_python-0.2.0}/.python-version +0 -0
  48. {instant_python-0.0.1 → instant_python-0.2.0}/LICENSE +0 -0
  49. {instant_python-0.0.1 → instant_python-0.2.0}/README.md +0 -0
  50. {instant_python-0.0.1 → instant_python-0.2.0}/cz.yaml +0 -0
  51. {instant_python-0.0.1 → instant_python-0.2.0}/docs/assets/favicon.svg +0 -0
  52. {instant_python-0.0.1 → instant_python-0.2.0}/docs/assets/logo.svg +0 -0
  53. {instant_python-0.0.1 → instant_python-0.2.0}/docs/getting-started/features.md +0 -0
  54. {instant_python-0.0.1 → instant_python-0.2.0}/docs/getting-started/first-steps.md +0 -0
  55. {instant_python-0.0.1 → instant_python-0.2.0}/docs/getting-started/index.md +0 -0
  56. {instant_python-0.0.1 → instant_python-0.2.0}/docs/getting-started/installation.md +0 -0
  57. {instant_python-0.0.1 → instant_python-0.2.0}/docs/guide/creating-a-project.md +0 -0
  58. {instant_python-0.0.1 → instant_python-0.2.0}/docs/guide/custom-templates.md +0 -0
  59. {instant_python-0.0.1 → instant_python-0.2.0}/docs/guide/features.md +0 -0
  60. {instant_python-0.0.1 → instant_python-0.2.0}/docs/guide/folder-structure.md +0 -0
  61. {instant_python-0.0.1 → instant_python-0.2.0}/docs/guide/index.md +0 -0
  62. {instant_python-0.0.1 → instant_python-0.2.0}/docs/index.md +0 -0
  63. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/__init__.py +0 -0
  64. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/cli.py +0 -0
  65. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/folder_cli.py +0 -0
  66. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/installer/__init__.py +0 -0
  67. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/installer/dependency_manager.py +0 -0
  68. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/installer/dependency_manager_factory.py +0 -0
  69. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/installer/git_configurer.py +0 -0
  70. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/installer/installer.py +0 -0
  71. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/project_cli.py +0 -0
  72. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/project_generator/__init__.py +0 -0
  73. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/project_generator/directory.py +0 -0
  74. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/project_generator/folder_tree.py +0 -0
  75. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/project_generator/jinja_custom_filters.py +0 -0
  76. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/project_generator/project_generator.py +0 -0
  77. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/project_generator/template_manager.py +0 -0
  78. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/question_prompter/__init__.py +0 -0
  79. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/question_prompter/question/__init__.py +0 -0
  80. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/question_prompter/question/boolean_question.py +0 -0
  81. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/question_prompter/question/choice_question.py +0 -0
  82. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/question_prompter/question/dependencies_question.py +0 -0
  83. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/question_prompter/question/free_text_question.py +0 -0
  84. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/question_prompter/question/multiple_choice_question.py +0 -0
  85. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/question_prompter/question_wizard.py +0 -0
  86. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/question_prompter/step/__init__.py +0 -0
  87. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/question_prompter/step/dependencies_step.py +0 -0
  88. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/question_prompter/step/general_custom_template_project_step.py +0 -0
  89. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/question_prompter/step/general_project_step.py +0 -0
  90. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/question_prompter/step/git_step.py +0 -0
  91. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/question_prompter/step/steps.py +0 -0
  92. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/__init__.py +0 -0
  93. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/.gitignore +0 -0
  94. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/.pre-commit-config.yml +0 -0
  95. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/.python-version +0 -0
  96. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/LICENSE +0 -0
  97. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/event_bus/__init__.py +0 -0
  98. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/event_bus/aggregate_root.py +0 -0
  99. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/event_bus/domain_event.py +0 -0
  100. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/event_bus/domain_event_json_serializer.py +0 -0
  101. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/event_bus/mock_event_bus.py +0 -0
  102. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_configurer.py +0 -0
  103. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_connection.py +0 -0
  104. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_consumer.py +0 -0
  105. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_event_bus.py +0 -0
  106. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_queue_formatter.py +0 -0
  107. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_settings.py +0 -0
  108. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/exceptions/__init__.py +0 -0
  109. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/exceptions/domain_error.py +0 -0
  110. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/exceptions/incorrect_value_type_error.py +0 -0
  111. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/exceptions/invalid_id_format_error.py +0 -0
  112. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/exceptions/invalid_negative_value_error.py +0 -0
  113. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/exceptions/required_value_error.py +0 -0
  114. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/fastapi/__init__.py +0 -0
  115. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/fastapi/application.py +0 -0
  116. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/fastapi/http_response.py +0 -0
  117. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/fastapi/lifespan.py +0 -0
  118. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/fastapi/status_code.py +0 -0
  119. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/github/action.yml +0 -0
  120. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/github/test_lint.yml +0 -0
  121. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/logger/__init__.py +0 -0
  122. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/logger/json_formatter.py +0 -0
  123. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/logger/logger.py +0 -0
  124. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/mypy.ini +0 -0
  125. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/persistence/__init__.py +0 -0
  126. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/persistence/alembic_migrator.py +0 -0
  127. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/persistence/async/README.md +0 -0
  128. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/persistence/async/__init__.py +0 -0
  129. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/persistence/async/alembic.ini +0 -0
  130. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/persistence/async/async_engine_fixture.py +0 -0
  131. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/persistence/async/env.py +0 -0
  132. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/persistence/async/models_metadata.py +0 -0
  133. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/persistence/async/postgres_settings.py +0 -0
  134. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/persistence/async/script.py.mako +0 -0
  135. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/persistence/async/sqlalchemy_repository.py +0 -0
  136. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/persistence/base.py +0 -0
  137. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/persistence/synchronous/__init__.py +0 -0
  138. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/persistence/synchronous/session_maker.py +0 -0
  139. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/pyproject.toml +0 -0
  140. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/pytest.ini +0 -0
  141. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/random_generator.py +0 -0
  142. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/scripts/add_dependency.sh +0 -0
  143. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/scripts/create_aggregate.py +0 -0
  144. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/scripts/insert_template.py +0 -0
  145. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/scripts/integration.sh +0 -0
  146. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/scripts/local_setup.sh +0 -0
  147. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/scripts/makefile +0 -0
  148. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/scripts/post-merge +0 -0
  149. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/scripts/pre-commit +0 -0
  150. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/scripts/pre-push +0 -0
  151. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/scripts/remove_dependency.sh +0 -0
  152. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/scripts/unit.sh +0 -0
  153. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/boilerplate/value_object/__init__.py +0 -0
  154. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/alembic_migrator.yml.j2 +0 -0
  155. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/async_alembic.yml.j2 +0 -0
  156. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/async_sqlalchemy.yml.j2 +0 -0
  157. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/clean_architecture/main_structure.yml.j2 +0 -0
  158. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/clean_architecture/test.yml.j2 +0 -0
  159. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/domain_driven_design/bounded_context.yml.j2 +0 -0
  160. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/domain_driven_design/main_structure.yml.j2 +0 -0
  161. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/event_bus_infra.yml.j2 +0 -0
  162. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/fastapi_app.yml.j2 +0 -0
  163. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/fastapi_infra.yml.j2 +0 -0
  164. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/github_action.yml.j2 +0 -0
  165. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/gitignore.yml.j2 +0 -0
  166. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/license.yml.j2 +0 -0
  167. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/logger.yml.j2 +0 -0
  168. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/macros.j2 +0 -0
  169. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/makefile.yml.j2 +0 -0
  170. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/mypy.yml.j2 +0 -0
  171. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/pre_commit.yml.j2 +0 -0
  172. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/pyproject.yml.j2 +0 -0
  173. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/pytest.yml.j2 +0 -0
  174. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/python_version.yml.j2 +0 -0
  175. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/standard_project/main_structure.yml.j2 +0 -0
  176. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/standard_project/test.yml.j2 +0 -0
  177. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/synchronous_sqlalchemy.yml.j2 +0 -0
  178. {instant_python-0.0.1 → instant_python-0.2.0}/instant_python/templates/project_structure/value_objects.yml.j2 +0 -0
  179. {instant_python-0.0.1 → instant_python-0.2.0}/mkdocs.yml +0 -0
@@ -0,0 +1,34 @@
1
+ name: Publish to GitHub pages
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+
8
+ # Allows you to run this workflow manually from the Actions tab
9
+ workflow_dispatch:
10
+
11
+ # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
12
+ permissions:
13
+ contents: write
14
+ pages: write
15
+ id-token: write
16
+
17
+ # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
18
+ # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
19
+ concurrency:
20
+ group: "pages"
21
+ cancel-in-progress: true
22
+
23
+ jobs:
24
+ pages:
25
+ runs-on: ubuntu-latest
26
+ steps:
27
+ - uses: actions/checkout@v4
28
+ - uses: ./.github/actions/python_setup
29
+ - name: Build documentation
30
+ run: uv run mkdocs build
31
+ - name: Deploy to GitHub Pages
32
+ run: uv run mkdocs gh-deploy --force
33
+ env:
34
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -1,9 +1,7 @@
1
1
  name: Generate Release
2
2
 
3
3
  on:
4
- push:
5
- branches:
6
- - main
4
+ workflow_dispatch:
7
5
 
8
6
  jobs:
9
7
  bump-version:
@@ -1,65 +1,55 @@
1
- ## 0.12.1 (2025-04-06)
2
-
3
- ### 🐛 Bug Fixes
4
-
5
- - **project-generator**: add template types values to be able to use enum in jinja templates
6
- - **template**: write correct option when fastapi built in feature is selected
7
-
8
- ### ♻️ Code Refactoring
9
-
10
- - **template**: include mypy, git and pytest configuration files only when the user has selected these options
11
- - **template**: include dependencies depending on user built in features selection
12
-
13
- ## 0.12.0 (2025-04-06)
1
+ ## 0.2.0 (2025-04-08)
14
2
 
15
3
  ### ✨ Features
16
4
 
17
- - **project-generator**: create new custom function to generate import path in templates
5
+ - **template**: add new rabbit mq error when user selects event bus built in feature
6
+ - **template**: create rabbit_mq_connection_not_established_error.py boilerplate
18
7
 
19
8
  ### 🐛 Bug Fixes
20
9
 
21
- - **template**: generate correctly the import statement in templates depending on the user selection
22
-
23
- ## 0.11.0 (2025-03-24)
24
-
25
- ## 0.10.4 (2025-03-24)
10
+ - **template**: correct domain event type not found error import and class name
11
+ - **template**: set event bus publish method async
12
+ - **template**: correct imports in value objects boilerplate
26
13
 
27
- ### 🐛 Bug Fixes
14
+ ### ♻️ Code Refactoring
28
15
 
29
- - correct pages workflow
16
+ - **installer**: add virtual environment creation before installing dependencies
17
+ - **template**: conditionally include bounded context based on specify_bounded_context field
18
+ - **template**: add specify_bounded_context field to user requirements
19
+ - **prompter**: be able to execute nested conditional questions
20
+ - **template**: update subquestions structure to use ConditionalQuestion for bounded context specification
21
+ - **prompter**: extend ConditionalQuestion subquestions type hint
22
+ - **prompter**: remove note when prompting built in features for the user to select and remove temporarily synch sql alchemy option
23
+ - **template**: modify project structure templates to include logger and alembic migrator automatically if fastapi application is selected
24
+ - **template**: modify DomainEventSubscriber boilerplate to follow generic type syntax depending on python version
30
25
 
31
- ## 0.10.3 (2025-03-24)
26
+ ## 0.1.1 (2025-04-08)
32
27
 
33
28
  ### 🐛 Bug Fixes
34
29
 
35
- - correct pages workflow
30
+ - **template**: correct typo in ExchangeType enum declaration
31
+ - **template**: correct typo on TypeVar declaration
36
32
 
37
- ## 0.10.2 (2025-03-24)
33
+ ### ♻️ Code Refactoring
38
34
 
39
- ### 🐛 Bug Fixes
35
+ - **question**: use old generic type syntax to keep compatibility with old python versions
36
+ - **template**: update boilerplates so they can adhere to correct python versions syntax
37
+ - **project-generator**: standardize path separator in file name construction
38
+ - **installer**: remove unused enum OperatingSystems
39
+ - **prompter**: change TemplateTypes class to inherit from str and Enum for improved compatibility
40
+ - **project-generator**: change NodeType class to inherit from str and Enum for improved compatibility
41
+ - **installer**: change Managers class to inherit from str and Enum for better compatibility
42
+ - **project-generator**: remove override typing decorator to allow lower python versions compatibility
40
43
 
41
- - **installer**: correct answers when installing dependencies
42
-
43
- ## 0.10.1 (2025-03-24)
44
+ ## 0.1.0 (2025-04-06)
44
45
 
45
46
  ### 🐛 Bug Fixes
46
47
 
48
+ - **project-generator**: add template types values to be able to use enum in jinja templates
49
+ - **template**: write correct option when fastapi built in feature is selected
50
+ - **template**: generate correctly the import statement in templates depending on the user selection
51
+ - **installer**: correct answers when installing dependencies
47
52
  - **prompter**: modify DependenciesQuestion to not enter an infinite loop of asking the user
48
-
49
- ## 0.10.0 (2025-03-23)
50
-
51
- ### ✨ Features
52
-
53
- - **prompter**: implement general project step that will only be used when custom template is passed
54
- - **cli**: add template command for project_cli.py to let users create a project using a custom template
55
- - **prompter**: implement ConditionalQuestion
56
- - **prompter**: implement TemplateStep to group all questions related to default template management
57
- - **project-generator**: implement CustomTemplateManager to manage when user passes a custom template file
58
- - **project-generator**: create TemplateManager interface
59
- - **cli**: add folder command to allow users to just generate the folder structure of the project
60
-
61
- ### 🐛 Bug Fixes
62
-
63
53
  - **cli**: temporarily disable template commands
64
54
  - **prompter**: extract the value of the base answer to check it with condition
65
55
  - **prompter**: remove init argument from year field
@@ -67,9 +57,18 @@
67
57
  - **prompter**: set default value for git field in UserRequirements to avoid failing when executing folder command
68
58
  - **prompter**: include last question in TemplateStep if selected template is domain_driven_design
69
59
  - **project-generator**: instantiate DefaultTemplateManager inside File class
60
+ - **build**: change build system and ensure templates directory gets included
61
+ - **project-generator**: substitute FileSystemLoader for PackageLoader to safer load when using it as a package
62
+ - **prompter**: correct default source folder name
63
+ - **template**: correct license field from pyproject.toml template
64
+ - **template**: use project_slug for project name inside pyproject.toml
65
+ - **project-generator**: correct path to templates
66
+ - **project-generator**: correct extra blocks that where being created when including templates
70
67
 
71
68
  ### ♻️ Code Refactoring
72
69
 
70
+ - **template**: include mypy, git and pytest configuration files only when the user has selected these options
71
+ - **template**: include dependencies depending on user built in features selection
73
72
  - **prompter**: update answers dictionary instead of add manually question key and answer
74
73
  - **prompter**: return a dictionary with the key of the question and the answer instead of just the answer
75
74
  - **cli**: modify cli help commands and descriptions
@@ -93,86 +92,19 @@
93
92
  - **cli**: add help description to both commands
94
93
  - **prompter**: move python and dependency manager from dependencies step to general project step as it's information that is needed in general to fill all files information
95
94
  - **cli**: rename generate_project command to new
96
-
97
- ## 0.9.0 (2025-03-14)
98
-
99
- ### ✨ Features
100
-
101
- - **project-generator**: format all project files with ruff once everything is generated
102
- - **cli**: remove user_requirements file once project has been generated
103
- - **prompter**: add remove method to UserRequirements class
104
-
105
- ### 🐛 Bug Fixes
106
-
107
- - **build**: change build system and ensure templates directory gets included
108
- - **project-generator**: substitute FileSystemLoader for PackageLoader to safer load when using it as a package
109
-
110
- ### ♻️ Code Refactoring
111
-
112
95
  - **prompter**: add file_path field to user requirements class
113
-
114
- ## 0.8.1 (2025-03-14)
115
-
116
- ### 🐛 Bug Fixes
117
-
118
- - **prompter**: correct default source folder name
119
- - **template**: correct license field from pyproject.toml template
120
-
121
- ### ♻️ Code Refactoring
122
-
123
96
  - **cli**: pass project slug name as the project directory that will be created
124
97
  - **project-generator**: pass the directory where the project will be created to FolderTree
125
98
  - **cli**: remove checking if a user_requirements file exists
126
99
  - **template**: remove writing author and email info only if manager is pdm
127
-
128
- ## 0.8.0 (2025-03-11)
129
-
130
- ### ✨ Features
131
-
132
- - **cli**: call to git configurer when user wants to initialize a git repository
133
- - **installer**: implement GitConfigurer
134
- - **cli**: include git step into cli steps
135
- - **prompter**: implement step to ask the user information to initialize a git repository
136
-
137
- ### ♻️ Code Refactoring
138
-
139
100
  - **installer**: avoid printing executed commands output by stdout
140
101
  - **template**: use git_email field in pyproject.toml
141
102
  - **prompter**: remove email field from UserRequirements and add git_email and git_user_name
142
103
  - **prompter**: remove email question from general project step
143
-
144
- ## 0.7.0 (2025-03-11)
145
-
146
- ### ✨ Features
147
-
148
- - **template**: add clean architecture template project structure
149
-
150
- ## 0.6.0 (2025-03-11)
151
-
152
- ### ✨ Features
153
-
154
- - **template**: add standard project project structure templates
155
-
156
- ### ♻️ Code Refactoring
157
-
158
104
  - **project-generator**: remove condition of loading the template only when is domain driven design
159
105
  - **template**: use include_and_indent custom macro inside domain_driven_design/test template
160
106
  - **template**: include always mypy and pytest ini configuration
161
107
  - **prompter**: rename empty project template to standard project
162
-
163
- ## 0.5.0 (2025-03-10)
164
-
165
- ### ✨ Features
166
-
167
- - **installer**: create factory method to choose which dependency manager gets instantiated
168
- - **installer**: implement PdmInstaller
169
-
170
- ### 🐛 Bug Fixes
171
-
172
- - **template**: use project_slug for project name inside pyproject.toml
173
-
174
- ### ♻️ Code Refactoring
175
-
176
108
  - **cli**: use DependencyManagerFactory instead of always instantiating UvManager
177
109
  - **installer**: remove ShellConfigurator and ZshConfigurator
178
110
  - **cli**: remove shell configurator injection
@@ -180,11 +112,86 @@
180
112
  - **prompter**: warn the user that project name cannot contain spaces
181
113
  - **prompter**: remove project name question and just leave project slug
182
114
  - **installer**: remove executable attribute from UvManager
115
+ - **installer**: specify working directory to UvManager so it installs everything at the generated project
116
+ - **cli**: pass generated project path to UvManager
117
+ - **installer**: inline uv install command attribute as is not something reusable
118
+ - **cli**: inject folder tree and template manager to project generator
119
+ - **project-generator**: set the directory where user project will be generated as FolderTree attribute and expose it through a property
120
+ - **project-generator**: pass folder_tree and template_manager injected into ProjectGenerator
121
+ - **cli**: pass user dependencies to installer
122
+ - **prompter**: substitute fixed default dependencies by dynamic ones that will be asked to the user
123
+ - **prompter**: remove question definition lists and basic prompter
124
+ - **cli**: substitute BasicPrompter for QuestionWizard
125
+ - **prompter**: remove python manager and operating system questions
126
+ - **prompter**: extract helper method to know if template is ddd
127
+ - **prompter**: delegate ask logic to each question instead of letting prompter what to do depending on flags
128
+ - **prompter**: redefine questions using concrete implementations
129
+ - **prompter**: make Question abstract and add ask abstract method
130
+ - **project-generator**: rename Directory's init attribute to python_module and remove default value for children
131
+ - **project-generator**: move children extraction only when node is a directory
132
+ - **src**: remove old src folder with cookiecutter project and convert current instant_python module into src
133
+ - **cli**: generate user requirements only if no other file has been already generated.
134
+ - **template**: move makefile template to scripts folder as this folder only makes sense if it's use with the makefile
135
+ - **template**: move base from sync sqlalchemy to persistence folder as it would be the same for both sync and async
136
+ - **template**: move sqlalchemy sync templates to specific folder
137
+ - **template**: move exceptions templates to specific folder
138
+ - **template**: move value object templates to specific folder
139
+ - **template**: move github actions templates to specific folder
140
+ - **template**: move logger templates to specific folder
141
+ - **project-generator**: modify File class to be able to manage the difference between the path to the template and the path where the file should be written
142
+ - **template**: change all yml templates to point to inner event_bus folder boilerplate
143
+ - **template**: move all boilerplate related to event bus inside specific folder
144
+ - **prompter**: change github information for basic name and email
145
+ - **prompter**: move default dependencies question to general questions and include the default dependencies that will be included
146
+ - **prompter**: remove converting to snake case all answers and set directly those answers in snake case if needed
147
+ - **templates**: use raw command inside github action instead of make
148
+ - **templates**: modify error templates to use DomainError
149
+ - **templates**: change all python-module types to directory and add python flag when need it
150
+ - **project-generator**: make Directory general for any type of folder and remove python module class
151
+ - **project-generator**: remove python_module node type
152
+ - **templates**: set all files of type file and add them the extension variable
153
+ - **project-generator**: add extension field to node and remove deprecated options
154
+ - **project-generator**: create a single node type File that will work with any kind of file
155
+ - **project-generator**: substitute python file and yml file node type for single file
156
+ - **templates**: use new operator to write a single children command in source
157
+ - **project-generator**: include new custom operator in jinja environment
158
+ - **templates**: remove populated shared template
159
+ - **templates**: include value objects template when is specified by the user
160
+ - **templates**: import and call macro inside project structures templates
161
+ - **prompter**: format all answers to snake case
162
+ - use TemplateTypes instead of literal string
163
+ - **project-generator**: change template path name when generating project
164
+ - **templates**: move ddd templates inside project_structure folder
165
+ - **prompter**: migrate BasicPrompter to use questionary instead of typer to make the questions as it manages multiple selections better
166
+ - **cli**: instantiate BasicPrompter instead of using class method
167
+ - **prompter**: simplify ask method by using Question object an iterating over the list of defined questions
168
+ - **templates**: modularize main_structure file
169
+ - **project-generator**: create project structure inside a temporary directory
170
+ - **project-generator**: delegate template management to TemplateManager
171
+ - **cli**: call BasicPrompter and ProjectGenerator inside cli app
183
172
 
184
- ## 0.4.0 (2025-03-09)
185
173
 
186
174
  ### ✨ Features
187
175
 
176
+ - **project-generator**: create new custom function to generate import path in templates
177
+ - **prompter**: implement general project step that will only be used when custom template is passed
178
+ - **cli**: add template command for project_cli.py to let users create a project using a custom template
179
+ - **prompter**: implement ConditionalQuestion
180
+ - **prompter**: implement TemplateStep to group all questions related to default template management
181
+ - **project-generator**: implement CustomTemplateManager to manage when user passes a custom template file
182
+ - **project-generator**: create TemplateManager interface
183
+ - **cli**: add folder command to allow users to just generate the folder structure of the project
184
+ - **project-generator**: format all project files with ruff once everything is generated
185
+ - **cli**: remove user_requirements file once project has been generated
186
+ - **prompter**: add remove method to UserRequirements class
187
+ - **cli**: call to git configurer when user wants to initialize a git repository
188
+ - **installer**: implement GitConfigurer
189
+ - **cli**: include git step into cli steps
190
+ - **prompter**: implement step to ask the user information to initialize a git repository
191
+ - **template**: add clean architecture template project structure
192
+ - **template**: add standard project project structure templates
193
+ - **installer**: create factory method to choose which dependency manager gets instantiated
194
+ - **installer**: implement PdmInstaller
188
195
  - **project-generator**: expose generated project path through ProjectGenerator
189
196
  - **installer**: add project_directory field to UvManager to know where to create the virtual environment
190
197
  - **installer**: add install_dependencies step to Installer
@@ -211,36 +218,6 @@
211
218
  - **project-generator**: create custom exception when node type does not exist
212
219
  - **cli**: make sure user_requirements are loaded
213
220
  - **prompter**: add load_from_file method to UserRequirements
214
-
215
- ### 🐛 Bug Fixes
216
-
217
- - **project-generator**: correct path to templates
218
-
219
- ### ♻️ Code Refactoring
220
-
221
- - **installer**: specify working directory to UvManager so it installs everything at the generated project
222
- - **cli**: pass generated project path to UvManager
223
- - **installer**: inline uv install command attribute as is not something reusable
224
- - **cli**: inject folder tree and template manager to project generator
225
- - **project-generator**: set the directory where user project will be generated as FolderTree attribute and expose it through a property
226
- - **project-generator**: pass folder_tree and template_manager injected into ProjectGenerator
227
- - **cli**: pass user dependencies to installer
228
- - **prompter**: substitute fixed default dependencies by dynamic ones that will be asked to the user
229
- - **prompter**: remove question definition lists and basic prompter
230
- - **cli**: substitute BasicPrompter for QuestionWizard
231
- - **prompter**: remove python manager and operating system questions
232
- - **prompter**: extract helper method to know if template is ddd
233
- - **prompter**: delegate ask logic to each question instead of letting prompter what to do depending on flags
234
- - **prompter**: redefine questions using concrete implementations
235
- - **prompter**: make Question abstract and add ask abstract method
236
- - **project-generator**: rename Directory's init attribute to python_module and remove default value for children
237
- - **project-generator**: move children extraction only when node is a directory
238
- - **src**: remove old src folder with cookiecutter project and convert current instant_python module into src
239
-
240
- ## 0.3.0 (2025-03-01)
241
-
242
- ### ✨ Features
243
-
244
221
  - **template**: include mock event bus template for testing
245
222
  - **template**: add scripts templates
246
223
  - **prompter**: add fastapi option to built in features
@@ -260,29 +237,6 @@
260
237
  - **templates**: add .gitignore template
261
238
  - **templates**: add pyproject template
262
239
  - **templates**: add makefile template
263
-
264
- ### ♻️ Code Refactoring
265
-
266
- - **cli**: generate user requirements only if no other file has been already generated.
267
- - **template**: move makefile template to scripts folder as this folder only makes sense if it's use with the makefile
268
- - **template**: move base from sync sqlalchemy to persistence folder as it would be the same for both sync and async
269
- - **template**: move sqlalchemy sync templates to specific folder
270
- - **template**: move exceptions templates to specific folder
271
- - **template**: move value object templates to specific folder
272
- - **template**: move github actions templates to specific folder
273
- - **template**: move logger templates to specific folder
274
- - **project-generator**: modify File class to be able to manage the difference between the path to the template and the path where the file should be written
275
- - **template**: change all yml templates to point to inner event_bus folder boilerplate
276
- - **template**: move all boilerplate related to event bus inside specific folder
277
- - **prompter**: change github information for basic name and email
278
- - **prompter**: move default dependencies question to general questions and include the default dependencies that will be included
279
- - **prompter**: remove converting to snake case all answers and set directly those answers in snake case if needed
280
- - **templates**: use raw command inside github action instead of make
281
-
282
- ## 0.2.0 (2025-02-27)
283
-
284
- ### ✨ Features
285
-
286
240
  - **templates**: add invalid id format error template
287
241
  - **templates**: add domain error template
288
242
  - **prompter**: add synchronous sqlalchemy option to built in features question
@@ -316,33 +270,3 @@
316
270
  - **prompter**: create basic class that asks project requirements to user
317
271
  - **cli**: create basic typer application with no implementation
318
272
 
319
- ### 🐛 Bug Fixes
320
-
321
- - **project-generator**: correct extra blocks that where being created when including templates
322
-
323
- ### ♻️ Code Refactoring
324
-
325
- - **templates**: modify error templates to use DomainError
326
- - **templates**: change all python-module types to directory and add python flag when need it
327
- - **project-generator**: make Directory general for any type of folder and remove python module class
328
- - **project-generator**: remove python_module node type
329
- - **templates**: set all files of type file and add them the extension variable
330
- - **project-generator**: add extension field to node and remove deprecated options
331
- - **project-generator**: create a single node type File that will work with any kind of file
332
- - **project-generator**: substitute python file and yml file node type for single file
333
- - **templates**: use new operator to write a single children command in source
334
- - **project-generator**: include new custom operator in jinja environment
335
- - **templates**: remove populated shared template
336
- - **templates**: include value objects template when is specified by the user
337
- - **templates**: import and call macro inside project structures templates
338
- - **prompter**: format all answers to snake case
339
- - use TemplateTypes instead of literal string
340
- - **project-generator**: change template path name when generating project
341
- - **templates**: move ddd templates inside project_structure folder
342
- - **prompter**: migrate BasicPrompter to use questionary instead of typer to make the questions as it manages multiple selections better
343
- - **cli**: instantiate BasicPrompter instead of using class method
344
- - **prompter**: simplify ask method by using Question object an iterating over the list of defined questions
345
- - **templates**: modularize main_structure file
346
- - **project-generator**: create project structure inside a temporary directory
347
- - **project-generator**: delegate template management to TemplateManager
348
- - **cli**: call BasicPrompter and ProjectGenerator inside cli app
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: instant-python
3
- Version: 0.0.1
3
+ Version: 0.2.0
4
4
  Summary: Python automatic project generator
5
5
  Author-email: dimanu-py <diegomtz126@gmail.com>
6
6
  License: Apache License
@@ -205,7 +205,7 @@ License: Apache License
205
205
  See the License for the specific language governing permissions and
206
206
  limitations under the License.
207
207
  License-File: LICENSE
208
- Requires-Python: >=3.12
208
+ Requires-Python: >=3.9
209
209
  Requires-Dist: jinja2>=3.1.5
210
210
  Requires-Dist: pyyaml>=6.0.2
211
211
  Requires-Dist: questionary>=2.1.0
@@ -1,10 +1,13 @@
1
- # Contributing
1
+ # Contributing & Reporting
2
2
 
3
3
  If you would like to contribute and help to improve this library feel free to fork this project and create a pull request.
4
4
 
5
5
  You may as well check out the [open issues](https://github.com/dimanu-py/instant-python/issues) to see whether somebody is already
6
6
  addressing your problem or solve your doubts. If not, feel free to open a new issue with any improvement that can be made.
7
7
 
8
+ Any bug that you find is welcome to be reported. Please make sure to include as much information as possible and follow the
9
+ correct templates. This will help us to understand the problem and fix it as soon as possible.
10
+
8
11
  If you find this library useful and want to help, you can also give it a star on GitHub or donate in the following link
9
12
 
10
13
  [![Donate](https://img.shields.io/badge/Buy_me_a_coffee-5d83f5?style=for-the-badge&logo=ko-fi&logoColor=white&__cf_chl_managed_tk__=pmd_sOkOcrsQ4T6MRVPX2TeB_mbk2ZryAIn3rNigWIBBC6U-1633993526-0-gqNtZGzNAyWjcnBszQkl)](https://buymeacoffee.com/dimanu.py)
@@ -1,7 +1,7 @@
1
- from enum import StrEnum
1
+ from enum import Enum
2
2
 
3
3
 
4
- class Managers(StrEnum):
4
+ class Managers(str, Enum):
5
5
  PYENV = "pyenv"
6
6
  UV = "uv"
7
7
  PDM = "pdm"
@@ -31,6 +31,7 @@ class PdmManager(DependencyManager):
31
31
  print(f">>> Python {version} installed successfully")
32
32
 
33
33
  def install_dependencies(self, dependencies: list[str]) -> None:
34
+ self._create_virtual_environment()
34
35
  for dependency_name in dependencies:
35
36
  self._install_dependency(dependency_name)
36
37
 
@@ -67,6 +68,12 @@ class PdmManager(DependencyManager):
67
68
  group_flag += f"--group {group_name}"
68
69
  return f"{dev_flag} {group_flag}"
69
70
 
70
-
71
-
72
-
71
+ def _create_virtual_environment(self) -> None:
72
+ command = f"{self._pdm} install"
73
+ subprocess.run(
74
+ command,
75
+ shell=True,
76
+ check=True,
77
+ cwd=self._project_directory,
78
+ stdout=subprocess.DEVNULL,
79
+ )
@@ -33,6 +33,7 @@ class UvManager(DependencyManager):
33
33
  print(f">>> Python {version} installed successfully")
34
34
 
35
35
  def install_dependencies(self, dependencies: list[str]) -> None:
36
+ self._create_virtual_environment()
36
37
  for dependency_name in dependencies:
37
38
  self._install_dependency(dependency_name)
38
39
 
@@ -71,3 +72,13 @@ class UvManager(DependencyManager):
71
72
  ).ask()["group_name"]
72
73
  flag = f"--group {group_name}"
73
74
  return flag
75
+
76
+ def _create_virtual_environment(self) -> None:
77
+ command = f"{self._uv} sync"
78
+ subprocess.run(
79
+ command,
80
+ shell=True,
81
+ check=True,
82
+ cwd=self._project_directory,
83
+ stdout=subprocess.DEVNULL,
84
+ )
@@ -1,5 +1,4 @@
1
1
  from pathlib import Path
2
- from typing import override
3
2
 
4
3
  import yaml
5
4
 
@@ -10,7 +9,6 @@ class CustomTemplateManager(TemplateManager):
10
9
  def __init__(self, template_path: str) -> None:
11
10
  self._template_path = Path(template_path).expanduser().resolve()
12
11
 
13
- @override
14
12
  def get_project(self, template_name: str) -> dict[str, str]:
15
13
  if not self._template_path.is_file():
16
14
  raise FileNotFoundError(
@@ -1,5 +1,3 @@
1
- from typing import override
2
-
3
1
  import yaml
4
2
  from jinja2 import Environment, Template, PackageLoader
5
3
 
@@ -20,7 +18,6 @@ class DefaultTemplateManager(TemplateManager):
20
18
  self._env.filters["is_in"] = is_in
21
19
  self._env.filters["compute_base_path"] = compute_base_path
22
20
 
23
- @override
24
21
  def get_project(self, template_name: str) -> dict:
25
22
  template = self._get_template(
26
23
  f"{template_name}/{self._requirements.template}/main_structure.yml.j2"
@@ -7,7 +7,7 @@ from instant_python.project_generator.node import Node
7
7
  class File(Node):
8
8
 
9
9
  def __init__(self, name: str, extension: str) -> None:
10
- self._file_name = f"{name.split("/")[-1]}{extension}"
10
+ self._file_name = f"{name.split('/')[-1]}{extension}"
11
11
  self._template_path = f"boilerplate/{name}{extension}"
12
12
  self._template_manager = DefaultTemplateManager()
13
13
 
@@ -1,9 +1,9 @@
1
1
  from abc import ABC, abstractmethod
2
- from enum import StrEnum
2
+ from enum import Enum
3
3
  from pathlib import Path
4
4
 
5
5
 
6
- class NodeType(StrEnum):
6
+ class NodeType(str, Enum):
7
7
  DIRECTORY = "directory"
8
8
  FILE = "file"
9
9
 
@@ -1,9 +1,11 @@
1
+ from typing import Union
2
+
1
3
  from instant_python.question_prompter.question.question import Question
2
4
 
3
5
 
4
6
  class ConditionalQuestion:
5
7
  def __init__(
6
- self, base_question: Question, subquestions: list[Question], condition: str | bool
8
+ self, base_question: Question, subquestions: Union[list[Question], "ConditionalQuestion"], condition: str | bool
7
9
  ) -> None:
8
10
  self._base_question = base_question
9
11
  self._subquestions = subquestions
@@ -16,8 +18,12 @@ class ConditionalQuestion:
16
18
  return base_answer
17
19
 
18
20
  answers = base_answer
19
- for question in self._subquestions:
20
- answers.update(question.ask())
21
+
22
+ if isinstance(self._subquestions, ConditionalQuestion):
23
+ answers.update(self._subquestions.ask())
24
+ else:
25
+ for question in self._subquestions:
26
+ answers.update(question.ask())
21
27
  return answers
22
28
 
23
29
  def _base_answer_does_not_satisfies_condition(self, base_answer: dict[str, str]) -> bool:
@@ -1,7 +1,10 @@
1
1
  from abc import ABC, abstractmethod
2
2
 
3
+ from typing import TypeVar, Generic
3
4
 
4
- class Question[T](ABC):
5
+ T = TypeVar("T")
6
+
7
+ class Question(Generic[T], ABC):
5
8
  def __init__(self, key: str, message: str) -> None:
6
9
  self._key = key
7
10
  self._message = message