port-ocean 0.28.1__tar.gz → 0.28.3__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 (214) hide show
  1. {port_ocean-0.28.1 → port_ocean-0.28.3}/PKG-INFO +1 -1
  2. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/handlers/resync_state_updater/updater.py +7 -3
  3. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/helpers/metric/metric.py +1 -1
  4. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/log/logger_setup.py +6 -4
  5. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/ocean.py +16 -0
  6. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/utils/misc.py +5 -3
  7. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/utils/signal.py +23 -8
  8. {port_ocean-0.28.1 → port_ocean-0.28.3}/pyproject.toml +1 -1
  9. {port_ocean-0.28.1 → port_ocean-0.28.3}/LICENSE.md +0 -0
  10. {port_ocean-0.28.1 → port_ocean-0.28.3}/README.md +0 -0
  11. {port_ocean-0.28.1 → port_ocean-0.28.3}/integrations/_infra/Dockerfile.Deb +0 -0
  12. {port_ocean-0.28.1 → port_ocean-0.28.3}/integrations/_infra/Dockerfile.alpine +0 -0
  13. {port_ocean-0.28.1 → port_ocean-0.28.3}/integrations/_infra/Dockerfile.base.builder +0 -0
  14. {port_ocean-0.28.1 → port_ocean-0.28.3}/integrations/_infra/Dockerfile.base.runner +0 -0
  15. {port_ocean-0.28.1 → port_ocean-0.28.3}/integrations/_infra/Dockerfile.dockerignore +0 -0
  16. {port_ocean-0.28.1 → port_ocean-0.28.3}/integrations/_infra/Dockerfile.local +0 -0
  17. {port_ocean-0.28.1 → port_ocean-0.28.3}/integrations/_infra/Makefile +0 -0
  18. {port_ocean-0.28.1 → port_ocean-0.28.3}/integrations/_infra/README.md +0 -0
  19. {port_ocean-0.28.1 → port_ocean-0.28.3}/integrations/_infra/entry_local.sh +0 -0
  20. {port_ocean-0.28.1 → port_ocean-0.28.3}/integrations/_infra/grpcio.sh +0 -0
  21. {port_ocean-0.28.1 → port_ocean-0.28.3}/integrations/_infra/init.sh +0 -0
  22. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/__init__.py +0 -0
  23. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/bootstrap.py +0 -0
  24. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cache/__init__.py +0 -0
  25. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cache/base.py +0 -0
  26. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cache/disk.py +0 -0
  27. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cache/errors.py +0 -0
  28. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cache/memory.py +0 -0
  29. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/__init__.py +0 -0
  30. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/cli.py +0 -0
  31. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/commands/__init__.py +0 -0
  32. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/commands/defaults/__init___.py +0 -0
  33. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/commands/defaults/clean.py +0 -0
  34. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/commands/defaults/dock.py +0 -0
  35. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/commands/defaults/group.py +0 -0
  36. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/commands/list_integrations.py +0 -0
  37. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/commands/main.py +0 -0
  38. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/commands/new.py +0 -0
  39. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/commands/pull.py +0 -0
  40. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/commands/sail.py +0 -0
  41. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/commands/version.py +0 -0
  42. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/cookiecutter/__init__.py +0 -0
  43. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/cookiecutter/cookiecutter.json +0 -0
  44. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/cookiecutter/extensions.py +0 -0
  45. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/cookiecutter/hooks/post_gen_project.py +0 -0
  46. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.env.example +0 -0
  47. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.gitignore +0 -0
  48. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/.gitignore +0 -0
  49. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/blueprints.json +0 -0
  50. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/port-app-config.yml +0 -0
  51. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/spec.yaml +0 -0
  52. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/CHANGELOG.md +0 -0
  53. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/CONTRIBUTING.md +0 -0
  54. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/README.md +0 -0
  55. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/changelog/.gitignore +0 -0
  56. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/debug.py +0 -0
  57. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/main.py +0 -0
  58. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/poetry.toml +0 -0
  59. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/pyproject.toml +0 -0
  60. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/sonar-project.properties +0 -0
  61. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/tests/__init__.py +0 -0
  62. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/tests/test_sample.py +0 -0
  63. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/cli/utils.py +0 -0
  64. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/clients/__init__.py +0 -0
  65. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/clients/auth/__init__.py +0 -0
  66. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/clients/auth/auth_client.py +0 -0
  67. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/clients/auth/oauth_client.py +0 -0
  68. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/clients/port/__init__.py +0 -0
  69. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/clients/port/authentication.py +0 -0
  70. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/clients/port/client.py +0 -0
  71. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/clients/port/mixins/__init__.py +0 -0
  72. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/clients/port/mixins/blueprints.py +0 -0
  73. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/clients/port/mixins/entities.py +0 -0
  74. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/clients/port/mixins/integrations.py +0 -0
  75. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/clients/port/mixins/migrations.py +0 -0
  76. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/clients/port/mixins/organization.py +0 -0
  77. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/clients/port/retry_transport.py +0 -0
  78. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/clients/port/types.py +0 -0
  79. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/clients/port/utils.py +0 -0
  80. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/config/__init__.py +0 -0
  81. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/config/base.py +0 -0
  82. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/config/dynamic.py +0 -0
  83. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/config/settings.py +0 -0
  84. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/consumers/__init__.py +0 -0
  85. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/consumers/kafka_consumer.py +0 -0
  86. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/context/__init__.py +0 -0
  87. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/context/event.py +0 -0
  88. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/context/metric_resource.py +0 -0
  89. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/context/ocean.py +0 -0
  90. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/context/resource.py +0 -0
  91. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/__init__.py +0 -0
  92. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/defaults/__init__.py +0 -0
  93. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/defaults/clean.py +0 -0
  94. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/defaults/common.py +0 -0
  95. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/defaults/initialize.py +0 -0
  96. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/event_listener/__init__.py +0 -0
  97. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/event_listener/base.py +0 -0
  98. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/event_listener/factory.py +0 -0
  99. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/event_listener/http.py +0 -0
  100. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/event_listener/kafka.py +0 -0
  101. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/event_listener/once.py +0 -0
  102. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/event_listener/polling.py +0 -0
  103. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/event_listener/webhooks_only.py +0 -0
  104. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/handlers/__init__.py +0 -0
  105. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/handlers/base.py +0 -0
  106. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/handlers/entities_state_applier/__init__.py +0 -0
  107. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/handlers/entities_state_applier/base.py +0 -0
  108. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/handlers/entities_state_applier/port/__init__.py +0 -0
  109. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/handlers/entities_state_applier/port/applier.py +0 -0
  110. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/handlers/entities_state_applier/port/get_related_entities.py +0 -0
  111. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/handlers/entities_state_applier/port/order_by_entities_dependencies.py +0 -0
  112. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/handlers/entity_processor/__init__.py +0 -0
  113. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/handlers/entity_processor/base.py +0 -0
  114. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/handlers/entity_processor/jq_entity_processor.py +0 -0
  115. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/handlers/port_app_config/__init__.py +0 -0
  116. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/handlers/port_app_config/api.py +0 -0
  117. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/handlers/port_app_config/base.py +0 -0
  118. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/handlers/port_app_config/models.py +0 -0
  119. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/handlers/queue/__init__.py +0 -0
  120. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/handlers/queue/abstract_queue.py +0 -0
  121. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/handlers/queue/group_queue.py +0 -0
  122. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/handlers/queue/local_queue.py +0 -0
  123. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/handlers/resync_state_updater/__init__.py +0 -0
  124. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/handlers/webhook/__init__.py +0 -0
  125. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/handlers/webhook/abstract_webhook_processor.py +0 -0
  126. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/handlers/webhook/processor_manager.py +0 -0
  127. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/handlers/webhook/webhook_event.py +0 -0
  128. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/integrations/__init__.py +0 -0
  129. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/integrations/base.py +0 -0
  130. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/integrations/mixins/__init__.py +0 -0
  131. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/integrations/mixins/events.py +0 -0
  132. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/integrations/mixins/handler.py +0 -0
  133. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/integrations/mixins/live_events.py +0 -0
  134. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/integrations/mixins/sync.py +0 -0
  135. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/integrations/mixins/sync_raw.py +0 -0
  136. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/integrations/mixins/utils.py +0 -0
  137. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/models.py +0 -0
  138. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/ocean_types.py +0 -0
  139. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/utils/entity_topological_sorter.py +0 -0
  140. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/core/utils/utils.py +0 -0
  141. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/debug_cli.py +0 -0
  142. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/exceptions/__init__.py +0 -0
  143. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/exceptions/api.py +0 -0
  144. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/exceptions/base.py +0 -0
  145. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/exceptions/clients.py +0 -0
  146. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/exceptions/context.py +0 -0
  147. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/exceptions/core.py +0 -0
  148. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/exceptions/port_defaults.py +0 -0
  149. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/exceptions/utils.py +0 -0
  150. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/exceptions/webhook_processor.py +0 -0
  151. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/helpers/__init__.py +0 -0
  152. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/helpers/async_client.py +0 -0
  153. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/helpers/metric/utils.py +0 -0
  154. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/helpers/retry.py +0 -0
  155. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/helpers/stream.py +0 -0
  156. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/log/__init__.py +0 -0
  157. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/log/handlers.py +0 -0
  158. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/log/sensetive.py +0 -0
  159. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/middlewares.py +0 -0
  160. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/py.typed +0 -0
  161. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/run.py +0 -0
  162. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/sonar-project.properties +0 -0
  163. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/__init__.py +0 -0
  164. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/cache/__init__.py +0 -0
  165. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/cache/test_disk_cache.py +0 -0
  166. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/cache/test_memory_cache.py +0 -0
  167. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/clients/__init__.py +0 -0
  168. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/clients/oauth/__init__.py +0 -0
  169. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/clients/oauth/test_oauth_client.py +0 -0
  170. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/clients/port/mixins/test_entities.py +0 -0
  171. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/clients/port/mixins/test_integrations.py +0 -0
  172. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/clients/port/mixins/test_organization_mixin.py +0 -0
  173. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/config/test_config.py +0 -0
  174. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/conftest.py +0 -0
  175. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/core/conftest.py +0 -0
  176. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/core/defaults/test_common.py +0 -0
  177. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/core/event_listener/test_kafka.py +0 -0
  178. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/core/handlers/entities_state_applier/test_applier.py +0 -0
  179. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/core/handlers/entity_processor/test_jq_entity_processor.py +0 -0
  180. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/core/handlers/mixins/test_live_events.py +0 -0
  181. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/core/handlers/mixins/test_sync_raw.py +0 -0
  182. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/core/handlers/port_app_config/test_api.py +0 -0
  183. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/core/handlers/port_app_config/test_base.py +0 -0
  184. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/core/handlers/queue/test_group_queue.py +0 -0
  185. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/core/handlers/queue/test_local_queue.py +0 -0
  186. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/core/handlers/webhook/test_abstract_webhook_processor.py +0 -0
  187. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/core/handlers/webhook/test_processor_manager.py +0 -0
  188. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/core/handlers/webhook/test_webhook_event.py +0 -0
  189. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/core/test_utils.py +0 -0
  190. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/core/utils/test_entity_topological_sorter.py +0 -0
  191. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/core/utils/test_resolve_entities_diff.py +0 -0
  192. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/helpers/__init__.py +0 -0
  193. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/helpers/fake_port_api.py +0 -0
  194. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/helpers/fixtures.py +0 -0
  195. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/helpers/integration.py +0 -0
  196. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/helpers/ocean_app.py +0 -0
  197. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/helpers/port_client.py +0 -0
  198. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/helpers/smoke_test.py +0 -0
  199. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/helpers/test_retry.py +0 -0
  200. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/log/test_handlers.py +0 -0
  201. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/test_metric.py +0 -0
  202. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/test_ocean.py +0 -0
  203. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/test_smoke.py +0 -0
  204. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/utils/test_async_iterators.py +0 -0
  205. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/tests/utils/test_cache.py +0 -0
  206. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/utils/__init__.py +0 -0
  207. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/utils/async_http.py +0 -0
  208. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/utils/async_iterators.py +0 -0
  209. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/utils/cache.py +0 -0
  210. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/utils/ipc.py +0 -0
  211. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/utils/queue_utils.py +0 -0
  212. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/utils/repeat.py +0 -0
  213. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/utils/time.py +0 -0
  214. {port_ocean-0.28.1 → port_ocean-0.28.3}/port_ocean/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: port-ocean
3
- Version: 0.28.1
3
+ Version: 0.28.3
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
@@ -1,10 +1,11 @@
1
1
  import datetime
2
2
  from typing import Any, Literal
3
+
3
4
  from port_ocean.clients.port.client import PortClient
5
+ from port_ocean.context.ocean import ocean
6
+ from port_ocean.helpers.metric.metric import MetricPhase, MetricType
4
7
  from port_ocean.utils.misc import IntegrationStateStatus
5
8
  from port_ocean.utils.time import get_next_occurrence
6
- from port_ocean.context.ocean import ocean
7
- from port_ocean.helpers.metric.metric import MetricType, MetricPhase
8
9
 
9
10
 
10
11
  class ResyncStateUpdater:
@@ -59,7 +60,9 @@ class ResyncStateUpdater:
59
60
  async def update_after_resync(
60
61
  self,
61
62
  status: Literal[
62
- IntegrationStateStatus.Completed, IntegrationStateStatus.Failed
63
+ IntegrationStateStatus.Completed,
64
+ IntegrationStateStatus.Failed,
65
+ IntegrationStateStatus.Aborted,
63
66
  ] = IntegrationStateStatus.Completed,
64
67
  interval: int | None = None,
65
68
  custom_start_time: datetime.datetime | None = None,
@@ -99,3 +102,4 @@ class ResyncStateUpdater:
99
102
  await ocean.metrics.report_sync_metrics(
100
103
  kinds=[ocean.metrics.current_resource_kind()]
101
104
  )
105
+ ocean.metrics.event_id = f"{ocean.metrics.event_id}-done"
@@ -131,7 +131,7 @@ class Metrics:
131
131
  self.load_metrics()
132
132
  self._integration_version: Optional[str] = None
133
133
  self._ocean_version: Optional[str] = None
134
- self.event_id = ""
134
+ self._event_id = ""
135
135
  self.sync_state = SyncState.PENDING
136
136
 
137
137
  @property
@@ -1,9 +1,9 @@
1
- import sys
2
1
  import os
2
+ import sys
3
+ import uuid
3
4
  from logging import LogRecord
4
5
  from logging.handlers import QueueHandler, QueueListener
5
6
  from queue import Queue
6
- import uuid
7
7
 
8
8
  import loguru
9
9
  from loguru import logger
@@ -60,8 +60,10 @@ def _http_loguru_handler(level: LogLevelType) -> None:
60
60
  logger.configure(patcher=exception_deserializer)
61
61
 
62
62
  http_memory_handler = HTTPMemoryHandler()
63
- signal_handler.register(http_memory_handler.wait_for_lingering_threads)
64
- signal_handler.register(http_memory_handler.flush)
63
+ signal_handler.register(
64
+ http_memory_handler.wait_for_lingering_threads, priority=-200
65
+ )
66
+ signal_handler.register(http_memory_handler.flush, priority=-200)
65
67
 
66
68
  queue_listener = QueueListener(queue, http_memory_handler)
67
69
  queue_listener.start()
@@ -97,6 +97,22 @@ class Ocean:
97
97
  )
98
98
  self.app_initialized = False
99
99
 
100
+ signal_handler.register(self._report_resync_aborted)
101
+
102
+ async def _report_resync_aborted(self) -> None:
103
+ """
104
+ Report resync status as aborted when the app receives a kill signal.
105
+ This ensures Port is notified that the integration was interrupted.
106
+ """
107
+ try:
108
+ if self.metrics.event_id.find("-done") == -1:
109
+ await self.resync_state_updater.update_after_resync(
110
+ IntegrationStateStatus.Aborted
111
+ )
112
+ logger.info("Resync status reported as aborted due to app shutdown")
113
+ except Exception as e:
114
+ logger.warning(f"Failed to report resync status on shutdown: {e}")
115
+
100
116
  def _get_process_execution_mode(self) -> ProcessExecutionMode:
101
117
  if self.config.process_execution_mode:
102
118
  return self.config.process_execution_mode
@@ -1,11 +1,12 @@
1
- from enum import Enum
2
1
  import inspect
3
- from importlib.util import spec_from_file_location, module_from_spec
2
+ from enum import Enum
3
+ from importlib.util import module_from_spec, spec_from_file_location
4
4
  from pathlib import Path
5
5
  from time import time
6
6
  from types import ModuleType
7
- from typing import Callable, Any
7
+ from typing import Any, Callable
8
8
  from uuid import uuid4
9
+
9
10
  import tomli
10
11
  import yaml
11
12
 
@@ -14,6 +15,7 @@ class IntegrationStateStatus(Enum):
14
15
  Running = "running"
15
16
  Failed = "failed"
16
17
  Completed = "completed"
18
+ Aborted = "aborted"
17
19
 
18
20
 
19
21
  def get_time(seconds_precision: bool = True) -> float:
@@ -1,37 +1,52 @@
1
1
  from asyncio import iscoroutinefunction
2
- from typing import Callable, Any
2
+ from typing import Any, Callable
3
3
 
4
4
  from werkzeug.local import LocalProxy, LocalStack
5
5
 
6
6
  from port_ocean.exceptions.utils import (
7
- SignalHandlerNotInitialized,
8
7
  SignalHandlerAlreadyInitialized,
8
+ SignalHandlerNotInitialized,
9
9
  )
10
10
  from port_ocean.utils.misc import generate_uuid
11
11
 
12
12
 
13
13
  class SignalHandler:
14
14
  def __init__(self) -> None:
15
- self._handlers: dict[str, Callable[[], Any]] = {}
15
+ self._handlers: dict[str, tuple[Callable[[], Any], int]] = {}
16
16
 
17
17
  async def exit(self) -> None:
18
18
  """
19
19
  Handles the exit signal.
20
+ Executes handlers in priority order (highest priority first).
20
21
  """
21
- while self._handlers:
22
- _, handler = self._handlers.popitem()
22
+ # Sort handlers by priority (highest first) and execute them
23
+ sorted_handlers = sorted(
24
+ self._handlers.items(), key=lambda x: x[1][1], reverse=True
25
+ )
26
+
27
+ for _id, (handler, _) in sorted_handlers:
23
28
  if iscoroutinefunction(handler):
24
29
  await handler()
25
30
  else:
26
31
  handler()
27
32
 
28
- def register(self, callback: Callable[[], Any]) -> str:
29
- _id = generate_uuid()
30
- self._handlers[_id] = callback
33
+ def register(self, callback: Callable[[], Any], priority: int = 0) -> str:
34
+ """
35
+ Register a callback with a priority.
36
+
37
+ Args:
38
+ callback: The callback function to register
39
+ priority: Priority level (higher numbers execute first, default: 0)
31
40
 
41
+ Returns:
42
+ Unique identifier for the registered callback
43
+ """
44
+ _id = generate_uuid()
45
+ self._handlers[_id] = (callback, priority)
32
46
  return _id
33
47
 
34
48
  def unregister(self, _id: str) -> None:
49
+ """Unregister a callback by its ID."""
35
50
  del self._handlers[_id]
36
51
 
37
52
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "port-ocean"
3
- version = "0.28.1"
3
+ version = "0.28.3"
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