port-ocean 0.12.2.dev13__py3-none-any.whl → 0.12.2.dev16__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.

Files changed (29) hide show
  1. port_ocean/cli/commands/list_integrations.py +5 -8
  2. port_ocean/cli/commands/pull.py +16 -20
  3. port_ocean/clients/port/authentication.py +13 -12
  4. port_ocean/clients/port/client.py +8 -9
  5. port_ocean/clients/port/mixins/blueprints.py +14 -14
  6. port_ocean/clients/port/mixins/entities.py +8 -7
  7. port_ocean/clients/port/mixins/integrations.py +11 -11
  8. port_ocean/clients/port/mixins/migrations.py +5 -5
  9. port_ocean/clients/port/retry_transport.py +35 -13
  10. port_ocean/clients/port/utils.py +23 -32
  11. port_ocean/core/defaults/clean.py +3 -3
  12. port_ocean/core/defaults/common.py +3 -3
  13. port_ocean/core/defaults/initialize.py +47 -48
  14. port_ocean/core/integrations/mixins/sync_raw.py +3 -3
  15. port_ocean/core/utils.py +3 -4
  16. port_ocean/helpers/async_client.py +53 -0
  17. port_ocean/helpers/retry.py +221 -71
  18. port_ocean/ocean.py +22 -20
  19. port_ocean/run.py +15 -20
  20. port_ocean/tests/clients/port/mixins/test_entities.py +4 -3
  21. port_ocean/tests/test_smoke.py +3 -3
  22. port_ocean/utils/async_http.py +8 -13
  23. port_ocean/utils/repeat.py +18 -26
  24. port_ocean/utils/signal.py +2 -1
  25. {port_ocean-0.12.2.dev13.dist-info → port_ocean-0.12.2.dev16.dist-info}/METADATA +1 -2
  26. {port_ocean-0.12.2.dev13.dist-info → port_ocean-0.12.2.dev16.dist-info}/RECORD +29 -28
  27. {port_ocean-0.12.2.dev13.dist-info → port_ocean-0.12.2.dev16.dist-info}/LICENSE.md +0 -0
  28. {port_ocean-0.12.2.dev13.dist-info → port_ocean-0.12.2.dev16.dist-info}/WHEEL +0 -0
  29. {port_ocean-0.12.2.dev13.dist-info → port_ocean-0.12.2.dev16.dist-info}/entry_points.txt +0 -0
port_ocean/ocean.py CHANGED
@@ -1,5 +1,6 @@
1
1
  import asyncio
2
2
  import sys
3
+ import threading
3
4
  from contextlib import asynccontextmanager
4
5
  from typing import Callable, Any, Dict, AsyncIterator, Type
5
6
 
@@ -17,11 +18,8 @@ from port_ocean.context.ocean import (
17
18
  ocean,
18
19
  initialize_port_ocean_context,
19
20
  )
20
- from port_ocean.core.handlers.resync_state_updater import ResyncStateUpdater
21
21
  from port_ocean.core.integrations.base import BaseIntegration
22
22
  from port_ocean.core.models import Runtime
23
- from port_ocean.log.sensetive import sensitive_log_filter
24
- from port_ocean.middlewares import request_handler
25
23
  from port_ocean.utils.repeat import repeat_every
26
24
  from port_ocean.utils.signal import signal_handler
27
25
  from port_ocean.version import __integration_version__
@@ -29,16 +27,16 @@ from port_ocean.version import __integration_version__
29
27
 
30
28
  class Ocean:
31
29
  def __init__(
32
- self,
33
- app: FastAPI | None = None,
34
- integration_class: Callable[[PortOceanContext], BaseIntegration] | None = None,
35
- integration_router: APIRouter | None = None,
36
- config_factory: Type[BaseModel] | None = None,
37
- config_override: Dict[str, Any] | None = None,
30
+ self,
31
+ app: FastAPI | None = None,
32
+ integration_class: Callable[[PortOceanContext], BaseIntegration] | None = None,
33
+ integration_router: APIRouter | None = None,
34
+ config_factory: Type[BaseModel] | None = None,
35
+ config_override: Dict[str, Any] | None = None,
38
36
  ):
39
37
  initialize_port_ocean_context(self)
40
38
  self.fast_api_app = app or FastAPI()
41
- self.fast_api_app.middleware("http")(request_handler)
39
+ # self.fast_api_app.middleware("http")(request_handler)
42
40
 
43
41
  self.config = IntegrationConfiguration(
44
42
  # type: ignore
@@ -47,10 +45,10 @@ class Ocean:
47
45
  )
48
46
 
