Skip to content

Commit 28127c5

Browse files
committed
Add a method to look up parameter by their nc_name, raise on non existent error name coercion
1 parent 4002f4b commit 28127c5

3 files changed

Lines changed: 45 additions & 1 deletion

File tree

CHANGELOG

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,14 @@
1+
v2025.??.0 (2025-??-??)
2+
=======================
3+
Parameter Changes
4+
-----------------
5+
* None Yet
6+
7+
API Changes
8+
-----------
9+
* (New) Add a method to look up parameter by their nc_name
10+
* (Potentially Breaking) Rise a `ValueError` when attempting to coerce a parameter into an error name when an error name it not defined for it
11+
112
v2025.10.0 (2025-10-31)
213
=======================
314
Parameter Changes

src/cchdo/params/__init__.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,32 @@ def odv_names(self):
144144

145145
return {to_odv(key): value for key, value in super().items()}
146146

147+
@cached_property
148+
def _nc_names(self) -> dict[str, WHPName]:
149+
return {param.nc_name: param for param in self.values()}
150+
151+
def from_nc_name(self, key: str) -> WHPName:
152+
is_flag = key.endswith("_qc")
153+
key = key.removesuffix("_qc")
154+
is_error = key.endswith("_error")
155+
key = key.removesuffix("_error")
156+
depth = 0
157+
if "_alt_" in key:
158+
try:
159+
_key, _depth = key.split("_alt_")
160+
depth = int(_depth)
161+
key = _key
162+
except ValueError:
163+
...
164+
param = self._nc_names[key]
165+
if depth > 0:
166+
param = param.as_depth(depth)
167+
if is_flag:
168+
return param.as_flag()
169+
if is_error:
170+
return param.as_error()
171+
return param
172+
147173
def __getitem__(self, key: WHPNameKey | WHPName) -> WHPName:
148174
unit = None
149175
flag = False

src/cchdo/params/core.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,9 @@ def as_flag(self) -> "WHPName":
137137
raise ValueError("error columns cannot have flags")
138138
return replace(self, flag_col=True)
139139

140+
def as_base(self) -> "WHPName":
141+
return replace(self, flag_col=False, error_col=False, alt_depth=0)
142+
140143
@property
141144
def full_whp_name(self):
142145
if self.alt_depth > 0:
@@ -171,6 +174,10 @@ def odv_key(self) -> str:
171174
"""
172175
if self.error_col:
173176
base = self.full_error_name
177+
if base is None:
178+
raise ValueError(
179+
f"Error name is not defined for this parameter {self.as_base()}"
180+
)
174181
else:
175182
base = self.full_whp_name
176183

@@ -182,7 +189,7 @@ def odv_key(self) -> str:
182189
if self.flag_col:
183190
key = f"{key}_FLAG_W"
184191

185-
return key
192+
return str(key)
186193

187194
@property
188195
def nc_name_flag(self) -> str:

0 commit comments

Comments
 (0)