etlplus 0.15.0__py3-none-any.whl → 0.16.6__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.
Files changed (130) hide show
  1. etlplus/README.md +25 -3
  2. etlplus/__init__.py +2 -0
  3. etlplus/api/README.md +31 -0
  4. etlplus/api/__init__.py +14 -14
  5. etlplus/api/auth.py +10 -7
  6. etlplus/api/config.py +8 -13
  7. etlplus/api/endpoint_client.py +20 -20
  8. etlplus/api/errors.py +4 -4
  9. etlplus/api/pagination/__init__.py +6 -6
  10. etlplus/api/pagination/config.py +12 -10
  11. etlplus/api/pagination/paginator.py +6 -7
  12. etlplus/api/rate_limiting/__init__.py +2 -2
  13. etlplus/api/rate_limiting/config.py +14 -14
  14. etlplus/api/rate_limiting/rate_limiter.py +3 -3
  15. etlplus/api/request_manager.py +4 -4
  16. etlplus/api/retry_manager.py +8 -8
  17. etlplus/api/transport.py +11 -11
  18. etlplus/api/types.py +131 -11
  19. etlplus/api/utils.py +50 -50
  20. etlplus/cli/commands.py +93 -60
  21. etlplus/cli/constants.py +1 -1
  22. etlplus/cli/handlers.py +43 -26
  23. etlplus/cli/io.py +2 -2
  24. etlplus/cli/main.py +2 -2
  25. etlplus/cli/state.py +4 -7
  26. etlplus/{workflow/pipeline.py → config.py} +62 -99
  27. etlplus/connector/__init__.py +43 -0
  28. etlplus/connector/api.py +161 -0
  29. etlplus/connector/connector.py +26 -0
  30. etlplus/connector/core.py +132 -0
  31. etlplus/connector/database.py +122 -0
  32. etlplus/connector/enums.py +52 -0
  33. etlplus/connector/file.py +120 -0
  34. etlplus/connector/types.py +40 -0
  35. etlplus/connector/utils.py +122 -0
  36. etlplus/database/ddl.py +2 -2
  37. etlplus/database/engine.py +19 -3
  38. etlplus/database/orm.py +2 -0
  39. etlplus/enums.py +36 -200
  40. etlplus/file/_imports.py +1 -0
  41. etlplus/file/_io.py +52 -4
  42. etlplus/file/accdb.py +3 -2
  43. etlplus/file/arrow.py +3 -2
  44. etlplus/file/avro.py +3 -2
  45. etlplus/file/bson.py +3 -2
  46. etlplus/file/cbor.py +3 -2
  47. etlplus/file/cfg.py +3 -2
  48. etlplus/file/conf.py +3 -2
  49. etlplus/file/core.py +11 -8
  50. etlplus/file/csv.py +3 -2
  51. etlplus/file/dat.py +3 -2
  52. etlplus/file/dta.py +3 -2
  53. etlplus/file/duckdb.py +3 -2
  54. etlplus/file/enums.py +1 -1
  55. etlplus/file/feather.py +3 -2
  56. etlplus/file/fwf.py +3 -2
  57. etlplus/file/gz.py +3 -2
  58. etlplus/file/hbs.py +3 -2
  59. etlplus/file/hdf5.py +3 -2
  60. etlplus/file/ini.py +3 -2
  61. etlplus/file/ion.py +3 -2
  62. etlplus/file/jinja2.py +3 -2
  63. etlplus/file/json.py +5 -16
  64. etlplus/file/log.py +3 -2
  65. etlplus/file/mat.py +3 -2
  66. etlplus/file/mdb.py +3 -2
  67. etlplus/file/msgpack.py +3 -2
  68. etlplus/file/mustache.py +3 -2
  69. etlplus/file/nc.py +3 -2
  70. etlplus/file/ndjson.py +3 -2
  71. etlplus/file/numbers.py +3 -2
  72. etlplus/file/ods.py +3 -2
  73. etlplus/file/orc.py +3 -2
  74. etlplus/file/parquet.py +3 -2
  75. etlplus/file/pb.py +3 -2
  76. etlplus/file/pbf.py +3 -2
  77. etlplus/file/properties.py +3 -2
  78. etlplus/file/proto.py +3 -2
  79. etlplus/file/psv.py +3 -2
  80. etlplus/file/rda.py +3 -2
  81. etlplus/file/rds.py +3 -2
  82. etlplus/file/sas7bdat.py +3 -2
  83. etlplus/file/sav.py +3 -2
  84. etlplus/file/sqlite.py +3 -2
  85. etlplus/file/stub.py +1 -0
  86. etlplus/file/sylk.py +3 -2
  87. etlplus/file/tab.py +3 -2
  88. etlplus/file/toml.py +3 -2
  89. etlplus/file/tsv.py +3 -2
  90. etlplus/file/txt.py +4 -3
  91. etlplus/file/vm.py +3 -2
  92. etlplus/file/wks.py +3 -2
  93. etlplus/file/xls.py +3 -2
  94. etlplus/file/xlsm.py +3 -2
  95. etlplus/file/xlsx.py +3 -2
  96. etlplus/file/xml.py +9 -3
  97. etlplus/file/xpt.py +3 -2
  98. etlplus/file/yaml.py +5 -16
  99. etlplus/file/zip.py +3 -2
  100. etlplus/file/zsav.py +3 -2
  101. etlplus/ops/__init__.py +1 -0
  102. etlplus/ops/enums.py +173 -0
  103. etlplus/ops/extract.py +222 -23
  104. etlplus/ops/load.py +155 -36
  105. etlplus/ops/run.py +92 -107
  106. etlplus/ops/transform.py +48 -29
  107. etlplus/ops/types.py +147 -0
  108. etlplus/ops/utils.py +11 -40
  109. etlplus/ops/validate.py +16 -16
  110. etlplus/types.py +6 -102
  111. etlplus/utils.py +163 -29
  112. etlplus/workflow/README.md +0 -24
  113. etlplus/workflow/__init__.py +2 -15
  114. etlplus/workflow/dag.py +23 -1
  115. etlplus/workflow/jobs.py +83 -39
  116. etlplus/workflow/profile.py +4 -2
  117. {etlplus-0.15.0.dist-info → etlplus-0.16.6.dist-info}/METADATA +4 -4
  118. etlplus-0.16.6.dist-info/RECORD +143 -0
  119. {etlplus-0.15.0.dist-info → etlplus-0.16.6.dist-info}/WHEEL +1 -1
  120. etlplus/config/README.md +0 -50
  121. etlplus/config/__init__.py +0 -33
  122. etlplus/config/types.py +0 -140
  123. etlplus/dag.py +0 -103
  124. etlplus/workflow/connector.py +0 -373
  125. etlplus/workflow/types.py +0 -115
  126. etlplus/workflow/utils.py +0 -120
  127. etlplus-0.15.0.dist-info/RECORD +0 -139
  128. {etlplus-0.15.0.dist-info → etlplus-0.16.6.dist-info}/entry_points.txt +0 -0
  129. {etlplus-0.15.0.dist-info → etlplus-0.16.6.dist-info}/licenses/LICENSE +0 -0
  130. {etlplus-0.15.0.dist-info → etlplus-0.16.6.dist-info}/top_level.txt +0 -0
