Commit 5a4ffdbe authored by Gregory P. Smith's avatar Gregory P. Smith

merge heads

parents 8bfd49e0 d7c65e28
...@@ -794,9 +794,9 @@ My program is too slow. How do I speed it up? ...@@ -794,9 +794,9 @@ My program is too slow. How do I speed it up?
That's a tough one, in general. First, here are a list of things to That's a tough one, in general. First, here are a list of things to
remember before diving further: remember before diving further:
* Performance characteristics vary accross Python implementations. This FAQ * Performance characteristics vary across Python implementations. This FAQ
focusses on :term:`CPython`. focusses on :term:`CPython`.
* Behaviour can vary accross operating systems, especially when talking about * Behaviour can vary across operating systems, especially when talking about
I/O or multi-threading. I/O or multi-threading.
* You should always find the hot spots in your program *before* attempting to * You should always find the hot spots in your program *before* attempting to
optimize any code (see the :mod:`profile` module). optimize any code (see the :mod:`profile` module).
......
...@@ -143,13 +143,10 @@ def _instance_callable(obj): ...@@ -143,13 +143,10 @@ def _instance_callable(obj):
# already an instance # already an instance
return getattr(obj, '__call__', None) is not None return getattr(obj, '__call__', None) is not None
klass = obj # *could* be broken by a class overriding __mro__ or __dict__ via
# uses __bases__ instead of __mro__ so that we work with old style classes # a metaclass
if klass.__dict__.get('__call__') is not None: for base in (obj,) + obj.__mro__:
return True if base.__dict__.get('__call__') is not None:
for base in klass.__bases__:
if _instance_callable(base):
return True return True
return False return False
...@@ -622,9 +619,7 @@ class NonCallableMock(Base): ...@@ -622,9 +619,7 @@ class NonCallableMock(Base):
def __dir__(self): def __dir__(self):
"""Filter the output of `dir(mock)` to only useful members. """Filter the output of `dir(mock)` to only useful members."""
XXXX
"""
extras = self._mock_methods or [] extras = self._mock_methods or []
from_type = dir(type(self)) from_type = dir(type(self))
from_dict = list(self.__dict__) from_dict = list(self.__dict__)
...@@ -1060,12 +1055,9 @@ class _patch(object): ...@@ -1060,12 +1055,9 @@ class _patch(object):
@wraps(func) @wraps(func)
def patched(*args, **keywargs): def patched(*args, **keywargs):
# could use with statement here
extra_args = [] extra_args = []
entered_patchers = [] entered_patchers = []
# could use try..except...finally here
try:
try: try:
for patching in patched.patchings: for patching in patched.patchings:
arg = patching.__enter__() arg = patching.__enter__()
...@@ -2064,11 +2056,7 @@ def _must_skip(spec, entry, is_type): ...@@ -2064,11 +2056,7 @@ def _must_skip(spec, entry, is_type):
if entry in getattr(spec, '__dict__', {}): if entry in getattr(spec, '__dict__', {}):
# instance attribute - shouldn't skip # instance attribute - shouldn't skip
return False return False
# can't use type because of old style classes
spec = spec.__class__ spec = spec.__class__
if not hasattr(spec, '__mro__'):
# old style class: can't have descriptors anyway
return is_type
for klass in spec.__mro__: for klass in spec.__mro__:
result = klass.__dict__.get(entry, DEFAULT) result = klass.__dict__.get(entry, DEFAULT)
......
...@@ -107,19 +107,9 @@ class TestCallable(unittest.TestCase): ...@@ -107,19 +107,9 @@ class TestCallable(unittest.TestCase):
class Multi(SomeClass, Sub): class Multi(SomeClass, Sub):
pass pass
class OldStyle:
def __call__(self):
pass
class OldStyleSub(OldStyle):
pass
for arg in 'spec', 'spec_set': for arg in 'spec', 'spec_set':
for Klass in CallableX, Sub, Multi, OldStyle, OldStyleSub: for Klass in CallableX, Sub, Multi:
patcher = patch('%s.X' % __name__, **{arg: Klass}) with patch('%s.X' % __name__, **{arg: Klass}) as mock:
mock = patcher.start()
try:
instance = mock() instance = mock()
mock.assert_called_once_with() mock.assert_called_once_with()
...@@ -136,8 +126,6 @@ class TestCallable(unittest.TestCase): ...@@ -136,8 +126,6 @@ class TestCallable(unittest.TestCase):
result.assert_called_once_with(3, 2, 1) result.assert_called_once_with(3, 2, 1)
result.foo(3, 2, 1) result.foo(3, 2, 1)
result.foo.assert_called_once_with(3, 2, 1) result.foo.assert_called_once_with(3, 2, 1)
finally:
patcher.stop()
def test_create_autopsec(self): def test_create_autopsec(self):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment