Commit Graph

248 Commits

Author SHA1 Message Date
Serhiy Storchaka 2489bd5d4e Issue #24206: Fixed __eq__ and __ne__ methods of inspect classes. 2015-07-18 23:20:50 +03:00
Serhiy Storchaka 3018cc49e8 Issue #24206: Fixed __eq__ and __ne__ methods of inspect classes. 2015-07-18 23:19:05 +03:00
Yury Selivanov fdbeb2b4b6 Issue #24400: Resurrect inspect.isawaitable()
collections.abc.Awaitable and collections.abc.Coroutine no longer
use __instancecheck__ hook to detect generator-based coroutines.

inspect.isawaitable() can be used to detect generator-based coroutines
and to distinguish them from regular generator objects.
2015-07-03 13:11:35 -04:00
Yury Selivanov 59a3b6764c Issue #24541: Drop test_inspect.test_eightteen unittest; update docs
Suggested by Martin Panter.
2015-06-30 22:06:42 -04:00
Yury Selivanov 22f68d5dd6 Issue #24541: Update comment in test_inspect.test_eightteen 2015-06-30 21:44:52 -04:00
Yury Selivanov 8a8f453c5a Issue #24400: Fix failing unittest 2015-06-30 21:18:27 -04:00
Yury Selivanov a74b5e59af Issue #24400: Remove inspect.isawaitable().
isawaitable() was added before collections.abc.Awaitable; now,
with Awaitable, it is no longer needed (we don't have ishashable()
or isiterable() methods in the inspect module either).
2015-06-30 18:19:01 -04:00
Yury Selivanov 5376ba9630 Issue #24400: Introduce a distinct type for 'async def' coroutines.
Summary of changes:

1. Coroutines now have a distinct, separate from generators
   type at the C level: PyGen_Type, and a new typedef PyCoroObject.
   PyCoroObject shares the initial segment of struct layout with
   PyGenObject, making it possible to reuse existing generators
   machinery.  The new type is exposed as 'types.CoroutineType'.

   As a consequence of having a new type, CO_GENERATOR flag is
   no longer applied to coroutines.

