Skip to content

Commit f5ec72c

Browse files
committed
Fix mypy errors
1 parent 572660c commit f5ec72c

File tree

2 files changed

+31
-28
lines changed

2 files changed

+31
-28
lines changed

fastenum/parcher.py

+28-25
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
from __future__ import annotations
12
import gc
2-
from typing import MutableMapping, Any, AbstractSet, Type, Callable, Dict, Tuple, Mapping, Optional, Iterable, Set
3+
from typing import MutableMapping, Any, AbstractSet, Type, Callable, Dict, Tuple, Mapping, Optional, Set, cast
34

45

56
class _Missing:
@@ -38,10 +39,17 @@ def set_attr(t: Any, name: str, value: Any) -> Any:
3839

3940
class PatchMeta(type):
4041
__enabled__: bool
41-
__run_on_class__: Callable[[Type[Any]], None]
42-
__run_on_instance__: Callable[[Any], None]
42+
__run_on_class__: classmethod
43+
__run_on_instance__: classmethod
4344

44-
def __prepare__(cls, *args: Any, **kwargs: Any) -> Mapping[str, Any]:
45+
__target__: Type[Any]
46+
__to_update__: dict[str, Any]
47+
__to_delete__: AbstractSet[str]
48+
__original_attrs__: dict[Any, Any]
49+
__extra__: AbstractSet[str]
50+
__redefined_on_subclasses__: dict[str, Any]
51+
52+
def __prepare__(cls, *args: Any, **kwargs: Any) -> Mapping[str, Any]: # type: ignore
4553
return type.__prepare__(*args, **kwargs)
4654

4755
def __new__(
@@ -52,19 +60,19 @@ def __new__(
5260
target: Any = None,
5361
delete: AbstractSet[str] = None,
5462
update: AbstractSet[str] = None
55-
) -> "PatchMeta":
63+
) -> PatchMeta:
5664
target = target or namespace.pop('__target__', None)
5765
if target is None:
5866
return type.__new__(mcs, name, bases, namespace)
5967

60-
to_delete = delete or namespace.pop('__to_delete__', set())
61-
to_update = update or namespace.pop('__to_update__', set())
68+
to_delete = cast(set, delete or namespace.pop('__to_delete__', set()))
69+
to_update = cast(set, update or namespace.pop('__to_update__', set()))
6270

6371
patched_attrs = {
6472
attr: namespace[attr]
6573
for attr in to_update
66-
6774
}
75+
6876
original_attrs = {
6977
attr: target.__dict__[attr]
7078
for attr in to_update | to_delete
@@ -164,15 +172,10 @@ def _get_all_subclasses(cls, target: Type[Any]) -> Set[Type[Any]]:
164172

165173
class Patch(metaclass=PatchMeta):
166174
"""Class to declare attributes to patch other classes"""
167-
168-
__target__: Type[Any]
169-
__to_update__: AbstractSet[str]
170-
__to_delete__: AbstractSet[str]
171-
172175
__enabled__: bool = False
173176

174-
__run_on_class__: Callable[[Type[Any]], None] = None
175-
__run_on_instance__: Callable[[Any], None] = None
177+
__run_on_class__: Callable[[Type[Any]], None] | None = None
178+
__run_on_instance__: Callable[[Any], None] | None = None
176179

177180

178181
class InstancePatchMeta(PatchMeta):
@@ -181,18 +184,18 @@ def _get_all_subclasses(cls, target: Any) -> Set[Type[Any]]:
181184

182185
def new(
183186
cls, target: Any, delete: AbstractSet[str] = None, update: Dict[str, Any] = None
184-
) -> "InstancePatchMeta":
185-
return cls.__class__.__new__(
186-
cls.__class__,
187-
getattr(target, '__name__', target.__class__.__name__) + 'Patch',
188-
(cls,),
189-
update,
187+
) -> InstancePatchMeta:
188+
return cast(InstancePatchMeta, cls.__class__.__new__(
189+
mcs=cls.__class__,
190+
name=getattr(target, '__name__', target.__class__.__name__) + 'Patch',
191+
bases=(cls,),
192+
namespace=update or {},
190193
target=target,
191194
delete=delete,
192-
update=update.keys(),
193-
)
195+
update=update.keys() if update else None,
196+
))
194197

195198

196199
class InstancePatch(metaclass=InstancePatchMeta):
197-
__run_on_class__: Callable[[Type[Any]], None] = None
198-
__run_on_instance__: Callable[[Any], None] = None
200+
__run_on_class__ = None
201+
__run_on_instance__ = None

fastenum/patches.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import enum
2-
from enum import (
2+
from enum import ( # type: ignore
33
Enum,
44
EnumMeta,
55
_EnumDict,
@@ -137,12 +137,12 @@ def __delattr__(self, key):
137137
object.__delattr__(self, key)
138138

139139
@classmethod
140-
def __run_on_class__(cls, enum_cls: EnumMeta):
140+
def __run_on_class__(cls, enum_cls: EnumMeta): # type: ignore
141141
cls._set_names(enum_cls)
142142
cls._set_dynamic_class_attrs(enum_cls)
143143

144144
@classmethod
145-
def __run_on_instance__(cls, member: Enum):
145+
def __run_on_instance__(cls, member: Enum): # type: ignore
146146
member.__dict__['name'] = member._name_
147147
member.__dict__['value'] = member._value_
148148

0 commit comments

Comments
 (0)