port-ocean 0.25.0__tar.gz → 0.25.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 (209) hide show
  1. {port_ocean-0.25.0 → port_ocean-0.25.3}/PKG-INFO +1 -1
  2. {port_ocean-0.25.0 → port_ocean-0.25.3}/integrations/_infra/Dockerfile.Deb +5 -2
  3. {port_ocean-0.25.0 → port_ocean-0.25.3}/integrations/_infra/Dockerfile.local +10 -3
  4. port_ocean-0.25.3/integrations/_infra/README.md +30 -0
  5. {port_ocean-0.25.0 → port_ocean-0.25.3}/integrations/_infra/entry_local.sh +2 -1
  6. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/handlers/entities_state_applier/port/get_related_entities.py +7 -0
  7. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/handlers/entity_processor/jq_entity_processor.py +62 -21
  8. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/integrations/mixins/sync_raw.py +1 -1
  9. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/ocean_types.py +1 -1
  10. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/core/handlers/entity_processor/test_jq_entity_processor.py +22 -13
  11. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/core/handlers/mixins/test_live_events.py +2 -2
  12. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/core/handlers/mixins/test_sync_raw.py +8 -8
  13. {port_ocean-0.25.0 → port_ocean-0.25.3}/pyproject.toml +1 -1
  14. {port_ocean-0.25.0 → port_ocean-0.25.3}/LICENSE.md +0 -0
  15. {port_ocean-0.25.0 → port_ocean-0.25.3}/README.md +0 -0
  16. {port_ocean-0.25.0 → port_ocean-0.25.3}/integrations/_infra/Dockerfile.alpine +0 -0
  17. {port_ocean-0.25.0 → port_ocean-0.25.3}/integrations/_infra/Dockerfile.base.builder +0 -0
  18. {port_ocean-0.25.0 → port_ocean-0.25.3}/integrations/_infra/Dockerfile.base.runner +0 -0
  19. {port_ocean-0.25.0 → port_ocean-0.25.3}/integrations/_infra/Dockerfile.dockerignore +0 -0
  20. {port_ocean-0.25.0 → port_ocean-0.25.3}/integrations/_infra/Makefile +0 -0
  21. {port_ocean-0.25.0 → port_ocean-0.25.3}/integrations/_infra/grpcio.sh +0 -0
  22. {port_ocean-0.25.0 → port_ocean-0.25.3}/integrations/_infra/init.sh +0 -0
  23. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/__init__.py +0 -0
  24. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/bootstrap.py +0 -0
  25. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cache/__init__.py +0 -0
  26. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cache/base.py +0 -0
  27. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cache/disk.py +0 -0
  28. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cache/errors.py +0 -0
  29. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cache/memory.py +0 -0
  30. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/__init__.py +0 -0
  31. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/cli.py +0 -0
  32. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/commands/__init__.py +0 -0
  33. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/commands/defaults/__init___.py +0 -0
  34. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/commands/defaults/clean.py +0 -0
  35. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/commands/defaults/dock.py +0 -0
  36. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/commands/defaults/group.py +0 -0
  37. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/commands/list_integrations.py +0 -0
  38. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/commands/main.py +0 -0
  39. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/commands/new.py +0 -0
  40. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/commands/pull.py +0 -0
  41. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/commands/sail.py +0 -0
  42. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/commands/version.py +0 -0
  43. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/cookiecutter/__init__.py +0 -0
  44. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/cookiecutter/cookiecutter.json +0 -0
  45. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/cookiecutter/extensions.py +0 -0
  46. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/cookiecutter/hooks/post_gen_project.py +0 -0
  47. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.env.example +0 -0
  48. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.gitignore +0 -0
  49. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/.gitignore +0 -0
  50. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/blueprints.json +0 -0
  51. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/port-app-config.yml +0 -0
  52. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/spec.yaml +0 -0
  53. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/CHANGELOG.md +0 -0
  54. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/CONTRIBUTING.md +0 -0
  55. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/README.md +0 -0
  56. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/changelog/.gitignore +0 -0
  57. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/debug.py +0 -0
  58. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/main.py +0 -0
  59. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/poetry.toml +0 -0
  60. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/pyproject.toml +0 -0
  61. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/sonar-project.properties +0 -0
  62. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/tests/__init__.py +0 -0
  63. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/tests/test_sample.py +0 -0
  64. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/cli/utils.py +0 -0
  65. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/clients/__init__.py +0 -0
  66. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/clients/auth/__init__.py +0 -0
  67. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/clients/auth/auth_client.py +0 -0
  68. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/clients/auth/oauth_client.py +0 -0
  69. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/clients/port/__init__.py +0 -0
  70. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/clients/port/authentication.py +0 -0
  71. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/clients/port/client.py +0 -0
  72. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/clients/port/mixins/__init__.py +0 -0
  73. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/clients/port/mixins/blueprints.py +0 -0
  74. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/clients/port/mixins/entities.py +0 -0
  75. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/clients/port/mixins/integrations.py +0 -0
  76. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/clients/port/mixins/migrations.py +0 -0
  77. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/clients/port/mixins/organization.py +0 -0
  78. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/clients/port/retry_transport.py +0 -0
  79. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/clients/port/types.py +0 -0
  80. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/clients/port/utils.py +0 -0
  81. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/config/__init__.py +0 -0
  82. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/config/base.py +0 -0
  83. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/config/dynamic.py +0 -0
  84. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/config/settings.py +0 -0
  85. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/consumers/__init__.py +0 -0
  86. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/consumers/kafka_consumer.py +0 -0
  87. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/context/__init__.py +0 -0
  88. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/context/event.py +0 -0
  89. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/context/metric_resource.py +0 -0
  90. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/context/ocean.py +0 -0
  91. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/context/resource.py +0 -0
  92. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/__init__.py +0 -0
  93. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/defaults/__init__.py +0 -0
  94. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/defaults/clean.py +0 -0
  95. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/defaults/common.py +0 -0
  96. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/defaults/initialize.py +0 -0
  97. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/event_listener/__init__.py +0 -0
  98. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/event_listener/base.py +0 -0
  99. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/event_listener/factory.py +0 -0
  100. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/event_listener/http.py +0 -0
  101. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/event_listener/kafka.py +0 -0
  102. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/event_listener/once.py +0 -0
  103. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/event_listener/polling.py +0 -0
  104. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/event_listener/webhooks_only.py +0 -0
  105. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/handlers/__init__.py +0 -0
  106. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/handlers/base.py +0 -0
  107. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/handlers/entities_state_applier/__init__.py +0 -0
  108. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/handlers/entities_state_applier/base.py +0 -0
  109. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/handlers/entities_state_applier/port/__init__.py +0 -0
  110. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/handlers/entities_state_applier/port/applier.py +0 -0
  111. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/handlers/entities_state_applier/port/order_by_entities_dependencies.py +0 -0
  112. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/handlers/entity_processor/__init__.py +0 -0
  113. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/handlers/entity_processor/base.py +0 -0
  114. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/handlers/port_app_config/__init__.py +0 -0
  115. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/handlers/port_app_config/api.py +0 -0
  116. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/handlers/port_app_config/base.py +0 -0
  117. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/handlers/port_app_config/models.py +0 -0
  118. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/handlers/queue/__init__.py +0 -0
  119. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/handlers/queue/abstract_queue.py +0 -0
  120. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/handlers/queue/local_queue.py +0 -0
  121. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/handlers/resync_state_updater/__init__.py +0 -0
  122. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/handlers/resync_state_updater/updater.py +0 -0
  123. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/handlers/webhook/__init__.py +0 -0
  124. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/handlers/webhook/abstract_webhook_processor.py +0 -0
  125. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/handlers/webhook/processor_manager.py +0 -0
  126. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/handlers/webhook/webhook_event.py +0 -0
  127. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/integrations/__init__.py +0 -0
  128. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/integrations/base.py +0 -0
  129. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/integrations/mixins/__init__.py +0 -0
  130. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/integrations/mixins/events.py +0 -0
  131. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/integrations/mixins/handler.py +0 -0
  132. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/integrations/mixins/live_events.py +0 -0
  133. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/integrations/mixins/sync.py +0 -0
  134. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/integrations/mixins/utils.py +0 -0
  135. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/models.py +0 -0
  136. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/utils/entity_topological_sorter.py +0 -0
  137. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/core/utils/utils.py +0 -0
  138. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/debug_cli.py +0 -0
  139. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/exceptions/__init__.py +0 -0
  140. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/exceptions/api.py +0 -0
  141. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/exceptions/base.py +0 -0
  142. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/exceptions/clients.py +0 -0
  143. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/exceptions/context.py +0 -0
  144. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/exceptions/core.py +0 -0
  145. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/exceptions/port_defaults.py +0 -0
  146. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/exceptions/utils.py +0 -0
  147. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/exceptions/webhook_processor.py +0 -0
  148. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/helpers/__init__.py +0 -0
  149. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/helpers/async_client.py +0 -0
  150. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/helpers/metric/metric.py +0 -0
  151. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/helpers/metric/utils.py +0 -0
  152. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/helpers/retry.py +0 -0
  153. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/log/__init__.py +0 -0
  154. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/log/handlers.py +0 -0
  155. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/log/logger_setup.py +0 -0
  156. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/log/sensetive.py +0 -0
  157. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/middlewares.py +0 -0
  158. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/ocean.py +0 -0
  159. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/py.typed +0 -0
  160. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/run.py +0 -0
  161. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/sonar-project.properties +0 -0
  162. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/__init__.py +0 -0
  163. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/cache/__init__.py +0 -0
  164. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/cache/test_disk_cache.py +0 -0
  165. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/cache/test_memory_cache.py +0 -0
  166. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/clients/__init__.py +0 -0
  167. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/clients/oauth/__init__.py +0 -0
  168. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/clients/oauth/test_oauth_client.py +0 -0
  169. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/clients/port/mixins/test_entities.py +0 -0
  170. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/clients/port/mixins/test_integrations.py +0 -0
  171. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/clients/port/mixins/test_organization_mixin.py +0 -0
  172. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/config/test_config.py +0 -0
  173. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/conftest.py +0 -0
  174. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/core/conftest.py +0 -0
  175. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/core/defaults/test_common.py +0 -0
  176. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/core/handlers/entities_state_applier/test_applier.py +0 -0
  177. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/core/handlers/port_app_config/test_api.py +0 -0
  178. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/core/handlers/port_app_config/test_base.py +0 -0
  179. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/core/handlers/queue/test_local_queue.py +0 -0
  180. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/core/handlers/webhook/test_abstract_webhook_processor.py +0 -0
  181. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/core/handlers/webhook/test_processor_manager.py +0 -0
  182. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/core/handlers/webhook/test_webhook_event.py +0 -0
  183. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/core/test_utils.py +0 -0
  184. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/core/utils/test_entity_topological_sorter.py +0 -0
  185. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/core/utils/test_resolve_entities_diff.py +0 -0
  186. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/helpers/__init__.py +0 -0
  187. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/helpers/fake_port_api.py +0 -0
  188. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/helpers/fixtures.py +0 -0
  189. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/helpers/integration.py +0 -0
  190. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/helpers/ocean_app.py +0 -0
  191. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/helpers/port_client.py +0 -0
  192. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/helpers/smoke_test.py +0 -0
  193. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/log/test_handlers.py +0 -0
  194. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/test_metric.py +0 -0
  195. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/test_ocean.py +0 -0
  196. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/test_smoke.py +0 -0
  197. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/utils/test_async_iterators.py +0 -0
  198. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/tests/utils/test_cache.py +0 -0
  199. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/utils/__init__.py +0 -0
  200. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/utils/async_http.py +0 -0
  201. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/utils/async_iterators.py +0 -0
  202. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/utils/cache.py +0 -0
  203. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/utils/ipc.py +0 -0
  204. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/utils/misc.py +0 -0
  205. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/utils/queue_utils.py +0 -0
  206. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/utils/repeat.py +0 -0
  207. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/utils/signal.py +0 -0
  208. {port_ocean-0.25.0 → port_ocean-0.25.3}/port_ocean/utils/time.py +0 -0
  209. {port_ocean-0.25.0 → port_ocean-0.25.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.25.0
3
+ Version: 0.25.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
@@ -18,8 +18,9 @@ COPY ./${BUILD_CONTEXT}/pyproject.toml ./${BUILD_CONTEXT}/poetry.lock /app/
18
18
  RUN poetry install --without dev --no-root --no-interaction --no-ansi --no-cache
19
19
 
20
20
  FROM ${BASE_RUNNER_PYTHON_IMAGE} AS prod
21
+ ARG OCEAN_USER_ID=999
21
22
 
22
- RUN groupadd -r appgroup && useradd -r -g appgroup -m ocean
23
+ RUN groupadd -r appgroup && useradd -r -g appgroup -m -u ${OCEAN_USER_ID} ocean
23
24
 
24
25
  RUN mkdir -p /tmp/ocean
25
26
 
@@ -38,6 +39,7 @@ RUN apt-get update \
38
39
  ca-certificates \
39
40
  openssl \
40
41
  curl \
42
+ acl \
41
43
  && apt-get clean
42
44
 
43
45
  LABEL INTEGRATION_VERSION=${INTEGRATION_VERSION}
@@ -64,7 +66,8 @@ RUN chmod a+x /app/.venv/bin/ocean
64
66
 
65
67
  RUN chmod a+x /app/init.sh
66
68
  RUN ln -s /app/.venv/bin/ocean /usr/bin/ocean
67
-
69
+ # Add ocean user to ssl certs group
70
+ RUN setfacl -m u:ocean:rwX /etc/ssl/certs
68
71
  USER ocean
69
72
  # Run the application
70
73
  CMD ["bash", "/app/init.sh"]
@@ -2,9 +2,10 @@ ARG BASE_PYTHON_IMAGE=debian:trixie-slim
2
2
  # debian:trixie-slim - Python 3.12
3
3
  FROM ${BASE_PYTHON_IMAGE}
4
4
 
5
- RUN groupadd -r appgroup && useradd -r -g appgroup -m ocean
5
+ ARG OCEAN_USER_ID=999
6
+ RUN groupadd -r appgroup && useradd -r -g appgroup -m -u ${OCEAN_USER_ID} ocean
6
7
 
7
- RUN mkdir -p /tmp/ocean && chown -R ocean:appgroup /tmp/ocean && chmod -R 755 /tmp/ocean
8
+ RUN mkdir -p /tmp/ocean
8
9
 
9
10
 
10
11
  RUN apt-get update \
@@ -27,6 +28,7 @@ RUN apt-get update \
27
28
  build-essential\
28
29
  git \
29
30
  python3-venv \
31
+ acl \
30
32
  && apt-get clean
31
33
 
32
34
  ARG BUILD_CONTEXT
@@ -40,7 +42,6 @@ ENV PROMETHEUS_MULTIPROC_DIR=${PROMETHEUS_MULTIPROC_DIR}
40
42
  RUN mkdir -p ${PROMETHEUS_MULTIPROC_DIR}
41
43
 
42
44
  WORKDIR /app
43
- USER ocean
44
45
 
45
46
  COPY . .
46
47
  RUN rm -rf .venv-docker ${BUILD_CONTEXT}/.venv-docker
@@ -51,5 +52,11 @@ RUN python3 -m venv ${BUILD_CONTEXT}/.venv-docker
51
52
  WORKDIR /app/${BUILD_CONTEXT}
52
53
 
53
54
  WORKDIR /app
55
+ RUN chown -R ocean:appgroup /app && chmod -R 755 /app
56
+ RUN chown -R ocean:appgroup /app/${BUILD_CONTEXT} && chmod -R 755 /app/${BUILD_CONTEXT}
57
+ RUN chown -R ocean:appgroup /tmp/ocean && chmod -R 755 /tmp/ocean
58
+ # Add ocean user to ssl certs group
59
+ RUN setfacl -m u:ocean:rwX /etc/ssl/certs
60
+ USER ocean
54
61
 
55
62
  ENTRYPOINT ["./integrations/_infra/entry_local.sh"]
@@ -0,0 +1,30 @@
1
+ # Running the Ocean image locally using vscode / Cursor
2
+
3
+ In order to run the local image of Ocean you need to follow these steps:
4
+
5
+ 1. Build the image:
6
+
7
+ ```bash
8
+ docker build -f integrations/_infra/Dockerfile.local --build-arg BUILD_CONTEXT=integrations/<integration_type> --platform linux/arm64 -t <my-local-image>:<local> .
9
+ ```
10
+
11
+ 2. Run the image
12
+ 1. `5678` is the debugpy port mentioned in the `entry_local.sh` file
13
+ 2. `8000` is the port of the Ocean FastAPI server
14
+ 3. the `-v` option mounts your local Ocean directory to the pod, allowing you not to constantly build the image.
15
+ 1. Make sure to run the command from the root directory of the Ocean repository.
16
+
17
+ ```bash
18
+ docker run --rm -it \
19
+ -v $(pwd):/app \
20
+ -p 5678:5678 \
21
+ -p 8000:8000 \
22
+ -e BUILD_CONTEXT=integrations/<integration_type> \
23
+ -e OCEAN__PORT__CLIENT_ID=<MY_CLIENT_ID> \
24
+ -e OCEAN__PORT__CLIENT_SECRET=<MY_CLIENT_SECRET> \
25
+ -e OCEAN__PORT__MY_OTHER_CONFIGURATION=<MY_OTHER_CONFIGURATION> \
26
+ <my-local-image>:<local>
27
+ ```
28
+
29
+ 3. In vscode/Cursor, run the `Attach to docker fake-integration integration` Running configuration from the `launch.json`.
30
+ 4. Have fun debugging!
@@ -22,4 +22,5 @@ fi
22
22
  source .venv-docker/bin/activate
23
23
  python -m pip install -e ../../
24
24
 
25
- ocean sail
25
+ python -m pip install debugpy
26
+ python -m debugpy --listen 0.0.0.0:5678 --wait-for-client debug.py
@@ -2,6 +2,8 @@ import asyncio
2
2
  from collections import defaultdict
3
3
  from itertools import groupby
4
4
 
5
+ from loguru import logger
6
+
5
7
  from port_ocean.clients.port.client import PortClient
6
8
  from port_ocean.core.models import Entity
7
9
 
@@ -37,6 +39,11 @@ async def get_related_entities(
37
39
  blueprints_to_relations = defaultdict(list)
38
40
  for entity, blueprint in entity_to_blueprint:
39
41
  for relation_name, relation in entity.relations.items():
42
+ if relation_name not in blueprint.relations:
43
+ logger.warning(
44
+ f"Relation {relation_name} found in entity {entity.identifier} but not in blueprint {blueprint.identifier}"
45
+ )
46
+ continue
40
47
  relation_blueprint = blueprint.relations[relation_name].target
41
48
  blueprints_to_relations[relation_blueprint].extend(
42
49
  relation if isinstance(relation, list) else [relation]
@@ -1,6 +1,7 @@
1
1
  import asyncio
2
2
  from asyncio import Task
3
3
  from dataclasses import dataclass, field
4
+
4
5
  from functools import lru_cache
5
6
  from typing import Any, Optional
6
7
  import jq # type: ignore
@@ -23,6 +24,49 @@ from port_ocean.exceptions.core import EntityProcessorException
23
24
  from port_ocean.utils.queue_utils import process_in_queue
24
25
 
25
26
 
27
+ class ExampleStates:
28
+ __succeed: list[dict[str, Any]]
29
+ __errors: list[dict[str, Any]]
30
+ __max_size: int
31
+
32
+ def __init__(self, max_size: int = 0) -> None:
33
+ """
34
+ Store two sequences:
35
+ - succeed: items that succeeded
36
+ - errors: items that failed
37
+ """
38
+ self.__succeed = []
39
+ self.__errors = []
40
+ self.__max_size = max_size
41
+
42
+ def add_example(self, succeed: bool, item: dict[str, Any]) -> None:
43
+ if succeed:
44
+ self.__succeed.append(item)
45
+ else:
46
+ self.__errors.append(item)
47
+
48
+ def __len__(self) -> int:
49
+ """
50
+ Total number of items (successes + errors).
51
+ """
52
+ return len(self.__succeed) + len(self.__errors)
53
+
54
+ def get_examples(self, number: int = 0) -> list[dict[str, Any]]:
55
+ """
56
+ Return a list of up to number items, taking successes first,
57
+ """
58
+ if number <= 0:
59
+ number = self.__max_size
60
+ # how many from succeed?
61
+ s_count = min(number, len(self.__succeed))
62
+ result = list(self.__succeed[:s_count])
63
+ # how many more from errors?
64
+ e_count = number - s_count
65
+ if e_count > 0:
66
+ result.extend(self.__errors[:e_count])
67
+ return result
68
+
69
+
26
70
  @dataclass
27
71
  class MappedEntity:
28
72
  """Represents the entity after applying the mapping
@@ -182,11 +226,16 @@ class JQEntityProcessor(BaseEntityProcessor):
182
226
  return MappedEntity(
183
227
  mapped_entity,
184
228
  did_entity_pass_selector=should_run,
185
- raw_data=data if should_run else None,
229
+ raw_data=data,
186
230
  misconfigurations=misconfigurations,
187
231
  )
188
232
 
189
- return MappedEntity()
233
+ return MappedEntity(
234
+ {},
235
+ did_entity_pass_selector=False,
236
+ raw_data=data,
237
+ misconfigurations={},
238
+ )
190
239
 
191
240
  async def _calculate_entity(
192
241
  self,
@@ -264,24 +313,26 @@ class JQEntityProcessor(BaseEntityProcessor):
264
313
 
265
314
  passed_entities = []
266
315
  failed_entities = []
267
- examples_to_send: list[dict[str, Any]] = []
316
+ examples_to_send = ExampleStates(send_raw_data_examples_amount)
268
317
  entity_misconfigurations: dict[str, str] = {}
269
318
  missing_required_fields: bool = False
270
319
  entity_mapping_fault_counter: int = 0
271
-
272
320
  for result in calculated_entities_results:
273
321
  if len(result.misconfigurations) > 0:
274
322
  entity_misconfigurations |= result.misconfigurations
275
323
 
324
+ if (
325
+ len(examples_to_send) < send_raw_data_examples_amount
326
+ and result.raw_data is not None
327
+ ):
328
+ examples_to_send.add_example(
329
+ result.did_entity_pass_selector, result.raw_data
330
+ )
331
+
276
332
  if result.entity.get("identifier") and result.entity.get("blueprint"):
277
333
  parsed_entity = Entity.parse_obj(result.entity)
278
334
  if result.did_entity_pass_selector:
279
335
  passed_entities.append(parsed_entity)
280
- if (
281
- len(examples_to_send) < send_raw_data_examples_amount
282
- and result.raw_data is not None
283
- ):
284
- examples_to_send.append(result.raw_data)
285
336
  else:
286
337
  failed_entities.append(parsed_entity)
287
338
  else:
@@ -294,20 +345,10 @@ class JQEntityProcessor(BaseEntityProcessor):
294
345
  entity_mapping_fault_counter,
295
346
  )
296
347
 
297
- if (
298
- not calculated_entities_results
299
- and raw_results
300
- and send_raw_data_examples_amount > 0
301
- ):
302
- logger.warning(
303
- f"No entities were parsed from {len(raw_results)} raw results, sending raw data examples"
304
- )
305
- examples_to_send = raw_results[:send_raw_data_examples_amount]
306
-
307
- await self._send_examples(examples_to_send, mapping.kind)
348
+ await self._send_examples(examples_to_send.get_examples(), mapping.kind)
308
349
 
309
350
  return CalculationResult(
310
351
  EntitySelectorDiff(passed=passed_entities, failed=failed_entities),
311
352
  errors,
312
- misonfigured_entity_keys=entity_misconfigurations,
353
+ misconfigured_entity_keys=entity_misconfigurations,
313
354
  )
@@ -332,7 +332,7 @@ class SyncRawMixin(HandlerMixin, EventsMixin):
332
332
  passed=modified_objects
333
333
  ),
334
334
  errors=objects_diff[0].errors,
335
- misonfigured_entity_keys=objects_diff[0].misonfigured_entity_keys,
335
+ misconfigured_entity_keys=objects_diff[0].misconfigured_entity_keys
336
336
  )
337
337
 
338
338
  async def _unregister_resource_raw(
@@ -42,7 +42,7 @@ class CalculationResult(NamedTuple):
42
42
  entity_selector_diff: EntitySelectorDiff
43
43
  errors: list[Exception]
44
44
  number_of_transformed_entities: int = 0
45
- misonfigured_entity_keys: dict[str, str] = field(default_factory=dict)
45
+ misconfigured_entity_keys: dict[str, str] = field(default_factory=dict)
46
46
 
47
47
 
48
48
  class IntegrationEventsCallbacks(TypedDict):
@@ -1,4 +1,4 @@
1
- from typing import Any
1
+ from typing import cast, Any
2
2
  from unittest.mock import AsyncMock, Mock
3
3
  from loguru import logger
4
4
  import pytest
@@ -10,6 +10,7 @@ from port_ocean.core.handlers.entity_processor.jq_entity_processor import (
10
10
  )
11
11
  from port_ocean.core.ocean_types import CalculationResult
12
12
  from port_ocean.exceptions.core import EntityProcessorException
13
+ from unittest.mock import patch
13
14
 
14
15
 
15
16
  @pytest.mark.asyncio
@@ -296,15 +297,23 @@ class TestJQEntityProcessor:
296
297
  },
297
298
  {"foo": "bar", "baz": "bazbar", "bar": {"foobar": "foobar"}},
298
299
  ]
299
- result = await mocked_processor._parse_items(mapping, raw_results)
300
- assert len(result.misonfigured_entity_keys) > 0
301
- assert len(result.misonfigured_entity_keys) == 4
302
- assert result.misonfigured_entity_keys == {
303
- "identifier": ".ark",
304
- "description": ".bazbar",
305
- "url": ".foobar",
306
- "defaultBranch": ".bar.baz",
307
- }
300
+ with patch(
301
+ "port_ocean.core.handlers.entity_processor.jq_entity_processor.JQEntityProcessor._send_examples"
302
+ ) as mock_send_examples:
303
+ result = await mocked_processor._parse_items(
304
+ mapping, raw_results, send_raw_data_examples_amount=1
305
+ )
306
+ assert len(result.misconfigured_entity_keys) > 0
307
+ assert len(result.misconfigured_entity_keys) == 4
308
+ assert result.misconfigured_entity_keys == {
309
+ "identifier": ".ark",
310
+ "description": ".bazbar",
311
+ "url": ".foobar",
312
+ "defaultBranch": ".bar.baz",
313
+ }
314
+ assert mock_send_examples.await_args is not None, "mock was not awaited"
315
+ args, _ = mock_send_examples.await_args
316
+ assert len(cast(list[Any], args[0])) > 0
308
317
 
309
318
  async def test_parse_items_empty_required(
310
319
  self, mocked_processor: JQEntityProcessor
@@ -324,15 +333,15 @@ class TestJQEntityProcessor:
324
333
  {"foo": "identifierMapped", "bar": ""},
325
334
  ]
326
335
  result = await mocked_processor._parse_items(mapping, raw_results)
327
- assert "identifier" not in result.misonfigured_entity_keys
328
- assert "blueprint" not in result.misonfigured_entity_keys
336
+ assert "identifier" not in result.misconfigured_entity_keys
337
+ assert "blueprint" not in result.misconfigured_entity_keys
329
338
 
330
339
  raw_results = [
331
340
  {"foo": "identifierMapped", "bar": None},
332
341
  {"foo": None, "bar": ""},
333
342
  ]
334
343
  result = await mocked_processor._parse_items(mapping, raw_results)
335
- assert result.misonfigured_entity_keys == {
344
+ assert result.misconfigured_entity_keys == {
336
345
  "identifier": ".foo",
337
346
  "blueprint": ".bar",
338
347
  }
@@ -334,7 +334,7 @@ async def test_parse_raw_event_results_to_entities_creation(
334
334
  calculation_result = CalculationResult(
335
335
  entity_selector_diff=EntitySelectorDiff(passed=[entity], failed=[]),
336
336
  errors=[],
337
- misonfigured_entity_keys={},
337
+ misconfigured_entity_keys={},
338
338
  )
339
339
  mock_live_events_mixin.entity_processor.parse_items.return_value = (
340
340
  calculation_result
@@ -361,7 +361,7 @@ async def test_parse_raw_event_results_to_entities_deletion(
361
361
  calculation_result = CalculationResult(
362
362
  entity_selector_diff=EntitySelectorDiff(passed=[entity], failed=[]),
363
363
  errors=[],
364
- misonfigured_entity_keys={},
364
+ misconfigured_entity_keys={},
365
365
  )
366
366
  mock_live_events_mixin.entity_processor.parse_items.return_value = (
367
367
  calculation_result
@@ -113,7 +113,7 @@ async def test_sync_raw_mixin_self_dependency(
113
113
  calc_result_mock.number_of_transformed_entities = len(
114
114
  entities
115
115
  ) # Add this to match real behavior
116
- calc_result_mock.misonfigured_entity_keys = {} # Add this to match real behavior
116
+ calc_result_mock.misconfigured_entity_keys = {} # Add this to match real behavior
117
117
 
118
118
  mock_sync_raw_mixin.entity_processor.parse_items = AsyncMock(return_value=calc_result_mock) # type: ignore
119
119
 
@@ -234,7 +234,7 @@ async def test_sync_raw_mixin_circular_dependency(
234
234
  calc_result_mock.number_of_transformed_entities = len(
235
235
  entities
236
236
  ) # Add this to match real behavior
237
- calc_result_mock.misonfigured_entity_keys = {} # Add this to match real behavior
237
+ calc_result_mock.misconfigured_entity_keys = {} # Add this to match real behavior
238
238
 
239
239
  mock_sync_raw_mixin.entity_processor.parse_items = AsyncMock(return_value=calc_result_mock) # type: ignore
240
240
 
@@ -378,7 +378,7 @@ async def test_sync_raw_mixin_dependency(
378
378
  calc_result_mock.number_of_transformed_entities = len(
379
379
  entities
380
380
  ) # Add this to match real behavior
381
- calc_result_mock.misonfigured_entity_keys = {} # Add this to match real behavior
381
+ calc_result_mock.misconfigured_entity_keys = {} # Add this to match real behavior
382
382
 
383
383
  # Mock the parse_items method to return our realistic mock
384
384
  mock_sync_raw_mixin.entity_processor.parse_items = AsyncMock(return_value=calc_result_mock) # type: ignore
@@ -773,7 +773,7 @@ class CalculationResult:
773
773
  entity_selector_diff: EntitySelectorDiff
774
774
  errors: List[Any]
775
775
  misconfigurations: List[Any]
776
- misonfigured_entity_keys: Optional[List[Any]] = None
776
+ misconfigured_entity_keys: Optional[List[Any]] = None
777
777
 
778
778
 
779
779
  @pytest.mark.asyncio
@@ -782,7 +782,7 @@ async def test_register_resource_raw_no_changes_upsert_not_called_entitiy_is_ret
782
782
  mock_port_app_config: PortAppConfig,
783
783
  ) -> None:
784
784
  entity = Entity(identifier="1", blueprint="service")
785
- mock_sync_raw_mixin._calculate_raw = AsyncMock(return_value=[CalculationResult(entity_selector_diff=EntitySelectorDiff(passed=[entity], failed=[]), errors=[], misconfigurations=[], misonfigured_entity_keys=[])]) # type: ignore
785
+ mock_sync_raw_mixin._calculate_raw = AsyncMock(return_value=[CalculationResult(entity_selector_diff=EntitySelectorDiff(passed=[entity], failed=[]), errors=[], misconfigurations=[], misconfigured_entity_keys=[])]) # type: ignore
786
786
  mock_sync_raw_mixin._map_entities_compared_with_port = AsyncMock(return_value=([])) # type: ignore
787
787
  mock_sync_raw_mixin.entities_state_applier.upsert = AsyncMock() # type: ignore
788
788
 
@@ -809,7 +809,7 @@ async def test_register_resource_raw_with_changes_upsert_called_and_entities_are
809
809
  mock_port_app_config: PortAppConfig,
810
810
  ) -> None:
811
811
  entity = Entity(identifier="1", blueprint="service")
812
- mock_sync_raw_mixin._calculate_raw = AsyncMock(return_value=[CalculationResult(entity_selector_diff=EntitySelectorDiff(passed=[entity], failed=[]), errors=[], misconfigurations=[], misonfigured_entity_keys=[])]) # type: ignore
812
+ mock_sync_raw_mixin._calculate_raw = AsyncMock(return_value=[CalculationResult(entity_selector_diff=EntitySelectorDiff(passed=[entity], failed=[]), errors=[], misconfigurations=[], misconfigured_entity_keys=[])]) # type: ignore
813
813
  mock_sync_raw_mixin._map_entities_compared_with_port = AsyncMock(return_value=([entity])) # type: ignore
814
814
  mock_sync_raw_mixin.entities_state_applier.upsert = AsyncMock(return_value=[entity]) # type: ignore
815
815
 
@@ -836,7 +836,7 @@ async def test_register_resource_raw_with_errors(
836
836
  ) -> None:
837
837
  failed_entity = Entity(identifier="1", blueprint="service")
838
838
  error = Exception("Test error")
839
- mock_sync_raw_mixin._calculate_raw = AsyncMock(return_value=[CalculationResult(entity_selector_diff=EntitySelectorDiff(passed=[], failed=[failed_entity]), errors=[error], misconfigurations=[], misonfigured_entity_keys=[])]) # type: ignore
839
+ mock_sync_raw_mixin._calculate_raw = AsyncMock(return_value=[CalculationResult(entity_selector_diff=EntitySelectorDiff(passed=[], failed=[failed_entity]), errors=[error], misconfigurations=[], misconfigured_entity_keys=[])]) # type: ignore
840
840
  mock_sync_raw_mixin._map_entities_compared_with_port = AsyncMock(return_value=([])) # type: ignore
841
841
  mock_sync_raw_mixin.entities_state_applier.upsert = AsyncMock() # type: ignore
842
842
 
@@ -873,7 +873,7 @@ async def test_register_resource_raw_skip_event_type_http_request_upsert_called_
873
873
  entity_selector_diff=EntitySelectorDiff(passed=[entity], failed=[]),
874
874
  errors=[],
875
875
  misconfigurations=[],
876
- misonfigured_entity_keys=[],
876
+ misconfigured_entity_keys=[],
877
877
  )
878
878
  mock_sync_raw_mixin._calculate_raw = AsyncMock(return_value=[calculation_result]) # type: ignore
879
879
  mock_sync_raw_mixin._map_entities_compared_with_port = AsyncMock() # type: ignore
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "port-ocean"
3
- version = "0.25.0"
3
+ version = "0.25.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