2. Having a separate type for coroutines made it possible to add
   an __await__ method to the type.  Although it is not used by the
   interpreter (see details on that below), it makes coroutines
   naturally (without using __instancecheck__) conform to
   collections.abc.Coroutine and collections.abc.Awaitable ABCs.

   [The __instancecheck__ is still used for generator-based
   coroutines, as we don't want to add __await__ for generators.]

3. Add new opcode: GET_YIELD_FROM_ITER.  The opcode is needed to
   allow passing native coroutines to the YIELD_FROM opcode.

   Before this change, 'yield from o' expression was compiled to:

      (o)
      GET_ITER
      LOAD_CONST
      YIELD_FROM

   Now, we use GET_YIELD_FROM_ITER instead of GET_ITER.

   The reason for adding a new opcode is that GET_ITER is used
   in some contexts (such as 'for .. in' loops) where passing
   a coroutine object is invalid.

4. Add two new introspection functions to the inspec module:
   getcoroutinestate(c) and getcoroutinelocals(c).

5. inspect.iscoroutine(o) is updated to test if 'o' is a native
   coroutine object.  Before this commit it used abc.Coroutine,
   and it was requested to update inspect.isgenerator(o) to use
   abc.Generator; it was decided, however, that inspect functions
   should really be tailored for checking for native types.

6. sys.set_coroutine_wrapper(w) API is updated to work with only
   native coroutines.  Since types.coroutine decorator supports
   any type of callables now, it would be confusing that it does
   not work for all types of coroutines.

7. Exceptions logic in generators C implementation was updated
   to raise clearer messages for coroutines:

   Before: TypeError("generator raised StopIteration")
   After: TypeError("coroutine raised StopIteration")
2015-06-22 12:19:30 -04:00
Yury Selivanov bf304fcb32 Issue #23934: Fix inspect.signature to fail correctly for builtin types.
Initial patch by James Powell.
2015-05-30 17:08:36 -04:00
Yury Selivanov 507cd3cf91 Issue 24298: Fix signature() to properly unwrap wrappers around bound methods 2015-05-27 21:59:03 -04:00
Yury Selivanov 46c759d76d Issue 24298: Fix signature() to properly unwrap wrappers around bound methods 2015-05-27 21:56:53 -04:00
Yury Selivanov 3cfec2e2fc Issue 20438: Deprecate inspect.getargspec() and friends. 2015-05-22 11:38:38 -04:00
Yury Selivanov 095fb84fc2 Issue 23898: Fix inspect.classify_class_attrs() to work with __eq__
Patch by Mike Bayer.
2015-05-21 15:45:08 -04:00
Yury Selivanov bf341fb5f6 Issue 23898: Fix inspect.classify_class_attrs() to work with __eq__ 2015-05-21 15:41:57 -04:00
Yury Selivanov 57c74fca02 Issue 24248: Deprecate inspect.Signature.from_function and .from_builtin 2015-05-20 23:07:02 -04:00
Yury Selivanov bcd4fc161a Issue 20691: Add follow_wrapped arg to inspect.signature/from_callable. 2015-05-20 14:30:08 -04:00
Yury Selivanov 8687275358 Issue 24205: Improve inspect.Signature.bind() error messages. 2015-05-19 00:27:49 -04:00
Yury Selivanov b907a513c8 Issue 24190: Add inspect.BoundArguments.apply_defaults() method. 2015-05-16 13:45:09 -04:00
Yury Selivanov 6738b1157a Issue 24208: Fix tests -- don't create a tempdir in __init__. 2015-05-16 10:10:21 -04:00
Yury Selivanov 0cd2bf46ba Issue 24200: Fix broken unittest. 2015-05-15 12:55:20 -04:00
Yury Selivanov f229bc5c53 inspect: Remove "0x..." IDs from Signature objects' __repr__
Issue 24200.
2015-05-15 12:53:56 -04:00
Yury Selivanov 3f6538fed0 Issue 22547: Implement informative __repr__ for inspect.BoundArguments 2015-05-14 18:47:17 -04:00
Yury Selivanov 4cfd4eac7d inspect: Test that BoundArguments.__eq__ repects the order of params 2015-05-14 18:30:27 -04:00
Yury Selivanov 7544508f02 PEP 0492 -- Coroutines with async and await syntax. Issue #24017. 2015-05-11 22:57:16 -04:00
Berker Peksag ce643913a9 Issue #9517: Move script_helper to the support package.
Patch by Christie Wilson.
2015-05-06 06:33:17 +03:00
Antoine Pitrou a8723a02ea Issue #21217: inspect.getsourcelines() now tries to compute the start and
end lines from the code object, fixing an issue when a lambda function is
used as decorator argument.  Patch by Thomas Ballinger.
2015-04-15 00:41:29 +02:00
Zachary Ware 8ef887ce47 Issue #20586: Argument Clinic now ensures signatures on functions without docstrings. 2015-04-13 18:22:35 -05:00
Nick Coghlan 9c680b0728 Actually run the builtins Argument Clinic test 2015-04-13 12:54:54 -04:00
Serhiy Storchaka 5cf2b7253d Issue #15582: inspect.getdoc() now follows inheritance chains. 2015-04-03 22:38:53 +03:00
Serhiy Storchaka c2ccce791c Issue #23641: Cleaned out legacy dunder names from tests and docs.
Fixed 2 to 3 porting bug in pynche.ColorDB.
Added few tests for __truediv__, __floordiv__ and __matmul__.
2015-03-12 22:01:30 +02:00
Serhiy Storchaka a60c2fe480 Issue #23641: Cleaned out legacy dunder names from tests and docs.
Fixed 2 to 3 porting bug in pynche.ColorDB.
2015-03-12 21:56:08 +02:00
Yury Selivanov 7de29687f2 inspect: Fix getsource() to load updated source of reloaded module
Issue #1218234. Initial patch by Berker Peksag.
2014-12-08 18:00:25 -05:00
Yury Selivanov ef1e750225 inspect: Fix getsource() to load updated source of reloaded module
Issue #1218234. Initial patch by Berker Peksag.
2014-12-08 16:05:34 -05:00
R David Murray b55f944fa9 Merge: #12780: update inspect test skipIf for PEP 3147. 2014-10-03 11:16:08 -04:00
R David Murray 32562d7da3 #12780: update inspect test skipIf for PEP 3147.
The test needs to be skipped if unicodedata is either part of the
main binary (a repackaging of cpython on Windows?) or has python
source (pypy?).  PEP 3147 makes __file__ point to the .py source,
so we need to change the extension check from looking for the
old .pyc/.pyo to just looking for .py.

Note that this skip should never trigger on CPython itself, so
one could argue it should be dropped instead.  But since it exists,
why risk breaking someone else's python.
2014-10-03 11:15:38 -04:00
Yury Selivanov 081bbf6b28 inspect: Fix getsource() to support decorated functions.
Issue #1764286. Patch by Claudiu Popa.
2014-09-26 17:34:54 -04:00
Yury Selivanov 08d4a4f488 inspect.Signature: Fix discrepancy between __eq__ and __hash__.
Issue #20334. Thanks to Antony Lee for bug report & initial patch.
2014-09-12 15:48:02 -04:00
Antoine Pitrou cdcafb78b2 Issue #16808: inspect.stack() now returns a named tuple instead of a tuple.
Patch by Daniel Shahaf.
2014-08-24 10:50:28 -04:00
Nick Coghlan f9e227e5a9 Issue #20184: Add signature introspection for 30 of the builtins
Also adds a test to test_inspect to track progress on builtin
introspection support, to ensure it doesn't regress in the future.
2014-08-17 14:01:19 +10:00
Yury Selivanov 42407abe24 inspect: Validate that __signature__ is None or an instance of Signature.
Closes #21801.
2014-06-23 10:23:50 -07:00
Yury Selivanov c0f964fd55 inspect: Validate that __signature__ is None or an instance of Signature.
Closes #21801.
2014-06-23 10:21:04 -07:00
Yury Selivanov 67ae50ee1c inspect: Make Signature and Parameter hashable. Issue #20334. 2014-04-08 11:46:50 -04:00
Yury Selivanov 3f73ca23cf inspect.signautre: Fix functools.partial support. Issue #21117 2014-04-08 11:30:45 -04:00
Yury Selivanov 0fceaf45e2 inspect.signautre: Fix functools.partial support. Issue #21117 2014-04-08 11:28:02 -04:00
Yury Selivanov dccfa13cdb inspect: Fix getcallargs() to fail correctly if more than 3 args are missing.
Patch by Jeremiah Lowin. Closes #20817.
2014-03-27 18:42:52 -04:00
Yury Selivanov 2542b66bb0 inspect: Fix getcallargs() to fail correctly if more than 3 args are missing.
Patch by Jeremiah Lowin. Closes #20817.
2014-03-27 18:42:52 -04:00
Yury Selivanov 875df20e8a inspect: Fix getcallargs() to raise correct TypeError
... for missing keyword-only arguments. Patch by Jeremiah Lowin.
Closes #20816.
2014-03-27 18:23:03 -04:00
Yury Selivanov b1d060bf8b inspect: Fix getcallargs() to raise correct TypeError
... for missing keyword-only arguments. Patch by Jeremiah Lowin.
Closes #20816.
2014-03-27 18:23:03 -04:00
Yury Selivanov 374375dd26 inspect.signature: Improve repr of Signature and Parameter. Closes #20378 2014-03-27 12:41:53 -04:00
Yury Selivanov da39645ad3 inspect.Signature: Add 'Signature.from_callable' classmethod. Closes #17373 2014-03-27 12:09:24 -04:00
Yury Selivanov a5d63dd7b8 inspect.signature: Make Signature and Parameter picklable. Closes #20726 2014-03-27 11:31:43 -04:00
Yury Selivanov d930d85f12 Issue #20786: Fix signatures for dict.__delitem__ and property.__delete__ 2014-03-02 12:25:27 -05:00
Yury Selivanov 056e265491 Issue #20786: Fix signatures for dict.__delitem__ and property.__delete__ 2014-03-02 12:25:27 -05:00
Yury Selivanov a773de040d inspect.signature: Check for function-like objects before builtins. Issue #17159 2014-02-21 18:30:53 -05:00
Yury Selivanov 8c185ee12e inspect: Fix getfullargspec to support builtin module-level functions. Issue #20711 2014-02-21 01:32:42 -05:00
Yury Selivanov 57d240ef64 inspect: Fix getfullargspec() to not to follow __wrapped__ chains
Initial patch by Nick Coghlan.
2014-02-19 16:27:23 -05:00
Yury Selivanov 34ce99f66d Mangle __parameters in __annotations__ dict properly. Issue #20625. 2014-02-18 12:49:41 -05:00
Yury Selivanov 8dfb4576a9 inspect.signature: Check for function-like objects before builtins. Issue #17159 2014-02-21 18:30:53 -05:00
Yury Selivanov d224b6a796 inspect: Fix getfullargspec to support builtin module-level functions. Issue #20711 2014-02-21 01:32:42 -05:00
Yury Selivanov ff385b89f4 inspect: Fix getfullargspec() to not to follow __wrapped__ chains
Initial patch by Nick Coghlan.
2014-02-19 16:27:23 -05:00
Yury Selivanov 026019f89b Mangle __parameters in __annotations__ dict properly. Issue #20625. 2014-02-18 12:49:41 -05:00
Larry Hastings 2623c8c23c Issue #20530: Argument Clinic's signature format has been revised again.
The new syntax is highly human readable while still preventing false
positives.  The syntax also extends Python syntax to denote "self" and
positional-only parameters, allowing inspect.Signature objects to be
totally accurate for all supported builtins in Python 3.4.
2014-02-08 22:15:29 -08:00
Serhiy Storchaka f28ba369dd Issue #20532: Tests which use _testcapi now are marked as CPython only. 2014-02-07 10:10:55 +02:00
Yury Selivanov 7d2bfed7a2 inspect.signature: Add (restore) support for builtin classes #20473 2014-02-03 02:46:07 -05:00
Yury Selivanov 145dff8567 inspect.tests: Fix tests to work on python built with '--without-doc-strings' #20471 2014-02-01 13:49:29 -05:00
Yury Selivanov 63da7c7b0c inspect.signature: Support duck-types of Python functions (Cython, for instance) #17159 2014-01-31 14:48:37 -05:00
Yury Selivanov 0860a0bd3f inspect.classify_class_attrs: Classify object.__new__ and __init__ correctly #18801 2014-01-31 14:28:44 -05:00
Yury Selivanov 0486f819c9 inspect.signature: Make sure that if a callable object has '_patialmethod'
attribute, that attribute is an instance of 'functools.partialmethod'.
2014-01-29 12:18:59 -05:00
Yury Selivanov 4cb939174c inspect.test.getfullargspec: Add a unittest to ensure correct annotations
handling #17481
2014-01-29 11:54:12 -05:00
Yury Selivanov d82eddcf05 inspect.getfullargspec: Use inspect.signature API behind the scenes #17481 2014-01-29 11:24:39 -05:00
Yury Selivanov 07a9e452ac inspect.Signature: ensure that non-default params don't follow default ones #20427 2014-01-29 10:58:16 -05:00
Yury Selivanov 76c6c593ed inspect.signature: Add support for decorated (wrapped) builtins #20425 2014-01-29 10:52:57 -05:00
Yury Selivanov b77511da92 inspect.Signature: Make from_builtin to raise an exception if no signature can
be provided #20422
2014-01-29 10:46:14 -05:00
Yury Selivanov 38b0d5a778 inspect.Signature.bind: Fix pos-only params with defaults; fix *args in named args #19140
Initial patch by Yann Kaiser (epsy).
2014-01-28 17:27:39 -05:00
Yury Selivanov 62560fb19a inspect.signature: Handle bound methods with '(*args)' signature correctly #20401 2014-01-28 12:26:24 -05:00
Yury Selivanov d65bc70db0 inspect.tests: Remove redundant unittest
The removed unittest duplicates the other one (test_signature_on_builtins_no_signature)
2014-01-28 12:19:52 -05:00
Yury Selivanov e7dcc5e97a inspect.signature: Support classes without user-defined __init__/__new__ #20308 2014-01-27 19:29:45 -05:00
Yury Selivanov da5fe4f2da inspect.signature: Add support for 'functools.partialmethod' #20223 2014-01-27 17:28:37 -05:00
Yury Selivanov 2393dca472 inspect.signature: Use '/' to separate positional-only parameters from
the rest in Signature.__str__. #20356
2014-01-27 15:07:58 -05:00
Yury Selivanov 2eed8b7da0 inspect.getfile: Don't crash on classes without '__module__' attribute #20372
Some classes defined in C may not have the '__module__' attribute, so
we now handle this case to avoid having unexepected AttributeError.
2014-01-27 13:24:56 -05:00
Larry Hastings 5c66189e88 Issue #20189: Four additional builtin types (PyTypeObject,
PyMethodDescr_Type, _PyMethodWrapper_Type, and PyWrapperDescr_Type)
have been modified to provide introspection information for builtins.
Also: many additional Lib, test suite, and Argument Clinic fixes.
2014-01-24 06:17:25 -08:00
Larry Hastings 2a727916c5 Issue #20226: Major improvements to Argument Clinic.
* You may now specify an expression as the default value for a
  parameter!  Example: "sys.maxsize - 1".  This support is
  intentionally quite limited; you may only use values that
  can be represented as static C values.
