iris-pex-embedded-python 4.0.1b7__py3-none-any.whl → 4.0.1b8__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.
iop/production/common.py CHANGED
@@ -3,6 +3,8 @@ from __future__ import annotations
3
3
  import importlib
4
4
  from typing import Any
5
5
 
6
+ from ..components.settings import Setting
7
+
6
8
  PRODUCTION_SETTING_FIELDS: dict[str, tuple[str, Any]] = {
7
9
  "shutdown_timeout": ("ShutdownTimeout", 120),
8
10
  "update_timeout": ("UpdateTimeout", 10),
@@ -83,11 +85,21 @@ def _adapter_type_from_class_name(class_name: str | None) -> str:
83
85
  return _adapter_type_from_component_class(component_class)
84
86
 
85
87
 
88
+ def _setting_name(name: Any) -> str:
89
+ if isinstance(name, Setting) and name.name:
90
+ return name.name
91
+ return str(name)
92
+
93
+
94
+ def _normalize_settings_mapping(values: Any) -> dict[str, Any]:
95
+ return {_setting_name(key): value for key, value in dict(values or {}).items()}
96
+
97
+
86
98
  def _settings_to_iris(target_name: str, values: dict[str, Any]) -> list[dict[str, str]]:
87
99
  return [
88
100
  {
89
101
  "@Target": target_name,
90
- "@Name": name,
102
+ "@Name": _setting_name(name),
91
103
  "#text": _text_value(value),
92
104
  }
93
105
  for name, value in values.items()
@@ -97,6 +109,7 @@ def _settings_to_iris(target_name: str, values: dict[str, Any]) -> list[dict[str
97
109
  def _apply_settings_update(target: dict[str, Any], updates: Any) -> None:
98
110
  """Merge *updates* into *target*, treating ``None`` values as removals."""
99
111
  for key, value in (updates or {}).items():
112
+ key = _setting_name(key)
100
113
  if value is None:
101
114
  target.pop(key, None)
102
115
  else:
@@ -2,9 +2,9 @@ from __future__ import annotations
2
2
 
3
3
  from collections.abc import Iterable, Mapping
4
4
  from dataclasses import dataclass, field
5
- from typing import Any, ClassVar, Protocol
5
+ from typing import Any, ClassVar, Protocol, cast
6
6
 
7
- from .common import SETTING_NAME_ALIASES
7
+ from .common import SETTING_NAME_ALIASES, _normalize_settings_mapping
8
8
  from .types import TargetSetting
9
9
 
10
10
 
@@ -36,7 +36,9 @@ class Route:
36
36
  targets = (self.targets,)
37
37
  else:
38
38
  try:
39
- targets = tuple(self.targets)
39
+ targets = tuple(
40
+ cast(Iterable[str | _NamedRouteTarget], self.targets)
41
+ )
40
42
  except TypeError as exc:
41
43
  raise TypeError(
42
44
  f"Route {self.target_setting_name!r} targets must be an item name, "
@@ -174,7 +176,7 @@ def _mapping(
174
176
  item_name: str,
175
177
  ) -> dict[str, Any]:
176
178
  try:
177
- return dict(values or {})
179
+ return _normalize_settings_mapping(values)
178
180
  except (TypeError, ValueError) as exc:
179
181
  raise TypeError(
180
182
  f"Production item {item_name!r} {field_name} must be a mapping"
iop/production/model.py CHANGED
@@ -9,6 +9,7 @@ from .common import (
9
9
  _adapter_type_from_component_class,
10
10
  _apply_settings_update,
11
11
  _auto_proxy_class_name,
12
+ _normalize_settings_mapping,
12
13
  )
13
14
  from .component import ComponentRef
14
15
  from .declarative import _DeclarativeProductionMixin
@@ -432,8 +433,8 @@ class Production(_DeclarativeProductionMixin):
432
433
  comment=comment,
433
434
  log_trace_events=log_trace_events,
434
435
  schedule=schedule,
435
- host_settings=dict(settings or {}),
436
- adapter_settings=dict(adapter_settings or {}),
436
+ host_settings=_normalize_settings_mapping(settings),
437
+ adapter_settings=_normalize_settings_mapping(adapter_settings),
437
438
  )
438
439
  self._add_item(ref)
439
440
  return ref
@@ -8,6 +8,7 @@ from .common import (
8
8
  PRODUCTION_SETTING_FIELDS_BY_IRIS,
9
9
  PRODUCTION_SETTING_NAMES,
10
10
  SETTING_NAME_ALIASES,
11
+ _normalize_settings_mapping,
11
12
  )
12
13
  from .import_ import _as_list, _production_payload, _split_settings
13
14
  from .types import TargetSetting
@@ -183,14 +184,18 @@ def _validate_component_ref(item: Any) -> list[ProductionValidationIssue]:
183
184
 
184
185
  issues.extend(
185
186
  _validate_settings(
186
- settings=dict(getattr(item, "host_settings", {}) or {}),
187
+ settings=_normalize_settings_mapping(
188
+ getattr(item, "host_settings", {}) or {}
189
+ ),
187
190
  path_prefix=f"items.{item_name}.settings.Host",
188
191
  local_class=component_class,
189
192
  iris_class_name=class_name,
190
193
  )
191
194
  )
192
195
 
193
- adapter_settings = dict(getattr(item, "adapter_settings", {}) or {})
196
+ adapter_settings = _normalize_settings_mapping(
197
+ getattr(item, "adapter_settings", {}) or {}
198
+ )
194
199
  if str(getattr(item, "kind", "")) == "process" and adapter_settings:
195
200
  issues.append(
196
201
  ProductionValidationIssue(
@@ -355,7 +360,9 @@ def _validate_target_setting_values(production: Any) -> list[ProductionValidatio
355
360
  issues: list[ProductionValidationIssue] = []
356
361
  for item in items:
357
362
  item_name = str(getattr(item, "name", ""))
358
- host_settings = dict(getattr(item, "host_settings", {}) or {})
363
+ host_settings = _normalize_settings_mapping(
364
+ getattr(item, "host_settings", {}) or {}
365
+ )
359
366
  for setting_name in _target_setting_names(item):
360
367
  if setting_name not in host_settings:
361
368
  continue
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iris_pex_embedded_python
3
- Version: 4.0.1b7
3
+ Version: 4.0.1b8
4
4
  Summary: Iris Interoperability based on Embedded Python
5
5
  Author-email: grongier <guillaume.rongier@intersystems.com>
6
6
  License: MIT License
@@ -65,21 +65,21 @@ iop/migration/plans.py,sha256=5kx3aqQiPDJ3F8hU9pp9_mOO1_N6GA0Ps7--G1Iv6z8,2549
65
65
  iop/migration/utils.py,sha256=pOojLPMZes05KXrGN2ap45ffppP5Z4tS4bjJ0gSD5Oc,38183
66
66
  iop/production/__init__.py,sha256=95VmJgC3lWtHpUJijLqyKKxFZa65OcRni8803kb4aHE,2148
67
67
  iop/production/actions.py,sha256=TLVAjPTPq21oLj9c-IG10qMNJ2hvPzueviMy_c1a0ZU,17199
68
- iop/production/common.py,sha256=IoUg9jkFzSQwDsHcXvkVAC4qxpWKs3kTfXFm_EP07EU,3091
68
+ iop/production/common.py,sha256=L2QyvE2nC1J333sbebYx_6dyoaFL-89ouMO3Kfe4-D8,3465
69
69
  iop/production/component.py,sha256=XalzNEWhCC1RVSZlQZRBpZM3BdRC2TDU-ko3Zn8-Kzo,9475
70
- iop/production/declarations.py,sha256=Tb79Q6rwmFMi6xKpzajJa4Aa2_Tk3sD-e8qiuRJX77s,5821
70
+ iop/production/declarations.py,sha256=u1hzgbDchr55R3dEXEIi9-P5JkfMG7C3aiSWhfhifG8,5952
71
71
  iop/production/declarative.py,sha256=IpHYO46mu7k9wnq3DpFreoALPoX1Vi8DrJb-85O_-bQ,7853
72
72
  iop/production/diff.py,sha256=NYpcSVklaGpaZOyl933W8eLsDWcwjlf6Upbp4pVGSMU,9975
73
73
  iop/production/import_.py,sha256=twBra6j2peolFadv8WyDwZZOd9NznzAkPsk2RbOfZQM,10833
74
74
  iop/production/inspection.py,sha256=PPv9DiDS4OrnKROqV7JPbuY8Y0JR-m8syPhap3GgE4g,3363
75
- iop/production/model.py,sha256=3p70HARmvm9bd7rQ9l4lbX_abZj983QxmVk-OF2gWqo,44021
75
+ iop/production/model.py,sha256=bEtDo-IwECuCrkKDXJXm1hB5Bmme4srB6l9isc8n3KI,44088
76
76
  iop/production/planning.py,sha256=nCYrXLKlHBlUaQZPzPfqtIERIv62F2sg4gJ0b8mtcKk,23375
77
77
  iop/production/reconstruction.py,sha256=5vVteTEM6IOiQUfpe4AUQg6Nt4oaaIDR61-1l6Vu8hk,12532
78
78
  iop/production/rendering.py,sha256=gyJyUcWwvgwRWvlvddZbCIhkjJ1DcMZfbL2brIa_k8U,20229
79
79
  iop/production/runtime.py,sha256=6grX1u20OhHnvhzC3yPDTFEoDs_TN4mfs5MxzFzZMls,2637
80
80
  iop/production/source_inference.py,sha256=Wl3E9-1hWb4qxD1jwrrZTLSgqN-0vGhOrJtmzDWPCao,21613
81
81
  iop/production/types.py,sha256=hzO8rj73z16WqFQBI7YBAznY-1fD8ENyJqzTY-ydFXI,16889
82
- iop/production/validation.py,sha256=yoh3joKyOmuSn3aSYhc-aWOV61s5V5Sd1hLbNXDp12g,16049
82
+ iop/production/validation.py,sha256=gzRFLCTPGiNMIot1yG1FXG5ab9inpq4rqYYQpefhBYs,16217
83
83
  iop/runtime/__init__.py,sha256=wcyWMRuPCYE_CLd1NmgmI1M-IbFs2Gz2yIj2-EW_2AA,70
84
84
  iop/runtime/director.py,sha256=KW8BvkATK8XuIUPNBD9rMww9r3Zg4K3H54868eOgvl0,12867
85
85
  iop/runtime/environment.py,sha256=0KZ4EoW6NUEbF7FW471emxQ-9FbaiX6ngUHVGihgZXU,1564
@@ -92,9 +92,9 @@ iop/runtime/remote/director.py,sha256=bkie751GrYLgGs7ApRCowHpSnJA8KupxCOrFDQmjyO
92
92
  iop/runtime/remote/migration.py,sha256=Iboz-Ye7i9xif9bn433GazCF-gtD-HJW3wiUwWS5P6w,1831
93
93
  iop/runtime/remote/settings.py,sha256=P1Hsgld5o57HpSZgPVZzobyjlUmxJj6bstiWvR0JXnc,2144
94
94
  iop/runtime/remote/setup.py,sha256=Tr80F3JJTy7oSUso2jyx0iA_KZayd4MYt9vL0BvPpMA,2600
95
- iris_pex_embedded_python-4.0.1b7.dist-info/licenses/LICENSE,sha256=rZSiBFId_sfbJ6RL0GjjPX-InNLkNS9ou7eQsikciI8,1089
96
- iris_pex_embedded_python-4.0.1b7.dist-info/METADATA,sha256=O2hhJWlDeQ1GJMdbvujQJ3-9EREctqL-1BSe_H3MpGg,5854
97
- iris_pex_embedded_python-4.0.1b7.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
98
- iris_pex_embedded_python-4.0.1b7.dist-info/entry_points.txt,sha256=fzS8ZFsPe8cnpEx208X60DNugCPQmuSloPeg4pyyJDY,42
99
- iris_pex_embedded_python-4.0.1b7.dist-info/top_level.txt,sha256=BM54-OXQ6l2BDtmesWNXckh033s9gcjoO7bfjbwZbxU,4
100
- iris_pex_embedded_python-4.0.1b7.dist-info/RECORD,,
95
+ iris_pex_embedded_python-4.0.1b8.dist-info/licenses/LICENSE,sha256=rZSiBFId_sfbJ6RL0GjjPX-InNLkNS9ou7eQsikciI8,1089
96
+ iris_pex_embedded_python-4.0.1b8.dist-info/METADATA,sha256=2xgGbmP5t_sp-SvMGjzJp1wkpiU9p32fQ22gWUjG7GE,5854
97
+ iris_pex_embedded_python-4.0.1b8.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
98
+ iris_pex_embedded_python-4.0.1b8.dist-info/entry_points.txt,sha256=fzS8ZFsPe8cnpEx208X60DNugCPQmuSloPeg4pyyJDY,42
99
+ iris_pex_embedded_python-4.0.1b8.dist-info/top_level.txt,sha256=BM54-OXQ6l2BDtmesWNXckh033s9gcjoO7bfjbwZbxU,4
100
+ iris_pex_embedded_python-4.0.1b8.dist-info/RECORD,,