etlplus/file/proto.py CHANGED
@@ -27,6 +27,7 @@ from . import stub
27
27
 
28
28
 
29
29
  __all__ = [
30
+ # Functions
30
31
  'read',
31
32
  'write',
32
33
  ]
@@ -39,7 +40,7 @@ def read(
39
40
  path: Path,
40
41
  ) -> JSONList:
41
42
  """
42
- Read PROTO content from ``path``.
43
+ Read PROTO content from *path*.
43
44
 
44
45
  Parameters
45
46
  ----------
@@ -59,7 +60,7 @@ def write(
59
60
  data: JSONData,
60
61
  ) -> int:
61
62
  """
62
- Write ``data`` to PROTO at ``path`` and return record count.
63
+ Write *data* to PROTO at *path* and return record count.
63
64
 
64
65
  Parameters
65
66
  ----------
etlplus/file/psv.py CHANGED
@@ -29,6 +29,7 @@ from . import stub
29
29
 
30
30
 
31
31
  __all__ = [
32
+ # Functions
32
33
  'read',
33
34
  'write',
34
35
  ]
@@ -41,7 +42,7 @@ def read(
41
42
  path: Path,
42
43
  ) -> JSONList:
43
44
  """
44
- Read PSV content from ``path``.
45
+ Read PSV content from *path*.
45
46
 
46
47
  Parameters
47
48
  ----------
@@ -61,7 +62,7 @@ def write(
61
62
  data: JSONData,
62
63
  ) -> int:
63
64
  """