* Removed "doc_default", simplified support for "c_default"
  and "py_default".  (I'm not sure we still even need
  "py_default", but I'm leaving it in for now in case a
  use presents itself.)
* Parameter lines support a trailing '\\' as a line
  continuation character, allowing you to break up long lines.
* The argument parsing code generated when supporting optional
  groups now uses PyTuple_GET_SIZE instead of PyTuple_GetSize,
  leading to a 850% speedup in parsing.  (Just kidding, this
  is an unmeasurable difference.)
* A bugfix for the recent regression where the generated
  prototype from pydoc for builtins would be littered with
  unreadable "=<object ...>"" default values for parameters
  that had no default value.
* Converted some asserts into proper failure messages.
* Many doc improvements and fixes.
2014-01-16 11:32:01 -08:00
Larry Hastings 16c5191ab3 Issue #20144: Argument Clinic now supports simple constants as parameter
default values.  inspect.Signature correspondingly supports them in
__text_signature__ fields for builtins.
2014-01-07 11:53:01 -08:00
Serhiy Storchaka b12cb6a550 Issue #19535: Fixed test_docxmlrpc, test_functools, test_inspect, and
test_statistics when python is run with -OO.
2013-12-08 18:16:18 +02:00
Larry Hastings fcafe43320 Fix inspect.signature tests for builtins when docstrings are compiled out. 2013-11-23 17:35:48 -08:00
Larry Hastings 44e2eaab54 Issue #19674: inspect.signature() now produces a correct signature
for some builtins.
2013-11-23 15:37:55 -08:00
Ethan Furman b0c84cdaac Issue #19030: final pieces for proper location of various class attributes located in the metaclass.
Okay, hopefully the very last patch for this issue.  :/

