codemagic-cli-tools 0.53.4__tar.gz → 0.53.5__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.
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/PKG-INFO +1 -1
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/pyproject.toml +1 -1
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/__version__.py +1 -1
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/__version__.py-e +1 -1
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/cli/__init__.py +1 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/cli/argument/__init__.py +1 -0
- codemagic_cli_tools-0.53.5/src/codemagic/cli/argument/argument_parser_builder.py +220 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/cli/argument/argument_properties.py +5 -0
- codemagic_cli_tools-0.53.5/src/codemagic/cli/argument/mutually_exclusive_groups.py +35 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/firebase_app_distribution/action_groups/releases_action_group.py +1 -1
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/firebase_app_distribution/actions/get_latest_build_version_action.py +1 -1
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/firebase_app_distribution/arguments.py +14 -3
- codemagic_cli_tools-0.53.5/src/codemagic/tools/firebase_app_distribution/firebase_app_distribution.py +88 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/firebase_app_distribution/firebase_app_distribution_action.py +1 -1
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/tools/test_firebase_app_distribution.py +4 -2
- codemagic_cli_tools-0.53.4/src/codemagic/cli/argument/argument_parser_builder.py +0 -154
- codemagic_cli_tools-0.53.4/src/codemagic/tools/firebase_app_distribution/firebase_app_distribution.py +0 -53
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/LICENSE +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/README.md +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/api_client.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/api_error.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/api_session.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/app_store_publishing/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/app_store_publishing/app_store_version_phased_releases.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/apps/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/apps/apps.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/builds/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/builds/builds.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/json_web_token_manager.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/provisioning/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/provisioning/bundle_id_capabilities.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/provisioning/bundle_ids.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/provisioning/devices.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/provisioning/profiles.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/provisioning/signing_certificates.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/resource_manager.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/testflight/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/testflight/beta_groups.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/type_declarations.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/versioning/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/versioning/app_store_version_localizations.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/versioning/app_store_version_submissions.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/versioning/app_store_versions.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/versioning/beta_app_review_submissions.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/versioning/beta_build_localizations.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/versioning/pre_release_versions.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/versioning/review_submission_items.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/app_store_connect/versioning/review_submissions.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/resources/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/resources/app.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/resources/app_store_version.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/resources/app_store_version_localization.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/resources/app_store_version_phased_release.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/resources/app_store_version_submission.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/resources/beta_app_localization.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/resources/beta_app_review_detail.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/resources/beta_app_review_submission.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/resources/beta_build_localization.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/resources/beta_group.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/resources/build.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/resources/build_beta_detail.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/resources/bundle_id.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/resources/bundle_id_capability.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/resources/device.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/resources/enums.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/resources/error_response.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/resources/pre_release_version.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/resources/profile.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/resources/resource.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/resources/review_submission.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/resources/review_submission_item.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/apple/resources/signing_certificate.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/cli/action.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/cli/action_group.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/cli/argument/action_callable.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/cli/argument/argument.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/cli/argument/argument_formatter.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/cli/argument/common_argument_types.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/cli/argument/typed_cli_argument.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/cli/cli_app.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/cli/cli_help_formatter.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/cli/cli_process.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/cli/cli_process_stream.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/cli/cli_types.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/cli/colors.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/cli/environment.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/data/jars/bundletool-all-1.13.1.jar +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/google/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/google/errors.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/google/firebase_client.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/google/google_client.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/google/resource_managers/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/google/resource_managers/mixins/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/google/resource_managers/mixins/acting_manager_mixin.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/google/resource_managers/mixins/listing_manager_mixin.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/google/resource_managers/release_manager.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/google/resource_managers/resource_manager.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/google/resources/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/google/resources/identifiers/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/google/resources/identifiers/app_identifier.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/google/resources/identifiers/resource_identifier.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/google/resources/release.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/google/resources/release_notes.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/google/resources/resource.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/google_play/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/google_play/api_client.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/google_play/api_error.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/google_play/resources/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/google_play/resources/edit.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/google_play/resources/enums.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/google_play/resources/resource.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/google_play/resources/track.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/mixins/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/mixins/path_finder.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/mixins/running_cli_app.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/mixins/str_converter.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/altool/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/altool/altool.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/altool/altool_result.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/altool/enums.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/android_signing_info.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/application_package/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/application_package/abstract_package.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/application_package/ipa.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/application_package/macos_package.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/bundle_id_detector.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/certificate.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/certificate_attributes.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/certificate_p12_exporter.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/code_sign_entitlements.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/code_signing_settings_manager.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/enums.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/export_options.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/json_serializable.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/junit/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/junit/definitions.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/junit/printer.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/keystore.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/pbx_project.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/private_key.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/provisioning_profile.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/simulator/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/simulator/core_simulator_service.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/simulator/runtime.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/simulator/simulator.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/table/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/table/line.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/table/table.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/xcode.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/xcodebuild.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/xcpretty.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/xctests/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/xctests/collector.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/xctests/converter.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/xctests/xcresult.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/models/xctests/xcresulttool.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/py.typed +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/scripts/code_signing_manager.rb +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/shell_tools/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/shell_tools/abstract_shell_tool.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/shell_tools/keytool.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/_xcode_project/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/_xcode_project/arguments.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/android_app_bundle.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/android_keystore/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/android_keystore/__main__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/android_keystore/android_keystore.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/android_keystore/argument_types.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/android_keystore/arguments.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/__main__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/abstract_base_action.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/action_group.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/action_groups/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/action_groups/app_store_version_localizations_action_group.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/action_groups/app_store_version_phased_releases_action_group.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/action_groups/app_store_version_submissions_action_group.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/action_groups/app_store_versions_action_group.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/action_groups/apps_action_group.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/action_groups/beta_app_review_submissions_action_group.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/action_groups/beta_build_localizations_action_group.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/action_groups/beta_groups_action_group.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/action_groups/builds_action_group.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/action_groups/bundle_ids_action_group.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/action_groups/certificates_action_group.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/action_groups/devices_action_group.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/action_groups/profiles_action_group.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/action_groups/review_submission_items_actions_group.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/action_groups/review_submissions_actions_group.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/actions/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/actions/fetch_signing_files_action.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/actions/latest_build_number_actions.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/actions/publish_action.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/actions/submit_to_app_store_action.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/actions/submit_to_testflight_action.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/app_store_connect.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/arguments.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/errors.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/mixins/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/mixins/resource_manager_mixin.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/mixins/signing_file_saver_mixin.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/app_store_connect/resource_printer.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/codemagic_cli_tools.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/firebase_app_distribution/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/firebase_app_distribution/__main__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/firebase_app_distribution/action_groups/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/firebase_app_distribution/action_groups/firebase_action_groups.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/firebase_app_distribution/actions/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/firebase_app_distribution/argument_types.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/firebase_app_distribution/errors.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/firebase_app_distribution/resource_printer.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/git_changelog.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/google_play/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/google_play/__main__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/google_play/action_groups/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/google_play/action_groups/google_play_action_groups.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/google_play/action_groups/tracks_action_group.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/google_play/actions/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/google_play/actions/get_latest_build_number_action.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/google_play/argument_types.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/google_play/arguments.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/google_play/errors.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/google_play/google_play.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/google_play/google_play_base_action.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/keychain.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/universal_apk_generator.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/tools/xcode_project.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/utilities/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/utilities/auditing/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/utilities/auditing/base_auditor.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/utilities/auditing/exception_auditor.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/utilities/auditing/http_request_auditor.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/utilities/backwards_file_reader.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/utilities/case_conversion.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/utilities/decorators.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/utilities/levenshtein_distance.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/utilities/log.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/utilities/versions.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/app_store_publishing/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/app_store_publishing/test_app_store_version_phased_releases.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/apps/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/apps/test_apps.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/builds/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/builds/test_builds.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/provisioning/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/provisioning/conftest.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/provisioning/test_bundle_id_capabilities.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/provisioning/test_bundle_ids.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/provisioning/test_devices.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/provisioning/test_profiles.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/provisioning/test_signing_certificates.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/resource_manager_test_base.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/test_api_client.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/test_api_session.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/test_json_web_token_manager.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/test_resource_manager.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/testflight/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/testflight/test_beta_groups.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/versioning/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/versioning/test_app_store_version_localizations.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/versioning/test_app_store_version_submissions.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/versioning/test_app_store_versions.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/versioning/test_beta_app_review_submissions.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/versioning/test_beta_build_localizations.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/versioning/test_pre_release_versions.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/versioning/test_review_submission_items.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/app_store_connect/versioning/test_review_submissions.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/conftest.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/enums/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/enums/test_capability_type.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/enums/test_certificate_type.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/enums/test_profile_type.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/mocks/app.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/mocks/app_store_version.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/mocks/app_store_version_phased_release.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/mocks/build.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/mocks/bundle_id.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/mocks/bundle_id_capability.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/mocks/certificate.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/mocks/device.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/mocks/error_response.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/mocks/error_response_entity_state_invalid.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/mocks/error_response_with_links.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/mocks/mock_resource.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/mocks/pre_release_version.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/mocks/profile.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/test_app_resource.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/test_app_store_version_phased_release_resource.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/test_app_store_version_resource.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/test_build_resource.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/test_bundle_id_capability_resource.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/test_bundle_id_resource.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/test_device_resource.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/test_error_response.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/test_pre_release_version_resource.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/test_profile_resource.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/test_resource.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/test_signing_certificate_resource.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/apple/resources/test_undefined_resource_fields.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/cli/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/cli/argument/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/cli/argument/common_argument_types/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/cli/argument/common_argument_types/test_bounded_number.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/cli/argument/common_argument_types/test_iso_8601_datetime.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/cli/argument/common_argument_types/test_maybe_dir.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/cli/argument/test_argument.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/cli/mocks/utf-8-sample.txt +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/cli/test_cli_process.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/cli/test_decorators.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/conftest.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/google/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/google/conftest.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/google/test_firebase_client.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/google/test_live_firebase_client.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/google_play/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/google_play/resources/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/google_play/resources/conftest.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/google_play/resources/mocks/edit.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/google_play/resources/mocks/track.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/google_play/resources/test_edit_resource.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/google_play/resources/test_resource_print.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/google_play/resources/test_track_resource.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/google_play/test_api_client.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/mixins/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/mixins/test_path_finder.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/mixins/test_string_converter.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/mocks/certificate.asn1 +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/mocks/encrypted.pem +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/mocks/encrypted.pem.pub +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/mocks/unencrypted.pem +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/mocks/unencrypted.pem.pub +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/altool/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/altool/mocks/mock_failure_auth.txt +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/altool/mocks/mock_failure_other.txt +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/altool/mocks/mock_upload_success.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/altool/mocks/mock_validation_failure.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/altool/test_altool_result.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/altool/test_altool_retrying.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/conftest.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/enums/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/enums/test_resource_enum.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/junit/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/junit/mocks/testsuite.xml +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/junit/test_xml_generation.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/mocks/certificate-no-password.p12 +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/mocks/certificate.p12 +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/mocks/codemagic_io_wildcard_development.mobileprovision +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/mocks/export_options.plist +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/mocks/mock.ipa +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/mocks/mock.xcarchive/Products/Applications/Capybara App.app/Capybara App +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/mocks/mock_0_icloud_container_environments.plist +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/mocks/mock_1_icloud_container_environments.plist +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/mocks/mock_2_icloud_container_environments.plist +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/mocks/mock_openssh_private_key +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/mocks/mock_rsa_private_key +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/mocks/mock_xcode/Contents/version.plist +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/simulator/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/simulator/mocks/devices.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/simulator/mocks/simulator.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/simulator/test_runtime.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/simulator/test_simulator.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/test_certificate.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/test_certificate_attributes.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/test_code_sign_entitlements.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/test_export_options.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/test_private_key.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/test_provisioning_profile.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/test_table.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/test_xcode.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/xctests/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/xctests/conftest.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/xctests/mocks/0_1NtPgUPcB1A83X977l5Q91ElstUeVDnqAhumk_VJG8DIS4GA1sb8ElPPHZZGYEHmNvnHU1VVaPDCw1tI8n3uXg__.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/xctests/mocks/0_5rAUs3HknUI7DU8Jyc5RlFcosqCXTOV-qwOaOE1Mul_ppK8QCta-NSxxCdtVg6i12km4zTR5l0SjgzfHGUNxog__.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/xctests/mocks/0_97T9qQZ3dEI1oDS6NvYTPcFk_jUXFJ0NRwyd5FZ2S585JGMtlqbF28Hc85yeifgKEnNoInoW93Za9c5QJCspeQ__.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/xctests/mocks/0_DVcJZnHFaQQlzl8czovv7RuDRQIToEr5_3lLe-Mn1Sm6VreJ5xoXEFqBaWNv0XRmSg00NJ77XzQKgddhfkuk7w__.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/xctests/mocks/0_FZMbIp5VAUEiJv1wUUM-K78Dtmb4o-titbTusDJqRuarbS9OatzAykygXo4NUqEoR9sxCIoeu8VDioQmbba6mw__.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/xctests/mocks/0_Hj6SOUxY1APmxdQEA2HdqbA52GD3WJE571nqr_Z-w8vi_buxP-GUjNxCsGYQvnKnnwlyykwxY-KJmjqKYmPyXQ__.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/xctests/mocks/0_NnCmQ8rMqVyUBgL3ZDjfjJ9Vt1AMGeMzZPkDH30rGMYer0pFDpp4UDZlCEHRImO-48LdC_KdcbjP70IZA6zKUQ__.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/xctests/mocks/0_YK9aPHVT-grv_ZVooRT79GBO9n82BNogkuWVzFO6itJEtbtsRTQpK2-0ZDLot1JpCfPb26aZwEZjeb9G4GHiBQ__.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/xctests/mocks/0__H1_RrdBT9b-ZhkWCQiRKpHlwURmyWUudeOhj5UslLXhXl8mr9w5CGqdobi9A5wCVEIRMsO4yuFyzx2gMPr-_Q__.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/xctests/mocks/0_evvkuGf92MVrmIvhr07911LuRTiPBKDjIQ0q_7L-mPGGYkWVKMBPQ5pB5lbjoaOnvr0fpC9k003EunfwSdss2g__.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/xctests/mocks/actions_invocation_record.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/xctests/test_collector.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/xctests/test_converter.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/xctests/test_xcresult.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/models/xctests/test_xcresulttool.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/shell_tools/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/shell_tools/keytool/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/shell_tools/keytool/conftest.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/shell_tools/keytool/mocks/android.ks +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/shell_tools/keytool/mocks/non-rfc-cert-keystore.jks +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/shell_tools/keytool/mocks/non-rfc-cert-keystore.p12 +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/shell_tools/keytool/mocks/rfc-cert-keystore.jks +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/shell_tools/keytool/mocks/rfc-cert-keystore.p12 +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/shell_tools/keytool/test_get_certificate.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/shell_tools/keytool/test_get_certificates.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/shell_tools/keytool/test_validate.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/tools/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/tools/app_store_connect/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/tools/app_store_connect/action_groups/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/tools/app_store_connect/action_groups/test_apps_action_group.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/tools/app_store_connect/actions/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/tools/app_store_connect/actions/publish_action/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/tools/app_store_connect/actions/publish_action/test_publish_arguments.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/tools/app_store_connect/arguments/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/tools/app_store_connect/arguments/test_beta_build_localizations.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/tools/app_store_connect/conftest.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/tools/app_store_connect/mocks/AuthKeyMock.p8 +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/tools/app_store_connect/test_from_cli_args.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/tools/google_play/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/tools/google_play/mocks/google_play_tracks.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/tools/google_play/test_argument_types.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/tools/google_play/test_google_play.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/tools/mocks/firebase_releases.json +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/tools/test_android_app_bundle.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/tools/test_keychain.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/tools/test_universal_apk_generator.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/utilities/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/utilities/decorators/__init__.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/utilities/decorators/test_deprecated.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/utilities/test_backwards_file_reader.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/utilities/test_case_conversion.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/utilities/test_levenshtein_distance.py +0 -0
- {codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/tests/utilities/test_versions.py +0 -0
|
@@ -6,6 +6,7 @@ from .argument import Argument
|
|
|
6
6
|
from .argument import ArgumentProperties
|
|
7
7
|
from .argument import CommonArgumentTypes
|
|
8
8
|
from .argument import EnvironmentArgumentValue
|
|
9
|
+
from .argument import MutuallyExclusiveGroup
|
|
9
10
|
from .argument import TypedCliArgument
|
|
10
11
|
from .cli_app import CliApp
|
|
11
12
|
from .cli_app import CliAppException
|
{codemagic_cli_tools-0.53.4 → codemagic_cli_tools-0.53.5}/src/codemagic/cli/argument/__init__.py
RENAMED
|
@@ -5,5 +5,6 @@ from .argument_formatter import ArgumentFormatter
|
|
|
5
5
|
from .argument_parser_builder import ArgumentParserBuilder
|
|
6
6
|
from .argument_properties import ArgumentProperties
|
|
7
7
|
from .common_argument_types import CommonArgumentTypes
|
|
8
|
+
from .mutually_exclusive_groups import MutuallyExclusiveGroup
|
|
8
9
|
from .typed_cli_argument import EnvironmentArgumentValue
|
|
9
10
|
from .typed_cli_argument import TypedCliArgument
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import argparse
|
|
4
|
+
import dataclasses
|
|
5
|
+
from typing import TYPE_CHECKING
|
|
6
|
+
from typing import Dict
|
|
7
|
+
from typing import Optional
|
|
8
|
+
from typing import Sequence
|
|
9
|
+
from typing import Tuple
|
|
10
|
+
from typing import Type
|
|
11
|
+
|
|
12
|
+
from codemagic.cli.cli_help_formatter import CliHelpFormatter
|
|
13
|
+
from codemagic.cli.colors import Colors
|
|
14
|
+
|
|
15
|
+
from .argument_formatter import ArgumentFormatter
|
|
16
|
+
from .mutually_exclusive_groups import MutuallyExclusiveGroup
|
|
17
|
+
from .mutually_exclusive_groups import MutuallyExclusiveGroups
|
|
18
|
+
|
|
19
|
+
if TYPE_CHECKING:
|
|
20
|
+
from argparse import _ArgumentGroup as ArgumentGroup
|
|
21
|
+
from argparse import _SubParsersAction as SubParsersAction
|
|
22
|
+
|
|
23
|
+
from codemagic.cli import Argument
|
|
24
|
+
from codemagic.cli.argument import ActionCallable
|
|
25
|
+
from codemagic.cli.cli_app import CliApp
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@dataclasses.dataclass
|
|
29
|
+
class _ArgumentGroups:
|
|
30
|
+
required: Optional[ArgumentGroup] = None
|
|
31
|
+
optionals: Optional[ArgumentGroup] = None
|
|
32
|
+
mutually_exclusive: Dict[MutuallyExclusiveGroup, ArgumentGroup] = dataclasses.field(default_factory=dict)
|
|
33
|
+
custom: Dict[str, ArgumentGroup] = dataclasses.field(default_factory=dict)
|
|
34
|
+
|
|
35
|
+
def register_arguments(self, arguments: Sequence[Argument]):
|
|
36
|
+
argument_group: Optional[ArgumentGroup]
|
|
37
|
+
for argument in arguments:
|
|
38
|
+
if argument.argument_group_name:
|
|
39
|
+
argument_group = self.custom[argument.argument_group_name]
|
|
40
|
+
elif argument.mutually_exclusive_group:
|
|
41
|
+
argument_group = self.mutually_exclusive[argument.mutually_exclusive_group]
|
|
42
|
+
elif argument.is_required():
|
|
43
|
+
argument_group = self.required
|
|
44
|
+
else:
|
|
45
|
+
argument_group = self.optionals
|
|
46
|
+
|
|
47
|
+
if argument_group:
|
|
48
|
+
argument.register(argument_group)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class ArgumentParserBuilder:
|
|
52
|
+
def __init__(
|
|
53
|
+
self,
|
|
54
|
+
cli_app: Type[CliApp],
|
|
55
|
+
cli_action: ActionCallable,
|
|
56
|
+
parent_parser: SubParsersAction,
|
|
57
|
+
for_deprecated_alias: bool = False,
|
|
58
|
+
):
|
|
59
|
+
self._cli_app = cli_app
|
|
60
|
+
self._cli_action = cli_action
|
|
61
|
+
self._action_parser = self._create_action_parser(parent_parser, for_deprecated_alias)
|
|
62
|
+
|
|
63
|
+
def _create_action_parser(self, parent_parser: SubParsersAction, for_deprecated_alias: bool):
|
|
64
|
+
if for_deprecated_alias:
|
|
65
|
+
if self._cli_action.deprecation_info is None:
|
|
66
|
+
raise RuntimeError(f"Deprecated alias requested for {self._cli_action.action_name} without alias")
|
|
67
|
+
|
|
68
|
+
deprecation_message = self._cli_action.deprecation_info.get_message(
|
|
69
|
+
self._full_action_name,
|
|
70
|
+
Colors.YELLOW,
|
|
71
|
+
Colors.BOLD,
|
|
72
|
+
)
|
|
73
|
+
return parent_parser.add_parser(
|
|
74
|
+
self._cli_action.deprecation_info.alias,
|
|
75
|
+
formatter_class=CliHelpFormatter,
|
|
76
|
+
description=f"{deprecation_message} {Colors.BOLD(self._cli_action.__doc__)}",
|
|
77
|
+
)
|
|
78
|
+
else:
|
|
79
|
+
return parent_parser.add_parser(
|
|
80
|
+
self._cli_action.action_name,
|
|
81
|
+
formatter_class=CliHelpFormatter,
|
|
82
|
+
description=Colors.BOLD(self._cli_action.__doc__),
|
|
83
|
+
help=self._cli_action.__doc__,
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
@property
|
|
87
|
+
def _full_action_name(self) -> str:
|
|
88
|
+
executable = self._cli_app.get_executable_name()
|
|
89
|
+
if self._cli_action.action_group:
|
|
90
|
+
return f"{executable} {self._cli_action.action_group.name} {self._cli_action.action_name}"
|
|
91
|
+
else:
|
|
92
|
+
return f"{executable} {self._cli_action.action_name}"
|
|
93
|
+
|
|
94
|
+
@classmethod
|
|
95
|
+
def set_default_cli_options(cls, cli_options_parser):
|
|
96
|
+
options_group = cli_options_parser.add_argument_group(Colors.UNDERLINE("Options"))
|
|
97
|
+
options_group.add_argument(
|
|
98
|
+
"--log-stream",
|
|
99
|
+
type=str,
|
|
100
|
+
default="stderr",
|
|
101
|
+
choices=["stderr", "stdout"],
|
|
102
|
+
help=f'Log output stream. {ArgumentFormatter.format_default_value("stderr")}',
|
|
103
|
+
)
|
|
104
|
+
options_group.add_argument(
|
|
105
|
+
"--no-color",
|
|
106
|
+
dest="no_color",
|
|
107
|
+
action="store_true",
|
|
108
|
+
help="Do not use ANSI colors to format terminal output",
|
|
109
|
+
)
|
|
110
|
+
options_group.add_argument(
|
|
111
|
+
"--version",
|
|
112
|
+
dest="show_version",
|
|
113
|
+
action="store_true",
|
|
114
|
+
help="Show tool version and exit",
|
|
115
|
+
)
|
|
116
|
+
options_group.add_argument(
|
|
117
|
+
"-s",
|
|
118
|
+
"--silent",
|
|
119
|
+
dest="enable_logging",
|
|
120
|
+
action="store_false",
|
|
121
|
+
help="Disable log output for commands",
|
|
122
|
+
)
|
|
123
|
+
options_group.add_argument(
|
|
124
|
+
"-v",
|
|
125
|
+
"--verbose",
|
|
126
|
+
dest="verbose",
|
|
127
|
+
action="store_true",
|
|
128
|
+
help="Enable verbose logging for commands",
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
options_group.set_defaults(
|
|
132
|
+
enable_logging=True,
|
|
133
|
+
no_color=False,
|
|
134
|
+
show_version=False,
|
|
135
|
+
verbose=False,
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
@staticmethod
|
|
139
|
+
def _get_mutually_exclusive_group_texts(group: MutuallyExclusiveGroup, executable: str) -> Tuple[str, str]:
|
|
140
|
+
if group.required:
|
|
141
|
+
title_prefix, description_prefix, description_verb = "Required", "Exactly", "must"
|
|
142
|
+
else:
|
|
143
|
+
title_prefix, description_prefix, description_verb = "Optional", "Only", "can"
|
|
144
|
+
|
|
145
|
+
title = f"{title_prefix} mutually exclusive arguments for {executable} to {Colors.BOLD(group.name)}"
|
|
146
|
+
description = f"{description_prefix} one of those options {description_verb} be selected"
|
|
147
|
+
return title, description
|
|
148
|
+
|
|
149
|
+
def _setup_custom_argument_groups(self, group_names: Sequence[str], executable) -> Dict[str, ArgumentGroup]:
|
|
150
|
+
argument_groups = {}
|
|
151
|
+
for group_name in group_names:
|
|
152
|
+
description = f"Optional arguments for {executable} to {Colors.BOLD(group_name)}"
|
|
153
|
+
argument_group = self._action_parser.add_argument_group(Colors.UNDERLINE(description))
|
|
154
|
+
argument_groups[group_name] = argument_group
|
|
155
|
+
return argument_groups
|
|
156
|
+
|
|
157
|
+
def _setup_mutually_exclusive_groups(
|
|
158
|
+
self,
|
|
159
|
+
mutually_exclusive_groups: Sequence[MutuallyExclusiveGroup],
|
|
160
|
+
executable: str,
|
|
161
|
+
) -> Dict[MutuallyExclusiveGroup, ArgumentGroup]:
|
|
162
|
+
argument_groups = {}
|
|
163
|
+
for mutually_exclusive_group in mutually_exclusive_groups:
|
|
164
|
+
title, description = self._get_mutually_exclusive_group_texts(mutually_exclusive_group, executable)
|
|
165
|
+
argument_group = self._action_parser.add_argument_group(Colors.UNDERLINE(title), description)
|
|
166
|
+
mutually_exclusive_argument_group = argument_group.add_mutually_exclusive_group(
|
|
167
|
+
required=mutually_exclusive_group.required,
|
|
168
|
+
)
|
|
169
|
+
argument_groups[mutually_exclusive_group] = mutually_exclusive_argument_group
|
|
170
|
+
return argument_groups
|
|
171
|
+
|
|
172
|
+
def _setup_cli_app_options(self):
|
|
173
|
+
executable = self._action_parser.prog.split()[0]
|
|
174
|
+
|
|
175
|
+
mutually_exclusive_groups = MutuallyExclusiveGroups.from_argument_list(self._cli_app.CLASS_ARGUMENTS)
|
|
176
|
+
|
|
177
|
+
argument_groups = _ArgumentGroups()
|
|
178
|
+
|
|
179
|
+
required_args_title = Colors.UNDERLINE(f"Required arguments for {Colors.BOLD(executable)}")
|
|
180
|
+
argument_groups.required = self._action_parser.add_argument_group(required_args_title)
|
|
181
|
+
argument_groups.mutually_exclusive.update(
|
|
182
|
+
self._setup_mutually_exclusive_groups(mutually_exclusive_groups.required, executable),
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
optional_args_title = Colors.UNDERLINE(f"Optional arguments for {Colors.BOLD(executable)}")
|
|
186
|
+
argument_groups.optionals = self._action_parser.add_argument_group(optional_args_title)
|
|
187
|
+
argument_groups.mutually_exclusive.update(
|
|
188
|
+
self._setup_mutually_exclusive_groups(mutually_exclusive_groups.optional, executable),
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
argument_groups.register_arguments(self._cli_app.CLASS_ARGUMENTS)
|
|
192
|
+
|
|
193
|
+
def _setup_cli_action_options(self):
|
|
194
|
+
executable = f"command {self._cli_action.action_name}"
|
|
195
|
+
mutually_exclusive_groups = MutuallyExclusiveGroups.from_argument_list(self._cli_action.arguments)
|
|
196
|
+
|
|
197
|
+
argument_groups = _ArgumentGroups()
|
|
198
|
+
|
|
199
|
+
required_args_title = f"Required arguments for command {Colors.BOLD(self._cli_action.action_name)}"
|
|
200
|
+
argument_groups.required = self._action_parser.add_argument_group(Colors.UNDERLINE(required_args_title))
|
|
201
|
+
argument_groups.mutually_exclusive.update(
|
|
202
|
+
self._setup_mutually_exclusive_groups(mutually_exclusive_groups.required, executable),
|
|
203
|
+
)
|
|
204
|
+
|
|
205
|
+
optional_args_title = f"Optional arguments for command {Colors.BOLD(self._cli_action.action_name)}"
|
|
206
|
+
argument_groups.optionals = self._action_parser.add_argument_group(Colors.UNDERLINE(optional_args_title))
|
|
207
|
+
argument_groups.mutually_exclusive.update(
|
|
208
|
+
self._setup_mutually_exclusive_groups(mutually_exclusive_groups.optional, executable),
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
custom_group_names = {a.argument_group_name for a in self._cli_action.arguments if a.argument_group_name}
|
|
212
|
+
argument_groups.custom = self._setup_custom_argument_groups(sorted(custom_group_names), executable)
|
|
213
|
+
|
|
214
|
+
argument_groups.register_arguments(self._cli_action.arguments)
|
|
215
|
+
|
|
216
|
+
def build(self) -> argparse.ArgumentParser:
|
|
217
|
+
self._setup_cli_app_options()
|
|
218
|
+
self._setup_cli_action_options()
|
|
219
|
+
self.set_default_cli_options(self._action_parser)
|
|
220
|
+
return self._action_parser
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
from __future__ import annotations
|
|
3
3
|
|
|
4
4
|
import copy
|
|
5
|
+
from typing import TYPE_CHECKING
|
|
5
6
|
from typing import Any
|
|
6
7
|
from typing import Callable
|
|
7
8
|
from typing import Dict
|
|
@@ -11,6 +12,9 @@ from typing import Tuple
|
|
|
11
12
|
from typing import Type
|
|
12
13
|
from typing import Union
|
|
13
14
|
|
|
15
|
+
if TYPE_CHECKING:
|
|
16
|
+
from codemagic.cli import MutuallyExclusiveGroup
|
|
17
|
+
|
|
14
18
|
|
|
15
19
|
class ArgumentProperties(NamedTuple):
|
|
16
20
|
key: str
|
|
@@ -19,6 +23,7 @@ class ArgumentProperties(NamedTuple):
|
|
|
19
23
|
flags: Tuple[str, ...] = tuple()
|
|
20
24
|
argparse_kwargs: Optional[Dict[str, Any]] = None
|
|
21
25
|
argument_group_name: Optional[str] = None
|
|
26
|
+
mutually_exclusive_group: Optional[MutuallyExclusiveGroup] = None
|
|
22
27
|
|
|
23
28
|
@classmethod
|
|
24
29
|
def duplicate(cls, template: Union[Tuple, ArgumentProperties], **overwrites) -> ArgumentProperties:
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import dataclasses
|
|
4
|
+
from typing import NamedTuple
|
|
5
|
+
from typing import Sequence
|
|
6
|
+
|
|
7
|
+
from .argument import Argument
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class MutuallyExclusiveGroup(NamedTuple):
|
|
11
|
+
name: str
|
|
12
|
+
required: bool
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@dataclasses.dataclass(frozen=True)
|
|
16
|
+
class MutuallyExclusiveGroups:
|
|
17
|
+
required: Sequence[MutuallyExclusiveGroup]
|
|
18
|
+
optional: Sequence[MutuallyExclusiveGroup]
|
|
19
|
+
|
|
20
|
+
@classmethod
|
|
21
|
+
def from_argument_list(cls, arguments: Sequence[Argument]) -> MutuallyExclusiveGroups:
|
|
22
|
+
required_groups, optional_groups = set(), set()
|
|
23
|
+
|
|
24
|
+
for argument in arguments:
|
|
25
|
+
if not argument.mutually_exclusive_group:
|
|
26
|
+
continue
|
|
27
|
+
elif argument.mutually_exclusive_group.required:
|
|
28
|
+
required_groups.add(argument.mutually_exclusive_group)
|
|
29
|
+
else:
|
|
30
|
+
optional_groups.add(argument.mutually_exclusive_group)
|
|
31
|
+
|
|
32
|
+
return MutuallyExclusiveGroups(
|
|
33
|
+
required=tuple(required_groups),
|
|
34
|
+
optional=tuple(optional_groups),
|
|
35
|
+
)
|
|
@@ -38,7 +38,7 @@ class ReleasesActionGroup(FirebaseAppDistributionAction, ABC):
|
|
|
38
38
|
List releases for the Firebase application
|
|
39
39
|
"""
|
|
40
40
|
|
|
41
|
-
app_identifier = AppIdentifier(self.
|
|
41
|
+
app_identifier = AppIdentifier(self.project_number, app_id)
|
|
42
42
|
try:
|
|
43
43
|
releases = self.client.releases.list(app_identifier, order_by, limit)
|
|
44
44
|
except GoogleError as e:
|
|
@@ -18,7 +18,7 @@ class GetLatestBuildVersionAction(FirebaseAppDistributionAction, ABC):
|
|
|
18
18
|
"""
|
|
19
19
|
Get latest build version from Firebase
|
|
20
20
|
"""
|
|
21
|
-
app_identifier = AppIdentifier(self.
|
|
21
|
+
app_identifier = AppIdentifier(self.project_number, app_id)
|
|
22
22
|
try:
|
|
23
23
|
releases = self.client.releases.list(app_identifier, limit=1)
|
|
24
24
|
except GoogleError as e:
|
|
@@ -4,13 +4,24 @@ from codemagic.google.resources import OrderBy
|
|
|
4
4
|
|
|
5
5
|
from .argument_types import CredentialsArgument
|
|
6
6
|
|
|
7
|
+
select_project_group = cli.MutuallyExclusiveGroup(
|
|
8
|
+
name="select project",
|
|
9
|
+
required=True,
|
|
10
|
+
)
|
|
11
|
+
|
|
7
12
|
|
|
8
13
|
class FirebaseArgument(cli.Argument):
|
|
9
14
|
PROJECT_ID = cli.ArgumentProperties(
|
|
10
15
|
key="project_id",
|
|
11
|
-
flags=("--project-id",
|
|
12
|
-
description=f'
|
|
13
|
-
|
|
16
|
+
flags=("--project-id",),
|
|
17
|
+
description=f'Deprecated in version 0.53.5. Use `{Colors.BRIGHT_BLUE("--project-number")}` instead',
|
|
18
|
+
mutually_exclusive_group=select_project_group,
|
|
19
|
+
)
|
|
20
|
+
PROJECT_NUMBER = cli.ArgumentProperties(
|
|
21
|
+
key="project_number",
|
|
22
|
+
flags=("--project-number", "-p"),
|
|
23
|
+
description=f'Project number in Firebase. For example `{Colors.WHITE("228333310124")}`',
|
|
24
|
+
mutually_exclusive_group=select_project_group,
|
|
14
25
|
)
|
|
15
26
|
FIREBASE_SERVICE_ACCOUNT_CREDENTIALS = cli.ArgumentProperties(
|
|
16
27
|
key="credentials",
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import argparse
|
|
6
|
+
from typing import Dict
|
|
7
|
+
from typing import Optional
|
|
8
|
+
|
|
9
|
+
from codemagic import cli
|
|
10
|
+
from codemagic.google.firebase_client import FirebaseClient
|
|
11
|
+
from codemagic.utilities import log
|
|
12
|
+
from codemagic.utilities.decorators import deprecated
|
|
13
|
+
|
|
14
|
+
from .action_groups import ReleasesActionGroup
|
|
15
|
+
from .actions import GetLatestBuildVersionAction
|
|
16
|
+
from .arguments import FirebaseArgument
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@cli.common_arguments(
|
|
20
|
+
FirebaseArgument.PROJECT_ID,
|
|
21
|
+
FirebaseArgument.PROJECT_NUMBER,
|
|
22
|
+
FirebaseArgument.FIREBASE_SERVICE_ACCOUNT_CREDENTIALS,
|
|
23
|
+
)
|
|
24
|
+
class FirebaseAppDistribution(
|
|
25
|
+
cli.CliApp,
|
|
26
|
+
GetLatestBuildVersionAction,
|
|
27
|
+
ReleasesActionGroup,
|
|
28
|
+
):
|
|
29
|
+
"""
|
|
30
|
+
Utility to list releases and retrieve the latest release build version number from Firebase
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
def __init__(
|
|
34
|
+
self,
|
|
35
|
+
credentials: Dict,
|
|
36
|
+
project_number: Optional[str] = None,
|
|
37
|
+
project_id: Optional[str] = None,
|
|
38
|
+
**kwargs,
|
|
39
|
+
):
|
|
40
|
+
if not project_id and not project_number:
|
|
41
|
+
raise ValueError("Missing project_number")
|
|
42
|
+
super().__init__(**kwargs)
|
|
43
|
+
self.client = FirebaseClient(credentials)
|
|
44
|
+
self._project_id = project_id
|
|
45
|
+
self._project_number = project_number
|
|
46
|
+
if project_id:
|
|
47
|
+
_ = self.project_id # Just to trigger deprecation warning
|
|
48
|
+
|
|
49
|
+
@property
|
|
50
|
+
@deprecated("0.53.5", 'Use "FirebaseAppDistribution.project_number" instead.')
|
|
51
|
+
def project_id(self):
|
|
52
|
+
return self.project_number
|
|
53
|
+
|
|
54
|
+
@property
|
|
55
|
+
def project_number(self):
|
|
56
|
+
if not self._project_number:
|
|
57
|
+
return self._project_id
|
|
58
|
+
return self._project_number
|
|
59
|
+
|
|
60
|
+
@classmethod
|
|
61
|
+
def from_cli_args(cls, cli_args: argparse.Namespace) -> FirebaseAppDistribution:
|
|
62
|
+
credentials_argument = FirebaseArgument.FIREBASE_SERVICE_ACCOUNT_CREDENTIALS.from_args(cli_args)
|
|
63
|
+
if credentials_argument is None:
|
|
64
|
+
raise FirebaseArgument.FIREBASE_SERVICE_ACCOUNT_CREDENTIALS.raise_argument_error()
|
|
65
|
+
project_id = FirebaseArgument.PROJECT_ID.from_args(cli_args)
|
|
66
|
+
if project_id:
|
|
67
|
+
message = (
|
|
68
|
+
"Deprecation warning! "
|
|
69
|
+
f'Flag "{FirebaseArgument.get_flag(FirebaseArgument.PROJECT_ID)}" was deprecated in version 0.53.5 '
|
|
70
|
+
"and is subject for removal in future releases. "
|
|
71
|
+
f'Use "{FirebaseArgument.get_flag(FirebaseArgument.PROJECT_NUMBER)}" instead.'
|
|
72
|
+
)
|
|
73
|
+
log.get_logger(cls).warning(cli.Colors.YELLOW(message))
|
|
74
|
+
|
|
75
|
+
project_number = FirebaseArgument.PROJECT_NUMBER.from_args(cli_args)
|
|
76
|
+
|
|
77
|
+
if not project_id and not project_number:
|
|
78
|
+
raise FirebaseArgument.PROJECT_NUMBER.raise_argument_error()
|
|
79
|
+
|
|
80
|
+
return FirebaseAppDistribution(
|
|
81
|
+
credentials_argument.value,
|
|
82
|
+
project_number=project_id or project_number,
|
|
83
|
+
**cls._parent_class_kwargs(cli_args),
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
if __name__ == "__main__":
|
|
88
|
+
FirebaseAppDistribution.invoke_cli()
|
|
@@ -21,6 +21,7 @@ from googleapiclient import discovery
|
|
|
21
21
|
from oauth2client.service_account import ServiceAccountCredentials
|
|
22
22
|
|
|
23
23
|
credentials_argument = FirebaseArgument.FIREBASE_SERVICE_ACCOUNT_CREDENTIALS
|
|
24
|
+
project_number_argument = FirebaseArgument.PROJECT_NUMBER
|
|
24
25
|
project_id_argument = FirebaseArgument.PROJECT_ID
|
|
25
26
|
|
|
26
27
|
|
|
@@ -41,7 +42,8 @@ def register_args(cli_argument_group):
|
|
|
41
42
|
def namespace_kwargs():
|
|
42
43
|
ns_kwargs = {
|
|
43
44
|
credentials_argument.key: CredentialsArgument('{"type":"service_account"}'),
|
|
44
|
-
|
|
45
|
+
project_number_argument.key: "228333310124",
|
|
46
|
+
project_id_argument.key: None,
|
|
45
47
|
}
|
|
46
48
|
for arg in FirebaseAppDistribution.CLASS_ARGUMENTS:
|
|
47
49
|
if not hasattr(arg.type, "environment_variable_key"):
|
|
@@ -158,7 +160,7 @@ def app_identifier():
|
|
|
158
160
|
|
|
159
161
|
@pytest.fixture
|
|
160
162
|
def firebase_app_distribution(app_identifier):
|
|
161
|
-
return FirebaseAppDistribution({"type": "service_account"}, app_identifier.project_id)
|
|
163
|
+
return FirebaseAppDistribution({"type": "service_account"}, app_identifier.project_id, None)
|
|
162
164
|
|
|
163
165
|
|
|
164
166
|
def test_list_releases(firebase_app_distribution, mock_releases_list, releases, app_identifier):
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
import argparse
|
|
4
|
-
from typing import TYPE_CHECKING
|
|
5
|
-
from typing import Dict
|
|
6
|
-
from typing import Type
|
|
7
|
-
|
|
8
|
-
from codemagic.cli.cli_help_formatter import CliHelpFormatter
|
|
9
|
-
from codemagic.cli.colors import Colors
|
|
10
|
-
|
|
11
|
-
from .argument_formatter import ArgumentFormatter
|
|
12
|
-
|
|
13
|
-
if TYPE_CHECKING:
|
|
14
|
-
from argparse import _ArgumentGroup as ArgumentGroup
|
|
15
|
-
from argparse import _SubParsersAction as SubParsersAction
|
|
16
|
-
|
|
17
|
-
from codemagic.cli.argument import ActionCallable
|
|
18
|
-
from codemagic.cli.cli_app import CliApp
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
class ArgumentParserBuilder:
|
|
22
|
-
def __init__(
|
|
23
|
-
self,
|
|
24
|
-
cli_app: Type[CliApp],
|
|
25
|
-
cli_action: ActionCallable,
|
|
26
|
-
parent_parser: SubParsersAction,
|
|
27
|
-
for_deprecated_alias: bool = False,
|
|
28
|
-
):
|
|
29
|
-
self._cli_app = cli_app
|
|
30
|
-
self._cli_action = cli_action
|
|
31
|
-
self._action_parser = self._create_action_parser(parent_parser, for_deprecated_alias)
|
|
32
|
-
self._required_arguments = self._action_parser.add_argument_group(
|
|
33
|
-
Colors.UNDERLINE(f"Required arguments for command {Colors.BOLD(cli_action.action_name)}"),
|
|
34
|
-
)
|
|
35
|
-
self._optional_arguments = self._action_parser.add_argument_group(
|
|
36
|
-
Colors.UNDERLINE(f"Optional arguments for command {Colors.BOLD(cli_action.action_name)}"),
|
|
37
|
-
)
|
|
38
|
-
self._custom_arguments_groups: Dict[str, ArgumentGroup] = {}
|
|
39
|
-
|
|
40
|
-
def _create_action_parser(self, parent_parser: SubParsersAction, for_deprecated_alias: bool):
|
|
41
|
-
if for_deprecated_alias:
|
|
42
|
-
if self._cli_action.deprecation_info is None:
|
|
43
|
-
raise RuntimeError(f"Deprecated alias requested for {self._cli_action.action_name} without alias")
|
|
44
|
-
|
|
45
|
-
deprecation_message = self._cli_action.deprecation_info.get_message(
|
|
46
|
-
self._full_action_name,
|
|
47
|
-
Colors.YELLOW,
|
|
48
|
-
Colors.BOLD,
|
|
49
|
-
)
|
|
50
|
-
return parent_parser.add_parser(
|
|
51
|
-
self._cli_action.deprecation_info.alias,
|
|
52
|
-
formatter_class=CliHelpFormatter,
|
|
53
|
-
description=f"{deprecation_message} {Colors.BOLD(self._cli_action.__doc__)}",
|
|
54
|
-
)
|
|
55
|
-
else:
|
|
56
|
-
return parent_parser.add_parser(
|
|
57
|
-
self._cli_action.action_name,
|
|
58
|
-
formatter_class=CliHelpFormatter,
|
|
59
|
-
description=Colors.BOLD(self._cli_action.__doc__),
|
|
60
|
-
help=self._cli_action.__doc__,
|
|
61
|
-
)
|
|
62
|
-
|
|
63
|
-
@property
|
|
64
|
-
def _full_action_name(self) -> str:
|
|
65
|
-
executable = self._cli_app.get_executable_name()
|
|
66
|
-
if self._cli_action.action_group:
|
|
67
|
-
return f"{executable} {self._cli_action.action_group.name} {self._cli_action.action_name}"
|
|
68
|
-
else:
|
|
69
|
-
return f"{executable} {self._cli_action.action_name}"
|
|
70
|
-
|
|
71
|
-
@classmethod
|
|
72
|
-
def set_default_cli_options(cls, cli_options_parser):
|
|
73
|
-
options_group = cli_options_parser.add_argument_group(Colors.UNDERLINE("Options"))
|
|
74
|
-
options_group.add_argument(
|
|
75
|
-
"--log-stream",
|
|
76
|
-
type=str,
|
|
77
|
-
default="stderr",
|
|
78
|
-
choices=["stderr", "stdout"],
|
|
79
|
-
help=f'Log output stream. {ArgumentFormatter.format_default_value("stderr")}',
|
|
80
|
-
)
|
|
81
|
-
options_group.add_argument(
|
|
82
|
-
"--no-color",
|
|
83
|
-
dest="no_color",
|
|
84
|
-
action="store_true",
|
|
85
|
-
help="Do not use ANSI colors to format terminal output",
|
|
86
|
-
)
|
|
87
|
-
options_group.add_argument(
|
|
88
|
-
"--version",
|
|
89
|
-
dest="show_version",
|
|
90
|
-
action="store_true",
|
|
91
|
-
help="Show tool version and exit",
|
|
92
|
-
)
|
|
93
|
-
options_group.add_argument(
|
|
94
|
-
"-s",
|
|
95
|
-
"--silent",
|
|
96
|
-
dest="enable_logging",
|
|
97
|
-
action="store_false",
|
|
98
|
-
help="Disable log output for commands",
|
|
99
|
-
)
|
|
100
|
-
options_group.add_argument(
|
|
101
|
-
"-v",
|
|
102
|
-
"--verbose",
|
|
103
|
-
dest="verbose",
|
|
104
|
-
action="store_true",
|
|
105
|
-
help="Enable verbose logging for commands",
|
|
106
|
-
)
|
|
107
|
-
|
|
108
|
-
options_group.set_defaults(
|
|
109
|
-
enable_logging=True,
|
|
110
|
-
no_color=False,
|
|
111
|
-
show_version=False,
|
|
112
|
-
verbose=False,
|
|
113
|
-
)
|
|
114
|
-
|
|
115
|
-
def _get_custom_argument_group(self, group_name) -> ArgumentGroup:
|
|
116
|
-
try:
|
|
117
|
-
argument_group = self._custom_arguments_groups[group_name]
|
|
118
|
-
except KeyError:
|
|
119
|
-
group_description = Colors.UNDERLINE(
|
|
120
|
-
f"Optional arguments for command {self._cli_action.action_name} to {Colors.BOLD(group_name)}",
|
|
121
|
-
)
|
|
122
|
-
argument_group = self._action_parser.add_argument_group(group_description)
|
|
123
|
-
self._custom_arguments_groups[group_name] = argument_group
|
|
124
|
-
return argument_group
|
|
125
|
-
|
|
126
|
-
def _get_argument_group(self, argument) -> ArgumentGroup:
|
|
127
|
-
if argument.argument_group_name is None:
|
|
128
|
-
if argument.is_required():
|
|
129
|
-
argument_group = self._required_arguments
|
|
130
|
-
else:
|
|
131
|
-
argument_group = self._optional_arguments
|
|
132
|
-
else:
|
|
133
|
-
argument_group = self._get_custom_argument_group(argument.argument_group_name)
|
|
134
|
-
return argument_group
|
|
135
|
-
|
|
136
|
-
def _setup_cli_app_options(self):
|
|
137
|
-
executable = self._action_parser.prog.split()[0]
|
|
138
|
-
tool_required_arguments = self._action_parser.add_argument_group(
|
|
139
|
-
Colors.UNDERLINE(f"Required arguments for {Colors.BOLD(executable)}"),
|
|
140
|
-
)
|
|
141
|
-
tool_optional_arguments = self._action_parser.add_argument_group(
|
|
142
|
-
Colors.UNDERLINE(f"Optional arguments for {Colors.BOLD(executable)}"),
|
|
143
|
-
)
|
|
144
|
-
for argument in self._cli_app.CLASS_ARGUMENTS:
|
|
145
|
-
argument_group = tool_required_arguments if argument.is_required() else tool_optional_arguments
|
|
146
|
-
argument.register(argument_group)
|
|
147
|
-
|
|
148
|
-
def build(self) -> argparse.ArgumentParser:
|
|
149
|
-
self.set_default_cli_options(self._action_parser)
|
|
150
|
-
for argument in self._cli_action.arguments:
|
|
151
|
-
argument_group = self._get_argument_group(argument)
|
|
152
|
-
argument.register(argument_group)
|
|
153
|
-
self._setup_cli_app_options()
|
|
154
|
-
return self._action_parser
|