Skip to content

Commit d475b36

Browse files
committed
finish wrapper refactoring
1 parent e30d405 commit d475b36

File tree

2 files changed

+27
-43
lines changed

2 files changed

+27
-43
lines changed

python/deps/untypy/untypy/util/wrapper.py

Lines changed: 26 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -162,10 +162,8 @@ def __new__(cls, content):
162162

163163
# SimpleWrapper is a fallback for types that cannot be used as base types
164164
class SimpleWrapper(WrapperBase):
165-
def __init__(self):
166-
pass
167-
def __patch__(self, ms, name=None, extra=None):
168-
pass
165+
def __init__(self, wrapped):
166+
self.__wrapped__ = wrapped
169167

170168
class ValuesViewWrapper(SimpleWrapper):
171169
pass
@@ -179,67 +177,53 @@ class KeysViewWrapper(SimpleWrapper):
179177
pass
180178
collections.abc.KeysView.register(KeysViewWrapper)
181179

182-
def wrapSimple(wrapped, methods, name, extra, cls=SimpleWrapper):
183-
if name is None:
184-
name = cls.__name__
180+
def _wrap(wrapped, methods, mod, name, extra, cls):
185181
if extra is None:
186182
extra = {}
187-
for x in ['__next__', '__iter__']:
188-
if x not in methods and hasattr(wrapped, x):
189-
attr = getattr(wrapped, x)
190-
methods[x] = attr
191183
# Dynamically create a new class:
192184
# type(class_name, base_classes, class_dict)
193185
WrapperClass = type(
194186
name,
195187
(cls,),
196188
methods
197189
)
198-
if not name.startswith('WyppTypeCheck()') and hasattr(wrapped, '__module__'):
199-
WrapperClass.__module__ = getattr(wrapped, '__module__')
200-
w = WrapperClass()
201-
w.__wrapped__ = wrapped
190+
WrapperClass.__module__ = mod
191+
w = WrapperClass(wrapped)
202192
w.__extra__ = extra
203193
return w
204194

195+
def wrapSimple(wrapped, methods, name, extra, cls=SimpleWrapper):
196+
if name is None:
197+
name = cls.__name__
198+
mod = None
199+
else:
200+
if hasattr(wrapped, '__module__'):
201+
mod = wrapped.__module__
202+
else:
203+
mod = None
204+
for x in ['__next__', '__iter__']:
205+
if x not in methods and hasattr(wrapped, x):
206+
attr = getattr(wrapped, x)
207+
methods[x] = attr
208+
return _wrap(wrapped, methods, mod, name, extra, cls)
209+
205210
def wrapObj(wrapped, methods, name, extra):
206211
class BaseWrapper(WrapperBase, wrapped.__class__):
207-
def __init__(self):
212+
def __init__(self, wrapped):
208213
self.__dict__ = wrapped.__dict__
209214
self.__wrapped__ = wrapped
210215
if name is None:
211216
name = 'ObjectWrapper'
212-
if extra is None:
213-
extra = {}
214-
# Dynamically create a new class:
215-
# type(class_name, base_classes, class_dict)
216-
WrapperClass = type(
217-
name,
218-
(BaseWrapper,),
219-
methods
220-
)
221217
if hasattr(wrapped, '__module__'):
222-
WrapperClass.__module__ = getattr(wrapped, '__module__')
223-
w = WrapperClass()
224-
w.__extra__ = extra
225-
return w
218+
mod = getattr(wrapped, '__module__')
219+
else:
220+
mod = None
221+
return _wrap(wrapped, methods, mod, name, extra, BaseWrapper)
226222

227223
def wrapBuiltin(wrapped, methods, name, extra, cls):
228224
if name is None:
229225
name = cls.__name__
230-
if extra is None:
231-
extra = {}
232-
# Dynamically create a new class:
233-
# type(class_name, base_classes, class_dict)
234-
WrapperClass = type(
235-
name,
236-
(cls,),
237-
methods
238-
)
239-
WrapperClass.__module__ = None
240-
w = WrapperClass(wrapped)
241-
w.__extra__ = extra
242-
return w
226+
return _wrap(wrapped, methods, None, name, extra, cls)
243227

244228
def wrap(obj, methods, name=None, extra=None, simple=False):
245229
if extra is None:
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<class 'untypy.util.wrapper.WyppTypeCheck(generator, Iterable[int])'>
1+
<class 'WyppTypeCheck(generator, Iterable[int])'>

0 commit comments

Comments
 (0)