diff options
author | Yann Leboulanger <asterix@lagaule.org> | 2013-01-02 16:17:03 +0400 |
---|---|---|
committer | Yann Leboulanger <asterix@lagaule.org> | 2013-01-02 16:17:03 +0400 |
commit | 8e9d51df59c11d93c0995a086c6ab6a6009ce10e (patch) | |
tree | 91148e40e4a45810bf5c83632a2729afe6135f24 | |
parent | 27eabadd7f87f128de87038fa485e52d4cde6e7c (diff) |
port code to python3
-rw-r--r-- | nbxmpp/__init__.py | 12 | ||||
-rw-r--r-- | nbxmpp/auth_nb.py | 24 | ||||
-rw-r--r-- | nbxmpp/bosh.py | 6 | ||||
-rw-r--r-- | nbxmpp/c14n.py | 2 | ||||
-rw-r--r-- | nbxmpp/client_nb.py | 8 | ||||
-rw-r--r-- | nbxmpp/dispatcher_nb.py | 30 | ||||
-rw-r--r-- | nbxmpp/features_nb.py | 2 | ||||
-rw-r--r-- | nbxmpp/idlequeue.py | 16 | ||||
-rw-r--r-- | nbxmpp/protocol.py | 12 | ||||
-rw-r--r-- | nbxmpp/proxy_connectors.py | 2 | ||||
-rw-r--r-- | nbxmpp/roster_nb.py | 4 | ||||
-rw-r--r-- | nbxmpp/simplexml.py | 10 | ||||
-rw-r--r-- | nbxmpp/smacks.py | 4 | ||||
-rw-r--r-- | nbxmpp/stringprepare.py | 6 | ||||
-rw-r--r-- | nbxmpp/tls_nb.py | 64 | ||||
-rw-r--r-- | nbxmpp/transports_nb.py | 28 |
16 files changed, 115 insertions, 115 deletions
diff --git a/nbxmpp/__init__.py b/nbxmpp/__init__.py index f7a0ba5..4b16783 100644 --- a/nbxmpp/__init__.py +++ b/nbxmpp/__init__.py @@ -10,9 +10,9 @@ Most of the xmpp classes are ancestors of PlugIn class to share a single set of Thanks and credits to the xmpppy developers. See: http://xmpppy.sourceforge.net/ """ -from protocol import * -import simplexml, protocol, auth_nb, transports_nb, roster_nb -import dispatcher_nb, features_nb, idlequeue, bosh, tls_nb, proxy_connectors -from client_nb import NonBlockingClient -from plugin import PlugIn -from smacks import Smacks +from .protocol import * +from . import simplexml, protocol, auth_nb, transports_nb, roster_nb +from . import dispatcher_nb, features_nb, idlequeue, bosh, tls_nb, proxy_connectors +from .client_nb import NonBlockingClient +from .plugin import PlugIn +from .smacks import Smacks diff --git a/nbxmpp/auth_nb.py b/nbxmpp/auth_nb.py index 22f56b0..a77fe96 100644 --- a/nbxmpp/auth_nb.py +++ b/nbxmpp/auth_nb.py @@ -21,15 +21,15 @@ Can be used both for client and transport authentication See client_nb.py """ -from protocol import NS_SASL, NS_SESSION, NS_STREAMS, NS_BIND, NS_AUTH -from protocol import NS_STREAM_MGMT -from protocol import Node, NodeProcessed, isResultNode, Iq, Protocol, JID -from plugin import PlugIn -from smacks import Smacks +from .protocol import NS_SASL, NS_SESSION, NS_STREAMS, NS_BIND, NS_AUTH +from .protocol import NS_STREAM_MGMT +from .protocol import Node, NodeProcessed, isResultNode, Iq, Protocol, JID +from .plugin import PlugIn +from .smacks import Smacks import base64 import random import itertools -import dispatcher_nb +from . import dispatcher_nb import hashlib import hmac import hashlib @@ -218,7 +218,7 @@ class SASL(PlugIn): raise NodeProcessed if "EXTERNAL" in self.mecs: self.mecs.remove('EXTERNAL') - sasl_data = u'%s@%s' % (self.username, self._owner.Server) + sasl_data = '%s@%s' % (self.username, self._owner.Server) sasl_data = sasl_data.encode('utf-8').encode('base64').replace( '\n', '') node = Node('auth', attrs={'xmlns': NS_SASL, @@ -241,7 +241,7 @@ class SASL(PlugIn): self.startsasl = SASL_IN_PROCESS self._owner.send(str(node)) raise NodeProcessed - except kerberos.GSSError, e: + except kerberos.GSSError as e: log.info('GSSAPI authentication failed: %s' % str(e)) if 'SCRAM-SHA-1' in self.mecs: self.mecs.remove('SCRAM-SHA-1') @@ -486,19 +486,19 @@ class SASL(PlugIn): self.resp['nc'], self.resp['cnonce'], self.resp['qop'], HH(A2)])) self.resp['response'] = response - sasl_data = u'' + sasl_data = '' for key in ('charset', 'username', 'realm', 'nonce', 'nc', 'cnonce', 'digest-uri', 'response', 'qop'): if key in ('nc', 'qop', 'response', 'charset'): - sasl_data += u"%s=%s," % (key, self.resp[key]) + sasl_data += "%s=%s," % (key, self.resp[key]) else: - sasl_data += u'%s="%s",' % (key, self.resp[key]) + sasl_data += '%s="%s",' % (key, self.resp[key]) sasl_data = sasl_data[:-1].encode('utf-8').encode('base64').replace( '\r', '').replace('\n', '') node = Node('response', attrs={'xmlns': NS_SASL}, payload=[sasl_data]) elif self.mechanism == 'PLAIN': - sasl_data = u'\x00%s\x00%s' % (self.username, self.password) + sasl_data = '\x00%s\x00%s' % (self.username, self.password) sasl_data = sasl_data.encode('utf-8').encode('base64').replace( '\n', '') node = Node('auth', attrs={'xmlns': NS_SASL, 'mechanism': 'PLAIN'}, diff --git a/nbxmpp/bosh.py b/nbxmpp/bosh.py index 01145cc..43a3f3f 100644 --- a/nbxmpp/bosh.py +++ b/nbxmpp/bosh.py @@ -20,11 +20,11 @@ import locale, random from hashlib import sha1 -from transports_nb import NonBlockingTransport, NonBlockingHTTPBOSH,\ +from .transports_nb import NonBlockingTransport, NonBlockingHTTPBOSH,\ CONNECTED, CONNECTING, DISCONNECTED, DISCONNECTING,\ urisplit, DISCONNECT_TIMEOUT_SECONDS -from protocol import BOSHBody, Protocol, NS_CLIENT -from simplexml import Node +from .protocol import BOSHBody, Protocol, NS_CLIENT +from .simplexml import Node import logging log = logging.getLogger('nbxmpp.bosh') diff --git a/nbxmpp/c14n.py b/nbxmpp/c14n.py index 0d318a3..764ecd8 100644 --- a/nbxmpp/c14n.py +++ b/nbxmpp/c14n.py @@ -22,7 +22,7 @@ XML canonicalisation methods (for XEP-0116) """ -from simplexml import ustr +from .simplexml import ustr def c14n(node, is_buggy): s = "<" + node.name diff --git a/nbxmpp/client_nb.py b/nbxmpp/client_nb.py index a128cd4..76137a8 100644 --- a/nbxmpp/client_nb.py +++ b/nbxmpp/client_nb.py @@ -21,8 +21,8 @@ Client class establishs connection to XMPP Server and handles authentication """ import socket -import transports_nb, dispatcher_nb, auth_nb, roster_nb, protocol, bosh -from protocol import NS_TLS +from . import transports_nb, dispatcher_nb, auth_nb, roster_nb, protocol, bosh +from .protocol import NS_TLS import logging log = logging.getLogger('nbxmpp.client_nb') @@ -249,9 +249,9 @@ class NonBlockingClient: try: self.ip_addresses = socket.getaddrinfo(hostname, port, socket.AF_UNSPEC, socket.SOCK_STREAM) - except socket.gaierror, (errnum, errstr): + except socket.gaierror as exc: self.disconnect(message='Lookup failure for %s:%s, hostname: %s - %s' % - (self.Server, self.Port, hostname, errstr)) + (self.Server, self.Port, hostname, str(exc))) else: on_success() diff --git a/nbxmpp/dispatcher_nb.py b/nbxmpp/dispatcher_nb.py index a5b66a6..5d48ff7 100644 --- a/nbxmpp/dispatcher_nb.py +++ b/nbxmpp/dispatcher_nb.py @@ -20,11 +20,13 @@ Main xmpp decision making logic. Provides library with methods to assign different handlers to different XMPP stanzas and namespaces """ -import simplexml, sys, locale +from . import simplexml +import sys +import locale import re from xml.parsers.expat import ExpatError -from plugin import PlugIn -from protocol import (NS_STREAMS, NS_XMPP_STREAMS, NS_HTTP_BIND, Iq, Presence, +from .plugin import PlugIn +from .protocol import (NS_STREAMS, NS_XMPP_STREAMS, NS_HTTP_BIND, Iq, Presence, Message, Protocol, Node, Error, ERR_FEATURE_NOT_IMPLEMENTED, StreamError) import logging log = logging.getLogger('nbxmpp.dispatcher_nb') @@ -95,17 +97,17 @@ class XMPPDispatcher(PlugIn): self.sm = None # \ufddo -> \ufdef range - c = u'\ufdd0' + c = '\ufdd0' r = c.encode('utf8') - while (c < u'\ufdef'): + while (c < '\ufdef'): c = unichr(ord(c) + 1) r += '|' + c.encode('utf8') # \ufffe-\uffff, \u1fffe-\u1ffff, ..., \u10fffe-\u10ffff - c = u'\ufffe' + c = '\ufffe' r += '|' + c.encode('utf8') r += '|' + unichr(ord(c) + 1).encode('utf8') - while (c < u'\U0010fffe'): + while (c < '\U0010fffe'): c = unichr(ord(c) + 0x10000) r += '|' + c.encode('utf8') r += '|' + unichr(ord(c) + 1).encode('utf8') @@ -198,7 +200,7 @@ class XMPPDispatcher(PlugIn): % (tag, ns)) def replace_non_character(self, data): - return re.sub(self.invalid_chars_re, u'\ufffd'.encode('utf-8'), data) + return re.sub(self.invalid_chars_re, '\ufffd'.encode('utf-8'), data) def ProcessNonBlocking(self, data): """ @@ -220,7 +222,7 @@ class XMPPDispatcher(PlugIn): handler(self) if len(self._pendingExceptions) > 0: _pendingException = self._pendingExceptions.pop() - raise _pendingException[0], _pendingException[1], _pendingException[2] + raise _pendingException try: self.Stream.Parse(data) # end stream:stream tag received @@ -231,13 +233,13 @@ class XMPPDispatcher(PlugIn): log.error('Invalid XML received from server. Forcing disconnect.') self._owner.Connection.disconnect() return 0 - except ValueError, e: + except ValueError as e: log.debug('ValueError: %s' % str(e)) self._owner.Connection.pollend() return 0 if len(self._pendingExceptions) > 0: _pendingException = self._pendingExceptions.pop() - raise _pendingException[0], _pendingException[1], _pendingException[2] + raise _pendingException if len(data) == 0: return '0' return len(data) @@ -474,7 +476,7 @@ class XMPPDispatcher(PlugIn): (cb, args)) try: cb(session,stanza,**args) - except Exception, typ: + except Exception as typ: if typ.__class__.__name__ != 'NodeProcessed': raise else: @@ -486,7 +488,7 @@ class XMPPDispatcher(PlugIn): if user or handler['system']: try: handler['func'](session, stanza) - except Exception, typ: + except Exception as typ: if typ.__class__.__name__ != 'NodeProcessed': self._pendingExceptions.insert(0, sys.exc_info()) return @@ -552,7 +554,7 @@ class XMPPDispatcher(PlugIn): sure stanzas get ID and from tag. """ ID = None - if type(stanza) not in [type(''), type(u'')]: + if type(stanza) != str: if isinstance(stanza, Protocol): ID = stanza.getID() if ID is None: diff --git a/nbxmpp/features_nb.py b/nbxmpp/features_nb.py index 9dd3908..3d9c5c9 100644 --- a/nbxmpp/features_nb.py +++ b/nbxmpp/features_nb.py @@ -20,7 +20,7 @@ Different stuff that wasn't worth separating it into modules (Registration, Privacy Lists, ...) """ -from protocol import NS_REGISTER, NS_PRIVACY, NS_DATA, Iq, isResultNode, Node +from .protocol import NS_REGISTER, NS_PRIVACY, NS_DATA, Iq, isResultNode, Node def _on_default_response(disp, iq, cb): def _on_response(resp): diff --git a/nbxmpp/idlequeue.py b/nbxmpp/idlequeue.py index e9ca125..b66d6b0 100644 --- a/nbxmpp/idlequeue.py +++ b/nbxmpp/idlequeue.py @@ -25,7 +25,7 @@ log = logging.getLogger('nbxmpp.idlequeue') # needed for get_idleqeue try: - import gobject + from gi.repository import GObject HAVE_GOBJECT = True except ImportError: HAVE_GOBJECT = False @@ -190,7 +190,7 @@ class IdleCommand(IdleObject): def pollin(self): try: res = self.pipe.read() - except Exception, e: + except Exception as e: res = '' if res == '': return self.pollend() @@ -424,7 +424,7 @@ class IdleQueue: return True try: waiting_descriptors = self.selector.poll(0) - except select.error, e: + except select.error as e: waiting_descriptors = [] if e[0] != 4: # interrupt raise @@ -480,7 +480,7 @@ class SelectIdleQueue(IdleQueue): try: waiting_descriptors = select.select(self.read_fds.keys(), self.write_fds.keys(), self.error_fds.keys(), 0) - except select.error, e: + except select.error as e: waiting_descriptors = ((), (), ()) if e[0] != 4: # interrupt raise @@ -517,15 +517,15 @@ class GlibIdleQueue(IdleQueue): self.events = {} # time() is already called in glib, we just get the last value # overrides IdleQueue.current_time() - self.current_time = gobject.get_current_time + self.current_time = GObject.get_current_time def _add_idle(self, fd, flags): """ This method is called when we plug a new idle object. Start listening for events from fd """ - res = gobject.io_add_watch(fd, flags, self._process_events, - priority=gobject.PRIORITY_LOW) + res = GObject.io_add_watch(fd, flags, self._process_events, + priority=GObject.PRIORITY_LOW) # store the id of the watch, so that we can remove it on unplug self.events[fd] = res @@ -544,7 +544,7 @@ class GlibIdleQueue(IdleQueue): """ if not fd in self.events: return - gobject.source_remove(self.events[fd]) + GObject.source_remove(self.events[fd]) del(self.events[fd]) def process(self): diff --git a/nbxmpp/protocol.py b/nbxmpp/protocol.py index 0c79f46..2c5f363 100644 --- a/nbxmpp/protocol.py +++ b/nbxmpp/protocol.py @@ -20,15 +20,13 @@ data structures, including jabber-objects like JID or different stanzas and sub- stanzas) handling routines """ -from simplexml import Node, NodeBuilder +from .simplexml import Node, NodeBuilder import time import string import hashlib def ascii_upper(s): - trans_table = string.maketrans(string.ascii_lowercase, - string.ascii_uppercase) - return s.translate(trans_table) + return s.upper() NS_ACTIVITY = 'http://jabber.org/protocol/activity' # XEP-0108 NS_ADDRESS = 'http://jabber.org/protocol/address' # XEP-0033 @@ -663,7 +661,7 @@ class Protocol(Node): else: error = ErrorNode(ERR_UNDEFINED_CONDITION, code=code, typ='cancel', text=error) - elif type(error) in [type(''), type(u'')]: + elif type(error) == str: error=ErrorNode(error) self.setType('error') self.addChild(node=error) @@ -776,8 +774,8 @@ class Message(Protocol): self.getTag('html').addChild(node=dom) else: self.setTag('html', namespace=NS_XHTML_IM).addChild(node=dom) - except Exception, e: - print "Error", e + except Exception as e: + print("Error" + str(e)) # FIXME: log. we could not set xhtml (parse error, whatever) def setSubject(self, val): diff --git a/nbxmpp/proxy_connectors.py b/nbxmpp/proxy_connectors.py index 504ba93..a50f822 100644 --- a/nbxmpp/proxy_connectors.py +++ b/nbxmpp/proxy_connectors.py @@ -108,7 +108,7 @@ class HTTPCONNECTConnector(ProxyConnector): #traceback.print_exc() self.on_failure('Invalid proxy reply') return - if code <> '200': + if code != '200': log.error('Invalid proxy reply: %s %s %s' % (proto, code, desc)) self.on_failure('Invalid proxy reply') return diff --git a/nbxmpp/roster_nb.py b/nbxmpp/roster_nb.py index c07fa25..34b7f7b 100644 --- a/nbxmpp/roster_nb.py +++ b/nbxmpp/roster_nb.py @@ -22,8 +22,8 @@ Simple roster implementation. Can be used though for different tasks like mass-renaming of contacts. """ -from protocol import JID, Iq, Presence, Node, NodeProcessed, NS_MUC_USER, NS_ROSTER -from plugin import PlugIn +from .protocol import JID, Iq, Presence, Node, NodeProcessed, NS_MUC_USER, NS_ROSTER +from .plugin import PlugIn import logging log = logging.getLogger('nbxmpp.roster_nb') diff --git a/nbxmpp/simplexml.py b/nbxmpp/simplexml.py index ad907be..6435de5 100644 --- a/nbxmpp/simplexml.py +++ b/nbxmpp/simplexml.py @@ -30,7 +30,7 @@ def XMLescape(txt): entities """ # replace also FORM FEED and ESC, because they are not valid XML chars - return txt.replace("&", "&").replace("<", "<").replace(">", ">").replace('"', """).replace(u'\x0C', "").replace(u'\x1B', "") + return txt.replace("&", "&").replace("<", "<").replace(">", ">").replace('"', """).replace('\x0C', "").replace('\x1B', "") ENCODING='utf-8' @@ -111,7 +111,7 @@ class Node(object): for k, v in nsp.items(): self.nsp_cache[k] = v for attr, val in attrs.items(): if attr == 'xmlns': - self.nsd[u''] = val + self.nsd[''] = val elif attr.startswith('xmlns:'): self.nsd[attr[6:]] = val self.attrs[attr]=attrs[attr] @@ -566,7 +566,7 @@ class NodeBuilder: """ self.check_data_buffer() self._inc_depth() - log.info("STARTTAG.. DEPTH -> %i , tag -> %s, attrs -> %s" % (self.__depth, tag, `attrs`)) + log.info("STARTTAG.. DEPTH -> %i , tag -> %s, attrs -> %s" % (self.__depth, tag, attrs)) if self.__depth == self._dispatch_depth: if not self._mini_dom : self._mini_dom = Node(tag=tag, attrs=attrs, nsp = self._document_nsp, node_built=True) @@ -582,7 +582,7 @@ class NodeBuilder: nsp, name = (['']+tag.split(':'))[-2:] for attr, val in attrs.items(): if attr == 'xmlns': - self._document_nsp[u''] = val + self._document_nsp[''] = val elif attr.startswith('xmlns:'): self._document_nsp[attr[6:]] = val else: @@ -590,7 +590,7 @@ class NodeBuilder: ns = self._document_nsp.get(nsp, 'http://www.gajim.org/xmlns/undeclared-root') try: self.stream_header_received(ns, name, attrs) - except ValueError, e: + except ValueError as e: self._document_attrs = None raise ValueError(str(e)) if not self.last_is_data and self._ptr.parent: diff --git a/nbxmpp/smacks.py b/nbxmpp/smacks.py index d97b04b..20d3be5 100644 --- a/nbxmpp/smacks.py +++ b/nbxmpp/smacks.py @@ -1,5 +1,5 @@ -from protocol import Acks -from protocol import NS_STREAM_MGMT +from .protocol import Acks +from .protocol import NS_STREAM_MGMT import logging log = logging.getLogger('nbxmpp.smacks') diff --git a/nbxmpp/stringprepare.py b/nbxmpp/stringprepare.py index 5e3d343..6edca6f 100644 --- a/nbxmpp/stringprepare.py +++ b/nbxmpp/stringprepare.py @@ -118,7 +118,7 @@ class Profile: if result_c is not None: result.append(result_c) - return u"".join(result) + return "".join(result) def check_prohibiteds(self, string): for c in string: @@ -228,8 +228,8 @@ B_2 = MappingTableFromFunction(stringprep.map_table_b2) nodeprep = Profile(mappings=[B_1, B_2], prohibiteds=[C_11, C_12, C_21, C_22, C_3, C_4, C_5, C_6, C_7, C_8, C_9, - LookupTable([u'"', u'&', u"'", u'/', - u':', u'<', u'>', u'@'])]) + LookupTable(['"', '&', "'", '/', + ':', '<', '>', '@'])]) resourceprep = Profile(mappings=[B_1,], prohibiteds=[C_12, C_21, C_22, diff --git a/nbxmpp/tls_nb.py b/nbxmpp/tls_nb.py index b2db33e..5c954d8 100644 --- a/nbxmpp/tls_nb.py +++ b/nbxmpp/tls_nb.py @@ -16,7 +16,7 @@ ## GNU General Public License for more details. import socket -from plugin import PlugIn +from .plugin import PlugIn import sys import os @@ -42,9 +42,9 @@ except ImportError: log.debug("Import of PyOpenSSL failed:", exc_info=True) # FIXME: Remove these prints before release, replace with a warning dialog. - print >> sys.stderr, "=" * 79 - print >> sys.stderr, "PyOpenSSL not found, falling back to Python builtin SSL objects (insecure)." - print >> sys.stderr, "=" * 79 + print("=" * 79, file=sys.stderr) + print("PyOpenSSL not found, falling back to Python builtin SSL objects (insecure).", file=sys.stderr) + print("=" * 79, file=sys.stderr) def gattr(obj, attr, default=None): try: @@ -167,17 +167,17 @@ class PyOpenSSLWrapper(SSLWrapper): retval = self.sslobj.recv(bufsize) else: retval = self.sslobj.recv(bufsize, flags) - except (OpenSSL.SSL.WantReadError, OpenSSL.SSL.WantWriteError), e: + except (OpenSSL.SSL.WantReadError, OpenSSL.SSL.WantWriteError) as e: log.debug("Recv: Want-error: " + repr(e)) - except OpenSSL.SSL.SysCallError, e: + except OpenSSL.SSL.SysCallError as e: log.debug("Recv: Got OpenSSL.SSL.SysCallError: " + repr(e), exc_info=True) raise SSLWrapper.Error(self.sock or self.sslobj, e) - except OpenSSL.SSL.ZeroReturnError, e: + except OpenSSL.SSL.ZeroReturnError as e: # end-of-connection raises ZeroReturnError instead of having the # connection's .recv() method return a zero-sized result. raise SSLWrapper.Error(self.sock or self.sslobj, e, -1) - except OpenSSL.SSL.Error, e: + except OpenSSL.SSL.Error as e: if self.is_numtoolarge(e): # warn, but ignore this exception log.warning("Recv: OpenSSL: asn1enc: first num too large (ignored)") @@ -192,14 +192,14 @@ class PyOpenSSLWrapper(SSLWrapper): return self.sslobj.send(data) else: return self.sslobj.send(data, flags) - except (OpenSSL.SSL.WantReadError, OpenSSL.SSL.WantWriteError), e: + except (OpenSSL.SSL.WantReadError, OpenSSL.SSL.WantWriteError) as e: #log.debug("Send: " + repr(e)) time.sleep(0.1) # prevent 100% CPU usage - except OpenSSL.SSL.SysCallError, e: + except OpenSSL.SSL.SysCallError as e: log.error("Send: Got OpenSSL.SSL.SysCallError: " + repr(e), exc_info=True) raise SSLWrapper.Error(self.sock or self.sslobj, e) - except OpenSSL.SSL.Error, e: + except OpenSSL.SSL.Error as e: if self.is_numtoolarge(e): # warn, but ignore this exception log.warning("Send: OpenSSL: asn1enc: first num too large (ignored)") @@ -222,7 +222,7 @@ class StdlibSSLWrapper(SSLWrapper): # we simply ignore flags since ssl object doesn't support it try: return self.sslobj.read(bufsize) - except socket.sslerror, e: + except socket.sslerror as e: log.debug("Recv: Caught socket.sslerror: " + repr(e), exc_info=True) if e.args[0] not in (socket.SSL_ERROR_WANT_READ, socket.SSL_ERROR_WANT_WRITE): raise SSLWrapper.Error(self.sock or self.sslobj, e) @@ -232,7 +232,7 @@ class StdlibSSLWrapper(SSLWrapper): # we simply ignore flags since ssl object doesn't support it try: return self.sslobj.write(data) - except socket.sslerror, e: + except socket.sslerror as e: log.debug("Send: Caught socket.sslerror:", exc_info=True) if e.args[0] not in (socket.SSL_ERROR_WANT_READ, socket.SSL_ERROR_WANT_WRITE): raise SSLWrapper.Error(self.sock or self.sslobj, e) @@ -271,32 +271,32 @@ class NonBlockingTLS(PlugIn): log.info('Starting TLS estabilishing') try: res = self._startSSL() - except Exception, e: + except Exception as e: log.error("PlugIn: while trying _startSSL():", exc_info=True) return False return res def _dumpX509(self, cert, stream=sys.stderr): - print >> stream, "Digest (SHA-1):", cert.digest("sha1") - print >> stream, "Digest (MD5):", cert.digest("md5") - print >> stream, "Serial #:", cert.get_serial_number() - print >> stream, "Version:", cert.get_version() - print >> stream, "Expired:", ("Yes" if cert.has_expired() else "No") - print >> stream, "Subject:" + print("Digest (SHA-1):" + cert.digest("sha1"), file=stream) + print("Digest (MD5):" + cert.digest("md5"), file=stream) + print("Serial #:" + cert.get_serial_number(), file=stream) + print("Version:" + cert.get_version(), file=stream) + print("Expired:" + ("Yes" if cert.has_expired() else "No"), file=stream) + print("Subject:", file=stream) self._dumpX509Name(cert.get_subject(), stream) - print >> stream, "Issuer:" + print("Issuer:", file=stream) self._dumpX509Name(cert.get_issuer(), stream) self._dumpPKey(cert.get_pubkey(), stream) def _dumpX509Name(self, name, stream=sys.stderr): - print >> stream, "X509Name:", str(name) + print("X509Name:" + str(name), file=stream) def _dumpPKey(self, pkey, stream=sys.stderr): typedict = {OpenSSL.crypto.TYPE_RSA: "RSA", OpenSSL.crypto.TYPE_DSA: "DSA"} - print >> stream, "PKey bits:", pkey.bits() - print >> stream, "PKey type: %s (%d)" % (typedict.get(pkey.type(), - "Unknown"), pkey.type()) + print("PKey bits:" + pkey.bits(), file=stream) + print("PKey type: %s (%d)" % (typedict.get(pkey.type(), + "Unknown"), pkey.type()), file=stream) def _startSSL(self): """ @@ -320,7 +320,7 @@ class NonBlockingTLS(PlugIn): return try: f = open(cert_path) - except IOError, e: + except IOError as e: log.warning('Unable to open certificate file %s: %s' % \ (cert_path, str(e))) return @@ -336,7 +336,7 @@ class NonBlockingTLS(PlugIn): x509cert = OpenSSL.crypto.load_certificate( OpenSSL.crypto.FILETYPE_PEM, cert) cert_store.add_cert(x509cert) - except OpenSSL.crypto.Error, exception_obj: + except OpenSSL.crypto.Error as exception_obj: if logg: log.warning('Unable to load a certificate from file %s: %s' %\ (cert_path, exception_obj.args[0][0][2])) @@ -361,7 +361,7 @@ class NonBlockingTLS(PlugIn): try: p12 = OpenSSL.crypto.load_pkcs12(open(conn.client_cert).read(), conn.client_cert_passphrase) - except OpenSSL.crypto.Error, exception_obj: + except OpenSSL.crypto.Error as exception_obj: log.warning('Unable to load client pkcs12 certificate from ' 'file %s: %s ... Is it a valid PKCS12 cert?' % \ (conn.client_cert, exception_obj.args)) @@ -374,10 +374,10 @@ class NonBlockingTLS(PlugIn): tcpsock._sslContext.use_certificate(p12.get_certificate()) tcpsock._sslContext.use_privatekey(p12.get_privatekey()) log.info('p12 cert and key loaded') - except OpenSSL.crypto.Error, exception_obj: + except OpenSSL.crypto.Error as exception_obj: log.warning('Unable to extract client certificate from ' 'file %s' % conn.client_cert) - except Exception, msg: + except Exception as msg: log.warning('Unknown error extracting client certificate ' 'from file %s: %s' % (conn.client_cert, msg)) else: @@ -388,7 +388,7 @@ class NonBlockingTLS(PlugIn): flags = OpenSSL.SSL.OP_NO_SSLv2 try: flags |= OpenSSL.SSL.OP_NO_TICKET - except AttributeError, e: + except AttributeError as e: # py-OpenSSL < 0.9 or old OpenSSL flags |= 16384 tcpsock._sslContext.set_options(flags) @@ -420,7 +420,7 @@ class NonBlockingTLS(PlugIn): log.debug("Initiating handshake...") try: tcpsock._sslObj.do_handshake() - except (OpenSSL.SSL.WantReadError, OpenSSL.SSL.WantWriteError), e: + except (OpenSSL.SSL.WantReadError, OpenSSL.SSL.WantWriteError) as e: pass except: log.error('Error while TLS handshake: ', exc_info=True) diff --git a/nbxmpp/transports_nb.py b/nbxmpp/transports_nb.py index e4101bd..0558cc1 100644 --- a/nbxmpp/transports_nb.py +++ b/nbxmpp/transports_nb.py @@ -24,18 +24,18 @@ Transports are not aware of XMPP stanzas and only responsible for low-level connection handling. """ -from simplexml import ustr -from plugin import PlugIn -from idlequeue import IdleObject -import proxy_connectors -import tls_nb +from .simplexml import ustr +from .plugin import PlugIn +from .idlequeue import IdleObject +from . import proxy_connectors +from . import tls_nb import socket import errno import time import traceback import base64 -import urlparse +from urllib.parse import urlparse import logging log = logging.getLogger('nbxmpp.transports_nb') @@ -47,7 +47,7 @@ def urisplit(uri): 'httpcm.jabber.org', 123, '/webclient') return 443 as default port if proto is https else 80 """ - splitted = urlparse.urlsplit(uri) + splitted = urlparse(uri) proto, host, path = splitted.scheme, splitted.hostname, splitted.path try: port = splitted.port @@ -330,9 +330,9 @@ class NonBlockingTCP(NonBlockingTransport, IdleObject): try: self._sock = socket.socket(*conn_5tuple[:3]) - except socket.error, (errnum, errstr): + except socket.error as e: self._on_connect_failure('NonBlockingTCP Connect: Error while creating\ - socket: %s %s' % (errnum, errstr)) + socket: %s' % atr(e)) return self._send = self._sock.send @@ -356,7 +356,7 @@ class NonBlockingTCP(NonBlockingTransport, IdleObject): try: self._sock.setblocking(False) self._sock.connect((self.server, self.port)) - except Exception, exc: + except Exception as exc: errnum, errstr = exc.args if errnum in (errno.EINPROGRESS, errno.EALREADY, errno.EWOULDBLOCK): @@ -458,8 +458,8 @@ class NonBlockingTCP(NonBlockingTransport, IdleObject): try: self._sock.shutdown(socket.SHUT_RDWR) self._sock.close() - except socket.error, (errnum, errstr): - log.info('Error while disconnecting socket: %s' % errstr) + except socket.error as e: + log.info('Error while disconnecting socket: %s' % str(e)) self.fd = -1 NonBlockingTransport.disconnect(self, do_callback) @@ -565,9 +565,9 @@ class NonBlockingTCP(NonBlockingTransport, IdleObject): try: # get as many bites, as possible, but not more than RECV_BUFSIZE received = self._recv(RECV_BUFSIZE) - except socket.error, (errnum, errstr): + except socket.error as e: log.info("_do_receive: got %s:" % received, exc_info=True) - except tls_nb.SSLWrapper.Error, e: + except tls_nb.SSLWrapper.Error as e: log.info("_do_receive, caught SSL error, got %s:" % received, exc_info=True) errnum, errstr = e.errno, e.strerror |