summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormathieui <mathieui@mathieui.net>2016-10-05 20:18:51 +0200
committermathieui <mathieui@mathieui.net>2016-10-05 20:19:07 +0200
commita0a37c19ffd5ae530341e7e306413a0a6c95fab2 (patch)
tree6352dbe5508b0abeb983a646f48aba585070eed8
parent1b5fe57a5eb158d34d70130ba69a5e5a5fd850e4 (diff)
downloadslixmpp-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.py30
-rw-r--r--slixmpp/xmlstream/xmlstream.py4
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