port-ocean 0.29.1__tar.gz → 0.29.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. {port_ocean-0.29.1 → port_ocean-0.29.2}/PKG-INFO +1 -1
  2. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/actions/execution_manager.py +46 -11
  3. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/integrations/mixins/utils.py +0 -31
  4. {port_ocean-0.29.1 → port_ocean-0.29.2}/pyproject.toml +1 -1
  5. {port_ocean-0.29.1 → port_ocean-0.29.2}/LICENSE.md +0 -0
  6. {port_ocean-0.29.1 → port_ocean-0.29.2}/README.md +0 -0
  7. {port_ocean-0.29.1 → port_ocean-0.29.2}/integrations/_infra/Dockerfile.Deb +0 -0
  8. {port_ocean-0.29.1 → port_ocean-0.29.2}/integrations/_infra/Dockerfile.alpine +0 -0
  9. {port_ocean-0.29.1 → port_ocean-0.29.2}/integrations/_infra/Dockerfile.base.builder +0 -0
  10. {port_ocean-0.29.1 → port_ocean-0.29.2}/integrations/_infra/Dockerfile.base.runner +0 -0
  11. {port_ocean-0.29.1 → port_ocean-0.29.2}/integrations/_infra/Dockerfile.dockerignore +0 -0
  12. {port_ocean-0.29.1 → port_ocean-0.29.2}/integrations/_infra/Dockerfile.local +0 -0
  13. {port_ocean-0.29.1 → port_ocean-0.29.2}/integrations/_infra/Makefile +0 -0
  14. {port_ocean-0.29.1 → port_ocean-0.29.2}/integrations/_infra/README.md +0 -0
  15. {port_ocean-0.29.1 → port_ocean-0.29.2}/integrations/_infra/entry_local.sh +0 -0
  16. {port_ocean-0.29.1 → port_ocean-0.29.2}/integrations/_infra/grpcio.sh +0 -0
  17. {port_ocean-0.29.1 → port_ocean-0.29.2}/integrations/_infra/init.sh +0 -0
  18. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/__init__.py +0 -0
  19. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/bootstrap.py +0 -0
  20. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cache/__init__.py +0 -0
  21. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cache/base.py +0 -0
  22. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cache/disk.py +0 -0
  23. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cache/errors.py +0 -0
  24. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cache/memory.py +0 -0
  25. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/__init__.py +0 -0
  26. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cli.py +0 -0
  27. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/commands/__init__.py +0 -0
  28. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/commands/defaults/__init___.py +0 -0
  29. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/commands/defaults/clean.py +0 -0
  30. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/commands/defaults/dock.py +0 -0
  31. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/commands/defaults/group.py +0 -0
  32. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/commands/list_integrations.py +0 -0
  33. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/commands/main.py +0 -0
  34. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/commands/new.py +0 -0
  35. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/commands/pull.py +0 -0
  36. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/commands/sail.py +0 -0
  37. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/commands/version.py +0 -0
  38. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/__init__.py +0 -0
  39. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/cookiecutter.json +0 -0
  40. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/extensions.py +0 -0
  41. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/hooks/post_gen_project.py +0 -0
  42. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.env.example +0 -0
  43. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.gitignore +0 -0
  44. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/.gitignore +0 -0
  45. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/blueprints.json +0 -0
  46. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/port-app-config.yml +0 -0
  47. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/spec.yaml +0 -0
  48. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/CHANGELOG.md +0 -0
  49. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/CONTRIBUTING.md +0 -0
  50. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/README.md +0 -0
  51. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/changelog/.gitignore +0 -0
  52. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/debug.py +0 -0
  53. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/main.py +0 -0
  54. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/poetry.toml +0 -0
  55. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/pyproject.toml +0 -0
  56. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/sonar-project.properties +0 -0
  57. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/tests/__init__.py +0 -0
  58. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/tests/test_sample.py +0 -0
  59. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/utils.py +0 -0
  60. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/__init__.py +0 -0
  61. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/auth/__init__.py +0 -0
  62. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/auth/auth_client.py +0 -0
  63. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/auth/oauth_client.py +0 -0
  64. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/port/__init__.py +0 -0
  65. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/port/authentication.py +0 -0
  66. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/port/client.py +0 -0
  67. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/port/mixins/__init__.py +0 -0
  68. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/port/mixins/actions.py +0 -0
  69. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/port/mixins/blueprints.py +0 -0
  70. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/port/mixins/entities.py +0 -0
  71. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/port/mixins/integrations.py +0 -0
  72. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/port/mixins/migrations.py +0 -0
  73. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/port/mixins/organization.py +0 -0
  74. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/port/retry_transport.py +0 -0
  75. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/port/types.py +0 -0
  76. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/port/utils.py +0 -0
  77. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/config/__init__.py +0 -0
  78. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/config/base.py +0 -0
  79. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/config/dynamic.py +0 -0
  80. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/config/settings.py +0 -0
  81. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/consumers/__init__.py +0 -0
  82. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/consumers/kafka_consumer.py +0 -0
  83. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/context/__init__.py +0 -0
  84. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/context/event.py +0 -0
  85. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/context/metric_resource.py +0 -0
  86. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/context/ocean.py +0 -0
  87. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/context/resource.py +0 -0
  88. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/__init__.py +0 -0
  89. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/defaults/__init__.py +0 -0
  90. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/defaults/clean.py +0 -0
  91. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/defaults/common.py +0 -0
  92. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/defaults/initialize.py +0 -0
  93. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/event_listener/__init__.py +0 -0
  94. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/event_listener/actions_only.py +0 -0
  95. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/event_listener/base.py +0 -0
  96. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/event_listener/factory.py +0 -0
  97. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/event_listener/http.py +0 -0
  98. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/event_listener/kafka.py +0 -0
  99. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/event_listener/once.py +0 -0
  100. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/event_listener/polling.py +0 -0
  101. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/event_listener/webhooks_only.py +0 -0
  102. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/__init__.py +0 -0
  103. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/actions/__init__.py +0 -0
  104. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/actions/abstract_executor.py +0 -0
  105. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/base.py +0 -0
  106. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/entities_state_applier/__init__.py +0 -0
  107. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/entities_state_applier/base.py +0 -0
  108. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/entities_state_applier/port/__init__.py +0 -0
  109. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/entities_state_applier/port/applier.py +0 -0
  110. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/entities_state_applier/port/get_related_entities.py +0 -0
  111. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/entities_state_applier/port/order_by_entities_dependencies.py +0 -0
  112. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/entity_processor/__init__.py +0 -0
  113. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/entity_processor/base.py +0 -0
  114. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/entity_processor/jq_entity_processor.py +0 -0
  115. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/entity_processor/jq_input_evaluator.py +0 -0
  116. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/port_app_config/__init__.py +0 -0
  117. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/port_app_config/api.py +0 -0
  118. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/port_app_config/base.py +0 -0
  119. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/port_app_config/models.py +0 -0
  120. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/queue/__init__.py +0 -0
  121. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/queue/abstract_queue.py +0 -0
  122. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/queue/group_queue.py +0 -0
  123. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/queue/local_queue.py +0 -0
  124. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/resync_state_updater/__init__.py +0 -0
  125. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/resync_state_updater/updater.py +0 -0
  126. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/webhook/__init__.py +0 -0
  127. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/webhook/abstract_webhook_processor.py +0 -0
  128. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/webhook/processor_manager.py +0 -0
  129. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/webhook/webhook_event.py +0 -0
  130. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/integrations/__init__.py +0 -0
  131. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/integrations/base.py +0 -0
  132. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/integrations/mixins/__init__.py +0 -0
  133. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/integrations/mixins/events.py +0 -0
  134. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/integrations/mixins/handler.py +0 -0
  135. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/integrations/mixins/live_events.py +0 -0
  136. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/integrations/mixins/sync.py +0 -0
  137. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/integrations/mixins/sync_raw.py +0 -0
  138. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/models.py +0 -0
  139. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/ocean_types.py +0 -0
  140. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/utils/entity_topological_sorter.py +0 -0
  141. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/utils/utils.py +0 -0
  142. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/debug_cli.py +0 -0
  143. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/exceptions/__init__.py +0 -0
  144. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/exceptions/api.py +0 -0
  145. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/exceptions/base.py +0 -0
  146. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/exceptions/clients.py +0 -0
  147. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/exceptions/context.py +0 -0
  148. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/exceptions/core.py +0 -0
  149. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/exceptions/execution_manager.py +0 -0
  150. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/exceptions/port_defaults.py +0 -0
  151. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/exceptions/utils.py +0 -0
  152. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/exceptions/webhook_processor.py +0 -0
  153. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/helpers/__init__.py +0 -0
  154. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/helpers/async_client.py +0 -0
  155. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/helpers/metric/metric.py +0 -0
  156. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/helpers/metric/utils.py +0 -0
  157. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/helpers/retry.py +0 -0
  158. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/helpers/stream.py +0 -0
  159. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/log/__init__.py +0 -0
  160. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/log/handlers.py +0 -0
  161. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/log/logger_setup.py +0 -0
  162. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/log/sensetive.py +0 -0
  163. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/middlewares.py +0 -0
  164. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/ocean.py +0 -0
  165. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/py.typed +0 -0
  166. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/run.py +0 -0
  167. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/sonar-project.properties +0 -0
  168. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/__init__.py +0 -0
  169. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/cache/__init__.py +0 -0
  170. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/cache/test_disk_cache.py +0 -0
  171. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/cache/test_memory_cache.py +0 -0
  172. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/clients/__init__.py +0 -0
  173. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/clients/oauth/__init__.py +0 -0
  174. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/clients/oauth/test_oauth_client.py +0 -0
  175. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/clients/port/mixins/test_entities.py +0 -0
  176. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/clients/port/mixins/test_integrations.py +0 -0
  177. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/clients/port/mixins/test_organization_mixin.py +0 -0
  178. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/config/test_config.py +0 -0
  179. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/conftest.py +0 -0
  180. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/conftest.py +0 -0
  181. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/defaults/test_common.py +0 -0
  182. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/event_listener/test_kafka.py +0 -0
  183. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/actions/test_execution_manager.py +0 -0
  184. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/entities_state_applier/test_applier.py +0 -0
  185. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/entity_processor/test_jq_entity_processor.py +0 -0
  186. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/entity_processor/test_jq_input_evaluator.py +0 -0
  187. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/mixins/test_live_events.py +0 -0
  188. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/mixins/test_sync_raw.py +0 -0
  189. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/port_app_config/test_api.py +0 -0
  190. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/port_app_config/test_base.py +0 -0
  191. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/queue/test_group_queue.py +0 -0
  192. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/queue/test_local_queue.py +0 -0
  193. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/webhook/test_abstract_webhook_processor.py +0 -0
  194. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/webhook/test_processor_manager.py +0 -0
  195. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/webhook/test_webhook_event.py +0 -0
  196. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/test_utils.py +0 -0
  197. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/utils/test_entity_topological_sorter.py +0 -0
  198. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/utils/test_get_port_diff.py +0 -0
  199. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/utils/test_resolve_entities_diff.py +0 -0
  200. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/helpers/__init__.py +0 -0
  201. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/helpers/fake_port_api.py +0 -0
  202. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/helpers/fixtures.py +0 -0
  203. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/helpers/integration.py +0 -0
  204. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/helpers/ocean_app.py +0 -0
  205. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/helpers/port_client.py +0 -0
  206. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/helpers/smoke_test.py +0 -0
  207. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/helpers/test_retry.py +0 -0
  208. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/log/test_handlers.py +0 -0
  209. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/test_metric.py +0 -0
  210. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/test_ocean.py +0 -0
  211. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/test_smoke.py +0 -0
  212. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/utils/test_async_iterators.py +0 -0
  213. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/utils/test_cache.py +0 -0
  214. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/utils/__init__.py +0 -0
  215. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/utils/async_http.py +0 -0
  216. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/utils/async_iterators.py +0 -0
  217. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/utils/cache.py +0 -0
  218. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/utils/ipc.py +0 -0
  219. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/utils/misc.py +0 -0
  220. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/utils/queue_utils.py +0 -0
  221. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/utils/repeat.py +0 -0
  222. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/utils/signal.py +0 -0
  223. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/utils/time.py +0 -0
  224. {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: port-ocean
3
- Version: 0.29.1
3
+ Version: 0.29.2
4
4
  Summary: Port Ocean is a CLI tool for managing your Port projects.
5
5
  Home-page: https://app.getport.io
6
6
  Keywords: ocean,port-ocean,port
@@ -22,6 +22,7 @@ from port_ocean.exceptions.execution_manager import (
22
22
  from port_ocean.utils.signal import SignalHandler
23
23
 
24
24
  RATE_LIMIT_MAX_BACKOFF_SECONDS = 10
25
+ QUEUE_GET_TIMEOUT_SECONDS = 1
25
26
  GLOBAL_SOURCE = "__global__"
26
27
 
27
28
 
@@ -86,12 +87,12 @@ class ExecutionManager:
86
87
  ):
87
88
  self._webhook_manager = webhook_manager
88
89
  self._polling_task: asyncio.Task[None] | None = None
89
- self._workers_pool: set[asyncio.Task[None]] = set()
90
+ self._workers_pool: set[asyncio.Task[None]] = set[asyncio.Task[None]]()
90
91
  self._actions_executors: Dict[str, AbstractExecutor] = {}
91
92
  self._is_shutting_down = asyncio.Event()
92
93
  self._global_queue = LocalQueue[ActionRun]()
93
94
  self._partition_queues: Dict[str, AbstractQueue[ActionRun]] = {}
94
- self._deduplication_set: Set[str] = set()
95
+ self._deduplication_set: Set[str] = set[str]()
95
96
  self._queues_locks: Dict[str, asyncio.Lock] = {GLOBAL_SOURCE: asyncio.Lock()}
96
97
  self._active_sources: AbstractQueue[str] = LocalQueue[str]()
97
98
  self._workers_count: int = workers_count
@@ -186,6 +187,7 @@ class ExecutionManager:
186
187
  await asyncio.sleep(self._poll_check_interval_seconds)
187
188
  continue
188
189
 
190
+ logger.info(f"Adding {len(runs)} runs to queues", runs_count=len(runs))
189
191
  for run in runs:
190
192
  try:
191
193
  action_type = run.payload.integrationActionType
@@ -253,7 +255,7 @@ class ExecutionManager:
253
255
  Add a run to the queue, if the queue is empty, add the source to the active sources.
254
256
  """
255
257
  if queue_name != GLOBAL_SOURCE and queue_name not in self._partition_queues:
256
- self._partition_queues[queue_name] = LocalQueue()
258
+ self._partition_queues[queue_name] = LocalQueue[ActionRun]()
257
259
  self._queues_locks[queue_name] = asyncio.Lock()
258
260
 
259
261
  queue = (
@@ -265,7 +267,11 @@ class ExecutionManager:
265
267
  if await queue.size() == 0:
266
268
  await self._active_sources.put(queue_name)
267
269
  self._deduplication_set.add(run.id)
268
- logger.info(f"Adding run to queue {queue_name}", run_id=run.id)
270
+ logger.info(
271
+ f"Adding run to queue {queue_name}",
272
+ run_id=run.id,
273
+ queue_name=queue_name,
274
+ )
269
275
  await queue.put(run)
270
276
 
271
277
  async def _add_source_if_not_empty(self, source_name: str) -> None:
@@ -278,7 +284,14 @@ class ExecutionManager:
278
284
  if source_name == GLOBAL_SOURCE
279
285
  else self._partition_queues[source_name]
280
286
  )
281
- if await queue.size() > 0:
287
+
288
+ queue_size = await queue.size()
289
+ if queue_size > 0:
290
+ logger.debug(
291
+ f"Adding source {source_name} back to active sources as it's not empty",
292
+ source_name=source_name,
293
+ queue_size=queue_size,
294
+ )
282
295
  await self._active_sources.put(source_name)
283
296
 
284
297
  async def _process_actions_runs(self) -> None:
@@ -294,6 +307,10 @@ class ExecutionManager:
294
307
  self._active_sources.get(),
295
308
  timeout=self._max_wait_seconds_before_shutdown / 3,
296
309
  )
310
+ logger.debug(
311
+ f"Processing run from {source} queue",
312
+ queue_size=await self._get_queues_size(),
313
+ )
297
314
  except asyncio.TimeoutError:
298
315
  continue
299
316
 
@@ -305,9 +322,20 @@ class ExecutionManager:
305
322
  logger.exception("Worker processing error", source=source, error=e)
306
323
 
307
324
  async def _handle_global_queue_once(self) -> None:
325
+ """
326
+ Try to process a single run from the global queue.
327
+ """
308
328
  try:
309
329
  async with self._queues_locks[GLOBAL_SOURCE]:
310
- run = await self._global_queue.get()
330
+ try:
331
+ logger.debug("Handling run from global queue")
332
+ run = await asyncio.wait_for(
333
+ self._global_queue.get(), timeout=QUEUE_GET_TIMEOUT_SECONDS
334
+ )
335
+ except asyncio.TimeoutError:
336
+ logger.debug("Global queue is empty, skipping")
337
+ return
338
+
311
339
  if run.id in self._deduplication_set:
312
340
  self._deduplication_set.remove(run.id)
313
341
 
@@ -319,14 +347,21 @@ class ExecutionManager:
319
347
  async def _handle_partition_queue_once(self, partition_name: str) -> None:
320
348
  """
321
349
  Try to process a single run from the given partition queue.
322
- Returns True if work was done, False otherwise.
323
350
  """
324
351
  queue = self._partition_queues[partition_name]
325
352
  try:
326
353
  async with self._queues_locks[partition_name]:
327
- run = await queue.get()
328
- if run.id in self._deduplication_set:
329
- self._deduplication_set.remove(run.id)
354
+ try:
355
+ logger.debug(f"Handling run from {partition_name} queue")
356
+ run = await asyncio.wait_for(
357
+ queue.get(), timeout=QUEUE_GET_TIMEOUT_SECONDS
358
+ )
359
+ if run.id in self._deduplication_set:
360
+ self._deduplication_set.remove(run.id)
361
+ except asyncio.TimeoutError:
362
+ logger.debug(f"Partition queue {partition_name} is empty, skipping")
363
+ return
364
+
330
365
  await self._execute_run(run)
331
366
  finally:
332
367
  await queue.commit()
@@ -367,7 +402,7 @@ class ExecutionManager:
367
402
  return
368
403
 
369
404
  await ocean.port_client.acknowledge_run(run.id)
370
- logger.debug("Run acknowledged successfully")
405
+ logger.info("Run acknowledged successfully")
371
406
  except RunAlreadyAcknowledgedError:
372
407
  logger.warning(
373
408
  "Run already being processed by another worker, skipping execution",
@@ -324,34 +324,3 @@ def clear_http_client_context() -> None:
324
324
  _port_http_client.pop()
325
325
  except (RuntimeError, AttributeError):
326
326
  pass
327
-
328
- class _AiterReader:
329
- """
330
- Wraps an iterable of byte chunks (e.g., response.iter_bytes())
331
- and exposes a .read(n) method that ijson expects.
332
- """
333
- def __init__(self, iterable):
334
- self._iter = iter(iterable)
335
- self._buf = bytearray()
336
- self._eof = False
337
-
338
- def read(self, n=-1):
339
- # If n < 0, return everything until EOF
340
- if n is None or n < 0:
341
- chunks = [bytes(self._buf)]
342
- self._buf.clear()
343
- chunks.extend(self._iter) # drain the iterator
344
- return b"".join(chunks)
345
-
346
- # Fill buffer until we have n bytes or hit EOF
347
- while len(self._buf) < n and not self._eof:
348
- try:
349
- self._buf.extend(next(self._iter))
350
- except StopIteration:
351
- self._eof = True
352
- break
353
-
354
- # Serve up to n bytes
355
- out = bytes(self._buf[:n])
356
- del self._buf[:n]
357
- return out
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "port-ocean"
3
- version = "0.29.1"
3
+ version = "0.29.2"
4
4
  description = "Port Ocean is a CLI tool for managing your Port projects."
5
5
  readme = "README.md"
6
6
  homepage = "https://app.getport.io"
File without changes
File without changes