I realized when playing with Enum that the metaclass attributes weren't always displayed properly.

New patch properly locates DynamicClassAttributes, virtual class attributes (returned by __getattr__ and friends), and metaclass class attributes (if they are also in the metaclass __dir__ method).

Also had to change one line in pydoc to get this to work.

Added tests in test_inspect and test_pydoc to cover these situations.
2013-10-20 22:37:39 -07:00
Ethan Furman 63c141cacd Close #19030: inspect.getmembers and inspect.classify_class_attrs
Order of search is now:
  1. Try getattr
  2. If that throws an exception, check __dict__ directly
  3. If still not found, walk the mro looking for the eldest class that has
     the attribute (e.g. things returned by __getattr__)
  4. If none of that works (e.g. due to a buggy __dir__, __getattr__, etc.
     method or missing __slot__ attribute), ignore the attribute entirely.
2013-10-18 00:27:39 -07:00
Brett Cannon 0de3f0197b Tweak skipIf message 2013-10-02 10:58:58 -04:00
Brett Cannon 634a8fc042 Try to fix issue #19134 again 2013-10-02 10:25:42 -04:00
Brett Cannon 63f03ed3db Issue #19134: Make a test in inspect conditional on multiprocessing
being available.

Thanks to Remi Pointel for the bug report.
2013-09-30 15:21:09 -04:00
Ethan Furman e03ea37a7b Close #19030: improvements to inspect and Enum.
inspect.getmembers and inspect.classify_class_attrs now search the metaclass
mro for types.DynamicClassAttributes (what use to be called
enum._RouteClassAttributeToGetattr); in part this means that these two
functions no longer rely solely on dir().

