[Python-Dev] [Python-checkins] cpython: PEP 417: Adding unittest.mock

Terry Reedy tjreedy at udel.edu
Wed Mar 14 21:46:29 CET 2012


On 3/14/2012 4:22 PM, Michael Foord wrote:
>> On 14 Mar 2012, at 13:08, Terry Reedy wrote:
>>> On 3/14/2012 3:25 PM, michael.foord wrote:
>>> +# mock.py +# Test tools for mocking and patching.

>> Should there be a note here about restrictions on editing this
>> file? I notice that there are things like
>>>>> +class OldStyleClass: + pass +ClassType = type(OldStyleClass)
>>>> which are only present for running under Py2 and which would
>> normally be removed for Py3.
>>> Yeah, I removed as much of the Python 2 compatibility code and
> thought I'd got it all. Thanks for pointing it out.

2000 lines is a lot to check through.
>> I'm maintaining a "clean" (no Python 2 compatibility code) version in
> the standard library.

Great. Here is something else, which is why I thought otherwise ;-).
+def _instance_callable(obj):
+ """Given an object, return True if the object is callable.
+ For classes, return True if instances would be callable."""
+ if not isinstance(obj, type):
+ # already an instance
+ return getattr(obj, '__call__', None) is not None
+
+ klass = obj
+ # uses __bases__ instead of __mro__ so that we work with
 >>> old style classes
+ if klass.__dict__.get('__call__') is not None:
+ return True
+
+ for base in klass.__bases__:
+ if _instance_callable(base):
+ return True
+ return False
If you want to leave the code as is, remove or revise the comment.
> I'll be maintaining mock, so I'd like to be
> assigned any issues on it and at least talked to before changes are
> made. I am maintaining a backport still, but the Python standard
> library version is the canonical version.

Add unittest.mock to devguide/experts.rst and yourself with * appended.
---
Searching for 'old', I also found
+def _must_skip(spec, entry, is_type):
+ if not isinstance(spec, type):
+ if entry in getattr(spec, '__dict__', {}):
+ # instance attribute - shouldn't skip
+ return False
 >>>+ # can't use type because of old style classes
+ spec = spec.__class__
+ if not hasattr(spec, '__mro__'):
 >>>+ # old style class: can't have descriptors anyway
+ return is_type
In testcallable.py
+ def test_patch_spec_callable_class(self):
+ class CallableX(X):
+ def __call__(self):
+ pass
+
+ class Sub(CallableX):
+ pass
+
+ class Multi(SomeClass, Sub):
+ pass
+
 >>>+ class OldStyle:
+ def __call__(self):
+ pass
+
 >>>+ class OldStyleSub(OldStyle):
+ pass
+
+ for arg in 'spec', 'spec_set':
 >>>+ for Klass in CallableX, Sub, Multi, OldStyle, OldStyleSub:
This is the last.
-- 
Terry Jan Reedy


More information about the Python-Dev mailing list

AltStyle によって変換されたページ (->オリジナル) /