port-ocean 0.29.1__tar.gz → 0.29.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {port_ocean-0.29.1 → port_ocean-0.29.2}/PKG-INFO +1 -1
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/actions/execution_manager.py +46 -11
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/integrations/mixins/utils.py +0 -31
- {port_ocean-0.29.1 → port_ocean-0.29.2}/pyproject.toml +1 -1
- {port_ocean-0.29.1 → port_ocean-0.29.2}/LICENSE.md +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/README.md +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/integrations/_infra/Dockerfile.Deb +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/integrations/_infra/Dockerfile.alpine +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/integrations/_infra/Dockerfile.base.builder +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/integrations/_infra/Dockerfile.base.runner +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/integrations/_infra/Dockerfile.dockerignore +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/integrations/_infra/Dockerfile.local +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/integrations/_infra/Makefile +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/integrations/_infra/README.md +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/integrations/_infra/entry_local.sh +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/integrations/_infra/grpcio.sh +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/integrations/_infra/init.sh +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/bootstrap.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cache/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cache/base.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cache/disk.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cache/errors.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cache/memory.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cli.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/commands/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/commands/defaults/__init___.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/commands/defaults/clean.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/commands/defaults/dock.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/commands/defaults/group.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/commands/list_integrations.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/commands/main.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/commands/new.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/commands/pull.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/commands/sail.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/commands/version.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/cookiecutter.json +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/extensions.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/hooks/post_gen_project.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.env.example +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.gitignore +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/.gitignore +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/blueprints.json +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/port-app-config.yml +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/spec.yaml +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/CHANGELOG.md +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/CONTRIBUTING.md +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/README.md +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/changelog/.gitignore +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/debug.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/main.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/poetry.toml +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/pyproject.toml +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/sonar-project.properties +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/tests/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/tests/test_sample.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/cli/utils.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/auth/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/auth/auth_client.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/auth/oauth_client.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/port/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/port/authentication.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/port/client.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/port/mixins/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/port/mixins/actions.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/port/mixins/blueprints.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/port/mixins/entities.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/port/mixins/integrations.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/port/mixins/migrations.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/port/mixins/organization.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/port/retry_transport.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/port/types.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/clients/port/utils.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/config/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/config/base.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/config/dynamic.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/config/settings.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/consumers/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/consumers/kafka_consumer.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/context/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/context/event.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/context/metric_resource.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/context/ocean.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/context/resource.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/defaults/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/defaults/clean.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/defaults/common.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/defaults/initialize.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/event_listener/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/event_listener/actions_only.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/event_listener/base.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/event_listener/factory.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/event_listener/http.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/event_listener/kafka.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/event_listener/once.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/event_listener/polling.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/event_listener/webhooks_only.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/actions/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/actions/abstract_executor.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/base.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/entities_state_applier/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/entities_state_applier/base.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/entities_state_applier/port/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/entities_state_applier/port/applier.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/entities_state_applier/port/get_related_entities.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/entities_state_applier/port/order_by_entities_dependencies.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/entity_processor/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/entity_processor/base.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/entity_processor/jq_entity_processor.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/entity_processor/jq_input_evaluator.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/port_app_config/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/port_app_config/api.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/port_app_config/base.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/port_app_config/models.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/queue/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/queue/abstract_queue.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/queue/group_queue.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/queue/local_queue.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/resync_state_updater/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/resync_state_updater/updater.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/webhook/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/webhook/abstract_webhook_processor.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/webhook/processor_manager.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/webhook/webhook_event.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/integrations/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/integrations/base.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/integrations/mixins/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/integrations/mixins/events.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/integrations/mixins/handler.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/integrations/mixins/live_events.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/integrations/mixins/sync.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/integrations/mixins/sync_raw.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/models.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/ocean_types.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/utils/entity_topological_sorter.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/utils/utils.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/debug_cli.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/exceptions/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/exceptions/api.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/exceptions/base.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/exceptions/clients.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/exceptions/context.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/exceptions/core.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/exceptions/execution_manager.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/exceptions/port_defaults.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/exceptions/utils.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/exceptions/webhook_processor.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/helpers/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/helpers/async_client.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/helpers/metric/metric.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/helpers/metric/utils.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/helpers/retry.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/helpers/stream.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/log/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/log/handlers.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/log/logger_setup.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/log/sensetive.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/middlewares.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/ocean.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/py.typed +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/run.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/sonar-project.properties +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/cache/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/cache/test_disk_cache.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/cache/test_memory_cache.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/clients/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/clients/oauth/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/clients/oauth/test_oauth_client.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/clients/port/mixins/test_entities.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/clients/port/mixins/test_integrations.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/clients/port/mixins/test_organization_mixin.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/config/test_config.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/conftest.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/conftest.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/defaults/test_common.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/event_listener/test_kafka.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/actions/test_execution_manager.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/entities_state_applier/test_applier.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/entity_processor/test_jq_entity_processor.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/entity_processor/test_jq_input_evaluator.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/mixins/test_live_events.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/mixins/test_sync_raw.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/port_app_config/test_api.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/port_app_config/test_base.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/queue/test_group_queue.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/queue/test_local_queue.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/webhook/test_abstract_webhook_processor.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/webhook/test_processor_manager.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/webhook/test_webhook_event.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/test_utils.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/utils/test_entity_topological_sorter.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/utils/test_get_port_diff.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/utils/test_resolve_entities_diff.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/helpers/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/helpers/fake_port_api.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/helpers/fixtures.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/helpers/integration.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/helpers/ocean_app.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/helpers/port_client.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/helpers/smoke_test.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/helpers/test_retry.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/log/test_handlers.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/test_metric.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/test_ocean.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/test_smoke.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/utils/test_async_iterators.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/utils/test_cache.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/utils/__init__.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/utils/async_http.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/utils/async_iterators.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/utils/cache.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/utils/ipc.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/utils/misc.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/utils/queue_utils.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/utils/repeat.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/utils/signal.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/utils/time.py +0 -0
- {port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/version.py +0 -0
{port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/actions/execution_manager.py
RENAMED
|
@@ -22,6 +22,7 @@ from port_ocean.exceptions.execution_manager import (
|
|
|
22
22
|
from port_ocean.utils.signal import SignalHandler
|
|
23
23
|
|
|
24
24
|
RATE_LIMIT_MAX_BACKOFF_SECONDS = 10
|
|
25
|
+
QUEUE_GET_TIMEOUT_SECONDS = 1
|
|
25
26
|
GLOBAL_SOURCE = "__global__"
|
|
26
27
|
|
|
27
28
|
|
|
@@ -86,12 +87,12 @@ class ExecutionManager:
|
|
|
86
87
|
):
|
|
87
88
|
self._webhook_manager = webhook_manager
|
|
88
89
|
self._polling_task: asyncio.Task[None] | None = None
|
|
89
|
-
self._workers_pool: set[asyncio.Task[None]] = set()
|
|
90
|
+
self._workers_pool: set[asyncio.Task[None]] = set[asyncio.Task[None]]()
|
|
90
91
|
self._actions_executors: Dict[str, AbstractExecutor] = {}
|
|
91
92
|
self._is_shutting_down = asyncio.Event()
|
|
92
93
|
self._global_queue = LocalQueue[ActionRun]()
|
|
93
94
|
self._partition_queues: Dict[str, AbstractQueue[ActionRun]] = {}
|
|
94
|
-
self._deduplication_set: Set[str] = set()
|
|
95
|
+
self._deduplication_set: Set[str] = set[str]()
|
|
95
96
|
self._queues_locks: Dict[str, asyncio.Lock] = {GLOBAL_SOURCE: asyncio.Lock()}
|
|
96
97
|
self._active_sources: AbstractQueue[str] = LocalQueue[str]()
|
|
97
98
|
self._workers_count: int = workers_count
|
|
@@ -186,6 +187,7 @@ class ExecutionManager:
|
|
|
186
187
|
await asyncio.sleep(self._poll_check_interval_seconds)
|
|
187
188
|
continue
|
|
188
189
|
|
|
190
|
+
logger.info(f"Adding {len(runs)} runs to queues", runs_count=len(runs))
|
|
189
191
|
for run in runs:
|
|
190
192
|
try:
|
|
191
193
|
action_type = run.payload.integrationActionType
|
|
@@ -253,7 +255,7 @@ class ExecutionManager:
|
|
|
253
255
|
Add a run to the queue, if the queue is empty, add the source to the active sources.
|
|
254
256
|
"""
|
|
255
257
|
if queue_name != GLOBAL_SOURCE and queue_name not in self._partition_queues:
|
|
256
|
-
self._partition_queues[queue_name] = LocalQueue()
|
|
258
|
+
self._partition_queues[queue_name] = LocalQueue[ActionRun]()
|
|
257
259
|
self._queues_locks[queue_name] = asyncio.Lock()
|
|
258
260
|
|
|
259
261
|
queue = (
|
|
@@ -265,7 +267,11 @@ class ExecutionManager:
|
|
|
265
267
|
if await queue.size() == 0:
|
|
266
268
|
await self._active_sources.put(queue_name)
|
|
267
269
|
self._deduplication_set.add(run.id)
|
|
268
|
-
logger.info(
|
|
270
|
+
logger.info(
|
|
271
|
+
f"Adding run to queue {queue_name}",
|
|
272
|
+
run_id=run.id,
|
|
273
|
+
queue_name=queue_name,
|
|
274
|
+
)
|
|
269
275
|
await queue.put(run)
|
|
270
276
|
|
|
271
277
|
async def _add_source_if_not_empty(self, source_name: str) -> None:
|
|
@@ -278,7 +284,14 @@ class ExecutionManager:
|
|
|
278
284
|
if source_name == GLOBAL_SOURCE
|
|
279
285
|
else self._partition_queues[source_name]
|
|
280
286
|
)
|
|
281
|
-
|
|
287
|
+
|
|
288
|
+
queue_size = await queue.size()
|
|
289
|
+
if queue_size > 0:
|
|
290
|
+
logger.debug(
|
|
291
|
+
f"Adding source {source_name} back to active sources as it's not empty",
|
|
292
|
+
source_name=source_name,
|
|
293
|
+
queue_size=queue_size,
|
|
294
|
+
)
|
|
282
295
|
await self._active_sources.put(source_name)
|
|
283
296
|
|
|
284
297
|
async def _process_actions_runs(self) -> None:
|
|
@@ -294,6 +307,10 @@ class ExecutionManager:
|
|
|
294
307
|
self._active_sources.get(),
|
|
295
308
|
timeout=self._max_wait_seconds_before_shutdown / 3,
|
|
296
309
|
)
|
|
310
|
+
logger.debug(
|
|
311
|
+
f"Processing run from {source} queue",
|
|
312
|
+
queue_size=await self._get_queues_size(),
|
|
313
|
+
)
|
|
297
314
|
except asyncio.TimeoutError:
|
|
298
315
|
continue
|
|
299
316
|
|
|
@@ -305,9 +322,20 @@ class ExecutionManager:
|
|
|
305
322
|
logger.exception("Worker processing error", source=source, error=e)
|
|
306
323
|
|
|
307
324
|
async def _handle_global_queue_once(self) -> None:
|
|
325
|
+
"""
|
|
326
|
+
Try to process a single run from the global queue.
|
|
327
|
+
"""
|
|
308
328
|
try:
|
|
309
329
|
async with self._queues_locks[GLOBAL_SOURCE]:
|
|
310
|
-
|
|
330
|
+
try:
|
|
331
|
+
logger.debug("Handling run from global queue")
|
|
332
|
+
run = await asyncio.wait_for(
|
|
333
|
+
self._global_queue.get(), timeout=QUEUE_GET_TIMEOUT_SECONDS
|
|
334
|
+
)
|
|
335
|
+
except asyncio.TimeoutError:
|
|
336
|
+
logger.debug("Global queue is empty, skipping")
|
|
337
|
+
return
|
|
338
|
+
|
|
311
339
|
if run.id in self._deduplication_set:
|
|
312
340
|
self._deduplication_set.remove(run.id)
|
|
313
341
|
|
|
@@ -319,14 +347,21 @@ class ExecutionManager:
|
|
|
319
347
|
async def _handle_partition_queue_once(self, partition_name: str) -> None:
|
|
320
348
|
"""
|
|
321
349
|
Try to process a single run from the given partition queue.
|
|
322
|
-
Returns True if work was done, False otherwise.
|
|
323
350
|
"""
|
|
324
351
|
queue = self._partition_queues[partition_name]
|
|
325
352
|
try:
|
|
326
353
|
async with self._queues_locks[partition_name]:
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
354
|
+
try:
|
|
355
|
+
logger.debug(f"Handling run from {partition_name} queue")
|
|
356
|
+
run = await asyncio.wait_for(
|
|
357
|
+
queue.get(), timeout=QUEUE_GET_TIMEOUT_SECONDS
|
|
358
|
+
)
|
|
359
|
+
if run.id in self._deduplication_set:
|
|
360
|
+
self._deduplication_set.remove(run.id)
|
|
361
|
+
except asyncio.TimeoutError:
|
|
362
|
+
logger.debug(f"Partition queue {partition_name} is empty, skipping")
|
|
363
|
+
return
|
|
364
|
+
|
|
330
365
|
await self._execute_run(run)
|
|
331
366
|
finally:
|
|
332
367
|
await queue.commit()
|
|
@@ -367,7 +402,7 @@ class ExecutionManager:
|
|
|
367
402
|
return
|
|
368
403
|
|
|
369
404
|
await ocean.port_client.acknowledge_run(run.id)
|
|
370
|
-
logger.
|
|
405
|
+
logger.info("Run acknowledged successfully")
|
|
371
406
|
except RunAlreadyAcknowledgedError:
|
|
372
407
|
logger.warning(
|
|
373
408
|
"Run already being processed by another worker, skipping execution",
|
|
@@ -324,34 +324,3 @@ def clear_http_client_context() -> None:
|
|
|
324
324
|
_port_http_client.pop()
|
|
325
325
|
except (RuntimeError, AttributeError):
|
|
326
326
|
pass
|
|
327
|
-
|
|
328
|
-
class _AiterReader:
|
|
329
|
-
"""
|
|
330
|
-
Wraps an iterable of byte chunks (e.g., response.iter_bytes())
|
|
331
|
-
and exposes a .read(n) method that ijson expects.
|
|
332
|
-
"""
|
|
333
|
-
def __init__(self, iterable):
|
|
334
|
-
self._iter = iter(iterable)
|
|
335
|
-
self._buf = bytearray()
|
|
336
|
-
self._eof = False
|
|
337
|
-
|
|
338
|
-
def read(self, n=-1):
|
|
339
|
-
# If n < 0, return everything until EOF
|
|
340
|
-
if n is None or n < 0:
|
|
341
|
-
chunks = [bytes(self._buf)]
|
|
342
|
-
self._buf.clear()
|
|
343
|
-
chunks.extend(self._iter) # drain the iterator
|
|
344
|
-
return b"".join(chunks)
|
|
345
|
-
|
|
346
|
-
# Fill buffer until we have n bytes or hit EOF
|
|
347
|
-
while len(self._buf) < n and not self._eof:
|
|
348
|
-
try:
|
|
349
|
-
self._buf.extend(next(self._iter))
|
|
350
|
-
except StopIteration:
|
|
351
|
-
self._eof = True
|
|
352
|
-
break
|
|
353
|
-
|
|
354
|
-
# Serve up to n bytes
|
|
355
|
-
out = bytes(self._buf[:n])
|
|
356
|
-
del self._buf[:n]
|
|
357
|
-
return out
|
|
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.29.1 → port_ocean-0.29.2}/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
|
|
File without changes
|
{port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/actions/abstract_executor.py
RENAMED
|
File without changes
|
|
File without changes
|
{port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/entities_state_applier/__init__.py
RENAMED
|
File without changes
|
{port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/entities_state_applier/base.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/entity_processor/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/port_app_config/__init__.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
|
{port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/resync_state_updater/__init__.py
RENAMED
|
File without changes
|
{port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/core/handlers/resync_state_updater/updater.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{port_ocean-0.29.1 → port_ocean-0.29.2}/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
|
|
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.29.1 → port_ocean-0.29.2}/port_ocean/tests/clients/port/mixins/test_entities.py
RENAMED
|
File without changes
|
{port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/clients/port/mixins/test_integrations.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
|
{port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/mixins/test_live_events.py
RENAMED
|
File without changes
|
{port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/mixins/test_sync_raw.py
RENAMED
|
File without changes
|
{port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/port_app_config/test_api.py
RENAMED
|
File without changes
|
{port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/port_app_config/test_base.py
RENAMED
|
File without changes
|
{port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/queue/test_group_queue.py
RENAMED
|
File without changes
|
{port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/queue/test_local_queue.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{port_ocean-0.29.1 → port_ocean-0.29.2}/port_ocean/tests/core/handlers/webhook/test_webhook_event.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{port_ocean-0.29.1 → port_ocean-0.29.2}/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
|
|
File without changes
|