codemagic-cli-tools 0.50.7__tar.gz → 0.51.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (430) hide show
  1. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/PKG-INFO +1 -1
  2. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/pyproject.toml +1 -1
  3. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/__version__.py +1 -1
  4. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/__version__.py-e +1 -1
  5. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/api_client.py +5 -0
  6. codemagic_cli_tools-0.51.0/src/codemagic/apple/app_store_connect/app_store_publishing/__init__.py +1 -0
  7. codemagic_cli_tools-0.51.0/src/codemagic/apple/app_store_connect/app_store_publishing/app_store_version_phased_releases.py +91 -0
  8. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/resource_manager.py +50 -2
  9. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/versioning/app_store_versions.py +24 -0
  10. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/resources/__init__.py +5 -0
  11. codemagic_cli_tools-0.51.0/src/codemagic/apple/resources/app.py +108 -0
  12. codemagic_cli_tools-0.51.0/src/codemagic/apple/resources/app_store_version_phased_release.py +34 -0
  13. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/resources/build.py +8 -0
  14. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/resources/enums.py +32 -0
  15. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/resources/resource.py +25 -9
  16. codemagic_cli_tools-0.51.0/src/codemagic/mixins/path_finder.py +30 -0
  17. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/altool/altool.py +9 -5
  18. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/abstract_base_action.py +71 -5
  19. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/action_group.py +4 -0
  20. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/action_groups/__init__.py +1 -0
  21. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/action_groups/app_store_version_localizations_action_group.py +14 -2
  22. codemagic_cli_tools-0.51.0/src/codemagic/tools/app_store_connect/action_groups/app_store_version_phased_releases_action_group.py +96 -0
  23. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/action_groups/app_store_version_submissions_action_group.py +6 -1
  24. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/action_groups/app_store_versions_action_group.py +31 -2
  25. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/action_groups/apps_action_group.py +7 -2
  26. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/action_groups/beta_app_review_submissions_action_group.py +8 -2
  27. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/action_groups/beta_build_localizations_action_group.py +10 -3
  28. codemagic_cli_tools-0.51.0/src/codemagic/tools/app_store_connect/action_groups/builds_action_group.py +374 -0
  29. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/action_groups/bundle_ids_action_group.py +12 -2
  30. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/action_groups/certificates_action_group.py +11 -2
  31. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/action_groups/devices_action_group.py +12 -2
  32. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/action_groups/profiles_action_group.py +16 -2
  33. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/action_groups/review_submission_items_actions_group.py +6 -4
  34. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/action_groups/review_submissions_actions_group.py +10 -4
  35. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/actions/__init__.py +2 -0
  36. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/actions/publish_action.py +25 -3
  37. codemagic_cli_tools-0.50.7/src/codemagic/tools/app_store_connect/action_groups/builds_action_group.py → codemagic_cli_tools-0.51.0/src/codemagic/tools/app_store_connect/actions/submit_to_app_store_action.py +64 -440
  38. codemagic_cli_tools-0.51.0/src/codemagic/tools/app_store_connect/actions/submit_to_testflight_action.py +115 -0
  39. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/app_store_connect.py +3 -0
  40. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/arguments.py +66 -0
  41. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/mixins/resource_manager_mixin.py +37 -52
  42. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/resource_printer.py +27 -20
  43. codemagic_cli_tools-0.51.0/tests/apple/app_store_connect/app_store_publishing/test_app_store_version_phased_releases.py +38 -0
  44. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/resources/conftest.py +12 -0
  45. codemagic_cli_tools-0.51.0/tests/apple/resources/mocks/app.json +223 -0
  46. codemagic_cli_tools-0.51.0/tests/apple/resources/mocks/app_store_version_phased_release.json +13 -0
  47. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/resources/mocks/build.json +4 -0
  48. codemagic_cli_tools-0.51.0/tests/apple/resources/test_app_resource.py +15 -0
  49. codemagic_cli_tools-0.51.0/tests/apple/resources/test_app_store_version_phased_release_resource.py +28 -0
  50. codemagic_cli_tools-0.51.0/tests/mixins/test_path_finder.py +67 -0
  51. codemagic_cli_tools-0.51.0/tests/tools/app_store_connect/action_groups/test_apps_action_group.py +16 -0
  52. codemagic_cli_tools-0.51.0/tests/tools/app_store_connect/actions/__init__.py +0 -0
  53. codemagic_cli_tools-0.51.0/tests/tools/app_store_connect/actions/publish_action/__init__.py +0 -0
  54. codemagic_cli_tools-0.50.7/tests/tools/app_store_connect/test_publish_action.py → codemagic_cli_tools-0.51.0/tests/tools/app_store_connect/actions/publish_action/test_publish_arguments.py +3 -0
  55. codemagic_cli_tools-0.51.0/tests/tools/app_store_connect/arguments/__init__.py +0 -0
  56. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/tools/app_store_connect/conftest.py +25 -0
  57. codemagic_cli_tools-0.51.0/tests/utilities/__init__.py +0 -0
  58. codemagic_cli_tools-0.51.0/tests/utilities/decorators/__init__.py +0 -0
  59. codemagic_cli_tools-0.50.7/src/codemagic/apple/resources/app.py +0 -54
  60. codemagic_cli_tools-0.50.7/src/codemagic/mixins/path_finder.py +0 -22
  61. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/LICENSE +0 -0
  62. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/README.md +0 -0
  63. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/__init__.py +0 -0
  64. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/__init__.py +0 -0
  65. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/__init__.py +0 -0
  66. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/api_error.py +0 -0
  67. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/api_session.py +0 -0
  68. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/apps/__init__.py +0 -0
  69. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/apps/apps.py +0 -0
  70. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/builds/__init__.py +0 -0
  71. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/builds/builds.py +0 -0
  72. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/json_web_token_manager.py +0 -0
  73. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/provisioning/__init__.py +0 -0
  74. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/provisioning/bundle_id_capabilities.py +0 -0
  75. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/provisioning/bundle_ids.py +0 -0
  76. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/provisioning/devices.py +0 -0
  77. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/provisioning/profiles.py +0 -0
  78. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/provisioning/signing_certificates.py +0 -0
  79. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/testflight/__init__.py +0 -0
  80. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/testflight/beta_groups.py +0 -0
  81. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/type_declarations.py +0 -0
  82. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/versioning/__init__.py +0 -0
  83. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/versioning/app_store_version_localizations.py +0 -0
  84. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/versioning/app_store_version_submissions.py +0 -0
  85. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/versioning/beta_app_review_submissions.py +0 -0
  86. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/versioning/beta_build_localizations.py +0 -0
  87. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/versioning/pre_release_versions.py +0 -0
  88. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/versioning/review_submission_items.py +0 -0
  89. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/app_store_connect/versioning/review_submissions.py +0 -0
  90. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/resources/app_store_version.py +0 -0
  91. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/resources/app_store_version_localization.py +0 -0
  92. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/resources/app_store_version_submission.py +0 -0
  93. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/resources/beta_app_localization.py +0 -0
  94. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/resources/beta_app_review_detail.py +0 -0
  95. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/resources/beta_app_review_submission.py +0 -0
  96. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/resources/beta_build_localization.py +0 -0
  97. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/resources/beta_group.py +0 -0
  98. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/resources/build_beta_detail.py +0 -0
  99. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/resources/bundle_id.py +0 -0
  100. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/resources/bundle_id_capability.py +0 -0
  101. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/resources/device.py +0 -0
  102. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/resources/error_response.py +0 -0
  103. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/resources/pre_release_version.py +0 -0
  104. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/resources/profile.py +0 -0
  105. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/resources/review_submission.py +0 -0
  106. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/resources/review_submission_item.py +0 -0
  107. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/apple/resources/signing_certificate.py +0 -0
  108. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/cli/__init__.py +0 -0
  109. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/cli/action.py +0 -0
  110. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/cli/action_group.py +0 -0
  111. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/cli/argument/__init__.py +0 -0
  112. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/cli/argument/action_callable.py +0 -0
  113. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/cli/argument/argument.py +0 -0
  114. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/cli/argument/argument_formatter.py +0 -0
  115. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/cli/argument/argument_parser_builder.py +0 -0
  116. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/cli/argument/argument_properties.py +0 -0
  117. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/cli/argument/common_argument_types.py +0 -0
  118. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/cli/argument/typed_cli_argument.py +0 -0
  119. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/cli/cli_app.py +0 -0
  120. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/cli/cli_help_formatter.py +0 -0
  121. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/cli/cli_process.py +0 -0
  122. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/cli/cli_process_stream.py +0 -0
  123. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/cli/cli_types.py +0 -0
  124. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/cli/colors.py +0 -0
  125. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/cli/environment.py +0 -0
  126. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/data/jars/bundletool-all-1.13.1.jar +0 -0
  127. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/google/__init__.py +0 -0
  128. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/google/errors.py +0 -0
  129. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/google/firebase_client.py +0 -0
  130. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/google/google_client.py +0 -0
  131. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/google/resource_managers/__init__.py +0 -0
  132. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/google/resource_managers/mixins/__init__.py +0 -0
  133. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/google/resource_managers/mixins/acting_manager_mixin.py +0 -0
  134. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/google/resource_managers/mixins/listing_manager_mixin.py +0 -0
  135. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/google/resource_managers/release_manager.py +0 -0
  136. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/google/resource_managers/resource_manager.py +0 -0
  137. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/google/resources/__init__.py +0 -0
  138. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/google/resources/identifiers/__init__.py +0 -0
  139. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/google/resources/identifiers/app_identifier.py +0 -0
  140. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/google/resources/identifiers/resource_identifier.py +0 -0
  141. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/google/resources/release.py +0 -0
  142. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/google/resources/release_notes.py +0 -0
  143. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/google/resources/resource.py +0 -0
  144. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/google_play/__init__.py +0 -0
  145. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/google_play/api_client.py +0 -0
  146. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/google_play/api_error.py +0 -0
  147. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/google_play/resources/__init__.py +0 -0
  148. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/google_play/resources/edit.py +0 -0
  149. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/google_play/resources/enums.py +0 -0
  150. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/google_play/resources/resource.py +0 -0
  151. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/google_play/resources/track.py +0 -0
  152. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/mixins/__init__.py +0 -0
  153. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/mixins/running_cli_app.py +0 -0
  154. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/mixins/str_converter.py +0 -0
  155. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/__init__.py +0 -0
  156. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/altool/__init__.py +0 -0
  157. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/altool/altool_result.py +0 -0
  158. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/altool/enums.py +0 -0
  159. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/android_signing_info.py +0 -0
  160. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/application_package/__init__.py +0 -0
  161. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/application_package/abstract_package.py +0 -0
  162. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/application_package/ipa.py +0 -0
  163. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/application_package/macos_package.py +0 -0
  164. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/bundle_id_detector.py +0 -0
  165. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/certificate.py +0 -0
  166. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/certificate_attributes.py +0 -0
  167. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/certificate_p12_exporter.py +0 -0
  168. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/code_sign_entitlements.py +0 -0
  169. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/code_signing_settings_manager.py +0 -0
  170. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/enums.py +0 -0
  171. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/export_options.py +0 -0
  172. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/json_serializable.py +0 -0
  173. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/junit/__init__.py +0 -0
  174. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/junit/definitions.py +0 -0
  175. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/junit/printer.py +0 -0
  176. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/keystore.py +0 -0
  177. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/pbx_project.py +0 -0
  178. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/private_key.py +0 -0
  179. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/provisioning_profile.py +0 -0
  180. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/simulator/__init__.py +0 -0
  181. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/simulator/core_simulator_service.py +0 -0
  182. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/simulator/runtime.py +0 -0
  183. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/simulator/simulator.py +0 -0
  184. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/table/__init__.py +0 -0
  185. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/table/line.py +0 -0
  186. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/table/table.py +0 -0
  187. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/xcode.py +0 -0
  188. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/xcodebuild.py +0 -0
  189. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/xcpretty.py +0 -0
  190. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/xctests/__init__.py +0 -0
  191. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/xctests/collector.py +0 -0
  192. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/xctests/converter.py +0 -0
  193. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/xctests/xcresult.py +0 -0
  194. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/models/xctests/xcresulttool.py +0 -0
  195. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/py.typed +0 -0
  196. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/scripts/code_signing_manager.rb +0 -0
  197. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/shell_tools/__init__.py +0 -0
  198. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/shell_tools/abstract_shell_tool.py +0 -0
  199. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/shell_tools/keytool.py +0 -0
  200. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/__init__.py +0 -0
  201. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/_xcode_project/__init__.py +0 -0
  202. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/_xcode_project/arguments.py +0 -0
  203. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/android_app_bundle.py +0 -0
  204. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/android_keystore/__init__.py +0 -0
  205. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/android_keystore/__main__.py +0 -0
  206. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/android_keystore/android_keystore.py +0 -0
  207. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/android_keystore/argument_types.py +0 -0
  208. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/android_keystore/arguments.py +0 -0
  209. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/__init__.py +0 -0
  210. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/__main__.py +0 -0
  211. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/action_groups/beta_groups_action_group.py +0 -0
  212. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/actions/fetch_signing_files_action.py +0 -0
  213. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/actions/latest_build_number_actions.py +0 -0
  214. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/errors.py +0 -0
  215. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/mixins/__init__.py +0 -0
  216. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/app_store_connect/mixins/signing_file_saver_mixin.py +0 -0
  217. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/codemagic_cli_tools.py +0 -0
  218. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/firebase_app_distribution/__init__.py +0 -0
  219. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/firebase_app_distribution/__main__.py +0 -0
  220. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/firebase_app_distribution/action_groups/__init__.py +0 -0
  221. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/firebase_app_distribution/action_groups/firebase_action_groups.py +0 -0
  222. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/firebase_app_distribution/action_groups/releases_action_group.py +0 -0
  223. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/firebase_app_distribution/actions/__init__.py +0 -0
  224. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/firebase_app_distribution/actions/get_latest_build_version_action.py +0 -0
  225. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/firebase_app_distribution/argument_types.py +0 -0
  226. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/firebase_app_distribution/arguments.py +0 -0
  227. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/firebase_app_distribution/errors.py +0 -0
  228. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/firebase_app_distribution/firebase_app_distribution.py +0 -0
  229. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/firebase_app_distribution/firebase_app_distribution_action.py +0 -0
  230. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/firebase_app_distribution/resource_printer.py +0 -0
  231. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/git_changelog.py +0 -0
  232. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/google_play/__init__.py +0 -0
  233. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/google_play/__main__.py +0 -0
  234. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/google_play/action_groups/__init__.py +0 -0
  235. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/google_play/action_groups/google_play_action_groups.py +0 -0
  236. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/google_play/action_groups/tracks_action_group.py +0 -0
  237. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/google_play/actions/__init__.py +0 -0
  238. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/google_play/actions/get_latest_build_number_action.py +0 -0
  239. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/google_play/argument_types.py +0 -0
  240. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/google_play/arguments.py +0 -0
  241. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/google_play/errors.py +0 -0
  242. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/google_play/google_play.py +0 -0
  243. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/google_play/google_play_base_action.py +0 -0
  244. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/keychain.py +0 -0
  245. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/universal_apk_generator.py +0 -0
  246. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/tools/xcode_project.py +0 -0
  247. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/utilities/__init__.py +0 -0
  248. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/utilities/auditing/__init__.py +0 -0
  249. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/utilities/auditing/base_auditor.py +0 -0
  250. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/utilities/auditing/exception_auditor.py +0 -0
  251. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/utilities/auditing/http_request_auditor.py +0 -0
  252. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/utilities/backwards_file_reader.py +0 -0
  253. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/utilities/case_conversion.py +0 -0
  254. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/utilities/decorators.py +0 -0
  255. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/utilities/levenshtein_distance.py +0 -0
  256. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/utilities/log.py +0 -0
  257. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/src/codemagic/utilities/versions.py +0 -0
  258. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/__init__.py +0 -0
  259. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/__init__.py +0 -0
  260. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/app_store_connect/__init__.py +0 -0
  261. {codemagic_cli_tools-0.50.7/tests/apple/app_store_connect/apps → codemagic_cli_tools-0.51.0/tests/apple/app_store_connect/app_store_publishing}/__init__.py +0 -0
  262. {codemagic_cli_tools-0.50.7/tests/apple/app_store_connect/builds → codemagic_cli_tools-0.51.0/tests/apple/app_store_connect/apps}/__init__.py +0 -0
  263. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/app_store_connect/apps/test_apps.py +0 -0
  264. {codemagic_cli_tools-0.50.7/tests/apple/app_store_connect/provisioning → codemagic_cli_tools-0.51.0/tests/apple/app_store_connect/builds}/__init__.py +0 -0
  265. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/app_store_connect/builds/test_builds.py +0 -0
  266. {codemagic_cli_tools-0.50.7/tests/apple/app_store_connect/testflight → codemagic_cli_tools-0.51.0/tests/apple/app_store_connect/provisioning}/__init__.py +0 -0
  267. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/app_store_connect/provisioning/conftest.py +0 -0
  268. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/app_store_connect/provisioning/test_bundle_id_capabilities.py +0 -0
  269. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/app_store_connect/provisioning/test_bundle_ids.py +0 -0
  270. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/app_store_connect/provisioning/test_devices.py +0 -0
  271. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/app_store_connect/provisioning/test_profiles.py +0 -0
  272. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/app_store_connect/provisioning/test_signing_certificates.py +0 -0
  273. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/app_store_connect/resource_manager_test_base.py +0 -0
  274. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/app_store_connect/test_api_client.py +0 -0
  275. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/app_store_connect/test_api_session.py +0 -0
  276. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/app_store_connect/test_json_web_token_manager.py +0 -0
  277. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/app_store_connect/test_resource_manager.py +0 -0
  278. {codemagic_cli_tools-0.50.7/tests/apple/resources → codemagic_cli_tools-0.51.0/tests/apple/app_store_connect/testflight}/__init__.py +0 -0
  279. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/app_store_connect/testflight/test_beta_groups.py +0 -0
  280. {codemagic_cli_tools-0.50.7/tests/apple/resources/enums → codemagic_cli_tools-0.51.0/tests/apple/app_store_connect/versioning}/__init__.py +0 -0
  281. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/app_store_connect/versioning/test_app_store_version_localizations.py +0 -0
  282. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/app_store_connect/versioning/test_app_store_version_submissions.py +0 -0
  283. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/app_store_connect/versioning/test_app_store_versions.py +0 -0
  284. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/app_store_connect/versioning/test_beta_app_review_submissions.py +0 -0
  285. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/app_store_connect/versioning/test_beta_build_localizations.py +0 -0
  286. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/app_store_connect/versioning/test_pre_release_versions.py +0 -0
  287. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/app_store_connect/versioning/test_review_submission_items.py +0 -0
  288. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/app_store_connect/versioning/test_review_submissions.py +0 -0
  289. {codemagic_cli_tools-0.50.7/tests/cli → codemagic_cli_tools-0.51.0/tests/apple/resources}/__init__.py +0 -0
  290. {codemagic_cli_tools-0.50.7/tests/cli/argument → codemagic_cli_tools-0.51.0/tests/apple/resources/enums}/__init__.py +0 -0
  291. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/resources/enums/test_capability_type.py +0 -0
  292. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/resources/enums/test_certificate_type.py +0 -0
  293. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/resources/enums/test_profile_type.py +0 -0
  294. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/resources/mocks/app_store_version.json +0 -0
  295. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/resources/mocks/bundle_id.json +0 -0
  296. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/resources/mocks/bundle_id_capability.json +0 -0
  297. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/resources/mocks/certificate.json +0 -0
  298. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/resources/mocks/device.json +0 -0
  299. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/resources/mocks/error_response.json +0 -0
  300. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/resources/mocks/error_response_entity_state_invalid.json +0 -0
  301. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/resources/mocks/error_response_with_links.json +0 -0
  302. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/resources/mocks/mock_resource.json +0 -0
  303. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/resources/mocks/pre_release_version.json +0 -0
  304. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/resources/mocks/profile.json +0 -0
  305. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/resources/test_app_store_version_resource.py +0 -0
  306. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/resources/test_build_resource.py +0 -0
  307. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/resources/test_bundle_id_capability_resource.py +0 -0
  308. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/resources/test_bundle_id_resource.py +0 -0
  309. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/resources/test_device_resource.py +0 -0
  310. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/resources/test_error_response.py +0 -0
  311. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/resources/test_pre_release_version_resource.py +0 -0
  312. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/resources/test_profile_resource.py +0 -0
  313. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/resources/test_resource.py +0 -0
  314. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/resources/test_signing_certificate_resource.py +0 -0
  315. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/apple/resources/test_undefined_resource_fields.py +0 -0
  316. {codemagic_cli_tools-0.50.7/tests/cli/argument/common_argument_types → codemagic_cli_tools-0.51.0/tests/cli}/__init__.py +0 -0
  317. {codemagic_cli_tools-0.50.7/tests/google → codemagic_cli_tools-0.51.0/tests/cli/argument}/__init__.py +0 -0
  318. {codemagic_cli_tools-0.50.7/tests/google_play → codemagic_cli_tools-0.51.0/tests/cli/argument/common_argument_types}/__init__.py +0 -0
  319. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/cli/argument/common_argument_types/test_bounded_number.py +0 -0
  320. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/cli/argument/common_argument_types/test_iso_8601_datetime.py +0 -0
  321. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/cli/argument/common_argument_types/test_maybe_dir.py +0 -0
  322. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/cli/argument/test_argument.py +0 -0
  323. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/cli/mocks/utf-8-sample.txt +0 -0
  324. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/cli/test_cli_process.py +0 -0
  325. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/cli/test_decorators.py +0 -0
  326. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/conftest.py +0 -0
  327. {codemagic_cli_tools-0.50.7/tests/google_play/resources → codemagic_cli_tools-0.51.0/tests/google}/__init__.py +0 -0
  328. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/google/conftest.py +0 -0
  329. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/google/test_firebase_client.py +0 -0
  330. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/google/test_live_firebase_client.py +0 -0
  331. {codemagic_cli_tools-0.50.7/tests/mixins → codemagic_cli_tools-0.51.0/tests/google_play}/__init__.py +0 -0
  332. {codemagic_cli_tools-0.50.7/tests/models → codemagic_cli_tools-0.51.0/tests/google_play/resources}/__init__.py +0 -0
  333. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/google_play/resources/conftest.py +0 -0
  334. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/google_play/resources/mocks/edit.json +0 -0
  335. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/google_play/resources/mocks/track.json +0 -0
  336. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/google_play/resources/test_edit_resource.py +0 -0
  337. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/google_play/resources/test_resource_print.py +0 -0
  338. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/google_play/resources/test_track_resource.py +0 -0
  339. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/google_play/test_api_client.py +0 -0
  340. {codemagic_cli_tools-0.50.7/tests/models/altool → codemagic_cli_tools-0.51.0/tests/mixins}/__init__.py +0 -0
  341. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/mixins/test_string_converter.py +0 -0
  342. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/mocks/certificate.asn1 +0 -0
  343. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/mocks/encrypted.pem +0 -0
  344. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/mocks/encrypted.pem.pub +0 -0
  345. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/mocks/unencrypted.pem +0 -0
  346. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/mocks/unencrypted.pem.pub +0 -0
  347. {codemagic_cli_tools-0.50.7/tests/models/enums → codemagic_cli_tools-0.51.0/tests/models}/__init__.py +0 -0
  348. {codemagic_cli_tools-0.50.7/tests/models/junit → codemagic_cli_tools-0.51.0/tests/models/altool}/__init__.py +0 -0
  349. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/altool/mocks/mock_failure_auth.txt +0 -0
  350. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/altool/mocks/mock_failure_other.txt +0 -0
  351. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/altool/mocks/mock_upload_success.json +0 -0
  352. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/altool/mocks/mock_validation_failure.json +0 -0
  353. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/altool/test_altool_result.py +0 -0
  354. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/altool/test_altool_retrying.py +0 -0
  355. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/conftest.py +0 -0
  356. {codemagic_cli_tools-0.50.7/tests/models/simulator → codemagic_cli_tools-0.51.0/tests/models/enums}/__init__.py +0 -0
  357. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/enums/test_resource_enum.py +0 -0
  358. {codemagic_cli_tools-0.50.7/tests/models/xctests → codemagic_cli_tools-0.51.0/tests/models/junit}/__init__.py +0 -0
  359. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/junit/mocks/testsuite.xml +0 -0
  360. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/junit/test_xml_generation.py +0 -0
  361. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/mocks/certificate-no-password.p12 +0 -0
  362. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/mocks/certificate.p12 +0 -0
  363. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/mocks/codemagic_io_wildcard_development.mobileprovision +0 -0
  364. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/mocks/export_options.plist +0 -0
  365. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/mocks/mock.ipa +0 -0
  366. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/mocks/mock.xcarchive/Products/Applications/Capybara App.app/Capybara App +0 -0
  367. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/mocks/mock_0_icloud_container_environments.plist +0 -0
  368. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/mocks/mock_1_icloud_container_environments.plist +0 -0
  369. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/mocks/mock_2_icloud_container_environments.plist +0 -0
  370. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/mocks/mock_openssh_private_key +0 -0
  371. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/mocks/mock_rsa_private_key +0 -0
  372. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/mocks/mock_xcode/Contents/version.plist +0 -0
  373. {codemagic_cli_tools-0.50.7/tests/shell_tools → codemagic_cli_tools-0.51.0/tests/models/simulator}/__init__.py +0 -0
  374. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/simulator/mocks/devices.json +0 -0
  375. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/simulator/mocks/simulator.json +0 -0
  376. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/simulator/test_runtime.py +0 -0
  377. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/simulator/test_simulator.py +0 -0
  378. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/test_certificate.py +0 -0
  379. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/test_certificate_attributes.py +0 -0
  380. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/test_code_sign_entitlements.py +0 -0
  381. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/test_export_options.py +0 -0
  382. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/test_private_key.py +0 -0
  383. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/test_provisioning_profile.py +0 -0
  384. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/test_table.py +0 -0
  385. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/test_xcode.py +0 -0
  386. {codemagic_cli_tools-0.50.7/tests/shell_tools/keytool → codemagic_cli_tools-0.51.0/tests/models/xctests}/__init__.py +0 -0
  387. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/xctests/conftest.py +0 -0
  388. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/xctests/mocks/0_1NtPgUPcB1A83X977l5Q91ElstUeVDnqAhumk_VJG8DIS4GA1sb8ElPPHZZGYEHmNvnHU1VVaPDCw1tI8n3uXg__.json +0 -0
  389. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/xctests/mocks/0_5rAUs3HknUI7DU8Jyc5RlFcosqCXTOV-qwOaOE1Mul_ppK8QCta-NSxxCdtVg6i12km4zTR5l0SjgzfHGUNxog__.json +0 -0
  390. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/xctests/mocks/0_97T9qQZ3dEI1oDS6NvYTPcFk_jUXFJ0NRwyd5FZ2S585JGMtlqbF28Hc85yeifgKEnNoInoW93Za9c5QJCspeQ__.json +0 -0
  391. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/xctests/mocks/0_DVcJZnHFaQQlzl8czovv7RuDRQIToEr5_3lLe-Mn1Sm6VreJ5xoXEFqBaWNv0XRmSg00NJ77XzQKgddhfkuk7w__.json +0 -0
  392. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/xctests/mocks/0_FZMbIp5VAUEiJv1wUUM-K78Dtmb4o-titbTusDJqRuarbS9OatzAykygXo4NUqEoR9sxCIoeu8VDioQmbba6mw__.json +0 -0
  393. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/xctests/mocks/0_Hj6SOUxY1APmxdQEA2HdqbA52GD3WJE571nqr_Z-w8vi_buxP-GUjNxCsGYQvnKnnwlyykwxY-KJmjqKYmPyXQ__.json +0 -0
  394. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/xctests/mocks/0_NnCmQ8rMqVyUBgL3ZDjfjJ9Vt1AMGeMzZPkDH30rGMYer0pFDpp4UDZlCEHRImO-48LdC_KdcbjP70IZA6zKUQ__.json +0 -0
  395. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/xctests/mocks/0_YK9aPHVT-grv_ZVooRT79GBO9n82BNogkuWVzFO6itJEtbtsRTQpK2-0ZDLot1JpCfPb26aZwEZjeb9G4GHiBQ__.json +0 -0
  396. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/xctests/mocks/0__H1_RrdBT9b-ZhkWCQiRKpHlwURmyWUudeOhj5UslLXhXl8mr9w5CGqdobi9A5wCVEIRMsO4yuFyzx2gMPr-_Q__.json +0 -0
  397. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/xctests/mocks/0_evvkuGf92MVrmIvhr07911LuRTiPBKDjIQ0q_7L-mPGGYkWVKMBPQ5pB5lbjoaOnvr0fpC9k003EunfwSdss2g__.json +0 -0
  398. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/xctests/mocks/actions_invocation_record.json +0 -0
  399. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/xctests/test_collector.py +0 -0
  400. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/xctests/test_converter.py +0 -0
  401. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/models/xctests/test_xcresult.py +0 -0
  402. {codemagic_cli_tools-0.50.7/tests/tools → codemagic_cli_tools-0.51.0/tests/shell_tools}/__init__.py +0 -0
  403. {codemagic_cli_tools-0.50.7/tests/tools/app_store_connect → codemagic_cli_tools-0.51.0/tests/shell_tools/keytool}/__init__.py +0 -0
  404. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/shell_tools/keytool/conftest.py +0 -0
  405. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/shell_tools/keytool/mocks/android.ks +0 -0
  406. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/shell_tools/keytool/mocks/non-rfc-cert-keystore.jks +0 -0
  407. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/shell_tools/keytool/mocks/non-rfc-cert-keystore.p12 +0 -0
  408. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/shell_tools/keytool/mocks/rfc-cert-keystore.jks +0 -0
  409. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/shell_tools/keytool/mocks/rfc-cert-keystore.p12 +0 -0
  410. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/shell_tools/keytool/test_get_certificate.py +0 -0
  411. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/shell_tools/keytool/test_get_certificates.py +0 -0
  412. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/shell_tools/keytool/test_validate.py +0 -0
  413. {codemagic_cli_tools-0.50.7/tests/tools/app_store_connect/arguments → codemagic_cli_tools-0.51.0/tests/tools}/__init__.py +0 -0
  414. {codemagic_cli_tools-0.50.7/tests/utilities → codemagic_cli_tools-0.51.0/tests/tools/app_store_connect}/__init__.py +0 -0
  415. {codemagic_cli_tools-0.50.7/tests/utilities/decorators → codemagic_cli_tools-0.51.0/tests/tools/app_store_connect/action_groups}/__init__.py +0 -0
  416. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/tools/app_store_connect/arguments/test_beta_build_localizations.py +0 -0
  417. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/tools/app_store_connect/mocks/AuthKeyMock.p8 +0 -0
  418. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/tools/app_store_connect/test_from_cli_args.py +0 -0
  419. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/tools/mocks/firebase_releases.json +0 -0
  420. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/tools/mocks/google_play_tracks.json +0 -0
  421. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/tools/test_android_app_bundle.py +0 -0
  422. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/tools/test_firebase_app_distribution.py +0 -0
  423. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/tools/test_google_play.py +0 -0
  424. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/tools/test_keychain.py +0 -0
  425. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/tools/test_universal_apk_generator.py +0 -0
  426. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/utilities/decorators/test_deprecated.py +0 -0
  427. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/utilities/test_backwards_file_reader.py +0 -0
  428. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/utilities/test_case_conversion.py +0 -0
  429. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/utilities/test_levenshtein_distance.py +0 -0
  430. {codemagic_cli_tools-0.50.7 → codemagic_cli_tools-0.51.0}/tests/utilities/test_versions.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: codemagic-cli-tools
3
- Version: 0.50.7
3
+ Version: 0.51.0
4
4
  Summary: CLI tools used in Codemagic builds
5
5
  Home-page: https://github.com/codemagic-ci-cd/cli-tools
6
6
  License: GPL-3.0-or-later
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "codemagic-cli-tools"
3
- version = "0.50.7"
3
+ version = "0.51.0"
4
4
  description = "CLI tools used in Codemagic builds"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -1,5 +1,5 @@
1
1
  __title__ = "codemagic-cli-tools"
2
2
  __description__ = "CLI tools used in Codemagic builds"
3
- __version__ = '0.50.7'
3
+ __version__ = '0.51.0'
4
4
  __url__ = "https://github.com/codemagic-ci-cd/cli-tools"
5
5
  __licence__ = "GNU General Public License v3.0"
@@ -1,5 +1,5 @@
1
1
  __title__ = "codemagic-cli-tools"
2
2
  __description__ = "CLI tools used in Codemagic builds"
3
- __version__ = "0.50.6.dev"
3
+ __version__ = "0.51.0.dev"
4
4
  __url__ = "https://github.com/codemagic-ci-cd/cli-tools"
5
5
  __licence__ = "GNU General Public License v3.0"
@@ -8,6 +8,7 @@ from urllib import parse
8
8
  from codemagic.utilities import log
