Skip to content

Commit d71f9bc

Browse files
committed
#156 Add parameter for dataoptions to from_dataclass
1 parent 782eb87 commit d71f9bc

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

xarray_dataclasses/specs.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -135,25 +135,29 @@ class DataSpec:
135135
"""Options for xarray data creation."""
136136

137137
@classmethod
138-
def from_dataclass(cls, dataclass: Type[DataClass[PInit]]) -> "DataSpec":
138+
def from_dataclass(
139+
cls,
140+
dataclass: Type[DataClass[PInit]],
141+
dataoptions: Optional[DataOptions[Any]] = None,
142+
) -> "DataSpec":
139143
"""Create a data specification from a dataclass."""
140144
specs = SpecDict()
141145

142-
for field in fields(eval_fields(dataclass)):
146+
for field in fields(eval_types(dataclass)):
143147
spec = get_spec(field)
144148

145149
if spec is not None:
146150
specs[field.name] = spec
147151

148-
try:
149-
return cls(specs, dataclass.__dataoptions__) # type: ignore
150-
except AttributeError:
152+
if dataoptions is None:
151153
return cls(specs)
154+
else:
155+
return cls(specs, dataoptions)
152156

153157

154158
# runtime functions
155159
@lru_cache(maxsize=None)
156-
def eval_fields(dataclass: Type[DataClass[PInit]]) -> Type[DataClass[PInit]]:
160+
def eval_types(dataclass: Type[DataClass[PInit]]) -> Type[DataClass[PInit]]:
157161
"""Evaluate field types of a dataclass."""
158162
types = get_type_hints(dataclass, include_extras=True)
159163

0 commit comments

Comments
 (0)