port-ocean 0.28.9__tar.gz → 0.28.11__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.

Potentially problematic release.


This version of port-ocean might be problematic. Click here for more details.

Files changed (215) hide show
  1. {port_ocean-0.28.9 → port_ocean-0.28.11}/PKG-INFO +1 -1
  2. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/clients/port/mixins/integrations.py +1 -1
  3. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/handlers/port_app_config/models.py +3 -1
  4. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/utils/utils.py +16 -5
  5. port_ocean-0.28.11/port_ocean/tests/core/utils/test_get_port_diff.py +164 -0
  6. {port_ocean-0.28.9 → port_ocean-0.28.11}/pyproject.toml +1 -1
  7. {port_ocean-0.28.9 → port_ocean-0.28.11}/LICENSE.md +0 -0
  8. {port_ocean-0.28.9 → port_ocean-0.28.11}/README.md +0 -0
  9. {port_ocean-0.28.9 → port_ocean-0.28.11}/integrations/_infra/Dockerfile.Deb +0 -0
  10. {port_ocean-0.28.9 → port_ocean-0.28.11}/integrations/_infra/Dockerfile.alpine +0 -0
  11. {port_ocean-0.28.9 → port_ocean-0.28.11}/integrations/_infra/Dockerfile.base.builder +0 -0
  12. {port_ocean-0.28.9 → port_ocean-0.28.11}/integrations/_infra/Dockerfile.base.runner +0 -0
  13. {port_ocean-0.28.9 → port_ocean-0.28.11}/integrations/_infra/Dockerfile.dockerignore +0 -0
  14. {port_ocean-0.28.9 → port_ocean-0.28.11}/integrations/_infra/Dockerfile.local +0 -0
  15. {port_ocean-0.28.9 → port_ocean-0.28.11}/integrations/_infra/Makefile +0 -0
  16. {port_ocean-0.28.9 → port_ocean-0.28.11}/integrations/_infra/README.md +0 -0
  17. {port_ocean-0.28.9 → port_ocean-0.28.11}/integrations/_infra/entry_local.sh +0 -0
  18. {port_ocean-0.28.9 → port_ocean-0.28.11}/integrations/_infra/grpcio.sh +0 -0
  19. {port_ocean-0.28.9 → port_ocean-0.28.11}/integrations/_infra/init.sh +0 -0
  20. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/__init__.py +0 -0
  21. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/bootstrap.py +0 -0
  22. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cache/__init__.py +0 -0
  23. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cache/base.py +0 -0
  24. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cache/disk.py +0 -0
  25. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cache/errors.py +0 -0
  26. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cache/memory.py +0 -0
  27. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/__init__.py +0 -0
  28. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/cli.py +0 -0
  29. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/commands/__init__.py +0 -0
  30. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/commands/defaults/__init___.py +0 -0
  31. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/commands/defaults/clean.py +0 -0
  32. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/commands/defaults/dock.py +0 -0
  33. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/commands/defaults/group.py +0 -0
  34. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/commands/list_integrations.py +0 -0
  35. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/commands/main.py +0 -0
  36. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/commands/new.py +0 -0
  37. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/commands/pull.py +0 -0
  38. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/commands/sail.py +0 -0
  39. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/commands/version.py +0 -0
  40. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/cookiecutter/__init__.py +0 -0
  41. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/cookiecutter/cookiecutter.json +0 -0
  42. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/cookiecutter/extensions.py +0 -0
  43. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/cookiecutter/hooks/post_gen_project.py +0 -0
  44. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.env.example +0 -0
  45. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.gitignore +0 -0
  46. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/.gitignore +0 -0
  47. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/blueprints.json +0 -0
  48. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/port-app-config.yml +0 -0
  49. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/spec.yaml +0 -0
  50. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/CHANGELOG.md +0 -0
  51. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/CONTRIBUTING.md +0 -0
  52. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/README.md +0 -0
  53. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/changelog/.gitignore +0 -0
  54. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/debug.py +0 -0
  55. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/main.py +0 -0
  56. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/poetry.toml +0 -0
  57. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/pyproject.toml +0 -0
  58. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/sonar-project.properties +0 -0
  59. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/tests/__init__.py +0 -0
  60. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/tests/test_sample.py +0 -0
  61. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/cli/utils.py +0 -0
  62. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/clients/__init__.py +0 -0
  63. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/clients/auth/__init__.py +0 -0
  64. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/clients/auth/auth_client.py +0 -0
  65. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/clients/auth/oauth_client.py +0 -0
  66. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/clients/port/__init__.py +0 -0
  67. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/clients/port/authentication.py +0 -0
  68. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/clients/port/client.py +0 -0
  69. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/clients/port/mixins/__init__.py +0 -0
  70. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/clients/port/mixins/blueprints.py +0 -0
  71. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/clients/port/mixins/entities.py +0 -0
  72. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/clients/port/mixins/migrations.py +0 -0
  73. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/clients/port/mixins/organization.py +0 -0
  74. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/clients/port/retry_transport.py +0 -0
  75. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/clients/port/types.py +0 -0
  76. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/clients/port/utils.py +0 -0
  77. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/config/__init__.py +0 -0
  78. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/config/base.py +0 -0
  79. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/config/dynamic.py +0 -0
  80. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/config/settings.py +0 -0
  81. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/consumers/__init__.py +0 -0
  82. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/consumers/kafka_consumer.py +0 -0
  83. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/context/__init__.py +0 -0
  84. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/context/event.py +0 -0
  85. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/context/metric_resource.py +0 -0
  86. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/context/ocean.py +0 -0
  87. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/context/resource.py +0 -0
  88. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/__init__.py +0 -0
  89. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/defaults/__init__.py +0 -0
  90. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/defaults/clean.py +0 -0
  91. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/defaults/common.py +0 -0
  92. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/defaults/initialize.py +0 -0
  93. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/event_listener/__init__.py +0 -0
  94. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/event_listener/base.py +0 -0
  95. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/event_listener/factory.py +0 -0
  96. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/event_listener/http.py +0 -0
  97. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/event_listener/kafka.py +0 -0
  98. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/event_listener/once.py +0 -0
  99. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/event_listener/polling.py +0 -0
  100. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/event_listener/webhooks_only.py +0 -0
  101. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/handlers/__init__.py +0 -0
  102. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/handlers/base.py +0 -0
  103. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/handlers/entities_state_applier/__init__.py +0 -0
  104. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/handlers/entities_state_applier/base.py +0 -0
  105. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/handlers/entities_state_applier/port/__init__.py +0 -0
  106. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/handlers/entities_state_applier/port/applier.py +0 -0
  107. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/handlers/entities_state_applier/port/get_related_entities.py +0 -0
  108. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/handlers/entities_state_applier/port/order_by_entities_dependencies.py +0 -0
  109. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/handlers/entity_processor/__init__.py +0 -0
  110. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/handlers/entity_processor/base.py +0 -0
  111. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/handlers/entity_processor/jq_entity_processor.py +0 -0
  112. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/handlers/port_app_config/__init__.py +0 -0
  113. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/handlers/port_app_config/api.py +0 -0
  114. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/handlers/port_app_config/base.py +0 -0
  115. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/handlers/queue/__init__.py +0 -0
  116. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/handlers/queue/abstract_queue.py +0 -0
  117. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/handlers/queue/group_queue.py +0 -0
  118. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/handlers/queue/local_queue.py +0 -0
  119. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/handlers/resync_state_updater/__init__.py +0 -0
  120. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/handlers/resync_state_updater/updater.py +0 -0
  121. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/handlers/webhook/__init__.py +0 -0
  122. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/handlers/webhook/abstract_webhook_processor.py +0 -0
  123. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/handlers/webhook/processor_manager.py +0 -0
  124. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/handlers/webhook/webhook_event.py +0 -0
  125. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/integrations/__init__.py +0 -0
  126. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/integrations/base.py +0 -0
  127. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/integrations/mixins/__init__.py +0 -0
  128. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/integrations/mixins/events.py +0 -0
  129. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/integrations/mixins/handler.py +0 -0
  130. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/integrations/mixins/live_events.py +0 -0
  131. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/integrations/mixins/sync.py +0 -0
  132. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/integrations/mixins/sync_raw.py +0 -0
  133. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/integrations/mixins/utils.py +0 -0
  134. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/models.py +0 -0
  135. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/ocean_types.py +0 -0
  136. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/core/utils/entity_topological_sorter.py +0 -0
  137. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/debug_cli.py +0 -0
  138. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/exceptions/__init__.py +0 -0
  139. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/exceptions/api.py +0 -0
  140. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/exceptions/base.py +0 -0
  141. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/exceptions/clients.py +0 -0
  142. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/exceptions/context.py +0 -0
  143. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/exceptions/core.py +0 -0
  144. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/exceptions/port_defaults.py +0 -0
  145. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/exceptions/utils.py +0 -0
  146. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/exceptions/webhook_processor.py +0 -0
  147. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/helpers/__init__.py +0 -0
  148. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/helpers/async_client.py +0 -0
  149. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/helpers/metric/metric.py +0 -0
  150. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/helpers/metric/utils.py +0 -0
  151. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/helpers/retry.py +0 -0
  152. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/helpers/stream.py +0 -0
  153. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/log/__init__.py +0 -0
  154. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/log/handlers.py +0 -0
  155. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/log/logger_setup.py +0 -0
  156. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/log/sensetive.py +0 -0
  157. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/middlewares.py +0 -0
  158. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/ocean.py +0 -0
  159. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/py.typed +0 -0
  160. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/run.py +0 -0
  161. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/sonar-project.properties +0 -0
  162. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/__init__.py +0 -0
  163. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/cache/__init__.py +0 -0
  164. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/cache/test_disk_cache.py +0 -0
  165. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/cache/test_memory_cache.py +0 -0
  166. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/clients/__init__.py +0 -0
  167. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/clients/oauth/__init__.py +0 -0
  168. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/clients/oauth/test_oauth_client.py +0 -0
  169. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/clients/port/mixins/test_entities.py +0 -0
  170. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/clients/port/mixins/test_integrations.py +0 -0
  171. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/clients/port/mixins/test_organization_mixin.py +0 -0
  172. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/config/test_config.py +0 -0
  173. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/conftest.py +0 -0
  174. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/core/conftest.py +0 -0
  175. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/core/defaults/test_common.py +0 -0
  176. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/core/event_listener/test_kafka.py +0 -0
  177. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/core/handlers/entities_state_applier/test_applier.py +0 -0
  178. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/core/handlers/entity_processor/test_jq_entity_processor.py +0 -0
  179. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/core/handlers/mixins/test_live_events.py +0 -0
  180. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/core/handlers/mixins/test_sync_raw.py +0 -0
  181. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/core/handlers/port_app_config/test_api.py +0 -0
  182. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/core/handlers/port_app_config/test_base.py +0 -0
  183. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/core/handlers/queue/test_group_queue.py +0 -0
  184. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/core/handlers/queue/test_local_queue.py +0 -0
  185. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/core/handlers/webhook/test_abstract_webhook_processor.py +0 -0
  186. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/core/handlers/webhook/test_processor_manager.py +0 -0
  187. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/core/handlers/webhook/test_webhook_event.py +0 -0
  188. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/core/test_utils.py +0 -0
  189. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/core/utils/test_entity_topological_sorter.py +0 -0
  190. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/core/utils/test_resolve_entities_diff.py +0 -0
  191. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/helpers/__init__.py +0 -0
  192. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/helpers/fake_port_api.py +0 -0
  193. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/helpers/fixtures.py +0 -0
  194. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/helpers/integration.py +0 -0
  195. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/helpers/ocean_app.py +0 -0
  196. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/helpers/port_client.py +0 -0
  197. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/helpers/smoke_test.py +0 -0
  198. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/helpers/test_retry.py +0 -0
  199. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/log/test_handlers.py +0 -0
  200. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/test_metric.py +0 -0
  201. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/test_ocean.py +0 -0
  202. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/test_smoke.py +0 -0
  203. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/utils/test_async_iterators.py +0 -0
  204. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/tests/utils/test_cache.py +0 -0
  205. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/utils/__init__.py +0 -0
  206. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/utils/async_http.py +0 -0
  207. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/utils/async_iterators.py +0 -0
  208. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/utils/cache.py +0 -0
  209. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/utils/ipc.py +0 -0
  210. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/utils/misc.py +0 -0
  211. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/utils/queue_utils.py +0 -0
  212. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/utils/repeat.py +0 -0
  213. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/utils/signal.py +0 -0
  214. {port_ocean-0.28.9 → port_ocean-0.28.11}/port_ocean/utils/time.py +0 -0
  215. {port_ocean-0.28.9 → port_ocean-0.28.11}/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.9
3
+ Version: 0.28.11
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
@@ -301,7 +301,7 @@ class IntegrationClientMixin:
301
301
  headers=headers,
302
302
  json={
303
303
  "items": raw_data,
304
- "extractionTimestamp": datetime.now().isoformat(),
304
+ "extractionTimestamp": int(datetime.now().timestamp()),
305
305
  },
306
306
  )
307
307
  handle_port_status_code(response, should_log=False)
@@ -29,7 +29,9 @@ class EntityMapping(BaseModel):
29
29
 
30
30
  @property
31
31
  def is_using_search_identifier(self) -> bool:
32
- return isinstance(self.identifier, dict)
32
+ return isinstance(self.identifier, dict) or isinstance(
33
+ self.identifier, IngestSearchQuery
34
+ )
33
35
 
34
36
 
35
37
  class MappingsConfig(BaseModel):
@@ -4,7 +4,7 @@ import json
4
4
  from typing import Iterable, Any, TypeVar, Callable, Awaitable
5
5
 
6
6
  from loguru import logger
7
- from pydantic import parse_obj_as, ValidationError
7
+ from pydantic import BaseModel, parse_obj_as, ValidationError
8
8
 
9
9
 
10
10
  from port_ocean.clients.port.client import PortClient
@@ -79,6 +79,19 @@ async def gather_and_split_errors_from_results(
79
79
  return valid_items, errors
80
80
 
81
81
 
82
+ def _get_entity_key(entity: Entity) -> tuple[str, str]:
83
+ identifier = entity.identifier
84
+ if isinstance(identifier, BaseModel):
85
+ identifier = identifier.dict()
86
+
87
+ key_part = (
88
+ json.dumps(identifier, sort_keys=True)
89
+ if isinstance(identifier, dict)
90
+ else str(identifier)
91
+ )
92
+ return key_part, entity.blueprint
93
+
94
+
82
95
  def get_port_diff(before: Iterable[Entity], after: Iterable[Entity]) -> EntityPortDiff:
83
96
  before_dict = {}
84
97
  after_dict = {}
@@ -88,12 +101,10 @@ def get_port_diff(before: Iterable[Entity], after: Iterable[Entity]) -> EntityPo
88
101
 
89
102
  # Create dictionaries for before and after lists
90
103
  for entity in before:
91
- key = (entity.identifier, entity.blueprint)
92
- before_dict[key] = entity
104
+ before_dict[_get_entity_key(entity)] = entity
93
105
 
94
106
  for entity in after:
95
- key = (entity.identifier, entity.blueprint)
96
- after_dict[key] = entity
107
+ after_dict[_get_entity_key(entity)] = entity
97
108
 
98
109
  # Find created, modified, and deleted objects
99
110
  for key, obj in after_dict.items():
@@ -0,0 +1,164 @@
1
+ from typing import Any
2
+
3
+ from port_ocean.core.models import Entity
4
+ from port_ocean.core.utils.utils import get_port_diff
5
+
6
+
7
+ def create_test_entity(
8
+ identifier: str,
9
+ blueprint: str,
10
+ properties: dict[str, Any],
11
+ relations: dict[str, Any],
12
+ title: Any,
13
+ team: str | None | list[Any] = [],
14
+ ) -> Entity:
15
+ return Entity(
16
+ identifier=identifier,
17
+ blueprint=blueprint,
18
+ properties=properties,
19
+ relations=relations,
20
+ title=title,
21
+ team=team,
22
+ )
23
+
24
+
25
+ entity1 = create_test_entity(
26
+ "id1",
27
+ "bp1",
28
+ {"totalIssues": 123, "url": "https://test.atlassian.net/browse/test-29081"},
29
+ {"reporter": "id1", "project": "project_id"},
30
+ "",
31
+ "",
32
+ )
33
+ entity1_modified_properties = create_test_entity(
34
+ "id1",
35
+ "bp1",
36
+ {"totalIssues": 5, "url": "https://test.atlassian.net/browse/test-29081"},
37
+ {"reporter": "id1", "project": "project_id"},
38
+ "",
39
+ "",
40
+ )
41
+ entity2 = create_test_entity(
42
+ "id2",
43
+ "bp2",
44
+ {"totalIssues": 234, "url": "https://test.atlassian.net/browse/test-23451"},
45
+ {"reporter": "id2", "project": "project_id2"},
46
+ "",
47
+ "",
48
+ )
49
+ entity3 = create_test_entity(
50
+ "id3",
51
+ "bp3",
52
+ {"totalIssues": 20, "url": "https://test.atlassian.net/browse/test-542"},
53
+ {"reporter": "id3", "project": "project_id3"},
54
+ "",
55
+ "",
56
+ )
57
+
58
+
59
+ def test_get_port_diff_with_dictionary_identifier() -> None:
60
+ """
61
+ Test that get_port_diff handles dictionary identifiers by converting them to strings.
62
+ An entity with a dictionary identifier in 'before' and not in 'after' should be marked as deleted.
63
+ """
64
+ entity_with_dict_id = create_test_entity(
65
+ identifier={"rules": "some_id", "combinator": "some combinator"}, # type: ignore
66
+ blueprint="bp1",
67
+ properties={},
68
+ relations={},
69
+ title="test",
70
+ )
71
+ before = [entity_with_dict_id]
72
+ after: list[Entity] = []
73
+
74
+ diff = get_port_diff(before, after)
75
+
76
+ assert not diff.created
77
+ assert not diff.modified
78
+ assert len(diff.deleted) == 1
79
+ assert entity_with_dict_id in diff.deleted
80
+
81
+
82
+ def test_get_port_diff_no_changes() -> None:
83
+ """
84
+ Test get_port_diff with no changes between before and after.
85
+ Entities present in both should be in the 'modified' list.
86
+ """
87
+ before = [entity1, entity2]
88
+ after = [entity1, entity2]
89
+
90
+ diff = get_port_diff(before, after)
91
+
92
+ assert not diff.created
93
+ assert not diff.deleted
94
+ assert len(diff.modified) == 2
95
+ assert entity1 in diff.modified
96
+ assert entity2 in diff.modified
97
+
98
+
99
+ def test_get_port_diff_created_entities() -> None:
100
+ """
101
+ Test get_port_diff with only new entities.
102
+ """
103
+ before: list[Entity] = []
104
+ after = [entity1, entity2]
105
+
106
+ diff = get_port_diff(before, after)
107
+
108
+ assert not diff.modified
109
+ assert not diff.deleted
110
+ assert len(diff.created) == 2
111
+ assert entity1 in diff.created
112
+ assert entity2 in diff.created
113
+
114
+
115
+ def test_get_port_diff_deleted_entities() -> None:
116
+ """
117
+ Test get_port_diff with only deleted entities.
118
+ """
119
+ before = [entity1, entity2]
120
+ after: list[Entity] = []
121
+
122
+ diff = get_port_diff(before, after)
123
+
124
+ assert not diff.created
125
+ assert not diff.modified
126
+ assert len(diff.deleted) == 2
127
+ assert entity1 in diff.deleted
128
+ assert entity2 in diff.deleted
129
+
130
+
131
+ def test_get_port_diff_modified_entities() -> None:
132
+ """
133
+ Test get_port_diff with modified entities.
134
+ Entities with same identifier and blueprint are considered modified.
135
+ """
136
+ before = [entity1, entity2]
137
+ after = [entity1_modified_properties, entity2]
138
+
139
+ diff = get_port_diff(before, after)
140
+
141
+ assert not diff.created
142
+ assert not diff.deleted
143
+ assert len(diff.modified) == 2
144
+ assert entity1_modified_properties in diff.modified
145
+ assert entity2 in diff.modified
146
+
147
+
148
+ def test_get_port_diff_mixed_changes() -> None:
149
+ """
150
+ Test get_port_diff with a mix of created, modified, and deleted entities.
151
+ """
152
+ before = [entity1, entity2]
153
+ after = [entity1_modified_properties, entity3]
154
+
155
+ diff = get_port_diff(before, after)
156
+
157
+ assert len(diff.created) == 1
158
+ assert entity3 in diff.created
159
+
160
+ assert len(diff.modified) == 1
161
+ assert entity1_modified_properties in diff.modified
162
+
163
+ assert len(diff.deleted) == 1
164
+ assert entity2 in diff.deleted
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "port-ocean"
3
- version = "0.28.9"
3
+ version = "0.28.11"
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