64
- Write ``data`` to PSV file at ``path`` and return record count.
65
+ Write *data* to PSV file at *path* and return record count.
65
66
 
66
67
  Parameters
67
68
  ----------
etlplus/file/rda.py CHANGED
@@ -28,6 +28,7 @@ from . import stub
28
28
 
29
29
 
30
30
  __all__ = [
31
+ # Functions
31
32
  'read',
32
33
  'write',
33
34
  ]
@@ -40,7 +41,7 @@ def read(
40
41
  path: Path,
41
42
  ) -> JSONList:
42
43
  """
43
- Read RDA content from ``path``.
44
+ Read RDA content from *path*.
44
45
 
45
46
  Parameters
46
47
  ----------
@@ -60,7 +61,7 @@ def write(
60
61
  data: JSONData,
61
62
  ) -> int:
62
63
  """
63
- Write ``data`` to RDA file at ``path`` and return record count.
64
+ Write *data* to RDA file at *path* and return record count.
64
65
 
65
66
  Parameters
66
67
  ----------
etlplus/file/rds.py CHANGED
@@ -28,6 +28,7 @@ from . import stub
28
28
 
29
29
 
30
30
  __all__ = [
31
+ # Functions
31
32
  'read',
32
33
  'write',
33
34
  ]
@@ -40,7 +41,7 @@ def read(
40
41
  path: Path,
41
42
  ) -> JSONList:
42
43
  """
43
- Read RDS content from ``path``.
44
+ Read RDS content from *path*.
44
45
 
45
46
  Parameters
46
47
  ----------
@@ -60,7 +61,7 @@ def write(
60
61
  data: JSONData,
61
62
  ) -> int:
62
63
  """
63
- Write ``data`` to RDS file at ``path`` and return record count.
64
+ Write *data* to RDS file at *path* and return record count.
64
65
 
65
66
  Parameters
66
67
  ----------
etlplus/file/sas7bdat.py CHANGED
@@ -28,6 +28,7 @@ from . import stub
28
28
 
29
29
 
30
30
  __all__ = [
31
+ # Functions
31
32
  'read',
32
33
  'write',
33
34
  ]
@@ -40,7 +41,7 @@ def read(
40
41
  path: Path,
41
42
  ) -> JSONList:
42
43
  """
43
- Read DAT content from ``path``.
44
+ Read DAT content from *path*.
44
45
 
45
46
  Parameters
46
47
  ----------
@@ -60,7 +61,7 @@ def write(
60
61
  data: JSONData,
61
62
  ) -> int:
62
63
  """
63
- Write ``data`` to SAS7BDAT file at ``path`` and return record count.
64
+ Write *data* to SAS7BDAT file at *path* and return record count.
64
65
 
65
66
  Parameters
66
67
  ----------
etlplus/file/sav.py CHANGED
@@ -27,6 +27,7 @@ from . import stub
27
27
 
28
28
 
29
29
  __all__ = [
30
+ # Functions
30
31
  'read',
31
32
  'write',
32
33
  ]
@@ -39,7 +40,7 @@ def read(
39
40
  path: Path,
40
41
  ) -> JSONList:
41
42
  """
42
- Read SAV content from ``path``.
43
+ Read SAV content from *path*.
43
44
 
44
45
  Parameters
45
46
  ----------
@@ -59,7 +60,7 @@ def write(
59
60
  data: JSONData,
60
61
  ) -> int:
61
62
  """
