[issue20530] Change the text signature format (again) to be more robust
Yury Selivanov
report at bugs.python.org
Fri Feb 7 19:55:03 CET 2014
Yury Selivanov added the comment:
Larry,
I'm attaching a revised version of the patch -- larry.even.newerer.signature.syntax.3.diff.
Changes:
1. test_signature_on_class_without_init was fixed,
inspect.signature was fixed as well. Now, for
class Meta(type): pass
"inspect.signature(Meta)" will raise a ValueError.
> I also *think* that all the code after this comment:
> # No '__text_signature__' was found for the 'obj' class.
> should be removed.
You are right, but I'd prefer to leave that code until 3.5, when we have correct signature for 'type'.
> The reason this happens: inspect.Signature gets to
> the "for base in mro" case for handling classes.
> The first base it tries is type(), but type() doesn't
> have a public signature so it keeps going. The next
> class in the MRO is object(), which has a signature
> of "()", so it uses that.
> It shouldn't keep going! I'm 99% certain that the first
> entry in the MRO will always be callable. (Is it possible
> to have a type in Python that isn't callable?)
Unfortunately, no, we need to traverse the MRO. See the
"test_signature_on_builtin_class" unit test, for instance.
The way I solved the current bug, is to fixing the code from
traversing the full MRO, to traversing the MRO without the
last item -- 'object' builtin.
2. _strip_non_python_syntax -> _signature_strip_non_python_syntax
Minor fixup, just to have all signature helper functions
in inspect.py follow one notation.
3. test_strip_non_python_syntax -> was moved to another
test case -- TestSignaturePrivateHelpers
4. I also fixed one thing that Zachary found: unused 's' variable
in the '_signature_fromstr' method.
Here's a quick summary of changes (diff of the diffs,
omitting some changes in tests):
https://gist.github.com/1st1/8869242
----------
Added file: http://bugs.python.org/file33964/larry.even.newerer.signature.syntax.3.diff
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue20530>
_______________________________________
More information about the Python-bugs-list
mailing list