port-ocean 0.5.24.dev1__py3-none-any.whl → 0.6.0__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.

@@ -3,7 +3,6 @@ from urllib.parse import quote_plus
3
3
 
4
4
  import httpx
5
5
  from loguru import logger
6
- from starlette import status
7
6
 
8
7
  from port_ocean.clients.port.authentication import PortAuthentication
9
8
  from port_ocean.clients.port.utils import handle_status_code
@@ -44,7 +43,7 @@ class IntegrationClientMixin:
44
43
  ) -> dict[str, Any]:
45
44
  response = await self._get_current_integration()
46
45
  handle_status_code(response, should_raise, should_log)
47
- return response.json()["integration"]
46
+ return response.json().get("integration", {})
48
47
 
49
48
  async def get_log_attributes(self) -> LogAttributes:
50
49
  if self._log_attributes is None:
@@ -57,7 +56,7 @@ class IntegrationClientMixin:
57
56
  _type: str,
58
57
  changelog_destination: dict[str, Any],
59
58
  port_app_config: Optional["PortAppConfig"] = None,
60
- ) -> None:
59
+ ) -> dict:
61
60
  logger.info(f"Creating integration with id: {self.integration_identifier}")
62
61
  headers = await self.auth.headers()
63
62
  json = {
@@ -73,13 +72,14 @@ class IntegrationClientMixin:
73
72
  f"{self.auth.api_url}/integration", headers=headers, json=json
74
73
  )
75
74
  handle_status_code(response)
75
+ return response.json()["integration"]
76
76
 
77
77
  async def patch_integration(
78
78
  self,
79
79
  _type: str | None = None,
80
80
  changelog_destination: dict[str, Any] | None = None,
81
81
  port_app_config: Optional["PortAppConfig"] = None,
82
- ) -> None:
82
+ ) -> dict:
83
83
  logger.info(f"Updating integration with id: {self.integration_identifier}")
84
84
  headers = await self.auth.headers()
85
85
  json: dict[str, Any] = {}
@@ -97,34 +97,7 @@ class IntegrationClientMixin:
97
97
  json=json,
98
98
  )
99
99
  handle_status_code(response)
100
-
101
- async def initialize_integration(
102
- self,
103
- _type: str,
104
- changelog_destination: dict[str, Any],
105
- port_app_config: Optional["PortAppConfig"] = None,
106
- ) -> None:
107
- logger.info(f"Initiating integration with id: {self.integration_identifier}")
108
- response = await self._get_current_integration()
109
- if response.status_code == status.HTTP_404_NOT_FOUND:
110
- await self.create_integration(_type, changelog_destination, port_app_config)
111
- else:
112
- handle_status_code(response)
113
-
114
- integration = response.json()["integration"]
115
- logger.info("Checking for diff in integration configuration")
116
- if (
117
- integration["changelogDestination"] != changelog_destination
118
- or integration["installationAppType"] != _type
119
- or integration.get("version") != self.integration_version
120
- ):
121
- await self.patch_integration(
122
- _type, changelog_destination, port_app_config
123
- )
124
-
125
- logger.info(
126
- f"Integration with id: {self.integration_identifier} successfully registered"
127
- )
100
+ return response.json()["integration"]
128
101
 
129
102
  async def ingest_integration_logs(self, logs: list[dict[str, Any]]) -> None:
130
103
  logger.debug("Ingesting logs")
@@ -1,15 +1,14 @@
1
1
  from typing import Any, Literal
2
2
 
3
+ from port_ocean.config.base import BaseOceanSettings, BaseOceanModel
4
+ from port_ocean.core.event_listener import EventListenerSettingsType
5
+ from port_ocean.utils.misc import get_integration_name
3
6
  from pydantic import Extra, AnyHttpUrl, parse_obj_as
4
7
  from pydantic.class_validators import root_validator
5
8
  from pydantic.env_settings import InitSettingsSource, EnvSettingsSource, BaseSettings
6
9
  from pydantic.fields import Field
