digitalkin 0.3.2.dev20__py3-none-any.whl → 0.3.2.dev21__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.
digitalkin/__version__.py CHANGED
@@ -5,4 +5,4 @@ from importlib.metadata import PackageNotFoundError, version
5
5
  try:
6
6
  __version__ = version("digitalkin")
7
7
  except PackageNotFoundError:
8
- __version__ = "0.3.2.dev20"
8
+ __version__ = "0.3.2.dev21"
@@ -17,24 +17,31 @@ class SchemaSplitter:
17
17
  Tuple of (jsonschema, uischema).
18
18
  """
19
19
  defs_ui: dict[str, dict[str, Any]] = {}
20
- if "$defs" in combined_schema:
21
- for def_name, def_value in combined_schema["$defs"].items():
20
+ schema_defs = combined_schema.get("$defs", {})
21
+ if schema_defs:
22
+ for def_name, def_value in schema_defs.items():
22
23
  if isinstance(def_value, dict):
23
24
  defs_ui[def_name] = {}
24
- cls._extract_ui_properties(def_value, defs_ui[def_name])
25
+ cls._extract_ui_properties(def_value, defs_ui[def_name], schema_defs)
25
26
 
26
27
  json_schema: dict[str, Any] = {}
27
28
  ui_schema: dict[str, Any] = {}
28
- cls._process_object(combined_schema, json_schema, ui_schema, defs_ui)
29
+ cls._process_object(combined_schema, json_schema, ui_schema, defs_ui, schema_defs)
29
30
  return json_schema, ui_schema
30
31
 
31
32
  @classmethod
32
- def _extract_ui_properties(cls, source: dict[str, Any], ui_target: dict[str, Any]) -> None: # noqa: C901
33
+ def _extract_ui_properties(
34
+ cls,
35
+ source: dict[str, Any],
36
+ ui_target: dict[str, Any],
37
+ defs: dict[str, Any] | None = None,
38
+ ) -> None:
33
39
  """Extract ui:* properties from source into ui_target recursively.
34
40
 
35
41
  Args:
36
42
  source: Source dict to extract from.
37
43
  ui_target: Target dict for ui properties.
44
+ defs: The $defs dictionary to resolve $ref references.
38
45
  """
39
46
  for key, value in source.items():
40
47
  if key.startswith("ui:"):
@@ -43,20 +50,26 @@ class SchemaSplitter:
43
50
  for prop_name, prop_value in value.items():
44
51
  if isinstance(prop_value, dict):
45
52
  prop_ui: dict[str, Any] = {}
46
- cls._extract_ui_properties(prop_value, prop_ui)
53
+ cls._extract_ui_properties(prop_value, prop_ui, defs)
47
54
  if prop_ui:
48
55
  ui_target[prop_name] = prop_ui
49
56
  elif key == "items" and isinstance(value, dict):
50
57
  items_ui: dict[str, Any] = {}
51
- cls._extract_ui_properties(value, items_ui)
58
+ cls._extract_ui_properties(value, items_ui, defs)
52
59
  if items_ui:
53
60
  ui_target["items"] = items_ui
54
61
  elif key == "allOf" and isinstance(value, list):
55
62
  for item in value:
56
63
  if isinstance(item, dict):
57
- cls._extract_ui_properties(item, ui_target)
64
+ cls._extract_ui_properties(item, ui_target, defs)
58
65
  elif key in {"if", "then", "else"} and isinstance(value, dict):
59
- cls._extract_ui_properties(value, ui_target)
66
+ cls._extract_ui_properties(value, ui_target, defs)
67
+ elif key == "$ref" and isinstance(value, str) and defs is not None:
68
+ # Resolve $ref and extract UI properties from the referenced definition
69
+ if value.startswith("#/$defs/"):
70
+ def_name = value[8:]
71
+ if def_name in defs:
72
+ cls._extract_ui_properties(defs[def_name], ui_target, defs)
60
73
 
61
74
  @classmethod
62
75
  def _process_object( # noqa: C901, PLR0912
@@ -65,6 +78,7 @@ class SchemaSplitter:
65
78
  json_target: dict[str, Any],
66
79
  ui_target: dict[str, Any],
67
80
  defs_ui: dict[str, dict[str, Any]],
81
+ schema_defs: dict[str, Any] | None = None,
68
82
  ) -> None:
69
83
  """Process an object, splitting json and ui properties.
70
84
 
@@ -73,6 +87,7 @@ class SchemaSplitter:
73
87
  json_target: Target dict for json schema.
74
88
  ui_target: Target dict for ui schema.
75
89
  defs_ui: Pre-extracted UI properties from $defs.
