instant-python 0.12.0__tar.gz → 0.13.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.0 → instant_python-0.13.0}/.github/workflows/ci.yml +0 -26
- {instant_python-0.12.0 → instant_python-0.13.0}/CHANGELOG.md +82 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/PKG-INFO +1 -1
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/domain/config_parser.py +2 -1
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/domain/git_configuration.py +7 -1
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/infra/parser/parser.py +16 -6
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/dependency_manager/pdm_dependency_manager.py +10 -1
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/dependency_manager/uv_dependency_manager.py +10 -1
- instant_python-0.13.0/instant_python/initialize/application/config_reader.py +14 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/initialize/delivery/cli.py +18 -12
- instant_python-0.13.0/instant_python/initialize/domain/configuration_repository.py +7 -0
- instant_python-0.13.0/instant_python/initialize/infra/configuration_repository.py +15 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/render/jinja_environment.py +8 -3
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/shared/application_error.py +1 -4
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/event_bus_domain.yml.j2 +1 -1
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/github_issues_template.yml.j2 +1 -1
- {instant_python-0.12.0 → instant_python-0.13.0}/pyproject.toml +6 -1
- {instant_python-0.12.0 → instant_python-0.13.0}/test/config/domain/test_git_configuration.py +23 -4
- instant_python-0.13.0/test/initialize/application/__init__.py +0 -0
- instant_python-0.13.0/test/initialize/application/test_config_reader.py +29 -0
- instant_python-0.13.0/test/initialize/delivery/__init__.py +0 -0
- instant_python-0.13.0/test/initialize/delivery/approved_files/TestInitCli.test_initializes_project_with_general_section_combinations.approved.txt +24 -0
- instant_python-0.13.0/test/initialize/delivery/approved_files/TestInitCli.test_initializes_project_with_git_section_combinations.approved.txt +2 -0
- instant_python-0.13.0/test/initialize/delivery/approved_files/TestInitCli.test_initializes_project_with_template_section_combinations.approved.txt +48 -0
- instant_python-0.13.0/test/initialize/delivery/approved_files/TestInitCli.test_should_initializes_project_with_predefined_dependencies_and_different_managers.approved.txt +4 -0
- instant_python-0.13.0/test/initialize/delivery/ipy.yml +21 -0
- instant_python-0.13.0/test/initialize/delivery/test_init_cli.py +178 -0
- instant_python-0.13.0/test/initialize/infra/__init__.py +0 -0
- instant_python-0.13.0/test/initialize/infra/approved_files/TestConfigurationRepository.test_should_read_existing_config_file.approved.txt +33 -0
- instant_python-0.13.0/test/initialize/infra/resources/config.yml +23 -0
- instant_python-0.13.0/test/initialize/infra/test_configuration_repository.py +25 -0
- instant_python-0.13.0/test/project_creator/__init__.py +0 -0
- instant_python-0.13.0/test/project_creator/approvaltests_config.json +3 -0
- instant_python-0.13.0/test/project_creator/resources/boilerplate/fastapi/__init__.py +0 -0
- instant_python-0.13.0/test/project_creator/resources/boilerplate/logger/__init__.py +0 -0
- instant_python-0.13.0/test/render/__init__.py +0 -0
- instant_python-0.13.0/test/render/approvaltests_config.json +3 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/uv.lock +1 -1
- {instant_python-0.12.0 → instant_python-0.13.0}/.github/FUNDING.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/.github/actions/python_setup/action.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/.github/pull_request_template.md +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/.github/workflows/pages.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/.github/workflows/release.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/.gitignore +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/.pre-commit-config.yaml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/.python-version +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/CITATION.cff +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/LICENSE +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/README.md +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/SECURITY.md +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/codeql-config.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/docs/assets/favicon.svg +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/docs/assets/logo.svg +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/docs/changelog/.components/changelog_header.md.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/docs/changelog/.components/changelog_init.md.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/docs/changelog/.components/changelog_update.md.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/docs/changelog/.components/changes.md.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/docs/changelog/.components/first_release.md.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/docs/changelog/.components/macros.md.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/docs/changelog/.components/versioned_changes.md.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/docs/changelog/.release_notes.md.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/docs/changelog/CHANGELOG.md.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/docs/downloads_macro.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/docs/examples/configuration.md +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/docs/examples/custom_template.md +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/docs/guide/command_config.md +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/docs/guide/command_init.md +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/docs/home/contributing.md +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/docs/home/getting_started.md +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/docs/home/index.md +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/docs/home/releases.md +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/docs/home/security.md +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/cli/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/cli/cli.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/cli/instant_python_typer.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/application/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/application/config_generator.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/delivery/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/delivery/cli.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/domain/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/domain/config_writer.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/domain/configuration_schema.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/domain/dependency_configuration.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/domain/general_configuration.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/domain/question_wizard.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/domain/template_configuration.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/infra/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/infra/parser/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/infra/parser/errors.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/infra/question_wizard/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/infra/question_wizard/questionary_console_wizard.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/infra/question_wizard/step/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/infra/question_wizard/step/dependencies_step.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/infra/question_wizard/step/general_step.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/infra/question_wizard/step/git_step.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/infra/question_wizard/step/questionary.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/infra/question_wizard/step/steps.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/infra/question_wizard/step/template_step.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/infra/writer/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/infra/writer/yaml_config_writer.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/configuration/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/configuration/parser/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/configuration/parser/configuration_file_not_found.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/configuration/parser/parser.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/dependency_manager/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/dependency_manager/command_execution_error.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/dependency_manager/dependency_manager.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/dependency_manager/dependency_manager_factory.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/dependency_manager/unknown_dependency_manager_error.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/formatter/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/formatter/project_formatter.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/git/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/git/git_configurer.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/initialize/__init__.py +0 -0
- {instant_python-0.12.0/instant_python/initialize/delivery → instant_python-0.13.0/instant_python/initialize/application}/__init__.py +0 -0
- {instant_python-0.12.0/instant_python/project_creator → instant_python-0.13.0/instant_python/initialize/delivery}/__init__.py +0 -0
- {instant_python-0.12.0/instant_python/render → instant_python-0.13.0/instant_python/initialize/domain}/__init__.py +0 -0
- {instant_python-0.12.0/instant_python/shared → instant_python-0.13.0/instant_python/initialize/infra}/__init__.py +0 -0
- {instant_python-0.12.0/instant_python/templates/boilerplate/event_bus → instant_python-0.13.0/instant_python/project_creator}/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/project_creator/directory.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/project_creator/file.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/project_creator/file_has_not_been_created.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/project_creator/file_system.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/project_creator/node.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/project_creator/unknown_node_typer_error.py +0 -0
- {instant_python-0.12.0/instant_python/templates/boilerplate/exceptions → instant_python-0.13.0/instant_python/render}/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/render/custom_project_renderer.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/render/jinja_custom_filters.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/render/jinja_project_renderer.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/render/template_file_not_found_error.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/render/unknown_template_error.py +0 -0
- {instant_python-0.12.0/instant_python/templates/boilerplate/fastapi → instant_python-0.13.0/instant_python/shared}/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/shared/error_types.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/shared/supported_built_in_features.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/shared/supported_licenses.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/shared/supported_managers.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/shared/supported_python_versions.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/shared/supported_templates.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/.gitignore +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/.pre-commit-config.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/.python-version +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/CITATION.cff +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/LICENSE +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/README.md +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/SECURITY.md +0 -0
- {instant_python-0.12.0/instant_python/templates/boilerplate/logger → instant_python-0.13.0/instant_python/templates/boilerplate/event_bus}/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/domain_event.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/domain_event_json_deserializer.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/domain_event_json_serializer.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/domain_event_subscriber.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/event_aggregate.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/event_bus.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/exchange_type.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/mock_event_bus.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_configurer.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_connection.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_consumer.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_event_bus.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_queue_formatter.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/event_bus/rabbit_mq_settings.py +0 -0
- {instant_python-0.12.0/instant_python/templates/boilerplate/persistence → instant_python-0.13.0/instant_python/templates/boilerplate/exceptions}/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/exceptions/base_error.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/exceptions/domain_error.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/exceptions/domain_event_type_not_found_error.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/exceptions/incorrect_value_type_error.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/exceptions/invalid_id_format_error.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/exceptions/invalid_negative_value_error.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/exceptions/rabbit_mq_connection_not_established_error.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/exceptions/required_value_error.py +0 -0
- {instant_python-0.12.0/instant_python/templates/boilerplate/persistence/async → instant_python-0.13.0/instant_python/templates/boilerplate/fastapi}/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/fastapi/application.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/fastapi/error_handlers.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/fastapi/error_response.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/fastapi/fastapi_log_middleware.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/fastapi/lifespan.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/fastapi/success_response.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/github/action.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/github/bug_report.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/github/ci.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/github/feature_request.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/github/release.yml +0 -0
- {instant_python-0.12.0/instant_python/templates/boilerplate/persistence/synchronous → instant_python-0.13.0/instant_python/templates/boilerplate/logger}/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/logger/file_logger.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/logger/file_rotating_handler.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/logger/json_formatter.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/mypy.ini +0 -0
- {instant_python-0.12.0/instant_python/templates/boilerplate/value_object → instant_python-0.13.0/instant_python/templates/boilerplate/persistence}/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/persistence/alembic_migrator.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/persistence/async/README.md +0 -0
- {instant_python-0.12.0/test → instant_python-0.13.0/instant_python/templates/boilerplate/persistence/async}/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/persistence/async/alembic.ini +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/persistence/async/async_engine_fixture.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/persistence/async/env.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/persistence/async/models_metadata.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/persistence/async/postgres_settings.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/persistence/async/script.py.mako +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/persistence/async/sqlalchemy_repository.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/persistence/base.py +0 -0
- {instant_python-0.12.0/test/config → instant_python-0.13.0/instant_python/templates/boilerplate/persistence/synchronous}/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/persistence/synchronous/session_maker.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/persistence/synchronous/sqlalchemy_repository.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/pyproject.toml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/pytest.ini +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/random_generator.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/scripts/add_dependency.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/scripts/create_aggregate.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/scripts/insert_template.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/scripts/integration.sh +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/scripts/local_setup.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/scripts/makefile +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/scripts/post-merge.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/scripts/pre-commit.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/scripts/pre-push.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/scripts/remove_dependency.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/scripts/unit.sh +0 -0
- {instant_python-0.12.0/test/config/application → instant_python-0.13.0/instant_python/templates/boilerplate/value_object}/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/value_object/aggregate.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/value_object/int_primitives_mother.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/value_object/int_value_object.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/value_object/string_primitives_mother.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/value_object/string_value_object.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/value_object/test_int_value_object.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/value_object/test_string_value_object.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/value_object/test_uuid_value_object.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/value_object/uuid.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/value_object/uuid_primitives_mother.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/value_object/validation.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/boilerplate/value_object/value_object.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/alembic_migrator.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/async_alembic.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/async_sqlalchemy.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/citation.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/clean_architecture/main_structure.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/clean_architecture/source.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/clean_architecture/test.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/domain_driven_design/bounded_context.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/domain_driven_design/main_structure.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/domain_driven_design/source.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/domain_driven_design/test.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/event_bus_infra.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/fastapi_app.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/fastapi_domain.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/fastapi_infra.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/github_action.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/gitignore.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/license.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/logger.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/macros.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/makefile.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/mypy.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/precommit_hook.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/pyproject.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/pytest.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/python_version.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/readme.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/security.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/standard_project/main_structure.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/standard_project/source.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/standard_project/test.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/synchronous_sqlalchemy.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/test_value_objects.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/instant_python/templates/project_structure/value_objects.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/makefile +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/mkdocs.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/mypy.ini +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/scripts/add_dependency.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/scripts/remove_dependency.py +0 -0
- {instant_python-0.12.0/test/config/domain → instant_python-0.13.0/test}/__init__.py +0 -0
- {instant_python-0.12.0/test/config/domain/mothers → instant_python-0.13.0/test/config}/__init__.py +0 -0
- {instant_python-0.12.0/test/config/infra → instant_python-0.13.0/test/config/application}/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/config/application/test_config_generator.py +0 -0
- {instant_python-0.12.0/test/config/infra/parser → instant_python-0.13.0/test/config/domain}/__init__.py +0 -0
- {instant_python-0.12.0/test/config/infra/parser/resources → instant_python-0.13.0/test/config/domain/mothers}/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/config/domain/mothers/configuration_schema_mother.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/config/domain/mothers/dependency_configuration_mother.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/config/domain/mothers/general_configuration_mother.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/config/domain/mothers/git_configuration_mother.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/config/domain/mothers/template_configuration_mother.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/config/domain/test_dependency_configuration.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/config/domain/test_general_configuration.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/config/domain/test_template_configuration.py +0 -0
- {instant_python-0.12.0/test/config/infra/writer → instant_python-0.13.0/test/config/infra}/__init__.py +0 -0
- {instant_python-0.12.0/test/configuration → instant_python-0.13.0/test/config/infra/parser}/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/config/infra/parser/approvaltests_config.json +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/config/infra/parser/approved_files/TestParser.test_should_parse_valid_answers.approved.txt +0 -0
- {instant_python-0.12.0/test/configuration/parser → instant_python-0.13.0/test/config/infra/parser/resources}/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/config/infra/parser/resources/missing_dependencies_fields.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/config/infra/parser/resources/missing_general_fields.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/config/infra/parser/resources/missing_git_fields.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/config/infra/parser/resources/missing_keys_answers.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/config/infra/parser/resources/missing_template_fields.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/config/infra/parser/resources/valid_answers.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/config/infra/parser/test_parser.py +0 -0
- {instant_python-0.12.0/test/configuration/parser/resources → instant_python-0.13.0/test/config/infra/writer}/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/config/infra/writer/test_yaml_config_writer.py +0 -0
- {instant_python-0.12.0/test/dependency_manager → instant_python-0.13.0/test/configuration}/__init__.py +0 -0
- {instant_python-0.12.0/test/formatter → instant_python-0.13.0/test/configuration/parser}/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/configuration/parser/approvaltests_config.json +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/configuration/parser/approved_files/TestParser.test_should_parse_configuration.approved.txt +0 -0
- {instant_python-0.12.0/test/git → instant_python-0.13.0/test/configuration/parser/resources}/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/configuration/parser/resources/config.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/configuration/parser/resources/empty_config.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/configuration/parser/resources/missing_dependencies_fields_config.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/configuration/parser/resources/missing_general_fields_config.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/configuration/parser/resources/missing_git_fields_config.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/configuration/parser/resources/missing_keys_config.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/configuration/parser/resources/missing_template_fields_config.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/configuration/parser/test_parser.py +0 -0
- {instant_python-0.12.0/test/project_creator → instant_python-0.13.0/test/dependency_manager}/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/dependency_manager/mock_pdm_dependency_manager.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/dependency_manager/mock_uv_dependency_manager.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/dependency_manager/test_pdm_dependency_manager.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/dependency_manager/test_uv_dependency_manager.py +0 -0
- {instant_python-0.12.0/test/project_creator/resources/boilerplate/fastapi → instant_python-0.13.0/test/formatter}/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/formatter/mock_project_formatter.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/formatter/test_project_formatter.py +0 -0
- {instant_python-0.12.0/test/project_creator/resources/boilerplate/logger → instant_python-0.13.0/test/git}/__init__.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/git/mock_git_configurer.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/git/test_git_configurer.py +0 -0
- {instant_python-0.12.0/test/render → instant_python-0.13.0/test/initialize}/__init__.py +0 -0
- {instant_python-0.12.0/test/project_creator → instant_python-0.13.0/test/initialize/delivery}/approvaltests_config.json +0 -0
- {instant_python-0.12.0/test/render → instant_python-0.13.0/test/initialize/infra}/approvaltests_config.json +0 -0
- {instant_python-0.12.0 → instant_python-0.13.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.0 → instant_python-0.13.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.0 → instant_python-0.13.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.0 → instant_python-0.13.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.0 → instant_python-0.13.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.0 → instant_python-0.13.0}/test/project_creator/approved_files/TestFileSystem.test_should_create_folders_and_files.approved.txt +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/project_creator/approved_files/TestFileSystem.test_should_generate_file_system_tree.approved.txt +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/project_creator/directory_mother.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/project_creator/resources/boilerplate/exceptions/domain_error.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/project_creator/resources/boilerplate/exceptions/domain_error_simple.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/project_creator/resources/boilerplate/fastapi/application.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/project_creator/resources/boilerplate/fastapi/http_response.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/project_creator/resources/boilerplate/fastapi/lifespan.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/project_creator/resources/boilerplate/logger/logger.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/project_creator/resources/boilerplate/persistence/alembic_migrator.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/project_creator/resources/clean_architecture/main_structure.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/project_creator/resources/config.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/project_creator/resources/config_fastapi_with_logger.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/project_creator/resources/config_fastapi_with_migrator.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/project_creator/resources/config_with_only_fastapi.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/project_creator/resources/rendered_custom_project_structure.json +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/project_creator/resources/rendered_project_structure.json +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/project_creator/resources/rendered_project_structure_fastapi_with_logger.json +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/project_creator/resources/rendered_project_structure_fastapi_with_migrator.json +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/project_creator/resources/rendered_project_structure_only_with_fastapi.json +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/project_creator/test_directory.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/project_creator/test_file.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/project_creator/test_file_system.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/random_generator.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/render/approved_files/TestCustomProjectRenderer.test_should_render_custom_template.approved.txt +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.clean_architecture_config.yml.approved.txt +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.domain_driven_design_config.yml.approved.txt +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.received.txt +0 -0
- {instant_python-0.12.0 → instant_python-0.13.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.0 → instant_python-0.13.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.0 → instant_python-0.13.0}/test/render/resources/clean_architecture/main_structure.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/render/resources/clean_architecture_config.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/render/resources/custom_template.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/render/resources/domain_driven_design/main_structure.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/render/resources/domain_driven_design_config.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/render/resources/standard_project/main_structure.yml.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/render/resources/standard_project_with_dependency_config.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/render/resources/standard_project_with_git_config.yml +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/render/resources/test_template.j2 +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/render/test_custom_project_renderer.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/render/test_jinja_environment.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.0}/test/render/test_jinja_project_renderer.py +0 -0
- {instant_python-0.12.0 → instant_python-0.13.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,88 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- version list -->
|
|
4
4
|
|
|
5
|
+
## v0.13.0 (2025-10-26)
|
|
6
|
+
|
|
7
|
+
### ✨ Features
|
|
8
|
+
|
|
9
|
+
- **config**: Raise error when git repo is set to be initialized but username or email is either not
|
|
10
|
+
passed or an empty string
|
|
11
|
+
([`2e9f852`](https://github.com/dimanu-py/instant-python/commit/2e9f85287b3beab29bfd2745a830d6972939938f))
|
|
12
|
+
|
|
13
|
+
- **dependency-manager**: Inform the user that the selected dependency manager is already installed
|
|
14
|
+
([`71ac1f7`](https://github.com/dimanu-py/instant-python/commit/71ac1f7c7da63ce55d27aacb9c1db03c34963de4))
|
|
15
|
+
|
|
16
|
+
- **config**: Allow custom configuration path for loading configurations
|
|
17
|
+
([`b7bfc97`](https://github.com/dimanu-py/instant-python/commit/b7bfc97fa8d7ada19d39c2c04a491e625ab83366))
|
|
18
|
+
|
|
19
|
+
- **config**: Add 'custom_config_path' parameter to Parser port to be able to generate
|
|
20
|
+
configurations with custom paths to the config file
|
|
21
|
+
([`350dbeb`](https://github.com/dimanu-py/instant-python/commit/350dbebab016dda71f42bef4d389e48e0ca2b197))
|
|
22
|
+
|
|
23
|
+
- **initialize**: Handle FileNotFoundError in read_from_file method
|
|
24
|
+
([`00fb79f`](https://github.com/dimanu-py/instant-python/commit/00fb79f5ec282525433b5d0e6abb4880cac23b33))
|
|
25
|
+
|
|
26
|
+
- **initialize**: Implement read_from_file method to load YAML configuration
|
|
27
|
+
([`5630929`](https://github.com/dimanu-py/instant-python/commit/5630929f3a5615e0f93d6d688e01d07cc31bafbd))
|
|
28
|
+
|
|
29
|
+
- **initialize**: Convert ConfigurationRepository into an interface and define the signature of
|
|
30
|
+
'read_from_file' method
|
|
31
|
+
([`b8c768f`](https://github.com/dimanu-py/instant-python/commit/b8c768fb958b96f9fa2749cf9668c02951d0426c))
|
|
32
|
+
|
|
33
|
+
- **initialize**: Implement execute method to return parsed configuration schema from config file
|
|
34
|
+
([`a009371`](https://github.com/dimanu-py/instant-python/commit/a00937100e8cef46036dce1dc16db18f20602a03))
|
|
35
|
+
|
|
36
|
+
### 🪲 Bug Fixes
|
|
37
|
+
|
|
38
|
+
- **dependency-manager**: Use dynamic command for version check in dependency managers
|
|
39
|
+
([`46c9726`](https://github.com/dimanu-py/instant-python/commit/46c972601cf1ad217d6a0aca845fe0410d8cc176))
|
|
40
|
+
|
|
41
|
+
- **config**: Configure parser mock in config reader unit test to be called with the config file
|
|
42
|
+
path
|
|
43
|
+
([`71655ea`](https://github.com/dimanu-py/instant-python/commit/71655ea654392978c339314482a5e94a51fbf888))
|
|
44
|
+
|
|
45
|
+
- **templates**: Correct error exception boilerplate file to base_error
|
|
46
|
+
([`8dda0d7`](https://github.com/dimanu-py/instant-python/commit/8dda0d7ae296c42d9eed496920785e6f5b608779))
|
|
47
|
+
|
|
48
|
+
- **dependency-manager**: Install uv manager only if is not installed
|
|
49
|
+
([`e2a9ad5`](https://github.com/dimanu-py/instant-python/commit/e2a9ad5fdede2da1bb94e2bf7c75c74f04be9a23))
|
|
50
|
+
|
|
51
|
+
- **dependency-manager**: Install pdm manager only if is not installed
|
|
52
|
+
([`f4eb3ff`](https://github.com/dimanu-py/instant-python/commit/f4eb3fffbfe5c067f1997ddb7eb70dcddde43de4))
|
|
53
|
+
|
|
54
|
+
- **initialize**: Pass config file path to parser for accurate parsing
|
|
55
|
+
([`de58185`](https://github.com/dimanu-py/instant-python/commit/de58185ab722863a92627adf6b065c796e1860d5))
|
|
56
|
+
|
|
57
|
+
### ⚙️ Build System
|
|
58
|
+
|
|
59
|
+
- Add pytest marks to be able to discriminate which tests are run
|
|
60
|
+
([`33e8e3d`](https://github.com/dimanu-py/instant-python/commit/33e8e3df683483a3745583cc03cd9a877c33f937))
|
|
61
|
+
|
|
62
|
+
### ♻️ Refactoring
|
|
63
|
+
|
|
64
|
+
- **render**: Encapsulate filter addition in _add_filter method
|
|
65
|
+
([`caf805b`](https://github.com/dimanu-py/instant-python/commit/caf805b1f9c38782e011d237cc131798c6c9b565))
|
|
66
|
+
|
|
67
|
+
- **initialize**: Use config reader in init cli application
|
|
68
|
+
([`20f8178`](https://github.com/dimanu-py/instant-python/commit/20f8178f398b5db6b8cb7f48f12fc1a4143fe1b8))
|
|
69
|
+
|
|
70
|
+
- **initialize**: Rename read_from_file method to read to not expose implementation details on the
|
|
71
|
+
interface
|
|
72
|
+
([`2aa94f4`](https://github.com/dimanu-py/instant-python/commit/2aa94f44835122421eaa8af3303c76addf30b1b0))
|
|
73
|
+
|
|
74
|
+
- **shared**: Modify ApplicationError to not be abstract class so it can be instantiated as a
|
|
75
|
+
general app error
|
|
76
|
+
([`da086de`](https://github.com/dimanu-py/instant-python/commit/da086def1d643fed11b3ee7005435b6d45bea40c))
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
## v0.12.1 (2025-10-23)
|
|
80
|
+
|
|
81
|
+
### 🪲 Bug Fixes
|
|
82
|
+
|
|
83
|
+
- **templates**: Create github issues templates folder with correct name
|
|
84
|
+
([`751e58f`](https://github.com/dimanu-py/instant-python/commit/751e58fa2ffd637e7984e4c2040616deb300f2f8))
|
|
85
|
+
|
|
86
|
+
|
|
5
87
|
## v0.12.0 (2025-10-23)
|
|
6
88
|
|
|
7
89
|
### ✨ Features
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: instant-python
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.13.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/
|
{instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/domain/config_parser.py
RENAMED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
from abc import ABC, abstractmethod
|
|
2
|
+
from typing import Union
|
|
2
3
|
|
|
3
4
|
from instant_python.config.domain.configuration_schema import ConfigurationSchema
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
class ConfigParser(ABC):
|
|
7
8
|
@abstractmethod
|
|
8
|
-
def parse(self, content: dict[str, dict]) -> ConfigurationSchema:
|
|
9
|
+
def parse(self, content: dict[str, dict], custom_config_path: Union[str, None] = None) -> ConfigurationSchema:
|
|
9
10
|
raise NotImplementedError
|
{instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/domain/git_configuration.py
RENAMED
|
@@ -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
|
|
{instant_python-0.12.0 → instant_python-0.13.0}/instant_python/config/infra/parser/parser.py
RENAMED
|
@@ -20,18 +20,28 @@ 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]) -> ConfigurationSchema:
|
|
23
|
+
def parse(self, content: dict[str, dict], custom_config_path: Union[str, None] = None) -> ConfigurationSchema:
|
|
24
24
|
self._ensure_configuration_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
|
+
ConfigurationSchema(
|
|
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 ConfigurationSchema.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
47
|
def _parse_general_section(self, fields: dict[str, str]) -> GeneralConfiguration:
|
|
@@ -13,12 +13,21 @@ class PdmDependencyManager(DependencyManager):
|
|
|
13
13
|
|
|
14
14
|
def setup_environment(self, python_version: str, dependencies: list[DependencyConfiguration]) -> None:
|
|
15
15
|
try:
|
|
16
|
-
self.
|
|
16
|
+
if self._pdm_is_not_installed():
|
|
17
|
+
self._install()
|
|
17
18
|
self._install_python(python_version)
|
|
18
19
|
self._install_dependencies(dependencies)
|
|
19
20
|
except subprocess.CalledProcessError as error:
|
|
20
21
|
raise CommandExecutionError(exit_code=error.returncode, stderr_output=error.stderr)
|
|
21
22
|
|
|
23
|
+
def _pdm_is_not_installed(self) -> bool:
|
|
24
|
+
try:
|
|
25
|
+
self._run_command(f"{self._pdm} --version")
|
|
26
|
+
print(">>> pdm is already installed, skipping installation")
|
|
27
|
+
return False
|
|
28
|
+
except subprocess.CalledProcessError:
|
|
29
|
+
return True
|
|
30
|
+
|
|
22
31
|
def _install(self) -> None:
|
|
23
32
|
print(">>> Installing pdm...")
|
|
24
33
|
self._run_command(command=self._get_installation_command_based_on_os())
|
|
@@ -13,7 +13,8 @@ class UvDependencyManager(DependencyManager):
|
|
|
13
13
|
|
|
14
14
|
def setup_environment(self, python_version: str, dependencies: list[DependencyConfiguration]) -> None:
|
|
15
15
|
try:
|
|
16
|
-
self.
|
|
16
|
+
if self._uv_is_not_installed():
|
|
17
|
+
self._install()
|
|
17
18
|
self._install_python(python_version)
|
|
18
19
|
self._install_dependencies(dependencies)
|
|
19
20
|
except subprocess.CalledProcessError as error:
|
|
@@ -66,3 +67,11 @@ class UvDependencyManager(DependencyManager):
|
|
|
66
67
|
|
|
67
68
|
def _create_virtual_environment(self) -> None:
|
|
68
69
|
self._run_command(f"{self._uv} sync")
|
|
70
|
+
|
|
71
|
+
def _uv_is_not_installed(self) -> bool:
|
|
72
|
+
try:
|
|
73
|
+
self._run_command(f"{self._uv} --version")
|
|
74
|
+
print(">>> uv is already installed, skipping installation")
|
|
75
|
+
return False
|
|
76
|
+
except subprocess.CalledProcessError:
|
|
77
|
+
return True
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from instant_python.config.domain.config_parser import ConfigParser
|
|
2
|
+
from instant_python.config.domain.configuration_schema import ConfigurationSchema
|
|
3
|
+
from instant_python.initialize.domain.configuration_repository import ConfigurationRepository
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class ConfigReader:
|
|
7
|
+
def __init__(self, repository: ConfigurationRepository, parser: ConfigParser) -> None:
|
|
8
|
+
self._repository = repository
|
|
9
|
+
self._parser = parser
|
|
10
|
+
|
|
11
|
+
def execute(self, config_file_path: str) -> ConfigurationSchema:
|
|
12
|
+
raw_config = self._repository.read(config_file_path)
|
|
13
|
+
configuration = self._parser.parse(raw_config, config_file_path)
|
|
14
|
+
return configuration
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import typer
|
|
2
2
|
|
|
3
|
-
from instant_python.
|
|
3
|
+
from instant_python.config.infra.parser.parser import Parser
|
|
4
4
|
from instant_python.dependency_manager.dependency_manager_factory import DependencyManagerFactory
|
|
5
5
|
from instant_python.formatter.project_formatter import ProjectFormatter
|
|
6
6
|
from instant_python.git.git_configurer import GitConfigurer
|
|
7
|
+
from instant_python.initialize.application.config_reader import ConfigReader
|
|
8
|
+
from instant_python.initialize.infra.configuration_repository import YamlConfigurationRepository
|
|
7
9
|
from instant_python.project_creator.file_system import FileSystem
|
|
8
10
|
from instant_python.render.custom_project_renderer import CustomProjectRenderer
|
|
9
11
|
from instant_python.render.jinja_environment import JinjaEnvironment
|
|
@@ -17,7 +19,11 @@ def create_new_project(
|
|
|
17
19
|
config_file: str = typer.Option("ipy.yml", "--config", "-c", help="Path to yml configuration file"),
|
|
18
20
|
template: str | None = typer.Option(None, "--template", "-t", help="Path to custom template file"),
|
|
19
21
|
) -> None:
|
|
20
|
-
|
|
22
|
+
config_reader = ConfigReader(
|
|
23
|
+
repository=YamlConfigurationRepository(),
|
|
24
|
+
parser=Parser(),
|
|
25
|
+
)
|
|
26
|
+
config = config_reader.execute(config_file_path=config_file)
|
|
21
27
|
environment = JinjaEnvironment(package_name="instant_python", template_directory="templates")
|
|
22
28
|
|
|
23
29
|
if template:
|
|
@@ -26,31 +32,31 @@ def create_new_project(
|
|
|
26
32
|
else:
|
|
27
33
|
project_renderer = JinjaProjectRenderer(jinja_environment=environment)
|
|
28
34
|
project_structure = project_renderer.render_project_structure(
|
|
29
|
-
context_config=
|
|
35
|
+
context_config=config,
|
|
30
36
|
template_base_dir="project_structure",
|
|
31
37
|
)
|
|
32
38
|
|
|
33
39
|
file_system = FileSystem(project_structure=project_structure)
|
|
34
40
|
file_system.write_on_disk(
|
|
35
41
|
file_renderer=environment,
|
|
36
|
-
context=
|
|
42
|
+
context=config,
|
|
37
43
|
)
|
|
38
44
|
|
|
39
45
|
dependency_manager = DependencyManagerFactory.create(
|
|
40
|
-
dependency_manager=
|
|
41
|
-
project_directory=
|
|
46
|
+
dependency_manager=config.dependency_manager,
|
|
47
|
+
project_directory=config.project_folder_name,
|
|
42
48
|
)
|
|
43
49
|
dependency_manager.setup_environment(
|
|
44
|
-
python_version=
|
|
45
|
-
dependencies=
|
|
50
|
+
python_version=config.python_version,
|
|
51
|
+
dependencies=config.dependencies,
|
|
46
52
|
)
|
|
47
53
|
|
|
48
|
-
formatter = ProjectFormatter(project_directory=
|
|
54
|
+
formatter = ProjectFormatter(project_directory=config.project_folder_name)
|
|
49
55
|
formatter.format()
|
|
50
56
|
|
|
51
|
-
|
|
52
|
-
git_configurer = GitConfigurer(project_directory=
|
|
53
|
-
git_configurer.setup_repository(
|
|
57
|
+
config.save_on_project_folder()
|
|
58
|
+
git_configurer = GitConfigurer(project_directory=config.project_folder_name)
|
|
59
|
+
git_configurer.setup_repository(config.git)
|
|
54
60
|
|
|
55
61
|
|
|
56
62
|
if __name__ == "__main__":
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
|
|
3
|
+
import yaml
|
|
4
|
+
|
|
5
|
+
from instant_python.configuration.parser.configuration_file_not_found import ConfigurationFileNotFound
|
|
6
|
+
from instant_python.initialize.domain.configuration_repository import ConfigurationRepository
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class YamlConfigurationRepository(ConfigurationRepository):
|
|
10
|
+
def read(self, path: str) -> dict:
|
|
11
|
+
try:
|
|
12
|
+
with Path(path).open("r") as file:
|
|
13
|
+
return yaml.safe_load(file)
|
|
14
|
+
except FileNotFoundError:
|
|
15
|
+
raise ConfigurationFileNotFound(path)
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from collections.abc import Callable
|
|
2
|
+
|
|
1
3
|
from jinja2 import Environment, PackageLoader
|
|
2
4
|
|
|
3
5
|
from instant_python.render.jinja_custom_filters import is_in, compute_base_path, has_dependency
|
|
@@ -11,9 +13,9 @@ class JinjaEnvironment:
|
|
|
11
13
|
lstrip_blocks=True,
|
|
12
14
|
autoescape=True,
|
|
13
15
|
)
|
|
14
|
-
self.
|
|
15
|
-
self.
|
|
16
|
-
self.
|
|
16
|
+
self._add_filter("is_in", is_in)
|
|
17
|
+
self._add_filter("compute_base_path", compute_base_path)
|
|
18
|
+
self._add_filter("has_dependency", has_dependency)
|
|
17
19
|
|
|
18
20
|
def render_template(self, name: str, context: dict[str, str] = None) -> str:
|
|
19
21
|
"""Renders a template with the given context.
|
|
@@ -27,3 +29,6 @@ class JinjaEnvironment:
|
|
|
27
29
|
"""
|
|
28
30
|
template = self._env.get_template(name)
|
|
29
31
|
return template.render(**(context or {}))
|
|
32
|
+
|
|
33
|
+
def _add_filter(self, name: str, filter_: Callable) -> None:
|
|
34
|
+
self._env.filters[name] = filter_
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "instant-python"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.13.0"
|
|
8
8
|
description = "Instant boilerplate generation for Python projects"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { file = "LICENSE" }
|
|
@@ -97,6 +97,11 @@ line-length = 120
|
|
|
97
97
|
|
|
98
98
|
[tools.pytest.ini_options]
|
|
99
99
|
testpaths = ["tests"]
|
|
100
|
+
markers = [
|
|
101
|
+
"acceptance: mark a test as an acceptance test.",
|
|
102
|
+
"integration: mark a test as an integration test.",
|
|
103
|
+
"unit: mark a test as a unit test.",
|
|
104
|
+
]
|
|
100
105
|
|
|
101
106
|
[tool.semantic_release]
|
|
102
107
|
version_toml = ["pyproject.toml:project.version"]
|
{instant_python-0.12.0 → instant_python-0.13.0}/test/config/domain/test_git_configuration.py
RENAMED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
from typing import Union
|
|
2
|
+
|
|
3
|
+
import pytest
|
|
1
4
|
from expects import expect, be_true, be_none, be_false, raise_error
|
|
2
5
|
|
|
3
6
|
from instant_python.config.domain.git_configuration import GitUserOrEmailNotPresent
|
|
@@ -19,8 +22,24 @@ class TestGitConfiguration:
|
|
|
19
22
|
expect(git_configuration.username).to(be_none)
|
|
20
23
|
expect(git_configuration.email).to(be_none)
|
|
21
24
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
@pytest.mark.parametrize(
|
|
26
|
+
"username",
|
|
27
|
+
[
|
|
28
|
+
pytest.param(None, id="username is None"),
|
|
29
|
+
pytest.param("", id="username is empty"),
|
|
30
|
+
],
|
|
31
|
+
)
|
|
32
|
+
def test_should_not_allow_to_initialize_git_if_user_is_not_present(self, username: Union[str, None]) -> None:
|
|
33
|
+
expect(lambda: GitConfigurationMother.with_parameters(username=username)).to(
|
|
34
|
+
raise_error(GitUserOrEmailNotPresent)
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
@pytest.mark.parametrize(
|
|
38
|
+
"email",
|
|
39
|
+
[
|
|
40
|
+
pytest.param(None, id="email is None"),
|
|
41
|
+
pytest.param("", id="email is empty"),
|
|
42
|
+
],
|
|
43
|
+
)
|
|
44
|
+
def test_should_not_allow_to_initialize_git_if_email_is_not_present(self, email: Union[str, None]) -> None:
|
|
26
45
|
expect(lambda: GitConfigurationMother.with_parameters(email=None)).to(raise_error(GitUserOrEmailNotPresent))
|
|
File without changes
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
from doublex import Mock, expect_call
|
|
2
|
+
from doublex_expects import have_been_satisfied
|
|
3
|
+
from expects import expect, be_none
|
|
4
|
+
|
|
5
|
+
from instant_python.config.domain.config_parser import ConfigParser
|
|
6
|
+
from instant_python.initialize.application.config_reader import ConfigReader
|
|
7
|
+
from instant_python.initialize.domain.configuration_repository import ConfigurationRepository
|
|
8
|
+
from test.config.domain.mothers.configuration_schema_mother import ConfigurationSchemaMother
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class TestConfigReader:
|
|
12
|
+
def test_should_read_existing_configuration_from_file(self) -> None:
|
|
13
|
+
configuration_repository = Mock(ConfigurationRepository)
|
|
14
|
+
configuration_parser = Mock(ConfigParser)
|
|
15
|
+
config_reader = ConfigReader(
|
|
16
|
+
repository=configuration_repository,
|
|
17
|
+
parser=configuration_parser,
|
|
18
|
+
)
|
|
19
|
+
config_file_path = "path/to/config/file.yml"
|
|
20
|
+
config = ConfigurationSchemaMother.any()
|
|
21
|
+
|
|
22
|
+
expect_call(configuration_repository).read(config_file_path).returns(config.to_primitives())
|
|
23
|
+
expect_call(configuration_parser).parse(config.to_primitives(), config_file_path).returns(config)
|
|
24
|
+
|
|
25
|
+
parsed_config = config_reader.execute(config_file_path)
|
|
26
|
+
|
|
27
|
+
expect(parsed_config).to_not(be_none)
|
|
28
|
+
expect(configuration_repository).to(have_been_satisfied)
|
|
29
|
+
expect(configuration_parser).to(have_been_satisfied)
|
|
File without changes
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
args: ('uv', 'MIT', '3.10') => {'exit_code': 0, 'errors': None}
|
|
2
|
+
args: ('uv', 'MIT', '3.11') => {'exit_code': 0, 'errors': None}
|
|
3
|
+
args: ('uv', 'MIT', '3.12') => {'exit_code': 0, 'errors': None}
|
|
4
|
+
args: ('uv', 'MIT', '3.13') => {'exit_code': 0, 'errors': None}
|
|
5
|
+
args: ('uv', 'Apache', '3.10') => {'exit_code': 0, 'errors': None}
|
|
6
|
+
args: ('uv', 'Apache', '3.11') => {'exit_code': 0, 'errors': None}
|
|
7
|
+
args: ('uv', 'Apache', '3.12') => {'exit_code': 0, 'errors': None}
|
|
8
|
+
args: ('uv', 'Apache', '3.13') => {'exit_code': 0, 'errors': None}
|
|
9
|
+
args: ('uv', 'GPL', '3.10') => {'exit_code': 0, 'errors': None}
|
|
10
|
+
args: ('uv', 'GPL', '3.11') => {'exit_code': 0, 'errors': None}
|
|
11
|
+
args: ('uv', 'GPL', '3.12') => {'exit_code': 0, 'errors': None}
|
|
12
|
+
args: ('uv', 'GPL', '3.13') => {'exit_code': 0, 'errors': None}
|
|
13
|
+
args: ('pdm', 'MIT', '3.10') => {'exit_code': 0, 'errors': None}
|
|
14
|
+
args: ('pdm', 'MIT', '3.11') => {'exit_code': 0, 'errors': None}
|
|
15
|
+
args: ('pdm', 'MIT', '3.12') => {'exit_code': 0, 'errors': None}
|
|
16
|
+
args: ('pdm', 'MIT', '3.13') => {'exit_code': 0, 'errors': None}
|
|
17
|
+
args: ('pdm', 'Apache', '3.10') => {'exit_code': 0, 'errors': None}
|
|
18
|
+
args: ('pdm', 'Apache', '3.11') => {'exit_code': 0, 'errors': None}
|
|
19
|
+
args: ('pdm', 'Apache', '3.12') => {'exit_code': 0, 'errors': None}
|
|
20
|
+
args: ('pdm', 'Apache', '3.13') => {'exit_code': 0, 'errors': None}
|
|
21
|
+
args: ('pdm', 'GPL', '3.10') => {'exit_code': 0, 'errors': None}
|
|
22
|
+
args: ('pdm', 'GPL', '3.11') => {'exit_code': 0, 'errors': None}
|
|
23
|
+
args: ('pdm', 'GPL', '3.12') => {'exit_code': 0, 'errors': None}
|
|
24
|
+
args: ('pdm', 'GPL', '3.13') => {'exit_code': 0, 'errors': None}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
args: ('domain_driven_design', 'value_objects') => {'exit_code': 0, 'errors': None}
|
|
2
|
+
args: ('domain_driven_design', 'github_actions') => {'exit_code': 0, 'errors': None}
|
|
3
|
+
args: ('domain_driven_design', 'github_issues_template') => {'exit_code': 0, 'errors': None}
|
|
4
|
+
args: ('domain_driven_design', 'makefile') => {'exit_code': 0, 'errors': None}
|
|
5
|
+
args: ('domain_driven_design', 'logger') => {'exit_code': 0, 'errors': None}
|
|
6
|
+
args: ('domain_driven_design', 'event_bus') => {'exit_code': 0, 'errors': None}
|
|
7
|
+
args: ('domain_driven_design', 'async_sqlalchemy') => {'exit_code': 0, 'errors': None}
|
|
8
|
+
args: ('domain_driven_design', 'async_alembic') => {'exit_code': 0, 'errors': None}
|
|
9
|
+
args: ('domain_driven_design', 'fastapi_application') => {'exit_code': 0, 'errors': None}
|
|
10
|
+
args: ('domain_driven_design', 'precommit_hook') => {'exit_code': 0, 'errors': None}
|
|
11
|
+
args: ('domain_driven_design', 'citation_file') => {'exit_code': 0, 'errors': None}
|
|
12
|
+
args: ('domain_driven_design', 'security_file') => {'exit_code': 0, 'errors': None}
|
|
13
|
+
args: ('clean_architecture', 'value_objects') => {'exit_code': 0, 'errors': None}
|
|
14
|
+
args: ('clean_architecture', 'github_actions') => {'exit_code': 0, 'errors': None}
|
|
15
|
+
args: ('clean_architecture', 'github_issues_template') => {'exit_code': 0, 'errors': None}
|
|
16
|
+
args: ('clean_architecture', 'makefile') => {'exit_code': 0, 'errors': None}
|
|
17
|
+
args: ('clean_architecture', 'logger') => {'exit_code': 0, 'errors': None}
|
|
18
|
+
args: ('clean_architecture', 'event_bus') => {'exit_code': 0, 'errors': None}
|
|
19
|
+
args: ('clean_architecture', 'async_sqlalchemy') => {'exit_code': 0, 'errors': None}
|
|
20
|
+
args: ('clean_architecture', 'async_alembic') => {'exit_code': 0, 'errors': None}
|
|
21
|
+
args: ('clean_architecture', 'fastapi_application') => {'exit_code': 0, 'errors': None}
|
|
22
|
+
args: ('clean_architecture', 'precommit_hook') => {'exit_code': 0, 'errors': None}
|
|
23
|
+
args: ('clean_architecture', 'citation_file') => {'exit_code': 0, 'errors': None}
|
|
24
|
+
args: ('clean_architecture', 'security_file') => {'exit_code': 0, 'errors': None}
|
|
25
|
+
args: ('standard_project', 'value_objects') => {'exit_code': 0, 'errors': None}
|
|
26
|
+
args: ('standard_project', 'github_actions') => {'exit_code': 0, 'errors': None}
|
|
27
|
+
args: ('standard_project', 'github_issues_template') => {'exit_code': 0, 'errors': None}
|
|
28
|
+
args: ('standard_project', 'makefile') => {'exit_code': 0, 'errors': None}
|
|
29
|
+
args: ('standard_project', 'logger') => {'exit_code': 0, 'errors': None}
|
|
30
|
+
args: ('standard_project', 'event_bus') => {'exit_code': 1, 'errors': CalledProcessError(2, 'uvx ruff format')}
|
|
31
|
+
args: ('standard_project', 'async_sqlalchemy') => {'exit_code': 0, 'errors': None}
|
|
32
|
+
args: ('standard_project', 'async_alembic') => {'exit_code': 0, 'errors': None}
|
|
33
|
+
args: ('standard_project', 'fastapi_application') => {'exit_code': 0, 'errors': None}
|
|
34
|
+
args: ('standard_project', 'precommit_hook') => {'exit_code': 0, 'errors': None}
|
|
35
|
+
args: ('standard_project', 'citation_file') => {'exit_code': 0, 'errors': None}
|
|
36
|
+
args: ('standard_project', 'security_file') => {'exit_code': 0, 'errors': None}
|
|
37
|
+
args: ('custom', 'value_objects') => {'exit_code': 1, 'errors': TemplateNotFound('project_structure/custom/main_structure.yml.j2')}
|
|
38
|
+
args: ('custom', 'github_actions') => {'exit_code': 1, 'errors': TemplateNotFound('project_structure/custom/main_structure.yml.j2')}
|
|
39
|
+
args: ('custom', 'github_issues_template') => {'exit_code': 1, 'errors': TemplateNotFound('project_structure/custom/main_structure.yml.j2')}
|
|
40
|
+
args: ('custom', 'makefile') => {'exit_code': 1, 'errors': TemplateNotFound('project_structure/custom/main_structure.yml.j2')}
|
|
41
|
+
args: ('custom', 'logger') => {'exit_code': 1, 'errors': TemplateNotFound('project_structure/custom/main_structure.yml.j2')}
|
|
42
|
+
args: ('custom', 'event_bus') => {'exit_code': 1, 'errors': TemplateNotFound('project_structure/custom/main_structure.yml.j2')}
|
|
43
|
+
args: ('custom', 'async_sqlalchemy') => {'exit_code': 1, 'errors': TemplateNotFound('project_structure/custom/main_structure.yml.j2')}
|
|
44
|
+
args: ('custom', 'async_alembic') => {'exit_code': 1, 'errors': TemplateNotFound('project_structure/custom/main_structure.yml.j2')}
|
|
45
|
+
args: ('custom', 'fastapi_application') => {'exit_code': 1, 'errors': TemplateNotFound('project_structure/custom/main_structure.yml.j2')}
|
|
46
|
+
args: ('custom', 'precommit_hook') => {'exit_code': 1, 'errors': TemplateNotFound('project_structure/custom/main_structure.yml.j2')}
|
|
47
|
+
args: ('custom', 'citation_file') => {'exit_code': 1, 'errors': TemplateNotFound('project_structure/custom/main_structure.yml.j2')}
|
|
48
|
+
args: ('custom', 'security_file') => {'exit_code': 1, 'errors': TemplateNotFound('project_structure/custom/main_structure.yml.j2')}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
args: ('uv', {'name': 'requests', 'version': 'latest', 'is_dev': False, 'group': ''}) => {'exit_code': 0, 'errors': None}
|
|
2
|
+
args: ('uv', {'name': 'pytest', 'version': '6.2.5', 'is_dev': True, 'group': 'testing'}) => {'exit_code': 0, 'errors': None}
|
|
3
|
+
args: ('pdm', {'name': 'requests', 'version': 'latest', 'is_dev': False, 'group': ''}) => {'exit_code': 0, 'errors': None}
|
|
4
|
+
args: ('pdm', {'name': 'pytest', 'version': '6.2.5', 'is_dev': True, 'group': 'testing'}) => {'exit_code': 0, 'errors': None}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
dependencies: []
|
|
2
|
+
general:
|
|
3
|
+
author: ''
|
|
4
|
+
dependency_manager: uv
|
|
5
|
+
description: Python Project Description
|
|
6
|
+
license: MIT
|
|
7
|
+
python_version: '3.10'
|
|
8
|
+
slug: python-project
|
|
9
|
+
source_name: src
|
|
10
|
+
version: 0.1.0
|
|
11
|
+
year: 2025
|
|
12
|
+
git:
|
|
13
|
+
email: johndoe@gmail.com
|
|
14
|
+
initialize: false
|
|
15
|
+
username: johndoe
|
|
16
|
+
template:
|
|
17
|
+
aggregate_name: null
|
|
18
|
+
bounded_context: null
|
|
19
|
+
built_in_features: []
|
|
20
|
+
name: standard_project
|
|
21
|
+
specify_bounded_context: false
|