9
9
 
10
10
  from .api_session import AppStoreConnectApiSession
11
+ from .app_store_publishing import AppStoreVersionPhasedReleases
11
12
  from .apps import Apps
12
13
  from .builds import Builds
13
14
  from .json_web_token_manager import JsonWebTokenManager
@@ -124,6 +125,10 @@ class AppStoreConnectApiClient:
124
125
  def app_store_version_localizations(self) -> AppStoreVersionLocalizations:
125
126
  return AppStoreVersionLocalizations(self)
126
127
 
128
+ @property
129
+ def app_store_version_phased_releases(self) -> AppStoreVersionPhasedReleases:
130
+ return AppStoreVersionPhasedReleases(self)
131
+
127
132
  @property
128
133
  def app_store_version_submissions(self) -> AppStoreVersionSubmissions:
129
134
  return AppStoreVersionSubmissions(self)
@@ -0,0 +1 @@
1
+ from .app_store_version_phased_releases import AppStoreVersionPhasedReleases
@@ -0,0 +1,91 @@
1
+ from typing import Optional
2
+ from typing import Type
3
+ from typing import Union
4
+
5
+ from codemagic.apple.app_store_connect.resource_manager import ResourceManager
6
+ from codemagic.apple.resources import AppStoreVersionPhasedRelease
7
+ from codemagic.apple.resources import LinkedResourceData
8
+ from codemagic.apple.resources import PhasedReleaseState
9
+ from codemagic.apple.resources import ResourceId
10
+ from codemagic.apple.resources import ResourceType
11
+
12
+
13
+ class AppStoreVersionPhasedReleases(ResourceManager[AppStoreVersionPhasedRelease]):
14
+ """
15
+ App Store Version Phased Releases
16
+ https://developer.apple.com/documentation/appstoreconnectapi/app_store/app_store_version_phased_releases
17
+ """
18
+
19
+ @property
20
+ def resource_type(self) -> Type[AppStoreVersionPhasedRelease]:
21
+ return AppStoreVersionPhasedRelease
22
+
23
+ def create(
24
+ self,
25
+ app_store_version: Union[ResourceId, LinkedResourceData],
26
+ phased_release_state: Optional[PhasedReleaseState] = None,
27
+ ) -> AppStoreVersionPhasedRelease:
28
+ """
29
+ https://developer.apple.com/documentation/appstoreconnectapi/create_an_app_store_version_phased_release
30
+ """
31
+ if phased_release_state:
32
+ attributes = {
33
+ "phasedReleaseState": phased_release_state.value,
34
+ }
35
+ else:
36
+ attributes = None
37
+
38
+ relationships = {
39
+ "appStoreVersion": {
40
+ "data": self._get_attribute_data(app_store_version, ResourceType.APP_STORE_VERSIONS),
41
+ },
42
+ }
43
+
44
+ payload = self._get_create_payload(
45
+ ResourceType.APP_STORE_VERSION_PHASED_RELEASES,
46
+ attributes=attributes,
47
+ relationships=relationships,
48
+ )
49
+
50
+ response = self.client.session.post(
51
+ f"{self.client.API_URL}/appStoreVersionPhasedReleases",
52
+ json=payload,
53
+ ).json()
54
+ return AppStoreVersionPhasedRelease(response["data"], created=True)
55
+
56
+ def modify(
57
+ self,
58
+ app_store_version_phased_release: Union[LinkedResourceData, ResourceId],
59
+ *,
60
+ phased_release_state: PhasedReleaseState,
61
+ ) -> AppStoreVersionPhasedRelease:
62
+ """
63
+ https://developer.apple.com/documentation/appstoreconnectapi/modify_an_app_store_version_phased_release
64
+ """
65
+ app_store_version_phased_release_id = self._get_resource_id(app_store_version_phased_release)
66
+
67
+ attributes = {
68
+ "phasedReleaseState": phased_release_state.value,
69
+ }
70
+
71
+ payload = self._get_update_payload(
72
+ app_store_version_phased_release_id,
73
+ ResourceType.APP_STORE_VERSION_PHASED_RELEASES,
74
+ attributes=attributes,
75
+ )
76
+
77
+ response = self.client.session.patch(
78
+ f"{self.client.API_URL}/appStoreVersionPhasedReleases/{app_store_version_phased_release_id}",
79
+ json=payload,
80
+ ).json()
81
+ return AppStoreVersionPhasedRelease(response["data"])
82
+
83
+ def delete(self, app_store_version_phased_release: Union[LinkedResourceData, ResourceId]) -> None:
84
+ """
85
+ https://developer.apple.com/documentation/appstoreconnectapi/delete_an_app_store_version_phased_release
86
+ """
87
+ app_store_version_phased_release_id = self._get_resource_id(app_store_version_phased_release)
88
+
89
+ self.client.session.delete(
90
+ f"{self.client.API_URL}/appStoreVersionPhasedReleases/{app_store_version_phased_release_id}",
91
+ )
@@ -7,6 +7,7 @@ from typing import TYPE_CHECKING
7
7
  from typing import Any
