instant-python 0.6.1__tar.gz → 0.6.2__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.6.1 → instant_python-0.6.2}/.github/workflows/test_lint.yml +6 -2
- {instant_python-0.6.1 → instant_python-0.6.2}/CHANGELOG.md +20 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/PKG-INFO +1 -1
- {instant_python-0.6.1 → instant_python-0.6.2}/docs/guide/command_init.md +51 -31
- {instant_python-0.6.1 → instant_python-0.6.2}/docs/home/index.md +3 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/configuration_schema.py +2 -2
- instant_python-0.6.2/instant_python/configuration/step/template_step.py +62 -0
- instant_python-0.6.1/instant_python/templates/boilerplate/github/test_lint.yml → instant_python-0.6.2/instant_python/templates/boilerplate/github/lint.yml +4 -10
- instant_python-0.6.2/instant_python/templates/boilerplate/github/test.yml +30 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/pyproject.toml +24 -1
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/scripts/makefile +16 -28
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/clean_architecture/main_structure.yml.j2 +1 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/domain_driven_design/main_structure.yml.j2 +1 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/github_action.yml.j2 +4 -1
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/logger.yml.j2 +1 -1
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/standard_project/main_structure.yml.j2 +1 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/makefile +4 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/pyproject.toml +3 -3
- {instant_python-0.6.1 → instant_python-0.6.2}/uv.lock +5 -5
- instant_python-0.6.1/instant_python/configuration/step/template_step.py +0 -63
- {instant_python-0.6.1 → instant_python-0.6.2}/.github/FUNDING.yml +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/.github/actions/python_setup/action.yml +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/.github/workflows/pages.yml +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/.github/workflows/publish.yml +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/.github/workflows/release.yml +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/.gitignore +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/.python-version +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/LICENSE +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/README.md +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/cz.yaml +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/docs/assets/favicon.svg +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/docs/assets/logo.svg +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/docs/downloads_macro.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/docs/examples/configuration.md +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/docs/examples/custom_template.md +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/docs/guide/command_config.md +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/docs/home/contributing.md +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/docs/home/getting_started.md +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/docs/home/releases.md +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/cli.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/commands/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/commands/config.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/commands/init.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/dependency/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/dependency/dependency_configuration.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/dependency/not_dev_dependency_included_in_group.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/general/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/general/general_configuration.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/general/invalid_dependency_manager_value.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/general/invalid_license_value.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/general/invalid_python_version_value.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/git/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/git/git_configuration.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/git/git_user_or_email_not_present.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/parser/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/parser/config_key_not_present.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/parser/configuration_file_not_found.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/parser/empty_configuration_not_allowed.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/parser/missing_mandatory_fields.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/parser/parser.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/question/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/question/boolean_question.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/question/choice_question.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/question/conditional_question.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/question/free_text_question.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/question/multiple_choice_question.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/question/question.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/question/questionary.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/question_wizard.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/step/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/step/dependencies_step.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/step/general_step.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/step/git_step.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/step/steps.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/template/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/template/bounded_context_not_applicable.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/template/bounded_context_not_especified.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/template/invalid_built_in_features_values.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/template/invalid_template_value.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/template/template_configuration.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/dependency_manager/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/dependency_manager/command_execution_error.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/dependency_manager/dependency_manager.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/dependency_manager/dependency_manager_factory.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/dependency_manager/pdm_dependency_manager.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/dependency_manager/unknown_dependency_manager_error.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/dependency_manager/uv_dependency_manager.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/git/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/git/git_configurer.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/instant_python_typer.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/project_creator/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/project_creator/directory.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/project_creator/file.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/project_creator/file_has_not_been_created.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/project_creator/file_system.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/project_creator/node.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/project_creator/unknown_node_typer_error.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/render/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/render/custom_project_renderer.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/render/jinja_custom_filters.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/render/jinja_environment.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/render/jinja_project_renderer.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/render/template_file_not_found_error.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/render/unknown_template_error.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/shared/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/shared/application_error.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/shared/error_types.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/shared/supported_built_in_features.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/shared/supported_licenses.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/shared/supported_managers.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/shared/supported_python_versions.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/shared/supported_templates.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/.gitignore +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/.pre-commit-config.yml +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/.python-version +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/LICENSE +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/README.md +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/aggregate_root.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/domain_event.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/domain_event_json_deserializer.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/domain_event_json_serializer.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/domain_event_subscriber.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/event_bus.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/exchange_type.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/mock_event_bus.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/rabbit_mq_configurer.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/rabbit_mq_connection.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/rabbit_mq_consumer.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/rabbit_mq_event_bus.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/rabbit_mq_queue_formatter.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/event_bus/rabbit_mq_settings.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/exceptions/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/exceptions/domain_error.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/exceptions/domain_event_type_not_found_error.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/exceptions/incorrect_value_type_error.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/exceptions/invalid_id_format_error.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/exceptions/invalid_negative_value_error.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/exceptions/rabbit_mq_connection_not_established_error.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/exceptions/required_value_error.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/fastapi/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/fastapi/application.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/fastapi/http_response.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/fastapi/lifespan.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/fastapi/status_code.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/github/action.yml +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/logger/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/logger/json_formatter.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/logger/logger.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/mypy.ini +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/alembic_migrator.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/async/README.md +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/async/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/async/alembic.ini +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/async/async_engine_fixture.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/async/env.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/async/models_metadata.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/async/postgres_settings.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/async/script.py.mako +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/async/sqlalchemy_repository.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/base.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/synchronous/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/synchronous/session_maker.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/persistence/synchronous/sqlalchemy_repository.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/pytest.ini +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/random_generator.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/scripts/add_dependency.sh +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/scripts/create_aggregate.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/scripts/insert_template.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/scripts/integration.sh +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/scripts/local_setup.sh +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/scripts/post-merge +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/scripts/pre-commit +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/scripts/pre-push +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/scripts/remove_dependency.sh +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/scripts/unit.sh +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/value_object/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/value_object/int_value_object.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/value_object/string_value_object.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/value_object/uuid.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/value_object/value_object.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/alembic_migrator.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/async_alembic.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/async_sqlalchemy.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/clean_architecture/source.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/clean_architecture/test.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/domain_driven_design/bounded_context.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/domain_driven_design/source.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/domain_driven_design/test.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/event_bus_domain.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/event_bus_infra.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/fastapi_app.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/fastapi_infra.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/gitignore.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/license.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/macros.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/makefile.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/mypy.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/pre_commit.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/pyproject.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/pytest.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/python_version.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/readme.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/standard_project/source.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/standard_project/test.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/synchronous_sqlalchemy.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/project_structure/value_objects.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/mkdocs.yml +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/mypy.ini +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/scripts/add_dependency.sh +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/scripts/remove_dependency.sh +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/dependency/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/dependency/dependency_configuration_mother.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/dependency/test_dependency_configuration.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/general/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/general/general_configuration_mother.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/general/test_general_configuration.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/git/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/git/git_configuration_mother.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/git/test_git_configuration.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/parser/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/parser/approvaltests_config.json +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/parser/approved_files/TestParser.test_should_parse_configuration.approved.txt +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/parser/resources/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/parser/resources/config.yml +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/parser/resources/empty_config.yml +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/parser/resources/missing_dependencies_fields_config.yml +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/parser/resources/missing_general_fields_config.yml +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/parser/resources/missing_git_fields_config.yml +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/parser/resources/missing_keys_config.yml +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/parser/resources/missing_template_fields_config.yml +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/parser/test_parser.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/question/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/question/test_boolean_question.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/question/test_choice_question.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/question/test_free_text_question.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/question/test_multiple_choice_question.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/template/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/template/template_configuration_mother.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/configuration/template/test_template_configuration.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/dependency_manager/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/dependency_manager/mock_pdm_dependency_manager.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/dependency_manager/mock_uv_dependency_manager.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/dependency_manager/test_pdm_dependency_manager.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/dependency_manager/test_uv_dependency_manager.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/git/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/git/mock_git_configurer.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/git/test_git_configurer.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/project_creator/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/project_creator/approvaltests_config.json +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/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.6.1 → instant_python-0.6.2}/test/project_creator/approved_files/TestFileSystem.test_should_create_file_system_in_disk.rendered_project_structure.json.approved.txt +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/project_creator/approved_files/TestFileSystem.test_should_create_folders_and_files.approved.txt +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/project_creator/approved_files/TestFileSystem.test_should_generate_file_system_tree.approved.txt +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/project_creator/directory_mother.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/project_creator/resources/boilerplate/exceptions/domain_error.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/project_creator/resources/boilerplate/exceptions/domain_error_simple.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/project_creator/resources/clean_architecture/main_structure.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/project_creator/resources/config.yml +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/project_creator/resources/rendered_custom_project_structure.json +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/project_creator/resources/rendered_project_structure.json +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/project_creator/test_directory.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/project_creator/test_file.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/project_creator/test_file_system.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/random_generator.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/render/__init__.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/render/approvaltests_config.json +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/render/approved_files/TestCustomProjectRenderer.test_should_render_custom_template.approved.txt +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.clean_architecture_config.yml.approved.txt +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.domain_driven_design_config.yml.approved.txt +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.received.txt +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.standard_project_with_dependency_config.yml.approved.txt +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/render/approved_files/TestJinjaProjectRenderer.test_should_render_template_for.standard_project_with_git_config.yml.approved.txt +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/render/resources/clean_architecture/main_structure.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/render/resources/clean_architecture_config.yml +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/render/resources/custom_template.yml +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/render/resources/domain_driven_design/main_structure.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/render/resources/domain_driven_design_config.yml +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/render/resources/standard_project/main_structure.yml.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/render/resources/standard_project_with_dependency_config.yml +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/render/resources/standard_project_with_git_config.yml +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/render/resources/test_template.j2 +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/render/test_custom_project_renderer.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/render/test_jinja_environment.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/test/render/test_jinja_project_renderer.py +0 -0
- {instant_python-0.6.1 → instant_python-0.6.2}/tox.ini +0 -0
|
@@ -28,7 +28,9 @@ jobs:
|
|
|
28
28
|
- name: Auto fix lint errors
|
|
29
29
|
id: fix_lint
|
|
30
30
|
if: ${{ steps.check_lint.outcome == 'failure' }}
|
|
31
|
-
run:
|
|
31
|
+
run: |
|
|
32
|
+
git pull --rebase origin main
|
|
33
|
+
uvx ruff check --fix --exclude "instant_python/templates,instant_python/templates" instant_python test
|
|
32
34
|
- name: Commit lint fixes
|
|
33
35
|
if: ${{ steps.fix_lint.outcome == 'success' }}
|
|
34
36
|
run: |
|
|
@@ -65,7 +67,9 @@ jobs:
|
|
|
65
67
|
- name: Auto format code
|
|
66
68
|
id: format_code
|
|
67
69
|
if: ${{ steps.check_format.outcome == 'failure' }}
|
|
68
|
-
run:
|
|
70
|
+
run: |
|
|
71
|
+
git pull --rebase origin main
|
|
72
|
+
uvx ruff format --exclude "instant_python/templates,instant_python/templates" instant_python test
|
|
69
73
|
- name: Commit formatted code
|
|
70
74
|
if: ${{ steps.format_code.outcome == 'success' }}
|
|
71
75
|
run: |
|
|
@@ -1,3 +1,23 @@
|
|
|
1
|
+
## 0.6.2 (2025-06-30)
|
|
2
|
+
|
|
3
|
+
### 🐛 Bug Fixes
|
|
4
|
+
|
|
5
|
+
- **configuration**: ask built in template question only if selected template is not custom
|
|
6
|
+
- **templates**: use valid checkout action in test_lint.yml github action template
|
|
7
|
+
- **templates**: correct test path folder in makefile commands
|
|
8
|
+
- **templates**: rename _log_ folder that gets created when logger built in feature is selected to _logger_ to avoid git ignore its content
|
|
9
|
+
- **templates**: include faker library by default when template is not custom
|
|
10
|
+
- **templates**: include basic dependencies for makefile when is selected in built in features
|
|
11
|
+
|
|
12
|
+
### ♻️ Code Refactoring
|
|
13
|
+
|
|
14
|
+
- **templates**: separate template github action in two different workflows, one for test and one for linting and checks
|
|
15
|
+
- **templates**: include makefile by default if github actions built in feature has been selected to be able to reuse its commands
|
|
16
|
+
- **templates**: remove test execution in parallel by default in makefile template
|
|
17
|
+
- **templates**: remove unit and integration commands from makefile
|
|
18
|
+
- **templates**: remove insert_templates command from makefile template
|
|
19
|
+
- **configuration**: do not use Self typing to ensure compatibility with older python versions
|
|
20
|
+
|
|
1
21
|
## 0.6.1 (2025-06-27)
|
|
2
22
|
|
|
3
23
|
### 🐛 Bug Fixes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: instant-python
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.2
|
|
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/
|
|
@@ -8,13 +8,17 @@ ipy init
|
|
|
8
8
|
|
|
9
9
|
By default `instant-python` will look for **ipy.yml** in the current directory. A different file can be provided with `--config` or `-c` flags.
|
|
10
10
|
|
|
11
|
-
Additionally, a custom template for your project structure can be used, you tell `ipy` to use that
|
|
12
|
-
template with the `--template` or `-t` flag.
|
|
11
|
+
Additionally, a [custom template](#using-custom-template) for your project structure can be used, you tell `ipy` to use that
|
|
12
|
+
template with the `--template` or `-t` flag and providing the path to the template file.
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
15
|
ipy init -t /path/to/template.yml
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
+
!!! important
|
|
19
|
+
When using a [custom template](#using-custom-template), the possibility of using [out-of-the-box implementations](#out-of-the-box-implementations)
|
|
20
|
+
is not available. The custom template will only create the folder structure and files defined in it.
|
|
21
|
+
|
|
18
22
|
## Overview
|
|
19
23
|
|
|
20
24
|
The command performs the following steps:
|
|
@@ -119,6 +123,9 @@ that will help you to start your project.
|
|
|
119
123
|
them in the same way or that they are the best way to implement them. You can use them as a starting point
|
|
120
124
|
and iterate them as you need.
|
|
121
125
|
|
|
126
|
+
!!! warning
|
|
127
|
+
These implementations are only available when using one of the [default templates](#default-templates).
|
|
128
|
+
|
|
122
129
|
### Value objects and exceptions
|
|
123
130
|
|
|
124
131
|
Value objects are a common pattern to encapsulate primitives and encapsulate domain logic. If
|
|
@@ -257,44 +264,53 @@ some common exceptions that you can use in your project:
|
|
|
257
264
|
super().__init__(message=self._message, error_type=self._type)
|
|
258
265
|
```
|
|
259
266
|
|
|
260
|
-
###
|
|
267
|
+
### Makefile
|
|
261
268
|
|
|
262
|
-
A
|
|
269
|
+
A Makefile is a common tool to run tasks in your project. This feature is specially useful when automating tasks and
|
|
270
|
+
avoid remembering all the commands. The default Makefile will include the following commands:
|
|
263
271
|
|
|
264
|
-
|
|
265
|
-
|
|
272
|
+
| Command | Description |
|
|
273
|
+
|-------------------|------------------------------------------|
|
|
274
|
+
| `make help` | Show available commands |
|
|
275
|
+
| `make test` | Run all tests |
|
|
276
|
+
| `make unit` | Run all unit tests |
|
|
277
|
+
| `make integration` | Run all integration tests |
|
|
278
|
+
| `make acceptance` | Run all acceptance tests |
|
|
279
|
+
| `make coverage` | Run coverage tests |
|
|
280
|
+
| `make install` | Install all dependencies |
|
|
281
|
+
| `make update` | Update all dependencies |
|
|
282
|
+
| `make add-dep` | Add a new dependency |
|
|
283
|
+
| `make remove-dep` | Remove a dependency |
|
|
284
|
+
| `make check-typing` | Runs type checker |
|
|
285
|
+
| `make check-lint` | Checks lint code with Ruff |
|
|
286
|
+
| `make lint` | Fixes lint errors code with Ruff |
|
|
287
|
+
| `make check-format` | Checks format code with Ruff |
|
|
288
|
+
| `make format` | Format code with Ruff |
|
|
289
|
+
| `make local-setup` | Set up the local development environment |
|
|
290
|
+
| `make show` | Show all installed dependencies |
|
|
291
|
+
| `make search` | Show details of a specific package |
|
|
292
|
+
|
|
293
|
+
!!! info
|
|
294
|
+
The commands `unit`, `integration` and `acceptance` are defined based on the assumption that you will mark your tests with
|
|
295
|
+
the `@pytest.mark.unit`, `@pytest.mark.integration` and `@pytest.mark.acceptance` decorators.
|
|
296
|
+
If this is not your case, you change the commands as needed in the Makefile to match your test structure.
|
|
297
|
+
|
|
298
|
+
### GitHub actions and workflows
|
|
266
299
|
|
|
267
300
|
!!! info
|
|
268
301
|
When selecting this feature, by default, the library will include `mypy` as a type checker, `ruff` as a linter and formatter, and
|
|
269
302
|
`pytest` as a test runner. If you want to use different tools, you can change them later in the workflow file.
|
|
270
303
|
|
|
271
|
-
|
|
304
|
+
A common feature in projects is to have a CI/CD pipeline that will run some tasks. This option will include the following:
|
|
272
305
|
|
|
273
|
-
A
|
|
274
|
-
|
|
306
|
+
- A GitHub action that will set up your Python environment in your pipeline using the dependency manager you selected.
|
|
307
|
+
- A workflow that will execute all lint, type and code formatting checks.
|
|
308
|
+
- A workflow that will run all tests in your project.
|
|
275
309
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
| `make unit` | Run unit tests for changed files |
|
|
281
|
-
| `make all-unit` | Run all unit tests |
|
|
282
|
-
| `make integration` | Run integration tests for changed files |
|
|
283
|
-
| `make all-integration` | Run all integration tests |
|
|
284
|
-
| `make all-acceptance` | Run all acceptance tests |
|
|
285
|
-
| `make coverage` | Run coverage tests |
|
|
286
|
-
| `make install` | Install all dependencies |
|
|
287
|
-
| `make update` | Update all dependencies |
|
|
288
|
-
| `make add-dep` | Add a new dependency |
|
|
289
|
-
| `make remove-dep` | Remove a dependency |
|
|
290
|
-
| `make check-typing` | Runs type checker |
|
|
291
|
-
| `make check-lint` | Checks lint code with Ruff |
|
|
292
|
-
| `make lint` | Fixes lint errors code with Ruff |
|
|
293
|
-
| `make check-format` | Checks format code with Ruff |
|
|
294
|
-
| `make format` | Format code with Ruff |
|
|
295
|
-
| `make local-setup` | Set up the local development environment |
|
|
296
|
-
| `make show` | Show all installed dependencies |
|
|
297
|
-
| `make search` | Show details of a specific package |
|
|
310
|
+
!!! info
|
|
311
|
+
The test workflow will use `unit`, `integration` and `acceptance` make commands presented in the [previous section](#makefile).
|
|
312
|
+
These commands are defined based on the assumption that you will mark your tests with the `@pytest.mark.unit`, `@pytest.mark.integration` and `@pytest.mark.acceptance` decorators.
|
|
313
|
+
If this is not your case, you change the commands in the workflow file to match your test structure.
|
|
298
314
|
|
|
299
315
|
### Logger
|
|
300
316
|
|
|
@@ -348,6 +364,10 @@ will set up a decoupled implementation of an event bus using RabbitMQ. This impl
|
|
|
348
364
|
|
|
349
365
|
You can create a new project using a custom template instead of one of the [default templates](#default-templates).
|
|
350
366
|
|
|
367
|
+
!!! important
|
|
368
|
+
When using a custom template, the possibility of using [out-of-the-box implementations](#out-of-the-box-implementations)
|
|
369
|
+
is not available.
|
|
370
|
+
|
|
351
371
|
This custom template must follow a specific structure and syntax to be able to generate the project correctly.
|
|
352
372
|
|
|
353
373
|
- You must use a yml file to define the folder structure.
|
|
@@ -43,6 +43,9 @@ For detailed instructions and examples, please refer to the [Commands documentat
|
|
|
43
43
|
|
|
44
44
|
## Installation
|
|
45
45
|
|
|
46
|
+
!!! important
|
|
47
|
+
For the moment, `instant-python` is only supported in Unix-like systems. Windows support is coming soon.
|
|
48
|
+
|
|
46
49
|
The latest version of `instant-python` can be installed from PyPI:
|
|
47
50
|
|
|
48
51
|
```bash
|
{instant_python-0.6.1 → instant_python-0.6.2}/instant_python/configuration/configuration_schema.py
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import shutil
|
|
2
2
|
from dataclasses import dataclass, field
|
|
3
3
|
from pathlib import Path
|
|
4
|
-
from typing import TypedDict,
|
|
4
|
+
from typing import TypedDict, Union
|
|
5
5
|
|
|
6
6
|
import yaml
|
|
7
7
|
|
|
@@ -33,7 +33,7 @@ class ConfigurationSchema:
|
|
|
33
33
|
dependencies: list[DependencyConfiguration],
|
|
34
34
|
template: TemplateConfiguration,
|
|
35
35
|
git: GitConfiguration,
|
|
36
|
-
) ->
|
|
36
|
+
) -> "ConfigurationSchema":
|
|
37
37
|
return cls(
|
|
38
38
|
general=general,
|
|
39
39
|
dependencies=dependencies,
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
from typing import Union
|
|
2
|
+
|
|
3
|
+
from instant_python.configuration.question.boolean_question import BooleanQuestion
|
|
4
|
+
from instant_python.configuration.question.choice_question import ChoiceQuestion
|
|
5
|
+
from instant_python.configuration.question.conditional_question import ConditionalQuestion
|
|
6
|
+
from instant_python.configuration.question.free_text_question import FreeTextQuestion
|
|
7
|
+
from instant_python.configuration.question.multiple_choice_question import MultipleChoiceQuestion
|
|
8
|
+
from instant_python.configuration.question.questionary import Questionary
|
|
9
|
+
from instant_python.configuration.step.steps import Step
|
|
10
|
+
from instant_python.shared.supported_built_in_features import SupportedBuiltInFeatures
|
|
11
|
+
from instant_python.shared.supported_templates import SupportedTemplates
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class TemplateStep(Step):
|
|
15
|
+
def __init__(self, questionary: Questionary) -> None:
|
|
16
|
+
super().__init__(questionary)
|
|
17
|
+
self._built_in_features_question = MultipleChoiceQuestion(
|
|
18
|
+
key="built_in_features",
|
|
19
|
+
message="Select the built-in features you want to include",
|
|
20
|
+
options=SupportedBuiltInFeatures.get_supported_built_in_features(),
|
|
21
|
+
questionary=self._questionary,
|
|
22
|
+
)
|
|
23
|
+
self._template_question = ConditionalQuestion(
|
|
24
|
+
base_question=ChoiceQuestion(
|
|
25
|
+
key="name",
|
|
26
|
+
message="Select a template",
|
|
27
|
+
options=SupportedTemplates.get_supported_templates(),
|
|
28
|
+
questionary=self._questionary,
|
|
29
|
+
),
|
|
30
|
+
subquestions=ConditionalQuestion(
|
|
31
|
+
base_question=BooleanQuestion(
|
|
32
|
+
key="specify_bounded_context",
|
|
33
|
+
message="Do you want to specify your first bounded context?",
|
|
34
|
+
default=True,
|
|
35
|
+
questionary=self._questionary,
|
|
36
|
+
),
|
|
37
|
+
subquestions=[
|
|
38
|
+
FreeTextQuestion(
|
|
39
|
+
key="bounded_context",
|
|
40
|
+
message="Enter the bounded context name",
|
|
41
|
+
default="backoffice",
|
|
42
|
+
questionary=self._questionary,
|
|
43
|
+
),
|
|
44
|
+
FreeTextQuestion(
|
|
45
|
+
key="aggregate_name",
|
|
46
|
+
message="Enter the aggregate name",
|
|
47
|
+
default="user",
|
|
48
|
+
questionary=self._questionary,
|
|
49
|
+
),
|
|
50
|
+
],
|
|
51
|
+
condition=True,
|
|
52
|
+
),
|
|
53
|
+
condition=SupportedTemplates.DDD,
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
def run(self) -> dict[str, dict[str, Union[str, list[str]]]]:
|
|
57
|
+
answers = self._template_question.ask()
|
|
58
|
+
|
|
59
|
+
if answers["name"] != SupportedTemplates.CUSTOM:
|
|
60
|
+
answers.update(self._built_in_features_question.ask())
|
|
61
|
+
|
|
62
|
+
return {"template": answers}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
name:
|
|
1
|
+
name: Run lint, format and type checks
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
@@ -13,24 +13,18 @@ jobs:
|
|
|
13
13
|
lint:
|
|
14
14
|
runs-on: ubuntu-latest
|
|
15
15
|
steps:
|
|
16
|
-
- uses: actions/checkout@
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
17
|
- uses: ./.github/actions/python_setup
|
|
18
18
|
- run: make check-lint
|
|
19
19
|
format:
|
|
20
20
|
runs-on: ubuntu-latest
|
|
21
21
|
steps:
|
|
22
|
-
- uses: actions/checkout@
|
|
22
|
+
- uses: actions/checkout@v4
|
|
23
23
|
- uses: ./.github/actions/python_setup
|
|
24
24
|
- run: make check-format
|
|
25
25
|
typing:
|
|
26
26
|
runs-on: ubuntu-latest
|
|
27
27
|
steps:
|
|
28
|
-
- uses: actions/checkout@
|
|
28
|
+
- uses: actions/checkout@v4
|
|
29
29
|
- uses: ./.github/actions/python_setup
|
|
30
30
|
- run: make check-typing
|
|
31
|
-
test:
|
|
32
|
-
runs-on: ubuntu-latest
|
|
33
|
-
steps:
|
|
34
|
-
- uses: actions/checkout@v5
|
|
35
|
-
- uses: ./.github/actions/python_setup
|
|
36
|
-
- run: make test
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
name: Run tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
pull_request:
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
unit:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
- uses: ./.github/actions/python_setup
|
|
18
|
+
- run: make unit
|
|
19
|
+
integration:
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
steps:
|
|
22
|
+
- uses: actions/checkout@v4
|
|
23
|
+
- uses: ./.github/actions/python_setup
|
|
24
|
+
- run: make integration
|
|
25
|
+
acceptance:
|
|
26
|
+
runs-on: ubuntu-latest
|
|
27
|
+
steps:
|
|
28
|
+
- uses: actions/checkout@v4
|
|
29
|
+
- uses: ./.github/actions/python_setup
|
|
30
|
+
- run: make acceptance
|
{instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/pyproject.toml
RENAMED
|
@@ -28,13 +28,36 @@ license = { file = "LICENSE" }
|
|
|
28
28
|
distribution = false
|
|
29
29
|
{% endif %}
|
|
30
30
|
|
|
31
|
-
{% if "github_actions"
|
|
31
|
+
{% if ["github_actions", "makefile"] | is_in(template.built_in_features) or dependencies | has_dependency("pytest") and template.name != template_types.CUSTOM %}
|
|
32
32
|
[dependency-groups]
|
|
33
|
+
{% if ["github_actions", "makefile"] | is_in(template.built_in_features) and dependencies | has_dependency("pytest") %}
|
|
33
34
|
lint = [
|
|
34
35
|
"mypy",
|
|
35
36
|
"ruff",
|
|
36
37
|
]
|
|
37
38
|
test = [
|
|
39
|
+
"faker",
|
|
38
40
|
"pytest",
|
|
41
|
+
"pytest-asyncio",
|
|
39
42
|
]
|
|
43
|
+
{% elif ["github_actions", "makefile"] | is_in(template.built_in_features) %}
|
|
44
|
+
lint = [
|
|
45
|
+
"mypy",
|
|
46
|
+
"ruff",
|
|
47
|
+
]
|
|
48
|
+
test = [
|
|
49
|
+
"faker",
|
|
50
|
+
"pytest",
|
|
51
|
+
"pytest-asyncio",
|
|
52
|
+
]
|
|
53
|
+
{% elif dependencies | has_dependency("pytest") %}
|
|
54
|
+
test = [
|
|
55
|
+
"faker",
|
|
56
|
+
"pytest-asyncio",
|
|
57
|
+
]
|
|
58
|
+
{% elif template.name != template_types.CUSTOM %}
|
|
59
|
+
test = [
|
|
60
|
+
"faker",
|
|
61
|
+
]
|
|
62
|
+
{% endif %}
|
|
40
63
|
{% endif %}
|
{instant_python-0.6.1 → instant_python-0.6.2}/instant_python/templates/boilerplate/scripts/makefile
RENAMED
|
@@ -7,31 +7,23 @@ help: ## Show this help.
|
|
|
7
7
|
|
|
8
8
|
.PHONY: test
|
|
9
9
|
test: ## Run all test.
|
|
10
|
-
@{{ general.dependency_manager }} run pytest
|
|
10
|
+
@{{ general.dependency_manager }} run pytest test -ra
|
|
11
11
|
|
|
12
12
|
.PHONY: unit
|
|
13
|
-
unit: ## Run unit test
|
|
14
|
-
@
|
|
13
|
+
unit: ## Run all unit test.
|
|
14
|
+
@{{ general.dependency_manager }} run pytest -m "unit" -ra
|
|
15
15
|
|
|
16
16
|
.PHONY: integration
|
|
17
|
-
integration: ## Run integration test
|
|
18
|
-
@scripts/tests/integration.sh
|
|
19
|
-
|
|
20
|
-
.PHONY: all-unit
|
|
21
|
-
all-unit: ## Run all unit test.
|
|
22
|
-
@{{ general.dependency_manager }} run pytest -n auto -m "unit" -ra
|
|
23
|
-
|
|
24
|
-
.PHONY: all-integration
|
|
25
|
-
all-integration: ## Run all integration test.
|
|
17
|
+
integration: ## Run all integration test.
|
|
26
18
|
@{{ general.dependency_manager }} run pytest -m "integration" -ra
|
|
27
19
|
|
|
28
|
-
.PHONY:
|
|
29
|
-
|
|
20
|
+
.PHONY: acceptance
|
|
21
|
+
acceptance: ## Run all acceptance test.
|
|
30
22
|
@{{ general.dependency_manager }} run pytest -m "acceptance" -ra
|
|
31
23
|
|
|
32
24
|
.PHONY: coverage
|
|
33
25
|
coverage: ## Run all test with coverage.
|
|
34
|
-
@{{ general.dependency_manager }} run coverage run --branch -m pytest
|
|
26
|
+
@{{ general.dependency_manager }} run coverage run --branch -m pytest test
|
|
35
27
|
@{{ general.dependency_manager }} run coverage html
|
|
36
28
|
@$(BROWSER) htmlcov/index.html
|
|
37
29
|
|
|
@@ -71,33 +63,33 @@ check-typing: ## Run mypy type checking.
|
|
|
71
63
|
.PHONY: check-lint
|
|
72
64
|
check-lint: ## Run ruff linting check.
|
|
73
65
|
{% if general.dependency_manager == "pdm" %}
|
|
74
|
-
@pdm run ruff check src
|
|
66
|
+
@pdm run ruff check src test
|
|
75
67
|
{% elif general.dependency_manager == "uv" %}
|
|
76
|
-
@uvx ruff check src
|
|
68
|
+
@uvx ruff check src test
|
|
77
69
|
{% endif %}
|
|
78
70
|
|
|
79
71
|
.PHONY: lint
|
|
80
72
|
lint: ## Apply ruff linting fix.
|
|
81
73
|
{% if general.dependency_manager == "pdm" %}
|
|
82
|
-
@pdm run ruff check --fix src
|
|
74
|
+
@pdm run ruff check --fix src test
|
|
83
75
|
{% elif general.dependency_manager == "uv" %}
|
|
84
|
-
@uvx ruff check --fix src
|
|
76
|
+
@uvx ruff check --fix src test
|
|
85
77
|
{% endif %}
|
|
86
78
|
|
|
87
79
|
.PHONY: check-format
|
|
88
80
|
check-format: ## Run ruff format check.
|
|
89
81
|
{% if general.dependency_manager == "pdm" %}
|
|
90
|
-
@pdm run ruff format --check src
|
|
82
|
+
@pdm run ruff format --check src test
|
|
91
83
|
{% elif general.dependency_manager == "uv" %}
|
|
92
|
-
@uvx ruff format --check src
|
|
84
|
+
@uvx ruff format --check src test
|
|
93
85
|
{% endif %}
|
|
94
86
|
|
|
95
87
|
.PHONY: format
|
|
96
88
|
format: ## Apply ruff format fix.
|
|
97
89
|
{% if general.dependency_manager == "pdm" %}
|
|
98
|
-
@pdm run ruff format src
|
|
90
|
+
@pdm run ruff format src test
|
|
99
91
|
{% elif general.dependency_manager == "uv" %}
|
|
100
|
-
@uvx ruff format src
|
|
92
|
+
@uvx ruff format src test
|
|
101
93
|
{% endif %}
|
|
102
94
|
|
|
103
95
|
.PHONY: pre-commit
|
|
@@ -108,11 +100,7 @@ pre-push: all-integration all-acceptance ## Run pre-push checks.
|
|
|
108
100
|
|
|
109
101
|
.PHONY: watch
|
|
110
102
|
watch: ## Run all test with every change.
|
|
111
|
-
@{{ general.dependency_manager }} run ptw --runner "pytest -n auto
|
|
112
|
-
|
|
113
|
-
.PHONY: insert-template
|
|
114
|
-
insert-template: ## Insert a template class among the existing ones.
|
|
115
|
-
@{{ general.dependency_manager }} run python -m scripts.insert_template
|
|
103
|
+
@{{ general.dependency_manager }} run ptw --runner "pytest -n auto test -ra"
|
|
116
104
|
|
|
117
105
|
.PHONY: create-aggregate
|
|
118
106
|
create-aggregate: ## Create a new aggregate inside contexts folder.
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
{{ macros.include_and_indent("project_structure/clean_architecture/test.yml.j2", 0) }}
|
|
4
4
|
{% if "github_actions" in template.built_in_features %}
|
|
5
5
|
{{ macros.include_and_indent("project_structure/github_action.yml.j2", 0) }}
|
|
6
|
+
{{ macros.include_and_indent("project_structure/makefile.yml.j2", 0) }}
|
|
6
7
|
{% endif %}
|
|
7
8
|
{% if "makefile" in template.built_in_features %}
|
|
8
9
|
{{ macros.include_and_indent("project_structure/makefile.yml.j2", 0) }}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
{{ macros.include_and_indent("project_structure/domain_driven_design/test.yml.j2", 0) }}
|
|
4
4
|
{% if "github_actions" in template.built_in_features %}
|
|
5
5
|
{{ macros.include_and_indent("project_structure/github_action.yml.j2", 0) }}
|
|
6
|
+
{{ macros.include_and_indent("project_structure/makefile.yml.j2", 0) }}
|
|
6
7
|
{% endif %}
|
|
7
8
|
{% if "makefile" in template.built_in_features %}
|
|
8
9
|
{{ macros.include_and_indent("project_structure/makefile.yml.j2", 0) }}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
{{ macros.include_and_indent("project_structure/standard_project/test.yml.j2", 0) }}
|
|
4
4
|
{% if "github_actions" in template.built_in_features %}
|
|
5
5
|
{{ macros.include_and_indent("project_structure/github_action.yml.j2", 0) }}
|
|
6
|
+
{{ macros.include_and_indent("project_structure/makefile.yml.j2", 0) }}
|
|
6
7
|
{% endif %}
|
|
7
8
|
{% if "makefile" in template.built_in_features %}
|
|
8
9
|
{{ macros.include_and_indent("project_structure/makefile.yml.j2", 0) }}
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "instant-python"
|
|
7
|
-
version = "0.6.
|
|
7
|
+
version = "0.6.2"
|
|
8
8
|
description = "Instant boilerplate generation for Python projects"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { file = "LICENSE" }
|
|
@@ -61,8 +61,6 @@ git = [
|
|
|
61
61
|
lint = [
|
|
62
62
|
"mypy>=1.16.0",
|
|
63
63
|
"ruff>=0.11.12",
|
|
64
|
-
"tox>=4.25.0",
|
|
65
|
-
"vermin>=1.6.0",
|
|
66
64
|
]
|
|
67
65
|
test = [
|
|
68
66
|
"approvaltests>=14.6.0",
|
|
@@ -73,4 +71,6 @@ test = [
|
|
|
73
71
|
"pytest>=8.3.5",
|
|
74
72
|
"pytest-sugar>=1.0.0",
|
|
75
73
|
"pytest-watch>=4.2.0",
|
|
74
|
+
"tox>=4.25.0",
|
|
75
|
+
"vermin>=1.6.0",
|
|
76
76
|
]
|
|
@@ -378,7 +378,7 @@ wheels = [
|
|
|
378
378
|
|
|
379
379
|
[[package]]
|
|
380
380
|
name = "instant-python"
|
|
381
|
-
version = "0.6.
|
|
381
|
+
version = "0.6.2"
|
|
382
382
|
source = { editable = "." }
|
|
383
383
|
dependencies = [
|
|
384
384
|
{ name = "jinja2" },
|
|
@@ -401,8 +401,6 @@ git = [
|
|
|
401
401
|
lint = [
|
|
402
402
|
{ name = "mypy" },
|
|
403
403
|
{ name = "ruff" },
|
|
404
|
-
{ name = "tox" },
|
|
405
|
-
{ name = "vermin" },
|
|
406
404
|
]
|
|
407
405
|
test = [
|
|
408
406
|
{ name = "approvaltests" },
|
|
@@ -413,6 +411,8 @@ test = [
|
|
|
413
411
|
{ name = "pytest" },
|
|
414
412
|
{ name = "pytest-sugar" },
|
|
415
413
|
{ name = "pytest-watch" },
|
|
414
|
+
{ name = "tox" },
|
|
415
|
+
{ name = "vermin" },
|
|
416
416
|
]
|
|
417
417
|
|
|
418
418
|
[package.metadata]
|
|
@@ -435,8 +435,6 @@ git = [{ name = "commitizen", specifier = ">=4.2.2" }]
|
|
|
435
435
|
lint = [
|
|
436
436
|
{ name = "mypy", specifier = ">=1.16.0" },
|
|
437
437
|
{ name = "ruff", specifier = ">=0.11.12" },
|
|
438
|
-
{ name = "tox", specifier = ">=4.25.0" },
|
|
439
|
-
{ name = "vermin", specifier = ">=1.6.0" },
|
|
440
438
|
]
|
|
441
439
|
test = [
|
|
442
440
|
{ name = "approvaltests", specifier = ">=14.6.0" },
|
|
@@ -447,6 +445,8 @@ test = [
|
|
|
447
445
|
{ name = "pytest", specifier = ">=8.3.5" },
|
|
448
446
|
{ name = "pytest-sugar", specifier = ">=1.0.0" },
|
|
449
447
|
{ name = "pytest-watch", specifier = ">=4.2.0" },
|
|
448
|
+
{ name = "tox", specifier = ">=4.25.0" },
|
|
449
|
+
{ name = "vermin", specifier = ">=1.6.0" },
|
|
450
450
|
]
|
|
451
451
|
|
|
452
452
|
[[package]]
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
from typing import Union
|
|
2
|
-
|
|
3
|
-
from instant_python.configuration.question.boolean_question import BooleanQuestion
|
|
4
|
-
from instant_python.configuration.question.choice_question import ChoiceQuestion
|
|
5
|
-
from instant_python.configuration.question.conditional_question import ConditionalQuestion
|
|
6
|
-
from instant_python.configuration.question.free_text_question import FreeTextQuestion
|
|
7
|
-
from instant_python.configuration.question.multiple_choice_question import MultipleChoiceQuestion
|
|
8
|
-
from instant_python.configuration.question.questionary import Questionary
|
|
9
|
-
from instant_python.configuration.step.steps import Step
|
|
10
|
-
from instant_python.shared.supported_built_in_features import SupportedBuiltInFeatures
|
|
11
|
-
from instant_python.shared.supported_templates import SupportedTemplates
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class TemplateStep(Step):
|
|
15
|
-
def __init__(self, questionary: Questionary) -> None:
|
|
16
|
-
super().__init__(questionary)
|
|
17
|
-
self._questions = [
|
|
18
|
-
MultipleChoiceQuestion(
|
|
19
|
-
key="built_in_features",
|
|
20
|
-
message="Select the built-in features you want to include",
|
|
21
|
-
options=SupportedBuiltInFeatures.get_supported_built_in_features(),
|
|
22
|
-
questionary=self._questionary,
|
|
23
|
-
),
|
|
24
|
-
ConditionalQuestion(
|
|
25
|
-
base_question=ChoiceQuestion(
|
|
26
|
-
key="name",
|
|
27
|
-
message="Select a template",
|
|
28
|
-
options=SupportedTemplates.get_supported_templates(),
|
|
29
|
-
questionary=self._questionary,
|
|
30
|
-
),
|
|
31
|
-
subquestions=ConditionalQuestion(
|
|
32
|
-
base_question=BooleanQuestion(
|
|
33
|
-
key="specify_bounded_context",
|
|
34
|
-
message="Do you want to specify your first bounded context?",
|
|
35
|
-
default=True,
|
|
36
|
-
questionary=self._questionary,
|
|
37
|
-
),
|
|
38
|
-
subquestions=[
|
|
39
|
-
FreeTextQuestion(
|
|
40
|
-
key="bounded_context",
|
|
41
|
-
message="Enter the bounded context name",
|
|
42
|
-
default="backoffice",
|
|
43
|
-
questionary=self._questionary,
|
|
44
|
-
),
|
|
45
|
-
FreeTextQuestion(
|
|
46
|
-
key="aggregate_name",
|
|
47
|
-
message="Enter the aggregate name",
|
|
48
|
-
default="user",
|
|
49
|
-
questionary=self._questionary,
|
|
50
|
-
),
|
|
51
|
-
],
|
|
52
|
-
condition=True,
|
|
53
|
-
),
|
|
54
|
-
condition=SupportedTemplates.DDD,
|
|
55
|
-
),
|
|
56
|
-
]
|
|
57
|
-
|
|
58
|
-
def run(self) -> dict[str, dict[str, Union[str, list[str]]]]:
|
|
59
|
-
answers = {}
|
|
60
|
-
for question in self._questions:
|
|
61
|
-
answers.update(question.ask())
|
|
62
|
-
|
|
63
|
-
return {"template": answers}
|
|
File without changes
|