summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikita Sobolev <mail@sobolevn.me>2023-04-17 23:33:22 (GMT)
committerGitHub <noreply@github.com>2023-04-17 23:33:22 (GMT)
commitb57f55c23e15654e9dd77680ff1462603e360b76 (patch)
tree29a6455de3cd2cc12b786b472f4ba9ca433de7e0
parentd83faf7f1ba2de95e98e3eeb5ce9009d9cd62192 (diff)
downloadcpython-b57f55c23e15654e9dd77680ff1462603e360b76.zip
cpython-b57f55c23e15654e9dd77680ff1462603e360b76.tar.gz
cpython-b57f55c23e15654e9dd77680ff1462603e360b76.tar.bz2
gh-103449: Fix a bug in dataclass docstring generation (#103454)
-rw-r--r--Lib/dataclasses.py9
-rw-r--r--Lib/test/test_dataclasses.py13
-rw-r--r--Misc/NEWS.d/next/Library/2023-04-11-21-38-39.gh-issue-103449.-nxmhb.rst1
3 files changed, 21 insertions, 2 deletions
diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py
index 4026c8b..a73cdc2 100644
--- a/Lib/dataclasses.py
+++ b/Lib/dataclasses.py
@@ -1128,8 +1128,13 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen,
if not getattr(cls, '__doc__'):
# Create a class doc-string.
- cls.__doc__ = (cls.__name__ +
- str(inspect.signature(cls)).replace(' -> None', ''))
+ try:
+ # In some cases fetching a signature is not possible.
+ # But, we surely should not fail in this case.
+ text_sig = str(inspect.signature(cls)).replace(' -> None', '')
+ except (TypeError, ValueError):
+ text_sig = ''
+ cls.__doc__ = (cls.__name__ + text_sig)
if match_args:
# I could probably compute this once
diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py
index 6888680..ae8bfcc 100644
--- a/Lib/test/test_dataclasses.py
+++ b/Lib/test/test_dataclasses.py
@@ -2297,6 +2297,19 @@ class TestDocString(unittest.TestCase):
self.assertDocStrEqual(C.__doc__, "C(x:collections.deque=<factory>)")
+ def test_docstring_with_no_signature(self):
+ # See https://github.com/python/cpython/issues/103449
+ class Meta(type):
+ __call__ = dict
+ class Base(metaclass=Meta):
+ pass
+
+ @dataclass
+ class C(Base):
+ pass
+
+ self.assertDocStrEqual(C.__doc__, "C")
+
class TestInit(unittest.TestCase):
def test_base_has_init(self):
diff --git a/Misc/NEWS.d/next/Library/2023-04-11-21-38-39.gh-issue-103449.-nxmhb.rst b/Misc/NEWS.d/next/Library/2023-04-11-21-38-39.gh-issue-103449.-nxmhb.rst
new file mode 100644
index 0000000..0b2b47a
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2023-04-11-21-38-39.gh-issue-103449.-nxmhb.rst
@@ -0,0 +1 @@
+Fix a bug in doc string generation in :func:`dataclasses.dataclass`.