Skip to content

Commit 46236f2

Browse files
committed
#185 Use signature instead of function wrapping
1 parent 0b169c6 commit 46236f2

File tree

2 files changed

+12
-12
lines changed

2 files changed

+12
-12
lines changed

xarray_dataclasses/dataarray.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33

44

55
# standard library
6-
from functools import partial, wraps
6+
from functools import partial
7+
from inspect import signature
78
from types import MethodType
89
from typing import Any, Callable, Optional, Type, TypeVar, Union, overload
910

1011

1112
# dependencies
1213
import numpy as np
1314
import xarray as xr
14-
from morecopy import copy
1515
from typing_extensions import ParamSpec, Protocol
1616

1717

@@ -141,14 +141,14 @@ class AsDataArray:
141141
def new(cls: Any) -> Any:
142142
"""Create a DataArray object from dataclass parameters."""
143143

144-
init = copy(cls.__init__)
145-
init.__doc__ = cls.__init__.__doc__
146-
init.__annotations__["return"] = TDataArray
144+
sig = signature(cls.__init__) # type: ignore
145+
sig = sig.replace(return_annotation=TDataArray)
147146

148-
@wraps(init)
149147
def new(cls: Any, *args: Any, **kwargs: Any) -> Any:
150148
return asdataarray(cls(*args, **kwargs))
151149

150+
setattr(new, "__doc__", cls.__init__.__doc__)
151+
setattr(new, "__signature__", sig)
152152
return MethodType(new, cls)
153153

154154
@overload

xarray_dataclasses/dataset.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33

44

55
# standard library
6-
from functools import partial, wraps
6+
from functools import partial
7+
from inspect import signature
78
from types import MethodType
89
from typing import Any, Callable, Dict, Optional, Type, TypeVar, overload
910

1011

1112
# dependencies
1213
import numpy as np
1314
import xarray as xr
14-
from morecopy import copy
1515
from typing_extensions import ParamSpec, Protocol
1616

1717

@@ -141,14 +141,14 @@ class AsDataset:
141141
def new(cls: Any) -> Any:
142142
"""Create a Dataset object from dataclass parameters."""
143143

144-
init = copy(cls.__init__)
145-
init.__doc__ = cls.__init__.__doc__
146-
init.__annotations__["return"] = TDataset
144+
sig = signature(cls.__init__) # type: ignore
145+
sig = sig.replace(return_annotation=TDataset)
147146

148-
@wraps(init)
149147
def new(cls: Any, *args: Any, **kwargs: Any) -> Any:
150148
return asdataset(cls(*args, **kwargs))
151149

150+
setattr(new, "__doc__", cls.__init__.__doc__)
151+
setattr(new, "__signature__", sig)
152152
return MethodType(new, cls)
153153

154154
@overload

0 commit comments

Comments
 (0)