8
8
  from typing import Dict
9
9
  from typing import Generic
10
+ from typing import List
10
11
  from typing import Optional
11
12
  from typing import Sequence
12
13
  from typing import Type
@@ -16,14 +17,61 @@ from typing import Union
16
17
  from codemagic.apple.resources import LinkedResourceData
17
18
  from codemagic.apple.resources import Resource
18
19
  from codemagic.apple.resources import ResourceId
20
+ from codemagic.apple.resources import ResourceReference
19
21
  from codemagic.apple.resources import ResourceType
20
22
  from codemagic.utilities import case_conversion
21
23
 
24
+ R = TypeVar("R", bound=Resource)
25
+ R_co = TypeVar("R_co", bound=Resource, covariant=True)
26
+ R2 = TypeVar("R2", bound=Resource)
27
+
22
28
  if TYPE_CHECKING:
29
+ from typing_extensions import Protocol
30
+
23
31
  from codemagic.apple import AppStoreConnectApiClient
24
32
 
25
- R = TypeVar("R", bound=Resource)
26
- R2 = TypeVar("R2", bound=Resource)
33
+ class PResourceManager(Protocol[R_co]):
34
+ @property
35
+ def resource_type(self) -> Type[R_co]:
36
+ ...
37
+
38
+ class CreatingResourceManager(PResourceManager[R_co], Protocol):
39
+ def create(self, **create_params) -> R_co:
40
+ ...
41
+
42
+ class ReadingResourceManager(PResourceManager[R_co], Protocol):
43
+ def read(self, ref: ResourceReference) -> R_co:
44
+ ...
45
+
46
+ class ListingResourceManager(PResourceManager[R], Protocol):
47
+ def list(self, *, resource_filter: ResourceManager.Filter, **listing_options) -> List[R]:
48
+ ...
49
+
50
+ class DeletingResourceManager(PResourceManager[R_co], Protocol):
51
+ def delete(self, ref: ResourceReference) -> None:
52
+ ...
53
+
54
+ class ModifyingResourceManager(PResourceManager[R_co], Protocol):
55
+ def modify(self, ref: ResourceReference, **update_params) -> R_co:
56
+ ...
57
+
58
+ else:
59
+ # TODO: Once Python 3.7 support is removed and we have Protocols
60
+ # available in runtime, then those can be removed.
61
+ class CreatingResourceManager(Generic[R]):
62
+ ...
63
+
64
+ class ReadingResourceManager(Generic[R]):
65
+ ...
66
+
67
+ class ListingResourceManager(Generic[R]):
68
+ ...
69
+
70
+ class DeletingResourceManager(Generic[R]):
71
+ ...
72
+
73
+ class ModifyingResourceManager(Generic[R]):
74
+ ...
27
75
 
28
76
 
29
77
  class ResourceManager(Generic[R], metaclass=abc.ABCMeta):
@@ -12,6 +12,7 @@ from codemagic.apple.resources import App
12
12
  from codemagic.apple.resources import AppStoreState
13
13
  from codemagic.apple.resources import AppStoreVersion
14
14
  from codemagic.apple.resources import AppStoreVersionLocalization
15
+ from codemagic.apple.resources import AppStoreVersionPhasedRelease
15
16
  from codemagic.apple.resources import AppStoreVersionSubmission
16
17
  from codemagic.apple.resources import Build
17
18
  from codemagic.apple.resources import LinkedResourceData
@@ -115,6 +116,29 @@ class AppStoreVersions(ResourceManager[AppStoreVersion]):
115
116
  return None
116
117
  return Build(build_data)
117
118
 
119
+ def read_app_store_version_phased_release_data(
120
+ self,
121
+ app_store_version: Union[AppStoreVersion, ResourceId],
122
+ fields: Sequence[str] = tuple(),
123
+ ) -> Optional[dict]:
124
+ """
125
+ https://developer.apple.com/documentation/appstoreconnectapi/read_the_app_store_version_phased_release_information_of_an_app_store_version
126
+ """
127
+ app_store_version_id = self._get_resource_id(app_store_version)
128
+ url = f"{self.client.API_URL}/appStoreVersions/{app_store_version_id}/appStoreVersionPhasedRelease"
129
+ params = {"fields[appStoreVersionPhasedReleases]": ",".join(fields)} if fields else {}
130
+ response = self.client.session.get(url, params=params).json()
131
+ return response["data"]
132
+
133
+ def read_app_store_version_phased_release(
134
+ self,
135
+ app_store_version: Union[AppStoreVersion, ResourceId],
136
+ ) -> Optional[AppStoreVersionPhasedRelease]:
137
+ app_store_version_phased_release_data = self.read_app_store_version_phased_release_data(app_store_version)
138
+ if app_store_version_phased_release_data is None:
139
+ return None
140
+ return AppStoreVersionPhasedRelease(app_store_version_phased_release_data)
141
+
118
142
  def read_app_store_version_submission(
119
143
  self,
120
144
  app_store_version: Union[AppStoreVersion, ResourceId],
@@ -1,6 +1,7 @@
1
1
  from .app import App
2
2
  from .app_store_version import AppStoreVersion
3
3
  from .app_store_version_localization import AppStoreVersionLocalization
4
+ from .app_store_version_phased_release import AppStoreVersionPhasedRelease
4
5
  from .app_store_version_submission import AppStoreVersionSubmission
5
6
  from .beta_app_localization import BetaAppLocalization
6
7
  from .beta_app_review_detail import BetaAppReviewDetail
@@ -16,6 +17,7 @@ from .bundle_id_capability import CapabilitySetting
16
17
  from .device import Device
17
18
  from .enums import AppStoreState
18
19
  from .enums import BetaReviewState
20
+ from .enums import BuildAudienceType
19
21
  from .enums import BuildProcessingState
20
22
  from .enums import BundleIdPlatform
21
23
  from .enums import CapabilityOptionKey
@@ -29,6 +31,7 @@ from .enums import DeviceStatus
29
31
  from .enums import ExternalBetaState
30
32
  from .enums import InternalBetaState
31
33
  from .enums import Locale
34
+ from .enums import PhasedReleaseState
32
35
  from .enums import Platform
33
36
  from .enums import ProfileState
34
37
  from .enums import ProfileType
@@ -36,12 +39,14 @@ from .enums import ReleaseType
36
39
  from .enums import ResourceType
37
40
  from .enums import ReviewSubmissionItemState
38
41
  from .enums import ReviewSubmissionState
42
+ from .enums import SubscriptionStatusUrlVersion
39
43
  from .error_response import ErrorResponse
40
44
  from .pre_release_version import PreReleaseVersion
41
45
  from .profile import Profile
42
46
  from .resource import LinkedResourceData
43
47
  from .resource import Resource
44
48
  from .resource import ResourceId
49
+ from .resource import ResourceReference
45
50
  from .review_submission import ReviewSubmission
46
51
  from .review_submission_item import ReviewSubmissionItem
47
52
  from .signing_certificate import SigningCertificate
@@ -0,0 +1,108 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from typing import Optional
5
+
6
+ from .enums import ContentRightsDeclaration
7
+ from .enums import Locale
8
+ from .enums import SubscriptionStatusUrlVersion
9
+ from .resource import Relationship
10
+ from .resource import Resource
11
+
12
+
13
+ class App(Resource):
14
+ """
15
+ https://developer.apple.com/documentation/appstoreconnectapi/app
16
+ """
17
+
18
+ attributes: Attributes
19
+ relationships: Optional[Relationships] = None
20
+
21
+ @dataclass
22
+ class Attributes(Resource.Attributes):
23
+ bundleId: str
24
+ name: str
25
+ primaryLocale: Locale
26
+ sku: str
27
+ contentRightsDeclaration: ContentRightsDeclaration
28
+ isOrEverWasMadeForKids: bool
29
+
30
+ subscriptionStatusUrl: Optional[str] = None
31
+ subscriptionStatusUrlForSandbox: Optional[str] = None
32
+ subscriptionStatusUrlVersion: Optional[SubscriptionStatusUrlVersion] = None
33
+ subscriptionStatusUrlVersionForSandbox: Optional[SubscriptionStatusUrlVersion] = None
34
+
35
+ def __post_init__(self):
36
+ if isinstance(self.contentRightsDeclaration, str):
37
+ self.contentRightsDeclaration = ContentRightsDeclaration(self.contentRightsDeclaration)
38
+ if isinstance(self.primaryLocale, str):
39
+ self.primaryLocale = Locale(self.primaryLocale)
40
+ if isinstance(self.subscriptionStatusUrlVersion, str):
41
+ self.subscriptionStatusUrlVersion = SubscriptionStatusUrlVersion(self.subscriptionStatusUrlVersion)
42
+ if isinstance(self.subscriptionStatusUrlVersionForSandbox, str):
43
+ self.subscriptionStatusUrlVersionForSandbox = SubscriptionStatusUrlVersion(
44
+ self.subscriptionStatusUrlVersionForSandbox,
45
+ )
46
+
47
+ @dataclass
48
+ class Relationships(Resource.Relationships):
49
+ _OMIT_IF_NONE_KEYS = (
50
+ "alternativeDistributionKey",
51
+ "analyticsReportRequests",
52
+ "appAvailability",
53
+ "appAvailabilityV2",
54
+ "appClips",
55
+ "appCustomProductPages",
56
+ "appEvents",
57
+ "appPricePoints",
58
+ "appPriceSchedule",
59
+ "appStoreVersionExperimentsV2",
60
+ "betaTesters",
61
+ "ciProduct",
62
+ "customerReviews",
63
+ "gameCenterDetail",
64
+ "inAppPurchasesV2",
65
+ "marketplaceSearchDetail",
66
+ "perfPowerMetrics",
67
+ "pricePoints",
68
+ "promotedPurchases",
69
+ "reviewSubmissions",
70
+ "subscriptionGracePeriod",
71
+ "subscriptionGroups",
72
+ )
73
+
74
+ appInfos: Relationship
75
+ appStoreVersions: Relationship
76
+ betaAppLocalizations: Relationship
77
+ betaAppReviewDetail: Relationship
78
+ betaGroups: Relationship
79
+ betaLicenseAgreement: Relationship
80
+ builds: Relationship
81
+ endUserLicenseAgreement: Relationship
82
+ gameCenterEnabledVersions: Relationship
83
+ inAppPurchases: Relationship
84
+ preOrder: Relationship
85
+ preReleaseVersions: Relationship
86
+
87
+ alternativeDistributionKey: Optional[Relationship] = None
88
+ analyticsReportRequests: Optional[Relationship] = None
89
+ appAvailability: Optional[Relationship] = None
90
+ appAvailabilityV2: Optional[Relationship] = None
91
+ appClips: Optional[Relationship] = None
92
+ appCustomProductPages: Optional[Relationship] = None
93
+ appEvents: Optional[Relationship] = None
94
+ appPricePoints: Optional[Relationship] = None
95
+ appPriceSchedule: Optional[Relationship] = None
96
+ appStoreVersionExperimentsV2: Optional[Relationship] = None
97
+ betaTesters: Optional[Relationship] = None
98
+ ciProduct: Optional[Relationship] = None
99
+ customerReviews: Optional[Relationship] = None
100
+ gameCenterDetail: Optional[Relationship] = None
101
+ inAppPurchasesV2: Optional[Relationship] = None
102
+ marketplaceSearchDetail: Optional[Relationship] = None
103
+ perfPowerMetrics: Optional[Relationship] = None
104
+ pricePoints: Optional[Relationship] = None
105
+ promotedPurchases: Optional[Relationship] = None
106
+ reviewSubmissions: Optional[Relationship] = None
107
+ subscriptionGracePeriod: Optional[Relationship] = None
108
+ subscriptionGroups: Optional[Relationship] = None
@@ -0,0 +1,34 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from datetime import datetime
5
+ from typing import Optional
6
+
7
+ from .enums import PhasedReleaseState
8
+ from .resource import Resource
9
+
10
+
11
+ class AppStoreVersionPhasedRelease(Resource):
12
+ """
13
+ https://developer.apple.com/documentation/appstoreconnectapi/appstoreversionphasedrelease
14
+ """
15
+
16
+ attributes: Resource.Attributes
17
+ relationships: Optional[Relationships] = None
18
+
19
+ @dataclass
20
+ class Attributes(Resource.Attributes):
21
+ currentDayNumber: int
22
+ phasedReleaseState: PhasedReleaseState
23
+ startDate: datetime
24
+ totalPauseDuration: int
25
+
26
+ def __post_init__(self):
27
+ if isinstance(self.phasedReleaseState, str):
28
+ self.phasedReleaseState = PhasedReleaseState(self.phasedReleaseState)
29
+ if isinstance(self.startDate, str):
30
+ self.startDate = Resource.from_iso_8601(self.startDate)
31
+
32
+ @dataclass
33
+ class Relationships(Resource.Relationships):
34
+ pass
@@ -4,6 +4,7 @@ from dataclasses import dataclass
4
4
  from datetime import datetime
5
5
  from typing import Optional
6
6
 
7
+ from .enums import BuildAudienceType
7
8
  from .enums import BuildProcessingState
8
9
  from .resource import DictSerializable
9
10
  from .resource import Relationship
@@ -55,8 +56,15 @@ class Build(Resource):
55
56
  usesNonExemptEncryption: bool
56
57
  uploadedDate: datetime
57
58
  expirationDate: datetime
59
+ buildAudienceType: BuildAudienceType
60
+
61
+ computedMinMacOsVersion: Optional[str] = None
62
+ lsMinimumSystemVersion: Optional[str] = None
63
+ computedMinVisionOsVersion: Optional[str] = None
58
64
 
59
65
  def __post_init__(self):
66
+ if isinstance(self.buildAudienceType, str):
67
+ self.buildAudienceType = BuildAudienceType(self.buildAudienceType)
60
68
  if isinstance(self.processingState, str):
61
69
  self.processingState = BuildProcessingState(self.processingState)
62
70
  if isinstance(self.uploadedDate, str):
@@ -52,6 +52,15 @@ class BuildProcessingState(ResourceEnum):
52
52
  VALID = "VALID"
53
53
 
54
54
 
55
+ class BuildAudienceType(ResourceEnum):
56
+ """
57
+ https://developer.apple.com/documentation/appstoreconnectapi/buildaudiencetype
58
+ """
59
+
60
+ INTERNAL_ONLY = "INTERNAL_ONLY"
61
+ APP_STORE_ELIGIBLE = "APP_STORE_ELIGIBLE"
62
+
63
+
55
64
  class BundleIdPlatform(ResourceEnum):
56
65
  IOS = "IOS"
57
66
  MAC_OS = "MAC_OS"
@@ -251,6 +260,17 @@ class InternalBetaState(ResourceEnum):
251
260
  READY_FOR_BETA_TESTING = "READY_FOR_BETA_TESTING"
252
261
 
253
262
 
263
+ class PhasedReleaseState(ResourceEnum):
264
+ """
265
+ https://developer.apple.com/documentation/appstoreconnectapi/phasedreleasestate
266
+ """
267
+
268
+ ACTIVE = "ACTIVE"
269
+ COMPLETE = "COMPLETE"
270
+ INACTIVE = "INACTIVE"
271
+ PAUSED = "PAUSED"
272
+
273
+
254
274
  class Platform(ResourceEnum):
255
275
  IOS = "IOS"
256
276
  MAC_OS = "MAC_OS"
@@ -323,6 +343,7 @@ class ResourceType(ResourceEnum):
323
343
  APP_STORE_VERSIONS = "appStoreVersions"
324
344
  APP_STORE_VERSION_EXPERIMENTS = "appStoreVersionExperiments"
325
345
  APP_STORE_VERSION_LOCALIZATIONS = "appStoreVersionLocalizations"
346
+ APP_STORE_VERSION_PHASED_RELEASES = "appStoreVersionPhasedReleases"
326
347
  APP_STORE_VERSION_SUBMISSIONS = "appStoreVersionSubmissions"
327
348
  BETA_APP_LOCALIZATIONS = "betaAppLocalizations"
328
349
  BETA_APP_REVIEW_DETAILS = "betaAppReviewDetails"
@@ -392,3 +413,14 @@ class Locale(ResourceEnum):
392
413
  VI = "vi"
393
414
  ZH_HANS = "zh-Hans"
394
415
  ZH_HANT = "zh-Hant"
416
+
417
+
418
+ class SubscriptionStatusUrlVersion(ResourceEnum):
419
+ """
420
+ https://developer.apple.com/documentation/appstoreconnectapi/subscriptionstatusurlversion
421
+ """
422
+
423
+ V1 = "V1"
424
+ V2 = "V2"
425
+ v1 = "v1"
426
+ v2 = "v2"
@@ -16,6 +16,7 @@ from typing import Optional
16
16
  from typing import Set
17
17
  from typing import Tuple
18
18
  from typing import Type
19
+ from typing import TypeVar
19
20
  from typing import Union
20
21
  from typing import overload
21
22
 
@@ -25,6 +26,9 @@ from codemagic.utilities import log
25
26
 
26
27
  from .enums import ResourceType
27
28
 
29
+ LRD = TypeVar("LRD", bound="LinkedResourceData")
30
+ ResourceReference = Union["ResourceId", LRD]
31
+
28
32
 
29
33
  class ResourceId(str):
30
34
  pass
@@ -97,21 +101,21 @@ class PagingInformation(DictSerializable):
97
101
  self.paging = PagingInformation.Paging(**self.paging)
98
102
 
99
103
 
104
+ @dataclass
100
105
  class Links(DictSerializable):
101
106
  _OMIT_IF_NONE_KEYS = ("self", "related")
102
107
 
103
- def __init__(_self, self: Optional[str] = None, related: Optional[str] = None): # noqa: N805
104
- _self.self = self
105
- _self.related = related
108
+ self: Optional[str] = None
109
+ related: Optional[str] = None
106
110
 
107
111
 
112
+ @dataclass
108
113
  class ResourceLinks(DictSerializable):
109
114
  """
110
115
  https://developer.apple.com/documentation/appstoreconnectapi/resourcelinks
111
116
  """
112
117
 
113
- def __init__(_self, self): # noqa: N805
114
- _self.self = self
118
+ self: str
115
119
 
116
120
 
117
121
  @dataclass
@@ -207,9 +211,14 @@ class Resource(LinkedResourceData, metaclass=PrettyNameAbcMeta):
207
211
  class Relationships(DictSerializable, GracefulDataclassMixin):
208
212
  def __post_init__(self):
209
213
  for field in self.__dict__:
210
- value = getattr(self, field)
211
- if not isinstance(value, (Relationship, type(None))):
212
- setattr(self, field, Relationship(**value))
214
+ current_value = getattr(self, field)
215
+ if current_value is None or isinstance(current_value, Relationship):
216
+ continue
217
+
218
+ # Relationships should have at least 'links' attribute.
219
+ # Set the value to none for empty relationships.
220
+ updated_value = Relationship(**current_value) if current_value else None
221
+ setattr(self, field, updated_value)
213
222
 
214
223
  @classmethod
215
224
  def _create_attributes(cls, api_response) -> Attributes:
@@ -220,6 +229,12 @@ class Resource(LinkedResourceData, metaclass=PrettyNameAbcMeta):
220
229
  defined_fields = cls.Attributes.get_defined_fields(cls, api_response["attributes"])
221
230
  return cls.Attributes(**defined_fields)
222
231
 
232
+ @classmethod
233
+ def get_id(cls, resource_reference: ResourceReference) -> ResourceId:
234
+ if isinstance(resource_reference, LinkedResourceData):
235
+ return resource_reference.id
236
+ return resource_reference
237
+
223
238
  @classmethod
224
239
  def _create_relationships(cls, api_response) -> Relationships:
225
240
  if cls.Relationships is Resource.Relationships:
@@ -312,7 +327,8 @@ class Resource(LinkedResourceData, metaclass=PrettyNameAbcMeta):
312
327
  type_prefix = self.type.value.rstrip("s")
313
328
  name = re.sub(f"{type_prefix}s?", "", name)
314
329
  name = re.sub(r"([a-z])([A-Z])", r"\1 \2", name)
315
- return name.lower().capitalize()
330
+ name = name.lower().capitalize()
331
+ return re.sub("(i|vision|mac) os ", r"\1OS", name)
316
332
 
317
333
  def _hide_attribute_value(self, attribute_name: str) -> bool:
318
334
  if not hasattr(self.attributes, "__dataclass_fields__"):
@@ -0,0 +1,30 @@
1
+ from __future__ import annotations
2
+
3
+ import abc
4
+ import logging
5
+ import pathlib
6
+ from typing import Iterator
7
+
8
+
9
+ class PathFinderMixin(metaclass=abc.ABCMeta):
10
+ logger: logging.Logger
11
+
12
+ def glob(self, pattern: pathlib.Path) -> Iterator[pathlib.Path]:
13
+ if pattern.is_absolute():
14
+ self.logger.info(f"Searching for files matching {pattern}")
15
+ # absolute globs are not supported, match them as relative to root
16
+ relative_pattern = pattern.relative_to(pattern.anchor)
17
+ return pathlib.Path(pattern.anchor).glob(str(relative_pattern))
18
+ elif pattern == pathlib.Path("."):
19
+ self.logger.info(f"Searching for files matching {pattern.resolve()}")
20
+ # `Path('.').glob('.')` which this would essentially cause is erroneous.
21
+ # Return empty iterator as we cannot possibly find current directory from
22
+ # within the same directory.
23
+ return iter([])
24
+ else:
25
+ self.logger.info(f"Searching for files matching {pattern.resolve()}")
26
+ return pathlib.Path().glob(str(pattern))
27
+
28
+ def find_paths(self, *patterns: pathlib.Path) -> Iterator[pathlib.Path]:
29
+ for pattern in patterns:
30
+ yield from self.glob(pattern.expanduser())
@@ -8,6 +8,7 @@ import subprocess
8
8
  import time
9
9
  from contextlib import contextmanager
10
10
  from functools import lru_cache
11
+ from itertools import chain
11
12
  from typing import TYPE_CHECKING
12
13
  from typing import AnyStr
13
14
  from typing import Callable
@@ -296,11 +297,14 @@ class Altool(RunningCliAppMixin, StringConverterMixin):
296
297
 
297
298
  @classmethod
298
299
  def _get_action_result(cls, action_stdout: AnyStr) -> Optional[AltoolResult]:
299
- try:
300
- parsed_result = json.loads(action_stdout)
301
- return AltoolResult.create(**parsed_result)
302
- except (TypeError, ValueError):
303
- return None
300
+ # Try to parse the whole stdout at once first, and then do it backwards line by line
301
+ for line in chain([action_stdout], reversed(action_stdout.splitlines())):
302
+ try:
303
+ parsed_result = json.loads(line)
304
+ return AltoolResult.create(**parsed_result)
305
+ except (TypeError, ValueError):
306
+ continue
307
+ return None
304
308
 
305
309
  @classmethod
306
310
  def _log_process_output(cls, output: Optional[AnyStr], cli_app: Optional[CliApp]):