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.
Files changed (55) hide show
  1. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/PKG-INFO +1 -1
  2. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/pyproject.toml +1 -1
  3. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/code/_import.py +10 -4
  4. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/_diffable.py +45 -1
  5. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/tests/test_import.py +24 -3
  6. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/LICENSE +0 -0
  7. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/README_PUBLIC.md +0 -0
  8. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/__init__.py +0 -0
  9. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/_api/__init__.py +0 -0
  10. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/_api/api.py +0 -0
  11. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/client/__init__.py +0 -0
  12. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/client/client.py +0 -0
  13. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/code/__init__.py +0 -0
  14. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/code/_progress.py +0 -0
  15. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/code/apply.py +0 -0
  16. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/code/plan.py +0 -0
  17. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/code/scaffold.py +0 -0
  18. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/code/settings.py +0 -0
  19. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/config.py +0 -0
  20. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/dbt.py +0 -0
  21. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/exception.py +0 -0
  22. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/metadata.py +0 -0
  23. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/py.typed +0 -0
  24. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/__init__.py +0 -0
  25. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/_diff.py +0 -0
  26. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/_diff_util.py +0 -0
  27. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/_errors.py +0 -0
  28. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/_resource.py +0 -0
  29. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/_resource_graph.py +0 -0
  30. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/_serde.py +0 -0
  31. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/_server_resources.py +0 -0
  32. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/_update_namespace.py +0 -0
  33. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/_util.py +0 -0
  34. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/channels.py +0 -0
  35. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/credentials.py +0 -0
  36. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/enums.py +0 -0
  37. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/filters.py +0 -0
  38. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/notification_rules.py +0 -0
  39. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/replacement.py +0 -0
  40. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/segmentations.py +0 -0
  41. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/sources.py +0 -0
  42. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/tags.py +0 -0
  43. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/tests/__init__.py +0 -0
  44. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/tests/assets/example_manifest.json +0 -0
  45. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/tests/assets/expected_trimmed_manifest.json +0 -0
  46. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/tests/test__dbt.py +0 -0
  47. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/tests/test__diff.py +0 -0
  48. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/tests/test__plan.py +0 -0
  49. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/tests/test__resource.py +0 -0
  50. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/tests/test__sql_validation.py +0 -0
  51. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/thresholds.py +0 -0
  52. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/validators.py +0 -0
  53. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/resource/windows.py +0 -0
  54. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/scalars.py +0 -0
  55. {validio_sdk-7.4.1 → validio_sdk-7.4.2}/validio_sdk/util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: validio-sdk
3
- Version: 7.4.1
3
+ Version: 7.4.2
4
4
  Summary: SDK to interact with the Validio platform
5
5
  Home-page: https://validio.io/
6
6
  License: Apache-2.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.1"
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}={arg},{comment_str}")
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 test_import_sql_source() -> None:
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": {"type": "int32"},
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