port-ocean 0.4.12__py3-none-any.whl → 0.4.14__py3-none-any.whl
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/cli/cookiecutter/cookiecutter.json +1 -1
- port_ocean/clients/port/mixins/blueprints.py +31 -2
- port_ocean/core/defaults/common.py +2 -0
- port_ocean/core/defaults/initialize.py +73 -4
- port_ocean/core/handlers/entities_state_applier/port/applier.py +2 -0
- port_ocean/core/handlers/port_app_config/models.py +1 -0
- port_ocean/core/integrations/mixins/sync_raw.py +4 -0
- port_ocean/exceptions/port_defaults.py +7 -1
- {port_ocean-0.4.12.dist-info → port_ocean-0.4.14.dist-info}/METADATA +13 -13
- {port_ocean-0.4.12.dist-info → port_ocean-0.4.14.dist-info}/RECORD +13 -13
- {port_ocean-0.4.12.dist-info → port_ocean-0.4.14.dist-info}/LICENSE.md +0 -0
- {port_ocean-0.4.12.dist-info → port_ocean-0.4.14.dist-info}/WHEEL +0 -0
- {port_ocean-0.4.12.dist-info → port_ocean-0.4.14.dist-info}/entry_points.txt +0 -0
|
@@ -14,13 +14,15 @@ class BlueprintClientMixin:
|
|
|
14
14
|
self.auth = auth
|
|
15
15
|
self.client = client
|
|
16
16
|
|
|
17
|
-
async def get_blueprint(
|
|
17
|
+
async def get_blueprint(
|
|
18
|
+
self, identifier: str, should_log: bool = True
|
|
19
|
+
) -> Blueprint:
|
|
18
20
|
logger.info(f"Fetching blueprint with id: {identifier}")
|
|
19
21
|
response = await self.client.get(
|
|
20
22
|
f"{self.auth.api_url}/blueprints/{identifier}",
|
|
21
23
|
headers=await self.auth.headers(),
|
|
22
24
|
)
|
|
23
|
-
handle_status_code(response)
|
|
25
|
+
handle_status_code(response, should_log=should_log)
|
|
24
26
|
return Blueprint.parse_obj(response.json()["blueprint"])
|
|
25
27
|
|
|
26
28
|
async def create_blueprint(
|
|
@@ -105,3 +107,30 @@ class BlueprintClientMixin:
|
|
|
105
107
|
)
|
|
106
108
|
|
|
107
109
|
handle_status_code(response)
|
|
110
|
+
|
|
111
|
+
async def create_page(
|
|
112
|
+
self,
|
|
113
|
+
page: dict[str, Any],
|
|
114
|
+
) -> dict[str, Any]:
|
|
115
|
+
logger.info(f"Creating page: {page}")
|
|
116
|
+
response = await self.client.post(
|
|
117
|
+
f"{self.auth.api_url}/pages",
|
|
118
|
+
json=page,
|
|
119
|
+
headers=await self.auth.headers(),
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
handle_status_code(response)
|
|
123
|
+
return page
|
|
124
|
+
|
|
125
|
+
async def delete_page(
|
|
126
|
+
self,
|
|
127
|
+
identifier: str,
|
|
128
|
+
should_raise: bool = False,
|
|
129
|
+
) -> None:
|
|
130
|
+
logger.info(f"Deleting page: {identifier}")
|
|
131
|
+
response = await self.client.delete(
|
|
132
|
+
f"{self.auth.api_url}/pages/{identifier}",
|
|
133
|
+
headers=await self.auth.headers(),
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
handle_status_code(response, should_raise)
|
|
@@ -26,6 +26,7 @@ class Defaults(BaseModel):
|
|
|
26
26
|
blueprints: list[dict[str, Any]] = []
|
|
27
27
|
actions: list[Preset] = []
|
|
28
28
|
scorecards: list[Preset] = []
|
|
29
|
+
pages: list[dict[str, Any]] = []
|
|
29
30
|
port_app_config: Optional[PortAppConfig] = Field(
|
|
30
31
|
default=None, alias="port-app-config"
|
|
31
32
|
)
|
|
@@ -108,6 +109,7 @@ def get_port_integration_defaults(
|
|
|
108
109
|
blueprints=default_jsons.get("blueprints", []),
|
|
109
110
|
actions=default_jsons.get("actions", []),
|
|
110
111
|
scorecards=default_jsons.get("scorecards", []),
|
|
112
|
+
pages=default_jsons.get("pages", []),
|
|
111
113
|
port_app_config=port_app_config_class(
|
|
112
114
|
**default_jsons.get("port-app-config", {})
|
|
113
115
|
),
|
|
@@ -2,6 +2,7 @@ import asyncio
|
|
|
2
2
|
from typing import Type, Any
|
|
3
3
|
|
|
4
4
|
import httpx
|
|
5
|
+
from starlette import status
|
|
5
6
|
from loguru import logger
|
|
6
7
|
|
|
7
8
|
from port_ocean.clients.port.client import PortClient
|
|
@@ -10,6 +11,7 @@ from port_ocean.config.settings import IntegrationConfiguration
|
|
|
10
11
|
from port_ocean.context.ocean import ocean
|
|
11
12
|
from port_ocean.core.defaults.common import Defaults, get_port_integration_defaults
|
|
12
13
|
from port_ocean.core.handlers.port_app_config.models import PortAppConfig
|
|
14
|
+
from port_ocean.core.models import Blueprint
|
|
13
15
|
from port_ocean.exceptions.port_defaults import (
|
|
14
16
|
AbortDefaultCreationError,
|
|
15
17
|
)
|
|
@@ -52,10 +54,38 @@ async def _create_resources(
|
|
|
52
54
|
defaults: Defaults,
|
|
53
55
|
integration_config: IntegrationConfiguration,
|
|
54
56
|
) -> None:
|
|
57
|
+
response = await port_client._get_current_integration()
|
|
58
|
+
if response.status_code == status.HTTP_404_NOT_FOUND:
|
|
59
|
+
logger.info("Integration doesn't exist, creating new integration")
|
|
60
|
+
else:
|
|
61
|
+
logger.info("Integration already exists, skipping integration creation...")
|
|
62
|
+
return
|
|
63
|
+
|
|
55
64
|
creation_stage, *blueprint_patches = deconstruct_blueprints_to_creation_steps(
|
|
56
65
|
defaults.blueprints
|
|
57
66
|
)
|
|
58
67
|
|
|
68
|
+
blueprints_results = await asyncio.gather(
|
|
69
|
+
*(
|
|
70
|
+
port_client.get_blueprint(blueprint["identifier"], should_log=False)
|
|
71
|
+
for blueprint in creation_stage
|
|
72
|
+
),
|
|
73
|
+
return_exceptions=True,
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
existing_blueprints = [
|
|
77
|
+
result.identifier
|
|
78
|
+
for result in blueprints_results
|
|
79
|
+
if not isinstance(result, httpx.HTTPStatusError)
|
|
80
|
+
and isinstance(result, Blueprint)
|
|
81
|
+
]
|
|
82
|
+
|
|
83
|
+
if existing_blueprints:
|
|
84
|
+
logger.info(
|
|
85
|
+
f"Blueprints already exist: {existing_blueprints}. Skipping integration default creation..."
|
|
86
|
+
)
|
|
87
|
+
return
|
|
88
|
+
|
|
59
89
|
create_results = await asyncio.gather(
|
|
60
90
|
*(
|
|
61
91
|
port_client.create_blueprint(
|
|
@@ -81,7 +111,7 @@ async def _create_resources(
|
|
|
81
111
|
)
|
|
82
112
|
|
|
83
113
|
raise AbortDefaultCreationError(created_blueprints, errors)
|
|
84
|
-
|
|
114
|
+
created_pages = []
|
|
85
115
|
try:
|
|
86
116
|
for patch_stage in blueprint_patches:
|
|
87
117
|
await asyncio.gather(
|
|
@@ -111,16 +141,42 @@ async def _create_resources(
|
|
|
111
141
|
)
|
|
112
142
|
)
|
|
113
143
|
|
|
144
|
+
create_pages_result = await asyncio.gather(
|
|
145
|
+
*(port_client.create_page(page) for page in defaults.pages),
|
|
146
|
+
return_exceptions=True,
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
created_pages = [
|
|
150
|
+
result.get("identifier", "")
|
|
151
|
+
for result in create_pages_result
|
|
152
|
+
if not isinstance(result, BaseException)
|
|
153
|
+
]
|
|
154
|
+
|
|
155
|
+
pages_errors = [
|
|
156
|
+
result for result in create_pages_result if isinstance(result, Exception)
|
|
157
|
+
]
|
|
158
|
+
|
|
159
|
+
if pages_errors:
|
|
160
|
+
for error in pages_errors:
|
|
161
|
+
if isinstance(error, httpx.HTTPStatusError):
|
|
162
|
+
logger.warning(
|
|
163
|
+
f"Failed to create resources: {error.response.text}. Rolling back changes..."
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
raise AbortDefaultCreationError(
|
|
167
|
+
created_blueprints, pages_errors, created_pages
|
|
168
|
+
)
|
|
169
|
+
|
|
114
170
|
await port_client.create_integration(
|
|
115
171
|
integration_config.integration.type,
|
|
116
172
|
integration_config.event_listener.to_request(),
|
|
117
173
|
port_app_config=defaults.port_app_config,
|
|
118
174
|
)
|
|
119
|
-
except httpx.HTTPStatusError as
|
|
175
|
+
except httpx.HTTPStatusError as err:
|
|
120
176
|
logger.error(
|
|
121
|
-
f"Failed to create resources: {
|
|
177
|
+
f"Failed to create resources: {err.response.text}. Rolling back changes..."
|
|
122
178
|
)
|
|
123
|
-
raise AbortDefaultCreationError(created_blueprints, [
|
|
179
|
+
raise AbortDefaultCreationError(created_blueprints, [err], created_pages)
|
|
124
180
|
|
|
125
181
|
|
|
126
182
|
async def _initialize_defaults(
|
|
@@ -133,6 +189,7 @@ async def _initialize_defaults(
|
|
|
133
189
|
return None
|
|
134
190
|
|
|
135
191
|
try:
|
|
192
|
+
logger.info("Found default resources, starting creation process")
|
|
136
193
|
await _create_resources(port_client, defaults, integration_config)
|
|
137
194
|
except AbortDefaultCreationError as e:
|
|
138
195
|
logger.warning(
|
|
@@ -148,6 +205,18 @@ async def _initialize_defaults(
|
|
|
148
205
|
for identifier in e.blueprints_to_rollback
|
|
149
206
|
)
|
|
150
207
|
)
|
|
208
|
+
if e.pages_to_rollback:
|
|
209
|
+
logger.warning(
|
|
210
|
+
f"Failed to create resources. Rolling back pages : {e.pages_to_rollback}"
|
|
211
|
+
)
|
|
212
|
+
await asyncio.gather(
|
|
213
|
+
*(
|
|
214
|
+
port_client.delete_page(
|
|
215
|
+
identifier,
|
|
216
|
+
)
|
|
217
|
+
for identifier in e.pages_to_rollback
|
|
218
|
+
)
|
|
219
|
+
)
|
|
151
220
|
|
|
152
221
|
raise ExceptionGroup(str(e), e.errors)
|
|
153
222
|
|
|
@@ -130,6 +130,7 @@ class HttpEntitiesStateApplier(BaseEntitiesStateApplier):
|
|
|
130
130
|
logger.info("Upserting modified entities")
|
|
131
131
|
await self.upsert(diff.modified, user_agent_type)
|
|
132
132
|
|
|
133
|
+
logger.info("Deleting diff entities")
|
|
133
134
|
await self._delete_diff(
|
|
134
135
|
diff.deleted, diff.created + diff.modified, user_agent_type
|
|
135
136
|
)
|
|
@@ -149,6 +150,7 @@ class HttpEntitiesStateApplier(BaseEntitiesStateApplier):
|
|
|
149
150
|
)
|
|
150
151
|
await self._validate_entity_diff(diff)
|
|
151
152
|
|
|
153
|
+
logger.info("Deleting diff entities")
|
|
152
154
|
await self._delete_diff(
|
|
153
155
|
diff.deleted, diff.created + diff.modified, user_agent_type
|
|
154
156
|
)
|
|
@@ -352,6 +352,7 @@ class SyncRawMixin(HandlerMixin, EventsMixin):
|
|
|
352
352
|
except asyncio.CancelledError as e:
|
|
353
353
|
logger.warning("Resync aborted successfully")
|
|
354
354
|
else:
|
|
355
|
+
logger.info("Starting resync diff calculation")
|
|
355
356
|
flat_created_entities, errors = zip_and_sum(creation_results) or [
|
|
356
357
|
[],
|
|
357
358
|
[],
|
|
@@ -368,6 +369,9 @@ class SyncRawMixin(HandlerMixin, EventsMixin):
|
|
|
368
369
|
|
|
369
370
|
logger.error(message, exc_info=error_group)
|
|
370
371
|
else:
|
|
372
|
+
logger.info(
|
|
373
|
+
f"Running resync diff calculation, number of entities at Port before resync: {len(entities_at_port)}, number of entities created during sync: {len(flat_created_entities)}"
|
|
374
|
+
)
|
|
371
375
|
await self.entities_state_applier.delete_diff(
|
|
372
376
|
{"before": entities_at_port, "after": flat_created_entities},
|
|
373
377
|
user_agent_type,
|
|
@@ -2,8 +2,14 @@ from port_ocean.exceptions.base import BaseOceanException
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
class AbortDefaultCreationError(BaseOceanException):
|
|
5
|
-
def __init__(
|
|
5
|
+
def __init__(
|
|
6
|
+
self,
|
|
7
|
+
blueprints_to_rollback: list[str],
|
|
8
|
+
errors: list[Exception],
|
|
9
|
+
pages_to_rollback: list[str] | None = None,
|
|
10
|
+
):
|
|
6
11
|
self.blueprints_to_rollback = blueprints_to_rollback
|
|
12
|
+
self.pages_to_rollback = pages_to_rollback
|
|
7
13
|
self.errors = errors
|
|
8
14
|
super().__init__("Aborting defaults creation")
|
|
9
15
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: port-ocean
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.14
|
|
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
|
|
@@ -61,13 +61,13 @@ empowering engineers to effortlessly prioritize key features and streamline the
|
|
|
61
61
|
## Installation
|
|
62
62
|
In order to install the Ocean Framework, run the following command:
|
|
63
63
|
|
|
64
|
-
```
|
|
64
|
+
```bash
|
|
65
65
|
pip install port-ocean[cli]
|
|
66
66
|
```
|
|
67
67
|
|
|
68
68
|
Or
|
|
69
69
|
|
|
70
|
-
```
|
|
70
|
+
```bash
|
|
71
71
|
poetry add port-ocean[cli]
|
|
72
72
|
```
|
|
73
73
|
|
|
@@ -75,13 +75,13 @@ poetry add port-ocean[cli]
|
|
|
75
75
|
|
|
76
76
|
1. source the integration venv
|
|
77
77
|
|
|
78
|
-
```
|
|
78
|
+
```bash
|
|
79
79
|
. .venv/bin/activate
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
2. Run
|
|
83
83
|
|
|
84
|
-
```
|
|
84
|
+
```bash
|
|
85
85
|
ocean sail ./path/to/
|
|
86
86
|
integration
|
|
87
87
|
```
|
|
@@ -157,19 +157,19 @@ In order to learn how you can contribute to Ocean, read our [contributing guide]
|
|
|
157
157
|
|
|
158
158
|
2. Install dependencies:
|
|
159
159
|
|
|
160
|
-
```
|
|
160
|
+
```bash
|
|
161
161
|
make install
|
|
162
162
|
```
|
|
163
163
|
|
|
164
164
|
Or (For installing integrations dependencies as well)
|
|
165
165
|
|
|
166
|
-
```
|
|
166
|
+
```bash
|
|
167
167
|
make install/all
|
|
168
168
|
```
|
|
169
169
|
|
|
170
170
|
3. source the integration venv
|
|
171
171
|
|
|
172
|
-
```
|
|
172
|
+
```bash
|
|
173
173
|
. .venv/bin/activate
|
|
174
174
|
```
|
|
175
175
|
|
|
@@ -178,7 +178,7 @@ In order to learn how you can contribute to Ocean, read our [contributing guide]
|
|
|
178
178
|
|
|
179
179
|
2. For new integration run
|
|
180
180
|
|
|
181
|
-
```
|
|
181
|
+
```bash
|
|
182
182
|
make new
|
|
183
183
|
```
|
|
184
184
|
|
|
@@ -186,25 +186,25 @@ In order to learn how you can contribute to Ocean, read our [contributing guide]
|
|
|
186
186
|
|
|
187
187
|
3. Install dependencies
|
|
188
188
|
|
|
189
|
-
4. ```
|
|
189
|
+
4. ```bash
|
|
190
190
|
cd DESIRED_INTEGRATION_FOLDER && make install
|
|
191
191
|
```
|
|
192
192
|
|
|
193
193
|
5. source the integration venv
|
|
194
194
|
|
|
195
|
-
```
|
|
195
|
+
```bash
|
|
196
196
|
. .venv/bin/activate
|
|
197
197
|
```
|
|
198
198
|
|
|
199
199
|
6. Run the integration
|
|
200
200
|
|
|
201
|
-
```
|
|
201
|
+
```bash
|
|
202
202
|
make run
|
|
203
203
|
```
|
|
204
204
|
|
|
205
205
|
Or
|
|
206
206
|
|
|
207
|
-
```
|
|
207
|
+
```bash
|
|
208
208
|
ocean sail
|
|
209
209
|
```
|
|
210
210
|
|
|
@@ -14,7 +14,7 @@ port_ocean/cli/commands/pull.py,sha256=VvrRjLNlfPuLIf7KzeIcbzzdi98Z0M9wCRpXC3QPx
|
|
|
14
14
|
port_ocean/cli/commands/sail.py,sha256=rv_lKFITsV5ta9ng3g4eR5H6AtlAsrvBQpAvH_p2DaA,2193
|
|
15
15
|
port_ocean/cli/commands/version.py,sha256=hEuIEIcm6Zkamz41Z9nxeSM_4g3oNlAgWwQyDGboh-E,536
|
|
16
16
|
port_ocean/cli/cookiecutter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
|
-
port_ocean/cli/cookiecutter/cookiecutter.json,sha256=
|
|
17
|
+
port_ocean/cli/cookiecutter/cookiecutter.json,sha256=bBUXljV7pwvdxkRn2uw2aCoHItmEomjQ_ftI8Urn67w,479
|
|
18
18
|
port_ocean/cli/cookiecutter/extensions.py,sha256=eQNjZvy2enDkJpvMbBGil77Xk9-38f862wfnmCjdoBc,446
|
|
19
19
|
port_ocean/cli/cookiecutter/hooks/post_gen_project.py,sha256=3e0fUSnTxYM7PLm1vUzQG4ba5Br0EF054_EcW6cVlvY,220
|
|
20
20
|
port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.dockerignore,sha256=9Mz_WI7XBpKzlJ7ILb4vlcuzYkh98Ql3bP_5GHN1sRY,1034
|
|
@@ -38,7 +38,7 @@ port_ocean/clients/port/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
|
|
|
38
38
|
port_ocean/clients/port/authentication.py,sha256=DXqZQaYUb2mhWRZXoTivteEyQPTsHtJdcIEByA7sVsM,2859
|
|
39
39
|
port_ocean/clients/port/client.py,sha256=3GYCM0ZkX3pB6sNoOb-7_6dm0Jr5_vqhflD9iltf_As,2640
|
|
40
40
|
port_ocean/clients/port/mixins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
41
|
-
port_ocean/clients/port/mixins/blueprints.py,sha256=
|
|
41
|
+
port_ocean/clients/port/mixins/blueprints.py,sha256=BiqkhvDFdkySWgL1NHI-LAQ9ieZWazZAojPo9E8d7U4,4575
|
|
42
42
|
port_ocean/clients/port/mixins/entities.py,sha256=BLEfyPn1YdGeK_0RtRHguLRxD_XPdhSGpTq8CXrDZ3o,7902
|
|
43
43
|
port_ocean/clients/port/mixins/integrations.py,sha256=FuDoQfQnfJvhK-nKpftQ8k7VsB9odNRlkMkGCmxwaWY,4280
|
|
44
44
|
port_ocean/clients/port/mixins/migrations.py,sha256=A6896oJF6WbFL2WroyTkMzr12yhVyWqGoq9dtLNSKBY,1457
|
|
@@ -60,8 +60,8 @@ port_ocean/context/utils.py,sha256=RQFJw8HMVw4WBwWlfYT78pb5V30-kGM0D-ZK3Xbl1Ik,6
|
|
|
60
60
|
port_ocean/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
61
61
|
port_ocean/core/defaults/__init__.py,sha256=8qCZg8n06WAdMu9s_FiRtDYLGPGHbOuS60vapeUoAks,142
|
|
62
62
|
port_ocean/core/defaults/clean.py,sha256=S3UAfca-oU89WJKIB4OgGjGjPr0vxBQ2aRZsLTZhQ04,2185
|
|
63
|
-
port_ocean/core/defaults/common.py,sha256=
|
|
64
|
-
port_ocean/core/defaults/initialize.py,sha256=
|
|
63
|
+
port_ocean/core/defaults/common.py,sha256=QnLFTkT3yIWIRtLQb7fUvvfe5AfInYJy0q5LjlzHkOw,3553
|
|
64
|
+
port_ocean/core/defaults/initialize.py,sha256=z7IdE_WN1_gF5_60OwSlid9-di7pYOJhzX8VdFjkXdc,7702
|
|
65
65
|
port_ocean/core/event_listener/__init__.py,sha256=mzJ33wRq0kh60fpVdOHVmvMTUQIvz3vxmifyBgwDn0E,889
|
|
66
66
|
port_ocean/core/event_listener/base.py,sha256=cn-NJiw6x41h-I1DBpGDQr2NYmUwZKCUGeecwWL4stk,787
|
|
67
67
|
port_ocean/core/event_listener/factory.py,sha256=AYYfSHPAF7P5H-uQECXT0JVJjKDHrYkWJJBSL4mGkg8,3697
|
|
@@ -74,7 +74,7 @@ port_ocean/core/handlers/base.py,sha256=cTarblazu8yh8xz2FpB-dzDKuXxtoi143XJgPbV_
|
|
|
74
74
|
port_ocean/core/handlers/entities_state_applier/__init__.py,sha256=kgLZDCeCEzi4r-0nzW9k78haOZNf6PX7mJOUr34A4c8,173
|
|
75
75
|
port_ocean/core/handlers/entities_state_applier/base.py,sha256=FMsrBOVgaO4o7B1klLDY8fobTUDvyrerCKCICyYtkXs,2193
|
|
76
76
|
port_ocean/core/handlers/entities_state_applier/port/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
77
|
-
port_ocean/core/handlers/entities_state_applier/port/applier.py,sha256=
|
|
77
|
+
port_ocean/core/handlers/entities_state_applier/port/applier.py,sha256=6Zg93oPJyShMGU62FAuLbN7LQB7xFkkg4GPUZ5JFTw4,7928
|
|
78
78
|
port_ocean/core/handlers/entities_state_applier/port/get_related_entities.py,sha256=1zncwCbE-Gej0xaWKlzZgoXxOBe9bgs_YxlZ8QW3NdI,1751
|
|
79
79
|
port_ocean/core/handlers/entities_state_applier/port/order_by_entities_dependencies.py,sha256=82BvU8t5w9uhsxX8hbnwuRPuWhW3cMeuT_5sVIkip1I,1550
|
|
80
80
|
port_ocean/core/handlers/entities_state_applier/port/validate_entity_relations.py,sha256=nKuQ-RlalGG07olxm6l5NHeOuQT9dEZLoMpD-AN5nq0,1392
|
|
@@ -84,14 +84,14 @@ port_ocean/core/handlers/entity_processor/jq_entity_processor.py,sha256=2FgQYwKU
|
|
|
84
84
|
port_ocean/core/handlers/port_app_config/__init__.py,sha256=8AAT5OthiVM7KCcM34iEgEeXtn2pRMrT4Dze5r1Ixbk,134
|
|
85
85
|
port_ocean/core/handlers/port_app_config/api.py,sha256=6VbKPwFzsWG0IYsVD81hxSmfqtHUFqrfUuj1DBX5g4w,853
|
|
86
86
|
port_ocean/core/handlers/port_app_config/base.py,sha256=nnMZ4jH6a-4Of9Cn-apMsU0CgNLD9avd5q0gRmc7nZ8,1495
|
|
87
|
-
port_ocean/core/handlers/port_app_config/models.py,sha256=
|
|
87
|
+
port_ocean/core/handlers/port_app_config/models.py,sha256=E-1J4ccfKD74S86hierzRAX0gRaq571nYcD2aBR8ir0,1924
|
|
88
88
|
port_ocean/core/integrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
89
89
|
port_ocean/core/integrations/base.py,sha256=3jU0skK_gMLB8a_fN8whsRKva-Dz058TFoI0vXTbryU,3193
|
|
90
90
|
port_ocean/core/integrations/mixins/__init__.py,sha256=FA1FEKMM6P-L2_m7Q4L20mFa4_RgZnwSRmTCreKcBVM,220
|
|
91
91
|
port_ocean/core/integrations/mixins/events.py,sha256=Ddfx2L4FpghV38waF8OfVeOV0bHBxNIgjU-q5ffillI,2341
|
|
92
92
|
port_ocean/core/integrations/mixins/handler.py,sha256=mZ7-0UlG3LcrwJttFbMe-R4xcOU2H_g33tZar7PwTv8,3771
|
|
93
93
|
port_ocean/core/integrations/mixins/sync.py,sha256=TKqRytxXONVhuCo3CB3rDvWNbITnZz33TYTDs3SWWVk,3880
|
|
94
|
-
port_ocean/core/integrations/mixins/sync_raw.py,sha256=
|
|
94
|
+
port_ocean/core/integrations/mixins/sync_raw.py,sha256=MxhCcvtFZCD77a2pR7vRFBQs6LPAg4OuLPg6FGzNIjA,13810
|
|
95
95
|
port_ocean/core/integrations/mixins/utils.py,sha256=7y1rGETZIjOQadyIjFJXIHKkQFKx_SwiP-TrAIsyyLY,2303
|
|
96
96
|
port_ocean/core/models.py,sha256=bDO_I4Yd33TEZIh2QSV8UwXQIuwE7IgrINkYDHI0dkc,714
|
|
97
97
|
port_ocean/core/ocean_types.py,sha256=egpOUJCZujjcj2favI7XK5Iq-7kBUk9cGKRrQzbRMas,789
|
|
@@ -102,7 +102,7 @@ port_ocean/exceptions/base.py,sha256=uY4DX7fIITDFfemCJDWpaZi3bD51lcANc5swpoNvMJA
|
|
|
102
102
|
port_ocean/exceptions/clients.py,sha256=LKLLs-Zy3caNG85rwxfOw2rMr8qqVV6SHUq4fRCZ99U,180
|
|
103
103
|
port_ocean/exceptions/context.py,sha256=qC1OLppiv6XZuXSHRO2P_VPFSzrc_uUQNvfSYLeAoXw,298
|
|
104
104
|
port_ocean/exceptions/core.py,sha256=ygxtPQ9IG8NzIrzZok5OqkefVrqcC4bjZ-2Vf9IPZuA,790
|
|
105
|
-
port_ocean/exceptions/port_defaults.py,sha256=
|
|
105
|
+
port_ocean/exceptions/port_defaults.py,sha256=pJ5im06ziDX2IVstSlYIjVHhs4JW-N0Vr0PqlDNhAb4,541
|
|
106
106
|
port_ocean/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
107
107
|
port_ocean/helpers/async_client.py,sha256=SRlP6o7_FCSY3UHnRlZdezppePVxxOzZ0z861vE3K40,1783
|
|
108
108
|
port_ocean/helpers/retry.py,sha256=qZAiNCdhZ9pg55Ol70uJef2PAxHBriBCBg4kbT4naqo,13155
|
|
@@ -113,8 +113,8 @@ port_ocean/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
113
113
|
port_ocean/run.py,sha256=xvYZlfi-J-IcqsAg8tNVnvl1mEUr6wPSya_-Bbf6jAU,1811
|
|
114
114
|
port_ocean/utils.py,sha256=VcDhnqFwUYCPr9EZFtg5M2CIUC5Y4nN1Bv7gmCF4VYc,6067
|
|
115
115
|
port_ocean/version.py,sha256=2ugCk8TXPsRIuFviZ8j3RPaszSw2HE-KuaW8vhgWJVM,172
|
|
116
|
-
port_ocean-0.4.
|
|
117
|
-
port_ocean-0.4.
|
|
118
|
-
port_ocean-0.4.
|
|
119
|
-
port_ocean-0.4.
|
|
120
|
-
port_ocean-0.4.
|
|
116
|
+
port_ocean-0.4.14.dist-info/LICENSE.md,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
|
|
117
|
+
port_ocean-0.4.14.dist-info/METADATA,sha256=B-9NcsmZCIUtcaCAEm8rb_QNlgWzn03z1IwxpzeJYv4,6515
|
|
118
|
+
port_ocean-0.4.14.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
|
119
|
+
port_ocean-0.4.14.dist-info/entry_points.txt,sha256=F_DNUmGZU2Kme-8NsWM5LLE8piGMafYZygRYhOVtcjA,54
|
|
120
|
+
port_ocean-0.4.14.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|