Skip to content

Commit

Permalink
pythongh-109818: reprlib.recursive_repr copies __type_params__ (p…
Browse files Browse the repository at this point in the history
  • Loading branch information
sobolevn authored and csm10495 committed Sep 29, 2023
1 parent 81701df commit 6a8f67e
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 0 deletions.
1 change: 1 addition & 0 deletions Lib/reprlib.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ def wrapper(self):
wrapper.__name__ = getattr(user_function, '__name__')
wrapper.__qualname__ = getattr(user_function, '__qualname__')
wrapper.__annotations__ = getattr(user_function, '__annotations__', {})
wrapper.__type_params__ = getattr(user_function, '__type_params__', ())
wrapper.__wrapped__ = user_function
return wrapper

Expand Down
11 changes: 11 additions & 0 deletions Lib/test/test_reprlib.py
Original file line number Diff line number Diff line change
Expand Up @@ -774,5 +774,16 @@ def __repr__(self):

self.assertIs(X.f, X.__repr__.__wrapped__)

def test__type_params__(self):
class My:
@recursive_repr()
def __repr__[T: str](self, default: T = '') -> str:
return default

type_params = My().__repr__.__type_params__
self.assertEqual(len(type_params), 1)
self.assertEqual(type_params[0].__name__, 'T')
self.assertEqual(type_params[0].__bound__, str)

if __name__ == "__main__":
unittest.main()
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Fix :func:`reprlib.recursive_repr` not copying ``__type_params__`` from
decorated function.

0 comments on commit 6a8f67e

Please sign in to comment.