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.

@@ -10,4 +10,4 @@
10
10
  "jinja2_time.TimeExtension",
11
11
  "extensions.VersionExtension"
12
12
  ]
13
- }
13
+ }
@@ -14,13 +14,15 @@ class BlueprintClientMixin:
14
14
  self.auth = auth
15
15
  self.client = client
16
16
 
17
- async def get_blueprint(self, identifier: str) -> 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 e:
175
+ except httpx.HTTPStatusError as err:
120
176
  logger.error(
121
- f"Failed to create resources: {e.response.text}. Rolling back changes..."
177
+ f"Failed to create resources: {err.response.text}. Rolling back changes..."
122
178
  )
123
- raise AbortDefaultCreationError(created_blueprints, [e])
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
  )
@@ -9,6 +9,7 @@ class EntityMapping(BaseModel):
9
9
  identifier: str
10
10
  title: str | None
11
11
  blueprint: str
12
+ team: str | None
12
13
  properties: dict[str, str] = Field(default_factory=dict)
13
14
  relations: dict[str, str] = Field(default_factory=dict)
14
15
 
@@ -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__(self, blueprints_to_rollback: list[str], errors: list[Exception]):
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.12
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
- ```sh
64
+ ```bash
65
65
  pip install port-ocean[cli]
66
66
  ```
67
67
 
68
68
  Or
69
69
 
70
- ```sh
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
- ```sh
78
+ ```bash
79
79
  . .venv/bin/activate
80
80
  ```
81
81
 
82
82
  2. Run
83
83
 
84
- ```sh
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
- ```sh
160
+ ```bash
161
161
  make install
162
162
  ```
163
163
 
164
164
  Or (For installing integrations dependencies as well)
165
165
 
166
- ```sh
166
+ ```bash
167
167
  make install/all
168
168
  ```
169
169
 
170
170
  3. source the integration venv
171
171
 
172
- ```sh
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
- ```sh
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. ```sh
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
- ```sh
195
+ ```bash
196
196
  . .venv/bin/activate
197
197
  ```
198
198
 
199
199
  6. Run the integration
200
200
 
201
- ```sh
201
+ ```bash
202
202
  make run
203
203
  ```
204
204
 
205
205
  Or
206
206
 
207
- ```sh
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=sXRXRhhhZa7HRzGm67rSQG7Liad2540KrT7ol8IMvtg,478
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=LKuYa9nN_n01XAHSTkr8n7jPaqVnfQARpSZXImlIEWE,3768
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=6o-14cglafhv4Kw7zihat154sgKyhPEXAQq4IQSNlhs,3470
64
- port_ocean/core/defaults/initialize.py,sha256=yIrD0RjVpXxU-_SsVo_8QzSbnedg3-VN3wrf_k3lqDY,5303
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=PyBtze8Xvhu2994B8YAxoB0ci-FPGAuYblvw2Wnxrok,7836
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=OpTVS6cUHkbohRjHtB8udv80CAupUqccG119ZjvBops,1903
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=TSBncE48TO27eSFsZePL1uyZ8YuFZ_1Kw1PnGXs9xvY,13495
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=R3ufJcfllb7NZSwHOpBs8kbjsIZVQLM6vKO6dz4w-EE,407
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.12.dist-info/LICENSE.md,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
117
- port_ocean-0.4.12.dist-info/METADATA,sha256=3TglFOvXjF_rtfPXnQdppk2FaXEwi15d3jqHAUz62vc,6491
118
- port_ocean-0.4.12.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
119
- port_ocean-0.4.12.dist-info/entry_points.txt,sha256=F_DNUmGZU2Kme-8NsWM5LLE8piGMafYZygRYhOVtcjA,54
120
- port_ocean-0.4.12.dist-info/RECORD,,
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,,