49
47
  # add the integration sensitive configuration to the sensitive patterns to mask out
50
- sensitive_log_filter.hide_sensitive_strings(
51
- *self.config.get_sensitive_fields_data()
52
- )
53
- self.integration_router = integration_router or APIRouter()
48
+ # sensitive_log_filter.hide_sensitive_strings(
49
+ # *self.config.get_sensitive_fields_data()
50
+ # )
51
+ # self.integration_router = integration_router or APIRouter()
54
52
 
55
53
  self.port_client = PortClient(
56
54
  base_url=self.config.port.base_url,
@@ -64,15 +62,15 @@ class Ocean:
64
62
  integration_class(ocean) if integration_class else BaseIntegration(ocean)
65
63
  )
66
64
 
67
- self.resync_state_updater = ResyncStateUpdater(
68
- self.port_client, self.config.scheduled_resync_interval
69
- )
65
+ # self.resync_state_updater = ResyncStateUpdater(
66
+ # self.port_client, self.config.scheduled_resync_interval
67
+ # )
70
68
 
71
69
  def is_saas(self) -> bool:
72
70
  return self.config.runtime == Runtime.Saas
73
71
 
74
72
  async def _setup_scheduled_resync(
75
- self,
73
+ self,
76
74
  ) -> None:
77
75
  async def execute_resync_all() -> None:
78
76
  # await self.resync_state_updater.update_before_resync()
@@ -102,12 +100,16 @@ class Ocean:
102
100
  # Not running the resync immediately because the event listener should run resync on startup
103
101
  wait_first=False,
104
102
  )(
105
- execute_resync_all
103
+ lambda: threading.Thread(
104
+ target=lambda: asyncio.run_coroutine_threadsafe(
105
+ execute_resync_all(), loop
106
+ )
107
+ ).start()
106
108
  )
107
109
  await repeated_function()
108
110
 
109
111
  async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None:
110
- self.fast_api_app.include_router(self.integration_router, prefix="/integration")
112
+ # self.fast_api_app.include_router(self.integration_router, prefix="/integration")
111
113
 
112
114
  @asynccontextmanager
113
115
  async def lifecycle(_: FastAPI) -> AsyncIterator[None]:
port_ocean/run.py CHANGED
@@ -1,4 +1,3 @@
1
- import asyncio
2
1
  from inspect import getmembers
3
2
  from typing import Dict, Any, Type
4
3
 
@@ -7,13 +6,9 @@ from pydantic import BaseModel
7
6
 
8
7
  from port_ocean.bootstrap import create_default_app
9
8
  from port_ocean.config.dynamic import default_config_factory
10
- from port_ocean.config.settings import ApplicationSettings, LogLevelType
11
- from port_ocean.core.defaults.initialize import initialize_defaults
12
- from port_ocean.core.utils import validate_integration_runtime
13
- from port_ocean.log.logger_setup import setup_logger
9
+ from port_ocean.config.settings import LogLevelType
14
10
  from port_ocean.ocean import Ocean
15
11
  from port_ocean.utils.misc import get_spec_file, load_module
16
- from port_ocean.utils.signal import init_signal_handler
17
12
 
18
13
 
19
14
  def _get_default_config_factory() -> None | Type[BaseModel]:
@@ -32,13 +27,13 @@ def run(
32
27
  initialize_port_resources: bool | None = None,
33
28
  config_override: Dict[str, Any] | None = None,
34
29
  ) -> None:
35
- application_settings = ApplicationSettings(log_level=log_level, port=port)
30
+ # application_settings = ApplicationSettings(log_level=log_level, port=port)
36
31
 
37
- init_signal_handler()
38
- setup_logger(
39
- application_settings.log_level,
40
- enable_http_handler=application_settings.enable_http_logging,
41
- )
32
+ # init_signal_handler()
33
+ # setup_logger(
34
+ # application_settings.log_level,
35
+ # enable_http_handler=application_settings.enable_http_logging,
36
+ # )
42
37
 
43
38
  config_factory = _get_default_config_factory()
44
39
  default_app = create_default_app(path, config_factory, config_override)
@@ -50,14 +45,14 @@ def run(
50
45
  )
51
46
 
52
47
  # Validate that the current integration's runtime matches the execution parameters
53
- asyncio.get_event_loop().run_until_complete(
54
- validate_integration_runtime(app.port_client, app.config.runtime)
55
- )
48
+ # asyncio.get_event_loop().run_until_complete(
49
+ # validate_integration_runtime(app.port_client, app.config.runtime)
50
+ # )
56
51
 
57
52
  # Override config with arguments
58
- if initialize_port_resources is not None:
59
- app.config.initialize_port_resources = initialize_port_resources
60
-
61
- initialize_defaults(app.integration.AppConfigHandlerClass.CONFIG_CLASS, app.config)
53
+ # if initialize_port_resources is not None:
54
+ # app.config.initialize_port_resources = initialize_port_resources
55
+ #
56
+ # initialize_defaults(app.integration.AppConfigHandlerClass.CONFIG_CLASS, app.config)
62
57
 
63
- uvicorn.run(app, host="0.0.0.0", port=application_settings.port)
58
+ uvicorn.run(app, host="0.0.0.0", port=8000, loop="none")
@@ -1,11 +1,12 @@
1
1
  from typing import Any
2
2
  from unittest.mock import MagicMock
3
3
 
4
- import aiohttp
5
4
  import pytest
6
5
 
7
6
  from port_ocean.clients.port.mixins.entities import EntityClientMixin
8
7
  from port_ocean.core.models import Entity
8
+ from httpx import ReadTimeout
9
+
9
10
 
10
11
  errored_entity_identifier: str = "a"
11
12
  expected_result_entities = [
@@ -19,7 +20,7 @@ all_entities = [
19
20
 
20
21
  async def mock_upsert_entity(entity: Entity, *args: Any, **kwargs: Any) -> Entity:
21
22
  if entity.identifier == errored_entity_identifier:
22
- raise aiohttp.ConnectionTimeoutError("")
23
+ raise ReadTimeout("")
23
24
  else:
24
25
  return entity
25
26
 
@@ -46,7 +47,7 @@ async def test_batch_upsert_entities_read_timeout_should_raise_false(
46
47
  async def test_batch_upsert_entities_read_timeout_should_raise_true(
47
48
  entity_client: EntityClientMixin,
48
49
  ) -> None:
49
- with pytest.raises(aiohttp.ConnectionTimeoutError):
50
+ with pytest.raises(ReadTimeout):
50
51
  await entity_client.batch_upsert_entities(
51
52
  entities=all_entities, request_options=MagicMock(), should_raise=True
52
53
  )
@@ -1,12 +1,12 @@
1
1
  from os import environ
2
2
  from typing import Tuple
3
-
4
3
  import pytest
5
4
 
6
5
  from port_ocean.clients.port.client import PortClient
7
6
  from port_ocean.clients.port.types import UserAgentType
8
7
  from port_ocean.tests.helpers.smoke_test import SmokeTestDetails
9
8
 
9
+
10
10
  pytestmark = pytest.mark.smoke
11
11
 
12
12
 
@@ -54,7 +54,7 @@ async def test_valid_fake_persons(
54
54
  headers=headers,
55
55
  )
56
56
 
57
- fake_person_entities = (await fake_person_entities_result.json())["entities"]
57
+ fake_person_entities = fake_person_entities_result.json()["entities"]
58
58
  assert len(fake_person_entities)
59
59
 
60
60
  fake_departments_result = await port_client.client.get(
@@ -62,7 +62,7 @@ async def test_valid_fake_persons(
62
62
  headers=headers,
63
63
  )
64
64
 
65
- departments = [x["identifier"] for x in (await fake_departments_result.json())["entities"]]
65
+ departments = [x["identifier"] for x in fake_departments_result.json()["entities"]]
66
66
 
67
67
  for department in departments:
68
68
  assert len(
@@ -1,34 +1,29 @@
1
- from asyncio import ensure_future
2
-
3
- import aiohttp
4
- from aiohttp import ClientTimeout
1
+ import httpx
5
2
  from werkzeug.local import LocalStack, LocalProxy
6
3
 
7
4
  from port_ocean.context.ocean import ocean
8
- from port_ocean.helpers.retry import RetryRequestClass
9
- from port_ocean.utils.signal import signal_handler
5
+ from port_ocean.helpers.async_client import OceanAsyncClient
6
+ from port_ocean.helpers.retry import RetryTransport
10
7
 
11
- _http_client: LocalStack[aiohttp.ClientSession] = LocalStack()
8
+ _http_client: LocalStack[httpx.AsyncClient] = LocalStack()
12
9
 
13
10
 
14
- def _get_http_client_context() -> aiohttp.ClientSession:
11
+ def _get_http_client_context() -> httpx.AsyncClient:
15
12
  client = _http_client.top
16
13
  if client is None:
17
- client = aiohttp.ClientSession(request_class=RetryRequestClass,
18
- timeout=ClientTimeout(total=ocean.config.client_timeout))
14
+ client = OceanAsyncClient(RetryTransport, timeout=ocean.config.client_timeout)
19
15
  _http_client.push(client)
20
- signal_handler.register(lambda: ensure_future(client.close()))
21
16
 
22
17
  return client
23
18
 
24
19
 
25
20
  """
26
21
  Utilize this client for all outbound integration requests to the third-party application. It functions as a wrapper
27
- around the aiohttp.ClientSession, incorporating retry logic at the transport layer for handling retries on 5xx errors and
22
+ around the httpx.AsyncClient, incorporating retry logic at the transport layer for handling retries on 5xx errors and
28
23
  connection errors.
29
24
 
30
25
  The client is instantiated lazily, only coming into existence upon its initial access. It should not be closed when in
31
26
  use, as it operates as a singleton shared across all events in the thread. It also takes care of recreating the client
32
27
  in scenarios such as the creation of a new event loop, such as when initiating a new thread.
33
28
  """
34
- http_async_client: aiohttp.ClientSession = LocalProxy(lambda: _get_http_client_context()) # type: ignore
29
+ http_async_client: httpx.AsyncClient = LocalProxy(lambda: _get_http_client_context()) # type: ignore
@@ -5,8 +5,7 @@ from traceback import format_exception
5
5
  from typing import Callable, Coroutine, Any
6
6
 
7
7
  from loguru import logger
8
-
9
- from port_ocean.utils.signal import signal_handler
8
+ from starlette.concurrency import run_in_threadpool
10
9
 
11
10
  NoArgsNoReturnFuncT = Callable[[], None]
12
11
  NoArgsNoReturnAsyncFuncT = Callable[[], Coroutine[Any, Any, None]]
@@ -15,10 +14,6 @@ NoArgsNoReturnDecorator = Callable[
15
14
  ]
16
15
 
17
16
 
18
- def run_in_threadpool(param):
19
- pass
20
-
21
-
22
17
  def repeat_every(
23
18
  seconds: float,
24
19
  wait_first: bool = False,
@@ -61,27 +56,24 @@ def repeat_every(
61
56
  async def loop() -> None:
62
57
  nonlocal repetitions
63
58
 
64
- # if wait_first:
65
- # await asyncio.sleep(seconds)
66
- # count the repetition even if an exception is raised
67
- repetitions += 1
68
- try:
69
- if is_coroutine:
70
- task = asyncio.create_task(func())
71
- signal_handler.register(lambda: task.cancel())
72
- ensure_future(task)
73
- else:
74
- run_in_threadpool(func)
75
- except Exception as exc:
76
- formatted_exception = "".join(
77
- format_exception(type(exc), exc, exc.__traceback__)
78
- )
79
- logger.error(formatted_exception)
80
- if raise_exceptions:
81
- raise exc
59
+ if wait_first:
60
+ await asyncio.sleep(seconds)
61
+ while max_repetitions is None or repetitions < max_repetitions:
62
+ # count the repetition even if an exception is raised
63
+ repetitions += 1
64
+ try:
65
+ if is_coroutine:
66
+ await func() # type: ignore
67
+ else:
68
+ await run_in_threadpool(func)
69
+ except Exception as exc:
70
+ formatted_exception = "".join(
71
+ format_exception(type(exc), exc, exc.__traceback__)
72
+ )
73
+ logger.error(formatted_exception)
74
+ if raise_exceptions:
75
+ raise exc
82
76
  await asyncio.sleep(seconds)
83
- if max_repetitions is None or repetitions < max_repetitions:
84
- asyncio.get_event_loop().call_later(seconds, loop)
85
77
 
86
78
  ensure_future(loop())
87
79
 
@@ -3,7 +3,8 @@ from typing import Callable, Any
3
3
  from werkzeug.local import LocalProxy, LocalStack
4
4
 
5
5
  from port_ocean.exceptions.utils import (
6
- SignalHandlerAlreadyInitialized, SignalHandlerNotInitialized,
6
+ SignalHandlerNotInitialized,
7
+ SignalHandlerAlreadyInitialized,
7
8
  )
8
9
  from port_ocean.utils.misc import generate_uuid
9
10
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: port-ocean
3
- Version: 0.12.2.dev13
3
+ Version: 0.12.2.dev16
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
@@ -22,7 +22,6 @@ Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
22
22
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
23
23
  Classifier: Topic :: Utilities
24
24
  Provides-Extra: cli
25
- Requires-Dist: aiohttp (>=3.10.10,<4.0.0)
26
25
  Requires-Dist: aiostream (>=0.5.2,<0.7.0)
27
26
  Requires-Dist: click (>=8.1.3,<9.0.0) ; extra == "cli"
28
27
  Requires-Dist: confluent-kafka (>=2.1.1,<3.0.0)
@@ -7,10 +7,10 @@ port_ocean/cli/commands/defaults/__init___.py,sha256=5OKgakO79bTbplFv1_yWCrw1x_J
7
7
  port_ocean/cli/commands/defaults/clean.py,sha256=b3MVxAc9pASGxG3O6AjbDJiFngw82UqclVuCZObVPGM,1544
8
8
  port_ocean/cli/commands/defaults/dock.py,sha256=pFtHrU_LTvb5Ddrzj09Wxy-jg1Ym10wBYD-0tpDRugE,1104
9
9
  port_ocean/cli/commands/defaults/group.py,sha256=hii_4CYoQ7jSMePbnP4AmruO_RKWCUcoV7dXXBlZafc,115
10
- port_ocean/cli/commands/list_integrations.py,sha256=EZlhN2K8CG0J_l5FBxUAJPlbkPvq_jxJxHQUNUhrJgg,1217
10
+ port_ocean/cli/commands/list_integrations.py,sha256=DVVioFruGUE-_v6UUHlcemWNN6RlWwCrf1X4HmAXsf8,1134
11
11
  port_ocean/cli/commands/main.py,sha256=gj0lmuLep2XeLNuabB7Wk0UVYPT7_CD_rAw5AoUQWSE,1057
12
12
  port_ocean/cli/commands/new.py,sha256=uNDzb2cmUdOHBGsBujWmlB9FrlJvB8CD9dnXY_btGUc,3777
13
- port_ocean/cli/commands/pull.py,sha256=WmlAYJCkJ1LaujjYD03BplgyaN622O0WJ6Re7i3JzbI,2439
13
+ port_ocean/cli/commands/pull.py,sha256=VvrRjLNlfPuLIf7KzeIcbzzdi98Z0M9wCRpXC3QPxdI,2306
14
14
  port_ocean/cli/commands/sail.py,sha256=rY7rEMjfy_KXiWvtL0T72TTLgeQ3HW4SOzKkz9wL9nI,2282
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
@@ -39,16 +39,16 @@ port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/tests/test_sample.
39
39
  port_ocean/cli/utils.py,sha256=IUK2UbWqjci-lrcDdynZXqVP5B5TcjF0w5CpEVUks-k,54
40
40
  port_ocean/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
41
  port_ocean/clients/port/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
- port_ocean/clients/port/authentication.py,sha256=az5OZI7yAVgfiqCHygn8W10XKi5Y2tGUvW3CBAn9HTY,2972
43
- port_ocean/clients/port/client.py,sha256=b-Q9Ow3wDl6AYRqAmpvWOfClQf1vf5lr6k4JnNTxTI4,3417
42
+ port_ocean/clients/port/authentication.py,sha256=t3z6h4vld-Tzkpth15sstaMJg0rccX-pXXjNtOa-nCY,2949
43
+ port_ocean/clients/port/client.py,sha256=Xd8Jk25Uh4WXY_WW-z1Qbv6F3ZTBFPoOolsxHMfozKw,3366
44
44
  port_ocean/clients/port/mixins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
- port_ocean/clients/port/mixins/blueprints.py,sha256=4WTBtS_eHzeKs_fB51FT3RJmI3upk_njYLr7WVQsteE,4717
46
- port_ocean/clients/port/mixins/entities.py,sha256=BIN9FSIfDN4IlWhZdTi5VeqXm7Hdd9Mu51gRU22d7_g,8864
47
- port_ocean/clients/port/mixins/integrations.py,sha256=2K9do-lCuVkFl6bJj_tTyCeMVCWh438X3iScwCTWm0g,4927
48
- port_ocean/clients/port/mixins/migrations.py,sha256=bnUFxZ2OGVcvC_Tr-DsYj-YRJ5gp1dcKIEa4X5Rf1oo,1483
49
- port_ocean/clients/port/retry_transport.py,sha256=gTeyHQxGQC3221_EXh9p8DRxFh055jF2UsKqV7yzLIE,1127
45
+ port_ocean/clients/port/mixins/blueprints.py,sha256=POBl4uDocrgJBw4rvCAzwRcD4jk-uBL6pDAuKMTajdg,4633
46
+ port_ocean/clients/port/mixins/entities.py,sha256=WdqT1gyS81pByUl9xIfZz_xEHRaBfDuZ-ekKX53oBSE,8870
47
+ port_ocean/clients/port/mixins/integrations.py,sha256=HnWXaJt41SUcha-bhvLdJW07j-l7xIo91GUzzwl2f_E,4859
48
+ port_ocean/clients/port/mixins/migrations.py,sha256=A6896oJF6WbFL2WroyTkMzr12yhVyWqGoq9dtLNSKBY,1457
49
+ port_ocean/clients/port/retry_transport.py,sha256=PtIZOAZ6V-ncpVysRUsPOgt8Sf01QLnTKB5YeKBxkJk,1861
50
50
  port_ocean/clients/port/types.py,sha256=nvlgiAq4WH5_F7wQbz_GAWl-faob84LVgIjZ2Ww5mTk,451
51
- port_ocean/clients/port/utils.py,sha256=B4cYHv5AHg_UPjTOUSL79AEcUTvvCaFtJSIyZmb75yg,2942
51
+ port_ocean/clients/port/utils.py,sha256=5B6rHgiVrtiL4YWh7Eq7_ncIeDwrDsB7jIvRik5xH8c,2373
52
52
  port_ocean/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
53
  port_ocean/config/base.py,sha256=x1gFbzujrxn7EJudRT81C6eN9WsYAb3vOHwcpcpX8Tc,6370
54
54
  port_ocean/config/dynamic.py,sha256=qOFkRoJsn_BW7581omi_AoMxoHqasf_foxDQ_G11_SI,2030
@@ -61,9 +61,9 @@ port_ocean/context/ocean.py,sha256=2EreWOj-N2H7QUjEt5wGiv5KHP4pTZc70tn_wHcpF4w,4
61
61
  port_ocean/context/resource.py,sha256=yDj63URzQelj8zJPh4BAzTtPhpKr9Gw9DRn7I_0mJ1s,1692
62
62
  port_ocean/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
63
  port_ocean/core/defaults/__init__.py,sha256=8qCZg8n06WAdMu9s_FiRtDYLGPGHbOuS60vapeUoAks,142
64
- port_ocean/core/defaults/clean.py,sha256=_PQEG2gD2NvnJBilar693IerFAmiN006guBLbSaDkm0,2187
65
- port_ocean/core/defaults/common.py,sha256=xaNubpAxZe7H2-Sj7Lgb1rAFVunIUaawa5aXORYXXyQ,3555
66
- port_ocean/core/defaults/initialize.py,sha256=6dIfucQ2cR36eyLK7EPWwGzmH65KSqRLjevcyH8aYvE,8621
64
+ port_ocean/core/defaults/clean.py,sha256=S3UAfca-oU89WJKIB4OgGjGjPr0vxBQ2aRZsLTZhQ04,2185
65
+ port_ocean/core/defaults/common.py,sha256=uVUg6VEn4RqtXQwLwMNGfkmT5zYRN_h5USfKw3poVyo,3561
66
+ port_ocean/core/defaults/initialize.py,sha256=qg4JLIWjp0c5-9w09X99muHRYX4k1cGZ_77vYo-tnpU,8422
67
67
  port_ocean/core/event_listener/__init__.py,sha256=mzJ33wRq0kh60fpVdOHVmvMTUQIvz3vxmifyBgwDn0E,889
68
68
  port_ocean/core/event_listener/base.py,sha256=1Nmpg00OfT2AD2L8eFm4VQEcdG2TClpSWJMhWhAjkEE,2356
69
69
  port_ocean/core/event_listener/factory.py,sha256=AYYfSHPAF7P5H-uQECXT0JVJjKDHrYkWJJBSL4mGkg8,3697
@@ -94,11 +94,11 @@ port_ocean/core/integrations/mixins/__init__.py,sha256=FA1FEKMM6P-L2_m7Q4L20mFa4
94
94
  port_ocean/core/integrations/mixins/events.py,sha256=Ddfx2L4FpghV38waF8OfVeOV0bHBxNIgjU-q5ffillI,2341
95
95
  port_ocean/core/integrations/mixins/handler.py,sha256=mZ7-0UlG3LcrwJttFbMe-R4xcOU2H_g33tZar7PwTv8,3771
96
96
  port_ocean/core/integrations/mixins/sync.py,sha256=B9fEs8faaYLLikH9GBjE_E61vo0bQDjIGQsQ1SRXOlA,3931
97
- port_ocean/core/integrations/mixins/sync_raw.py,sha256=fUFlhT1huXrolqAw9jB_zo5WhNw4GHbc9yos_-6KuaM,18996
97
+ port_ocean/core/integrations/mixins/sync_raw.py,sha256=tZFWCPthhSaQ1x2TsBDnSN_G_WgzYVX0xE6kBvDCtHc,19000
98
98
  port_ocean/core/integrations/mixins/utils.py,sha256=7y1rGETZIjOQadyIjFJXIHKkQFKx_SwiP-TrAIsyyLY,2303
99
99
  port_ocean/core/models.py,sha256=dJ2_olTdbjUpObQJNmg7e7EENU_zZiX6XOaknNp54B0,1342
100
100
  port_ocean/core/ocean_types.py,sha256=3_d8-n626f1kWLQ_Jxw194LEyrOVupz05qs_Y1pvB-A,990
101
- port_ocean/core/utils.py,sha256=btXrgW5jB1lRRrW4mo3yyvhgF4m-cwuKORqn1Krq4cQ,3678
101
+ port_ocean/core/utils.py,sha256=40UjRauRJO47WDSNn9bkCRD2bfhfB3e-dnOLULnuVzE,3631
102
102
  port_ocean/exceptions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
103
103
  port_ocean/exceptions/api.py,sha256=TLmTMqn4uHGaHgZK8PMIJ0TVJlPB4iP7xl9rx7GtCyY,426
104
104
  port_ocean/exceptions/base.py,sha256=uY4DX7fIITDFfemCJDWpaZi3bD51lcANc5swpoNvMJA,46
@@ -108,18 +108,19 @@ port_ocean/exceptions/core.py,sha256=Zmb1m6NnkSPWpAiQA5tgejm3zpDMt1WQEN47OJNo54A
108
108
  port_ocean/exceptions/port_defaults.py,sha256=45Bno5JEB-GXztvKsy8mw7TrydQmw13-4JAo2oQmXkE,438
109
109
  port_ocean/exceptions/utils.py,sha256=gjOqpi-HpY1l4WlMFsGA9yzhxDhajhoGGdDDyGbLnqI,197
110
110
  port_ocean/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
111
- port_ocean/helpers/retry.py,sha256=0rKkpkoanP00KQ70EQ6bUHXUFxgtApPQhVT0Jqp-syA,8259
111
+ port_ocean/helpers/async_client.py,sha256=SRlP6o7_FCSY3UHnRlZdezppePVxxOzZ0z861vE3K40,1783
112
+ port_ocean/helpers/retry.py,sha256=IQ0RfQ2T5o6uoZh2WW2nrFH5TT6K_k3y2Im0HDp5j9Y,15059
112
113
  port_ocean/log/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
113
114
  port_ocean/log/handlers.py,sha256=k9G_Mb4ga2-Jke9irpdlYqj6EYiwv0gEsh4TgyqqOmI,2853
114
115
  port_ocean/log/logger_setup.py,sha256=qSeVwnivV4WoLx_4SfBwn2PtmUpNdkSEgfm0C8B3yUw,2332
115
116
  port_ocean/log/sensetive.py,sha256=lVKiZH6b7TkrZAMmhEJRhcl67HNM94e56x12DwFgCQk,2920
116
117
  port_ocean/middlewares.py,sha256=9wYCdyzRZGK1vjEJ28FY_DkfwDNENmXp504UKPf5NaQ,2727
117
- port_ocean/ocean.py,sha256=rDyJOzGR8wW2dreJasaLI14n0ELtnSVV8c8N-7lw1hM,4865
118
+ port_ocean/ocean.py,sha256=7NV-QVP-NivyZNoJXp2Mz6NGjkR0ngqml2zfdV5Qulc,4861
118
119
  port_ocean/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
119
- port_ocean/run.py,sha256=rTxBlrQd4yyrtgErCFJCHCEHs7d1OXrRiJehUYmIbN0,2212
120
+ port_ocean/run.py,sha256=RqD3mstlitQhBITjvAxbfYmm6RRrWbzdPA2i_bG3rgU,1957
120
121
  port_ocean/sonar-project.properties,sha256=X_wLzDOkEVmpGLRMb2fg9Rb0DxWwUFSvESId8qpvrPI,73
121
122
  port_ocean/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
122
- port_ocean/tests/clients/port/mixins/test_entities.py,sha256=5zeWFp3Rm31OzL7UJFmgiB2HvGw1Bvjb46xNTNzo40I,1608
123
+ port_ocean/tests/clients/port/mixins/test_entities.py,sha256=A9myrnkLhKSQrnOLv1Zz2wiOVSxW65Q9RIUIRbn_V7w,1586
123
124
  port_ocean/tests/conftest.py,sha256=JXASSS0IY0nnR6bxBflhzxS25kf4iNaABmThyZ0mZt8,101
124
125
  port_ocean/tests/core/handlers/entity_processor/test_jq_entity_processor.py,sha256=Yv03P-LDcJCKZ21exiTFrcT1eu0zn6Z954dilxrb52Y,10842
125
126
  port_ocean/tests/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -128,19 +129,19 @@ port_ocean/tests/helpers/integration.py,sha256=_RxS-RHpu11lrbhUXYPZp862HLWx8AoD7
128
129
  port_ocean/tests/helpers/ocean_app.py,sha256=Dp1bwEDhWsx_G-KVxOfJX1eVIS4168ajLu39wAY275g,1693
129
130
  port_ocean/tests/helpers/port_client.py,sha256=5d6GNr8vNNSOkrz1AdOhxBUKuusr_-UPDP7AVpHasQw,599
130
131
  port_ocean/tests/helpers/smoke_test.py,sha256=_9aJJFRfuGJEg2D2YQJVJRmpreS6gEPHHQq8Q01x4aQ,2697
131
- port_ocean/tests/test_smoke.py,sha256=zxNAyz1pLeZHfSc-5eS-3dPAUje0uItZPK901t2PEUY,2573
132
+ port_ocean/tests/test_smoke.py,sha256=uix2uIg_yOm8BHDgHw2hTFPy1fiIyxBGW3ENU_KoFlo,2557
132
133
  port_ocean/utils/__init__.py,sha256=KMGnCPXZJbNwtgxtyMycapkDz8tpSyw23MSYT3iVeHs,91
133
- port_ocean/utils/async_http.py,sha256=3rd_iv7qDkl6GLws_YRsM1sPl2fpUMDw9CEzg8RtqQM,1459
134
+ port_ocean/utils/async_http.py,sha256=arnH458TExn2Dju_Sy6pHas_vF5RMWnOp-jBz5WAAcE,1226
134
135
  port_ocean/utils/async_iterators.py,sha256=iw3cUHxfQm3zUSPdw2FmSXDU8E1Ppnys4TGhswNuQ8s,1569
135
136
  port_ocean/utils/cache.py,sha256=3KItZDE2yVrbVDr-hoM8lNna8s2dlpxhP4ICdLjH4LQ,2231
136
137
  port_ocean/utils/misc.py,sha256=0q2cJ5psqxn_5u_56pT7vOVQ3shDM02iC1lzyWQ_zl0,2098
137
138
  port_ocean/utils/queue_utils.py,sha256=KWWl8YVnG-glcfIHhM6nefY-2sou_C6DVP1VynQwzB4,2762
138
- port_ocean/utils/repeat.py,sha256=6acByfRzTXYQMkL9vBLZqvYM0IHV1I6EjfwnvqoWImY,3411
139
- port_ocean/utils/signal.py,sha256=z9iJBw8aAfxGKwlSHjhEq1g8HbPkCaYpVMyvtisrjZU,1365
139
+ port_ocean/utils/repeat.py,sha256=0EFWM9d8lLXAhZmAyczY20LAnijw6UbIECf5lpGbOas,3231
140
+ port_ocean/utils/signal.py,sha256=K-6kKFQTltcmKDhtyZAcn0IMa3sUpOHGOAUdWKgx0_E,1369
140
141
  port_ocean/utils/time.py,sha256=pufAOH5ZQI7gXvOvJoQXZXZJV-Dqktoj9Qp9eiRwmJ4,1939
141
142
  port_ocean/version.py,sha256=UsuJdvdQlazzKGD3Hd5-U7N69STh8Dq9ggJzQFnu9fU,177
142
- port_ocean-0.12.2.dev13.dist-info/LICENSE.md,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
143
- port_ocean-0.12.2.dev13.dist-info/METADATA,sha256=xkoOnVA59qSgE-hgS_eUF_SMyiGB28fOkJg0xJA2k4M,6713
144
- port_ocean-0.12.2.dev13.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
145
- port_ocean-0.12.2.dev13.dist-info/entry_points.txt,sha256=F_DNUmGZU2Kme-8NsWM5LLE8piGMafYZygRYhOVtcjA,54
146
- port_ocean-0.12.2.dev13.dist-info/RECORD,,
143
+ port_ocean-0.12.2.dev16.dist-info/LICENSE.md,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
144
+ port_ocean-0.12.2.dev16.dist-info/METADATA,sha256=zcc-aFK2k-EDiET_alfOyE2XEBUR_Qb24hQfey2GYa8,6671
145
+ port_ocean-0.12.2.dev16.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
146
+ port_ocean-0.12.2.dev16.dist-info/entry_points.txt,sha256=F_DNUmGZU2Kme-8NsWM5LLE8piGMafYZygRYhOVtcjA,54
147
+ port_ocean-0.12.2.dev16.dist-info/RECORD,,