Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

gh-89263: Add typing.get_overloads #31716

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 37 commits into from
Apr 16, 2022
Merged
Changes from 1 commit
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
2ee377d
initial
JelleZijlstra Mar 6, 2022
831b565
Implementation, tests, and docs
JelleZijlstra Mar 7, 2022
f03f8a9
fix versionadded
JelleZijlstra Mar 7, 2022
404668a
Merge branch 'main' into funcregistry
JelleZijlstra Mar 8, 2022
7a5b0d1
make get_key_for_callable private
JelleZijlstra Mar 8, 2022
6998255
doc updates; remove unnecessary try-except
JelleZijlstra Mar 9, 2022
26bb908
Merge remote-tracking branch 'upstream/main' into funcregistry
JelleZijlstra Mar 27, 2022
f52b757
rename method
JelleZijlstra Mar 27, 2022
fc6a925
Don't store singledispatch in the registry
JelleZijlstra Mar 27, 2022
b524244
more tests
JelleZijlstra Mar 27, 2022
e95558e
and another
JelleZijlstra Mar 27, 2022
31fd72d
fix line length in new tests
JelleZijlstra Mar 27, 2022
7041ad3
Update Doc/library/functools.rst
JelleZijlstra Mar 27, 2022
e26b0db
Update Doc/library/typing.rst
JelleZijlstra Mar 27, 2022
1bf89fb
only for overload
JelleZijlstra Apr 2, 2022
83ac432
Merge remote-tracking branch 'upstream/main' into funcregistry
JelleZijlstra Apr 2, 2022
dfdbdc7
fix tests
JelleZijlstra Apr 2, 2022
e16c8d0
undo stray changes, fix NEWS entry
JelleZijlstra Apr 2, 2022
b3d2227
remove extra import
JelleZijlstra Apr 2, 2022
9727eee
Apply suggestions from code review
JelleZijlstra Apr 2, 2022
2e374b8
Apply suggestions from code review
JelleZijlstra Apr 3, 2022
ff03b12
Guido's feedback
JelleZijlstra Apr 3, 2022
17f0710
Optimizations suggested by Guido and Alex
JelleZijlstra Apr 3, 2022
2346970
inline _get_firstlineno, store outer objects for classmethod/staticme…
JelleZijlstra Apr 3, 2022
f2053a0
use defaultdict
JelleZijlstra Apr 3, 2022
b6131ad
another optimization
JelleZijlstra Apr 4, 2022
506bd66
Update Lib/typing.py
JelleZijlstra Apr 7, 2022
e9a2100
Merge remote-tracking branch 'upstream/main' into funcregistry
JelleZijlstra Apr 8, 2022
2b1a5cc
Merge remote-tracking branch 'upstream/main' into funcregistry
JelleZijlstra Apr 9, 2022
103bfd4
Simpler implementation (thanks Guido)
JelleZijlstra Apr 9, 2022
d453f7f
More comments and tests
JelleZijlstra Apr 9, 2022
450afeb
Merge remote-tracking branch 'upstream/main' into funcregistry
JelleZijlstra Apr 14, 2022
ea62287
simplify clear_overloads
JelleZijlstra Apr 14, 2022
905253c
use partial
JelleZijlstra Apr 14, 2022
debbf8a
add test
JelleZijlstra Apr 14, 2022
754c134
docs changes (thanks Alex)
JelleZijlstra Apr 14, 2022
1ad8224
Merge remote-tracking branch 'upstream/main' into funcregistry
JelleZijlstra Apr 14, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
fix line length in new tests
  • Loading branch information
JelleZijlstra committed Mar 27, 2022
commit 31fd72d66b8c60af24b267d829cfd0e2be868137
75 changes: 56 additions & 19 deletions 75 Lib/test/test_functools.py
Original file line number Diff line number Diff line change
Expand Up @@ -1900,20 +1900,34 @@ def method(self): ...

class TestVariantRegistry(unittest.TestCase):
def test_get_key_for_callable(self):
self.assertEqual(functools._get_key_for_callable(len),
"builtins.len")
self.assertEqual(functools._get_key_for_callable(py_cached_func),
f"{__name__}.py_cached_func")
self.assertEqual(functools._get_key_for_callable(MethodHolder.clsmethod),
f"{__name__}.MethodHolder.clsmethod")
self.assertEqual(functools._get_key_for_callable(MethodHolder.stmethod),
f"{__name__}.MethodHolder.stmethod")
self.assertEqual(functools._get_key_for_callable(MethodHolder.method),
f"{__name__}.MethodHolder.method")
self.assertEqual(
functools._get_key_for_callable(len),
"builtins.len",
)
self.assertEqual(
functools._get_key_for_callable(py_cached_func),
f"{__name__}.py_cached_func",
)
self.assertEqual(
functools._get_key_for_callable(MethodHolder.clsmethod),
f"{__name__}.MethodHolder.clsmethod",
)
self.assertEqual(
functools._get_key_for_callable(MethodHolder.stmethod),
f"{__name__}.MethodHolder.stmethod",
)
self.assertEqual(
functools._get_key_for_callable(MethodHolder.method),
f"{__name__}.MethodHolder.method",
)

def test_get_variants(self):
def func1(): pass
def func2(): pass
def func1():
pass

def func2():
pass

obj1 = object()
obj2 = object()
self.assertEqual(functools.get_variants(func1), [])
Expand All @@ -1928,8 +1942,12 @@ def func2(): pass
self.assertEqual(functools.get_variants(func2), [])

def test_clear_variants(self):
def func1(): pass
def func2(): pass
def func1():
pass

def func2():
pass

obj1 = object()

functools.register_variant(func1, obj1)
Expand Down Expand Up @@ -1957,14 +1975,21 @@ def test_singledispatch_interaction(self):
@functools.singledispatch
def func(obj):
return "base"

original_func = func.registry[object]
self.assertEqual(functools.get_variants(func), [original_func])

@func.register(int)
def func_int(obj):
return "int"
self.assertEqual(functools.get_variants(func), [original_func, func_int])

def weird_func(): pass
self.assertEqual(
functools.get_variants(func), [original_func, func_int]
)

def weird_func():
pass

weird_func.registry = 42
# shouldn't crash if the registry attribute exists but is not
# a mapping proxy
Expand All @@ -1975,12 +2000,15 @@ class A:
@functools.singledispatchmethod
def t(self, arg):
self.arg = "base"

@t.register(int)
def int_t(self, arg):
self.arg = "int"

@t.register(str)
def str_t(self, arg):
self.arg = "str"

expected = [
A.t.registry[object],
A.int_t,
Expand All @@ -1992,18 +2020,27 @@ def str_t(self, arg):

def test_both_singledispatch_and_overload(self):
from typing import overload
def complex_func(arg: str) -> int: ...

def complex_func(arg: str) -> int:
...

str_overload = complex_func
overload(complex_func)
def complex_func(arg: int) -> str: ...

def complex_func(arg: int) -> str:
...

int_overload = complex_func
overload(complex_func)

@functools.singledispatch
def complex_func(arg: object):
raise NotImplementedError

@complex_func.register
def str_variant(arg: str) -> int:
return int(arg)

@complex_func.register
def int_variant(arg: int) -> str:
return str(arg)
Expand All @@ -2016,7 +2053,7 @@ def int_variant(arg: int) -> str:
complex_func.registry[object],
str_variant,
int_variant,
]
],
)


Expand Down
Morty Proxy This is a proxified and sanitized view of the page, visit original site.