From 5522443e0e122093080032037a783ab3d2718d3f Mon Sep 17 00:00:00 2001 From: Lance Stout Date: Fri, 1 Oct 2010 10:46:37 -0400 Subject: [PATCH] Moved getNewId and getId to XMLStream. This prepares the way for moving add_handler to XMLStream. Since stanzas, matchers, and handlers in any XML stream will typically use unique IDs, XMLStream is a good place for these methods. --- sleekxmpp/basexmpp.py | 8 -------- sleekxmpp/xmlstream/xmlstream.py | 25 +++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/sleekxmpp/basexmpp.py b/sleekxmpp/basexmpp.py index f83fc062..a522f822 100644 --- a/sleekxmpp/basexmpp.py +++ b/sleekxmpp/basexmpp.py @@ -114,20 +114,12 @@ class basexmpp(object): for plugin in self.plugin: self.plugin[plugin].post_init() - def getNewId(self): - with self.id_lock: - self.id += 1 - return self.getId() - def add_handler(self, mask, pointer, name=None, disposable=False, threaded=False, filter=False, instream=False): # threaded is no longer needed, but leaving it for backwards compatibility for now if name is None: name = 'add_handler_%s' % self.getNewId() self.registerHandler(XMLCallback(name, MatchXMLMask(mask), pointer, once=disposable, instream=instream)) - def getId(self): - return "%x".upper() % self.id - def sendXML(self, data, mask=None, timeout=10): return self.send(tostring(data), mask, timeout) diff --git a/sleekxmpp/xmlstream/xmlstream.py b/sleekxmpp/xmlstream/xmlstream.py index d37d2920..5531b1d2 100644 --- a/sleekxmpp/xmlstream/xmlstream.py +++ b/sleekxmpp/xmlstream/xmlstream.py @@ -101,7 +101,9 @@ class XMLStream(object): disconnect -- Disconnect from the server and terminate processing. event -- Trigger a custom event. + get_id -- Return the current stream ID. incoming_filter -- Optionally filter stanzas before processing. + new_id -- Generate a new, unique ID value. process -- Read XML stanzas from the stream and apply matching stream handlers. reconnect -- Reestablish a connection to the server. @@ -144,6 +146,8 @@ class XMLStream(object): self.removeHandler = self.remove_handler self.setSocket = self.set_socket self.sendRaw = self.send_raw + self.getId = self.get_id + self.getNewId = self.new_id self.ssl_support = SSL_SUPPORT @@ -178,8 +182,29 @@ class XMLStream(object): self.__root_stanza = [] self.__handlers = [] + self._id = 0 + self._id_lock = threading.Lock() + self.run = True + def new_id(self): + """ + Generate and return a new stream ID in hexadecimal form. + + Many stanzas, handlers, or matchers may require unique + ID values. Using this method ensures that all new ID values + are unique in this stream. + """ + with self._id_lock: + self._id += 1 + return self.get_id() + + def get_id(self): + """ + Return the current unique stream ID in hexadecimal form. + """ + return "%X" % self._id + def connect(self, host='', port=0, use_ssl=False, use_tls=True, reattempt=True): """