90
+ schema_defs: The original $defs dictionary to resolve $ref in _extract_ui_properties.
76
91
  """
77
92
  for key, value in source.items():
78
93
  if key.startswith("ui:"):
@@ -113,14 +128,14 @@ class SchemaSplitter:
113
128
  cls._strip_ui_properties(item, item_json)
114
129
  json_target["allOf"].append(item_json)
115
130
  # Extract UI properties from allOf item
116
- cls._extract_ui_properties(item, ui_target)
131
+ cls._extract_ui_properties(item, ui_target, schema_defs)
117
132
  else:
118
133
  json_target["allOf"].append(item)
119
134
  elif key in {"if", "then", "else"} and isinstance(value, dict):
120
135
  json_target[key] = {}
121
136
  cls._strip_ui_properties(value, json_target[key])
122
137
  # Extract UI properties from conditional
123
- cls._extract_ui_properties(value, ui_target)
138
+ cls._extract_ui_properties(value, ui_target, schema_defs)
124
139
  elif key == "hidden":
125
140
  # Strip hidden key from json schema
126
141
  continue
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: digitalkin
3
- Version: 0.3.2.dev20
3
+ Version: 0.3.2.dev21
4
4
  Summary: SDK to build kin used in DigitalKin
5
5
  Author-email: "DigitalKin.ai" <contact@digitalkin.ai>
6
6
  License: Attribution-NonCommercial-ShareAlike 4.0 International
@@ -7,7 +7,7 @@ base_server/mock/__init__.py,sha256=YZFT-F1l_TpvJYuIPX-7kTeE1CfOjhx9YmNRXVoi-jQ,
7
7
  base_server/mock/mock_pb2.py,sha256=sETakcS3PAAm4E-hTCV1jIVaQTPEAIoVVHupB8Z_k7Y,1843
8
8
  base_server/mock/mock_pb2_grpc.py,sha256=BbOT70H6q3laKgkHfOx1QdfmCS_HxCY4wCOX84YAdG4,3180
9
9
  digitalkin/__init__.py,sha256=7LLBAba0th-3SGqcpqFO-lopWdUkVLKzLZiMtB-mW3M,162
10
- digitalkin/__version__.py,sha256=dN3fPmuqWC0wGuJWF7p4H8rHGbT_gGfHvNrei8I6TU8,196
10
+ digitalkin/__version__.py,sha256=rOjHWGOhXZoGaCKIj8TeRUY1SA0ZmJjAbwE9acxZsuU,196
11
11
  digitalkin/logger.py,sha256=8ze_tjt2G6mDTuQcsf7-UTXWP3UHZ7LZVSs_iqF4rX4,4685
12
12
  digitalkin/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  digitalkin/core/__init__.py,sha256=FJRcJ-B1Viyn-38L8XpOpZ8KOnf1I7PCDOAmKXLQhqc,71
@@ -122,8 +122,8 @@ digitalkin/utils/development_mode_action.py,sha256=2hznh0ajW_4ZTysfoc0Y49161f_PQ
122
122
  digitalkin/utils/dynamic_schema.py,sha256=y5csxjuqVHjWDpnTUzxbcUuI_wou9-ibRVHQlBs_btY,15275
123
123
  digitalkin/utils/llm_ready_schema.py,sha256=JjMug_lrQllqFoanaC091VgOqwAd-_YzcpqFlS7p778,2375
124
124
  digitalkin/utils/package_discover.py,sha256=sa6Zp5Kape1Zr4iYiNrnZxiHDnqM06ODk6yfWHom53w,13465
125
- digitalkin/utils/schema_splitter.py,sha256=7KFiRUhFE9HsH_Z8p0POSbIhiJlgZEeSxL_7TDY0n1U,10374
126
- digitalkin-0.3.2.dev20.dist-info/licenses/LICENSE,sha256=Ies4HFv2r2hzDRakJYxk3Y60uDFLiG-orIgeTpstnIo,20327
125
+ digitalkin/utils/schema_splitter.py,sha256=6PeDrEBGEFyVEPgzGnwcCZuwxLobThmuPwJhGlRpU_0,11137
126
+ digitalkin-0.3.2.dev21.dist-info/licenses/LICENSE,sha256=Ies4HFv2r2hzDRakJYxk3Y60uDFLiG-orIgeTpstnIo,20327
127
127
  modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
128
128
  modules/archetype_with_tools_module.py,sha256=PXTS6IXmC_OjxTmVrL_pYVI0MKwXjD5I1UJO_2xa10Q,7632
129
129
  modules/cpu_intensive_module.py,sha256=GZlirQDZdYuXrI46sv1q4RNAHZjL4EptHVQTvgK9zz8,8363
@@ -138,7 +138,7 @@ monitoring/digitalkin_observability/prometheus.py,sha256=gDmM9ySaVwPAe7Yg84pLxmE
138
138
  monitoring/tests/test_metrics.py,sha256=ugnYfAwqBPO6zA8z4afKTlyBWECTivacYSN-URQCn2E,5856
139
139
  services/filesystem_module.py,sha256=U4dgqtuDadaXz8PJ1d_uQ_1EPncBqudAQCLUICF9yL4,7421
140
140
  services/storage_module.py,sha256=Wz2MzLvqs2D_bnBBgtnujYcAKK2V2KFMk8K21RoepSE,6972
141
- digitalkin-0.3.2.dev20.dist-info/METADATA,sha256=EosqD8N82EhYPNyjWKp-_n2az8875Qp8iRfdZph5uB4,29725
142
- digitalkin-0.3.2.dev20.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
143
- digitalkin-0.3.2.dev20.dist-info/top_level.txt,sha256=AYVIesKrO0jnedQ-Muog9JBehG81WeTCNeOFoJgwsgE,51
144
- digitalkin-0.3.2.dev20.dist-info/RECORD,,
141
+ digitalkin-0.3.2.dev21.dist-info/METADATA,sha256=TSn7ZjFiT9GYhIoAedzR7OzC2LT8_VvMS61vph1X6SA,29725
142
+ digitalkin-0.3.2.dev21.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
143
+ digitalkin-0.3.2.dev21.dist-info/top_level.txt,sha256=AYVIesKrO0jnedQ-Muog9JBehG81WeTCNeOFoJgwsgE,51
144
+ digitalkin-0.3.2.dev21.dist-info/RECORD,,