port-ocean 0.14.6__tar.gz → 0.15.0__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.14.6 → port_ocean-0.15.0}/PKG-INFO +1 -1
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/clients/port/authentication.py +1 -1
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/clients/port/mixins/entities.py +1 -1
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/config/settings.py +1 -1
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/models.py +5 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/helpers/retry.py +1 -1
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/ocean.py +1 -2
- port_ocean-0.15.0/port_ocean/tests/helpers/fake_port_api.py +191 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/pyproject.toml +1 -1
- {port_ocean-0.14.6 → port_ocean-0.15.0}/LICENSE.md +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/README.md +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/integrations/_infra/Dockerfile.Deb +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/integrations/_infra/Dockerfile.alpine +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/integrations/_infra/Dockerfile.base.builder +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/integrations/_infra/Dockerfile.base.runner +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/integrations/_infra/Dockerfile.dockerignore +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/integrations/_infra/Makefile +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/integrations/_infra/grpcio.sh +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/integrations/_infra/init.sh +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/bootstrap.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/cli.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/commands/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/commands/defaults/__init___.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/commands/defaults/clean.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/commands/defaults/dock.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/commands/defaults/group.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/commands/list_integrations.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/commands/main.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/commands/new.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/commands/pull.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/commands/sail.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/commands/version.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/cookiecutter/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/cookiecutter/cookiecutter.json +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/cookiecutter/extensions.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/cookiecutter/hooks/post_gen_project.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.env.example +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.gitignore +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/.gitignore +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/blueprints.json +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/port-app-config.yml +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/spec.yaml +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/CHANGELOG.md +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/CONTRIBUTING.md +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/README.md +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/changelog/.gitignore +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/debug.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/main.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/poetry.toml +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/pyproject.toml +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/sonar-project.properties +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/tests/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/tests/test_sample.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/cli/utils.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/clients/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/clients/port/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/clients/port/client.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/clients/port/mixins/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/clients/port/mixins/blueprints.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/clients/port/mixins/integrations.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/clients/port/mixins/migrations.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/clients/port/retry_transport.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/clients/port/types.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/clients/port/utils.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/config/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/config/base.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/config/dynamic.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/consumers/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/consumers/kafka_consumer.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/context/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/context/event.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/context/ocean.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/context/resource.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/defaults/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/defaults/clean.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/defaults/common.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/defaults/initialize.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/event_listener/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/event_listener/base.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/event_listener/factory.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/event_listener/http.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/event_listener/kafka.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/event_listener/once.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/event_listener/polling.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/handlers/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/handlers/base.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/handlers/entities_state_applier/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/handlers/entities_state_applier/base.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/handlers/entities_state_applier/port/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/handlers/entities_state_applier/port/applier.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/handlers/entities_state_applier/port/get_related_entities.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/handlers/entities_state_applier/port/order_by_entities_dependencies.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/handlers/entity_processor/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/handlers/entity_processor/base.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/handlers/entity_processor/jq_entity_processor.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/handlers/port_app_config/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/handlers/port_app_config/api.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/handlers/port_app_config/base.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/handlers/port_app_config/models.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/handlers/resync_state_updater/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/handlers/resync_state_updater/updater.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/integrations/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/integrations/base.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/integrations/mixins/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/integrations/mixins/events.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/integrations/mixins/handler.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/integrations/mixins/sync.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/integrations/mixins/sync_raw.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/integrations/mixins/utils.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/ocean_types.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/utils.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/exceptions/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/exceptions/api.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/exceptions/base.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/exceptions/clients.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/exceptions/context.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/exceptions/core.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/exceptions/port_defaults.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/exceptions/utils.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/helpers/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/helpers/async_client.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/log/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/log/handlers.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/log/logger_setup.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/log/sensetive.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/middlewares.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/py.typed +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/run.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/sonar-project.properties +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/tests/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/tests/clients/port/mixins/test_entities.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/tests/conftest.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/tests/core/defaults/test_common.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/tests/core/handlers/entity_processor/test_jq_entity_processor.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/tests/helpers/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/tests/helpers/fixtures.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/tests/helpers/integration.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/tests/helpers/ocean_app.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/tests/helpers/port_client.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/tests/helpers/smoke_test.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/tests/log/test_handlers.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/tests/test_smoke.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/tests/utils/test_async_iterators.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/tests/utils/test_cache.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/utils/__init__.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/utils/async_http.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/utils/async_iterators.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/utils/cache.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/utils/misc.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/utils/queue_utils.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/utils/repeat.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/utils/signal.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/utils/time.py +0 -0
- {port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/version.py +0 -0
|
@@ -48,6 +48,7 @@ class EntityClientMixin:
|
|
|
48
48
|
).lower(),
|
|
49
49
|
"validation_only": str(validation_only).lower(),
|
|
50
50
|
},
|
|
51
|
+
extensions={"retryable": True},
|
|
51
52
|
)
|
|
52
53
|
|
|
53
54
|
if response.is_error:
|
|
@@ -205,7 +206,6 @@ class EntityClientMixin:
|
|
|
205
206
|
"include": ["blueprint", "identifier"],
|
|
206
207
|
},
|
|
207
208
|
extensions={"retryable": True},
|
|
208
|
-
timeout=30,
|
|
209
209
|
)
|
|
210
210
|
handle_status_code(response)
|
|
211
211
|
return [Entity.parse_obj(result) for result in response.json()["entities"]]
|
|
@@ -103,7 +103,7 @@ class IntegrationConfiguration(BaseOceanSettings, extra=Extra.allow):
|
|
|
103
103
|
|
|
104
104
|
@validator("runtime")
|
|
105
105
|
def validate_runtime(cls, runtime: Runtime) -> Runtime:
|
|
106
|
-
if runtime
|
|
106
|
+
if runtime.is_saas_runtime:
|
|
107
107
|
spec = get_spec_file()
|
|
108
108
|
if spec is None:
|
|
109
109
|
raise ValueError(
|
|
@@ -8,8 +8,13 @@ from pydantic.fields import Field
|
|
|
8
8
|
|
|
9
9
|
class Runtime(Enum):
|
|
10
10
|
Saas = "Saas"
|
|
11
|
+
SaasOauth = "SaasOauth"
|
|
11
12
|
OnPrem = "OnPrem"
|
|
12
13
|
|
|
14
|
+
@property
|
|
15
|
+
def is_saas_runtime(self) -> bool:
|
|
16
|
+
return self in [Runtime.Saas, Runtime.SaasOauth]
|
|
17
|
+
|
|
13
18
|
|
|
14
19
|
class Entity(BaseModel):
|
|
15
20
|
identifier: Any
|
|
@@ -134,7 +134,7 @@ class RetryTransport(httpx.AsyncBaseTransport, httpx.BaseTransport):
|
|
|
134
134
|
"""
|
|
135
135
|
try:
|
|
136
136
|
transport: httpx.BaseTransport = self._wrapped_transport # type: ignore
|
|
137
|
-
if
|
|
137
|
+
if self._is_retryable_method(request):
|
|
138
138
|
send_method = partial(transport.handle_request)
|
|
139
139
|
response = self._retry_operation(request, send_method)
|
|
140
140
|
else:
|
|
@@ -10,7 +10,6 @@ from pydantic import BaseModel
|
|
|
10
10
|
from starlette.types import Scope, Receive, Send
|
|
11
11
|
|
|
12
12
|
from port_ocean.core.handlers.resync_state_updater import ResyncStateUpdater
|
|
13
|
-
from port_ocean.core.models import Runtime
|
|
14
13
|
from port_ocean.clients.port.client import PortClient
|
|
15
14
|
from port_ocean.config.settings import (
|
|
16
15
|
IntegrationConfiguration,
|
|
@@ -73,7 +72,7 @@ class Ocean:
|
|
|
73
72
|
self.app_initialized = False
|
|
74
73
|
|
|
75
74
|
def is_saas(self) -> bool:
|
|
76
|
-
return self.config.runtime
|
|
75
|
+
return self.config.runtime.is_saas_runtime
|
|
77
76
|
|
|
78
77
|
async def _setup_scheduled_resync(
|
|
79
78
|
self,
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import uvicorn
|
|
2
|
+
import os
|
|
3
|
+
from typing import Dict, Any
|
|
4
|
+
from fastapi import FastAPI, Request
|
|
5
|
+
|
|
6
|
+
SMOKE_TEST_SUFFIX = os.environ.get("SMOKE_TEST_SUFFIX", "smoke")
|
|
7
|
+
|
|
8
|
+
app = FastAPI()
|
|
9
|
+
|
|
10
|
+
FAKE_DEPARTMENT_BLUEPRINT = {
|
|
11
|
+
"identifier": f"fake-department-{SMOKE_TEST_SUFFIX}",
|
|
12
|
+
"title": "Fake Department",
|
|
13
|
+
"icon": "Blueprint",
|
|
14
|
+
"schema": {"properties": {"name": {"type": "string"}, "id": {"type": "string"}}},
|
|
15
|
+
"relations": {},
|
|
16
|
+
}
|
|
17
|
+
FAKE_PERSON_BLUEPRINT = {
|
|
18
|
+
"identifier": f"fake-person-{SMOKE_TEST_SUFFIX}",
|
|
19
|
+
"title": "Fake Person",
|
|
20
|
+
"icon": "Blueprint",
|
|
21
|
+
"schema": {
|
|
22
|
+
"properties": {
|
|
23
|
+
"status": {
|
|
24
|
+
"type": "string",
|
|
25
|
+
"enum": ["WORKING", "NOPE"],
|
|
26
|
+
"enumColors": {"WORKING": "green", "NOPE": "red"},
|
|
27
|
+
"title": "Status",
|
|
28
|
+
},
|
|
29
|
+
"email": {"type": "string", "format": "email", "title": "Email"},
|
|
30
|
+
"age": {"type": "number", "title": "Age"},
|
|
31
|
+
"bio": {"type": "string", "title": "Bio"},
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"relations": {
|
|
35
|
+
"department": {
|
|
36
|
+
"title": "Department",
|
|
37
|
+
"description": "Fake Department",
|
|
38
|
+
"target": f"fake-department-{SMOKE_TEST_SUFFIX}",
|
|
39
|
+
"required": False,
|
|
40
|
+
"many": False,
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
@app.router.get("/v1/blueprints/{blueprint_id}")
|
|
47
|
+
@app.router.patch("/v1/blueprints/{blueprint_id}")
|
|
48
|
+
async def get_blueprint(blueprint_id: str) -> Dict[str, Any]:
|
|
49
|
+
return {
|
|
50
|
+
"blueprint": (
|
|
51
|
+
FAKE_PERSON_BLUEPRINT
|
|
52
|
+
if blueprint_id.startswith("fake-person")
|
|
53
|
+
else FAKE_DEPARTMENT_BLUEPRINT
|
|
54
|
+
)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
@app.router.post("/v1/entities/search")
|
|
59
|
+
async def search_entities() -> Dict[str, Any]:
|
|
60
|
+
return {"ok": True, "entities": []}
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
@app.router.get("/v1/integration/{integration_id}")
|
|
64
|
+
@app.router.patch("/v1/integration/{integration_id}")
|
|
65
|
+
@app.router.patch("/v1/integration/{integration_id}/resync-state")
|
|
66
|
+
async def get_integration(integration_id: str) -> Dict[str, Any]:
|
|
67
|
+
return {
|
|
68
|
+
"integration": {
|
|
69
|
+
"identifer": integration_id,
|
|
70
|
+
"resyncState": {
|
|
71
|
+
"status": "completed",
|
|
72
|
+
"lastResyncEnd": "2024-11-20T12:01:54.225362+00:00",
|
|
73
|
+
"lastResyncStart": "2024-11-20T12:01:45.483844+00:00",
|
|
74
|
+
"nextResync": None,
|
|
75
|
+
"intervalInMinuets": None,
|
|
76
|
+
"updatedAt": "2024-11-20T12:01:54.355Z",
|
|
77
|
+
},
|
|
78
|
+
"config": {
|
|
79
|
+
"deleteDependentEntities": True,
|
|
80
|
+
"createMissingRelatedEntities": True,
|
|
81
|
+
"enableMergeEntity": True,
|
|
82
|
+
"resources": [
|
|
83
|
+
{
|
|
84
|
+
"kind": "fake-department",
|
|
85
|
+
"selector": {"query": "true"},
|
|
86
|
+
"port": {
|
|
87
|
+
"entity": {
|
|
88
|
+
"mappings": {
|
|
89
|
+
"identifier": ".id",
|
|
90
|
+
"title": ".name",
|
|
91
|
+
"blueprint": f'"fake-department-{SMOKE_TEST_SUFFIX}"',
|
|
92
|
+
"properties": {"name": ".name", "id": ".id"},
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"kind": "fake-person",
|
|
99
|
+
"selector": {"query": "true"},
|
|
100
|
+
"port": {
|
|
101
|
+
"entity": {
|
|
102
|
+
"mappings": {
|
|
103
|
+
"identifier": ".id",
|
|
104
|
+
"title": ".name",
|
|
105
|
+
"blueprint": f'"fake-person-{SMOKE_TEST_SUFFIX}"',
|
|
106
|
+
"properties": {
|
|
107
|
+
"name": ".name",
|
|
108
|
+
"email": ".email",
|
|
109
|
+
"status": ".status",
|
|
110
|
+
"age": ".age",
|
|
111
|
+
"department": ".department.name",
|
|
112
|
+
},
|
|
113
|
+
"relations": {"department": ".department.id"},
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
"installationType": "OnPrem",
|
|
121
|
+
"_orgId": "org_ZOMGMYUNIQUEID",
|
|
122
|
+
"_id": "integration_0dOOhnlJQDjMPnfe",
|
|
123
|
+
"identifier": f"smoke-test-integration-{SMOKE_TEST_SUFFIX}",
|
|
124
|
+
"integrationType": "smoke-test",
|
|
125
|
+
"createdBy": "APSQAYsYoIwPXqjn6XpwCAgnPakkNO67",
|
|
126
|
+
"updatedBy": "APSQAYsYoIwPXqjn6XpwCAgnPakkNO67",
|
|
127
|
+
"createdAt": "2024-11-20T12:01:42.651Z",
|
|
128
|
+
"updatedAt": "2024-11-20T12:01:54.355Z",
|
|
129
|
+
"clientId": "",
|
|
130
|
+
"logAttributes": {
|
|
131
|
+
"ingestId": "DOHSAIDHOMER",
|
|
132
|
+
"ingestUrl": "http://localhost:5555/logs/integration/DOHSAIDHOMER",
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
@app.router.post("/v1/blueprints/{blueprint_id}/entities")
|
|
139
|
+
async def upsert_entities(blueprint_id: str, request: Request) -> Dict[str, Any]:
|
|
140
|
+
json = await request.json()
|
|
141
|
+
|
|
142
|
+
return {
|
|
143
|
+
"ok": True,
|
|
144
|
+
"entity": json,
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
@app.router.post("/v1/auth/access_token")
|
|
149
|
+
async def auth_token() -> Dict[str, Any]:
|
|
150
|
+
return {
|
|
151
|
+
"accessToken": "ZOMG",
|
|
152
|
+
"expiresIn": 1232131231,
|
|
153
|
+
"tokenType": "adadad",
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
@app.router.delete("/v1/blueprints/{blueprint_id}/all-entities")
|
|
158
|
+
async def delete_blueprint(blueprint_id: str, request: Request) -> Dict[str, Any]:
|
|
159
|
+
return {"migrationId": "ZOMG"}
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
@app.router.get("/v1/migrations/{migration_id}")
|
|
163
|
+
async def migration(migration_id: str, request: Request) -> Dict[str, Any]:
|
|
164
|
+
return {
|
|
165
|
+
"migration": {
|
|
166
|
+
"id": migration_id,
|
|
167
|
+
"status": "COMPLETE",
|
|
168
|
+
"actor": "Dwayne Scissors Johnson",
|
|
169
|
+
"sourceBlueprint": "leBlue",
|
|
170
|
+
"mapping": {},
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
CATCH_ALL = "/{full_path:path}"
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
@app.router.get(CATCH_ALL)
|
|
179
|
+
@app.router.post(CATCH_ALL)
|
|
180
|
+
@app.router.patch(CATCH_ALL)
|
|
181
|
+
@app.router.delete(CATCH_ALL)
|
|
182
|
+
async def catch_all(full_path: str, request: Request) -> str:
|
|
183
|
+
return f"Hello there from fake Port API - {full_path}, thanks for accessing me with {request.method}"
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
def start() -> None:
|
|
187
|
+
uvicorn.run(app, host="0.0.0.0", port=5555)
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
if __name__ == "__main__":
|
|
191
|
+
start()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.14.6 → port_ocean-0.15.0}/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
|
{port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/core/handlers/entities_state_applier/__init__.py
RENAMED
|
File without changes
|
{port_ocean-0.14.6 → port_ocean-0.15.0}/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.14.6 → port_ocean-0.15.0}/port_ocean/core/handlers/entity_processor/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{port_ocean-0.14.6 → port_ocean-0.15.0}/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.14.6 → port_ocean-0.15.0}/port_ocean/core/handlers/resync_state_updater/__init__.py
RENAMED
|
File without changes
|
{port_ocean-0.14.6 → port_ocean-0.15.0}/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
|
{port_ocean-0.14.6 → port_ocean-0.15.0}/port_ocean/tests/clients/port/mixins/test_entities.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|