1*cda5da8dSAndroid Build Coastguard Workerimport _signal 2*cda5da8dSAndroid Build Coastguard Workerfrom _signal import * 3*cda5da8dSAndroid Build Coastguard Workerfrom enum import IntEnum as _IntEnum 4*cda5da8dSAndroid Build Coastguard Worker 5*cda5da8dSAndroid Build Coastguard Worker_globals = globals() 6*cda5da8dSAndroid Build Coastguard Worker 7*cda5da8dSAndroid Build Coastguard Worker_IntEnum._convert_( 8*cda5da8dSAndroid Build Coastguard Worker 'Signals', __name__, 9*cda5da8dSAndroid Build Coastguard Worker lambda name: 10*cda5da8dSAndroid Build Coastguard Worker name.isupper() 11*cda5da8dSAndroid Build Coastguard Worker and (name.startswith('SIG') and not name.startswith('SIG_')) 12*cda5da8dSAndroid Build Coastguard Worker or name.startswith('CTRL_')) 13*cda5da8dSAndroid Build Coastguard Worker 14*cda5da8dSAndroid Build Coastguard Worker_IntEnum._convert_( 15*cda5da8dSAndroid Build Coastguard Worker 'Handlers', __name__, 16*cda5da8dSAndroid Build Coastguard Worker lambda name: name in ('SIG_DFL', 'SIG_IGN')) 17*cda5da8dSAndroid Build Coastguard Worker 18*cda5da8dSAndroid Build Coastguard Workerif 'pthread_sigmask' in _globals: 19*cda5da8dSAndroid Build Coastguard Worker _IntEnum._convert_( 20*cda5da8dSAndroid Build Coastguard Worker 'Sigmasks', __name__, 21*cda5da8dSAndroid Build Coastguard Worker lambda name: name in ('SIG_BLOCK', 'SIG_UNBLOCK', 'SIG_SETMASK')) 22*cda5da8dSAndroid Build Coastguard Worker 23*cda5da8dSAndroid Build Coastguard Worker 24*cda5da8dSAndroid Build Coastguard Workerdef _int_to_enum(value, enum_klass): 25*cda5da8dSAndroid Build Coastguard Worker """Convert a numeric value to an IntEnum member. 26*cda5da8dSAndroid Build Coastguard Worker If it's not a known member, return the numeric value itself. 27*cda5da8dSAndroid Build Coastguard Worker """ 28*cda5da8dSAndroid Build Coastguard Worker try: 29*cda5da8dSAndroid Build Coastguard Worker return enum_klass(value) 30*cda5da8dSAndroid Build Coastguard Worker except ValueError: 31*cda5da8dSAndroid Build Coastguard Worker return value 32*cda5da8dSAndroid Build Coastguard Worker 33*cda5da8dSAndroid Build Coastguard Worker 34*cda5da8dSAndroid Build Coastguard Workerdef _enum_to_int(value): 35*cda5da8dSAndroid Build Coastguard Worker """Convert an IntEnum member to a numeric value. 36*cda5da8dSAndroid Build Coastguard Worker If it's not an IntEnum member return the value itself. 37*cda5da8dSAndroid Build Coastguard Worker """ 38*cda5da8dSAndroid Build Coastguard Worker try: 39*cda5da8dSAndroid Build Coastguard Worker return int(value) 40*cda5da8dSAndroid Build Coastguard Worker except (ValueError, TypeError): 41*cda5da8dSAndroid Build Coastguard Worker return value 42*cda5da8dSAndroid Build Coastguard Worker 43*cda5da8dSAndroid Build Coastguard Worker 44*cda5da8dSAndroid Build Coastguard Worker# Similar to functools.wraps(), but only assign __doc__. 45*cda5da8dSAndroid Build Coastguard Worker# __module__ should be preserved, 46*cda5da8dSAndroid Build Coastguard Worker# __name__ and __qualname__ are already fine, 47*cda5da8dSAndroid Build Coastguard Worker# __annotations__ is not set. 48*cda5da8dSAndroid Build Coastguard Workerdef _wraps(wrapped): 49*cda5da8dSAndroid Build Coastguard Worker def decorator(wrapper): 50*cda5da8dSAndroid Build Coastguard Worker wrapper.__doc__ = wrapped.__doc__ 51*cda5da8dSAndroid Build Coastguard Worker return wrapper 52*cda5da8dSAndroid Build Coastguard Worker return decorator 53*cda5da8dSAndroid Build Coastguard Worker 54*cda5da8dSAndroid Build Coastguard Worker@_wraps(_signal.signal) 55*cda5da8dSAndroid Build Coastguard Workerdef signal(signalnum, handler): 56*cda5da8dSAndroid Build Coastguard Worker handler = _signal.signal(_enum_to_int(signalnum), _enum_to_int(handler)) 57*cda5da8dSAndroid Build Coastguard Worker return _int_to_enum(handler, Handlers) 58*cda5da8dSAndroid Build Coastguard Worker 59*cda5da8dSAndroid Build Coastguard Worker 60*cda5da8dSAndroid Build Coastguard Worker@_wraps(_signal.getsignal) 61*cda5da8dSAndroid Build Coastguard Workerdef getsignal(signalnum): 62*cda5da8dSAndroid Build Coastguard Worker handler = _signal.getsignal(signalnum) 63*cda5da8dSAndroid Build Coastguard Worker return _int_to_enum(handler, Handlers) 64*cda5da8dSAndroid Build Coastguard Worker 65*cda5da8dSAndroid Build Coastguard Worker 66*cda5da8dSAndroid Build Coastguard Workerif 'pthread_sigmask' in _globals: 67*cda5da8dSAndroid Build Coastguard Worker @_wraps(_signal.pthread_sigmask) 68*cda5da8dSAndroid Build Coastguard Worker def pthread_sigmask(how, mask): 69*cda5da8dSAndroid Build Coastguard Worker sigs_set = _signal.pthread_sigmask(how, mask) 70*cda5da8dSAndroid Build Coastguard Worker return set(_int_to_enum(x, Signals) for x in sigs_set) 71*cda5da8dSAndroid Build Coastguard Worker 72*cda5da8dSAndroid Build Coastguard Worker 73*cda5da8dSAndroid Build Coastguard Workerif 'sigpending' in _globals: 74*cda5da8dSAndroid Build Coastguard Worker @_wraps(_signal.sigpending) 75*cda5da8dSAndroid Build Coastguard Worker def sigpending(): 76*cda5da8dSAndroid Build Coastguard Worker return {_int_to_enum(x, Signals) for x in _signal.sigpending()} 77*cda5da8dSAndroid Build Coastguard Worker 78*cda5da8dSAndroid Build Coastguard Worker 79*cda5da8dSAndroid Build Coastguard Workerif 'sigwait' in _globals: 80*cda5da8dSAndroid Build Coastguard Worker @_wraps(_signal.sigwait) 81*cda5da8dSAndroid Build Coastguard Worker def sigwait(sigset): 82*cda5da8dSAndroid Build Coastguard Worker retsig = _signal.sigwait(sigset) 83*cda5da8dSAndroid Build Coastguard Worker return _int_to_enum(retsig, Signals) 84*cda5da8dSAndroid Build Coastguard Worker 85*cda5da8dSAndroid Build Coastguard Worker 86*cda5da8dSAndroid Build Coastguard Workerif 'valid_signals' in _globals: 87*cda5da8dSAndroid Build Coastguard Worker @_wraps(_signal.valid_signals) 88*cda5da8dSAndroid Build Coastguard Worker def valid_signals(): 89*cda5da8dSAndroid Build Coastguard Worker return {_int_to_enum(x, Signals) for x in _signal.valid_signals()} 90*cda5da8dSAndroid Build Coastguard Worker 91*cda5da8dSAndroid Build Coastguard Worker 92*cda5da8dSAndroid Build Coastguard Workerdel _globals, _wraps 93