instant-python 0.13.0__tar.gz → 0.14.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.
- {instant_python-0.13.0 → instant_python-0.14.0}/CHANGELOG.md +112 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/PKG-INFO +1 -1
- instant_python-0.14.0/instant_python/config/application/config_generator.py +25 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/config/domain/config_parser.py +2 -2
- instant_python-0.13.0/instant_python/config/domain/configuration_schema.py → instant_python-0.14.0/instant_python/config/domain/config_schema.py +20 -26
- instant_python-0.14.0/instant_python/config/domain/config_writer.py +9 -0
- instant_python-0.13.0/instant_python/config/domain/dependency_configuration.py → instant_python-0.14.0/instant_python/config/domain/dependency_config.py +1 -1
- instant_python-0.13.0/instant_python/config/domain/general_configuration.py → instant_python-0.14.0/instant_python/config/domain/general_config.py +1 -1
- instant_python-0.13.0/instant_python/config/domain/git_configuration.py → instant_python-0.14.0/instant_python/config/domain/git_config.py +1 -1
- instant_python-0.13.0/instant_python/config/domain/template_configuration.py → instant_python-0.14.0/instant_python/config/domain/template_config.py +7 -7
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/config/infra/parser/errors.py +2 -2
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/config/infra/parser/parser.py +18 -18
- instant_python-0.14.0/instant_python/config/infra/writer/yaml_config_writer.py +13 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/configuration/parser/parser.py +20 -20
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/dependency_manager/dependency_manager.py +2 -2
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/dependency_manager/pdm_dependency_manager.py +4 -4
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/dependency_manager/uv_dependency_manager.py +4 -4
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/git/git_configurer.py +2 -2
- instant_python-0.14.0/instant_python/initialize/application/config_reader.py +14 -0
- instant_python-0.14.0/instant_python/initialize/application/project_initializer.py +13 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/initialize/delivery/cli.py +2 -2
- instant_python-0.13.0/instant_python/initialize/domain/configuration_repository.py → instant_python-0.14.0/instant_python/initialize/domain/config_repository.py +1 -1
- instant_python-0.14.0/instant_python/initialize/domain/nodes.py +8 -0
- instant_python-0.14.0/instant_python/initialize/domain/project_renderer.py +9 -0
- instant_python-0.13.0/instant_python/initialize/infra/configuration_repository.py → instant_python-0.14.0/instant_python/initialize/infra/persistence/config_repository.py +2 -2
- instant_python-0.14.0/instant_python/initialize/infra/renderer/jinja_environment.py +61 -0
- instant_python-0.14.0/instant_python/initialize/infra/renderer/jinja_project_renderer.py +48 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/project_creator/file.py +2 -2
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/project_creator/file_system.py +2 -2
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/render/jinja_project_renderer.py +3 -3
- instant_python-0.14.0/instant_python/templates/boilerplate/exceptions/base_error.py +13 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/exceptions/domain_error.py +1 -1
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/exceptions/domain_event_type_not_found_error.py +1 -1
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/exceptions/incorrect_value_type_error.py +1 -1
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/exceptions/invalid_id_format_error.py +1 -1
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/exceptions/invalid_negative_value_error.py +1 -1
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/exceptions/rabbit_mq_connection_not_established_error.py +1 -1
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/exceptions/required_value_error.py +1 -1
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/fastapi/error_handlers.py +2 -3
- instant_python-0.14.0/instant_python/templates/boilerplate/persistence/async/async_session.py +25 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/persistence/async/sqlalchemy_repository.py +1 -1
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/async_sqlalchemy.yml.j2 +1 -1
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/clean_architecture/source.yml.j2 +1 -4
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/domain_driven_design/source.yml.j2 +2 -5
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/standard_project/source.yml.j2 +1 -4
- {instant_python-0.13.0 → instant_python-0.14.0}/pyproject.toml +2 -2
- instant_python-0.14.0/test/config/application/test_config_generator.py +32 -0
- instant_python-0.14.0/test/config/domain/mothers/config_schema_mother.py +25 -0
- instant_python-0.13.0/test/config/domain/mothers/dependency_configuration_mother.py → instant_python-0.14.0/test/config/domain/mothers/dependency_config_mother.py +7 -7
- instant_python-0.14.0/test/config/domain/mothers/general_config_mother.py +31 -0
- instant_python-0.14.0/test/config/domain/mothers/git_config_mother.py +22 -0
- instant_python-0.13.0/test/config/domain/mothers/template_configuration_mother.py → instant_python-0.14.0/test/config/domain/mothers/template_config_mother.py +12 -12
- instant_python-0.14.0/test/config/domain/test_dependency_config.py +35 -0
- instant_python-0.13.0/test/config/domain/test_general_configuration.py → instant_python-0.14.0/test/config/domain/test_general_config.py +8 -8
- instant_python-0.14.0/test/config/domain/test_git_config.py +43 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/config/domain/test_template_configuration.py +10 -10
- instant_python-0.14.0/test/config/infra/writer/test_yaml_config_writer.py +16 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/dependency_manager/test_pdm_dependency_manager.py +3 -3
- {instant_python-0.13.0 → instant_python-0.14.0}/test/dependency_manager/test_uv_dependency_manager.py +4 -4
- {instant_python-0.13.0 → instant_python-0.14.0}/test/git/test_git_configurer.py +3 -3
- {instant_python-0.13.0 → instant_python-0.14.0}/test/initialize/application/test_config_reader.py +4 -4
- instant_python-0.14.0/test/initialize/application/test_project_initializer.py +22 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/initialize/delivery/test_init_cli.py +3 -3
- instant_python-0.14.0/test/initialize/domain/test_nodes.py +12 -0
- instant_python-0.14.0/test/initialize/infra/persistence/approved_files/TestConfigurationRepository.test_should_read_existing_config_file.approved.txt +26 -0
- {instant_python-0.13.0/test/initialize/infra → instant_python-0.14.0/test/initialize/infra/persistence}/test_configuration_repository.py +5 -5
- instant_python-0.14.0/test/initialize/infra/renderer/__init__.py +0 -0
- instant_python-0.14.0/test/initialize/infra/renderer/test_jinja_environment.py +33 -0
- instant_python-0.14.0/test/initialize/infra/renderer/test_jinja_project_renderer.py +37 -0
- instant_python-0.14.0/test/initialize/utils.py +5 -0
- instant_python-0.14.0/test/project_creator/__init__.py +0 -0
- instant_python-0.14.0/test/project_creator/resources/boilerplate/fastapi/__init__.py +0 -0
- instant_python-0.14.0/test/project_creator/resources/boilerplate/logger/__init__.py +0 -0
- instant_python-0.14.0/test/render/__init__.py +0 -0
- instant_python-0.14.0/test/resources/domain_error_template.py +8 -0
- instant_python-0.14.0/test/resources/hello_world.j2 +2 -0
- instant_python-0.14.0/test/resources/standard_project/main_structure.yml.j2 +19 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/uv.lock +1 -1
- instant_python-0.13.0/instant_python/config/application/config_generator.py +0 -15
- instant_python-0.13.0/instant_python/config/domain/config_writer.py +0 -9
- instant_python-0.13.0/instant_python/config/infra/writer/yaml_config_writer.py +0 -13
- instant_python-0.13.0/instant_python/initialize/application/config_reader.py +0 -14
- instant_python-0.13.0/instant_python/templates/boilerplate/exceptions/base_error.py +0 -24
- instant_python-0.13.0/test/config/application/test_config_generator.py +0 -32
- instant_python-0.13.0/test/config/domain/mothers/configuration_schema_mother.py +0 -16
- instant_python-0.13.0/test/config/domain/mothers/general_configuration_mother.py +0 -31
- instant_python-0.13.0/test/config/domain/mothers/git_configuration_mother.py +0 -22
- instant_python-0.13.0/test/config/domain/test_dependency_configuration.py +0 -35
- instant_python-0.13.0/test/config/domain/test_git_configuration.py +0 -45
- instant_python-0.13.0/test/config/infra/writer/test_yaml_config_writer.py +0 -16
- instant_python-0.13.0/test/initialize/infra/approved_files/TestConfigurationRepository.test_should_read_existing_config_file.approved.txt +0 -33
- instant_python-0.13.0/test/initialize/infra/resources/config.yml +0 -23
- {instant_python-0.13.0 → instant_python-0.14.0}/.github/FUNDING.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/.github/actions/python_setup/action.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/.github/pull_request_template.md +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/.github/workflows/ci.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/.github/workflows/pages.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/.github/workflows/release.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/.gitignore +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/.pre-commit-config.yaml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/.python-version +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/CITATION.cff +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/LICENSE +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/README.md +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/SECURITY.md +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/codeql-config.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/docs/assets/favicon.svg +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/docs/assets/logo.svg +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/docs/changelog/.components/changelog_header.md.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/docs/changelog/.components/changelog_init.md.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/docs/changelog/.components/changelog_update.md.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/docs/changelog/.components/changes.md.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/docs/changelog/.components/first_release.md.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/docs/changelog/.components/macros.md.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/docs/changelog/.components/versioned_changes.md.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/docs/changelog/.release_notes.md.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/docs/changelog/CHANGELOG.md.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/docs/downloads_macro.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/docs/examples/configuration.md +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/docs/examples/custom_template.md +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/docs/guide/command_config.md +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/docs/guide/command_init.md +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/docs/home/contributing.md +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/docs/home/getting_started.md +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/docs/home/index.md +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/docs/home/releases.md +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/docs/home/security.md +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/cli/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/cli/cli.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/cli/instant_python_typer.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/config/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/config/application/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/config/delivery/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/config/delivery/cli.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/config/domain/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/config/domain/question_wizard.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/config/infra/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/config/infra/parser/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/config/infra/question_wizard/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/config/infra/question_wizard/questionary_console_wizard.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/config/infra/question_wizard/step/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/config/infra/question_wizard/step/dependencies_step.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/config/infra/question_wizard/step/general_step.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/config/infra/question_wizard/step/git_step.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/config/infra/question_wizard/step/questionary.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/config/infra/question_wizard/step/steps.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/config/infra/question_wizard/step/template_step.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/config/infra/writer/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/configuration/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/configuration/parser/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/configuration/parser/configuration_file_not_found.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/dependency_manager/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/dependency_manager/command_execution_error.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/dependency_manager/dependency_manager_factory.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/dependency_manager/unknown_dependency_manager_error.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/formatter/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/formatter/project_formatter.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/git/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/initialize/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/initialize/application/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/initialize/delivery/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/initialize/domain/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/initialize/infra/__init__.py +0 -0
- {instant_python-0.13.0/instant_python/project_creator → instant_python-0.14.0/instant_python/initialize/infra/persistence}/__init__.py +0 -0
- {instant_python-0.13.0/instant_python/render → instant_python-0.14.0/instant_python/initialize/infra/renderer}/__init__.py +0 -0
- {instant_python-0.13.0/instant_python/shared → instant_python-0.14.0/instant_python/project_creator}/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/project_creator/directory.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/project_creator/file_has_not_been_created.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/project_creator/node.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/project_creator/unknown_node_typer_error.py +0 -0
- {instant_python-0.13.0/instant_python/templates/boilerplate/event_bus → instant_python-0.14.0/instant_python/render}/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/render/custom_project_renderer.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/render/jinja_custom_filters.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/render/jinja_environment.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/render/template_file_not_found_error.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/render/unknown_template_error.py +0 -0
- {instant_python-0.13.0/instant_python/templates/boilerplate/exceptions → instant_python-0.14.0/instant_python/shared}/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/shared/application_error.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/shared/error_types.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/shared/supported_built_in_features.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/shared/supported_licenses.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/shared/supported_managers.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/shared/supported_python_versions.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/shared/supported_templates.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/.gitignore +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/.pre-commit-config.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/.python-version +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/CITATION.cff +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/LICENSE +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/README.md +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/SECURITY.md +0 -0
- {instant_python-0.13.0/instant_python/templates/boilerplate/fastapi → instant_python-0.14.0/instant_python/templates/boilerplate/event_bus}/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/domain_event.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/domain_event_json_deserializer.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/domain_event_json_serializer.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/domain_event_subscriber.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/event_aggregate.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/event_bus.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/exchange_type.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/mock_event_bus.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_configurer.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_connection.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_consumer.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_event_bus.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_queue_formatter.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_settings.py +0 -0
- {instant_python-0.13.0/instant_python/templates/boilerplate/logger → instant_python-0.14.0/instant_python/templates/boilerplate/exceptions}/__init__.py +0 -0
- {instant_python-0.13.0/instant_python/templates/boilerplate/persistence → instant_python-0.14.0/instant_python/templates/boilerplate/fastapi}/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/fastapi/application.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/fastapi/error_response.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/fastapi/fastapi_log_middleware.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/fastapi/lifespan.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/fastapi/success_response.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/github/action.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/github/bug_report.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/github/ci.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/github/feature_request.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/github/release.yml +0 -0
- {instant_python-0.13.0/instant_python/templates/boilerplate/persistence/async → instant_python-0.14.0/instant_python/templates/boilerplate/logger}/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/logger/file_logger.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/logger/file_rotating_handler.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/logger/json_formatter.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/mypy.ini +0 -0
- {instant_python-0.13.0/instant_python/templates/boilerplate/persistence/synchronous → instant_python-0.14.0/instant_python/templates/boilerplate/persistence}/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/persistence/alembic_migrator.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/persistence/async/README.md +0 -0
- {instant_python-0.13.0/instant_python/templates/boilerplate/value_object → instant_python-0.14.0/instant_python/templates/boilerplate/persistence/async}/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/persistence/async/alembic.ini +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/persistence/async/async_engine_fixture.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/persistence/async/env.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/persistence/async/models_metadata.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/persistence/async/postgres_settings.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/persistence/async/script.py.mako +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/persistence/base.py +0 -0
- {instant_python-0.13.0/test → instant_python-0.14.0/instant_python/templates/boilerplate/persistence/synchronous}/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/persistence/synchronous/session_maker.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/persistence/synchronous/sqlalchemy_repository.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/pyproject.toml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/pytest.ini +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/random_generator.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/scripts/add_dependency.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/scripts/create_aggregate.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/scripts/insert_template.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/scripts/integration.sh +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/scripts/local_setup.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/scripts/makefile +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/scripts/post-merge.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/scripts/pre-commit.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/scripts/pre-push.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/scripts/remove_dependency.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/scripts/unit.sh +0 -0
- {instant_python-0.13.0/test/config → instant_python-0.14.0/instant_python/templates/boilerplate/value_object}/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/value_object/aggregate.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/value_object/int_primitives_mother.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/value_object/int_value_object.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/value_object/string_primitives_mother.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/value_object/string_value_object.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/value_object/test_int_value_object.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/value_object/test_string_value_object.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/value_object/test_uuid_value_object.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/value_object/uuid.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/value_object/uuid_primitives_mother.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/value_object/validation.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/boilerplate/value_object/value_object.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/alembic_migrator.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/async_alembic.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/citation.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/clean_architecture/main_structure.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/clean_architecture/test.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/domain_driven_design/bounded_context.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/domain_driven_design/main_structure.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/domain_driven_design/test.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/event_bus_domain.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/event_bus_infra.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/fastapi_app.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/fastapi_domain.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/fastapi_infra.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/github_action.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/github_issues_template.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/gitignore.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/license.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/logger.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/macros.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/makefile.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/mypy.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/precommit_hook.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/pyproject.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/pytest.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/python_version.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/readme.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/security.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/standard_project/main_structure.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/standard_project/test.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/synchronous_sqlalchemy.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/test_value_objects.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/instant_python/templates/project_structure/value_objects.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/makefile +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/mkdocs.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/mypy.ini +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/scripts/add_dependency.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/scripts/remove_dependency.py +0 -0
- {instant_python-0.13.0/test/config/application → instant_python-0.14.0/test}/__init__.py +0 -0
- {instant_python-0.13.0/test/config/domain → instant_python-0.14.0/test/config}/__init__.py +0 -0
- {instant_python-0.13.0/test/config/domain/mothers → instant_python-0.14.0/test/config/application}/__init__.py +0 -0
- {instant_python-0.13.0/test/config/infra → instant_python-0.14.0/test/config/domain}/__init__.py +0 -0
- {instant_python-0.13.0/test/config/infra/parser → instant_python-0.14.0/test/config/domain/mothers}/__init__.py +0 -0
- {instant_python-0.13.0/test/config/infra/parser/resources → instant_python-0.14.0/test/config/infra}/__init__.py +0 -0
- {instant_python-0.13.0/test/config/infra/writer → instant_python-0.14.0/test/config/infra/parser}/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/config/infra/parser/approvaltests_config.json +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/config/infra/parser/approved_files/TestParser.test_should_parse_valid_answers.approved.txt +0 -0
- {instant_python-0.13.0/test/configuration → instant_python-0.14.0/test/config/infra/parser/resources}/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/config/infra/parser/resources/missing_dependencies_fields.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/config/infra/parser/resources/missing_general_fields.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/config/infra/parser/resources/missing_git_fields.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/config/infra/parser/resources/missing_keys_answers.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/config/infra/parser/resources/missing_template_fields.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/config/infra/parser/resources/valid_answers.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/config/infra/parser/test_parser.py +0 -0
- {instant_python-0.13.0/test/configuration/parser → instant_python-0.14.0/test/config/infra/writer}/__init__.py +0 -0
- {instant_python-0.13.0/test/configuration/parser/resources → instant_python-0.14.0/test/configuration}/__init__.py +0 -0
- {instant_python-0.13.0/test/dependency_manager → instant_python-0.14.0/test/configuration/parser}/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/configuration/parser/approvaltests_config.json +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/configuration/parser/approved_files/TestParser.test_should_parse_configuration.approved.txt +0 -0
- {instant_python-0.13.0/test/formatter → instant_python-0.14.0/test/configuration/parser/resources}/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/configuration/parser/resources/config.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/configuration/parser/resources/empty_config.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/configuration/parser/resources/missing_dependencies_fields_config.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/configuration/parser/resources/missing_general_fields_config.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/configuration/parser/resources/missing_git_fields_config.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/configuration/parser/resources/missing_keys_config.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/configuration/parser/resources/missing_template_fields_config.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/configuration/parser/test_parser.py +0 -0
- {instant_python-0.13.0/test/git → instant_python-0.14.0/test/dependency_manager}/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/dependency_manager/mock_pdm_dependency_manager.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/dependency_manager/mock_uv_dependency_manager.py +0 -0
- {instant_python-0.13.0/test/initialize → instant_python-0.14.0/test/formatter}/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/formatter/mock_project_formatter.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/formatter/test_project_formatter.py +0 -0
- {instant_python-0.13.0/test/initialize/application → instant_python-0.14.0/test/git}/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/git/mock_git_configurer.py +0 -0
- {instant_python-0.13.0/test/initialize/delivery → instant_python-0.14.0/test/initialize}/__init__.py +0 -0
- {instant_python-0.13.0/test/initialize/infra → instant_python-0.14.0/test/initialize/application}/__init__.py +0 -0
- {instant_python-0.13.0/test/project_creator → instant_python-0.14.0/test/initialize/delivery}/__init__.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/initialize/delivery/approvaltests_config.json +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/initialize/delivery/approved_files/TestInitCli.test_initializes_project_with_general_section_combinations.approved.txt +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/initialize/delivery/approved_files/TestInitCli.test_initializes_project_with_git_section_combinations.approved.txt +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/initialize/delivery/approved_files/TestInitCli.test_initializes_project_with_template_section_combinations.approved.txt +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/initialize/delivery/approved_files/TestInitCli.test_should_initializes_project_with_predefined_dependencies_and_different_managers.approved.txt +0 -0
- {instant_python-0.13.0/test/project_creator/resources/boilerplate/fastapi → instant_python-0.14.0/test/initialize/domain}/__init__.py +0 -0
- {instant_python-0.13.0/test/project_creator/resources/boilerplate/logger → instant_python-0.14.0/test/initialize/infra}/__init__.py +0 -0
- {instant_python-0.13.0/test/render → instant_python-0.14.0/test/initialize/infra/persistence}/__init__.py +0 -0
- {instant_python-0.13.0/test/initialize/infra → instant_python-0.14.0/test/initialize/infra/persistence}/approvaltests_config.json +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/approvaltests_config.json +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/approved_files/TestFileSystem.test_should_create_file_system_in_disk.rendered_custom_project_structure.json.approved.txt +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/approved_files/TestFileSystem.test_should_create_file_system_in_disk.rendered_project_structure.json.approved.txt +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/approved_files/TestFileSystem.test_should_create_file_system_in_disk.rendered_project_structure_fastapi_with_logger.json.approved.txt +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/approved_files/TestFileSystem.test_should_create_file_system_in_disk.rendered_project_structure_fastapi_with_migrator.json.approved.txt +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/approved_files/TestFileSystem.test_should_create_file_system_in_disk.rendered_project_structure_only_with_fastapi.json.approved.txt +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/approved_files/TestFileSystem.test_should_create_folders_and_files.approved.txt +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/approved_files/TestFileSystem.test_should_generate_file_system_tree.approved.txt +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/directory_mother.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/resources/boilerplate/exceptions/domain_error.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/resources/boilerplate/exceptions/domain_error_simple.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/resources/boilerplate/fastapi/application.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/resources/boilerplate/fastapi/http_response.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/resources/boilerplate/fastapi/lifespan.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/resources/boilerplate/logger/logger.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/resources/boilerplate/persistence/alembic_migrator.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/resources/clean_architecture/main_structure.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/resources/config.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/resources/config_fastapi_with_logger.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/resources/config_fastapi_with_migrator.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/resources/config_with_only_fastapi.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/resources/rendered_custom_project_structure.json +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/resources/rendered_project_structure.json +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/resources/rendered_project_structure_fastapi_with_logger.json +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/resources/rendered_project_structure_fastapi_with_migrator.json +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/resources/rendered_project_structure_only_with_fastapi.json +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/test_directory.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/test_file.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/project_creator/test_file_system.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/random_generator.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/render/approvaltests_config.json +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/render/approved_files/TestCustomProjectRenderer.test_should_render_custom_template.approved.txt +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.clean_architecture_config.yml.approved.txt +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.domain_driven_design_config.yml.approved.txt +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.received.txt +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.standard_project_with_dependency_config.yml.approved.txt +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.standard_project_with_git_config.yml.approved.txt +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/render/resources/clean_architecture/main_structure.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/render/resources/clean_architecture_config.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/render/resources/custom_template.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/render/resources/domain_driven_design/main_structure.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/render/resources/domain_driven_design_config.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/render/resources/standard_project/main_structure.yml.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/render/resources/standard_project_with_dependency_config.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/render/resources/standard_project_with_git_config.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/render/resources/test_template.j2 +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/render/test_custom_project_renderer.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/render/test_jinja_environment.py +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/test/render/test_jinja_project_renderer.py +0 -0
- /instant_python-0.13.0/test/initialize/delivery/ipy.yml → /instant_python-0.14.0/test/resources/base_ipy_config.yml +0 -0
- {instant_python-0.13.0 → instant_python-0.14.0}/tox.ini +0 -0
|
@@ -2,6 +2,118 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- version list -->
|
|
4
4
|
|
|
5
|
+
## v0.14.0 (2025-11-03)
|
|
6
|
+
|
|
7
|
+
### ✨ Features
|
|
8
|
+
|
|
9
|
+
- **templates**: Add new template that implements a general way of getting async sessions
|
|
10
|
+
([`0f6d37e`](https://github.com/dimanu-py/instant-python/commit/0f6d37e1ae9cf676c41719bd7c39e7056b15d15c))
|
|
11
|
+
|
|
12
|
+
- **initialize**: Implement build_path_for method to construct file paths
|
|
13
|
+
([`f1f253f`](https://github.com/dimanu-py/instant-python/commit/f1f253f1cd255b416bb7f337e7dcd85db8c4cf09))
|
|
14
|
+
|
|
15
|
+
- **initialize**: Enhance project structure rendering by adding template content to files
|
|
16
|
+
([`8b6c98c`](https://github.com/dimanu-py/instant-python/commit/8b6c98c35a4572f905bfae9a52e744cf02af7817))
|
|
17
|
+
|
|
18
|
+
- **initialize**: Implement rendering of project structure using YAML template
|
|
19
|
+
([`6d93e9a`](https://github.com/dimanu-py/instant-python/commit/6d93e9a61d2822068163cfe983be8c9ea189b3a4))
|
|
20
|
+
|
|
21
|
+
- **initialize**: Enhance JinjaEnvironment to support multiple template loaders
|
|
22
|
+
([`5b69e4f`](https://github.com/dimanu-py/instant-python/commit/5b69e4f7c35b526b8de41b663108918c2d2ffba3))
|
|
23
|
+
|
|
24
|
+
- **initialize**: Implement render_template method in JinjaEnvironment
|
|
25
|
+
([`860bc0b`](https://github.com/dimanu-py/instant-python/commit/860bc0b6285c0bf4ec36d9c20d3c6febf71d0a37))
|
|
26
|
+
|
|
27
|
+
- **initialize**: Add render_template method to JinjaEnvironment with placeholder implementation
|
|
28
|
+
([`4c67ad3`](https://github.com/dimanu-py/instant-python/commit/4c67ad300473719fbac6f8dab3470407dc1c5559))
|
|
29
|
+
|
|
30
|
+
- **initialize**: Set FileSystemLoader with user_template_path in JinjaEnvironment
|
|
31
|
+
([`d6ef776`](https://github.com/dimanu-py/instant-python/commit/d6ef7766adcc89ef03f8ad2905931fc8541b949e))
|
|
32
|
+
|
|
33
|
+
- **initialize**: Add user_template_path parameter to JinjaEnvironment constructor
|
|
34
|
+
([`42d34ac`](https://github.com/dimanu-py/instant-python/commit/42d34ac4a46c097a7dca0f75175e7ad64b3ca98c))
|
|
35
|
+
|
|
36
|
+
- **initialize**: Add custom filters for jinja and load them by default in jinja env
|
|
37
|
+
([`4194509`](https://github.com/dimanu-py/instant-python/commit/419450927edd6b3e81199b7301ebdad25fbfb8b2))
|
|
38
|
+
|
|
39
|
+
- **initialize**: Add method to register custom filters in jinja environment
|
|
40
|
+
([`ec1d01a`](https://github.com/dimanu-py/instant-python/commit/ec1d01a84faa2c65618938ccbd47d46f3026dddc))
|
|
41
|
+
|
|
42
|
+
- **initialize**: Add test to verify jinja environment loads custom filters
|
|
43
|
+
([`31ff4a5`](https://github.com/dimanu-py/instant-python/commit/31ff4a50d1a6b8dff97813ccc4fe99db4376301b))
|
|
44
|
+
|
|
45
|
+
- **initialize**: Instantiate jinja 2 environment inside wrapper class
|
|
46
|
+
([`c0f7ec0`](https://github.com/dimanu-py/instant-python/commit/c0f7ec0d39f721d999cd4a9330c3fab7c32192c9))
|
|
47
|
+
|
|
48
|
+
- **initializer**: Implement project structure rendering in execute method
|
|
49
|
+
([`a91b8ae`](https://github.com/dimanu-py/instant-python/commit/a91b8ae66e81291b56963b8e9ea39eb47618daba))
|
|
50
|
+
|
|
51
|
+
### 🪲 Bug Fixes
|
|
52
|
+
|
|
53
|
+
- **templates**: Correct spelling error in sqlalchemy repository template
|
|
54
|
+
([`97f6003`](https://github.com/dimanu-py/instant-python/commit/97f6003a4b89d9553e969bce9794ce3f0e59ac17))
|
|
55
|
+
|
|
56
|
+
- **initialize**: Search for default template that is at first level of boilerplate folder
|
|
57
|
+
([`841badc`](https://github.com/dimanu-py/instant-python/commit/841badc6af64490729fd448f3797393d9ed47cd4))
|
|
58
|
+
|
|
59
|
+
### ⚙️ Build System
|
|
60
|
+
|
|
61
|
+
- Update testpaths to point to the correct directory
|
|
62
|
+
([`61bc700`](https://github.com/dimanu-py/instant-python/commit/61bc700f99533bf119c03590fabd44738f88f7a7))
|
|
63
|
+
|
|
64
|
+
### ♻️ Refactoring
|
|
65
|
+
|
|
66
|
+
- **templates**: Modify all errors template to not include 'error_type' attribute and leave just
|
|
67
|
+
typical message field
|
|
68
|
+
([`1fc2a39`](https://github.com/dimanu-py/instant-python/commit/1fc2a39e0662a50c5a701c1f2cacb625482175c1))
|
|
69
|
+
|
|
70
|
+
- **templates**: Modify source structure of all project templates so exclude sync sqlalchemy and
|
|
71
|
+
include async sqlalchemy when present
|
|
72
|
+
([`244b597`](https://github.com/dimanu-py/instant-python/commit/244b5975c6fb2d64d503a9a64b1961ee0837e082))
|
|
73
|
+
|
|
74
|
+
- **templates**: Modify async sqlalchemy structure template to exclude sqlalchemy repository
|
|
75
|
+
template and include async session template
|
|
76
|
+
([`447caa4`](https://github.com/dimanu-py/instant-python/commit/447caa4472a7e080f15bc45a5da37c3694b686ae))
|
|
77
|
+
|
|
78
|
+
- **initialize**: Extract semantic method to populate file keys with content from template
|
|
79
|
+
([`5ceb8ec`](https://github.com/dimanu-py/instant-python/commit/5ceb8ec574d366902d671b816cc893df8d4d919f))
|
|
80
|
+
|
|
81
|
+
- **initialize**: Extract semantic method to express operation of rendering the project structure
|
|
82
|
+
using jinja
|
|
83
|
+
([`f610639`](https://github.com/dimanu-py/instant-python/commit/f61063922d0e64c3fbb19832d6e663c5b15adbad))
|
|
84
|
+
|
|
85
|
+
- **initialize**: Extract semantic method to generate main structure template path
|
|
86
|
+
([`ff69c87`](https://github.com/dimanu-py/instant-python/commit/ff69c87829d71e52d4f66fa36dbc879fd276dc56))
|
|
87
|
+
|
|
88
|
+
- **config**: Extract semantic methods in ConfigGenerator use case to keep high level expressions in
|
|
89
|
+
main 'execute' method
|
|
90
|
+
([`766a2bc`](https://github.com/dimanu-py/instant-python/commit/766a2bcd1ed614a093dfe6bd99a1f45ba997df8b))
|
|
91
|
+
|
|
92
|
+
- **initialize**: Update render_template method to accept Any type for context
|
|
93
|
+
([`e6501bc`](https://github.com/dimanu-py/instant-python/commit/e6501bcb777f5ba2be8903f04629affd6ba66521))
|
|
94
|
+
|
|
95
|
+
- **initialize**: Rename render_project_structure method to render
|
|
96
|
+
([`49fd942`](https://github.com/dimanu-py/instant-python/commit/49fd942a0bdcfdbababee08d0f0c304e5f9d78a5))
|
|
97
|
+
|
|
98
|
+
- **initialize**: Rename configuration repository classes for consistency
|
|
99
|
+
([`4b4fa94`](https://github.com/dimanu-py/instant-python/commit/4b4fa94e95f77e9f08d64dc96462551b218324f8))
|
|
100
|
+
|
|
101
|
+
- **initialize**: Move config repository to a persistence module to keep modules organized
|
|
102
|
+
([`3d9a7e0`](https://github.com/dimanu-py/instant-python/commit/3d9a7e02481c5fe5401f28c035ca21bc20374ba0))
|
|
103
|
+
|
|
104
|
+
- **initialize**: Modify signature of renderer interface to only accept context config parameter
|
|
105
|
+
([`835060f`](https://github.com/dimanu-py/instant-python/commit/835060feb47d2446a06977b2deb3116beed67adf))
|
|
106
|
+
|
|
107
|
+
- **initialize**: Clean up jinja environment tests extracting common object instantiation
|
|
108
|
+
([`c73e2e3`](https://github.com/dimanu-py/instant-python/commit/c73e2e38e75d839a1c1ae8a63798db9630d05fd9))
|
|
109
|
+
|
|
110
|
+
- **config**: Rename all references from 'configuration' to 'config' for naming consistency
|
|
111
|
+
([`7691173`](https://github.com/dimanu-py/instant-python/commit/769117371e59d5642b5cc8fbffe9a55099e5386d))
|
|
112
|
+
|
|
113
|
+
- **config**: Remove unused method 'save_on_current_directory' method
|
|
114
|
+
([`e760771`](https://github.com/dimanu-py/instant-python/commit/e760771438653b669cbdac0a9c8049dc298d7c0c))
|
|
115
|
+
|
|
116
|
+
|
|
5
117
|
## v0.13.0 (2025-10-26)
|
|
6
118
|
|
|
7
119
|
### ✨ Features
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: instant-python
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.14.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/
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from instant_python.config.domain.config_parser import ConfigParser
|
|
2
|
+
from instant_python.config.domain.config_schema import ConfigSchema
|
|
3
|
+
from instant_python.config.domain.config_writer import ConfigWriter
|
|
4
|
+
from instant_python.config.domain.question_wizard import QuestionWizard
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class ConfigGenerator:
|
|
8
|
+
def __init__(self, question_wizard: QuestionWizard, writer: ConfigWriter, parser: ConfigParser) -> None:
|
|
9
|
+
self._question_wizard = question_wizard
|
|
10
|
+
self._writer = writer
|
|
11
|
+
self._parser = parser
|
|
12
|
+
|
|
13
|
+
def execute(self) -> None:
|
|
14
|
+
answers = self._ask_project_configuration_to_user()
|
|
15
|
+
config = self._validate_project_configuration(answers)
|
|
16
|
+
self._save_configuration(config)
|
|
17
|
+
|
|
18
|
+
def _save_configuration(self, config: ConfigSchema) -> None:
|
|
19
|
+
self._writer.write(config)
|
|
20
|
+
|
|
21
|
+
def _validate_project_configuration(self, answers: dict) -> ConfigSchema:
|
|
22
|
+
return self._parser.parse(answers)
|
|
23
|
+
|
|
24
|
+
def _ask_project_configuration_to_user(self) -> dict:
|
|
25
|
+
return self._question_wizard.run()
|
{instant_python-0.13.0 → instant_python-0.14.0}/instant_python/config/domain/config_parser.py
RENAMED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
from abc import ABC, abstractmethod
|
|
2
2
|
from typing import Union
|
|
3
3
|
|
|
4
|
-
from instant_python.config.domain.
|
|
4
|
+
from instant_python.config.domain.config_schema import ConfigSchema
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
class ConfigParser(ABC):
|
|
8
8
|
@abstractmethod
|
|
9
|
-
def parse(self, content: dict[str, dict], custom_config_path: Union[str, None] = None) ->
|
|
9
|
+
def parse(self, content: dict[str, dict], custom_config_path: Union[str, None] = None) -> ConfigSchema:
|
|
10
10
|
raise NotImplementedError
|
|
@@ -3,37 +3,36 @@ from dataclasses import dataclass, field
|
|
|
3
3
|
from pathlib import Path
|
|
4
4
|
from typing import TypedDict, Union
|
|
5
5
|
|
|
6
|
-
import yaml
|
|
7
6
|
|
|
8
|
-
from instant_python.config.domain.
|
|
9
|
-
|
|
7
|
+
from instant_python.config.domain.dependency_config import (
|
|
8
|
+
DependencyConfig,
|
|
10
9
|
)
|
|
11
|
-
from instant_python.config.domain.
|
|
12
|
-
|
|
10
|
+
from instant_python.config.domain.general_config import (
|
|
11
|
+
GeneralConfig,
|
|
13
12
|
)
|
|
14
|
-
from instant_python.config.domain.
|
|
15
|
-
from instant_python.config.domain.
|
|
16
|
-
|
|
13
|
+
from instant_python.config.domain.git_config import GitConfig
|
|
14
|
+
from instant_python.config.domain.template_config import (
|
|
15
|
+
TemplateConfig,
|
|
17
16
|
)
|
|
18
17
|
|
|
19
18
|
|
|
20
19
|
@dataclass
|
|
21
|
-
class
|
|
22
|
-
general:
|
|
23
|
-
dependencies: list[
|
|
24
|
-
template:
|
|
25
|
-
git:
|
|
20
|
+
class ConfigSchema:
|
|
21
|
+
general: GeneralConfig
|
|
22
|
+
dependencies: list[DependencyConfig]
|
|
23
|
+
template: TemplateConfig
|
|
24
|
+
git: GitConfig
|
|
26
25
|
config_file_path: Path = field(default_factory=lambda: Path("ipy.yml"))
|
|
27
26
|
|
|
28
27
|
@classmethod
|
|
29
28
|
def from_file(
|
|
30
29
|
cls,
|
|
31
30
|
config_file_path: str,
|
|
32
|
-
general:
|
|
33
|
-
dependencies: list[
|
|
34
|
-
template:
|
|
35
|
-
git:
|
|
36
|
-
) -> "
|
|
31
|
+
general: GeneralConfig,
|
|
32
|
+
dependencies: list[DependencyConfig],
|
|
33
|
+
template: TemplateConfig,
|
|
34
|
+
git: GitConfig,
|
|
35
|
+
) -> "ConfigSchema":
|
|
37
36
|
return cls(
|
|
38
37
|
general=general,
|
|
39
38
|
dependencies=dependencies,
|
|
@@ -48,13 +47,8 @@ class ConfigurationSchema:
|
|
|
48
47
|
|
|
49
48
|
shutil.move(self.config_file_path, destination_path)
|
|
50
49
|
|
|
51
|
-
def
|
|
52
|
-
|
|
53
|
-
with open(destination_folder, "w") as file:
|
|
54
|
-
yaml.dump(self.to_primitives(), file)
|
|
55
|
-
|
|
56
|
-
def to_primitives(self) -> "ConfigurationSchemaPrimitives":
|
|
57
|
-
return ConfigurationSchemaPrimitives(
|
|
50
|
+
def to_primitives(self) -> "ConfigSchemaPrimitives":
|
|
51
|
+
return ConfigSchemaPrimitives(
|
|
58
52
|
general=self.general.to_primitives(),
|
|
59
53
|
dependencies=[dependency.to_primitives() for dependency in self.dependencies],
|
|
60
54
|
template=self.template.to_primitives(),
|
|
@@ -78,7 +72,7 @@ class ConfigurationSchema:
|
|
|
78
72
|
return self.general.python_version
|
|
79
73
|
|
|
80
74
|
|
|
81
|
-
class
|
|
75
|
+
class ConfigSchemaPrimitives(TypedDict):
|
|
82
76
|
general: dict[str, str]
|
|
83
77
|
dependencies: list[dict[str, Union[str, bool]]]
|
|
84
78
|
template: dict[str, Union[str, list[str]]]
|
|
@@ -8,15 +8,15 @@ from instant_python.shared.supported_templates import SupportedTemplates
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
@dataclass
|
|
11
|
-
class
|
|
11
|
+
class TemplateConfig:
|
|
12
12
|
name: str
|
|
13
13
|
built_in_features: list[str] = field(default_factory=list)
|
|
14
14
|
specify_bounded_context: bool = field(default=False)
|
|
15
15
|
bounded_context: Optional[str] = field(default=None)
|
|
16
16
|
aggregate_name: Optional[str] = field(default=None)
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
_SUPPORTED_TEMPLATES: ClassVar[list[str]] = SupportedTemplates.get_supported_templates()
|
|
19
|
+
_SUPPORTED_BUILT_IN_FEATURES: ClassVar[list[str]] = SupportedBuiltInFeatures.get_supported_built_in_features()
|
|
20
20
|
|
|
21
21
|
def __post_init__(self) -> None:
|
|
22
22
|
self._ensure_template_is_supported()
|
|
@@ -25,15 +25,15 @@ class TemplateConfiguration:
|
|
|
25
25
|
self._ensure_bounded_context_is_set_if_specified()
|
|
26
26
|
|
|
27
27
|
def _ensure_template_is_supported(self) -> None:
|
|
28
|
-
if self.name not in self.
|
|
29
|
-
raise InvalidTemplateValue(self.name, self.
|
|
28
|
+
if self.name not in self._SUPPORTED_TEMPLATES:
|
|
29
|
+
raise InvalidTemplateValue(self.name, self._SUPPORTED_TEMPLATES)
|
|
30
30
|
|
|
31
31
|
def _ensure_built_in_features_are_supported(self) -> None:
|
|
32
32
|
unsupported_features = [
|
|
33
|
-
feature for feature in self.built_in_features if feature not in self.
|
|
33
|
+
feature for feature in self.built_in_features if feature not in self._SUPPORTED_BUILT_IN_FEATURES
|
|
34
34
|
]
|
|
35
35
|
if unsupported_features:
|
|
36
|
-
raise InvalidBuiltInFeaturesValues(unsupported_features, self.
|
|
36
|
+
raise InvalidBuiltInFeaturesValues(unsupported_features, self._SUPPORTED_BUILT_IN_FEATURES)
|
|
37
37
|
|
|
38
38
|
def _ensure_bounded_context_is_only_applicable_for_ddd_template(self) -> None:
|
|
39
39
|
if (
|
{instant_python-0.13.0 → instant_python-0.14.0}/instant_python/config/infra/parser/errors.py
RENAMED
|
@@ -5,7 +5,7 @@ from instant_python.shared.error_types import ErrorTypes
|
|
|
5
5
|
class ConfigKeyNotPresent(ApplicationError):
|
|
6
6
|
def __init__(self, missing_keys: list[str], required_keys: list[str]) -> None:
|
|
7
7
|
super().__init__(
|
|
8
|
-
message=f"The following required keys are missing from the
|
|
8
|
+
message=f"The following required keys are missing from the config file: {', '.join(missing_keys)}. Required keys are: {', '.join(required_keys)}.",
|
|
9
9
|
error_type=ErrorTypes.CONFIGURATION.value,
|
|
10
10
|
)
|
|
11
11
|
|
|
@@ -19,7 +19,7 @@ class MissingMandatoryFields(ApplicationError):
|
|
|
19
19
|
def __init__(self, missing_field: str, config_section: str) -> None:
|
|
20
20
|
super().__init__(
|
|
21
21
|
message=(
|
|
22
|
-
f"Mandatory field '{missing_field}' is missing in the '{config_section}' section of the
|
|
22
|
+
f"Mandatory field '{missing_field}' is missing in the '{config_section}' section of the config file."
|
|
23
23
|
),
|
|
24
24
|
error_type=ErrorTypes.CONFIGURATION.value,
|
|
25
25
|
)
|
{instant_python-0.13.0 → instant_python-0.14.0}/instant_python/config/infra/parser/parser.py
RENAMED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
from typing import Union
|
|
2
2
|
|
|
3
3
|
from instant_python.config.domain.config_parser import ConfigParser
|
|
4
|
-
from instant_python.config.domain.
|
|
5
|
-
from instant_python.config.domain.
|
|
6
|
-
from instant_python.config.domain.
|
|
7
|
-
from instant_python.config.domain.
|
|
8
|
-
from instant_python.config.domain.
|
|
4
|
+
from instant_python.config.domain.config_schema import ConfigSchema
|
|
5
|
+
from instant_python.config.domain.dependency_config import DependencyConfig
|
|
6
|
+
from instant_python.config.domain.general_config import GeneralConfig
|
|
7
|
+
from instant_python.config.domain.git_config import GitConfig
|
|
8
|
+
from instant_python.config.domain.template_config import TemplateConfig
|
|
9
9
|
from instant_python.config.infra.parser.errors import (
|
|
10
10
|
ConfigKeyNotPresent,
|
|
11
11
|
EmptyConfigurationNotAllowed,
|
|
@@ -20,22 +20,22 @@ class Parser(ConfigParser):
|
|
|
20
20
|
_GIT = "git"
|
|
21
21
|
_REQUIRED_CONFIG_KEYS = [_GENERAL, _DEPENDENCIES, _TEMPLATE, _GIT]
|
|
22
22
|
|
|
23
|
-
def parse(self, content: dict[str, dict], custom_config_path: Union[str, None] = None) ->
|
|
24
|
-
self.
|
|
23
|
+
def parse(self, content: dict[str, dict], custom_config_path: Union[str, None] = None) -> ConfigSchema:
|
|
24
|
+
self._ensure_config_is_not_empty(content)
|
|
25
25
|
self._ensure_all_required_sections_are_present(content)
|
|
26
26
|
general_section = self._parse_general_section(content[self._GENERAL])
|
|
27
27
|
dependencies_section = self._parse_dependencies_section(content[self._DEPENDENCIES])
|
|
28
28
|
template_section = self._parse_template_section(content[self._TEMPLATE])
|
|
29
29
|
git_section = self._parse_git_section(content[self._GIT])
|
|
30
30
|
return (
|
|
31
|
-
|
|
31
|
+
ConfigSchema(
|
|
32
32
|
general=general_section,
|
|
33
33
|
dependencies=dependencies_section,
|
|
34
34
|
template=template_section,
|
|
35
35
|
git=git_section,
|
|
36
36
|
)
|
|
37
37
|
if not custom_config_path
|
|
38
|
-
else
|
|
38
|
+
else ConfigSchema.from_file(
|
|
39
39
|
config_file_path=custom_config_path,
|
|
40
40
|
general=general_section,
|
|
41
41
|
dependencies=dependencies_section,
|
|
@@ -44,9 +44,9 @@ class Parser(ConfigParser):
|
|
|
44
44
|
)
|
|
45
45
|
)
|
|
46
46
|
|
|
47
|
-
def _parse_general_section(self, fields: dict[str, str]) ->
|
|
47
|
+
def _parse_general_section(self, fields: dict[str, str]) -> GeneralConfig:
|
|
48
48
|
try:
|
|
49
|
-
return
|
|
49
|
+
return GeneralConfig(**fields)
|
|
50
50
|
except TypeError as error:
|
|
51
51
|
self._ensure_error_is_for_missing_fields(error)
|
|
52
52
|
raise MissingMandatoryFields(error.args[0], self._GENERAL) from error
|
|
@@ -54,7 +54,7 @@ class Parser(ConfigParser):
|
|
|
54
54
|
def _parse_dependencies_section(
|
|
55
55
|
self,
|
|
56
56
|
fields: list[dict[str, Union[str, bool]]],
|
|
57
|
-
) -> list[
|
|
57
|
+
) -> list[DependencyConfig]:
|
|
58
58
|
dependencies = []
|
|
59
59
|
|
|
60
60
|
if not fields:
|
|
@@ -62,7 +62,7 @@ class Parser(ConfigParser):
|
|
|
62
62
|
|
|
63
63
|
for dependency_fields in fields:
|
|
64
64
|
try:
|
|
65
|
-
dependency =
|
|
65
|
+
dependency = DependencyConfig(**dependency_fields)
|
|
66
66
|
except TypeError as error:
|
|
67
67
|
self._ensure_error_is_for_missing_fields(error)
|
|
68
68
|
raise MissingMandatoryFields(error.args[0], self._DEPENDENCIES) from error
|
|
@@ -71,16 +71,16 @@ class Parser(ConfigParser):
|
|
|
71
71
|
|
|
72
72
|
return dependencies
|
|
73
73
|
|
|
74
|
-
def _parse_template_section(self, fields: dict[str, Union[str, bool, list[str]]]) ->
|
|
74
|
+
def _parse_template_section(self, fields: dict[str, Union[str, bool, list[str]]]) -> TemplateConfig:
|
|
75
75
|
try:
|
|
76
|
-
return
|
|
76
|
+
return TemplateConfig(**fields)
|
|
77
77
|
except TypeError as error:
|
|
78
78
|
self._ensure_error_is_for_missing_fields(error)
|
|
79
79
|
raise MissingMandatoryFields(error.args[0], self._TEMPLATE) from error
|
|
80
80
|
|
|
81
|
-
def _parse_git_section(self, fields: dict[str, Union[str, bool]]) ->
|
|
81
|
+
def _parse_git_section(self, fields: dict[str, Union[str, bool]]) -> GitConfig:
|
|
82
82
|
try:
|
|
83
|
-
return
|
|
83
|
+
return GitConfig(**fields)
|
|
84
84
|
except TypeError as error:
|
|
85
85
|
self._ensure_error_is_for_missing_fields(error)
|
|
86
86
|
raise MissingMandatoryFields(error.args[0], self._GIT) from error
|
|
@@ -91,7 +91,7 @@ class Parser(ConfigParser):
|
|
|
91
91
|
raise ConfigKeyNotPresent(missing_keys, self._REQUIRED_CONFIG_KEYS)
|
|
92
92
|
|
|
93
93
|
@staticmethod
|
|
94
|
-
def
|
|
94
|
+
def _ensure_config_is_not_empty(content: dict[str, dict]):
|
|
95
95
|
if not content:
|
|
96
96
|
raise EmptyConfigurationNotAllowed
|
|
97
97
|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
|
|
3
|
+
import yaml
|
|
4
|
+
|
|
5
|
+
from instant_python.config.domain.config_writer import ConfigWriter
|
|
6
|
+
from instant_python.config.domain.config_schema import ConfigSchema
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class YamlConfigWriter(ConfigWriter):
|
|
10
|
+
def write(self, config: ConfigSchema) -> None:
|
|
11
|
+
destination_folder = Path.cwd() / config.config_file_path
|
|
12
|
+
with destination_folder.open("w") as file:
|
|
13
|
+
yaml.dump(config.to_primitives(), file)
|
{instant_python-0.13.0 → instant_python-0.14.0}/instant_python/configuration/parser/parser.py
RENAMED
|
@@ -7,31 +7,31 @@ from instant_python.config.infra.parser.errors import (
|
|
|
7
7
|
EmptyConfigurationNotAllowed,
|
|
8
8
|
MissingMandatoryFields,
|
|
9
9
|
)
|
|
10
|
-
from instant_python.config.domain.
|
|
11
|
-
from instant_python.config.domain.
|
|
12
|
-
|
|
10
|
+
from instant_python.config.domain.config_schema import ConfigSchema
|
|
11
|
+
from instant_python.config.domain.dependency_config import (
|
|
12
|
+
DependencyConfig,
|
|
13
13
|
)
|
|
14
|
-
from instant_python.config.domain.
|
|
15
|
-
|
|
14
|
+
from instant_python.config.domain.general_config import (
|
|
15
|
+
GeneralConfig,
|
|
16
16
|
)
|
|
17
|
-
from instant_python.config.domain.
|
|
17
|
+
from instant_python.config.domain.git_config import GitConfig
|
|
18
18
|
from instant_python.configuration.parser.configuration_file_not_found import (
|
|
19
19
|
ConfigurationFileNotFound,
|
|
20
20
|
)
|
|
21
|
-
from instant_python.config.domain.
|
|
21
|
+
from instant_python.config.domain.template_config import TemplateConfig
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
class Parser:
|
|
25
25
|
REQUIRED_CONFIG_KEYS = ["general", "dependencies", "template", "git"]
|
|
26
26
|
|
|
27
27
|
@classmethod
|
|
28
|
-
def parse_from_file(cls, config_file_path: str) ->
|
|
28
|
+
def parse_from_file(cls, config_file_path: str) -> ConfigSchema:
|
|
29
29
|
"""Parses the configuration file and validates its content.
|
|
30
30
|
|
|
31
31
|
Args:
|
|
32
32
|
config_file_path: The path to the configuration file to be parsed.
|
|
33
33
|
Returns:
|
|
34
|
-
|
|
34
|
+
ConfigSchema: An instance of ConfigurationSchema containing the parsed configuration.
|
|
35
35
|
Raises:
|
|
36
36
|
ConfigurationFileNotFound: If the configuration file does not exist in that path.
|
|
37
37
|
EmptyConfigurationNotAllowed: If the configuration file is empty.
|
|
@@ -42,7 +42,7 @@ class Parser:
|
|
|
42
42
|
general_configuration, dependencies_configuration, template_configuration, git_configuration = (
|
|
43
43
|
cls._parse_configuration(content=content)
|
|
44
44
|
)
|
|
45
|
-
return
|
|
45
|
+
return ConfigSchema.from_file(
|
|
46
46
|
config_file_path=config_file_path,
|
|
47
47
|
general=general_configuration,
|
|
48
48
|
dependencies=dependencies_configuration,
|
|
@@ -51,11 +51,11 @@ class Parser:
|
|
|
51
51
|
)
|
|
52
52
|
|
|
53
53
|
@classmethod
|
|
54
|
-
def parse_from_answers(cls, content: dict[str, dict]) ->
|
|
54
|
+
def parse_from_answers(cls, content: dict[str, dict]) -> ConfigSchema:
|
|
55
55
|
general_configuration, dependencies_configuration, template_configuration, git_configuration = (
|
|
56
56
|
cls._parse_configuration(content=content)
|
|
57
57
|
)
|
|
58
|
-
return
|
|
58
|
+
return ConfigSchema(
|
|
59
59
|
general=general_configuration,
|
|
60
60
|
dependencies=dependencies_configuration,
|
|
61
61
|
template=template_configuration,
|
|
@@ -97,9 +97,9 @@ class Parser:
|
|
|
97
97
|
raise ConfigKeyNotPresent(missing_keys, Parser.REQUIRED_CONFIG_KEYS)
|
|
98
98
|
|
|
99
99
|
@staticmethod
|
|
100
|
-
def _parse_general_configuration(fields: dict[str, str]) ->
|
|
100
|
+
def _parse_general_configuration(fields: dict[str, str]) -> GeneralConfig:
|
|
101
101
|
try:
|
|
102
|
-
return
|
|
102
|
+
return GeneralConfig(**fields)
|
|
103
103
|
except TypeError as error:
|
|
104
104
|
_ensure_error_is_for_missing_fields(error)
|
|
105
105
|
raise MissingMandatoryFields(error.args[0], "general") from error
|
|
@@ -107,7 +107,7 @@ class Parser:
|
|
|
107
107
|
@staticmethod
|
|
108
108
|
def _parse_dependencies_configuration(
|
|
109
109
|
fields: list[dict[str, Union[str, bool]]],
|
|
110
|
-
) -> list[
|
|
110
|
+
) -> list[DependencyConfig]:
|
|
111
111
|
dependencies = []
|
|
112
112
|
|
|
113
113
|
if not fields:
|
|
@@ -115,7 +115,7 @@ class Parser:
|
|
|
115
115
|
|
|
116
116
|
for dependency_fields in fields:
|
|
117
117
|
try:
|
|
118
|
-
dependency =
|
|
118
|
+
dependency = DependencyConfig(**dependency_fields)
|
|
119
119
|
except TypeError as error:
|
|
120
120
|
_ensure_error_is_for_missing_fields(error)
|
|
121
121
|
raise MissingMandatoryFields(error.args[0], "dependencies") from error
|
|
@@ -125,17 +125,17 @@ class Parser:
|
|
|
125
125
|
return dependencies
|
|
126
126
|
|
|
127
127
|
@staticmethod
|
|
128
|
-
def _parse_template_configuration(fields: dict[str, Union[str, bool, list[str]]]) ->
|
|
128
|
+
def _parse_template_configuration(fields: dict[str, Union[str, bool, list[str]]]) -> TemplateConfig:
|
|
129
129
|
try:
|
|
130
|
-
return
|
|
130
|
+
return TemplateConfig(**fields)
|
|
131
131
|
except TypeError as error:
|
|
132
132
|
_ensure_error_is_for_missing_fields(error)
|
|
133
133
|
raise MissingMandatoryFields(error.args[0], "template") from error
|
|
134
134
|
|
|
135
135
|
@staticmethod
|
|
136
|
-
def _parse_git_configuration(fields: dict[str, Union[str, bool]]) ->
|
|
136
|
+
def _parse_git_configuration(fields: dict[str, Union[str, bool]]) -> GitConfig:
|
|
137
137
|
try:
|
|
138
|
-
return
|
|
138
|
+
return GitConfig(**fields)
|
|
139
139
|
except TypeError as error:
|
|
140
140
|
_ensure_error_is_for_missing_fields(error)
|
|
141
141
|
raise MissingMandatoryFields(error.args[0], "git") from error
|
|
@@ -2,7 +2,7 @@ import subprocess
|
|
|
2
2
|
from abc import ABC, abstractmethod
|
|
3
3
|
import sys
|
|
4
4
|
|
|
5
|
-
from instant_python.config.domain.
|
|
5
|
+
from instant_python.config.domain.dependency_config import DependencyConfig
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
class DependencyManager(ABC):
|
|
@@ -11,7 +11,7 @@ class DependencyManager(ABC):
|
|
|
11
11
|
self._system_os = sys.platform
|
|
12
12
|
|
|
13
13
|
@abstractmethod
|
|
14
|
-
def setup_environment(self, python_version: str, dependencies: list[
|
|
14
|
+
def setup_environment(self, python_version: str, dependencies: list[DependencyConfig]) -> None:
|
|
15
15
|
raise NotImplementedError
|
|
16
16
|
|
|
17
17
|
def _run_command(self, command: str) -> None:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from pathlib import Path
|
|
2
2
|
import subprocess
|
|
3
3
|
|
|
4
|
-
from instant_python.config.domain.
|
|
4
|
+
from instant_python.config.domain.dependency_config import DependencyConfig
|
|
5
5
|
from instant_python.dependency_manager.dependency_manager import DependencyManager
|
|
6
6
|
from instant_python.dependency_manager.command_execution_error import CommandExecutionError
|
|
7
7
|
|
|
@@ -11,7 +11,7 @@ class PdmDependencyManager(DependencyManager):
|
|
|
11
11
|
super().__init__(project_directory)
|
|
12
12
|
self._pdm = self._set_pdm_executable_based_on_os()
|
|
13
13
|
|
|
14
|
-
def setup_environment(self, python_version: str, dependencies: list[
|
|
14
|
+
def setup_environment(self, python_version: str, dependencies: list[DependencyConfig]) -> None:
|
|
15
15
|
try:
|
|
16
16
|
if self._pdm_is_not_installed():
|
|
17
17
|
self._install()
|
|
@@ -50,7 +50,7 @@ class PdmDependencyManager(DependencyManager):
|
|
|
50
50
|
self._run_command(command=f"{self._pdm} python install {version}")
|
|
51
51
|
print(f">>> Python {version} installed successfully")
|
|
52
52
|
|
|
53
|
-
def _install_dependencies(self, dependencies: list[
|
|
53
|
+
def _install_dependencies(self, dependencies: list[DependencyConfig]) -> None:
|
|
54
54
|
self._create_virtual_environment()
|
|
55
55
|
print(">>> Installing dependencies...")
|
|
56
56
|
for dependency in dependencies:
|
|
@@ -58,7 +58,7 @@ class PdmDependencyManager(DependencyManager):
|
|
|
58
58
|
self._run_command(command)
|
|
59
59
|
print(">>> Dependencies installed successfully")
|
|
60
60
|
|
|
61
|
-
def _build_dependency_install_command(self, dependency:
|
|
61
|
+
def _build_dependency_install_command(self, dependency: DependencyConfig) -> str:
|
|
62
62
|
command = [f"{self._pdm} add"]
|
|
63
63
|
command.extend(dependency.get_installation_flag())
|
|
64
64
|
command.append(dependency.get_specification())
|