62
- Write ``data`` to SAV file at ``path`` and return record count.
63
+ Write *data* to SAV file at *path* and return record count.
63
64
 
64
65
  Parameters
65
66
  ----------
etlplus/file/sqlite.py CHANGED
@@ -28,6 +28,7 @@ from . import stub
28
28
 
29
29
 
30
30
  __all__ = [
31
+ # Functions
31
32
  'read',
32
33
  'write',
33
34
  ]
@@ -40,7 +41,7 @@ def read(
40
41
  path: Path,
41
42
  ) -> JSONList:
42
43
  """
43
- Read SQLITE content from ``path``.
44
+ Read SQLITE content from *path*.
44
45
 
45
46
  Parameters
46
47
  ----------
@@ -60,7 +61,7 @@ def write(
60
61
  data: JSONData,
61
62
  ) -> int:
62
63
  """
63
- Write ``data`` to SQLITE at ``path`` and return record count.
64
+ Write *data* to SQLITE at *path* and return record count.
64
65
 
65
66
  Parameters
66
67
  ----------
etlplus/file/stub.py CHANGED
@@ -15,6 +15,7 @@ from ..types import JSONList
15
15
 
16
16
 
17
17
  __all__ = [
18
+ # Functions
18
19
  'read',
19
20
  'write',
20
21
  ]
etlplus/file/sylk.py CHANGED
@@ -27,6 +27,7 @@ from . import stub
27
27
 
28
28
 
29
29
  __all__ = [
30
+ # Functions
30
31
  'read',
31
32
  'write',
32
33
  ]
@@ -39,7 +40,7 @@ def read(
39
40
  path: Path,
40
41
  ) -> JSONList:
41
42
  """
42
- Read SYLK content from ``path``.
43
+ Read SYLK content from *path*.
43
44
 
44
45
  Parameters
45
46
  ----------
@@ -59,7 +60,7 @@ def write(
59
60
  data: JSONData,
60
61
  ) -> int:
61
62
  """
62
- Write ``data`` to SYLK file at ``path`` and return record count.
63
+ Write *data* to SYLK file at *path* and return record count.
63
64
 
64
65
  Parameters
65
66
  ----------
etlplus/file/tab.py CHANGED
@@ -31,6 +31,7 @@ from . import stub
31
31
 
32
32
 
33
33
  __all__ = [
34
+ # Functions
34
35
  'read',
35
36
  'write',
36
37
  ]
@@ -43,7 +44,7 @@ def read(
43
44
  path: Path,
44
45
  ) -> JSONList:
45
46
  """
46
- Read TAB content from ``path``.
47
+ Read TAB content from *path*.
47
48
 
48
49
  Parameters
49
50
  ----------
@@ -63,7 +64,7 @@ def write(
63
64
  data: JSONData,
64
65
  ) -> int:
65
66
  """
66
- Write ``data`` to TAB file at ``path`` and return record count.
67
+ Write *data* to TAB file at *path* and return record count.
67
68
 
68
69
  Parameters
69
70
  ----------
etlplus/file/toml.py CHANGED
@@ -28,6 +28,7 @@ from . import stub
28
28
 
29
29
 
30
30
  __all__ = [
31
+ # Functions
31
32
  'read',
32
33
  'write',
33
34
  ]
@@ -40,7 +41,7 @@ def read(
40
41
  path: Path,
41
42
  ) -> JSONList:
42
43
  """
43
- Read TOML content from ``path``.
44
+ Read TOML content from *path*.
44
45
 
45
46
  Parameters
46
47
  ----------
@@ -60,7 +61,7 @@ def write(
60
61
  data: JSONData,
61
62
  ) -> int:
62
63
  """
63
- Write ``data`` to TOML at ``path`` and return record count.
64
+ Write *data* to TOML at *path* and return record count.
64
65
 
65
66
  Parameters
66
67
  ----------
etlplus/file/tsv.py CHANGED
@@ -30,6 +30,7 @@ from ._io import write_delimited
30
30
 
31
31
 
