validio-sdk 7.4.1__tar.gz → 7.4.2__tar.gz
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.
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/PKG-INFO +1 -1
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/pyproject.toml +1 -1
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/code/_import.py +10 -4
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/_diffable.py +45 -1
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/tests/test_import.py +24 -3
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/LICENSE +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/README_PUBLIC.md +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/__init__.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/_api/__init__.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/_api/api.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/client/__init__.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/client/client.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/code/__init__.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/code/_progress.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/code/apply.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/code/plan.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/code/scaffold.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/code/settings.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/config.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/dbt.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/exception.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/metadata.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/py.typed +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/__init__.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/_diff.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/_diff_util.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/_errors.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/_resource.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/_resource_graph.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/_serde.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/_server_resources.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/_update_namespace.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/_util.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/channels.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/credentials.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/enums.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/filters.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/notification_rules.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/replacement.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/segmentations.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/sources.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/tags.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/tests/__init__.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/tests/assets/example_manifest.json +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/tests/assets/expected_trimmed_manifest.json +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/tests/test__dbt.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/tests/test__diff.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/tests/test__plan.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/tests/test__resource.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/tests/test__sql_validation.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/thresholds.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/validators.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/windows.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/scalars.py +0 -0
- {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/util.py +0 -0
|
@@ -3,7 +3,7 @@ name = "validio-sdk"
|
|
|
3
3
|
# This version does not represent the released version or any tag. For each
|
|
4
4
|
# release we automatically bump this before building and publishing so this
|
|
5
5
|
# should be kept at 0.0.1dev1
|
|
6
|
-
version = "7.4.
|
|
6
|
+
version = "7.4.2"
|
|
7
7
|
description = "SDK to interact with the Validio platform"
|
|
8
8
|
authors = ["Validio <support@validio.io>"]
|
|
9
9
|
license = "Apache-2.0"
|
|
@@ -101,6 +101,7 @@ class ImportContext:
|
|
|
101
101
|
async def _import(
|
|
102
102
|
ctx: DiffContext,
|
|
103
103
|
tags_ctx: DiffContext,
|
|
104
|
+
include_schema: bool = False,
|
|
104
105
|
) -> str:
|
|
105
106
|
import_ctx = ImportContext()
|
|
106
107
|
|
|
@@ -189,16 +190,21 @@ async def _import(
|
|
|
189
190
|
def import_sources(cls: type, name: str, r: Resource) -> None:
|
|
190
191
|
credential = import_ctx.get_variable(Credential, cast(Any, r).credential_name)
|
|
191
192
|
|
|
193
|
+
inits: list[tuple[str, Any, str | None]] = [
|
|
194
|
+
("credential", credential, None),
|
|
195
|
+
("tags", resource_tags(r), None),
|
|
196
|
+
]
|
|
197
|
+
|
|
198
|
+
if include_schema and isinstance(r, Source):
|
|
199
|
+
inits.append(("jtd_schema", r.jtd_schema, None))
|
|
200
|
+
|
|
192
201
|
import_ctx.add_resource_decl(
|
|
193
202
|
cls,
|
|
194
203
|
name,
|
|
195
204
|
r._import_str(
|
|
196
205
|
indent_level=0,
|
|
197
206
|
import_ctx=import_ctx,
|
|
198
|
-
inits=
|
|
199
|
-
("credential", credential, None),
|
|
200
|
-
("tags", resource_tags(r), None),
|
|
201
|
-
],
|
|
207
|
+
inits=inits,
|
|
202
208
|
skip={"tag_names"},
|
|
203
209
|
),
|
|
204
210
|
)
|
|
@@ -23,6 +23,12 @@ could enter a cycle.
|
|
|
23
23
|
"""
|
|
24
24
|
MAX_RESOURCE_DEPTH = 15
|
|
25
25
|
|
|
26
|
+
"""
|
|
27
|
+
When we format dictionaries this is the limit of how deep we can go to build a
|
|
28
|
+
formatted output.
|
|
29
|
+
"""
|
|
30
|
+
MAX_FORMAT_DICT_DEPTH = 20
|
|
31
|
+
|
|
26
32
|
|
|
27
33
|
class Diffable(ABC):
|
|
28
34
|
"""
|
|
@@ -162,8 +168,13 @@ class Diffable(ABC):
|
|
|
162
168
|
import_args = []
|
|
163
169
|
|
|
164
170
|
for field, arg, comment in sorted_params:
|
|
171
|
+
if isinstance(arg, dict):
|
|
172
|
+
value = _format_dict_value(arg, indent_level + 1, 0)
|
|
173
|
+
else:
|
|
174
|
+
value = arg
|
|
175
|
+
|
|
165
176
|
comment_str = "" if not comment else f" # {comment}"
|
|
166
|
-
import_args.append(f"{field}={
|
|
177
|
+
import_args.append(f"{field}={value},{comment_str}")
|
|
167
178
|
|
|
168
179
|
params_str = line_indent.join(import_args)
|
|
169
180
|
closing_indent = " " * self._num_ident_spaces(indent_level)
|
|
@@ -175,6 +186,39 @@ class Diffable(ABC):
|
|
|
175
186
|
return 4 * indent_level
|
|
176
187
|
|
|
177
188
|
|
|
189
|
+
def _format_dict_value(value: Any, indent_level: int, recursion_depth: int) -> str:
|
|
190
|
+
"""
|
|
191
|
+
Format dictionary for import.
|
|
192
|
+
|
|
193
|
+
This is only a best effort to try to wrap dict values instead of having a
|
|
194
|
+
long line for e.g. jtd schemas on import.
|
|
195
|
+
"""
|
|
196
|
+
if recursion_depth >= MAX_FORMAT_DICT_DEPTH:
|
|
197
|
+
return value
|
|
198
|
+
|
|
199
|
+
indent = " " * (indent_level * 4)
|
|
200
|
+
if isinstance(value, dict):
|
|
201
|
+
if not value:
|
|
202
|
+
return "{}"
|
|
203
|
+
|
|
204
|
+
inner = indent + " " * 4
|
|
205
|
+
|
|
206
|
+
items = []
|
|
207
|
+
for k, v in value.items():
|
|
208
|
+
formatted = _format_dict_value(v, indent_level + 1, recursion_depth + 1)
|
|
209
|
+
items.append(f"{inner}'{k}': {formatted}")
|
|
210
|
+
|
|
211
|
+
return "{\n" + ",\n".join(items) + ",\n" + indent + "}"
|
|
212
|
+
|
|
213
|
+
if isinstance(value, bool):
|
|
214
|
+
return "True" if value else "False"
|
|
215
|
+
|
|
216
|
+
if value is None:
|
|
217
|
+
return "None"
|
|
218
|
+
|
|
219
|
+
return repr(value)
|
|
220
|
+
|
|
221
|
+
|
|
178
222
|
class ApiSecretChangeNestedResource(Diffable):
|
|
179
223
|
"""An interface for nested structure inside a list of secret fields."""
|
|
180
224
|
|
|
@@ -165,7 +165,7 @@ notificationrule_0 = NotificationRule(
|
|
|
165
165
|
assert doc.strip() == expected.strip()
|
|
166
166
|
|
|
167
167
|
|
|
168
|
-
def
|
|
168
|
+
def test_import_sql_source_with_include_schema() -> None:
|
|
169
169
|
credential = PostgreSqlCredential(
|
|
170
170
|
name="postgres",
|
|
171
171
|
host="127.0.0.1",
|
|
@@ -188,7 +188,14 @@ def test_import_sql_source() -> None:
|
|
|
188
188
|
"nullable": False,
|
|
189
189
|
"optionalProperties": {},
|
|
190
190
|
"properties": {
|
|
191
|
-
"value": {
|
|
191
|
+
"value": {
|
|
192
|
+
"type": "int32",
|
|
193
|
+
"metadata": {
|
|
194
|
+
"json_path": "value",
|
|
195
|
+
"catalog_type": "NUMBER",
|
|
196
|
+
"sampled_field": False,
|
|
197
|
+
},
|
|
198
|
+
},
|
|
192
199
|
},
|
|
193
200
|
},
|
|
194
201
|
)
|
|
@@ -224,6 +231,20 @@ source_0 = SqlSource(
|
|
|
224
231
|
credential=credential_0,
|
|
225
232
|
description=None,
|
|
226
233
|
display_name='sql-source-postgres',
|
|
234
|
+
jtd_schema={
|
|
235
|
+
'nullable': False,
|
|
236
|
+
'optionalProperties': {},
|
|
237
|
+
'properties': {
|
|
238
|
+
'value': {
|
|
239
|
+
'type': 'int32',
|
|
240
|
+
'metadata': {
|
|
241
|
+
'json_path': 'value',
|
|
242
|
+
'catalog_type': 'NUMBER',
|
|
243
|
+
'sampled_field': False,
|
|
244
|
+
},
|
|
245
|
+
},
|
|
246
|
+
},
|
|
247
|
+
},
|
|
227
248
|
owner=None,
|
|
228
249
|
priority=None,
|
|
229
250
|
schedule='* * * * *',
|
|
@@ -240,7 +261,7 @@ source_0 = SqlSource(
|
|
|
240
261
|
sources={source.name: source},
|
|
241
262
|
)
|
|
242
263
|
|
|
243
|
-
doc = asyncio.run(_import(ctx, DiffContext()))
|
|
264
|
+
doc = asyncio.run(_import(ctx, DiffContext(), include_schema=True))
|
|
244
265
|
|
|
245
266
|
assert doc.strip() == expected.strip()
|
|
246
267
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/tests/assets/example_manifest.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|