Skip to content

Commit eac0be3

Browse files
committed
Removed dependency on buggy typing_inspect
1 parent c9ce59e commit eac0be3

File tree

4 files changed

+15
-16
lines changed

4 files changed

+15
-16
lines changed

pyproject.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ prefect = ">2.13.2,<3"
2525
pytest-asyncio = "^0.20.2"
2626
pytest-cases = "^3.6.13"
2727
requests = "^2.25.1"
28-
typing-inspect = "^0.8.0"
2928

3029
# Potential dependencies
3130
#dpath = "^2.1.0"

src/omnipy/util/helpers.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
from pydantic import BaseModel, ValidationError
3939
from pydantic.generics import GenericModel
4040
from pydantic.typing import is_none_type
41-
from typing_inspect import get_generic_bases, is_generic_type
4241

4342
from omnipy.api.protocols.private.util import HasContents, IsSnapshotWrapper
4443
from omnipy.api.typedefs import LocaleType, TypeForm
@@ -99,8 +98,8 @@ def repr_max_len(data: object, max_len: int = 200):
9998
return f'{repr_str[:max_len]}...' if len(repr_str) > max_len else repr_str
10099

101100

102-
def get_bases(cls):
103-
return get_generic_bases(cls) if is_generic_type(cls) else cls.__bases__
101+
def get_parametrized_type(obj: object):
102+
return getattr(obj, '__orig_class__', type(obj))
104103

105104

106105
def generic_aware_issubclass_ignore_args(cls, cls_or_tuple):

src/omnipy/util/mixin.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
import types
44
from typing import DefaultDict, Protocol, Type
55

6-
from omnipy.util.helpers import (generic_aware_issubclass_ignore_args,
7-
get_bases,
8-
transfer_generic_args_to_cls)
6+
from typing_extensions import get_original_bases
7+
8+
from omnipy.util.helpers import generic_aware_issubclass_ignore_args, transfer_generic_args_to_cls
99

1010

1111
class IsMixin(Protocol):
@@ -30,7 +30,7 @@ def __class_getitem__(cls, item):
3030
def __init_subclass__(cls, **kwargs):
3131
super().__init_subclass__(**kwargs)
3232

33-
if DynamicMixinAcceptor in get_bases(cls) and cls.__init__ is object.__init__:
33+
if DynamicMixinAcceptor in get_original_bases(cls) and cls.__init__ is object.__init__:
3434
raise TypeError(
3535
'Dynamic mixin acceptor class is required to define a __init__() method.')
3636

@@ -133,6 +133,7 @@ def reset_mixins(cls):
133133
cls.__init__.__signature__ = cls._orig_init_signature
134134

135135
def __new__(cls, *args, **kwargs):
136+
print(cls.__name__)
136137
if not cls.__name__.endswith(cls.WITH_MIXINS_CLS_SUFFIX):
137138
cls_with_mixins = cls._create_subcls_inheriting_from_mixins_and_orig_cls()
138139
obj = super(cls, cls_with_mixins).__new__(cls_with_mixins, *args, **kwargs)
@@ -183,7 +184,7 @@ def __init__(self, *args, **kwargs):
183184
# print(f'Calling... {base.__name__}(kwargs={mixin_kwargs})')
184185
base.__init__(self, **mixin_kwargs)
185186

186-
cls_bases = list(get_bases(cls))
187+
cls_bases = list(get_original_bases(cls))
187188
if not cls.__name__.endswith(cls.WITH_MIXINS_CLS_SUFFIX):
188189
cls_bases = list(cls._mixin_classes) + cls_bases
189190

tests/util/test_helpers.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
from pydantic.fields import Undefined
2020
from pydantic.generics import GenericModel
2121
import pytest
22-
from typing_inspect import get_generic_type
2322

2423
from omnipy.api.protocols.private.util import HasContents, IsSnapshotHolder
2524
from omnipy.data.dataset import Dataset
@@ -31,6 +30,7 @@
3130
evaluate_any_forward_refs_if_possible,
3231
get_calling_module_name,
3332
get_first_item,
33+
get_parametrized_type,
3434
has_items,
3535
is_iterable,
3636
is_non_omnipy_pydantic_model,
@@ -59,29 +59,29 @@ class MyGenericDict(dict[T, U], Generic[T, U]):
5959
def test_transfer_generic_params_to_new_generic_cls() -> None:
6060
init_dict = MyGenericDict[str, int]({'a': 123})
6161

62-
assert get_args(get_generic_type(init_dict)) == (str, int)
62+
assert get_args(get_parametrized_type(init_dict)) == (str, int)
6363

6464
class MyDict(dict[T, U]):
6565
...
6666

6767
my_dict = MyDict({'b': 234})
6868

69-
assert get_args(get_generic_type(my_dict)) == ()
69+
assert get_args(get_parametrized_type(my_dict)) == ()
7070

71-
my_typed_dict_cls = transfer_generic_args_to_cls(MyDict, get_generic_type(init_dict))
71+
my_typed_dict_cls = transfer_generic_args_to_cls(MyDict, get_parametrized_type(init_dict))
7272

7373
my_typed_dict = my_typed_dict_cls({'b': 234})
7474

75-
assert get_args(get_generic_type(my_typed_dict)) == (str, int)
75+
assert get_args(get_parametrized_type(my_typed_dict)) == (str, int)
7676

7777

7878
def test_do_not_transfer_generic_params_to_non_generic_cls() -> None:
7979
my_int = 123
80-
my_int_cls = transfer_generic_args_to_cls(int, get_generic_type(my_int))
80+
my_int_cls = transfer_generic_args_to_cls(int, get_parametrized_type(my_int))
8181

8282
my_typed_int = my_int_cls(123)
8383

84-
assert get_args(get_generic_type(my_typed_int)) == ()
84+
assert get_args(get_parametrized_type(my_typed_int)) == ()
8585

8686

8787
def test_ensure_plain_type() -> None:

0 commit comments

Comments
 (0)