instant-python 0.12.1__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.12.1 → instant_python-0.14.0}/.github/workflows/ci.yml +0 -26
- {instant_python-0.12.1 → instant_python-0.14.0}/CHANGELOG.md +186 -0
- {instant_python-0.12.1 → 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.14.0/instant_python/config/domain/config_parser.py +10 -0
- instant_python-0.12.1/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.12.1/instant_python/config/domain/dependency_configuration.py → instant_python-0.14.0/instant_python/config/domain/dependency_config.py +1 -1
- instant_python-0.12.1/instant_python/config/domain/general_configuration.py → instant_python-0.14.0/instant_python/config/domain/general_config.py +1 -1
- instant_python-0.12.1/instant_python/config/domain/git_configuration.py → instant_python-0.14.0/instant_python/config/domain/git_config.py +8 -2
- instant_python-0.12.1/instant_python/config/domain/template_configuration.py → instant_python-0.14.0/instant_python/config/domain/template_config.py +7 -7
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/config/infra/parser/errors.py +2 -2
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/config/infra/parser/parser.py +31 -21
- instant_python-0.14.0/instant_python/config/infra/writer/yaml_config_writer.py +13 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/configuration/parser/parser.py +20 -20
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/dependency_manager/dependency_manager.py +2 -2
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/dependency_manager/pdm_dependency_manager.py +14 -5
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/dependency_manager/uv_dependency_manager.py +14 -5
- {instant_python-0.12.1 → 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.12.1 → instant_python-0.14.0}/instant_python/initialize/delivery/cli.py +18 -12
- instant_python-0.14.0/instant_python/initialize/domain/config_repository.py +7 -0
- 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.14.0/instant_python/initialize/infra/persistence/config_repository.py +15 -0
- 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.12.1 → instant_python-0.14.0}/instant_python/project_creator/file.py +2 -2
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/project_creator/file_system.py +2 -2
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/render/jinja_environment.py +8 -3
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/render/jinja_project_renderer.py +3 -3
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/shared/application_error.py +1 -4
- instant_python-0.14.0/instant_python/templates/boilerplate/exceptions/base_error.py +13 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/exceptions/domain_error.py +1 -1
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/exceptions/domain_event_type_not_found_error.py +1 -1
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/exceptions/incorrect_value_type_error.py +1 -1
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/exceptions/invalid_id_format_error.py +1 -1
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/exceptions/invalid_negative_value_error.py +1 -1
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/exceptions/rabbit_mq_connection_not_established_error.py +1 -1
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/exceptions/required_value_error.py +1 -1
- {instant_python-0.12.1 → 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.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/persistence/async/sqlalchemy_repository.py +1 -1
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/async_sqlalchemy.yml.j2 +1 -1
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/clean_architecture/source.yml.j2 +1 -4
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/domain_driven_design/source.yml.j2 +2 -5
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/event_bus_domain.yml.j2 +1 -1
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/standard_project/source.yml.j2 +1 -4
- {instant_python-0.12.1 → instant_python-0.14.0}/pyproject.toml +7 -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.12.1/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.12.1/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.12.1/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.12.1 → 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.12.1 → instant_python-0.14.0}/test/dependency_manager/test_pdm_dependency_manager.py +3 -3
- {instant_python-0.12.1 → instant_python-0.14.0}/test/dependency_manager/test_uv_dependency_manager.py +4 -4
- instant_python-0.14.0/test/git/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/git/test_git_configurer.py +3 -3
- instant_python-0.14.0/test/initialize/__init__.py +0 -0
- instant_python-0.14.0/test/initialize/application/__init__.py +0 -0
- instant_python-0.14.0/test/initialize/application/test_config_reader.py +29 -0
- instant_python-0.14.0/test/initialize/application/test_project_initializer.py +22 -0
- instant_python-0.14.0/test/initialize/delivery/__init__.py +0 -0
- instant_python-0.14.0/test/initialize/delivery/approved_files/TestInitCli.test_initializes_project_with_general_section_combinations.approved.txt +24 -0
- instant_python-0.14.0/test/initialize/delivery/approved_files/TestInitCli.test_initializes_project_with_git_section_combinations.approved.txt +2 -0
- instant_python-0.14.0/test/initialize/delivery/approved_files/TestInitCli.test_initializes_project_with_template_section_combinations.approved.txt +48 -0
- instant_python-0.14.0/test/initialize/delivery/approved_files/TestInitCli.test_should_initializes_project_with_predefined_dependencies_and_different_managers.approved.txt +4 -0
- instant_python-0.14.0/test/initialize/delivery/test_init_cli.py +178 -0
- instant_python-0.14.0/test/initialize/domain/__init__.py +0 -0
- instant_python-0.14.0/test/initialize/domain/test_nodes.py +12 -0
- instant_python-0.14.0/test/initialize/infra/__init__.py +0 -0
- instant_python-0.14.0/test/initialize/infra/persistence/__init__.py +0 -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.14.0/test/initialize/infra/persistence/test_configuration_repository.py +25 -0
- 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/approvaltests_config.json +3 -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/render/approvaltests_config.json +3 -0
- instant_python-0.14.0/test/resources/base_ipy_config.yml +21 -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.12.1 → instant_python-0.14.0}/uv.lock +1 -1
- instant_python-0.12.1/instant_python/config/application/config_generator.py +0 -15
- instant_python-0.12.1/instant_python/config/domain/config_parser.py +0 -9
- instant_python-0.12.1/instant_python/config/domain/config_writer.py +0 -9
- instant_python-0.12.1/instant_python/config/infra/writer/yaml_config_writer.py +0 -13
- instant_python-0.12.1/instant_python/templates/boilerplate/exceptions/base_error.py +0 -24
- instant_python-0.12.1/test/config/application/test_config_generator.py +0 -32
- instant_python-0.12.1/test/config/domain/mothers/configuration_schema_mother.py +0 -16
- instant_python-0.12.1/test/config/domain/mothers/general_configuration_mother.py +0 -31
- instant_python-0.12.1/test/config/domain/mothers/git_configuration_mother.py +0 -22
- instant_python-0.12.1/test/config/domain/test_dependency_configuration.py +0 -35
- instant_python-0.12.1/test/config/domain/test_git_configuration.py +0 -26
- instant_python-0.12.1/test/config/infra/writer/test_yaml_config_writer.py +0 -16
- {instant_python-0.12.1 → instant_python-0.14.0}/.github/FUNDING.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/.github/actions/python_setup/action.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/.github/pull_request_template.md +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/.github/workflows/pages.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/.github/workflows/release.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/.gitignore +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/.pre-commit-config.yaml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/.python-version +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/CITATION.cff +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/LICENSE +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/README.md +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/SECURITY.md +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/codeql-config.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/docs/assets/favicon.svg +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/docs/assets/logo.svg +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/docs/changelog/.components/changelog_header.md.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/docs/changelog/.components/changelog_init.md.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/docs/changelog/.components/changelog_update.md.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/docs/changelog/.components/changes.md.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/docs/changelog/.components/first_release.md.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/docs/changelog/.components/macros.md.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/docs/changelog/.components/versioned_changes.md.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/docs/changelog/.release_notes.md.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/docs/changelog/CHANGELOG.md.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/docs/downloads_macro.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/docs/examples/configuration.md +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/docs/examples/custom_template.md +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/docs/guide/command_config.md +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/docs/guide/command_init.md +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/docs/home/contributing.md +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/docs/home/getting_started.md +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/docs/home/index.md +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/docs/home/releases.md +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/docs/home/security.md +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/cli/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/cli/cli.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/cli/instant_python_typer.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/config/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/config/application/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/config/delivery/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/config/delivery/cli.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/config/domain/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/config/domain/question_wizard.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/config/infra/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/config/infra/parser/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/config/infra/question_wizard/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/config/infra/question_wizard/questionary_console_wizard.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/config/infra/question_wizard/step/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/config/infra/question_wizard/step/dependencies_step.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/config/infra/question_wizard/step/general_step.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/config/infra/question_wizard/step/git_step.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/config/infra/question_wizard/step/questionary.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/config/infra/question_wizard/step/steps.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/config/infra/question_wizard/step/template_step.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/config/infra/writer/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/configuration/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/configuration/parser/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/configuration/parser/configuration_file_not_found.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/dependency_manager/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/dependency_manager/command_execution_error.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/dependency_manager/dependency_manager_factory.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/dependency_manager/unknown_dependency_manager_error.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/formatter/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/formatter/project_formatter.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/git/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/initialize/__init__.py +0 -0
- {instant_python-0.12.1/instant_python/initialize/delivery → instant_python-0.14.0/instant_python/initialize/application}/__init__.py +0 -0
- {instant_python-0.12.1/instant_python/project_creator → instant_python-0.14.0/instant_python/initialize/delivery}/__init__.py +0 -0
- {instant_python-0.12.1/instant_python/render → instant_python-0.14.0/instant_python/initialize/domain}/__init__.py +0 -0
- {instant_python-0.12.1/instant_python/shared → instant_python-0.14.0/instant_python/initialize/infra}/__init__.py +0 -0
- {instant_python-0.12.1/instant_python/templates/boilerplate/event_bus → instant_python-0.14.0/instant_python/initialize/infra/persistence}/__init__.py +0 -0
- {instant_python-0.12.1/instant_python/templates/boilerplate/exceptions → instant_python-0.14.0/instant_python/initialize/infra/renderer}/__init__.py +0 -0
- {instant_python-0.12.1/instant_python/templates/boilerplate/fastapi → instant_python-0.14.0/instant_python/project_creator}/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/project_creator/directory.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/project_creator/file_has_not_been_created.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/project_creator/node.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/project_creator/unknown_node_typer_error.py +0 -0
- {instant_python-0.12.1/instant_python/templates/boilerplate/logger → instant_python-0.14.0/instant_python/render}/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/render/custom_project_renderer.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/render/jinja_custom_filters.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/render/template_file_not_found_error.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/render/unknown_template_error.py +0 -0
- {instant_python-0.12.1/instant_python/templates/boilerplate/persistence → instant_python-0.14.0/instant_python/shared}/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/shared/error_types.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/shared/supported_built_in_features.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/shared/supported_licenses.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/shared/supported_managers.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/shared/supported_python_versions.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/shared/supported_templates.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/.gitignore +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/.pre-commit-config.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/.python-version +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/CITATION.cff +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/LICENSE +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/README.md +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/SECURITY.md +0 -0
- {instant_python-0.12.1/instant_python/templates/boilerplate/persistence/async → instant_python-0.14.0/instant_python/templates/boilerplate/event_bus}/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/domain_event.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/domain_event_json_deserializer.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/domain_event_json_serializer.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/domain_event_subscriber.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/event_aggregate.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/event_bus.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/exchange_type.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/mock_event_bus.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_configurer.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_connection.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_consumer.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_event_bus.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_queue_formatter.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_settings.py +0 -0
- {instant_python-0.12.1/instant_python/templates/boilerplate/persistence/synchronous → instant_python-0.14.0/instant_python/templates/boilerplate/exceptions}/__init__.py +0 -0
- {instant_python-0.12.1/instant_python/templates/boilerplate/value_object → instant_python-0.14.0/instant_python/templates/boilerplate/fastapi}/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/fastapi/application.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/fastapi/error_response.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/fastapi/fastapi_log_middleware.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/fastapi/lifespan.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/fastapi/success_response.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/github/action.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/github/bug_report.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/github/ci.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/github/feature_request.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/github/release.yml +0 -0
- {instant_python-0.12.1/test → instant_python-0.14.0/instant_python/templates/boilerplate/logger}/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/logger/file_logger.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/logger/file_rotating_handler.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/logger/json_formatter.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/mypy.ini +0 -0
- {instant_python-0.12.1/test/config → instant_python-0.14.0/instant_python/templates/boilerplate/persistence}/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/persistence/alembic_migrator.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/persistence/async/README.md +0 -0
- {instant_python-0.12.1/test/config/application → instant_python-0.14.0/instant_python/templates/boilerplate/persistence/async}/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/persistence/async/alembic.ini +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/persistence/async/async_engine_fixture.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/persistence/async/env.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/persistence/async/models_metadata.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/persistence/async/postgres_settings.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/persistence/async/script.py.mako +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/persistence/base.py +0 -0
- {instant_python-0.12.1/test/config/domain → instant_python-0.14.0/instant_python/templates/boilerplate/persistence/synchronous}/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/persistence/synchronous/session_maker.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/persistence/synchronous/sqlalchemy_repository.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/pyproject.toml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/pytest.ini +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/random_generator.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/scripts/add_dependency.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/scripts/create_aggregate.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/scripts/insert_template.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/scripts/integration.sh +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/scripts/local_setup.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/scripts/makefile +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/scripts/post-merge.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/scripts/pre-commit.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/scripts/pre-push.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/scripts/remove_dependency.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/scripts/unit.sh +0 -0
- {instant_python-0.12.1/test/config/domain/mothers → instant_python-0.14.0/instant_python/templates/boilerplate/value_object}/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/value_object/aggregate.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/value_object/int_primitives_mother.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/value_object/int_value_object.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/value_object/string_primitives_mother.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/value_object/string_value_object.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/value_object/test_int_value_object.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/value_object/test_string_value_object.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/value_object/test_uuid_value_object.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/value_object/uuid.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/value_object/uuid_primitives_mother.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/value_object/validation.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/boilerplate/value_object/value_object.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/alembic_migrator.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/async_alembic.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/citation.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/clean_architecture/main_structure.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/clean_architecture/test.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/domain_driven_design/bounded_context.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/domain_driven_design/main_structure.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/domain_driven_design/test.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/event_bus_infra.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/fastapi_app.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/fastapi_domain.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/fastapi_infra.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/github_action.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/github_issues_template.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/gitignore.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/license.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/logger.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/macros.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/makefile.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/mypy.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/precommit_hook.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/pyproject.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/pytest.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/python_version.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/readme.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/security.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/standard_project/main_structure.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/standard_project/test.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/synchronous_sqlalchemy.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/test_value_objects.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/instant_python/templates/project_structure/value_objects.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/makefile +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/mkdocs.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/mypy.ini +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/scripts/add_dependency.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/scripts/remove_dependency.py +0 -0
- {instant_python-0.12.1/test/config/infra → instant_python-0.14.0/test}/__init__.py +0 -0
- {instant_python-0.12.1/test/config/infra/parser → instant_python-0.14.0/test/config}/__init__.py +0 -0
- {instant_python-0.12.1/test/config/infra/parser/resources → instant_python-0.14.0/test/config/application}/__init__.py +0 -0
- {instant_python-0.12.1/test/config/infra/writer → instant_python-0.14.0/test/config/domain}/__init__.py +0 -0
- {instant_python-0.12.1/test/configuration → instant_python-0.14.0/test/config/domain/mothers}/__init__.py +0 -0
- {instant_python-0.12.1/test/configuration/parser → instant_python-0.14.0/test/config/infra}/__init__.py +0 -0
- {instant_python-0.12.1/test/configuration/parser/resources → instant_python-0.14.0/test/config/infra/parser}/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/config/infra/parser/approvaltests_config.json +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/config/infra/parser/approved_files/TestParser.test_should_parse_valid_answers.approved.txt +0 -0
- {instant_python-0.12.1/test/dependency_manager → instant_python-0.14.0/test/config/infra/parser/resources}/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/config/infra/parser/resources/missing_dependencies_fields.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/config/infra/parser/resources/missing_general_fields.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/config/infra/parser/resources/missing_git_fields.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/config/infra/parser/resources/missing_keys_answers.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/config/infra/parser/resources/missing_template_fields.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/config/infra/parser/resources/valid_answers.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/config/infra/parser/test_parser.py +0 -0
- {instant_python-0.12.1/test/formatter → instant_python-0.14.0/test/config/infra/writer}/__init__.py +0 -0
- {instant_python-0.12.1/test/git → instant_python-0.14.0/test/configuration}/__init__.py +0 -0
- {instant_python-0.12.1/test/project_creator → instant_python-0.14.0/test/configuration/parser}/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/configuration/parser/approvaltests_config.json +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/configuration/parser/approved_files/TestParser.test_should_parse_configuration.approved.txt +0 -0
- {instant_python-0.12.1/test/project_creator/resources/boilerplate/fastapi → instant_python-0.14.0/test/configuration/parser/resources}/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/configuration/parser/resources/config.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/configuration/parser/resources/empty_config.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/configuration/parser/resources/missing_dependencies_fields_config.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/configuration/parser/resources/missing_general_fields_config.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/configuration/parser/resources/missing_git_fields_config.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/configuration/parser/resources/missing_keys_config.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/configuration/parser/resources/missing_template_fields_config.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/configuration/parser/test_parser.py +0 -0
- {instant_python-0.12.1/test/project_creator/resources/boilerplate/logger → instant_python-0.14.0/test/dependency_manager}/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/dependency_manager/mock_pdm_dependency_manager.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/dependency_manager/mock_uv_dependency_manager.py +0 -0
- {instant_python-0.12.1/test/render → instant_python-0.14.0/test/formatter}/__init__.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/formatter/mock_project_formatter.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/formatter/test_project_formatter.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/git/mock_git_configurer.py +0 -0
- {instant_python-0.12.1/test/project_creator → instant_python-0.14.0/test/initialize/delivery}/approvaltests_config.json +0 -0
- {instant_python-0.12.1/test/render → instant_python-0.14.0/test/initialize/infra/persistence}/approvaltests_config.json +0 -0
- {instant_python-0.12.1 → 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.12.1 → 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.12.1 → 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.12.1 → 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.12.1 → 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.12.1 → instant_python-0.14.0}/test/project_creator/approved_files/TestFileSystem.test_should_create_folders_and_files.approved.txt +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/project_creator/approved_files/TestFileSystem.test_should_generate_file_system_tree.approved.txt +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/project_creator/directory_mother.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/project_creator/resources/boilerplate/exceptions/domain_error.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/project_creator/resources/boilerplate/exceptions/domain_error_simple.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/project_creator/resources/boilerplate/fastapi/application.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/project_creator/resources/boilerplate/fastapi/http_response.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/project_creator/resources/boilerplate/fastapi/lifespan.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/project_creator/resources/boilerplate/logger/logger.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/project_creator/resources/boilerplate/persistence/alembic_migrator.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/project_creator/resources/clean_architecture/main_structure.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/project_creator/resources/config.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/project_creator/resources/config_fastapi_with_logger.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/project_creator/resources/config_fastapi_with_migrator.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/project_creator/resources/config_with_only_fastapi.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/project_creator/resources/rendered_custom_project_structure.json +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/project_creator/resources/rendered_project_structure.json +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/project_creator/resources/rendered_project_structure_fastapi_with_logger.json +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/project_creator/resources/rendered_project_structure_fastapi_with_migrator.json +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/project_creator/resources/rendered_project_structure_only_with_fastapi.json +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/project_creator/test_directory.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/project_creator/test_file.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/project_creator/test_file_system.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/random_generator.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/render/approved_files/TestCustomProjectRenderer.test_should_render_custom_template.approved.txt +0 -0
- {instant_python-0.12.1 → 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.12.1 → 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.12.1 → instant_python-0.14.0}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.received.txt +0 -0
- {instant_python-0.12.1 → 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.12.1 → 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.12.1 → instant_python-0.14.0}/test/render/resources/clean_architecture/main_structure.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/render/resources/clean_architecture_config.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/render/resources/custom_template.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/render/resources/domain_driven_design/main_structure.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/render/resources/domain_driven_design_config.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/render/resources/standard_project/main_structure.yml.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/render/resources/standard_project_with_dependency_config.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/render/resources/standard_project_with_git_config.yml +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/render/resources/test_template.j2 +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/render/test_custom_project_renderer.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/render/test_jinja_environment.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/test/render/test_jinja_project_renderer.py +0 -0
- {instant_python-0.12.1 → instant_python-0.14.0}/tox.ini +0 -0
|
@@ -172,32 +172,6 @@ jobs:
|
|
|
172
172
|
token: ${{ secrets.CODECOV_TOKEN }}
|
|
173
173
|
slug: dimanu-py/instant-python
|
|
174
174
|
|
|
175
|
-
rollback:
|
|
176
|
-
name: rollback
|
|
177
|
-
runs-on: ubuntu-latest
|
|
178
|
-
needs: [ test ]
|
|
179
|
-
if: ${{ always() && needs.test.result == 'failure' }}
|
|
180
|
-
steps:
|
|
181
|
-
- name: 🛡️ Harden runner
|
|
182
|
-
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
|
183
|
-
with:
|
|
184
|
-
egress-policy: audit
|
|
185
|
-
|
|
186
|
-
- name: 📥 Checkout the repository
|
|
187
|
-
uses: actions/checkout@v4
|
|
188
|
-
with:
|
|
189
|
-
fetch-depth: 0
|
|
190
|
-
persist-credentials: false
|
|
191
|
-
|
|
192
|
-
- name: ⏪️ Reset to previous commit
|
|
193
|
-
run: |
|
|
194
|
-
git config user.name ${{ vars.GIT_COMMITTER_NAME }}
|
|
195
|
-
git config user.email ${{ vars.GIT_COMMITTER_EMAIL }}
|
|
196
|
-
git reset --hard ${{ github.event.before }}
|
|
197
|
-
git push --force-with-lease origin main
|
|
198
|
-
env:
|
|
199
|
-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
200
|
-
|
|
201
175
|
tox-test:
|
|
202
176
|
name: tox
|
|
203
177
|
runs-on: ubuntu-latest
|
|
@@ -2,6 +2,192 @@
|
|
|
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
|
+
|
|
117
|
+
## v0.13.0 (2025-10-26)
|
|
118
|
+
|
|
119
|
+
### ✨ Features
|
|
120
|
+
|
|
121
|
+
- **config**: Raise error when git repo is set to be initialized but username or email is either not
|
|
122
|
+
passed or an empty string
|
|
123
|
+
([`2e9f852`](https://github.com/dimanu-py/instant-python/commit/2e9f85287b3beab29bfd2745a830d6972939938f))
|
|
124
|
+
|
|
125
|
+
- **dependency-manager**: Inform the user that the selected dependency manager is already installed
|
|
126
|
+
([`71ac1f7`](https://github.com/dimanu-py/instant-python/commit/71ac1f7c7da63ce55d27aacb9c1db03c34963de4))
|
|
127
|
+
|
|
128
|
+
- **config**: Allow custom configuration path for loading configurations
|
|
129
|
+
([`b7bfc97`](https://github.com/dimanu-py/instant-python/commit/b7bfc97fa8d7ada19d39c2c04a491e625ab83366))
|
|
130
|
+
|
|
131
|
+
- **config**: Add 'custom_config_path' parameter to Parser port to be able to generate
|
|
132
|
+
configurations with custom paths to the config file
|
|
133
|
+
([`350dbeb`](https://github.com/dimanu-py/instant-python/commit/350dbebab016dda71f42bef4d389e48e0ca2b197))
|
|
134
|
+
|
|
135
|
+
- **initialize**: Handle FileNotFoundError in read_from_file method
|
|
136
|
+
([`00fb79f`](https://github.com/dimanu-py/instant-python/commit/00fb79f5ec282525433b5d0e6abb4880cac23b33))
|
|
137
|
+
|
|
138
|
+
- **initialize**: Implement read_from_file method to load YAML configuration
|
|
139
|
+
([`5630929`](https://github.com/dimanu-py/instant-python/commit/5630929f3a5615e0f93d6d688e01d07cc31bafbd))
|
|
140
|
+
|
|
141
|
+
- **initialize**: Convert ConfigurationRepository into an interface and define the signature of
|
|
142
|
+
'read_from_file' method
|
|
143
|
+
([`b8c768f`](https://github.com/dimanu-py/instant-python/commit/b8c768fb958b96f9fa2749cf9668c02951d0426c))
|
|
144
|
+
|
|
145
|
+
- **initialize**: Implement execute method to return parsed configuration schema from config file
|
|
146
|
+
([`a009371`](https://github.com/dimanu-py/instant-python/commit/a00937100e8cef46036dce1dc16db18f20602a03))
|
|
147
|
+
|
|
148
|
+
### 🪲 Bug Fixes
|
|
149
|
+
|
|
150
|
+
- **dependency-manager**: Use dynamic command for version check in dependency managers
|
|
151
|
+
([`46c9726`](https://github.com/dimanu-py/instant-python/commit/46c972601cf1ad217d6a0aca845fe0410d8cc176))
|
|
152
|
+
|
|
153
|
+
- **config**: Configure parser mock in config reader unit test to be called with the config file
|
|
154
|
+
path
|
|
155
|
+
([`71655ea`](https://github.com/dimanu-py/instant-python/commit/71655ea654392978c339314482a5e94a51fbf888))
|
|
156
|
+
|
|
157
|
+
- **templates**: Correct error exception boilerplate file to base_error
|
|
158
|
+
([`8dda0d7`](https://github.com/dimanu-py/instant-python/commit/8dda0d7ae296c42d9eed496920785e6f5b608779))
|
|
159
|
+
|
|
160
|
+
- **dependency-manager**: Install uv manager only if is not installed
|
|
161
|
+
([`e2a9ad5`](https://github.com/dimanu-py/instant-python/commit/e2a9ad5fdede2da1bb94e2bf7c75c74f04be9a23))
|
|
162
|
+
|
|
163
|
+
- **dependency-manager**: Install pdm manager only if is not installed
|
|
164
|
+
([`f4eb3ff`](https://github.com/dimanu-py/instant-python/commit/f4eb3fffbfe5c067f1997ddb7eb70dcddde43de4))
|
|
165
|
+
|
|
166
|
+
- **initialize**: Pass config file path to parser for accurate parsing
|
|
167
|
+
([`de58185`](https://github.com/dimanu-py/instant-python/commit/de58185ab722863a92627adf6b065c796e1860d5))
|
|
168
|
+
|
|
169
|
+
### ⚙️ Build System
|
|
170
|
+
|
|
171
|
+
- Add pytest marks to be able to discriminate which tests are run
|
|
172
|
+
([`33e8e3d`](https://github.com/dimanu-py/instant-python/commit/33e8e3df683483a3745583cc03cd9a877c33f937))
|
|
173
|
+
|
|
174
|
+
### ♻️ Refactoring
|
|
175
|
+
|
|
176
|
+
- **render**: Encapsulate filter addition in _add_filter method
|
|
177
|
+
([`caf805b`](https://github.com/dimanu-py/instant-python/commit/caf805b1f9c38782e011d237cc131798c6c9b565))
|
|
178
|
+
|
|
179
|
+
- **initialize**: Use config reader in init cli application
|
|
180
|
+
([`20f8178`](https://github.com/dimanu-py/instant-python/commit/20f8178f398b5db6b8cb7f48f12fc1a4143fe1b8))
|
|
181
|
+
|
|
182
|
+
- **initialize**: Rename read_from_file method to read to not expose implementation details on the
|
|
183
|
+
interface
|
|
184
|
+
([`2aa94f4`](https://github.com/dimanu-py/instant-python/commit/2aa94f44835122421eaa8af3303c76addf30b1b0))
|
|
185
|
+
|
|
186
|
+
- **shared**: Modify ApplicationError to not be abstract class so it can be instantiated as a
|
|
187
|
+
general app error
|
|
188
|
+
([`da086de`](https://github.com/dimanu-py/instant-python/commit/da086def1d643fed11b3ee7005435b6d45bea40c))
|
|
189
|
+
|
|
190
|
+
|
|
5
191
|
## v0.12.1 (2025-10-23)
|
|
6
192
|
|
|
7
193
|
### 🪲 Bug Fixes
|
|
@@ -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()
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
from abc import ABC, abstractmethod
|
|
2
|
+
from typing import Union
|
|
3
|
+
|
|
4
|
+
from instant_python.config.domain.config_schema import ConfigSchema
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class ConfigParser(ABC):
|
|
8
|
+
@abstractmethod
|
|
9
|
+
def parse(self, content: dict[str, dict], custom_config_path: Union[str, None] = None) -> ConfigSchema:
|
|
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]]]
|
|
@@ -6,7 +6,7 @@ from instant_python.shared.error_types import ErrorTypes
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
@dataclass
|
|
9
|
-
class
|
|
9
|
+
class GitConfig:
|
|
10
10
|
initialize: bool
|
|
11
11
|
username: Optional[str] = field(default=None)
|
|
12
12
|
email: Optional[str] = field(default=None)
|
|
@@ -15,9 +15,15 @@ class GitConfiguration:
|
|
|
15
15
|
self._ensure_username_and_email_are_set_if_initializing()
|
|
16
16
|
|
|
17
17
|
def _ensure_username_and_email_are_set_if_initializing(self) -> None:
|
|
18
|
-
if self.initialize and (self.
|
|
18
|
+
if self.initialize and (self._username_is_not_specified() or self._email_is_not_specified()):
|
|
19
19
|
raise GitUserOrEmailNotPresent()
|
|
20
20
|
|
|
21
|
+
def _email_is_not_specified(self) -> bool:
|
|
22
|
+
return self.email is None or self.email == ""
|
|
23
|
+
|
|
24
|
+
def _username_is_not_specified(self) -> bool:
|
|
25
|
+
return self.username is None or self.username == ""
|
|
26
|
+
|
|
21
27
|
def to_primitives(self) -> dict[str, str | bool]:
|
|
22
28
|
return asdict(self)
|
|
23
29
|
|
|
@@ -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.12.1 → 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.12.1 → 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,23 +20,33 @@ 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]) ->
|
|
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
|
-
return
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
return (
|
|
31
|
+
ConfigSchema(
|
|
32
|
+
general=general_section,
|
|
33
|
+
dependencies=dependencies_section,
|
|
34
|
+
template=template_section,
|
|
35
|
+
git=git_section,
|
|
36
|
+
)
|
|
37
|
+
if not custom_config_path
|
|
38
|
+
else ConfigSchema.from_file(
|
|
39
|
+
config_file_path=custom_config_path,
|
|
40
|
+
general=general_section,
|
|
41
|
+
dependencies=dependencies_section,
|
|
42
|
+
template=template_section,
|
|
43
|
+
git=git_section,
|
|
44
|
+
)
|
|
35
45
|
)
|
|
36
46
|
|
|
37
|
-
def _parse_general_section(self, fields: dict[str, str]) ->
|
|
47
|
+
def _parse_general_section(self, fields: dict[str, str]) -> GeneralConfig:
|
|
38
48
|
try:
|
|
39
|
-
return
|
|
49
|
+
return GeneralConfig(**fields)
|
|
40
50
|
except TypeError as error:
|
|
41
51
|
self._ensure_error_is_for_missing_fields(error)
|
|
42
52
|
raise MissingMandatoryFields(error.args[0], self._GENERAL) from error
|
|
@@ -44,7 +54,7 @@ class Parser(ConfigParser):
|
|
|
44
54
|
def _parse_dependencies_section(
|
|
45
55
|
self,
|
|
46
56
|
fields: list[dict[str, Union[str, bool]]],
|
|
47
|
-
) -> list[
|
|
57
|
+
) -> list[DependencyConfig]:
|
|
48
58
|
dependencies = []
|
|
49
59
|
|
|
50
60
|
if not fields:
|
|
@@ -52,7 +62,7 @@ class Parser(ConfigParser):
|
|
|
52
62
|
|
|
53
63
|
for dependency_fields in fields:
|
|
54
64
|
try:
|
|
55
|
-
dependency =
|
|
65
|
+
dependency = DependencyConfig(**dependency_fields)
|
|
56
66
|
except TypeError as error:
|
|
57
67
|
self._ensure_error_is_for_missing_fields(error)
|
|
58
68
|
raise MissingMandatoryFields(error.args[0], self._DEPENDENCIES) from error
|
|
@@ -61,16 +71,16 @@ class Parser(ConfigParser):
|
|
|
61
71
|
|
|
62
72
|
return dependencies
|
|
63
73
|
|
|
64
|
-
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:
|
|
65
75
|
try:
|
|
66
|
-
return
|
|
76
|
+
return TemplateConfig(**fields)
|
|
67
77
|
except TypeError as error:
|
|
68
78
|
self._ensure_error_is_for_missing_fields(error)
|
|
69
79
|
raise MissingMandatoryFields(error.args[0], self._TEMPLATE) from error
|
|
70
80
|
|
|
71
|
-
def _parse_git_section(self, fields: dict[str, Union[str, bool]]) ->
|
|
81
|
+
def _parse_git_section(self, fields: dict[str, Union[str, bool]]) -> GitConfig:
|
|
72
82
|
try:
|
|
73
|
-
return
|
|
83
|
+
return GitConfig(**fields)
|
|
74
84
|
except TypeError as error:
|
|
75
85
|
self._ensure_error_is_for_missing_fields(error)
|
|
76
86
|
raise MissingMandatoryFields(error.args[0], self._GIT) from error
|
|
@@ -81,7 +91,7 @@ class Parser(ConfigParser):
|
|
|
81
91
|
raise ConfigKeyNotPresent(missing_keys, self._REQUIRED_CONFIG_KEYS)
|
|
82
92
|
|
|
83
93
|
@staticmethod
|
|
84
|
-
def
|
|
94
|
+
def _ensure_config_is_not_empty(content: dict[str, dict]):
|
|
85
95
|
if not content:
|
|
86
96
|
raise EmptyConfigurationNotAllowed
|
|
87
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)
|