Skip to content

Commit fd305d1

Browse files
committed
#147 Add get_name
1 parent 8508b6e commit fd305d1

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

xarray_dataclasses/datamodel.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
get_dims,
2727
get_dtype,
2828
get_ftype,
29+
get_name,
2930
)
3031

3132

@@ -209,10 +210,11 @@ def eval_dataclass(dataclass: AnyDataClass[PInit]) -> None:
209210
def get_entry(field: AnyField, value: Any) -> Optional[AnyEntry]:
210211
"""Create an entry from a field and its value."""
211212
ftype = get_ftype(field.type)
213+
name = get_name(field.type, field.name)
212214

213215
if ftype is FType.ATTR or ftype is FType.NAME:
214216
return AttrEntry(
215-
name=field.name,
217+
name=name,
216218
tag=ftype.value,
217219
value=value,
218220
type=get_annotated(field.type),
@@ -221,14 +223,14 @@ def get_entry(field: AnyField, value: Any) -> Optional[AnyEntry]:
221223
if ftype is FType.COORD or ftype is FType.DATA:
222224
try:
223225
return DataEntry(
224-
name=field.name,
226+
name=name,
225227
tag=ftype.value,
226228
base=get_dataclass(field.type),
227229
value=value,
228230
)
229231
except TypeError:
230232
return DataEntry(
231-
name=field.name,
233+
name=name,
232234
tag=ftype.value,
233235
dims=get_dims(field.type),
234236
dtype=get_dtype(field.type),

xarray_dataclasses/typing.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,3 +347,17 @@ def get_ftype(tp: Any, default: FType = FType.OTHER) -> FType:
347347
return get_annotations(tp)[0]
348348
except TypeError:
349349
return default
350+
351+
352+
def get_name(tp: Any, default: Hashable = None) -> Hashable:
353+
"""Extract a name if found or return given default."""
354+
try:
355+
annotations = get_annotations(tp)[1:]
356+
except TypeError:
357+
return default
358+
359+
for annotation in annotations:
360+
if isinstance(annotation, Hashable):
361+
return annotation
362+
363+
return default

0 commit comments

Comments
 (0)