32
32
  __all__ = [
33
+ # Functions
33
34
  'read',
34
35
  'write',
35
36
  ]
@@ -42,7 +43,7 @@ def read(
42
43
  path: Path,
43
44
  ) -> JSONList:
44
45
  """
45
- Read TSV content from ``path``.
46
+ Read TSV content from *path*.
46
47
 
47
48
  Parameters
48
49
  ----------
@@ -62,7 +63,7 @@ def write(
62
63
  data: JSONData,
63
64
  ) -> int:
64
65
  """
65
- Write ``data`` to TSV at ``path`` and return record count.
66
+ Write *data* to TSV at *path* and return record count.
66
67
 
67
68
  Parameters
68
69
  ----------
etlplus/file/txt.py CHANGED
@@ -27,6 +27,7 @@ from ._io import normalize_records
27
27
 
28
28
 
29
29
  __all__ = [
30
+ # Functions
30
31
  'read',
31
32
  'write',
32
33
  ]
@@ -39,7 +40,7 @@ def read(
39
40
  path: Path,
40
41
  ) -> JSONList:
41
42
  """
42
- Read TXT content from ``path``.
43
+ Read TXT content from *path*.
43
44
 
44
45
  Parameters
45
46
  ----------
@@ -66,7 +67,7 @@ def write(
66
67
  data: JSONData,
67
68
  ) -> int:
68
69
  """
69
- Write ``data`` to TXT at ``path`` and return record count.
70
+ Write *data* to TXT at *path* and return record count.
70
71
 
71
72
  Parameters
72
73
  ----------
@@ -83,7 +84,7 @@ def write(
83
84
  Raises
84
85
  ------
85
86
  TypeError
86
- If any item in ``data`` is not a dictionary or if any dictionary
87
+ If any item in *data* is not a dictionary or if any dictionary
87
88
  does not contain a ``'text'`` key.
88
89
  """
89
90
  rows = normalize_records(data, 'TXT')
etlplus/file/vm.py CHANGED
@@ -28,6 +28,7 @@ from . import stub
28
28
 
29
29
 
30
30
  __all__ = [
31
+ # Functions
31
32
  'read',
32
33
  'write',
33
34
  ]
@@ -40,7 +41,7 @@ def read(
40
41
  path: Path,
41
42
  ) -> JSONList:
42
43
  """
43
- Read VM content from ``path``.
44
+ Read VM content from *path*.
44
45
 
45
46
  Parameters
46
47
  ----------
@@ -60,7 +61,7 @@ def write(
60
61
  data: JSONData,
61
62
  ) -> int:
62
63
  """
63
- Write ``data`` to VM file at ``path`` and return record count.
64
+ Write *data* to VM file at *path* and return record count.
64
65
 
65
66
  Parameters
66
67
  ----------
etlplus/file/wks.py CHANGED
@@ -27,6 +27,7 @@ from . import stub
27
27
 
28
28
 
29
29
  __all__ = [
30
+ # Functions
30
31
  'read',
31
32
  'write',
32
33
  ]
@@ -39,7 +40,7 @@ def read(
39
40
  path: Path,
40
41
  ) -> JSONList:
41
42
  """
42
- Read WKS content from ``path``.
43
+ Read WKS content from *path*.
43
44
 
44
45
  Parameters
45
46
  ----------
@@ -59,7 +60,7 @@ def write(
59
60
  data: JSONData,
60
61
  ) -> int:
61
62
  """
62
- Write ``data`` to WKS file at ``path`` and return record count.
63
+ Write *data* to WKS file at *path* and return record count.
63
64
 
64
65
  Parameters
65
66
  ----------
etlplus/file/xls.py CHANGED
@@ -17,6 +17,7 @@ from ._imports import get_pandas
17
17
 
18
18
 
19
19
  __all__ = [
20
+ # Functions
20
21
  'read',
21
22
  'write',
22
23
  ]
@@ -29,7 +30,7 @@ def read(
29
30
  path: Path,
30
31
  ) -> JSONList:
31
32
  """
32
- Read XLS content from ``path``.
33
+ Read XLS content from *path*.
33
34
 
34
35
  Parameters
35
36
  ----------
@@ -62,7 +63,7 @@ def write(
62
63
  data: JSONData,
63
64
  ) -> int:
64
65
  """
65
- Write ``data`` to XLS at ``path`` and return record count.
66
+ Write *data* to XLS at *path* and return record count.
66
67
 
67
68
  Notes
68
69
  -----
etlplus/file/xlsm.py CHANGED
@@ -29,6 +29,7 @@ from . import stub
29
29
 
30
30
 
31
31
  __all__ = [
32
+ # Functions
32
33
  'read',
33
34
  'write',
34
35
  ]
@@ -41,7 +42,7 @@ def read(
41
42
  path: Path,
42
43
  ) -> JSONList:
43
44
  """
44
- Read XLSM content from ``path``.
45
+ Read XLSM content from *path*.
45
46
 
46
47
  Parameters
47
48
  ----------
@@ -61,7 +62,7 @@ def write(
61
62
  data: JSONData,
62
63
  ) -> int:
63
64
  """
64
- Write ``data`` to XLSM file at ``path`` and return record count.
65
+ Write *data* to XLSM file at *path* and return record count.
65
66
 
66
67
  Parameters
67
68
  ----------
etlplus/file/xlsx.py CHANGED
@@ -18,6 +18,7 @@ from ._io import normalize_records
18
18
 
19
19
 
20
20
  __all__ = [
21
+ # Functions
21
22
  'read',
22
23
  'write',
23
24
  ]
@@ -30,7 +31,7 @@ def read(
30
31
  path: Path,
31
32
  ) -> JSONList:
32
33
  """
33
- Read XLSX content from ``path``.
34
+ Read XLSX content from *path*.
34
35
 
35
36
  Parameters
36
37
  ----------
@@ -63,7 +64,7 @@ def write(
63
64
  data: JSONData,
64
65
  ) -> int:
65
66
  """
66
- Write ``data`` to XLSX at ``path`` and return record count.
67
+ Write *data* to XLSX at *path* and return record count.
67
68
 
68
69
  Parameters
69
70
  ----------
etlplus/file/xml.py CHANGED
@@ -29,6 +29,7 @@ from ..utils import count_records
29
29
 
30
30
 
31
31
  __all__ = [
32
+ # Functions
32
33
  'read',
33
34
  'write',
34
35
  ]
@@ -137,7 +138,7 @@ def read(
137
138
  path: Path,
138
139
  ) -> JSONDict:
139
140
  """
140
- Read XML content from ``path``.
141
+ Read XML content from *path*.
141
142
 
142
143
  Parameters
143
144
  ----------
@@ -155,9 +156,14 @@ def read(
155
156
  return {root.tag: _element_to_dict(root)}
156
157
 
157
158
 
158
- def write(path: Path, data: JSONData, *, root_tag: str) -> int:
159
+ def write(
160
+ path: Path,
161
+ data: JSONData,
162
+ *,
163
+ root_tag: str,
164
+ ) -> int:
159
165
  """
160
- Write ``data`` to XML at ``path`` and return record count.
166
+ Write *data* to XML at *path* and return record count.
161
167
 
162
168
  Parameters
163
169
  ----------
etlplus/file/xpt.py CHANGED
@@ -28,6 +28,7 @@ from . import stub
28
28
 
29
29
 
30
30
  __all__ = [
31
+ # Functions
31
32
  'read',
32
33
  'write',
33
34
  ]
@@ -40,7 +41,7 @@ def read(
40
41
  path: Path,
41
42
  ) -> JSONList:
42
43
  """
43
- Read XPT content from ``path``.
44
+ Read XPT content from *path*.
44
45
 
45
46
  Parameters
46
47
  ----------
@@ -60,7 +61,7 @@ def write(
60
61
  data: JSONData,
61
62
  ) -> int:
62
63
  """
63
- Write ``data`` to XPT file at ``path`` and return record count.
64
+ Write *data* to XPT file at *path* and return record count.
64
65
 
65
66
  Parameters
66
67
  ----------
etlplus/file/yaml.py CHANGED
@@ -18,18 +18,17 @@ Notes
18
18
  from __future__ import annotations
19
19
 
20
20
  from pathlib import Path
21
- from typing import cast
22
21
 
23
22
  from ..types import JSONData
24
- from ..types import JSONDict
25
- from ..types import JSONList
26
23
  from ..utils import count_records
27
24
  from ._imports import get_yaml
25
+ from ._io import coerce_record_payload
28
26
 
29
27
  # SECTION: EXPORTS ========================================================== #
30
28
 
31
29
 
32
30
  __all__ = [
31
+ # Functions
33
32
  'read',
34
33
  'write',
35
34
  ]
@@ -42,7 +41,7 @@ def read(
42
41
  path: Path,
43
42
  ) -> JSONData:
44
43
  """
45
- Read YAML content from ``path``.
44
+ Read YAML content from *path*.
46
45
 
47
46
  Validates that the YAML root is a dict or a list of dicts.
48
47
 
@@ -64,17 +63,7 @@ def read(
64
63
  with path.open('r', encoding='utf-8') as handle:
65
64
  loaded = get_yaml().safe_load(handle)
66
65
 
67
- if isinstance(loaded, dict):
68
- return cast(JSONDict, loaded)
69
- if isinstance(loaded, list):
70
- if all(isinstance(item, dict) for item in loaded):
71
- return cast(JSONList, loaded)
72
- raise TypeError(
73
- 'YAML array must contain only objects (dicts) when loading',
74
- )
75
- raise TypeError(
76
- 'YAML root must be an object or an array of objects when loading',
77
- )
66
+ return coerce_record_payload(loaded, format_name='YAML')
78
67
 
79
68
 
80
69
  def write(
@@ -82,7 +71,7 @@ def write(
82
71
  data: JSONData,
83
72
  ) -> int:
84
73
  """
85
- Write ``data`` as YAML to ``path`` and return record count.
74
+ Write *data* as YAML to *path* and return record count.
86
75
 
87
76
  Parameters
88
77
  ----------
etlplus/file/zip.py CHANGED
@@ -20,6 +20,7 @@ from .enums import infer_file_format_and_compression
20
20
 
21
21
 
22
22
  __all__ = [
23
+ # Functions
23
24
  'read',
24
25
  'write',
25
26
  ]
@@ -89,7 +90,7 @@ def read(
89
90
  path: Path,
90
91
  ) -> JSONData:
91
92
  """
92
- Read ZIP content from ``path`` and parse the inner payload(s).
93
+ Read ZIP content from *path* and parse the inner payload(s).
93
94
 
94
95
  Parameters
95
96
  ----------
@@ -140,7 +141,7 @@ def write(
140
141
  data: JSONData,
141
142
  ) -> int:
142
143
  """
143
- Write ``data`` to ZIP at ``path`` and return record count.
144
+ Write *data* to ZIP at *path* and return record count.
144
145
 
145
146
  Parameters
146
147
  ----------
etlplus/file/zsav.py CHANGED
@@ -27,6 +27,7 @@ from . import stub
27
27
 
28
28
 
29
29
  __all__ = [
30
+ # Functions
30
31
  'read',
31
32
  'write',
32
33
  ]
@@ -39,7 +40,7 @@ def read(
39
40
  path: Path,
40
41
  ) -> JSONList:
41
42
  """
42
- Read ZSAV content from ``path``.
43
+ Read ZSAV content from *path*.
43
44
 
44
45
  Parameters
45
46
  ----------
@@ -59,7 +60,7 @@ def write(
59
60
  data: JSONData,
60
61
  ) -> int:
61
62
  """
62
- Write ``data`` to ZSAV file at ``path`` and return record count.
63
+ Write *data* to ZSAV file at *path* and return record count.
63
64
 
64
65
  Parameters
65
66
  ----------
etlplus/ops/__init__.py CHANGED
@@ -52,6 +52,7 @@ from .validate import validate
52
52
 
53
53
 
54
54
  __all__ = [
55
+ # Functions
55
56
  'extract',
56
57
  'load',
57
58
  'run',