import _signal
from _signal import *
-from functools import wraps as _wraps
from enum import IntEnum as _IntEnum
_globals = globals()
return value
+# Similar to functools.wraps(), but only assign __doc__.
+# __module__ should be preserved,
+# __name__ and __qualname__ are already fine,
+# __annotations__ is not set.
+def _wraps(wrapped):
+ def decorator(wrapper):
+ wrapper.__doc__ = wrapped.__doc__
+ return wrapper
+ return decorator
+
@_wraps(_signal.signal)
def signal(signalnum, handler):
handler = _signal.signal(_enum_to_int(signalnum), _enum_to_int(handler))
def pthread_sigmask(how, mask):
sigs_set = _signal.pthread_sigmask(how, mask)
return set(_int_to_enum(x, Signals) for x in sigs_set)
- pthread_sigmask.__doc__ = _signal.pthread_sigmask.__doc__
if 'sigpending' in _globals:
def sigwait(sigset):
retsig = _signal.sigwait(sigset)
return _int_to_enum(retsig, Signals)
- sigwait.__doc__ = _signal.sigwait
if 'valid_signals' in _globals:
import errno
+import inspect
import os
import random
import signal
self.assertIsInstance(sig, signal.Signals)
self.assertEqual(sys.platform, "win32")
+ def test_functions_module_attr(self):
+ # Issue #27718: If __all__ is not defined all non-builtin functions
+ # should have correct __module__ to be displayed by pydoc.
+ for name in dir(signal):
+ value = getattr(signal, name)
+ if inspect.isroutine(value) and not inspect.isbuiltin(value):
+ self.assertEqual(value.__module__, 'signal')
+
@unittest.skipIf(sys.platform == "win32", "Not valid on Windows")
class PosixTests(unittest.TestCase):