def patch_all(socket=True, dns=True, time=True, select=True, thread=True, os=True, ssl=True, subprocess=True, sys=False, aggressive=True, Event=True, builtins=True, signal=True, queue=True, contextvars=True, **kwargs): """ Do all of the default monkey patching (calls every other applicable function in this module). :return: A true value if patching all modules wasn't cancelled, a false value if it was. .. versionchanged:: 1.1 Issue a :mod:`warning <warnings>` if this function is called multiple times with different arguments. The second and subsequent calls will only add more patches, they can never remove existing patches by setting an argument to ``False``. .. versionchanged:: 1.1 Issue a :mod:`warning <warnings>` if this function is called with ``os=False`` and ``signal=True``. This will cause SIGCHLD handlers to not be called. This may be an error in the future. .. versionchanged:: 1.3a2 ``Event`` defaults to True. .. versionchanged:: 1.3b1 Defined the return values. .. versionchanged:: 1.3b1 Add ``**kwargs`` for the benefit of event subscribers. CAUTION: gevent may add and interpret additional arguments in the future, so it is suggested to use prefixes for kwarg values to be interpreted by plugins, for example, `patch_all(mylib_futures=True)`. .. versionchanged:: 1.3.5 Add *queue*, defaulting to True, for Python 3.7. .. versionchanged:: 1.5 Remove the ``httplib`` argument. Previously, setting it raised a ``ValueError``. .. versionchanged:: 1.5a3 Add the ``contextvars`` argument. .. versionchanged:: 1.5 Better handling of patching more than once. """ # pylint:disable=too-many-locals,too-many-branches # Check to see if they're changing the patched list _warnings, first_time, modules_to_patch = _check_repatching(**locals()) if not modules_to_patch: # Nothing to do. Either the arguments were identical to what # we previously did, or they specified false values # for things we had previously patched. _process_warnings(_warnings) return for k, v in modules_to_patch.items(): locals()[k] = v from gevent import events try: _notify_patch(events.GeventWillPatchAllEvent(modules_to_patch, kwargs), _warnings) except events.DoNotPatch: return False # order is important if os: patch_os() if time: patch_time() if thread: patch_thread(Event=Event, _warnings=_warnings) # sys must be patched after thread. in other cases threading._shutdown will be # initiated to _MainThread with real thread ident if sys: patch_sys() if socket: patch_socket(dns=dns, aggressive=aggressive) if select: patch_select(aggressive=aggressive) if ssl: patch_ssl(_warnings=_warnings, _first_time=first_time) if subprocess: patch_subprocess() if builtins: patch_builtins() if signal: patch_signal() if queue: patch_queue() if contextvars: patch_contextvars() _notify_patch( events.GeventDidPatchBuiltinModulesEvent(modules_to_patch, kwargs), _warnings) _notify_patch(events.GeventDidPatchAllEvent(modules_to_patch, kwargs), _warnings) _process_warnings(_warnings) return True
def patch_all( socket=True, dns=True, time=True, select=True, thread=True, os=True, ssl=True, httplib=False, # Deprecated, to be removed. subprocess=True, sys=False, aggressive=True, Event=True, builtins=True, signal=True, **kwargs): """ Do all of the default monkey patching (calls every other applicable function in this module). :return: A true value if patching all modules wasn't cancelled, a false value if it was. .. versionchanged:: 1.1 Issue a :mod:`warning <warnings>` if this function is called multiple times with different arguments. The second and subsequent calls will only add more patches, they can never remove existing patches by setting an argument to ``False``. .. versionchanged:: 1.1 Issue a :mod:`warning <warnings>` if this function is called with ``os=False`` and ``signal=True``. This will cause SIGCHLD handlers to not be called. This may be an error in the future. .. versionchanged:: 1.3a2 ``Event`` defaults to True. .. versionchanged:: 1.3b1 Defined the return values. .. versionchanged:: 1.3b1 Add ``**kwargs`` for the benefit of event subscribers. CAUTION: gevent may add and interpret additional arguments in the future, so it is suggested to use prefixes for kwarg values to be interpreted by plugins, for example, `patch_all(mylib_futures=True)`. """ # pylint:disable=too-many-locals,too-many-branches # Check to see if they're changing the patched list _warnings, first_time, modules_to_patch = _check_repatching(**locals()) if not _warnings and not first_time: # Nothing to do, identical args to what we just # did return from gevent import events try: _notify_patch(events.GeventWillPatchAllEvent(modules_to_patch, kwargs), _warnings) except events.DoNotPatch: return False # order is important if os: patch_os() if time: patch_time() if thread: patch_thread(Event=Event, _warnings=_warnings) # sys must be patched after thread. in other cases threading._shutdown will be # initiated to _MainThread with real thread ident if sys: patch_sys() if socket: patch_socket(dns=dns, aggressive=aggressive) if select: patch_select(aggressive=aggressive) if ssl: patch_ssl(_warnings=_warnings, _first_time=first_time) if httplib: raise ValueError( 'gevent.httplib is no longer provided, httplib must be False') if subprocess: patch_subprocess() if builtins: patch_builtins() if signal: patch_signal() _notify_patch( events.GeventDidPatchBuiltinModulesEvent(modules_to_patch, kwargs), _warnings) _notify_patch(events.GeventDidPatchAllEvent(modules_to_patch, kwargs), _warnings) _process_warnings(_warnings) return True