Besides now returning more accurate information, these improvements also
allow a more helpful help() on Enum classes.
2013-09-25 07:14:41 -07:00
Nick Coghlan f94a16b494 Close #18626: add a basic CLI for the inspect module 2013-09-22 22:46:49 +10:00
Serhiy Storchaka 1e0d82cece Issue #18830: inspect.getclasstree() no more produces duplicated entries even
when input list contains duplicates.
2013-09-05 17:16:12 +03:00
Serhiy Storchaka 362c1b513d Issue #18830: inspect.getclasstree() no more produces duplicated entries even
when input list contains duplicates.
2013-09-05 17:14:32 +03:00
Nick Coghlan e8c45d6d0e Close #13266: Add inspect.unwrap
Initial patch by Daniel Urban and Aaron Iles
2013-07-28 20:00:01 +10:00
Ezio Melotti 0503de9c83 #17526: merge with 3.3. 2013-03-30 05:19:06 +02:00
Ezio Melotti 1b145927d7 #17526: fix an IndexError raised while passing code without filename to inspect.findsource(). Initial patch by Tyler Doyle. 2013-03-30 05:17:24 +02:00
Antoine Pitrou 64a5562f4c Issue #17071: Signature.bind() now works when one of the keyword arguments is named self. 2013-01-29 21:21:56 +01:00
Antoine Pitrou bd41d1b14c Issue #17071: Signature.bind() now works when one of the keyword arguments is named ``self``. 2013-01-29 21:20:57 +01:00