port-ocean 0.17.1__tar.gz → 0.17.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of port-ocean might be problematic. Click here for more details.
- {port_ocean-0.17.1 → port_ocean-0.17.3}/PKG-INFO +1 -1
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/context/ocean.py +1 -1
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/handlers/entity_processor/jq_entity_processor.py +35 -5
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/tests/core/handlers/entity_processor/test_jq_entity_processor.py +43 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/pyproject.toml +1 -1
- {port_ocean-0.17.1 → port_ocean-0.17.3}/LICENSE.md +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/README.md +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/integrations/_infra/Dockerfile.Deb +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/integrations/_infra/Dockerfile.alpine +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/integrations/_infra/Dockerfile.base.builder +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/integrations/_infra/Dockerfile.base.runner +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/integrations/_infra/Dockerfile.dockerignore +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/integrations/_infra/Makefile +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/integrations/_infra/grpcio.sh +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/integrations/_infra/init.sh +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/bootstrap.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/cli.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/commands/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/commands/defaults/__init___.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/commands/defaults/clean.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/commands/defaults/dock.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/commands/defaults/group.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/commands/list_integrations.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/commands/main.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/commands/new.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/commands/pull.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/commands/sail.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/commands/version.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/cookiecutter/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/cookiecutter/cookiecutter.json +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/cookiecutter/extensions.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/cookiecutter/hooks/post_gen_project.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.env.example +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.gitignore +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/.gitignore +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/blueprints.json +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/port-app-config.yml +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/spec.yaml +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/CHANGELOG.md +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/CONTRIBUTING.md +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/README.md +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/changelog/.gitignore +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/debug.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/main.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/poetry.toml +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/pyproject.toml +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/sonar-project.properties +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/tests/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/tests/test_sample.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/cli/utils.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/clients/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/clients/port/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/clients/port/authentication.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/clients/port/client.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/clients/port/mixins/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/clients/port/mixins/blueprints.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/clients/port/mixins/entities.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/clients/port/mixins/integrations.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/clients/port/mixins/migrations.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/clients/port/retry_transport.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/clients/port/types.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/clients/port/utils.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/config/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/config/base.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/config/dynamic.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/config/settings.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/consumers/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/consumers/kafka_consumer.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/context/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/context/event.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/context/resource.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/defaults/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/defaults/clean.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/defaults/common.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/defaults/initialize.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/event_listener/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/event_listener/base.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/event_listener/factory.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/event_listener/http.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/event_listener/kafka.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/event_listener/once.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/event_listener/polling.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/event_listener/webhooks_only.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/handlers/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/handlers/base.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/handlers/entities_state_applier/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/handlers/entities_state_applier/base.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/handlers/entities_state_applier/port/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/handlers/entities_state_applier/port/applier.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/handlers/entities_state_applier/port/get_related_entities.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/handlers/entities_state_applier/port/order_by_entities_dependencies.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/handlers/entity_processor/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/handlers/entity_processor/base.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/handlers/port_app_config/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/handlers/port_app_config/api.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/handlers/port_app_config/base.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/handlers/port_app_config/models.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/handlers/resync_state_updater/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/handlers/resync_state_updater/updater.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/integrations/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/integrations/base.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/integrations/mixins/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/integrations/mixins/events.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/integrations/mixins/handler.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/integrations/mixins/sync.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/integrations/mixins/sync_raw.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/integrations/mixins/utils.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/models.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/ocean_types.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/utils/entity_topological_sorter.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/utils/utils.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/debug_cli.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/exceptions/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/exceptions/api.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/exceptions/base.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/exceptions/clients.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/exceptions/context.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/exceptions/core.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/exceptions/port_defaults.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/exceptions/utils.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/helpers/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/helpers/async_client.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/helpers/retry.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/log/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/log/handlers.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/log/logger_setup.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/log/sensetive.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/middlewares.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/ocean.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/py.typed +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/run.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/sonar-project.properties +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/tests/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/tests/clients/port/mixins/test_entities.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/tests/conftest.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/tests/core/defaults/test_common.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/tests/core/handlers/mixins/test_sync_raw.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/tests/core/test_utils.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/tests/core/utils/test_entity_topological_sorter.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/tests/helpers/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/tests/helpers/fake_port_api.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/tests/helpers/fixtures.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/tests/helpers/integration.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/tests/helpers/ocean_app.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/tests/helpers/port_client.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/tests/helpers/smoke_test.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/tests/log/test_handlers.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/tests/test_smoke.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/tests/utils/test_async_iterators.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/tests/utils/test_cache.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/utils/__init__.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/utils/async_http.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/utils/async_iterators.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/utils/cache.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/utils/misc.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/utils/queue_utils.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/utils/repeat.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/utils/signal.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/utils/time.py +0 -0
- {port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/version.py +0 -0
|
@@ -73,7 +73,7 @@ class PortOceanContext:
|
|
|
73
73
|
def on_resync(
|
|
74
74
|
self,
|
|
75
75
|
kind: str | None = None,
|
|
76
|
-
) -> Callable[[RESYNC_EVENT_LISTENER], RESYNC_EVENT_LISTENER | None]:
|
|
76
|
+
) -> Callable[[RESYNC_EVENT_LISTENER | None], RESYNC_EVENT_LISTENER | None]:
|
|
77
77
|
def wrapper(
|
|
78
78
|
function: RESYNC_EVENT_LISTENER | None,
|
|
79
79
|
) -> RESYNC_EVENT_LISTENER | None:
|
|
@@ -3,7 +3,6 @@ from asyncio import Task
|
|
|
3
3
|
from dataclasses import dataclass, field
|
|
4
4
|
from functools import lru_cache
|
|
5
5
|
from typing import Any, Optional
|
|
6
|
-
|
|
7
6
|
import jq # type: ignore
|
|
8
7
|
from loguru import logger
|
|
9
8
|
|
|
@@ -66,6 +65,22 @@ class JQEntityProcessor(BaseEntityProcessor):
|
|
|
66
65
|
|
|
67
66
|
return inner
|
|
68
67
|
|
|
68
|
+
@staticmethod
|
|
69
|
+
def _notify_mapping_issues(
|
|
70
|
+
entity_misconfigurations: dict[str, str],
|
|
71
|
+
missing_required_fields: bool,
|
|
72
|
+
entity_mapping_fault_counter: int,
|
|
73
|
+
) -> None:
|
|
74
|
+
|
|
75
|
+
if len(entity_misconfigurations) > 0:
|
|
76
|
+
logger.info(
|
|
77
|
+
f"Unable to find valid data for: {entity_misconfigurations} (null, missing, or misconfigured)"
|
|
78
|
+
)
|
|
79
|
+
if missing_required_fields:
|
|
80
|
+
logger.info(
|
|
81
|
+
f"{entity_mapping_fault_counter} transformations of batch failed due to empty values"
|
|
82
|
+
)
|
|
83
|
+
|
|
69
84
|
async def _search(self, data: dict[str, Any], pattern: str) -> Any:
|
|
70
85
|
try:
|
|
71
86
|
loop = asyncio.get_event_loop()
|
|
@@ -252,9 +267,12 @@ class JQEntityProcessor(BaseEntityProcessor):
|
|
|
252
267
|
examples_to_send: list[dict[str, Any]] = []
|
|
253
268
|
entity_misconfigurations: dict[str, str] = {}
|
|
254
269
|
missing_required_fields: bool = False
|
|
270
|
+
entity_mapping_fault_counter: int = 0
|
|
271
|
+
|
|
255
272
|
for result in calculated_entities_results:
|
|
256
273
|
if len(result.misconfigurations) > 0:
|
|
257
274
|
entity_misconfigurations |= result.misconfigurations
|
|
275
|
+
|
|
258
276
|
if result.entity.get("identifier") and result.entity.get("blueprint"):
|
|
259
277
|
parsed_entity = Entity.parse_obj(result.entity)
|
|
260
278
|
if result.did_entity_pass_selector:
|
|
@@ -268,10 +286,22 @@ class JQEntityProcessor(BaseEntityProcessor):
|
|
|
268
286
|
failed_entities.append(parsed_entity)
|
|
269
287
|
else:
|
|
270
288
|
missing_required_fields = True
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
289
|
+
if (result.entity.get("identifier") == "") or (
|
|
290
|
+
result.entity.get("blueprint") == ""
|
|
291
|
+
):
|
|
292
|
+
entity_mapping_fault_counter += 1
|
|
293
|
+
else:
|
|
294
|
+
logger.debug(
|
|
295
|
+
f"Mapping failed, values verification for identifier: {result.entity.get("identifier")}, \
|
|
296
|
+
for blueprint: {result.entity.get("blueprint")}"
|
|
297
|
+
)
|
|
298
|
+
|
|
299
|
+
self._notify_mapping_issues(
|
|
300
|
+
entity_misconfigurations,
|
|
301
|
+
missing_required_fields,
|
|
302
|
+
entity_mapping_fault_counter,
|
|
303
|
+
)
|
|
304
|
+
|
|
275
305
|
if (
|
|
276
306
|
not calculated_entities_results
|
|
277
307
|
and raw_results
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
from typing import Any
|
|
2
2
|
from unittest.mock import AsyncMock, Mock
|
|
3
|
+
from loguru import logger
|
|
3
4
|
import pytest
|
|
5
|
+
from io import StringIO
|
|
4
6
|
|
|
5
7
|
from port_ocean.context.ocean import PortOceanContext
|
|
6
8
|
from port_ocean.core.handlers.entity_processor.jq_entity_processor import (
|
|
@@ -303,3 +305,44 @@ class TestJQEntityProcessor:
|
|
|
303
305
|
"url": ".foobar",
|
|
304
306
|
"defaultBranch": ".bar.baz",
|
|
305
307
|
}
|
|
308
|
+
|
|
309
|
+
async def test_parse_items_empty_required(
|
|
310
|
+
self, mocked_processor: JQEntityProcessor
|
|
311
|
+
) -> None:
|
|
312
|
+
stream = StringIO()
|
|
313
|
+
sink_id = logger.add(stream, level="DEBUG")
|
|
314
|
+
|
|
315
|
+
mapping = Mock()
|
|
316
|
+
mapping.port.entity.mappings.dict.return_value = {
|
|
317
|
+
"identifier": ".foo",
|
|
318
|
+
"blueprint": ".bar",
|
|
319
|
+
}
|
|
320
|
+
mapping.port.items_to_parse = None
|
|
321
|
+
mapping.selector.query = "true"
|
|
322
|
+
raw_results: list[dict[Any, Any]] = [
|
|
323
|
+
{"foo": "", "bar": "bluePrintMapped"},
|
|
324
|
+
{"foo": "identifierMapped", "bar": ""},
|
|
325
|
+
]
|
|
326
|
+
result = await mocked_processor._parse_items(mapping, raw_results)
|
|
327
|
+
assert "identifier" not in result.misonfigured_entity_keys
|
|
328
|
+
assert "blueprint" not in result.misonfigured_entity_keys
|
|
329
|
+
|
|
330
|
+
raw_results = [
|
|
331
|
+
{"foo": "identifierMapped", "bar": None},
|
|
332
|
+
{"foo": None, "bar": ""},
|
|
333
|
+
]
|
|
334
|
+
result = await mocked_processor._parse_items(mapping, raw_results)
|
|
335
|
+
assert result.misonfigured_entity_keys == {
|
|
336
|
+
"identifier": ".foo",
|
|
337
|
+
"blueprint": ".bar",
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
logger.remove(sink_id)
|
|
341
|
+
logs_captured = stream.getvalue()
|
|
342
|
+
|
|
343
|
+
assert "2 transformations of batch failed due to empty values" in logs_captured
|
|
344
|
+
assert (
|
|
345
|
+
"{'blueprint': '.bar', 'identifier': '.foo'} (null, missing, or misconfigured)"
|
|
346
|
+
in logs_captured
|
|
347
|
+
)
|
|
348
|
+
assert "1 transformations of batch failed due to empty values" in logs_captured
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.17.1 → port_ocean-0.17.3}/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
|
{port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/handlers/entities_state_applier/__init__.py
RENAMED
|
File without changes
|
{port_ocean-0.17.1 → port_ocean-0.17.3}/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.17.1 → port_ocean-0.17.3}/port_ocean/core/handlers/entity_processor/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/handlers/port_app_config/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/handlers/resync_state_updater/__init__.py
RENAMED
|
File without changes
|
{port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/core/handlers/resync_state_updater/updater.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
|
{port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/tests/clients/port/mixins/test_entities.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{port_ocean-0.17.1 → port_ocean-0.17.3}/port_ocean/tests/core/handlers/mixins/test_sync_raw.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
|