etlplus 0.16.4__py3-none-any.whl → 0.16.5__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.
- etlplus/api/__init__.py +14 -14
- etlplus/api/auth.py +9 -6
- etlplus/api/config.py +6 -6
- etlplus/api/endpoint_client.py +16 -16
- etlplus/api/errors.py +4 -4
- etlplus/api/pagination/__init__.py +6 -6
- etlplus/api/pagination/config.py +11 -9
- etlplus/api/rate_limiting/__init__.py +2 -2
- etlplus/api/rate_limiting/config.py +10 -10
- etlplus/api/rate_limiting/rate_limiter.py +2 -2
- etlplus/api/request_manager.py +4 -4
- etlplus/api/retry_manager.py +6 -6
- etlplus/api/transport.py +10 -10
- etlplus/api/types.py +15 -15
- etlplus/api/utils.py +49 -49
- etlplus/cli/handlers.py +4 -4
- etlplus/connector/__init__.py +6 -6
- etlplus/connector/api.py +7 -7
- etlplus/connector/database.py +3 -3
- etlplus/connector/file.py +3 -3
- etlplus/connector/types.py +2 -2
- etlplus/ops/extract.py +2 -2
- etlplus/ops/utils.py +5 -5
- etlplus/ops/validate.py +13 -13
- {etlplus-0.16.4.dist-info → etlplus-0.16.5.dist-info}/METADATA +1 -1
- {etlplus-0.16.4.dist-info → etlplus-0.16.5.dist-info}/RECORD +30 -30
- {etlplus-0.16.4.dist-info → etlplus-0.16.5.dist-info}/WHEEL +0 -0
- {etlplus-0.16.4.dist-info → etlplus-0.16.5.dist-info}/entry_points.txt +0 -0
- {etlplus-0.16.4.dist-info → etlplus-0.16.5.dist-info}/licenses/LICENSE +0 -0
- {etlplus-0.16.4.dist-info → etlplus-0.16.5.dist-info}/top_level.txt +0 -0
etlplus/ops/validate.py
CHANGED
|
@@ -44,9 +44,9 @@ from .load import load_data
|
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
__all__ = [
|
|
47
|
-
'
|
|
48
|
-
'
|
|
49
|
-
'
|
|
47
|
+
'FieldRulesDict',
|
|
48
|
+
'FieldValidationDict',
|
|
49
|
+
'ValidationDict',
|
|
50
50
|
'validate_field',
|
|
51
51
|
'validate',
|
|
52
52
|
]
|
|
@@ -69,7 +69,7 @@ TYPE_MAP: Final[dict[str, type | tuple[type, ...]]] = {
|
|
|
69
69
|
# SECTION: TYPED DICTS ====================================================== #
|
|
70
70
|
|
|
71
71
|
|
|
72
|
-
class
|
|
72
|
+
class FieldRulesDict(TypedDict, total=False):
|
|
73
73
|
"""
|
|
74
74
|
Validation rules for a single field.
|
|
75
75
|
|
|
@@ -93,7 +93,7 @@ class FieldRules(TypedDict, total=False):
|
|
|
93
93
|
enum: list[Any]
|
|
94
94
|
|
|
95
95
|
|
|
96
|
-
class
|
|
96
|
+
class FieldValidationDict(TypedDict):
|
|
97
97
|
"""
|
|
98
98
|
Validation result for a single field.
|
|
99
99
|
|
|
@@ -109,7 +109,7 @@ class FieldValidation(TypedDict):
|
|
|
109
109
|
errors: list[str]
|
|
110
110
|
|
|
111
111
|
|
|
112
|
-
class
|
|
112
|
+
class ValidationDict(TypedDict):
|
|
113
113
|
"""
|
|
114
114
|
Validation result for a complete data structure.
|
|
115
115
|
|
|
@@ -134,7 +134,7 @@ class Validation(TypedDict):
|
|
|
134
134
|
# SECTION: TYPE ALIASES ===================================================== #
|
|
135
135
|
|
|
136
136
|
|
|
137
|
-
type RulesMap = Mapping[str,
|
|
137
|
+
type RulesMap = Mapping[str, FieldRulesDict]
|
|
138
138
|
|
|
139
139
|
|
|
140
140
|
# SECTION: INTERNAL FUNCTIONS ============================================== #
|
|
@@ -339,8 +339,8 @@ def _validate_record(
|
|
|
339
339
|
|
|
340
340
|
def validate_field(
|
|
341
341
|
value: Any,
|
|
342
|
-
rules: StrAnyMap |
|
|
343
|
-
) ->
|
|
342
|
+
rules: StrAnyMap | FieldRulesDict,
|
|
343
|
+
) -> FieldValidationDict:
|
|
344
344
|
"""
|
|
345
345
|
Validate a single value against field rules.
|
|
346
346
|
|
|
@@ -348,14 +348,14 @@ def validate_field(
|
|
|
348
348
|
----------
|
|
349
349
|
value : Any
|
|
350
350
|
The value to validate. ``None`` is treated as missing.
|
|
351
|
-
rules : StrAnyMap |
|
|
351
|
+
rules : StrAnyMap | FieldRulesDict
|
|
352
352
|
Rule dictionary. Supported keys include ``required``, ``type``,
|
|
353
353
|
``min``, ``max``, ``minLength``, ``maxLength``, ``pattern``, and
|
|
354
354
|
``enum``.
|
|
355
355
|
|
|
356
356
|
Returns
|
|
357
357
|
-------
|
|
358
|
-
|
|
358
|
+
FieldValidationDict
|
|
359
359
|
Result with ``valid`` and a list of ``errors``.
|
|
360
360
|
|
|
361
361
|
Notes
|
|
@@ -438,7 +438,7 @@ def validate_field(
|
|
|
438
438
|
def validate(
|
|
439
439
|
source: StrPath | JSONData,
|
|
440
440
|
rules: RulesMap | None = None,
|
|
441
|
-
) ->
|
|
441
|
+
) -> ValidationDict:
|
|
442
442
|
"""
|
|
443
443
|
Validate data against rules.
|
|
444
444
|
|
|
@@ -452,7 +452,7 @@ def validate(
|
|
|
452
452
|
|
|
453
453
|
Returns
|
|
454
454
|
-------
|
|
455
|
-
|
|
455
|
+
ValidationDict
|
|
456
456
|
Structured result with keys ``valid``, ``errors``, ``field_errors``,
|
|
457
457
|
and ``data``. If loading fails, ``data`` is ``None`` and an error is
|
|
458
458
|
reported in ``errors``.
|
|
@@ -9,42 +9,42 @@ etlplus/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
9
9
|
etlplus/types.py,sha256=Op2H1dcmv0Srm9prFnBZjt7f1S4Mqrus7XrdsjoZkIM,3461
|
|
10
10
|
etlplus/utils.py,sha256=X-k_Y8i6oDjlE5aQu9sw3gPw7O2ikiSn4uoheVv_ERc,17091
|
|
11
11
|
etlplus/api/README.md,sha256=amxS_eIcsnNuVvD0x_w8nkyfedOTYbhlY0gGhaFg0DE,8705
|
|
12
|
-
etlplus/api/__init__.py,sha256=
|
|
13
|
-
etlplus/api/auth.py,sha256=
|
|
14
|
-
etlplus/api/config.py,sha256=
|
|
15
|
-
etlplus/api/endpoint_client.py,sha256=
|
|
12
|
+
etlplus/api/__init__.py,sha256=eIHkdNBZv6ViB_5MhW3f3vWMYJLFoF4Tr3Wnb3O7B4E,4647
|
|
13
|
+
etlplus/api/auth.py,sha256=PZEJIBwLwnUGfF76s32a5GnLcpDvu4ghEd-wEAHx4rU,12260
|
|
14
|
+
etlplus/api/config.py,sha256=WmH1GOQxoBAr3vUsmYIyMbXSt7kiyNbtKjyMS1dqt-A,17653
|
|
15
|
+
etlplus/api/endpoint_client.py,sha256=UtvK4h_-fxINM-5QcumkcLJsL0Uw4L0L_4RMxC024Yk,30737
|
|
16
16
|
etlplus/api/enums.py,sha256=Tvkru6V8fzQh2JM2FDLcA_yaPENOKz5JgzxLhieqEvc,1141
|
|
17
|
-
etlplus/api/errors.py,sha256=
|
|
18
|
-
etlplus/api/request_manager.py,sha256=
|
|
19
|
-
etlplus/api/retry_manager.py,sha256=
|
|
20
|
-
etlplus/api/transport.py,sha256=
|
|
21
|
-
etlplus/api/types.py,sha256=
|
|
22
|
-
etlplus/api/utils.py,sha256=
|
|
23
|
-
etlplus/api/pagination/__init__.py,sha256=
|
|
17
|
+
etlplus/api/errors.py,sha256=8LuZfExUpZ67PPqPr6SdAmFA-wc0ocw4JHoBYyEcg0s,4664
|
|
18
|
+
etlplus/api/request_manager.py,sha256=K3tlRFflUM-_S-optnHzJx_AWcbd0ZQGVX_NytkN4zg,18690
|
|
19
|
+
etlplus/api/retry_manager.py,sha256=RV5xkmbExNHF_b-IN5RWx2wawiJzeklc9miGXPQb7U4,11326
|
|
20
|
+
etlplus/api/transport.py,sha256=f9hgtlnz5fFUsMYWdwAkSsdULJSv-276ekP8u_k3e4Y,9448
|
|
21
|
+
etlplus/api/types.py,sha256=gxwmgPDra7OfAPjJv2Mq45axd_s4TiGAqYtMCx167UM,8008
|
|
22
|
+
etlplus/api/utils.py,sha256=cxQYV0iAbhr65_yvhSii5jhfNcVQGgdwuwO86PJVD-s,26415
|
|
23
|
+
etlplus/api/pagination/__init__.py,sha256=K76nkMnMyM81wzbKTQynq1rRv81ndEUVEuF6cmPzvKQ,1401
|
|
24
24
|
etlplus/api/pagination/client.py,sha256=yMEpWqRxTCD4zRc9OYtEyUtShpGH5atiHFEAt95v2FE,5394
|
|
25
|
-
etlplus/api/pagination/config.py,sha256=
|
|
25
|
+
etlplus/api/pagination/config.py,sha256=pt4yAGr03Esr1gEZg3Nm6kfBOM1FpWwf_t6XTpvBd4s,13596
|
|
26
26
|
etlplus/api/pagination/paginator.py,sha256=B0OK_0FVmUz3-lCDeKgDOqYJOoEQtjO6I5eSmK58tbY,24433
|
|
27
|
-
etlplus/api/rate_limiting/__init__.py,sha256=
|
|
28
|
-
etlplus/api/rate_limiting/config.py,sha256=
|
|
29
|
-
etlplus/api/rate_limiting/rate_limiter.py,sha256=
|
|
27
|
+
etlplus/api/rate_limiting/__init__.py,sha256=8VIjkW2wGjTFJjjAqOBSFKcKsBFuYndS4o33PLSo_q8,1072
|
|
28
|
+
etlplus/api/rate_limiting/config.py,sha256=U8T8BxrX87uFR-ksTG1FkmxoVr-FTaLIa0wWeXIcZss,9775
|
|
29
|
+
etlplus/api/rate_limiting/rate_limiter.py,sha256=qmOf15qvhFk2htMsGcHfgzATqOBd2BdrG8ShadfOIgY,7035
|
|
30
30
|
etlplus/cli/README.md,sha256=8H_G2d3HteYIU6ReX9K9DM485QjWDT5vHMQbGD_vv20,1237
|
|
31
31
|
etlplus/cli/__init__.py,sha256=J97-Rv931IL1_b4AXnB7Fbbd7HKnHBpx18NQfC_kE6c,299
|
|
32
32
|
etlplus/cli/commands.py,sha256=Mbnu_YYUrOumbDjkul9x5VjP8VXW5u08xNi4nLF9Yyo,25048
|
|
33
33
|
etlplus/cli/constants.py,sha256=0F7dXIQKWUhhVu2Us527GJeknJIWpBqz7CK2e5OQgcE,1947
|
|
34
|
-
etlplus/cli/handlers.py,sha256=
|
|
34
|
+
etlplus/cli/handlers.py,sha256=JdN7W7mqmQL9xyU7PkBtsQf7eu3j5-E2AhAQvbfy-4g,18470
|
|
35
35
|
etlplus/cli/io.py,sha256=tGGNQ4ecezqj-mD285fgBVrYdphdeqApsyV9VojOj1I,7836
|
|
36
36
|
etlplus/cli/main.py,sha256=68_uJwmWajhOC9o4R_ns8IQloC9BFmAKC_9GlQOxKWg,5239
|
|
37
37
|
etlplus/cli/options.py,sha256=vfXT3YLh7wG1iC-aTdSg6ItMC8l6n0Lozmy53XjqLbA,1199
|
|
38
38
|
etlplus/cli/state.py,sha256=3Dq5BKct0uAvRajtc2yHbsX7wqepZOwlAMKsyvQcnqk,7918
|
|
39
39
|
etlplus/cli/types.py,sha256=tclhKVJXDqHzlTQBYKARfqMgDOcuBJ-Zej2pvFy96WM,652
|
|
40
|
-
etlplus/connector/__init__.py,sha256=
|
|
41
|
-
etlplus/connector/api.py,sha256=
|
|
40
|
+
etlplus/connector/__init__.py,sha256=C1nMuEvCnYS07kpoP91aWEg1utV1D4bO603OzveF7s0,1012
|
|
41
|
+
etlplus/connector/api.py,sha256=uXoQvOGGnZEP96H0O19nMgu7uiBfTqEFNuFl0r9oBbQ,4531
|
|
42
42
|
etlplus/connector/connector.py,sha256=OQP4kK_1O6g9FnDBrE3L58LOSfImsK5EBHtKI4N71u8,574
|
|
43
43
|
etlplus/connector/core.py,sha256=0GeXjlZFnyS-4j7jR_AtclQtELE6x-vodHJ4rfjFLL8,2795
|
|
44
|
-
etlplus/connector/database.py,sha256=
|
|
44
|
+
etlplus/connector/database.py,sha256=Y8fzcbzucIZW64g9zkqO-M_H02CiW5lB0IDk0RynWJo,3014
|
|
45
45
|
etlplus/connector/enums.py,sha256=43NziUOpol4YvBtM13WJJzY1EAQOjaWESxLl7J2ZT8U,1069
|
|
46
|
-
etlplus/connector/file.py,sha256=
|
|
47
|
-
etlplus/connector/types.py,sha256=
|
|
46
|
+
etlplus/connector/file.py,sha256=AsEXUHOokP2s5NQoTazF3Skz7qMj-1FNdvRZj9LfdbM,2858
|
|
47
|
+
etlplus/connector/types.py,sha256=51UPD4edtMRiRL35ZVfbmKTodhrLUiRP5P067SZGzms,953
|
|
48
48
|
etlplus/connector/utils.py,sha256=fS2hPAfuhKTg_L2xDxF5fJnsO1SuuDIiEWU7GuaJKUM,2933
|
|
49
49
|
etlplus/database/README.md,sha256=3Af5BEGLkBmMoGOLtS1GQuj4wKPh_CwSp5NEPMf2uaY,1435
|
|
50
50
|
etlplus/database/__init__.py,sha256=AKJsDl2RHuRGPS-eXgNJeh4aSncJP5Y0yLApBF6i7i8,1052
|
|
@@ -119,13 +119,13 @@ etlplus/file/zsav.py,sha256=5hMuBjYeHw--UL2ZCCDn6TzJkr_YNhdQhvKI6nr3WW0,1674
|
|
|
119
119
|
etlplus/ops/README.md,sha256=8omi7DYZhelc26JKk8Cm8QR8I3OGwziysPj1ivx41iQ,1380
|
|
120
120
|
etlplus/ops/__init__.py,sha256=r5_-pPhSLCD1nq1EbN0rQrLOGpudueeIxCH_JvT2bt0,1718
|
|
121
121
|
etlplus/ops/enums.py,sha256=dC_8CfaTiB2i83Az-oG-2hkjMuAfDADNbcMF2f94UeU,4014
|
|
122
|
-
etlplus/ops/extract.py,sha256=
|
|
122
|
+
etlplus/ops/extract.py,sha256=fPk8LLjEmCZ5U59IUm15vG5aXTmduteCqtsVIlxvvxI,11022
|
|
123
123
|
etlplus/ops/load.py,sha256=yicciVwomUKkdbhuRqbavKBNpT2Hg813BnQzG6IgF4o,10811
|
|
124
124
|
etlplus/ops/run.py,sha256=4HWelMevW0pW_76lJkoMcbzeQMiThMbxzO09wx6yoHg,11278
|
|
125
125
|
etlplus/ops/transform.py,sha256=-41uw_pwOGsMTUYxtXaeYOmTF_fTkN-L4Q9KT1OFe78,25671
|
|
126
126
|
etlplus/ops/types.py,sha256=Cvp8AJzJhJ1iYjyHd7j9ZLioxE2NdK__3g6fOI0qq6Q,4198
|
|
127
|
-
etlplus/ops/utils.py,sha256=
|
|
128
|
-
etlplus/ops/validate.py,sha256
|
|
127
|
+
etlplus/ops/utils.py,sha256=9UXym1W4qCMxBkcqCPUmI1QJ27yh1kOAbVnI1KsAGwE,10855
|
|
128
|
+
etlplus/ops/validate.py,sha256=VtMhrH6itd_PFH4IhBOndvJpxxOPI56OAJhnrSyT_6U,13323
|
|
129
129
|
etlplus/templates/README.md,sha256=IfPXlj1TGVA-uFWosHJhE2rabFW-znxOlOMazO9Z5cE,1361
|
|
130
130
|
etlplus/templates/__init__.py,sha256=tsniN7XJYs3NwYxJ6c2HD5upHP3CDkLx-bQCMt97UOM,106
|
|
131
131
|
etlplus/templates/ddl.sql.j2,sha256=s8fMWvcb4eaJVXkifuib1aQPljtZ8buuyB_uA-ZdU3Q,4734
|
|
@@ -135,9 +135,9 @@ etlplus/workflow/__init__.py,sha256=XgCQr684om0rONrQZ61yQ0r4qqFQL0iLAAB2Mn2BRSE,
|
|
|
135
135
|
etlplus/workflow/dag.py,sha256=-f1x8N1eb-PUuiOwEvFLmJwfR7JaMDJihlCHlhrFhgE,2937
|
|
136
136
|
etlplus/workflow/jobs.py,sha256=hLE9QJUzQaI0aOEon0P-xxxa6xHp997ANei4F310WRY,8711
|
|
137
137
|
etlplus/workflow/profile.py,sha256=FQU3bzBZ9_yjKC9kCXKN1FQDS9zjNUjtWB1r3UL95_Q,1993
|
|
138
|
-
etlplus-0.16.
|
|
139
|
-
etlplus-0.16.
|
|
140
|
-
etlplus-0.16.
|
|
141
|
-
etlplus-0.16.
|
|
142
|
-
etlplus-0.16.
|
|
143
|
-
etlplus-0.16.
|
|
138
|
+
etlplus-0.16.5.dist-info/licenses/LICENSE,sha256=MuNO63i6kWmgnV2pbP2SLqP54mk1BGmu7CmbtxMmT-U,1069
|
|
139
|
+
etlplus-0.16.5.dist-info/METADATA,sha256=vtUzae0iSsY6i5PqpcDQQ8q_tBXbFVT5Xy8AD_A9g8o,28114
|
|
140
|
+
etlplus-0.16.5.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
141
|
+
etlplus-0.16.5.dist-info/entry_points.txt,sha256=6w-2-jzuPa55spzK34h-UKh2JTEShh38adFRONNP9QE,45
|
|
142
|
+
etlplus-0.16.5.dist-info/top_level.txt,sha256=aWWF-udn_sLGuHTM6W6MLh99ArS9ROkUWO8Mi8y1_2U,8
|
|
143
|
+
etlplus-0.16.5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|