port-ocean 0.24.17__tar.gz → 0.24.19__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.
- {port_ocean-0.24.17 → port_ocean-0.24.19}/PKG-INFO +1 -1
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/entities_state_applier/port/applier.py +20 -12
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/integrations/mixins/sync_raw.py +4 -1
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/core/handlers/entities_state_applier/test_applier.py +58 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/core/handlers/mixins/test_sync_raw.py +6 -3
- {port_ocean-0.24.17 → port_ocean-0.24.19}/pyproject.toml +1 -1
- {port_ocean-0.24.17 → port_ocean-0.24.19}/LICENSE.md +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/README.md +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/integrations/_infra/Dockerfile.Deb +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/integrations/_infra/Dockerfile.alpine +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/integrations/_infra/Dockerfile.base.builder +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/integrations/_infra/Dockerfile.base.runner +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/integrations/_infra/Dockerfile.dockerignore +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/integrations/_infra/Dockerfile.local +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/integrations/_infra/Makefile +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/integrations/_infra/entry_local.sh +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/integrations/_infra/grpcio.sh +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/integrations/_infra/init.sh +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/bootstrap.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cache/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cache/base.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cache/disk.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cache/errors.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cache/memory.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/cli.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/commands/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/commands/defaults/__init___.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/commands/defaults/clean.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/commands/defaults/dock.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/commands/defaults/group.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/commands/list_integrations.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/commands/main.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/commands/new.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/commands/pull.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/commands/sail.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/commands/version.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/cookiecutter/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/cookiecutter/cookiecutter.json +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/cookiecutter/extensions.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/cookiecutter/hooks/post_gen_project.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.env.example +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.gitignore +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/.gitignore +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/blueprints.json +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/port-app-config.yml +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/spec.yaml +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/CHANGELOG.md +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/CONTRIBUTING.md +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/README.md +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/changelog/.gitignore +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/debug.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/main.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/poetry.toml +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/pyproject.toml +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/sonar-project.properties +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/tests/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/tests/test_sample.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/utils.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/clients/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/clients/auth/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/clients/auth/auth_client.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/clients/auth/oauth_client.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/clients/port/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/clients/port/authentication.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/clients/port/client.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/clients/port/mixins/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/clients/port/mixins/blueprints.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/clients/port/mixins/entities.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/clients/port/mixins/integrations.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/clients/port/mixins/migrations.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/clients/port/mixins/organization.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/clients/port/retry_transport.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/clients/port/types.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/clients/port/utils.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/config/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/config/base.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/config/dynamic.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/config/settings.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/consumers/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/consumers/kafka_consumer.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/context/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/context/event.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/context/metric_resource.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/context/ocean.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/context/resource.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/defaults/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/defaults/clean.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/defaults/common.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/defaults/initialize.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/event_listener/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/event_listener/base.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/event_listener/factory.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/event_listener/http.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/event_listener/kafka.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/event_listener/once.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/event_listener/polling.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/event_listener/webhooks_only.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/base.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/entities_state_applier/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/entities_state_applier/base.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/entities_state_applier/port/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/entities_state_applier/port/get_related_entities.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/entities_state_applier/port/order_by_entities_dependencies.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/entity_processor/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/entity_processor/base.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/entity_processor/jq_entity_processor.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/port_app_config/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/port_app_config/api.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/port_app_config/base.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/port_app_config/models.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/queue/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/queue/abstract_queue.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/queue/local_queue.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/resync_state_updater/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/resync_state_updater/updater.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/webhook/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/webhook/abstract_webhook_processor.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/webhook/processor_manager.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/webhook/webhook_event.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/integrations/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/integrations/base.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/integrations/mixins/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/integrations/mixins/events.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/integrations/mixins/handler.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/integrations/mixins/live_events.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/integrations/mixins/sync.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/integrations/mixins/utils.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/models.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/ocean_types.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/utils/entity_topological_sorter.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/utils/utils.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/debug_cli.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/exceptions/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/exceptions/api.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/exceptions/base.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/exceptions/clients.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/exceptions/context.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/exceptions/core.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/exceptions/port_defaults.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/exceptions/utils.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/exceptions/webhook_processor.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/helpers/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/helpers/async_client.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/helpers/metric/metric.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/helpers/metric/utils.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/helpers/retry.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/log/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/log/handlers.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/log/logger_setup.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/log/sensetive.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/middlewares.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/ocean.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/py.typed +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/run.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/sonar-project.properties +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/cache/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/cache/test_disk_cache.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/cache/test_memory_cache.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/clients/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/clients/oauth/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/clients/oauth/test_oauth_client.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/clients/port/mixins/test_entities.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/clients/port/mixins/test_organization_mixin.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/conftest.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/core/conftest.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/core/defaults/test_common.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/core/handlers/entity_processor/test_jq_entity_processor.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/core/handlers/mixins/test_live_events.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/core/handlers/port_app_config/test_api.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/core/handlers/port_app_config/test_base.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/core/handlers/queue/test_local_queue.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/core/handlers/webhook/test_abstract_webhook_processor.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/core/handlers/webhook/test_processor_manager.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/core/handlers/webhook/test_webhook_event.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/core/test_utils.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/core/utils/test_entity_topological_sorter.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/core/utils/test_resolve_entities_diff.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/helpers/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/helpers/fake_port_api.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/helpers/fixtures.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/helpers/integration.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/helpers/ocean_app.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/helpers/port_client.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/helpers/smoke_test.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/log/test_handlers.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/test_metric.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/test_ocean.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/test_smoke.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/utils/test_async_iterators.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/utils/test_cache.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/utils/__init__.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/utils/async_http.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/utils/async_iterators.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/utils/cache.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/utils/ipc.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/utils/misc.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/utils/queue_utils.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/utils/repeat.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/utils/signal.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/utils/time.py +0 -0
- {port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/version.py +0 -0
@@ -1,3 +1,4 @@
|
|
1
|
+
from collections import defaultdict
|
1
2
|
from loguru import logger
|
2
3
|
|
3
4
|
from port_ocean.clients.port.types import UserAgentType
|
@@ -125,20 +126,27 @@ class HttpEntitiesStateApplier(BaseEntitiesStateApplier):
|
|
125
126
|
) -> list[Entity]:
|
126
127
|
logger.info(f"Upserting {len(entities)} entities")
|
127
128
|
modified_entities: list[Entity] = []
|
128
|
-
upserted_entities: list[tuple[bool, Entity]] = []
|
129
129
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
130
|
+
blueprint_groups: dict[str, list[Entity]] = defaultdict(list)
|
131
|
+
for entity in entities:
|
132
|
+
blueprint_groups[entity.blueprint].append(entity)
|
133
|
+
|
134
|
+
for blueprint_entities in blueprint_groups.values():
|
135
|
+
upserted_entities = (
|
136
|
+
await self.context.port_client.upsert_entities_in_batches(
|
137
|
+
blueprint_entities,
|
138
|
+
event.port_app_config.get_port_request_options(),
|
139
|
+
user_agent_type,
|
140
|
+
should_raise=False,
|
141
|
+
)
|
142
|
+
)
|
143
|
+
|
144
|
+
for is_upserted, entity in upserted_entities:
|
145
|
+
if is_upserted:
|
146
|
+
modified_entities.append(entity)
|
147
|
+
else:
|
148
|
+
event.entity_topological_sorter.register_entity(entity)
|
136
149
|
|
137
|
-
for is_upserted, entity in upserted_entities:
|
138
|
-
if is_upserted:
|
139
|
-
modified_entities.append(entity)
|
140
|
-
else:
|
141
|
-
event.entity_topological_sorter.register_entity(entity)
|
142
150
|
return modified_entities
|
143
151
|
|
144
152
|
async def delete(
|
@@ -735,6 +735,8 @@ class SyncRawMixin(HandlerMixin, EventsMixin):
|
|
735
735
|
|
736
736
|
logger.info("Finished executing resync_complete hooks")
|
737
737
|
|
738
|
+
return True
|
739
|
+
|
738
740
|
|
739
741
|
@TimeMetric(MetricPhase.RESYNC)
|
740
742
|
async def sync_raw_all(
|
@@ -805,7 +807,7 @@ class SyncRawMixin(HandlerMixin, EventsMixin):
|
|
805
807
|
logger.warning("Resync aborted successfully, skipping delete phase. This leads to an incomplete state")
|
806
808
|
raise
|
807
809
|
else:
|
808
|
-
await self.resync_reconciliation(
|
810
|
+
success = await self.resync_reconciliation(
|
809
811
|
creation_results,
|
810
812
|
did_fetched_current_state,
|
811
813
|
user_agent_type,
|
@@ -813,6 +815,7 @@ class SyncRawMixin(HandlerMixin, EventsMixin):
|
|
813
815
|
silent
|
814
816
|
)
|
815
817
|
await ocean.metrics.report_sync_metrics(kinds=[MetricResourceKind.RECONCILIATION])
|
818
|
+
return success
|
816
819
|
finally:
|
817
820
|
await ocean.app.cache_provider.clear()
|
818
821
|
if ocean.app.process_execution_mode == ProcessExecutionMode.multi_process:
|
@@ -228,3 +228,61 @@ async def test_using_create_entity_helper(
|
|
228
228
|
|
229
229
|
mock_upsert.assert_called_once()
|
230
230
|
assert len(result) == 1
|
231
|
+
|
232
|
+
|
233
|
+
@pytest.mark.asyncio
|
234
|
+
async def test_upsert_groups_entities_by_blueprint(
|
235
|
+
mock_ocean: Ocean,
|
236
|
+
mock_context: PortOceanContext,
|
237
|
+
mock_port_app_config: PortAppConfig,
|
238
|
+
) -> None:
|
239
|
+
"""Test that upsert groups entities by blueprint and calls upsert_entities_in_batches separately for each group."""
|
240
|
+
applier = HttpEntitiesStateApplier(mock_context)
|
241
|
+
|
242
|
+
# Create entities with different blueprints
|
243
|
+
service_entity_1 = Entity(identifier="service_1", blueprint="service")
|
244
|
+
service_entity_2 = Entity(identifier="service_2", blueprint="service")
|
245
|
+
deployment_entity = Entity(identifier="deployment_1", blueprint="deployment")
|
246
|
+
user_entity = Entity(identifier="user_1", blueprint="user")
|
247
|
+
|
248
|
+
entities = [service_entity_1, deployment_entity, service_entity_2, user_entity]
|
249
|
+
|
250
|
+
async with event_context(EventType.RESYNC, trigger_type="machine") as event:
|
251
|
+
event.port_app_config = mock_port_app_config
|
252
|
+
|
253
|
+
mock_ocean.config.upsert_entities_batch_max_length = 100
|
254
|
+
mock_ocean.config.upsert_entities_batch_max_size_in_bytes = 1000
|
255
|
+
|
256
|
+
# Mock the upsert_entities_in_batches method to track calls
|
257
|
+
mock_upsert = AsyncMock()
|
258
|
+
mock_upsert.side_effect = [
|
259
|
+
[
|
260
|
+
(True, service_entity_1),
|
261
|
+
(True, service_entity_2),
|
262
|
+
], # First call for "service" blueprint
|
263
|
+
[(True, deployment_entity)], # Second call for "deployment" blueprint
|
264
|
+
[(True, user_entity)], # Third call for "user" blueprint
|
265
|
+
]
|
266
|
+
setattr(mock_ocean.port_client, "upsert_entities_in_batches", mock_upsert)
|
267
|
+
|
268
|
+
result = await applier.upsert(entities, UserAgentType.exporter)
|
269
|
+
|
270
|
+
assert mock_upsert.call_count == 3
|
271
|
+
|
272
|
+
assert len(result) == 4
|
273
|
+
|
274
|
+
calls = mock_upsert.call_args_list
|
275
|
+
|
276
|
+
called_entities_groups = [call[0][0] for call in calls]
|
277
|
+
blueprint_counts = {}
|
278
|
+
for entities_group in called_entities_groups:
|
279
|
+
blueprint = entities_group[0].blueprint
|
280
|
+
for entity in entities_group:
|
281
|
+
assert entity.blueprint == blueprint
|
282
|
+
blueprint_counts[blueprint] = len(entities_group)
|
283
|
+
|
284
|
+
# Verify the expected blueprint counts
|
285
|
+
assert blueprint_counts["service"] == 2
|
286
|
+
assert blueprint_counts["deployment"] == 1
|
287
|
+
assert blueprint_counts["user"] == 1
|
288
|
+
assert len(blueprint_counts) == 3
|
{port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/core/handlers/mixins/test_sync_raw.py
RENAMED
@@ -139,9 +139,10 @@ async def test_sync_raw_mixin_self_dependency(
|
|
139
139
|
mock_order_by_entities_dependencies,
|
140
140
|
):
|
141
141
|
|
142
|
-
await mock_sync_raw_mixin.sync_raw_all(
|
142
|
+
res = await mock_sync_raw_mixin.sync_raw_all(
|
143
143
|
trigger_type="machine", user_agent_type=UserAgentType.exporter
|
144
144
|
)
|
145
|
+
assert res is True
|
145
146
|
|
146
147
|
assert (
|
147
148
|
len(event.entity_topological_sorter.entities) == 1
|
@@ -276,9 +277,10 @@ async def test_sync_raw_mixin_circular_dependency(
|
|
276
277
|
mock_order_by_entities_dependencies,
|
277
278
|
):
|
278
279
|
|
279
|
-
await mock_sync_raw_mixin.sync_raw_all(
|
280
|
+
res = await mock_sync_raw_mixin.sync_raw_all(
|
280
281
|
trigger_type="machine", user_agent_type=UserAgentType.exporter
|
281
282
|
)
|
283
|
+
assert res is True
|
282
284
|
|
283
285
|
assert (
|
284
286
|
len(event.entity_topological_sorter.entities) == 2
|
@@ -420,9 +422,10 @@ async def test_sync_raw_mixin_dependency(
|
|
420
422
|
mock_order_by_entities_dependencies,
|
421
423
|
):
|
422
424
|
|
423
|
-
await mock_sync_raw_mixin.sync_raw_all(
|
425
|
+
res = await mock_sync_raw_mixin.sync_raw_all(
|
424
426
|
trigger_type="machine", user_agent_type=UserAgentType.exporter
|
425
427
|
)
|
428
|
+
assert res is True
|
426
429
|
|
427
430
|
assert event.entity_topological_sorter.register_entity.call_count == 5
|
428
431
|
assert (
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/cli/cookiecutter/hooks/post_gen_project.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/entities_state_applier/base.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/entity_processor/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/port_app_config/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/port_app_config/models.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/resync_state_updater/__init__.py
RENAMED
File without changes
|
{port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/resync_state_updater/updater.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/handlers/webhook/processor_manager.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/integrations/mixins/live_events.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/core/utils/entity_topological_sorter.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/clients/oauth/test_oauth_client.py
RENAMED
File without changes
|
{port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/clients/port/mixins/test_entities.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/core/handlers/mixins/test_live_events.py
RENAMED
File without changes
|
{port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/core/handlers/port_app_config/test_api.py
RENAMED
File without changes
|
File without changes
|
{port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/core/handlers/queue/test_local_queue.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{port_ocean-0.24.17 → port_ocean-0.24.19}/port_ocean/tests/core/utils/test_resolve_entities_diff.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|