summaryrefslogtreecommitdiff
path: root/Lib/idlelib
diff options
context:
space:
mode:
authorTerry Jan Reedy <tjreedy@udel.edu>2019-07-09 14:37:25 -0400
committerGitHub <noreply@github.com>2019-07-09 14:37:25 -0400
commit6aeb2fe606408aae14c246470794f1303b3be812 (patch)
tree48782e72a5bd32ede665a7fd8554231ed8cd1c63 /Lib/idlelib
parent3a3db970de344efbb4017fb9dde9204f0fd4bbdc (diff)
downloadcpython-git-6aeb2fe606408aae14c246470794f1303b3be812.tar.gz
bpo-26806: IDLE should run without docstrings (#14657)
After fcf1d00, IDLE startup failed with python compiled without docstrings.
Diffstat (limited to 'Lib/idlelib')
-rw-r--r--Lib/idlelib/idle_test/test_run.py8
-rw-r--r--Lib/idlelib/run.py19
2 files changed, 19 insertions, 8 deletions
diff --git a/Lib/idlelib/idle_test/test_run.py b/Lib/idlelib/idle_test/test_run.py
index d0f1e9207b..cad0b4d98f 100644
--- a/Lib/idlelib/idle_test/test_run.py
+++ b/Lib/idlelib/idle_test/test_run.py
@@ -292,6 +292,14 @@ class TestSysRecursionLimitWrappers(unittest.TestCase):
new_reclimit = sys.getrecursionlimit()
self.assertEqual(new_reclimit, orig_reclimit)
+ def test_fixdoc(self):
+ def func(): "docstring"
+ run.fixdoc(func, "more")
+ self.assertEqual(func.__doc__, "docstring\n\nmore")
+ func.__doc__ = None
+ run.fixdoc(func, "more")
+ self.assertEqual(func.__doc__, "more")
+
if __name__ == '__main__':
unittest.main(verbosity=2)
diff --git a/Lib/idlelib/run.py b/Lib/idlelib/run.py
index c6ed76b23a..41e0ded440 100644
--- a/Lib/idlelib/run.py
+++ b/Lib/idlelib/run.py
@@ -307,7 +307,12 @@ def fix_scaling(root):
font['size'] = round(-0.75*size)
+def fixdoc(fun, text):
+ tem = (fun.__doc__ + '\n\n') if fun.__doc__ is not None else ''
+ fun.__doc__ = tem + textwrap.fill(textwrap.dedent(text))
+
RECURSIONLIMIT_DELTA = 30
+
def install_recursionlimit_wrappers():
"""Install wrappers to always add 30 to the recursion limit."""
# see: bpo-26806
@@ -329,19 +334,17 @@ def install_recursionlimit_wrappers():
return setrecursionlimit.__wrapped__(limit + RECURSIONLIMIT_DELTA)
- setrecursionlimit.__doc__ += "\n\n" + textwrap.fill(textwrap.dedent(f"""\
- This IDLE wrapper adds {RECURSIONLIMIT_DELTA} to prevent possible
- uninterruptible loops.
- """).strip())
+ fixdoc(setrecursionlimit, f"""\
+ This IDLE wrapper adds {RECURSIONLIMIT_DELTA} to prevent possible
+ uninterruptible loops.""")
@functools.wraps(sys.getrecursionlimit)
def getrecursionlimit():
return getrecursionlimit.__wrapped__() - RECURSIONLIMIT_DELTA
- getrecursionlimit.__doc__ += "\n\n" + textwrap.fill(textwrap.dedent(f"""\
- This IDLE wrapper subtracts {RECURSIONLIMIT_DELTA} to compensate for
- the {RECURSIONLIMIT_DELTA} IDLE adds when setting the limit.
- """).strip())
+ fixdoc(getrecursionlimit, f"""\
+ This IDLE wrapper subtracts {RECURSIONLIMIT_DELTA} to compensate
+ for the {RECURSIONLIMIT_DELTA} IDLE adds when setting the limit.""")
# add the delta to the default recursion limit, to compensate
sys.setrecursionlimit(sys.getrecursionlimit() + RECURSIONLIMIT_DELTA)