@@ -162,10 +162,8 @@ def __new__(cls, content):
162162
163163# SimpleWrapper is a fallback for types that cannot be used as base types
164164class 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
170168class ValuesViewWrapper (SimpleWrapper ):
171169 pass
@@ -179,67 +177,53 @@ class KeysViewWrapper(SimpleWrapper):
179177 pass
180178collections .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+
205210def 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
227223def 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
244228def wrap (obj , methods , name = None , extra = None , simple = False ):
245229 if extra is None :
0 commit comments