diff options
author | mathieui <mathieui@mathieui.net> | 2016-10-05 20:18:51 +0200 |
---|---|---|
committer | mathieui <mathieui@mathieui.net> | 2016-10-05 20:19:07 +0200 |
commit | a0a37c19ffd5ae530341e7e306413a0a6c95fab2 (patch) | |
tree | 6352dbe5508b0abeb983a646f48aba585070eed8 | |
parent | 1b5fe57a5eb158d34d70130ba69a5e5a5fd850e4 (diff) | |
download | slixmpp-a0a37c19ffd5ae530341e7e306413a0a6c95fab2.tar.gz slixmpp-a0a37c19ffd5ae530341e7e306413a0a6c95fab2.tar.bz2 slixmpp-a0a37c19ffd5ae530341e7e306413a0a6c95fab2.tar.xz slixmpp-a0a37c19ffd5ae530341e7e306413a0a6c95fab2.zip |
Remove monkeypatching hack on the event loop
This allowed us to schedule events in-order later in the event loop, but
was detrimental to using other event loops and debugging.
-rw-r--r-- | slixmpp/xmlstream/asyncio.py | 30 | ||||
-rw-r--r-- | slixmpp/xmlstream/xmlstream.py | 4 |
2 files changed, 3 insertions, 31 deletions
diff --git a/slixmpp/xmlstream/asyncio.py b/slixmpp/xmlstream/asyncio.py index 0e0f610a..b42b366a 100644 --- a/slixmpp/xmlstream/asyncio.py +++ b/slixmpp/xmlstream/asyncio.py @@ -1,38 +1,10 @@ """ -A module that monkey patches the standard asyncio module to add an -idle_call() method to the main loop. This method is used to execute a -callback whenever the loop is not busy handling anything else. This means -that it is a callback with lower priority than IO, timer, or even -call_soon() ones. These callback are called only once each. +asyncio-related utilities """ import asyncio -from asyncio import events from functools import wraps -import collections - -def idle_call(self, callback): - if asyncio.iscoroutinefunction(callback): - raise TypeError("coroutines cannot be used with idle_call()") - handle = events.Handle(callback, [], self) - self._idle.append(handle) - -def my_run_once(self): - if self._idle: - self._ready.append(events.Handle(lambda: None, (), self)) - real_run_once(self) - if self._idle: - handle = self._idle.popleft() - handle._run() - -cls = asyncio.get_event_loop().__class__ - -cls._idle = collections.deque() -cls.idle_call = idle_call -real_run_once = cls._run_once -cls._run_once = my_run_once - def future_wrapper(func): """ Make sure the result of a function call is an asyncio.Future() diff --git a/slixmpp/xmlstream/xmlstream.py b/slixmpp/xmlstream/xmlstream.py index c491746d..a691d34c 100644 --- a/slixmpp/xmlstream/xmlstream.py +++ b/slixmpp/xmlstream/xmlstream.py @@ -380,7 +380,7 @@ class XMLStream(asyncio.BaseProtocol): elif self.xml_depth == 1: # A stanza is an XML element that is a direct child of # the root element, hence the check of depth == 1 - self.loop.idle_call(functools.partial(self.__spawn_event, xml)) + self._spawn_event(xml) if self.xml_root is not None: # Keep the root element empty of children to # save on memory use. @@ -893,7 +893,7 @@ class XMLStream(asyncio.BaseProtocol): stanza['lang'] = self.peer_default_lang return stanza - def __spawn_event(self, xml): + def _spawn_event(self, xml): """ Analyze incoming XML stanzas and convert them into stanza objects if applicable and queue stream events to be processed |