port-ocean 0.24.21__py3-none-any.whl → 0.24.22__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.
- port_ocean/config/dynamic.py +27 -2
- port_ocean/tests/config/test_config.py +38 -0
- {port_ocean-0.24.21.dist-info → port_ocean-0.24.22.dist-info}/METADATA +1 -1
- {port_ocean-0.24.21.dist-info → port_ocean-0.24.22.dist-info}/RECORD +7 -6
- {port_ocean-0.24.21.dist-info → port_ocean-0.24.22.dist-info}/LICENSE.md +0 -0
- {port_ocean-0.24.21.dist-info → port_ocean-0.24.22.dist-info}/WHEEL +0 -0
- {port_ocean-0.24.21.dist-info → port_ocean-0.24.22.dist-info}/entry_points.txt +0 -0
port_ocean/config/dynamic.py
CHANGED
@@ -2,12 +2,37 @@ import json
|
|
2
2
|
from typing import Type, Any, Optional
|
3
3
|
|
4
4
|
from humps import decamelize
|
5
|
-
from pydantic import
|
5
|
+
from pydantic import (
|
6
|
+
BaseConfig,
|
7
|
+
BaseModel,
|
8
|
+
AnyUrl,
|
9
|
+
create_model,
|
10
|
+
Extra,
|
11
|
+
parse_obj_as,
|
12
|
+
validator,
|
13
|
+
)
|
6
14
|
from pydantic.fields import ModelField, Field
|
7
15
|
|
8
16
|
from port_ocean.config.base import BaseOceanModel
|
9
17
|
|
10
18
|
|
19
|
+
class NoTrailingSlashUrl(AnyUrl):
|
20
|
+
@classmethod
|
21
|
+
def validate(cls, value: Any, field: ModelField, config: BaseConfig) -> "AnyUrl":
|
22
|
+
if value is not None:
|
23
|
+
if isinstance(value, (bytes, bytearray)):
|
24
|
+
try:
|
25
|
+
value = value.decode()
|
26
|
+
except UnicodeDecodeError as exc:
|
27
|
+
raise ValueError("URL bytes must be valid UTF-8") from exc
|
28
|
+
else:
|
29
|
+
value = str(value)
|
30
|
+
|
31
|
+
if value != "/":
|
32
|
+
value = value.rstrip("/")
|
33
|
+
return super().validate(value, field, config)
|
34
|
+
|
35
|
+
|
11
36
|
class Configuration(BaseModel, extra=Extra.allow):
|
12
37
|
name: str
|
13
38
|
type: str
|
@@ -39,7 +64,7 @@ def default_config_factory(configurations: Any) -> Type[BaseModel]:
|
|
39
64
|
case "object":
|
40
65
|
field_type = dict
|
41
66
|
case "url":
|
42
|
-
field_type =
|
67
|
+
field_type = NoTrailingSlashUrl
|
43
68
|
case "string":
|
44
69
|
field_type = str
|
45
70
|
case "integer":
|
@@ -0,0 +1,38 @@
|
|
1
|
+
import pytest
|
2
|
+
from pydantic import BaseModel
|
3
|
+
from port_ocean.config.dynamic import NoTrailingSlashUrl
|
4
|
+
from typing import cast
|
5
|
+
|
6
|
+
|
7
|
+
class TestClass(BaseModel):
|
8
|
+
url: NoTrailingSlashUrl | None
|
9
|
+
|
10
|
+
|
11
|
+
def as_no_trailing_slash_url(value: str | None) -> NoTrailingSlashUrl:
|
12
|
+
# mypy casting
|
13
|
+
return cast(NoTrailingSlashUrl, value)
|
14
|
+
|
15
|
+
|
16
|
+
def test_trailing_slash_valid() -> None:
|
17
|
+
cls = TestClass(url=as_no_trailing_slash_url("http://example"))
|
18
|
+
assert cls.url == "http://example"
|
19
|
+
|
20
|
+
|
21
|
+
def test_trailing_slash_valid_remove_slash() -> None:
|
22
|
+
cls = TestClass(url=as_no_trailing_slash_url("http://example/"))
|
23
|
+
assert cls.url == "http://example"
|
24
|
+
|
25
|
+
|
26
|
+
def test_trailing_slash_not_valid() -> None:
|
27
|
+
with pytest.raises(ValueError):
|
28
|
+
TestClass(url=as_no_trailing_slash_url("/"))
|
29
|
+
|
30
|
+
|
31
|
+
def test_trailing_slash_not_valid_no_domain() -> None:
|
32
|
+
with pytest.raises(ValueError):
|
33
|
+
TestClass(url=as_no_trailing_slash_url("http:///"))
|
34
|
+
|
35
|
+
|
36
|
+
def test_trailing_empty() -> None:
|
37
|
+
cls = TestClass(url=None)
|
38
|
+
assert cls.url is None
|
@@ -68,7 +68,7 @@ port_ocean/clients/port/types.py,sha256=nvlgiAq4WH5_F7wQbz_GAWl-faob84LVgIjZ2Ww5
|
|
68
68
|
port_ocean/clients/port/utils.py,sha256=osFyAjw7Y5Qf2uVSqC7_RTCQfijiL1zS74JJM0goxh0,2762
|
69
69
|
port_ocean/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
70
70
|
port_ocean/config/base.py,sha256=x1gFbzujrxn7EJudRT81C6eN9WsYAb3vOHwcpcpX8Tc,6370
|
71
|
-
port_ocean/config/dynamic.py,sha256=
|
71
|
+
port_ocean/config/dynamic.py,sha256=Lrk4JRGtR-0YKQ9DDGexX5NGFE7EJ6VoHya19YYhssM,2687
|
72
72
|
port_ocean/config/settings.py,sha256=R4Ju15XKbwQEg2W7uUCxoj4_9gUS9uYUFQnX-FUNRDI,7156
|
73
73
|
port_ocean/consumers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
74
74
|
port_ocean/consumers/kafka_consumer.py,sha256=N8KocjBi9aR0BOPG8hgKovg-ns_ggpEjrSxqSqF_BSo,4710
|
@@ -161,6 +161,7 @@ port_ocean/tests/clients/oauth/test_oauth_client.py,sha256=2XVMQUalDpiD539Z7_dk5
|
|
161
161
|
port_ocean/tests/clients/port/mixins/test_entities.py,sha256=DeWbAQcaxT3LQQf_j9HA5nG7YgsQDvXmgK2aghlG9ug,6619
|
162
162
|
port_ocean/tests/clients/port/mixins/test_integrations.py,sha256=vRt_EMsLozQC1LJNXxlvnHj3-FlOBGgAYxg5T0IAqtA,7621
|
163
163
|
port_ocean/tests/clients/port/mixins/test_organization_mixin.py,sha256=zzKYz3h8dl4Z5A2QG_924m0y9U6XTth1XYOfwNrd_24,914
|
164
|
+
port_ocean/tests/config/test_config.py,sha256=Rk4N-ldVSOfn1p23NzdVdfqUpPrqG2cMut4Sv-sAOrw,1023
|
164
165
|
port_ocean/tests/conftest.py,sha256=JXASSS0IY0nnR6bxBflhzxS25kf4iNaABmThyZ0mZt8,101
|
165
166
|
port_ocean/tests/core/conftest.py,sha256=7K_M1--wQ08VmiQRB0vo1nst2X00cwsuBS5UfERsnG8,7589
|
166
167
|
port_ocean/tests/core/defaults/test_common.py,sha256=sR7RqB3ZYV6Xn6NIg-c8k5K6JcGsYZ2SCe_PYX5vLYM,5560
|
@@ -201,8 +202,8 @@ port_ocean/utils/repeat.py,sha256=U2OeCkHPWXmRTVoPV-VcJRlQhcYqPWI5NfmPlb1JIbc,32
|
|
201
202
|
port_ocean/utils/signal.py,sha256=mMVq-1Ab5YpNiqN4PkiyTGlV_G0wkUDMMjTZp5z3pb0,1514
|
202
203
|
port_ocean/utils/time.py,sha256=pufAOH5ZQI7gXvOvJoQXZXZJV-Dqktoj9Qp9eiRwmJ4,1939
|
203
204
|
port_ocean/version.py,sha256=UsuJdvdQlazzKGD3Hd5-U7N69STh8Dq9ggJzQFnu9fU,177
|
204
|
-
port_ocean-0.24.
|
205
|
-
port_ocean-0.24.
|
206
|
-
port_ocean-0.24.
|
207
|
-
port_ocean-0.24.
|
208
|
-
port_ocean-0.24.
|
205
|
+
port_ocean-0.24.22.dist-info/LICENSE.md,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
|
206
|
+
port_ocean-0.24.22.dist-info/METADATA,sha256=50N8hfofvUl4hhRM850KH2qlF6RRBvw-EK_CCOrhFbA,6856
|
207
|
+
port_ocean-0.24.22.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
208
|
+
port_ocean-0.24.22.dist-info/entry_points.txt,sha256=F_DNUmGZU2Kme-8NsWM5LLE8piGMafYZygRYhOVtcjA,54
|
209
|
+
port_ocean-0.24.22.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|