[issue38854] Decorator with paren tokens in arguments breaks inspect.getsource

2022-02-28 Thread Adam Hopkins


Change by Adam Hopkins :


--
nosy: +ahopkins
nosy_count: 3.0 -> 4.0
pull_requests: +29736
pull_request: https://github.com/python/cpython/pull/31605

___
Python tracker 
<https://bugs.python.org/issue38854>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue46873] inspect.getsource with some lambdas in decorators does not get the full source

2022-02-27 Thread Adam Hopkins


Adam Hopkins  added the comment:

Duplicate of https://bugs.python.org/issue38854

Sorry I didn't come across our before submitting.

--
resolution:  -> duplicate
stage: patch review -> resolved
status: open -> closed

___
Python tracker 
<https://bugs.python.org/issue46873>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue46873] inspect.getsource with some lambdas in decorators does not get the full source

2022-02-27 Thread Adam Hopkins


Change by Adam Hopkins :


--
keywords: +patch
pull_requests: +29728
stage:  -> patch review
pull_request: https://github.com/python/cpython/pull/31605

___
Python tracker 
<https://bugs.python.org/issue46873>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue46873] inspect.getsource with some lambdas in decorators does not get the full source

2022-02-27 Thread Adam Hopkins


Adam Hopkins  added the comment:

Sorry about that. I am doing some more digging to see if I can find the route 
of it and a proposal for a non-breaking patch. The problem seems to be in 
BlockFinder.tokeneater.

--
type: behavior -> 
versions: +Python 3.7, Python 3.8

___
Python tracker 
<https://bugs.python.org/issue46873>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue46873] inspect.getsource with some lambdas in decorators does not get the full source

2022-02-27 Thread Adam Hopkins


New submission from Adam Hopkins :

I believe the following produces an unexpected behavior:

from inspect import getsource


def bar(*funcs):
def decorator(func):
return func

return decorator


@bar(lambda x: bool(True), lambda x: False)
async def foo():
...


print(getsource(foo))

The output shows only the decorator declaration and none of the function:

@bar(lambda x: bool(True), lambda x: False)


>From my investigation, it seems like this requires the following conditions to 
>be true:
- lambdas are passed in decorator arguments
- there is more than one lambda
- at least one of the lambdas has a function call

Passing the lambdas as default function arguments seems okay:

async def foo(bar=[lambda x: bool(True), lambda x: False]):
...

A single lambda seems okay:

@bar(lambda x: bool(True))
async def foo():
...

Lambdas with no function calls also seem okay:

@bar(lambda x: not x, lambda: True)
async def foo():
...

Tested this on:
- Python 3.10.2
- Python 3.9.9
- Python 3.8.11
- Python 3.7.12

--
messages: 414149
nosy: ahopkins2
priority: normal
severity: normal
status: open
title: inspect.getsource with some lambdas in decorators does not get the full 
source
versions: Python 3.10, Python 3.7, Python 3.8, Python 3.9

___
Python tracker 
<https://bugs.python.org/issue46873>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com