port-ocean 0.27.5__tar.gz → 0.27.6__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.27.5 → port_ocean-0.27.6}/PKG-INFO +4 -1
- {port_ocean-0.27.5 → port_ocean-0.27.6}/integrations/_infra/Dockerfile.Deb +4 -1
- {port_ocean-0.27.5 → port_ocean-0.27.6}/integrations/_infra/Dockerfile.local +3 -1
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/config/settings.py +9 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/helpers/async_client.py +7 -0
- port_ocean-0.27.6/port_ocean/helpers/stream.py +71 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/pyproject.toml +5 -1
- {port_ocean-0.27.5 → port_ocean-0.27.6}/LICENSE.md +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/README.md +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/integrations/_infra/Dockerfile.alpine +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/integrations/_infra/Dockerfile.base.builder +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/integrations/_infra/Dockerfile.base.runner +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/integrations/_infra/Dockerfile.dockerignore +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/integrations/_infra/Makefile +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/integrations/_infra/README.md +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/integrations/_infra/entry_local.sh +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/integrations/_infra/grpcio.sh +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/integrations/_infra/init.sh +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/bootstrap.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cache/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cache/base.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cache/disk.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cache/errors.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cache/memory.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/cli.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/commands/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/commands/defaults/__init___.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/commands/defaults/clean.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/commands/defaults/dock.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/commands/defaults/group.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/commands/list_integrations.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/commands/main.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/commands/new.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/commands/pull.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/commands/sail.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/commands/version.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/cookiecutter/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/cookiecutter/cookiecutter.json +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/cookiecutter/extensions.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/cookiecutter/hooks/post_gen_project.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.env.example +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.gitignore +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/.gitignore +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/blueprints.json +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/port-app-config.yml +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/spec.yaml +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/CHANGELOG.md +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/CONTRIBUTING.md +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/README.md +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/changelog/.gitignore +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/debug.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/main.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/poetry.toml +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/pyproject.toml +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/sonar-project.properties +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/tests/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/tests/test_sample.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/cli/utils.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/clients/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/clients/auth/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/clients/auth/auth_client.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/clients/auth/oauth_client.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/clients/port/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/clients/port/authentication.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/clients/port/client.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/clients/port/mixins/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/clients/port/mixins/blueprints.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/clients/port/mixins/entities.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/clients/port/mixins/integrations.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/clients/port/mixins/migrations.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/clients/port/mixins/organization.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/clients/port/retry_transport.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/clients/port/types.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/clients/port/utils.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/config/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/config/base.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/config/dynamic.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/consumers/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/consumers/kafka_consumer.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/context/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/context/event.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/context/metric_resource.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/context/ocean.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/context/resource.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/defaults/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/defaults/clean.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/defaults/common.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/defaults/initialize.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/event_listener/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/event_listener/base.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/event_listener/factory.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/event_listener/http.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/event_listener/kafka.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/event_listener/once.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/event_listener/polling.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/event_listener/webhooks_only.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/base.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/entities_state_applier/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/entities_state_applier/base.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/entities_state_applier/port/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/entities_state_applier/port/applier.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/entities_state_applier/port/get_related_entities.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/entities_state_applier/port/order_by_entities_dependencies.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/entity_processor/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/entity_processor/base.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/entity_processor/jq_entity_processor.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/port_app_config/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/port_app_config/api.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/port_app_config/base.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/port_app_config/models.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/queue/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/queue/abstract_queue.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/queue/group_queue.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/queue/local_queue.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/resync_state_updater/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/resync_state_updater/updater.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/webhook/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/webhook/abstract_webhook_processor.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/webhook/processor_manager.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/webhook/webhook_event.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/integrations/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/integrations/base.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/integrations/mixins/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/integrations/mixins/events.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/integrations/mixins/handler.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/integrations/mixins/live_events.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/integrations/mixins/sync.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/integrations/mixins/sync_raw.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/integrations/mixins/utils.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/models.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/ocean_types.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/utils/entity_topological_sorter.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/utils/utils.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/debug_cli.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/exceptions/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/exceptions/api.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/exceptions/base.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/exceptions/clients.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/exceptions/context.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/exceptions/core.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/exceptions/port_defaults.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/exceptions/utils.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/exceptions/webhook_processor.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/helpers/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/helpers/metric/metric.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/helpers/metric/utils.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/helpers/retry.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/log/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/log/handlers.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/log/logger_setup.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/log/sensetive.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/middlewares.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/ocean.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/py.typed +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/run.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/sonar-project.properties +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/cache/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/cache/test_disk_cache.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/cache/test_memory_cache.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/clients/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/clients/oauth/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/clients/oauth/test_oauth_client.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/clients/port/mixins/test_entities.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/clients/port/mixins/test_integrations.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/clients/port/mixins/test_organization_mixin.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/config/test_config.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/conftest.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/core/conftest.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/core/defaults/test_common.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/core/event_listener/test_kafka.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/core/handlers/entities_state_applier/test_applier.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/core/handlers/entity_processor/test_jq_entity_processor.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/core/handlers/mixins/test_live_events.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/core/handlers/mixins/test_sync_raw.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/core/handlers/port_app_config/test_api.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/core/handlers/port_app_config/test_base.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/core/handlers/queue/test_group_queue.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/core/handlers/queue/test_local_queue.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/core/handlers/webhook/test_abstract_webhook_processor.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/core/handlers/webhook/test_processor_manager.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/core/handlers/webhook/test_webhook_event.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/core/test_utils.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/core/utils/test_entity_topological_sorter.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/core/utils/test_resolve_entities_diff.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/helpers/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/helpers/fake_port_api.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/helpers/fixtures.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/helpers/integration.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/helpers/ocean_app.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/helpers/port_client.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/helpers/smoke_test.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/log/test_handlers.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/test_metric.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/test_ocean.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/test_smoke.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/utils/test_async_iterators.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/utils/test_cache.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/utils/__init__.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/utils/async_http.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/utils/async_iterators.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/utils/cache.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/utils/ipc.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/utils/misc.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/utils/queue_utils.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/utils/repeat.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/utils/signal.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/utils/time.py +0 -0
- {port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/version.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: port-ocean
|
3
|
-
Version: 0.27.
|
3
|
+
Version: 0.27.6
|
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
|
@@ -22,12 +22,15 @@ Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
22
22
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
23
23
|
Classifier: Topic :: Utilities
|
24
24
|
Provides-Extra: cli
|
25
|
+
Requires-Dist: aiofiles (>=24.1.0,<25.0.0)
|
25
26
|
Requires-Dist: aiostream (>=0.5.2,<0.7.0)
|
26
27
|
Requires-Dist: click (>=8.1.3,<9.0.0) ; extra == "cli"
|
27
28
|
Requires-Dist: confluent-kafka (>=2.10.1,<3.0.0)
|
28
29
|
Requires-Dist: cookiecutter (>=2.1.1,<3.0.0) ; extra == "cli"
|
30
|
+
Requires-Dist: cryptography (>=44.0.1,<45.0.0)
|
29
31
|
Requires-Dist: fastapi (>=0.116.0,<0.117.0)
|
30
32
|
Requires-Dist: httpx (>=0.28.1,<0.29.0)
|
33
|
+
Requires-Dist: ijson (>=3.4.0,<4.0.0)
|
31
34
|
Requires-Dist: jinja2 (>=3.1.6)
|
32
35
|
Requires-Dist: jinja2-time (>=0.2.0,<0.3.0) ; extra == "cli"
|
33
36
|
Requires-Dist: jq (>=1.8.0,<2.0.0)
|
@@ -28,11 +28,14 @@ ARG INTEGRATION_VERSION
|
|
28
28
|
ARG BUILD_CONTEXT
|
29
29
|
ARG PROMETHEUS_MULTIPROC_DIR=/tmp/ocean/prometheus/metrics
|
30
30
|
ARG OAUTH_CONFIG_DIR=/app/.config
|
31
|
+
ARG STREAMING_LOCATION=/tmp/ocean/streaming
|
31
32
|
|
32
33
|
ENV LIBRDKAFKA_VERSION=2.8.2 \
|
33
|
-
PROMETHEUS_MULTIPROC_DIR=${PROMETHEUS_MULTIPROC_DIR}
|
34
|
+
PROMETHEUS_MULTIPROC_DIR=${PROMETHEUS_MULTIPROC_DIR} \
|
35
|
+
STREAMING_LOCATION=${STREAMING_LOCATION}
|
34
36
|
|
35
37
|
RUN mkdir -p ${PROMETHEUS_MULTIPROC_DIR}
|
38
|
+
RUN mkdir -p ${STREAMING_LOCATION}
|
36
39
|
RUN chown -R ocean:appgroup /tmp/ocean && chmod -R 755 /tmp/ocean
|
37
40
|
|
38
41
|
RUN mkdir -p ${OAUTH_CONFIG_DIR}
|
@@ -33,13 +33,15 @@ RUN apt-get update \
|
|
33
33
|
|
34
34
|
ARG BUILD_CONTEXT
|
35
35
|
ARG PROMETHEUS_MULTIPROC_DIR=/tmp/ocean/prometheus/metrics
|
36
|
+
ARG STREAMING_LOCATION=/tmp/ocean/streaming
|
36
37
|
|
37
38
|
ENV PROMETHEUS_MULTIPROC_DIR=${PROMETHEUS_MULTIPROC_DIR}
|
38
|
-
|
39
|
+
ENV STREAMING_LOCATION=${STREAMING_LOCATION}
|
39
40
|
# Create /tmp/ocean directory and set permissions
|
40
41
|
|
41
42
|
|
42
43
|
RUN mkdir -p ${PROMETHEUS_MULTIPROC_DIR}
|
44
|
+
RUN mkdir -p ${STREAMING_LOCATION}
|
43
45
|
|
44
46
|
WORKDIR /app
|
45
47
|
|
@@ -73,6 +73,13 @@ class MetricsSettings(BaseOceanModel, extra=Extra.allow):
|
|
73
73
|
webhook_url: str | None = Field(default=None)
|
74
74
|
|
75
75
|
|
76
|
+
class StreamingSettings(BaseOceanModel, extra=Extra.allow):
|
77
|
+
enabled: bool = Field(default=False)
|
78
|
+
max_buffer_size_mb: int = Field(default=1024 * 1024 * 20) # 20 mb
|
79
|
+
chunk_size: int = Field(default=1024 * 64) # 64 kb
|
80
|
+
location: str = Field(default="/tmp/ocean/streaming")
|
81
|
+
|
82
|
+
|
76
83
|
class IntegrationConfiguration(BaseOceanSettings, extra=Extra.allow):
|
77
84
|
_integration_config_model: BaseModel | None = None
|
78
85
|
|
@@ -114,6 +121,8 @@ class IntegrationConfiguration(BaseOceanSettings, extra=Extra.allow):
|
|
114
121
|
yield_items_to_parse: bool = False
|
115
122
|
yield_items_to_parse_batch_size: int = 10
|
116
123
|
|
124
|
+
streaming: StreamingSettings = Field(default_factory=lambda: StreamingSettings())
|
125
|
+
|
117
126
|
@validator("process_execution_mode")
|
118
127
|
def validate_process_execution_mode(
|
119
128
|
cls, process_execution_mode: ProcessExecutionMode
|
@@ -4,6 +4,7 @@ import httpx
|
|
4
4
|
from loguru import logger
|
5
5
|
|
6
6
|
from port_ocean.helpers.retry import RetryTransport
|
7
|
+
from port_ocean.helpers.stream import Stream
|
7
8
|
|
8
9
|
|
9
10
|
class OceanAsyncClient(httpx.AsyncClient):
|
@@ -50,3 +51,9 @@ class OceanAsyncClient(httpx.AsyncClient):
|
|
50
51
|
logger=logger,
|
51
52
|
**(self._transport_kwargs or {}),
|
52
53
|
)
|
54
|
+
|
55
|
+
async def get_stream(self, url: str, **kwargs: Any) -> Stream:
|
56
|
+
req = self.build_request("GET", url, **kwargs)
|
57
|
+
response = await self.send(req, stream=True)
|
58
|
+
response.raise_for_status()
|
59
|
+
return Stream(response)
|
@@ -0,0 +1,71 @@
|
|
1
|
+
import os
|
2
|
+
from typing import Any, AsyncGenerator
|
3
|
+
import uuid
|
4
|
+
|
5
|
+
import aiofiles
|
6
|
+
import httpx
|
7
|
+
import ijson # type: ignore[import-untyped]
|
8
|
+
from cryptography.fernet import Fernet
|
9
|
+
|
10
|
+
import port_ocean.context.ocean as ocean_context
|
11
|
+
|
12
|
+
|
13
|
+
class Stream:
|
14
|
+
def __init__(self, response: httpx.Response):
|
15
|
+
self.response = response
|
16
|
+
self.headers = response.headers
|
17
|
+
self.status_code = response.status_code
|
18
|
+
|
19
|
+
async def _byte_stream(
|
20
|
+
self, chunk_size: int | None = None
|
21
|
+
) -> AsyncGenerator[bytes, None]:
|
22
|
+
if chunk_size is None:
|
23
|
+
chunk_size = ocean_context.ocean.config.streaming.chunk_size
|
24
|
+
|
25
|
+
file_name = f"{ocean_context.ocean.config.streaming.location}/{uuid.uuid4()}"
|
26
|
+
|
27
|
+
crypt = Fernet(Fernet.generate_key())
|
28
|
+
|
29
|
+
try:
|
30
|
+
async for chunk in self.response.aiter_bytes(chunk_size=chunk_size):
|
31
|
+
async with aiofiles.open(f"{file_name}", "ab") as f:
|
32
|
+
if len(chunk) > 0:
|
33
|
+
await f.write(crypt.encrypt(chunk))
|
34
|
+
await f.write(b"\n")
|
35
|
+
finally:
|
36
|
+
await self.response.aclose()
|
37
|
+
|
38
|
+
try:
|
39
|
+
async with aiofiles.open(f"{file_name}", mode="rb") as f:
|
40
|
+
while True:
|
41
|
+
line = await f.readline()
|
42
|
+
if not line:
|
43
|
+
break
|
44
|
+
data = crypt.decrypt(line)
|
45
|
+
yield data
|
46
|
+
finally:
|
47
|
+
try:
|
48
|
+
os.remove(file_name)
|
49
|
+
except FileNotFoundError:
|
50
|
+
pass
|
51
|
+
|
52
|
+
async def get_json_stream(
|
53
|
+
self,
|
54
|
+
target_items: str = "",
|
55
|
+
max_buffer_size_mb: int | None = None,
|
56
|
+
) -> AsyncGenerator[list[dict[str, Any]], None]:
|
57
|
+
if max_buffer_size_mb is None:
|
58
|
+
max_buffer_size_mb = ocean_context.ocean.config.streaming.max_buffer_size_mb
|
59
|
+
|
60
|
+
events = ijson.sendable_list()
|
61
|
+
coro = ijson.items_coro(events, target_items)
|
62
|
+
current_buffer_size = 0
|
63
|
+
async for chunk in self._byte_stream():
|
64
|
+
coro.send(chunk)
|
65
|
+
current_buffer_size += len(chunk)
|
66
|
+
if current_buffer_size >= max_buffer_size_mb:
|
67
|
+
if len(events) > 0:
|
68
|
+
yield events
|
69
|
+
events.clear()
|
70
|
+
current_buffer_size = 0
|
71
|
+
yield events
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[tool.poetry]
|
2
2
|
name = "port-ocean"
|
3
|
-
version = "0.27.
|
3
|
+
version = "0.27.6"
|
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"
|
@@ -65,6 +65,9 @@ cookiecutter = { version = "^2.1.1", optional = true }
|
|
65
65
|
jinja2-time = { version = "^0.2.0", optional = true }
|
66
66
|
prometheus-client = "^0.21.1"
|
67
67
|
pytest-cov = "^6.0.0"
|
68
|
+
ijson = "^3.4.0"
|
69
|
+
aiofiles = "^24.1.0"
|
70
|
+
cryptography = "^44.0.1"
|
68
71
|
|
69
72
|
[tool.poetry.extras]
|
70
73
|
cli = ["click", "rich", "cookiecutter", "jinja2-time"]
|
@@ -90,6 +93,7 @@ cryptography = ">=43.0.1,<45.0.0"
|
|
90
93
|
psutil = "^7.0.0"
|
91
94
|
memray = "^1.17.2"
|
92
95
|
faker = "^37.3.0"
|
96
|
+
types-aiofiles = "^24.1.0.20250809"
|
93
97
|
|
94
98
|
[tool.towncrier]
|
95
99
|
directory = "changelog"
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
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.27.5 → port_ocean-0.27.6}/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
|
{port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/entities_state_applier/__init__.py
RENAMED
File without changes
|
{port_ocean-0.27.5 → port_ocean-0.27.6}/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.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/entity_processor/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{port_ocean-0.27.5 → port_ocean-0.27.6}/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.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/resync_state_updater/__init__.py
RENAMED
File without changes
|
{port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/core/handlers/resync_state_updater/updater.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{port_ocean-0.27.5 → port_ocean-0.27.6}/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
|
{port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/clients/port/mixins/test_entities.py
RENAMED
File without changes
|
{port_ocean-0.27.5 → port_ocean-0.27.6}/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
|
{port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/core/handlers/mixins/test_live_events.py
RENAMED
File without changes
|
{port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/core/handlers/mixins/test_sync_raw.py
RENAMED
File without changes
|
{port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/core/handlers/port_app_config/test_api.py
RENAMED
File without changes
|
{port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/core/handlers/port_app_config/test_base.py
RENAMED
File without changes
|
{port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/core/handlers/queue/test_group_queue.py
RENAMED
File without changes
|
{port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/core/handlers/queue/test_local_queue.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{port_ocean-0.27.5 → port_ocean-0.27.6}/port_ocean/tests/core/handlers/webhook/test_webhook_event.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{port_ocean-0.27.5 → port_ocean-0.27.6}/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
|