instant-python 0.5.1__tar.gz → 0.6.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 (351) hide show
  1. {instant_python-0.5.1 → instant_python-0.6.0}/.github/workflows/release.yml +11 -6
  2. instant_python-0.6.0/.github/workflows/test_lint.yml +121 -0
  3. {instant_python-0.5.1 → instant_python-0.6.0}/CHANGELOG.md +264 -0
  4. {instant_python-0.5.1 → instant_python-0.6.0}/PKG-INFO +69 -36
  5. instant_python-0.6.0/README.md +89 -0
  6. instant_python-0.6.0/docs/downloads_macro.py +7 -0
  7. instant_python-0.6.0/docs/examples/configuration.md +147 -0
  8. instant_python-0.6.0/docs/examples/custom_template.md +58 -0
  9. instant_python-0.6.0/docs/guide/command_config.md +59 -0
  10. instant_python-0.5.1/docs/guide/features.md → instant_python-0.6.0/docs/guide/command_init.md +80 -125
  11. instant_python-0.6.0/docs/home/getting_started.md +76 -0
  12. instant_python-0.6.0/docs/home/index.md +75 -0
  13. instant_python-0.6.0/docs/home/releases.md +37 -0
  14. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/cli.py +5 -5
  15. instant_python-0.6.0/instant_python/commands/config.py +28 -0
  16. instant_python-0.6.0/instant_python/commands/init.py +53 -0
  17. instant_python-0.6.0/instant_python/configuration/configuration_schema.py +85 -0
  18. instant_python-0.6.0/instant_python/configuration/dependency/dependency_configuration.py +36 -0
  19. instant_python-0.6.0/instant_python/configuration/dependency/not_dev_dependency_included_in_group.py +8 -0
  20. instant_python-0.6.0/instant_python/configuration/general/general_configuration.py +60 -0
  21. instant_python-0.6.0/instant_python/configuration/general/invalid_dependency_manager_value.py +8 -0
  22. instant_python-0.6.0/instant_python/configuration/general/invalid_license_value.py +8 -0
  23. instant_python-0.6.0/instant_python/configuration/general/invalid_python_version_value.py +8 -0
  24. instant_python-0.6.0/instant_python/configuration/git/git_configuration.py +23 -0
  25. instant_python-0.6.0/instant_python/configuration/git/git_user_or_email_not_present.py +8 -0
  26. instant_python-0.6.0/instant_python/configuration/parser/config_key_not_present.py +8 -0
  27. instant_python-0.6.0/instant_python/configuration/parser/configuration_file_not_found.py +8 -0
  28. instant_python-0.6.0/instant_python/configuration/parser/empty_configuration_not_allowed.py +8 -0
  29. instant_python-0.6.0/instant_python/configuration/parser/missing_mandatory_fields.py +10 -0
  30. instant_python-0.6.0/instant_python/configuration/parser/parser.py +148 -0
  31. instant_python-0.6.0/instant_python/configuration/question/boolean_question.py +12 -0
  32. instant_python-0.6.0/instant_python/configuration/question/choice_question.py +19 -0
  33. {instant_python-0.5.1/instant_python/question_prompter → instant_python-0.6.0/instant_python/configuration}/question/conditional_question.py +6 -3
  34. instant_python-0.6.0/instant_python/configuration/question/free_text_question.py +14 -0
  35. instant_python-0.6.0/instant_python/configuration/question/multiple_choice_question.py +12 -0
  36. {instant_python-0.5.1/instant_python/question_prompter → instant_python-0.6.0/instant_python/configuration}/question/question.py +6 -2
  37. instant_python-0.6.0/instant_python/configuration/question/questionary.py +17 -0
  38. instant_python-0.6.0/instant_python/configuration/question_wizard.py +14 -0
  39. instant_python-0.6.0/instant_python/configuration/step/dependencies_step.py +70 -0
  40. instant_python-0.6.0/instant_python/configuration/step/general_step.py +67 -0
  41. instant_python-0.6.0/instant_python/configuration/step/git_step.py +41 -0
  42. {instant_python-0.5.1/instant_python/question_prompter → instant_python-0.6.0/instant_python/configuration}/step/steps.py +6 -1
  43. instant_python-0.6.0/instant_python/configuration/step/template_step.py +63 -0
  44. instant_python-0.6.0/instant_python/configuration/template/bounded_context_not_applicable.py +8 -0
  45. instant_python-0.6.0/instant_python/configuration/template/bounded_context_not_especified.py +8 -0
  46. instant_python-0.6.0/instant_python/configuration/template/invalid_built_in_features_values.py +10 -0
  47. instant_python-0.6.0/instant_python/configuration/template/invalid_template_value.py +8 -0
  48. instant_python-0.6.0/instant_python/configuration/template/template_configuration.py +59 -0
  49. instant_python-0.6.0/instant_python/dependency_manager/command_execution_error.py +10 -0
  50. instant_python-0.6.0/instant_python/dependency_manager/dependency_manager.py +23 -0
  51. instant_python-0.6.0/instant_python/dependency_manager/dependency_manager_factory.py +18 -0
  52. instant_python-0.6.0/instant_python/dependency_manager/pdm_dependency_manager.py +46 -0
  53. instant_python-0.6.0/instant_python/dependency_manager/unknown_dependency_manager_error.py +8 -0
  54. instant_python-0.6.0/instant_python/dependency_manager/uv_dependency_manager.py +45 -0
  55. instant_python-0.6.0/instant_python/git/git_configurer.py +42 -0
  56. instant_python-0.5.1/instant_python/intant_python_typer.py → instant_python-0.6.0/instant_python/instant_python_typer.py +5 -4
  57. instant_python-0.6.0/instant_python/project_creator/directory.py +26 -0
  58. instant_python-0.6.0/instant_python/project_creator/file.py +31 -0
  59. instant_python-0.6.0/instant_python/project_creator/file_has_not_been_created.py +8 -0
  60. instant_python-0.6.0/instant_python/project_creator/file_system.py +46 -0
  61. instant_python-0.6.0/instant_python/project_creator/unknown_node_typer_error.py +8 -0
  62. instant_python-0.5.1/instant_python/project_generator/custom_template_manager.py → instant_python-0.6.0/instant_python/render/custom_project_renderer.py +6 -5
  63. instant_python-0.6.0/instant_python/render/jinja_custom_filters.py +23 -0
  64. instant_python-0.6.0/instant_python/render/jinja_environment.py +28 -0
  65. instant_python-0.6.0/instant_python/render/jinja_project_renderer.py +30 -0
  66. instant_python-0.6.0/instant_python/render/template_file_not_found_error.py +10 -0
  67. instant_python-0.6.0/instant_python/render/unknown_template_error.py +8 -0
  68. instant_python-0.6.0/instant_python/shared/application_error.py +16 -0
  69. instant_python-0.6.0/instant_python/shared/error_types.py +7 -0
  70. instant_python-0.6.0/instant_python/shared/supported_built_in_features.py +16 -0
  71. instant_python-0.6.0/instant_python/shared/supported_licenses.py +11 -0
  72. instant_python-0.6.0/instant_python/shared/supported_managers.py +10 -0
  73. instant_python-0.6.0/instant_python/shared/supported_python_versions.py +12 -0
  74. instant_python-0.6.0/instant_python/shared/supported_templates.py +12 -0
  75. instant_python-0.6.0/instant_python/templates/boilerplate/.python-version +1 -0
  76. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/LICENSE +6 -6
  77. instant_python-0.6.0/instant_python/templates/boilerplate/README.md +8 -0
  78. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/event_bus/aggregate_root.py +2 -2
  79. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/event_bus/domain_event_json_deserializer.py +4 -4
  80. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/event_bus/domain_event_json_serializer.py +2 -2
  81. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/event_bus/domain_event_subscriber.py +2 -2
  82. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/event_bus/event_bus.py +2 -2
  83. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/event_bus/exchange_type.py +1 -1
  84. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/event_bus/mock_event_bus.py +3 -3
  85. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_configurer.py +6 -6
  86. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_connection.py +5 -5
  87. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_consumer.py +7 -7
  88. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_event_bus.py +6 -6
  89. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_queue_formatter.py +3 -3
  90. instant_python-0.6.0/instant_python/templates/boilerplate/exceptions/__init__.py +0 -0
  91. instant_python-0.6.0/instant_python/templates/boilerplate/exceptions/domain_error.py +22 -0
  92. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/exceptions/domain_event_type_not_found_error.py +3 -11
  93. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/exceptions/incorrect_value_type_error.py +3 -11
  94. instant_python-0.6.0/instant_python/templates/boilerplate/exceptions/invalid_id_format_error.py +9 -0
  95. instant_python-0.6.0/instant_python/templates/boilerplate/exceptions/invalid_negative_value_error.py +9 -0
  96. instant_python-0.6.0/instant_python/templates/boilerplate/exceptions/rabbit_mq_connection_not_established_error.py +9 -0
  97. instant_python-0.6.0/instant_python/templates/boilerplate/exceptions/required_value_error.py +9 -0
  98. instant_python-0.6.0/instant_python/templates/boilerplate/fastapi/__init__.py +0 -0
  99. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/fastapi/application.py +8 -8
  100. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/fastapi/http_response.py +7 -7
  101. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/fastapi/lifespan.py +2 -2
  102. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/github/action.yml +3 -3
  103. instant_python-0.6.0/instant_python/templates/boilerplate/logger/__init__.py +0 -0
  104. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/logger/logger.py +2 -2
  105. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/mypy.ini +1 -1
  106. instant_python-0.6.0/instant_python/templates/boilerplate/persistence/__init__.py +0 -0
  107. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/persistence/alembic_migrator.py +2 -2
  108. instant_python-0.6.0/instant_python/templates/boilerplate/persistence/async/__init__.py +0 -0
  109. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/persistence/async/async_engine_fixture.py +2 -2
  110. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/persistence/async/env.py +2 -2
  111. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/persistence/async/models_metadata.py +2 -2
  112. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/persistence/async/sqlalchemy_repository.py +4 -4
  113. instant_python-0.6.0/instant_python/templates/boilerplate/persistence/synchronous/__init__.py +0 -0
  114. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/persistence/synchronous/session_maker.py +2 -2
  115. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/persistence/synchronous/sqlalchemy_repository.py +7 -7
  116. instant_python-0.6.0/instant_python/templates/boilerplate/pyproject.toml +40 -0
  117. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/scripts/add_dependency.sh +2 -2
  118. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/scripts/integration.sh +1 -1
  119. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/scripts/makefile +26 -26
  120. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/scripts/remove_dependency.sh +2 -2
  121. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/scripts/unit.sh +1 -1
  122. instant_python-0.6.0/instant_python/templates/boilerplate/value_object/__init__.py +0 -0
  123. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/value_object/int_value_object.py +3 -3
  124. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/value_object/string_value_object.py +4 -4
  125. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/value_object/uuid.py +3 -3
  126. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/value_object/value_object.py +1 -1
  127. instant_python-0.6.0/instant_python/templates/project_structure/clean_architecture/main_structure.yml.j2 +25 -0
  128. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/clean_architecture/source.yml.j2 +12 -12
  129. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/clean_architecture/test.yml.j2 +1 -1
  130. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/domain_driven_design/bounded_context.yml.j2 +2 -2
  131. instant_python-0.6.0/instant_python/templates/project_structure/domain_driven_design/main_structure.yml.j2 +25 -0
  132. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/domain_driven_design/source.yml.j2 +14 -14
  133. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/domain_driven_design/test.yml.j2 +2 -2
  134. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/makefile.yml.j2 +1 -1
  135. instant_python-0.6.0/instant_python/templates/project_structure/standard_project/main_structure.yml.j2 +25 -0
  136. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/standard_project/source.yml.j2 +9 -9
  137. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/standard_project/test.yml.j2 +1 -1
  138. instant_python-0.6.0/makefile +65 -0
  139. {instant_python-0.5.1 → instant_python-0.6.0}/mkdocs.yml +31 -20
  140. instant_python-0.6.0/mypy.ini +38 -0
  141. {instant_python-0.5.1 → instant_python-0.6.0}/pyproject.toml +29 -1
  142. instant_python-0.6.0/scripts/add_dependency.sh +18 -0
  143. instant_python-0.6.0/scripts/remove_dependency.sh +18 -0
  144. instant_python-0.6.0/test/__init__.py +0 -0
  145. instant_python-0.6.0/test/configuration/__init__.py +0 -0
  146. instant_python-0.6.0/test/configuration/dependency/__init__.py +0 -0
  147. instant_python-0.6.0/test/configuration/dependency/dependency_configuration_mother.py +19 -0
  148. instant_python-0.6.0/test/configuration/dependency/test_dependency_configuration.py +37 -0
  149. instant_python-0.6.0/test/configuration/general/__init__.py +0 -0
  150. instant_python-0.6.0/test/configuration/general/general_configuration_mother.py +31 -0
  151. instant_python-0.6.0/test/configuration/general/test_general_configuration.py +43 -0
  152. instant_python-0.6.0/test/configuration/git/__init__.py +0 -0
  153. instant_python-0.6.0/test/configuration/git/git_configuration_mother.py +22 -0
  154. instant_python-0.6.0/test/configuration/git/test_git_configuration.py +28 -0
  155. instant_python-0.6.0/test/configuration/parser/__init__.py +0 -0
  156. instant_python-0.6.0/test/configuration/parser/approvaltests_config.json +3 -0
  157. instant_python-0.6.0/test/configuration/parser/approved_files/TestParser.test_should_parse_configuration.approved.txt +39 -0
  158. instant_python-0.6.0/test/configuration/parser/resources/__init__.py +0 -0
  159. instant_python-0.6.0/test/configuration/parser/resources/config.yml +23 -0
  160. instant_python-0.6.0/test/configuration/parser/resources/empty_config.yml +0 -0
  161. instant_python-0.6.0/test/configuration/parser/resources/missing_dependencies_fields_config.yml +21 -0
  162. instant_python-0.6.0/test/configuration/parser/resources/missing_general_fields_config.yml +23 -0
  163. instant_python-0.6.0/test/configuration/parser/resources/missing_git_fields_config.yml +25 -0
  164. instant_python-0.6.0/test/configuration/parser/resources/missing_keys_config.yml +13 -0
  165. instant_python-0.6.0/test/configuration/parser/resources/missing_template_fields_config.yml +23 -0
  166. instant_python-0.6.0/test/configuration/parser/test_parser.py +66 -0
  167. instant_python-0.6.0/test/configuration/question/__init__.py +0 -0
  168. instant_python-0.6.0/test/configuration/question/test_boolean_question.py +28 -0
  169. instant_python-0.6.0/test/configuration/question/test_choice_question.py +30 -0
  170. instant_python-0.6.0/test/configuration/question/test_free_text_question.py +30 -0
  171. instant_python-0.6.0/test/configuration/question/test_multiple_choice_question.py +31 -0
  172. instant_python-0.6.0/test/configuration/template/__init__.py +0 -0
  173. instant_python-0.6.0/test/configuration/template/template_configuration_mother.py +40 -0
  174. instant_python-0.6.0/test/configuration/template/test_template_configuration.py +55 -0
  175. instant_python-0.6.0/test/dependency_manager/__init__.py +0 -0
  176. instant_python-0.6.0/test/dependency_manager/mock_pdm_dependency_manager.py +33 -0
  177. instant_python-0.6.0/test/dependency_manager/mock_uv_dependency_manager.py +33 -0
  178. instant_python-0.6.0/test/dependency_manager/test_pdm_dependency_manager.py +60 -0
  179. instant_python-0.6.0/test/dependency_manager/test_uv_dependency_manager.py +59 -0
  180. instant_python-0.6.0/test/git/__init__.py +0 -0
  181. instant_python-0.6.0/test/git/mock_git_configurer.py +19 -0
  182. instant_python-0.6.0/test/git/test_git_configurer.py +53 -0
  183. instant_python-0.6.0/test/project_creator/__init__.py +0 -0
  184. instant_python-0.6.0/test/project_creator/approvaltests_config.json +3 -0
  185. instant_python-0.6.0/test/project_creator/approved_files/TestFileSystem.test_should_create_file_system_in_disk.rendered_custom_project_structure.json.approved.txt +1 -0
  186. instant_python-0.6.0/test/project_creator/approved_files/TestFileSystem.test_should_create_file_system_in_disk.rendered_project_structure.json.approved.txt +1 -0
  187. instant_python-0.6.0/test/project_creator/approved_files/TestFileSystem.test_should_create_folders_and_files.approved.txt +1 -0
  188. instant_python-0.6.0/test/project_creator/approved_files/TestFileSystem.test_should_generate_file_system_tree.approved.txt +1 -0
  189. instant_python-0.6.0/test/project_creator/directory_mother.py +31 -0
  190. instant_python-0.6.0/test/project_creator/resources/boilerplate/exceptions/domain_error.py +22 -0
  191. instant_python-0.6.0/test/project_creator/resources/boilerplate/exceptions/domain_error_simple.py +2 -0
  192. instant_python-0.6.0/test/project_creator/resources/clean_architecture/main_structure.yml.j2 +22 -0
  193. instant_python-0.6.0/test/project_creator/resources/config.yml +25 -0
  194. instant_python-0.6.0/test/project_creator/resources/rendered_custom_project_structure.json +36 -0
  195. instant_python-0.6.0/test/project_creator/resources/rendered_project_structure.json +33 -0
  196. instant_python-0.6.0/test/project_creator/test_directory.py +50 -0
  197. instant_python-0.6.0/test/project_creator/test_file.py +52 -0
  198. instant_python-0.6.0/test/project_creator/test_file_system.py +58 -0
  199. instant_python-0.6.0/test/random_generator.py +25 -0
  200. instant_python-0.6.0/test/render/__init__.py +0 -0
  201. instant_python-0.6.0/test/render/approvaltests_config.json +3 -0
  202. instant_python-0.6.0/test/render/approved_files/TestCustomProjectRenderer.test_should_render_custom_template.approved.txt +86 -0
  203. instant_python-0.6.0/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.clean_architecture_config.yml.approved.txt +33 -0
  204. instant_python-0.6.0/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.domain_driven_design_config.yml.approved.txt +57 -0
  205. instant_python-0.6.0/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.received.txt +33 -0
  206. instant_python-0.6.0/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.standard_project_with_dependency_config.yml.approved.txt +26 -0
  207. instant_python-0.6.0/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.standard_project_with_git_config.yml.approved.txt +30 -0
  208. instant_python-0.6.0/test/render/resources/clean_architecture/main_structure.yml.j2 +22 -0
  209. instant_python-0.6.0/test/render/resources/clean_architecture_config.yml +16 -0
  210. instant_python-0.6.0/test/render/resources/custom_template.yml +46 -0
  211. instant_python-0.6.0/test/render/resources/domain_driven_design/main_structure.yml.j2 +38 -0
  212. instant_python-0.6.0/test/render/resources/domain_driven_design_config.yml +19 -0
  213. instant_python-0.6.0/test/render/resources/standard_project/main_structure.yml.j2 +27 -0
  214. instant_python-0.6.0/test/render/resources/standard_project_with_dependency_config.yml +20 -0
  215. instant_python-0.6.0/test/render/resources/standard_project_with_git_config.yml +18 -0
  216. instant_python-0.6.0/test/render/resources/test_template.j2 +2 -0
  217. instant_python-0.6.0/test/render/test_custom_project_renderer.py +18 -0
  218. instant_python-0.6.0/test/render/test_jinja_environment.py +23 -0
  219. instant_python-0.6.0/test/render/test_jinja_project_renderer.py +36 -0
  220. {instant_python-0.5.1 → instant_python-0.6.0}/uv.lock +756 -347
  221. instant_python-0.5.1/README.md +0 -62
  222. instant_python-0.5.1/docs/getting-started/features_overview.md +0 -24
  223. instant_python-0.5.1/docs/getting-started/first-steps.md +0 -15
  224. instant_python-0.5.1/docs/getting-started/index.md +0 -11
  225. instant_python-0.5.1/docs/getting-started/installation.md +0 -38
  226. instant_python-0.5.1/docs/guide/creating-a-project.md +0 -71
  227. instant_python-0.5.1/docs/guide/custom-templates.md +0 -80
  228. instant_python-0.5.1/docs/guide/folder-structure.md +0 -46
  229. instant_python-0.5.1/docs/guide/index.md +0 -9
  230. instant_python-0.5.1/docs/guide/when-to-use-commands.md +0 -39
  231. instant_python-0.5.1/docs/index.md +0 -56
  232. instant_python-0.5.1/instant_python/errors/application_error.py +0 -11
  233. instant_python-0.5.1/instant_python/errors/command_execution_error.py +0 -20
  234. instant_python-0.5.1/instant_python/errors/error_types.py +0 -6
  235. instant_python-0.5.1/instant_python/errors/template_file_not_found_error.py +0 -18
  236. instant_python-0.5.1/instant_python/errors/unknown_dependency_manager_error.py +0 -18
  237. instant_python-0.5.1/instant_python/errors/unknown_node_typer_error.py +0 -16
  238. instant_python-0.5.1/instant_python/errors/unknown_template_error.py +0 -16
  239. instant_python-0.5.1/instant_python/folder_cli.py +0 -50
  240. instant_python-0.5.1/instant_python/installer/dependency_manager.py +0 -15
  241. instant_python-0.5.1/instant_python/installer/dependency_manager_factory.py +0 -18
  242. instant_python-0.5.1/instant_python/installer/git_configurer.py +0 -50
  243. instant_python-0.5.1/instant_python/installer/installer.py +0 -24
  244. instant_python-0.5.1/instant_python/installer/managers.py +0 -6
  245. instant_python-0.5.1/instant_python/installer/pdm_manager.py +0 -86
  246. instant_python-0.5.1/instant_python/installer/uv_manager.py +0 -88
  247. instant_python-0.5.1/instant_python/project_cli.py +0 -100
  248. instant_python-0.5.1/instant_python/project_generator/boilerplate_file.py +0 -20
  249. instant_python-0.5.1/instant_python/project_generator/directory.py +0 -28
  250. instant_python-0.5.1/instant_python/project_generator/file.py +0 -16
  251. instant_python-0.5.1/instant_python/project_generator/folder_tree.py +0 -39
  252. instant_python-0.5.1/instant_python/project_generator/jinja_custom_filters.py +0 -19
  253. instant_python-0.5.1/instant_python/project_generator/jinja_environment.py +0 -20
  254. instant_python-0.5.1/instant_python/project_generator/jinja_template_manager.py +0 -37
  255. instant_python-0.5.1/instant_python/project_generator/project_generator.py +0 -36
  256. instant_python-0.5.1/instant_python/project_generator/template_manager.py +0 -7
  257. instant_python-0.5.1/instant_python/question_prompter/question/boolean_question.py +0 -13
  258. instant_python-0.5.1/instant_python/question_prompter/question/choice_question.py +0 -18
  259. instant_python-0.5.1/instant_python/question_prompter/question/dependencies_question.py +0 -43
  260. instant_python-0.5.1/instant_python/question_prompter/question/free_text_question.py +0 -13
  261. instant_python-0.5.1/instant_python/question_prompter/question/multiple_choice_question.py +0 -13
  262. instant_python-0.5.1/instant_python/question_prompter/question_wizard.py +0 -15
  263. instant_python-0.5.1/instant_python/question_prompter/requirements_configuration.py +0 -40
  264. instant_python-0.5.1/instant_python/question_prompter/step/dependencies_step.py +0 -20
  265. instant_python-0.5.1/instant_python/question_prompter/step/general_custom_template_project_step.py +0 -45
  266. instant_python-0.5.1/instant_python/question_prompter/step/general_project_step.py +0 -50
  267. instant_python-0.5.1/instant_python/question_prompter/step/git_step.py +0 -23
  268. instant_python-0.5.1/instant_python/question_prompter/step/template_step.py +0 -71
  269. instant_python-0.5.1/instant_python/question_prompter/template_types.py +0 -7
  270. instant_python-0.5.1/instant_python/templates/boilerplate/.python-version +0 -1
  271. instant_python-0.5.1/instant_python/templates/boilerplate/README.md +0 -5
  272. instant_python-0.5.1/instant_python/templates/boilerplate/exceptions/domain_error.py +0 -17
  273. instant_python-0.5.1/instant_python/templates/boilerplate/exceptions/invalid_id_format_error.py +0 -17
  274. instant_python-0.5.1/instant_python/templates/boilerplate/exceptions/invalid_negative_value_error.py +0 -17
  275. instant_python-0.5.1/instant_python/templates/boilerplate/exceptions/rabbit_mq_connection_not_established_error.py +0 -17
  276. instant_python-0.5.1/instant_python/templates/boilerplate/exceptions/required_value_error.py +0 -17
  277. instant_python-0.5.1/instant_python/templates/boilerplate/pyproject.toml +0 -29
  278. instant_python-0.5.1/instant_python/templates/project_structure/clean_architecture/main_structure.yml.j2 +0 -26
  279. instant_python-0.5.1/instant_python/templates/project_structure/domain_driven_design/main_structure.yml.j2 +0 -26
  280. instant_python-0.5.1/instant_python/templates/project_structure/standard_project/main_structure.yml.j2 +0 -26
  281. {instant_python-0.5.1 → instant_python-0.6.0}/.github/FUNDING.yml +0 -0
  282. {instant_python-0.5.1 → instant_python-0.6.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  283. {instant_python-0.5.1 → instant_python-0.6.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  284. {instant_python-0.5.1 → instant_python-0.6.0}/.github/actions/python_setup/action.yml +0 -0
  285. {instant_python-0.5.1 → instant_python-0.6.0}/.github/workflows/pages.yml +0 -0
  286. {instant_python-0.5.1 → instant_python-0.6.0}/.github/workflows/publish.yml +0 -0
  287. {instant_python-0.5.1 → instant_python-0.6.0}/.gitignore +0 -0
  288. {instant_python-0.5.1 → instant_python-0.6.0}/.python-version +0 -0
  289. {instant_python-0.5.1 → instant_python-0.6.0}/LICENSE +0 -0
  290. {instant_python-0.5.1 → instant_python-0.6.0}/cz.yaml +0 -0
  291. {instant_python-0.5.1 → instant_python-0.6.0}/docs/assets/favicon.svg +0 -0
  292. {instant_python-0.5.1 → instant_python-0.6.0}/docs/assets/logo.svg +0 -0
  293. {instant_python-0.5.1/docs → instant_python-0.6.0/docs/home}/contributing.md +0 -0
  294. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/__init__.py +0 -0
  295. {instant_python-0.5.1/instant_python/errors → instant_python-0.6.0/instant_python/commands}/__init__.py +0 -0
  296. {instant_python-0.5.1/instant_python/installer → instant_python-0.6.0/instant_python/configuration}/__init__.py +0 -0
  297. {instant_python-0.5.1/instant_python/project_generator → instant_python-0.6.0/instant_python/configuration/dependency}/__init__.py +0 -0
  298. {instant_python-0.5.1/instant_python/question_prompter → instant_python-0.6.0/instant_python/configuration/general}/__init__.py +0 -0
  299. {instant_python-0.5.1/instant_python/question_prompter/question → instant_python-0.6.0/instant_python/configuration/git}/__init__.py +0 -0
  300. {instant_python-0.5.1/instant_python/question_prompter/step → instant_python-0.6.0/instant_python/configuration/parser}/__init__.py +0 -0
  301. {instant_python-0.5.1/instant_python/templates → instant_python-0.6.0/instant_python/configuration/question}/__init__.py +0 -0
  302. {instant_python-0.5.1/instant_python/templates/boilerplate/event_bus → instant_python-0.6.0/instant_python/configuration/step}/__init__.py +0 -0
  303. {instant_python-0.5.1/instant_python/templates/boilerplate/exceptions → instant_python-0.6.0/instant_python/configuration/template}/__init__.py +0 -0
  304. {instant_python-0.5.1/instant_python/templates/boilerplate/fastapi → instant_python-0.6.0/instant_python/dependency_manager}/__init__.py +0 -0
  305. {instant_python-0.5.1/instant_python/templates/boilerplate/logger → instant_python-0.6.0/instant_python/git}/__init__.py +0 -0
  306. {instant_python-0.5.1/instant_python/templates/boilerplate/persistence → instant_python-0.6.0/instant_python/project_creator}/__init__.py +0 -0
  307. {instant_python-0.5.1/instant_python/project_generator → instant_python-0.6.0/instant_python/project_creator}/node.py +0 -0
  308. {instant_python-0.5.1/instant_python/templates/boilerplate/persistence/async → instant_python-0.6.0/instant_python/render}/__init__.py +0 -0
  309. {instant_python-0.5.1/instant_python/templates/boilerplate/persistence/synchronous → instant_python-0.6.0/instant_python/shared}/__init__.py +0 -0
  310. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/.gitignore +0 -0
  311. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/.pre-commit-config.yml +0 -0
  312. {instant_python-0.5.1/instant_python/templates/boilerplate/value_object → instant_python-0.6.0/instant_python/templates/boilerplate/event_bus}/__init__.py +0 -0
  313. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/event_bus/domain_event.py +0 -0
  314. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_settings.py +0 -0
  315. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/fastapi/status_code.py +0 -0
  316. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/github/test_lint.yml +0 -0
  317. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/logger/json_formatter.py +0 -0
  318. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/persistence/async/README.md +0 -0
  319. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/persistence/async/alembic.ini +0 -0
  320. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/persistence/async/postgres_settings.py +0 -0
  321. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/persistence/async/script.py.mako +0 -0
  322. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/persistence/base.py +0 -0
  323. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/pytest.ini +0 -0
  324. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/random_generator.py +0 -0
  325. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/scripts/create_aggregate.py +0 -0
  326. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/scripts/insert_template.py +0 -0
  327. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/scripts/local_setup.sh +0 -0
  328. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/scripts/post-merge +0 -0
  329. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/scripts/pre-commit +0 -0
  330. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/boilerplate/scripts/pre-push +0 -0
  331. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/alembic_migrator.yml.j2 +0 -0
  332. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/async_alembic.yml.j2 +0 -0
  333. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/async_sqlalchemy.yml.j2 +0 -0
  334. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/event_bus_domain.yml.j2 +0 -0
  335. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/event_bus_infra.yml.j2 +0 -0
  336. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/fastapi_app.yml.j2 +0 -0
  337. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/fastapi_infra.yml.j2 +0 -0
  338. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/github_action.yml.j2 +0 -0
  339. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/gitignore.yml.j2 +0 -0
  340. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/license.yml.j2 +0 -0
  341. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/logger.yml.j2 +0 -0
  342. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/macros.j2 +0 -0
  343. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/mypy.yml.j2 +0 -0
  344. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/pre_commit.yml.j2 +0 -0
  345. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/pyproject.yml.j2 +0 -0
  346. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/pytest.yml.j2 +0 -0
  347. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/python_version.yml.j2 +0 -0
  348. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/readme.yml.j2 +0 -0
  349. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/synchronous_sqlalchemy.yml.j2 +0 -0
  350. {instant_python-0.5.1 → instant_python-0.6.0}/instant_python/templates/project_structure/value_objects.yml.j2 +0 -0
  351. {instant_python-0.5.1 → instant_python-0.6.0}/tox.ini +0 -0
@@ -51,14 +51,19 @@ jobs:
51
51
  echo "Extracting changelog for tag: ${release}"
52
52
 
53
53
  awk -v tag="$release" '
54
- BEGIN {flag=0}
55
- /^## / {
56
- if (flag == 1 && $0 !~ ("^## " tag)) { exit }
57
- if ($0 ~ ("^## " tag)) { flag=1 }
54
+ BEGIN { printing=0 }
55
+ # start printing when we hit "## 0.5.2 "
56
+ $0 ~ ("^## " tag " ") {
57
+ printing=1
58
+ print
59
+ next
58
60
  }
59
- flag { print }
61
+ # stop printing when we hit another "## " after having printed
62
+ /^## / && printing { exit }
63
+ # print everything in between
64
+ printing { print }
60
65
  ' CHANGELOG.md > release_changelog.md
61
-
66
+
62
67
  cat release_changelog.md
63
68
 
64
69
  - name: Create release
@@ -0,0 +1,121 @@
1
+ name: Run lint, format and tests
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+
8
+ permissions:
9
+ contents: write
10
+ id-token: write
11
+
12
+ jobs:
13
+ lint:
14
+ name: lint
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+ with:
19
+ ref: ${{ github.head_ref }}
20
+ fetch-depth: 0
21
+ - uses: ./.github/actions/python_setup
22
+ - name: Check linting
23
+ id: check_lint
24
+ run: |
25
+ git pull --rebase origin main
26
+ uvx ruff check --exclude "instant_python/templates,instant_python/new_templates" instant_python test
27
+ continue-on-error: true
28
+ - name: Auto fix lint errors
29
+ id: fix_lint
30
+ if: ${{ steps.check_lint.outcome == 'failure' }}
31
+ run: uvx ruff check --fix --exclude "instant_python/templates,instant_python/templates" instant_python test
32
+ - name: Commit lint fixes
33
+ if: ${{ steps.fix_lint.outcome == 'success' }}
34
+ run: |
35
+ git config user.name "github-actions[bot]"
36
+ git config user.email "github-actions[bot]@users.noreply.github.com"
37
+
38
+ if git diff --quiet; then
39
+ echo "No changes to commit."
40
+ else
41
+ git add .
42
+ git commit -m "🚨 chore: fix linting issues via GitHub Actions"
43
+ git push
44
+ fi
45
+ env:
46
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
47
+ - name: Check linting again
48
+ run: uvx ruff check --exclude "instant_python/templates,instant_python/templates" instant_python test
49
+
50
+ format:
51
+ name: format
52
+ runs-on: ubuntu-latest
53
+ steps:
54
+ - uses: actions/checkout@v4
55
+ with:
56
+ ref: ${{ github.head_ref }}
57
+ fetch-depth: 0
58
+ - uses: ./.github/actions/python_setup
59
+ - name: Check code format
60
+ id: check_format
61
+ run: |
62
+ git pull --rebase origin main
63
+ uvx ruff format --check --exclude "instant_python/templates,instant_python/new_templates" instant_python test
64
+ continue-on-error: true
65
+ - name: Auto format code
66
+ id: format_code
67
+ if: ${{ steps.check_format.outcome == 'failure' }}
68
+ run: uvx ruff format --exclude "instant_python/templates,instant_python/templates" instant_python test
69
+ - name: Commit formatted code
70
+ if: ${{ steps.format_code.outcome == 'success' }}
71
+ run: |
72
+ git config user.name "github-actions[bot]"
73
+ git config user.email "github-actions[bot]@users.noreply.github.com"
74
+
75
+ if git diff --quiet; then
76
+ echo "No changes to commit."
77
+ else
78
+ git add .
79
+ git commit -m "🎨 style: format code via GitHub Actions"
80
+ git push
81
+ fi
82
+ env:
83
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
84
+ - name: Check code format again
85
+ run: uvx ruff format --check --exclude "instant_python/templates,instant_python/templates" instant_python test
86
+
87
+ test:
88
+ name: test
89
+ runs-on: ubuntu-latest
90
+ steps:
91
+ - uses: actions/checkout@v4
92
+ - uses: ./.github/actions/python_setup
93
+ - name: Install test dependencies
94
+ run: uv pip install pytest pytest-cov
95
+ - name: Run tests
96
+ run: uv run pytest --cov=instant_python --cov-report=xml --cov-report=html --cov-report=term-missing test -ra -s
97
+ - name: Upload coverage report
98
+ uses: codecov/codecov-action@v3
99
+ with:
100
+ files: coverage.xml
101
+ flags: unittests
102
+ name: codecov-coverage
103
+
104
+ rollback:
105
+ name: rollback
106
+ runs-on: ubuntu-latest
107
+ needs: [test]
108
+ if: ${{ always() && needs.test.result == 'failure' }}
109
+ steps:
110
+ - uses: actions/checkout@v4
111
+ with:
112
+ fetch-depth: 0
113
+ - name: Revert pushed commits
114
+ run: |
115
+ git config user.name "github-actions[bot]"
116
+ git config user.email "github-actions[bot]@users.noreply.github.com"
117
+ git revert --no-edit --no-commit ${{ github.event.before }}..${{ github.sha }}
118
+ git commit -m "⏪️ revert: revert changes due to test failures"
119
+ git push --force-with-lease origin main
120
+ env:
121
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -1,3 +1,267 @@
1
+ ## 0.6.0 (2025-06-27)
2
+
3
+ ### ✨ Features
4
+
5
+ - **configuration**: remove white spaces from slug
6
+ - **configuration**: raise error for bounded context if specify_bounded_context is true and no DDD template is set or if either bounded context or aggregate name are set
7
+ - **commands**: set ipy.yml as the default configuration file
8
+ - **shared**: add SupportedBuiltInFeatures enum for built-in feature management
9
+ - **configuration**: add method to retrieve supported templates
10
+ - **configuration**: add CUSTOM template type to SupportedTemplates
11
+ - **shared**: add SupportedLicenses enum with method to retrieve supported licenses
12
+ - **shared**: add SupportedPythonVersions enum with method to retrieve supported versions
13
+ - **shared**: add method to retrieve list of supported managers
14
+ - **cli**: add config command to CLI for configuration management
15
+ - **commands**: add command to generate configuration file for new projects
16
+ - **configuration**: add save_on_current_directory method to save configuration in the current directory
17
+ - **configuration**: implement QuestionWizard class to manage question steps and parse answers
18
+ - **configuration**: add parse_from_answers method to differentiate when parsing comes from user answers
19
+ - **configuration**: add Step interface for all concrete implementations and Steps container to manage configuration steps
20
+ - **configuration**: implement DependenciesStep to manage user input for dependency installation
21
+ - **configuration**: add TemplateStep to manage template selection and built-in features
22
+ - **configuration**: implement GitStep to handle git initialization questions
23
+ - **configuration**: implement GeneralQuestionStep to store all questions that will allow the user to build the general section of the config file
24
+ - **configuration**: implement ConditionalQuestion
25
+ - **configuration**: implement MultipleChoiceQuestion
26
+ - **configuration**: implement FreeTextQuestion
27
+ - **configuration**: implement ChoiceQuestion for questions where user has to select one option between some
28
+ - **configuration**: implement boolean question
29
+ - **configuration**: create base Question class defining common logic for all concrete type of questions
30
+ - **configuration**: add wrapper of questionary library to be able to test easily question classes
31
+ - **cli**: include new "init" command in general application
32
+ - **commands**: allow the option of passing a custom template to generate a project with a custom structure
33
+ - **project-creator**: allow FileSystem to handle normal files apart from boilerplate files
34
+ - **renderer**: implement CustomProjectRenderer
35
+ - **commands**: move configuration file to project
36
+ - **configuration**: add method to move configuration file to generated project
37
+ - **configuration**: add config file path attribute and named constructor to create ConfigurationSchema from file
38
+ - **configuration**: automatically compute "year" value in general configuration
39
+ - **commands**: rename new project command to "init" so the use is ipy init
40
+ - **commands**: integrate GitConfigurer to set up repository during project command
41
+ - **git**: automate initial commit during repository setup
42
+ - **git**: set user information during repository initialization
43
+ - **git**: add repository initialization method to GitConfigurer
44
+ - **git**: do nothing if git is not set to be configured
45
+ - **git**: add "setup_repository" method to GitConfigurer
46
+ - **git**: create GitConfigurer class with basic init arguments
47
+ - **configuration**: add methods to compute flag and name of dependencies inside DependencyConfiguration to not violate encapsulation
48
+ - **templates**: add new templates using new configuration nomenclature
49
+ - **commands**: add logic to instantiate and setup virtual environment using user dependency manager selection
50
+ - **configuration**: add property to expose python version easily
51
+ - **dependency-manager**: implement factory method to encapsulate instantiation of dependency manager based on user selection
52
+ - **configuration**: add dependency_manager property to configuration schema
53
+ - **dependency-manager**: implement concrete version of dependency manager using pdm
54
+ - **dependency-manager**: create DependencyManager interface
55
+ - **dependency-manager**: implement "setup_environment" method to orchestrate all steps to install manager and dependencies
56
+ - **dependency-manager**: add command to create virtual environment in case no additional dependencies are specified
57
+ - **dependency-manager**: add logic to install dependencies with uv
58
+ - **dependency-manager**: implement "_install_python" method to install user python version using uv
59
+ - **dependency-manager**: implement "_install" method delegating command execution to a helper "_run_command" method
60
+ - **dependency-manager**: add _install method to UvDependencyManager
61
+ - **dependency-manager**: create UvDependencyManager class
62
+ - **project-creator**: implement "write_on_disk" method for FileSystem
63
+ - **project-creator**: let FileSystem constructor receive project structure as an argument
64
+ - **project-creator**: remove unnecessary arguments for FileSystem now that project structure gets injected
65
+ - **project-creator**: treat "create_folders_and_files" method as a named constructor that is in charge of creating the file system tree
66
+ - **project-creator**: add children to Directory __repr__ method
67
+ - **project-creator**: modify file system logic to receive rendered project structure injected instead of be coupled to how it gets generated
68
+ - **project-creator**: implement logic to fill file system files
69
+ - **project-creator**: raise error when file has not been created and its tried to be filled
70
+ - **project-creator**: implement FileHasNotBeenCreated application error
71
+ - **project-creator**: implement File fill method to be able to write template content inside
72
+ - **project-creator**: add template path attribute to File class to be able to locate the template with its content
73
+ - **project-creator**: implement FileSystem class to generate the directories and files of the project
74
+ - **configuration**: add property to expose project folder name based on configuration
75
+ - **project-creator**: create inner directories in Directory
76
+ - **project-creator**: inject children argument to Directory
77
+ - **project-creator**: when directory is defined as python module, create '__init__' file inside
78
+ - **project-creator**: implement logic to create directories
79
+ - **project-creator**: create Directory class with basic attributes
80
+ - **project-creator**: create boilerplate file at desired path
81
+ - **project-creator**: add '__repr__' method to BoilerplateFile class
82
+ - **project-creator**: implement BoilerplateFile extracting file name
83
+ - **project-creator**: define basic interface for different nodes
84
+ - **commands**: render project structure based on parsed configuration file
85
+ - **builder**: include 'has_dependency' custom filter in jinja environment
86
+ - **project-generator**: implement 'has_dependency' custom filter for jinja environment
87
+ - **configuration**: add ConfigurationSchemaPrimitives typed dict to type better to_primitives return
88
+ - **configuration**: add "template_type" property to know which template the user has selected
89
+ - **builder**: implement "get_project" method in JinjaProjectRender class
90
+ - **builder**: define interface of JinjaProjectRender
91
+ - **builder**: implement basic ProjectRender class with constructor to avoid linter fail
92
+ - **builder**: implement "render_template" method to be able to process a jinja template and render its content
93
+ - **builder**: include custom filter in jinja environment
94
+ - **builder**: initialize jinja environment
95
+ - **commands**: add new command that receives config file
96
+ - **configuration**: parse template configuration
97
+ - **configuration**: handler missing mandatory fields for git configuration
98
+ - **configuration**: parse git configuration
99
+ - **configuration**: parse dependencies configuration
100
+ - **configuration**: ensure all mandatory fields are present in general configuration
101
+ - **configuration**: parse general configuration
102
+ - **configuration**: verify all required keys are present in config file
103
+ - **configuration**: handle EmptyConfigurationNotAllowed error for empty config files
104
+ - **configuration**: create Parser class with parser method that raises single error
105
+ - **configuration**: add ConfigurationSchema to encapsulate general, dependency, template, and git configurations
106
+ - **configuration**: add template configuration management with validation for templates and built-in features
107
+ - **configuration**: implement GitConfiguration class to manage user settings
108
+ - **configuration**: add validation to ensure non-dev dependencies are not included in groups
109
+ - **configuration**: add DependencyConfiguration class to store dependencies parameters
110
+ - **configuration**: validate supported dependency managers in GeneralConfiguration
111
+ - **configuration**: add InvalidDependencyManagerValue error for unsupported dependency managers
112
+ - **configuration**: validate supported Python versions in GeneralConfiguration
113
+ - **configuration**: add InvalidPythonVersionValue error for unsupported Python versions
114
+ - **configuration**: validate passed license is supported by the application
115
+ - **configuration**: create application error when invalid license is passed
116
+ - **errors**: add configuration error to possible error types
117
+ - **configuration**: add GeneralConfiguration dataclass for project settings
118
+ - **configuration**: add configuration template for project setup
119
+
120
+ ### 🐛 Bug Fixes
121
+
122
+ - **template**: correct reference to built_in_features in YAML clean architecture template
123
+ - **configuration**: rename TemplateStep key from 'template' to 'name'
124
+ - **renderer**: manually include pyproject.toml boilerplate file when making a project with custom template to be able to create virtual environment
125
+ - **templates**: correct accessing general information in LICENSE template
126
+ - **commands**: pass configuration dependencies directly when setting up environment
127
+ - **project-creator**: include TemplateTypes in context when rendering files
128
+ - **templates**: correct indentantions in new templates
129
+ - **dependency-manager**: correct test that verifies dependency installation command is called with group flag
130
+ - **dependency-manager**: do not use --dev and --group flag
131
+ - **project-creator**: correct boilerplate template example for test to have correct format
132
+ - **project-creator**: modify test method that extracts project file system structure to iterate the folders in order and avoid test failing only for different order
133
+ - **builder**: modify how test examples files are accessed to use a full path all the times
134
+ - **configuration**: return empty list of dependencies when configuration file has no dependencies specified
135
+ - **commands**: correct requirements access to slug variable
136
+ - **error**: correct message formatting in NotDevDependencyIncludedInGroup exception
137
+ - **configuration**: make dependencies field a list of DependencyConfiguration
138
+
139
+ ### ♻️ Code Refactoring
140
+
141
+ - **dependency-manager**: do not print installed dependency in pdm manager
142
+ - **templates**: include default dependencies when github actions is selected and write a message in the README to inform the project has been created using ipy
143
+ - **errors**: remove errors folder
144
+ - **errors**: move ApplicationError and ErrorTypes to shared module
145
+ - **render**: move UnknownTemplateError to render module
146
+ - **project-creator**: move UnknownNodeTypeError to project_creator module
147
+ - **dependency-manager**: move UnknownDependencyManagerError to the dependency manager module
148
+ - **renderer**: move TemplateFileNotFoundError import to the render module
149
+ - **dependency-manager**: move CommandExecutionError import to dependency manager module
150
+ - **project-creator**: update type hints to ensure backward compatibility with older python versions
151
+ - **configuration**: replace hardcoded options with dynamic retrieval from SupportedLicenses, SupportedManagers, SupportedPythonVersions, and SupportedBuiltInFeatures
152
+ - **configuration**: update type hints to ensure backward compatibility with older python versions
153
+ - **configuration**: replace hardcoded template name with SupportedTemplates enum
154
+ - **configuration**: replace hardcoded built-in features with dynamic retrieval from SupportedBuiltInFeatures
155
+ - **configuration**: move SupportedTemplates to shared module
156
+ - **configuration**: replace hardcoded supported templates with dynamic retrieval from SupportedTemplates
157
+ - **configuration**: rename TemplateTypes to SupportedTemplates
158
+ - **configuration**: update supported licenses to use SupportedLicenses enum
159
+ - **configuration**: update supported python versions to use respective enums
160
+ - **configuration**: update supported dependency managers to use get_supported_managers method
161
+ - **shared**: rename Managers enum to SupportedManagers
162
+ - **configuration**: update supported dependency managers to use Managers enum
163
+ - **dependency-manager**: move Managers enum to shared folder
164
+ - **templates**: rename new_templates folder to templates now that old templates folder have been removed
165
+ - **templates**: remove old templates files
166
+ - **installer**: remove old installer folder
167
+ - **dependency-manager**: move managers enum to dependency_manager folder
168
+ - **installer**: remove old installer files
169
+ - **prompter**: remove old question prompter folder
170
+ - **project-creator**: use TemplateTypes enum from configuration
171
+ - **project-generator**: remove old project generator folder
172
+ - **renderer**: move jinja_custom_filters.py to renderer folder
173
+ - **project-generator**: remove old files for generating the project
174
+ - **prompter**: remove old questions and steps
175
+ - **commands**: rename project file with init command to init
176
+ - **commands**: remove folder_cli and project_cli commands
177
+ - **cli**: remove folder_cli and project_cli from CLI application
178
+ - **configuration**: rename question step files for consistency and clarity
179
+ - **configuration**: set default value for _config_file_path in ConfigurationSchema
180
+ - **parser**: extract configuration parsing logic into separate method for improved readability
181
+ - **parser**: rename parse method to parse_from_file for clarity
182
+ - **configuration**: refactor question steps to inherit from Step interface
183
+ - **configuration**: move steps to its own folder inside configuration
184
+ - **parser**: use ConfigurationSchema named constructor to generate parsed config from user file
185
+ - **git**: enhance repository setup with informative messages
186
+ - **dependency-manager**: avoid accessing dependency configuration internal data and delegate behavior to it
187
+ - **dependency-manager**: modify uv dependency manager type hint to receive a list of DependencyConfiguration
188
+ - **dependency-manager**: move "_run_command" method to DependencyManager class to be reused by other implementations
189
+ - **dependency-manager**: let UvDependencyManager implement DependencyManager interface
190
+ - **dependency-manager**: add attribute _uv to store the name of uv command
191
+ - **dependency-manager**: add print statements to inform the user about what is happening
192
+ - **dependency-manager**: reorganize the logic to build the command for installing dependencies
193
+ - **dependency-manager**: extract "_build_dependency_install_command" method to encapsulate the logic of creating the command needed to install a dependency
194
+ - **dependency-manager**: extract "_create_virtual_environment" method to express what uv sync command is doing
195
+ - **commands**: update project command to use new "write_on_disk" file system method to create the project on disk
196
+ - **project-creator**: remove unused create_folders_and_files method
197
+ - **project-creator**: rename "build_tree" method to "build_node"
198
+ - **project-creator**: store in a list all the files that are created in the project file system
199
+ - **project-creator**: when creating a File save its path to be able to recover it when filling it
200
+ - **project-creator**: extract setup_method for file tests to clean up file creation
201
+ - **commands**: allow to execute new project command
202
+ - **commands**: change how new project command is handled using directly FyleSystem class
203
+ - **render**: rename JinjaProjectRender to JinjaProjectRenderer
204
+ - **render**: modify JinjaProjectRender return type hint
205
+ - **configuration**: modify configuration parser test for happy paths using approvaltests to verify expected configuration gets parsed correctly instead of making lots of separate tests for each section of the configuration
206
+ - **render**: remove expected project json files for tests
207
+ - **render**: modify tests to use approvaltest and don't need expected project json files
208
+ - **project-creator**: update teardown_method to delete correctly directories generated on tests
209
+ - **project-creator**: modify directory tests to use object mother
210
+ - **render**: modify resources test projects to not contain "root" key
211
+ - **project-creator**: make Directory inherit from Node interface
212
+ - **project-creator**: remove children argument from directory
213
+ - **project-creator**: modify teardown_method to delete files inside directory after test
214
+ - **project-creator**: rename boilerplate file to file
215
+ - **commands**: add type hint to project command
216
+ - **render**: rename builder module to render
217
+ - **builder**: remove old project_render.py and test
218
+ - **builder**: parametrize jinja project render tests
219
+ - **builder**: modify main_structure.yml.j2 for test case with dependency
220
+ - **builder**: load expected project structure from JSON file instead of hardcoding
221
+ - **builder**: rename config file to 'clean_architecture_config.yml' and update test to reflect the change
222
+ - **builder**: set template base dir as argument of 'render_project_structure' method instead of argument to constructor
223
+ - **builder**: rename constant for main structure template
224
+ - **builder**: remove 'main_structure_template' argument from render constructor as the main file must always be named main_structure.yml.j2
225
+ - **builder**: modify JinjaProjectRender arguments for test to point to test example project yml
226
+ - **builder**: rename "get_project" method to express better the intention of the method
227
+ - **builder**: move example template yml of project for test
228
+ - **builder**: parametrize base dir for template and main file to not be coupled to production structure when testing
229
+ - **configuration**: use typed dict to type "to_primitives" return method
230
+ - **configuration**: avoid possibility of accessing GeneralConfiguration class variables
231
+ - **builder**: add setup method to jinja environment test class to clean up jinja env instantiation
232
+ - **builder**: pass package name and template directory to jinja environment to be able to differentiate between production templates and test templates
233
+ - **cli**: rename instant_python_typer correctly and add missing type hints
234
+ - **template**: modify domain error templates to avoid repeating implementation of type and message properties
235
+ - modify all application errors to pass message and type error to base error and not implement neither type or message properties
236
+ - **error**: modify ApplicationError to pass the message and type and avoid repeating the same pattern to return the message and type of error
237
+ - **configuration**: handle when template config mandatory field is missing
238
+ - **configuration**: modify config.yml file to only include template name
239
+ - **configuration**: modify config examples for test to have git fields with same name as class argument
240
+ - **configuration**: pass parsed arguments to configuration classes using ** operator with dicts and handle TypeError to detect missing mandatory fields
241
+ - **configuration**: automatically cast attributes value to string in case yaml reading gets interpreted as a float
242
+ - **configuration**: modify config examples for test to have is_dev field with same name as class argument
243
+ - **configuration**: modify test assertion to compare expected dependencies with parsed dependencies configuration
244
+ - **tests**: update config file path handling to remove file extension
245
+ - **configuration**: extract helper function to build config file path for tests
246
+ - **configuration**: remove unnecessary empty check in tests
247
+ - **configuration**: temporarily set dependencies, template and git configs to not needed when initializing ConfigurationSchema to be able to test it step by step
248
+ - **configuration**: convert constants to class variables
249
+ - **configuration**: modify configuration errors to pass wrong value and supported values instead of accessing them
250
+ - **configuration**: create auxiliar methods for better readability when extracting config file content
251
+ - **configuration**: extract semantic method to encapsulate reading configuration file
252
+ - **configuration**: modify parse method to open config file
253
+ - **configuration**: reorganize configuration files in subfolders to expose clearer the concepts of the configuration
254
+ - **configuration**: join unsupported values test in a parametrized test
255
+ - **configuration**: move supported constants to a separate file to avoid circular import errors
256
+ - **prompter**: rename project_slug to slug for consistency across templates
257
+ - **cli**: move folder and project cli commands to specific command module
258
+
259
+ ## 0.5.2 (2025-04-16)
260
+
261
+ ### 🐛 Bug Fixes
262
+
263
+ - **template**: fix project slug placeholder in README template
264
+
1
265
  ## 0.5.1 (2025-04-15)
2
266
 
3
267
  ### 🐛 Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: instant-python
3
- Version: 0.5.1
3
+ Version: 0.6.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/
@@ -211,6 +211,12 @@ Classifier: Environment :: Console
211
211
  Classifier: Intended Audience :: Developers
212
212
  Classifier: Operating System :: MacOS
213
213
  Classifier: Operating System :: POSIX :: Linux
214
+ Classifier: Operating System :: Unix
215
+ Classifier: Topic :: Software Development :: Code Generators
216
+ Classifier: Topic :: Software Development :: Libraries
217
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
218
+ Classifier: Topic :: System :: Installation/Setup
219
+ Classifier: Topic :: System :: Shells
214
220
  Requires-Python: >=3.9
215
221
  Requires-Dist: jinja2>=3.1.5
216
222
  Requires-Dist: pyyaml>=6.0.2
@@ -220,12 +226,14 @@ Description-Content-Type: text/markdown
220
226
 
221
227
  <div align="center">
222
228
  <h1>⚡️ Instant Boilerplate for Python Projects ⚡️</h1>
223
- <strong>Start your Python project right away</strong>
229
+ <strong>Fast, easy and reliable project generator for your Python projects.</strong>
224
230
  </div>
231
+
225
232
  <p align="center">
226
- <a href="https://dimanu-py.github.io/instant-python/getting-started/">Getting Started</a>&nbsp;&nbsp;•&nbsp;
227
- <a href="https://dimanu-py.github.io/instant-python/guide">Guide</a>&nbsp;&nbsp;•&nbsp;
228
- <a href="https://dimanu-py.github.io/instant-python/contributing">Contributing</a>
233
+ <a href="https://dimanu-py.github.io/instant-python/home/getting_started/">Getting Started</a>&nbsp;&nbsp;•&nbsp;
234
+ <a href="https://dimanu-py.github.io/instant-python/guide/command_config/">Usage</a>&nbsp;&nbsp;•&nbsp;
235
+ <a href="https://dimanu-py.github.io/instant-python/examples/configuration/">Examples</a>&nbsp;&nbsp;•&nbsp;
236
+ <a href="https://dimanu-py.github.io/instant-python/home/contributing/">Contributing</a>
229
237
  </p>
230
238
  <p align="center">
231
239
  <img
@@ -236,47 +244,72 @@ Description-Content-Type: text/markdown
236
244
  <br>
237
245
  </p>
238
246
 
247
+ <div align="center"><table><tr><td>
248
+ <b>Instant Python</b> replaces extensive manual setup with a simple command to get started quickly. Its motivation is to emulate
249
+ commands like `ng new` or `create-react-app`, but for Python projects.
250
+
251
+ <br><br>
252
+
253
+ <b>Why use Instant Python?</b> Generating your Python project with Instant Python lets you:
254
+
255
+ <ul style="list-style-type: none">
256
+ <li>⏱️ Slash folder & config setup time to seconds</li>
257
+ <li>🐍 Instantly install & switch between any Python version</li>
258
+ <li>🔧 Effortlessly configure your favorite project manager</li>
259
+ <li>📁 Kickstart with ready-made or fully custom project structures</li>
260
+ <li>🔄 Initialize a Git repo in just a few clicks</li>
261
+ <li>📦 Auto-install all your go-to dependencies</li>
262
+ <li>🚀 Ship with production-ready boilerplates out of the box</li>
263
+ </ul>
264
+
265
+ </td></tr></table></div>
266
+
267
+ ## Documentation
268
+
269
+ This section provides a high-level overview of the `instant-python` library, its features, and how to get started.
270
+ For detailed instructions and examples, please refer to the [full Instant Python documentation](https://dimanu-py.github.io/instant-python/).
271
+
272
+ - [Installation](#installation)
273
+ - [Getting Started](docs/home/getting_started.md)
274
+ - [Examples](./docs/examples/index.md)
275
+
276
+ ### Need help?
277
+
278
+ - Join a discussion 💬 on [GitHub Discussions]
279
+ - [Raise an issue][GitHub Issues] on GitHub
280
+
281
+ [GitHub Discussions]: https://github.com/dimanu-py/instant-python/discussions
282
+ [GitHub Issues]: https://github.com/dimanu-py/instant-python/issues
283
+
239
284
  ## Installation
240
285
 
241
- Install `instant-python` from PyPI:
286
+ The latest version of `instant-python` can be installed from PyPI:
242
287
 
243
288
  ```bash
244
- # With pipx
245
- pipx install instant-python
246
- ```
247
- ```bash
248
- # With pip in pyenv
249
289
  pip install instant-python
250
290
  ```
251
291
 
252
- ## Documentation
292
+ > [!TIP]
293
+ > We highly recommend using a virtual environment to avoid conflicts with other Python packages.
253
294
 
254
- The official documentation is available at [dimanu-py.github.io/instant-python](https://dimanu-py.github.io/instant-python).
255
- We recommend to visit the page to understand the features and how to use the library.
295
+ ### Requirements
256
296
 
257
- Additionally, you can also run the help command to get started:
297
+ Instant Python tries to support the latest Python versions, we officially support from Python 3.10 to 3.13.
298
+ Older versions of Python may work, but they are not guaranteed to be compatible.
258
299
 
259
- ```bash
260
- ipy --help
261
- ```
300
+ [//]: # (### Do Not Track)
301
+
302
+ [//]: # ()
303
+ [//]: # (In order to get better insights about the usage of the library, we collect anonymous usage data. The only)
304
+
305
+ [//]: # (data we collect is the commands you run. No personal data is collected as part of this request.)
306
+
307
+ [//]: # ()
308
+ [//]: # (You can disable this feature by setting the environment variable `INSTANT_PYTHON_NO_TRACK` to `1` or )
262
309
 
263
- ## Features
310
+ [//]: # (passing the `--no-track` option to any command.)
264
311
 
265
- With `instant-python` there is a lot of features you can customize easily so you can start coding on your project
266
- as soon as possible. An overview of the features is given below, but you can find a more detailed explanation in the
267
- [documentation](https://dimanu-py.github.io/instant-python/guide/features/).
312
+ ## Contributing
268
313
 
269
- - Project slug: Configure the name of the main folder of your project.
270
- - Source name: Configure the name of the source code folder of your project.
271
- - Description: Include a description about your project.
272
- - Version: Set the initial version of your project.
273
- - Author: Set the author of the project.
274
- - License: Choose between _MIT_, _Apache_ or _GPL_ licenses to set your project.
275
- - Python version: Select the Python version you want to use for your project between versions 3.13 to 3.10.
276
- - Dependency manager: Choose between _uv_ or _pdm_ dependency managers.
277
- - Git: configure your project as a git repository automatically.
278
- - Default templates: select your project template between Domain Driven Design, Clean Architecture or Standard Project to
279
- automatically generate your project folders and files.
280
- - Out of the box implementations: include some boilerplate and implementations code that will help you to start your project faster.
281
- Some of the most popular implementations are value objects, domain error modelling, makefile and Async SQL Alchemy.
282
- - Dependencies: install dependencies automatically in your project.
314
+ We welcome contributions to `instant-python`! If you have ideas, suggestions, or improvements, please check out our
315
+ [contributing guide](docs/home/contributing.md) for details on how to get involved.
@@ -0,0 +1,89 @@
1
+ <div align="center">
2
+ <h1>⚡️ Instant Boilerplate for Python Projects ⚡️</h1>
3
+ <strong>Fast, easy and reliable project generator for your Python projects.</strong>
4
+ </div>
5
+
6
+ <p align="center">
7
+ <a href="https://dimanu-py.github.io/instant-python/home/getting_started/">Getting Started</a>&nbsp;&nbsp;•&nbsp;
8
+ <a href="https://dimanu-py.github.io/instant-python/guide/command_config/">Usage</a>&nbsp;&nbsp;•&nbsp;
9
+ <a href="https://dimanu-py.github.io/instant-python/examples/configuration/">Examples</a>&nbsp;&nbsp;•&nbsp;
10
+ <a href="https://dimanu-py.github.io/instant-python/home/contributing/">Contributing</a>
11
+ </p>
12
+ <p align="center">
13
+ <img
14
+ src="https://github.com/user-attachments/assets/132513c0-e472-4523-a0fd-c27b70dfd78a"
15
+ alt="instant-python-demo"
16
+ width="80%"
17
+ />
18
+ <br>
19
+ </p>
20
+
21
+ <div align="center"><table><tr><td>
22
+ <b>Instant Python</b> replaces extensive manual setup with a simple command to get started quickly. Its motivation is to emulate
23
+ commands like `ng new` or `create-react-app`, but for Python projects.
24
+
25
+ <br><br>
26
+
27
+ <b>Why use Instant Python?</b> Generating your Python project with Instant Python lets you:
28
+
29
+ <ul style="list-style-type: none">
30
+ <li>⏱️ Slash folder & config setup time to seconds</li>
31
+ <li>🐍 Instantly install & switch between any Python version</li>
32
+ <li>🔧 Effortlessly configure your favorite project manager</li>
33
+ <li>📁 Kickstart with ready-made or fully custom project structures</li>
34
+ <li>🔄 Initialize a Git repo in just a few clicks</li>
35
+ <li>📦 Auto-install all your go-to dependencies</li>
36
+ <li>🚀 Ship with production-ready boilerplates out of the box</li>
37
+ </ul>
38
+
39
+ </td></tr></table></div>
40
+
41
+ ## Documentation
42
+
43
+ This section provides a high-level overview of the `instant-python` library, its features, and how to get started.
44
+ For detailed instructions and examples, please refer to the [full Instant Python documentation](https://dimanu-py.github.io/instant-python/).
45
+
46
+ - [Installation](#installation)
47
+ - [Getting Started](docs/home/getting_started.md)
48
+ - [Examples](./docs/examples/index.md)
49
+
50
+ ### Need help?
51
+
52
+ - Join a discussion 💬 on [GitHub Discussions]
53
+ - [Raise an issue][GitHub Issues] on GitHub
54
+
55
+ [GitHub Discussions]: https://github.com/dimanu-py/instant-python/discussions
56
+ [GitHub Issues]: https://github.com/dimanu-py/instant-python/issues
57
+
58
+ ## Installation
59
+
60
+ The latest version of `instant-python` can be installed from PyPI:
61
+
62
+ ```bash
63
+ pip install instant-python
64
+ ```
65
+
66
+ > [!TIP]
67
+ > We highly recommend using a virtual environment to avoid conflicts with other Python packages.
68
+
69
+ ### Requirements
70
+
71
+ Instant Python tries to support the latest Python versions, we officially support from Python 3.10 to 3.13.
72
+ Older versions of Python may work, but they are not guaranteed to be compatible.
73
+
74
+ [//]: # (### Do Not Track)
75
+
76
+ [//]: # ()
77
+ [//]: # (In order to get better insights about the usage of the library, we collect anonymous usage data. The only)
78
+
79
+ [//]: # (data we collect is the commands you run. No personal data is collected as part of this request.)
80
+
81
+ [//]: # ()
82
+ [//]: # (You can disable this feature by setting the environment variable `INSTANT_PYTHON_NO_TRACK` to `1` or )
83
+
84
+ [//]: # (passing the `--no-track` option to any command.)
85
+
86
+ ## Contributing
87
+
88
+ We welcome contributions to `instant-python`! If you have ideas, suggestions, or improvements, please check out our
89
+ [contributing guide](docs/home/contributing.md) for details on how to get involved.
@@ -0,0 +1,7 @@
1
+ import requests
2
+
3
+ def define_env(env):
4
+ @env.macro
5
+ def download_data(package: str):
6
+ response = requests.get(f"https://pypistats.org/api/packages/{package}/overall?mirrors=false")
7
+ return response.json()["data"]