7
10
  from pydantic.main import BaseModel
8
11
 
9
- from port_ocean.config.base import BaseOceanSettings, BaseOceanModel
10
- from port_ocean.core.event_listener import EventListenerSettingsType
11
- from port_ocean.utils.misc import get_integration_name
12
-
13
12
  LogLevelType = Literal["ERROR", "WARNING", "INFO", "DEBUG", "CRITICAL"]
14
13
 
15
14
 
@@ -42,12 +41,12 @@ class PortSettings(BaseOceanModel, extra=Extra.allow):
42
41
 
43
42
 
44
43
  class IntegrationSettings(BaseOceanModel, extra=Extra.allow):
45
- identifier: str = Field(..., min_length=1)
46
- type: str = Field(..., min_length=1)
47
- config: dict[str, Any] | BaseModel
44
+ identifier: str
45
+ type: str
46
+ config: dict[str, Any] | BaseModel = Field(default_factory=dict)
48
47
 
49
48
  @root_validator(pre=True)
50
- def a(cls, values: dict[str, Any]) -> dict[str, Any]:
49
+ def root_validator(cls, values: dict[str, Any]) -> dict[str, Any]:
51
50
  integ_type = values.get("type")
52
51
 
53
52
  if not integ_type:
@@ -68,4 +67,5 @@ class IntegrationConfiguration(BaseOceanSettings, extra=Extra.allow):
68
67
  send_raw_data_examples: bool = True
69
68
  port: PortSettings
70
69
  event_listener: EventListenerSettingsType
71
- integration: IntegrationSettings
70
+ # If an identifier or type is not provided, it will be generated based on the integration name
71
+ integration: IntegrationSettings = IntegrationSettings(type="", identifier="")
@@ -3,13 +3,15 @@ from typing import Type, Any
3
3
 
4
4
  import httpx
5
5
  from loguru import logger
6
- from starlette import status
7
6
 
8
7
  from port_ocean.clients.port.client import PortClient
9
8
  from port_ocean.clients.port.types import UserAgentType
10
9
  from port_ocean.config.settings import IntegrationConfiguration
11
10
  from port_ocean.context.ocean import ocean
12
- from port_ocean.core.defaults.common import Defaults, get_port_integration_defaults
11
+ from port_ocean.core.defaults.common import (
12
+ Defaults,
13
+ get_port_integration_defaults,
14
+ )
13
15
  from port_ocean.core.handlers.port_app_config.models import PortAppConfig
14
16
  from port_ocean.core.models import Blueprint
15
17
  from port_ocean.core.utils import gather_and_split_errors_from_results
@@ -50,18 +52,56 @@ def deconstruct_blueprints_to_creation_steps(
50
52
  )
51
53
 
52
54
 
53
- async def _create_resources(
55
+ async def _initialize_required_integration_settings(
54
56
  port_client: PortClient,
55
- defaults: Defaults,
57
+ default_mapping: PortAppConfig,
56
58
  integration_config: IntegrationConfiguration,
57
59
  ) -> None:
58
- response = await port_client._get_current_integration()
59
- if response.status_code == status.HTTP_404_NOT_FOUND:
60
- logger.info("Integration doesn't exist, creating new integration")
61
- else:
62
- logger.info("Integration already exists, skipping integration creation...")
63
- return
60
+ try:
61
+ logger.info("Initializing integration at port")
62
+ integration = await port_client.get_current_integration(
63
+ should_log=False, should_raise=False
64
+ )
65
+ if not integration:
66
+ logger.info(
67
+ "Integration does not exist, Creating new integration with default default mapping"
68
+ )
69
+ integration = await port_client.create_integration(
70
+ integration_config.integration.type,
71
+ integration_config.event_listener.to_request(),
72
+ port_app_config=default_mapping,
73
+ )
74
+ elif not integration["config"]:
75
+ logger.info(
76
+ "Encountered that the integration's mapping is empty, Initializing to default mapping"
77
+ )
78
+ integration = await port_client.patch_integration(
79
+ integration_config.integration.type,
80
+ integration_config.event_listener.to_request(),
81
+ port_app_config=default_mapping,
82
+ )
83
+ except httpx.HTTPStatusError as err:
84
+ logger.error(f"Failed to apply default mapping: {err.response.text}.")
85
+ raise err
86
+
87
+ logger.info("Checking for diff in integration configuration")
88
+ changelog_destination = integration_config.event_listener.to_request().get(
89
+ "changelog_destination"
90
+ )
91
+ if (
92
+ integration["changelogDestination"] != changelog_destination
93
+ or integration["installationAppType"] != integration_config.integration.type
94
+ or integration.get("version") != port_client.integration_version
95
+ ):
96
+ await port_client.patch_integration(
97
+ integration_config.integration.type, changelog_destination
98
+ )
64
99
 
100
+
101
+ async def _create_resources(
102
+ port_client: PortClient,
103
+ defaults: Defaults,
104
+ ) -> None:
65
105
  creation_stage, *blueprint_patches = deconstruct_blueprints_to_creation_steps(
66
106
  defaults.blueprints
67
107
  )
@@ -148,18 +188,12 @@ async def _create_resources(
148
188
  pages_errors,
149
189
  created_pages_identifiers,
150
190
  )
151
-
152
- await port_client.create_integration(
153
- integration_config.integration.type,
154
- integration_config.event_listener.to_request(),
155
- port_app_config=defaults.port_app_config,
156
- )
157
191
  except httpx.HTTPStatusError as err:
158
192
  logger.error(
159
193
  f"Failed to create resources: {err.response.text}. Rolling back changes..."
160
194
  )
161
195
  raise AbortDefaultCreationError(
162
- created_blueprints_identifiers, [err], created_pages
196
+ created_blueprints_identifiers, [err], created_pages_identifiers
163
197
  )
164
198
 
165
199
 
@@ -169,12 +203,20 @@ async def _initialize_defaults(
169
203
  port_client = ocean.port_client
170
204
  defaults = get_port_integration_defaults(config_class)
171
205
  if not defaults:
172
- logger.warning("No defaults found. Skipping...")
206
+ logger.warning("No defaults found. Skipping initialization...")
173
207
  return None
174
208
 
209
+ if defaults.port_app_config:
210
+ await _initialize_required_integration_settings(
211
+ port_client, defaults.port_app_config, integration_config
212
+ )
213
+
214
+ if not integration_config.initialize_port_resources:
215
+ return
216
+
175
217
  try:
176
218
  logger.info("Found default resources, starting creation process")
177
- await _create_resources(port_client, defaults, integration_config)
219
+ await _create_resources(port_client, defaults)
178
220
  except AbortDefaultCreationError as e:
179
221
  logger.warning(
180
222
  f"Failed to create resources. Rolling back blueprints : {e.blueprints_to_rollback}"
@@ -208,9 +250,6 @@ async def _initialize_defaults(
208
250
  def initialize_defaults(
209
251
  config_class: Type[PortAppConfig], integration_config: IntegrationConfiguration
210
252
  ) -> None:
211
- try:
212
- asyncio.new_event_loop().run_until_complete(
213
- _initialize_defaults(config_class, integration_config)
214
- )
215
- except Exception as e:
216
- logger.debug(f"Failed to initialize defaults, skipping... Error: {e}")
253
+ asyncio.new_event_loop().run_until_complete(
254
+ _initialize_defaults(config_class, integration_config)
255
+ )
@@ -66,12 +66,6 @@ class BaseIntegration(SyncRawMixin, SyncMixin):
66
66
 
67
67
  await self.initialize_handlers()
68
68
 
69
- logger.info("Initializing integration at port")
70
- await self.context.port_client.initialize_integration(
71
- self.context.config.integration.type,
72
- self.context.config.event_listener.to_request(),
73
- )
74
-
75
69
  self.started = True
76
70
 
77
71
  async with event_context(
@@ -372,7 +372,10 @@ class SyncRawMixin(HandlerMixin, EventsMixin):
372
372
  )
373
373
 
374
374
  if after_errors:
375
- message = f"Failed to calculate diff for entities with {len(after_errors)} errors. Skipping delete phase due to incomplete state"
375
+ message = (
376
+ f"Failed to calculate diff for entities with {len(after_errors)} errors. "
377
+ f"Skipping delete phase due to incomplete state"
378
+ )
376
379
  logger.error(message, exc_info=after_errors)
377
380
  entities_before_flatten = []
378
381
 
@@ -416,7 +419,11 @@ class SyncRawMixin(HandlerMixin, EventsMixin):
416
419
  )
417
420
  except httpx.HTTPError as e:
418
421
  logger.warning(
419
- "Failed to fetch the current state of entities at Port. Skipping delete phase due to unknown initial state"
422
+ "Failed to fetch the current state of entities at Port. "
423
+ "Skipping delete phase due to unknown initial state. "
424
+ f"Error: {e}\n"
425
+ f"Response status code: {e.response.status_code if isinstance(e, httpx.HTTPStatusError) else None}\n"
426
+ f"Response content: {e.response.text if isinstance(e, httpx.HTTPStatusError) else None}\n"
420
427
  )
421
428
  entities_at_port = []
422
429
 
port_ocean/core/utils.py CHANGED
@@ -34,13 +34,19 @@ Q = TypeVar("Q")
34
34
 
35
35
  async def gather_and_split_errors_from_results(
36
36
  task: Iterable[Awaitable[Q]],
37
- result_threshold_validation: Callable[[Q | BaseException], bool] | None = None,
38
- ) -> tuple[list[Q], list[BaseException]]:
39
- valid_items = []
40
- errors = []
37
+ result_threshold_validation: Callable[[Q | Exception], bool] | None = None,
38
+ ) -> tuple[list[Q], list[Exception]]:
39
+ valid_items: list[Q] = []
40
+ errors: list[Exception] = []
41
41
  results = await asyncio.gather(*task, return_exceptions=True)
42
42
  for item in results:
43
- if isinstance(item, Exception):
43
+ # return_exceptions will also catch Python BaseException which also includes KeyboardInterrupt, SystemExit, GeneratorExit
44
+ # https://docs.python.org/3/library/asyncio-task.html#asyncio.gather
45
+ # These exceptions should be raised and not caught for the application to exit properly.
46
+ # https://stackoverflow.com/a/17802352
47
+ if isinstance(item, BaseException) and not isinstance(item, Exception):
48
+ raise item
49
+ elif isinstance(item, Exception):
44
50
  errors.append(item)
45
51
  elif not result_threshold_validation or result_threshold_validation(item):
46
52
  valid_items.append(item)
@@ -5,7 +5,7 @@ class AbortDefaultCreationError(BaseOceanException):
5
5
  def __init__(
6
6
  self,
7
7
  blueprints_to_rollback: list[str],
8
- errors: list[BaseException],
8
+ errors: list[Exception],
9
9
  pages_to_rollback: list[str] | None = None,
10
10
  ):
11
11
  self.blueprints_to_rollback = blueprints_to_rollback
port_ocean/run.py CHANGED
@@ -49,9 +49,6 @@ def run(
49
49
  if initialize_port_resources is not None:
50
50
  app.config.initialize_port_resources = initialize_port_resources
51
51
 
52
- if app.config.initialize_port_resources:
53
- initialize_defaults(
54
- app.integration.AppConfigHandlerClass.CONFIG_CLASS, app.config
55
- )
52
+ initialize_defaults(app.integration.AppConfigHandlerClass.CONFIG_CLASS, app.config)
56
53
 
57
54
  uvicorn.run(app, host="0.0.0.0", port=application_settings.port)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: port-ocean
3
- Version: 0.5.24.dev1
3
+ Version: 0.6.0
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
@@ -40,7 +40,7 @@ port_ocean/clients/port/client.py,sha256=3GYCM0ZkX3pB6sNoOb-7_6dm0Jr5_vqhflD9ilt
40
40
  port_ocean/clients/port/mixins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
41
  port_ocean/clients/port/mixins/blueprints.py,sha256=BiqkhvDFdkySWgL1NHI-LAQ9ieZWazZAojPo9E8d7U4,4575
42
42
  port_ocean/clients/port/mixins/entities.py,sha256=pMERHqy1keb5w2k2xQsNuyZaKSAZ5ijVA4pzxEbAatY,7365
43
- port_ocean/clients/port/mixins/integrations.py,sha256=ypRYi7_VlnP2YEPgE8zS-_6WgPzUmsRi95K_pwVIpKE,5943
43
+ port_ocean/clients/port/mixins/integrations.py,sha256=Ro6h9BwLxglQWniCVmfC---4oyGuUxk_Qejswl2t-J8,4841
44
44
  port_ocean/clients/port/mixins/migrations.py,sha256=A6896oJF6WbFL2WroyTkMzr12yhVyWqGoq9dtLNSKBY,1457
45
45
  port_ocean/clients/port/retry_transport.py,sha256=PtIZOAZ6V-ncpVysRUsPOgt8Sf01QLnTKB5YeKBxkJk,1861
46
46
  port_ocean/clients/port/types.py,sha256=nvlgiAq4WH5_F7wQbz_GAWl-faob84LVgIjZ2Ww5mTk,451
@@ -48,7 +48,7 @@ port_ocean/clients/port/utils.py,sha256=O9mBu6zp4TfpS4SQ3qCPpn9ZVyYF8GKnji4UnYhM
48
48
  port_ocean/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
49
  port_ocean/config/base.py,sha256=J_FUvlo0D4FbEbr4mgJsbGB5JjW9I7zMwfekj6T30KY,6389
50
50
  port_ocean/config/dynamic.py,sha256=qOFkRoJsn_BW7581omi_AoMxoHqasf_foxDQ_G11_SI,2030
51
- port_ocean/config/settings.py,sha256=ILWgh9358QI9TSbUtZo_reEtF33687_kW0nTniXEFJQ,2308
51
+ port_ocean/config/settings.py,sha256=f6BXxFyu92WYhfPw4wlRaZ6jhkEsxhjw_BiWN9RERZg,2441
52
52
  port_ocean/consumers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
53
  port_ocean/consumers/kafka_consumer.py,sha256=N8KocjBi9aR0BOPG8hgKovg-ns_ggpEjrSxqSqF_BSo,4710
54
54
  port_ocean/context/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -59,7 +59,7 @@ port_ocean/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
59
  port_ocean/core/defaults/__init__.py,sha256=8qCZg8n06WAdMu9s_FiRtDYLGPGHbOuS60vapeUoAks,142
60
60
  port_ocean/core/defaults/clean.py,sha256=S3UAfca-oU89WJKIB4OgGjGjPr0vxBQ2aRZsLTZhQ04,2185
61
61
  port_ocean/core/defaults/common.py,sha256=QnLFTkT3yIWIRtLQb7fUvvfe5AfInYJy0q5LjlzHkOw,3553
62
- port_ocean/core/defaults/initialize.py,sha256=MLzxpQ7B9OlXyIIxUkTgMJTMk_GjF6vjQoqfKzUAebc,7420
62
+ port_ocean/core/defaults/initialize.py,sha256=uq7gnsx2uHpWRuyYbQWGrPY6jbjXfmSWGc6myOQ8CVQ,8853
63
63
  port_ocean/core/event_listener/__init__.py,sha256=mzJ33wRq0kh60fpVdOHVmvMTUQIvz3vxmifyBgwDn0E,889
64
64
  port_ocean/core/event_listener/base.py,sha256=4RujgPz4VfDFlviu4qLGJFnJougSCL-Ewf0rfTQfwgc,1133
65
65
  port_ocean/core/event_listener/factory.py,sha256=AYYfSHPAF7P5H-uQECXT0JVJjKDHrYkWJJBSL4mGkg8,3697
@@ -83,23 +83,23 @@ port_ocean/core/handlers/port_app_config/api.py,sha256=6VbKPwFzsWG0IYsVD81hxSmfq
83
83
  port_ocean/core/handlers/port_app_config/base.py,sha256=oufdNLzUmEgJY5PgIz75zDlowWrjA-y8WR4UnM58E58,2897
84
84
  port_ocean/core/handlers/port_app_config/models.py,sha256=WtF2uW4KPUPfDpy6E2tl9qXh5GUcDucVvKt0DCTYv6w,1985
85
85
  port_ocean/core/integrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
86
- port_ocean/core/integrations/base.py,sha256=3jU0skK_gMLB8a_fN8whsRKva-Dz058TFoI0vXTbryU,3193
86
+ port_ocean/core/integrations/base.py,sha256=KHsRYFZ38ff3AkkqIQu45883ovgKOJn_fZfnTNy7HWY,2952
87
87
  port_ocean/core/integrations/mixins/__init__.py,sha256=FA1FEKMM6P-L2_m7Q4L20mFa4_RgZnwSRmTCreKcBVM,220
88
88
  port_ocean/core/integrations/mixins/events.py,sha256=Ddfx2L4FpghV38waF8OfVeOV0bHBxNIgjU-q5ffillI,2341
89
89
  port_ocean/core/integrations/mixins/handler.py,sha256=mZ7-0UlG3LcrwJttFbMe-R4xcOU2H_g33tZar7PwTv8,3771
90
90
  port_ocean/core/integrations/mixins/sync.py,sha256=TKqRytxXONVhuCo3CB3rDvWNbITnZz33TYTDs3SWWVk,3880
91
- port_ocean/core/integrations/mixins/sync_raw.py,sha256=32pmbZuv-g508Qv6v9I1kLMmkzERKxTrs9nXZncfx5w,17596
91
+ port_ocean/core/integrations/mixins/sync_raw.py,sha256=GmH5YPVnYO6mKEhoRer9F-vYy8mxPspaSWw2y9JJhgc,17954
92
92
  port_ocean/core/integrations/mixins/utils.py,sha256=7y1rGETZIjOQadyIjFJXIHKkQFKx_SwiP-TrAIsyyLY,2303
93
93
  port_ocean/core/models.py,sha256=YPIU7V3GKeDXIVkNzZn0w17YN2Akl-D8nFs-l4bEKcU,1143
94
94
  port_ocean/core/ocean_types.py,sha256=3_d8-n626f1kWLQ_Jxw194LEyrOVupz05qs_Y1pvB-A,990
95
- port_ocean/core/utils.py,sha256=4TAxSIuJ1fIO84Ttx-TSKw3SJW4Iat50I1JD4PlAwBA,2417
95
+ port_ocean/core/utils.py,sha256=5ISNJ90xxK4Nf_suGEZ2ZPBKsoOqL7khU0MuA0q5zmE,2891
96
96
  port_ocean/exceptions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
97
97
  port_ocean/exceptions/api.py,sha256=TLmTMqn4uHGaHgZK8PMIJ0TVJlPB4iP7xl9rx7GtCyY,426
98
98
  port_ocean/exceptions/base.py,sha256=uY4DX7fIITDFfemCJDWpaZi3bD51lcANc5swpoNvMJA,46
99
99
  port_ocean/exceptions/clients.py,sha256=LKLLs-Zy3caNG85rwxfOw2rMr8qqVV6SHUq4fRCZ99U,180
100
100
  port_ocean/exceptions/context.py,sha256=mA8HII6Rl4QxKUz98ppy1zX3kaziaen21h1ZWuU3ADc,372
101
101
  port_ocean/exceptions/core.py,sha256=ygxtPQ9IG8NzIrzZok5OqkefVrqcC4bjZ-2Vf9IPZuA,790
102
- port_ocean/exceptions/port_defaults.py,sha256=PUzxOyeKeuur_xbBmCNFl_fcSsJBdeSx6GG9TcdoJr4,545
102
+ port_ocean/exceptions/port_defaults.py,sha256=pJ5im06ziDX2IVstSlYIjVHhs4JW-N0Vr0PqlDNhAb4,541
103
103
  port_ocean/exceptions/utils.py,sha256=gjOqpi-HpY1l4WlMFsGA9yzhxDhajhoGGdDDyGbLnqI,197
104
104
  port_ocean/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
105
105
  port_ocean/helpers/async_client.py,sha256=SRlP6o7_FCSY3UHnRlZdezppePVxxOzZ0z861vE3K40,1783
@@ -111,7 +111,7 @@ port_ocean/log/sensetive.py,sha256=wkyvkKMbyLTjZDSbvvLHL9bv4RvD0DPAyL3uWSttUOA,2
111
111
  port_ocean/middlewares.py,sha256=6GrhldYAazxSwK2TbS-J28XdZ-9wO3PgCcyIMhnnJvI,2480
112
112
  port_ocean/ocean.py,sha256=nRTTh6faPrt77ozvKBFk6eCNxwzKcTDzJ4KPgpO4VRk,4304
113
113
  port_ocean/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
114
- port_ocean/run.py,sha256=vyShtqg_jEiE6M4SJpci6c4oRD9k2ztesAXEx_6Sc9M,1906
114
+ port_ocean/run.py,sha256=IYo3R0DChb0-Uqs_WU8f5sk_ZBrv1Xjb-PHyE5IRAYw,1835
115
115
  port_ocean/sonar-project.properties,sha256=X_wLzDOkEVmpGLRMb2fg9Rb0DxWwUFSvESId8qpvrPI,73
116
116
  port_ocean/utils/__init__.py,sha256=KMGnCPXZJbNwtgxtyMycapkDz8tpSyw23MSYT3iVeHs,91
117
117
  port_ocean/utils/async_http.py,sha256=arnH458TExn2Dju_Sy6pHas_vF5RMWnOp-jBz5WAAcE,1226
@@ -122,8 +122,8 @@ port_ocean/utils/queue_utils.py,sha256=KWWl8YVnG-glcfIHhM6nefY-2sou_C6DVP1VynQwz
122
122
  port_ocean/utils/repeat.py,sha256=0EFWM9d8lLXAhZmAyczY20LAnijw6UbIECf5lpGbOas,3231
123
123
  port_ocean/utils/signal.py,sha256=K-6kKFQTltcmKDhtyZAcn0IMa3sUpOHGOAUdWKgx0_E,1369
124
124
  port_ocean/version.py,sha256=UsuJdvdQlazzKGD3Hd5-U7N69STh8Dq9ggJzQFnu9fU,177
125
- port_ocean-0.5.24.dev1.dist-info/LICENSE.md,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
126
- port_ocean-0.5.24.dev1.dist-info/METADATA,sha256=qnUn24YkOxfk4BZd616CeA7XJZ2b_jQS43lSg3o3Zzo,6559
127
- port_ocean-0.5.24.dev1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
128
- port_ocean-0.5.24.dev1.dist-info/entry_points.txt,sha256=F_DNUmGZU2Kme-8NsWM5LLE8piGMafYZygRYhOVtcjA,54
129
- port_ocean-0.5.24.dev1.dist-info/RECORD,,
125
+ port_ocean-0.6.0.dist-info/LICENSE.md,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
126
+ port_ocean-0.6.0.dist-info/METADATA,sha256=1qQJtxP7GAgYR5HaAhatoIKdkLF7Cq75wSGi11fbrUw,6553
127
+ port_ocean-0.6.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
128
+ port_ocean-0.6.0.dist-info/entry_points.txt,sha256=F_DNUmGZU2Kme-8NsWM5LLE8piGMafYZygRYhOVtcjA,54
129
+ port_ocean-0.6.0.dist-info/RECORD,,