remove has_key()
fix base64 calls (requires and returns bytes, not str)
This commit is contained in:
parent
912f0e921d
commit
2c21353a8b
|
@ -428,7 +428,7 @@ if dbus_support.supported:
|
|||
def account_info(self, account):
|
||||
'''show info on account: resource, jid, nick, prio, message'''
|
||||
result = DBUS_DICT_SS()
|
||||
if gajim.connections.has_key(account):
|
||||
if account in gajim.connections:
|
||||
# account is valid
|
||||
con = gajim.connections[account]
|
||||
index = con.connected
|
||||
|
|
|
@ -163,7 +163,7 @@ def compute_caps_hash(identities, features, dataforms=[], hash_method='sha-1'):
|
|||
hash_ = hashlib.md5(S.encode('utf-8'))
|
||||
else:
|
||||
return ''
|
||||
return base64.b64encode(hash_.digest())
|
||||
return base64.b64encode(hash_.digest()).decode('utf-8')
|
||||
|
||||
|
||||
################################################################################
|
||||
|
|
|
@ -431,7 +431,8 @@ class ConnectionVcard:
|
|||
if 'PHOTO' in vcard and isinstance(vcard['PHOTO'], dict) and \
|
||||
'BINVAL' in vcard['PHOTO']:
|
||||
photo = vcard['PHOTO']['BINVAL']
|
||||
photo_decoded = base64.decodestring(photo)
|
||||
photo_decoded = base64.b64decode(photo.encode('utf-8')).decode(
|
||||
'utf-8')
|
||||
gajim.interface.save_avatar_files(our_jid, photo_decoded)
|
||||
avatar_sha = hashlib.sha1(photo_decoded).hexdigest()
|
||||
iq2.getTag('PHOTO').setTagData('SHA', avatar_sha)
|
||||
|
@ -684,7 +685,7 @@ class ConnectionVcard:
|
|||
'BINVAL' in vcard['PHOTO']:
|
||||
photo = vcard['PHOTO']['BINVAL']
|
||||
try:
|
||||
photo_decoded = base64.decodestring(photo)
|
||||
photo_decoded = base64.b64decode(photo.encode('utf-8')).decode('utf-8')
|
||||
avatar_sha = hashlib.sha1(photo_decoded).hexdigest()
|
||||
except Exception:
|
||||
avatar_sha = ''
|
||||
|
@ -970,7 +971,7 @@ class ConnectionHandlersBase:
|
|||
decmsg = self.gpg.decrypt(encmsg, keyID)
|
||||
decmsg = self.connection.Dispatcher.replace_non_character(decmsg)
|
||||
# \x00 chars are not allowed in C (so in GTK)
|
||||
obj.msgtxt = helpers.decode_string(decmsg.replace('\x00', ''))
|
||||
obj.msgtxt = decmsg.replace('\x00', '')
|
||||
obj.encrypted = 'xep27'
|
||||
self.gpg_messages_to_decrypt.remove([encmsg, keyID, obj])
|
||||
|
||||
|
@ -1095,7 +1096,7 @@ class ConnectionHandlersBase:
|
|||
jid = gajim.get_jid_without_resource(jid)
|
||||
|
||||
try:
|
||||
return self.sessions[jid].values()
|
||||
return list(self.sessions[jid].values())
|
||||
except KeyError:
|
||||
return []
|
||||
|
||||
|
@ -1157,7 +1158,7 @@ class ConnectionHandlersBase:
|
|||
received a thread_id yet and returns the session that we last sent a
|
||||
message to
|
||||
"""
|
||||
sessions = self.sessions[jid].values()
|
||||
sessions = list(self.sessions[jid].values())
|
||||
|
||||
# sessions that we haven't received a thread ID in
|
||||
idless = [s for s in sessions if not s.received_thread_id]
|
||||
|
@ -1178,7 +1179,7 @@ class ConnectionHandlersBase:
|
|||
Find an active session that doesn't have a control attached
|
||||
"""
|
||||
try:
|
||||
sessions = self.sessions[jid].values()
|
||||
sessions = list(self.sessions[jid].values())
|
||||
|
||||
# filter out everything except the default session type
|
||||
chat_sessions = [s for s in sessions if isinstance(s,
|
||||
|
@ -1549,9 +1550,8 @@ ConnectionJingle, ConnectionIBBytestream):
|
|||
iq_obj = obj.stanza.buildReply('result')
|
||||
qp = iq_obj.setQuery()
|
||||
qp.setTagData('utc', strftime('%Y%m%dT%H:%M:%S', gmtime()))
|
||||
qp.setTagData('tz', helpers.decode_string(tzname[daylight]))
|
||||
qp.setTagData('display', helpers.decode_string(strftime('%c',
|
||||
localtime())))
|
||||
qp.setTagData('tz', tzname[daylight])
|
||||
qp.setTagData('display', strftime('%c', localtime()))
|
||||
else:
|
||||
iq_obj = obj.stanza.buildReply('error')
|
||||
err = nbxmpp.ErrorNode(name=nbxmpp.NS_STANZAS + \
|
||||
|
|
|
@ -64,7 +64,7 @@ class FilesProp:
|
|||
|
||||
@classmethod
|
||||
def getAllFileProp(cls):
|
||||
return cls._files_props.values()
|
||||
return list(cls._files_props.values())
|
||||
|
||||
@classmethod
|
||||
def setFileProp(cls, fp, account, sid):
|
||||
|
|
|
@ -633,8 +633,6 @@ def datetime_tuple(timestamp):
|
|||
from time import strptime
|
||||
return strptime(timestamp, '%Y%m%dT%H:%M:%S')
|
||||
|
||||
# import gajim only when needed (after decode_string is defined) see #4764
|
||||
|
||||
from common import gajim
|
||||
if gajim.HAVE_PYCURL:
|
||||
import pycurl
|
||||
|
@ -904,7 +902,7 @@ def get_full_jid_from_iq(iq_obj):
|
|||
"""
|
||||
Return the full jid (with resource) from an iq
|
||||
"""
|
||||
return parse_jid(iq_obj.getFrom())
|
||||
return parse_jid(str(iq_obj.getFrom()))
|
||||
|
||||
def get_jid_from_iq(iq_obj):
|
||||
"""
|
||||
|
|
|
@ -852,7 +852,8 @@ class ConnectionIBBytestream(ConnectionBytestream):
|
|||
chunk = file_props.fp.read(file_props.block_size)
|
||||
if chunk:
|
||||
datanode = nbxmpp.Node(nbxmpp.NS_IBB + ' data', {'sid': sid,
|
||||
'seq': file_props.seq}, base64.encodestring(chunk))
|
||||
'seq': file_props.seq}, base64.b64encode(chunk.encode(
|
||||
'utf-8')).decode('utf-8'))
|
||||
file_props.seq += 1
|
||||
file_props.started = True
|
||||
if file_props.seq == 65536:
|
||||
|
@ -887,7 +888,7 @@ class ConnectionIBBytestream(ConnectionBytestream):
|
|||
log.debug('ReceiveHandler called sid->%s seq->%s' % (sid, seq))
|
||||
try:
|
||||
seq = int(seq)
|
||||
data = base64.decodestring(data)
|
||||
data = base64.b64decode(data.encode('utf-8')).decode('utf-8')
|
||||
except Exception:
|
||||
seq = ''
|
||||
data = ''
|
||||
|
|
|
@ -70,33 +70,33 @@ class CommonResolver():
|
|||
# empty host, return empty list of srv records
|
||||
on_ready([])
|
||||
return
|
||||
if self.resolved_hosts.has_key(host+type):
|
||||
if host + type in self.resolved_hosts:
|
||||
# host is already resolved, return cached values
|
||||
log.debug('%s already resolved: %s' % (host,
|
||||
self.resolved_hosts[host+type]))
|
||||
on_ready(host, self.resolved_hosts[host+type])
|
||||
self.resolved_hosts[host + type]))
|
||||
on_ready(host, self.resolved_hosts[host + type])
|
||||
return
|
||||
if self.handlers.has_key(host+type):
|
||||
if host + type in self.handlers:
|
||||
# host is about to be resolved by another connection,
|
||||
# attach our callback
|
||||
log.debug('already resolving %s' % host)
|
||||
self.handlers[host+type].append(on_ready)
|
||||
self.handlers[host + type].append(on_ready)
|
||||
else:
|
||||
# host has never been resolved, start now
|
||||
log.debug('Starting to resolve %s using %s' % (host, self))
|
||||
self.handlers[host+type] = [on_ready]
|
||||
self.handlers[host + type] = [on_ready]
|
||||
self.start_resolve(host, type)
|
||||
|
||||
def _on_ready(self, host, type, result_list):
|
||||
# practically it is impossible to be the opposite, but who knows :)
|
||||
host = host.lower()
|
||||
log.debug('Resolving result for %s: %s' % (host, result_list))
|
||||
if not self.resolved_hosts.has_key(host+type):
|
||||
self.resolved_hosts[host+type] = result_list
|
||||
if self.handlers.has_key(host+type):
|
||||
for callback in self.handlers[host+type]:
|
||||
if host + type not in self.resolved_hosts:
|
||||
self.resolved_hosts[host + type] = result_list
|
||||
if host + type in self.handlers:
|
||||
for callback in self.handlers[host + type]:
|
||||
callback(host, result_list)
|
||||
del(self.handlers[host+type])
|
||||
del(self.handlers[host + type])
|
||||
|
||||
def start_resolve(self, host, type):
|
||||
pass
|
||||
|
@ -251,8 +251,7 @@ class NSLookupResolver(CommonResolver):
|
|||
domain = None
|
||||
if line.startswith(fqdn):
|
||||
domain = fqdn # For nslookup 9.5
|
||||
elif helpers.decode_string(line).startswith(ufqdn):
|
||||
line = helpers.decode_string(line)
|
||||
elif line.startswith(ufqdn):
|
||||
domain = ufqdn # For nslookup 9.6
|
||||
if domain:
|
||||
rest = line[len(domain):].split('=')
|
||||
|
|
|
@ -173,7 +173,7 @@ class P2PClient(IdleObject):
|
|||
id_ = stanza.getID()
|
||||
if not id_:
|
||||
id_ = self.Dispatcher.getAnID()
|
||||
if self.conn_holder.ids_of_awaiting_messages.has_key(self.fd):
|
||||
if self.fd in self.conn_holder.ids_of_awaiting_messages:
|
||||
self.conn_holder.ids_of_awaiting_messages[self.fd].append((
|
||||
id_, thread_id))
|
||||
else:
|
||||
|
@ -195,7 +195,7 @@ class P2PClient(IdleObject):
|
|||
id_ = stanza.getID()
|
||||
if not id_:
|
||||
id_ = self.Dispatcher.getAnID()
|
||||
if self.conn_holder.ids_of_awaiting_messages.has_key(self.fd):
|
||||
if self.fd in self.conn_holder.ids_of_awaiting_messages:
|
||||
self.conn_holder.ids_of_awaiting_messages[self.fd].append((id_,
|
||||
thread_id))
|
||||
else:
|
||||
|
@ -253,10 +253,10 @@ class P2PClient(IdleObject):
|
|||
'Incorrect answer from server.')
|
||||
return
|
||||
if self.sock_type == TYPE_SERVER:
|
||||
if attrs.has_key('from'):
|
||||
if 'from' in attrs:
|
||||
self.to = attrs['from']
|
||||
self.send_stream_header()
|
||||
if attrs.has_key('version') and attrs['version'] == '1.0':
|
||||
if 'version' in attrs and attrs['version'] == '1.0':
|
||||
# other part supports stream features
|
||||
features = Node('stream:features')
|
||||
self.Dispatcher.send(features)
|
||||
|
@ -270,12 +270,12 @@ class P2PClient(IdleObject):
|
|||
|
||||
def on_disconnect(self):
|
||||
if self.conn_holder:
|
||||
if self.conn_holder.ids_of_awaiting_messages.has_key(self.fd):
|
||||
if self.fd in self.conn_holder.ids_of_awaiting_messages:
|
||||
del self.conn_holder.ids_of_awaiting_messages[self.fd]
|
||||
self.conn_holder.remove_connection(self.sock_hash)
|
||||
if self.__dict__.has_key('Dispatcher'):
|
||||
if 'Dispatcher' in self.__dict__:
|
||||
self.Dispatcher.PlugOut()
|
||||
if self.__dict__.has_key('P2PConnection'):
|
||||
if 'P2PConnection' in self.__dict__:
|
||||
self.P2PConnection.PlugOut()
|
||||
self.Connection = None
|
||||
self._caller = None
|
||||
|
@ -294,7 +294,7 @@ class P2PClient(IdleObject):
|
|||
self.Dispatcher.Stream._document_attrs is None:
|
||||
return
|
||||
self.onreceive(None)
|
||||
if self.Dispatcher.Stream._document_attrs.has_key('version') and \
|
||||
if 'version' in self.Dispatcher.Stream._document_attrs and \
|
||||
self.Dispatcher.Stream._document_attrs['version'] == '1.0':
|
||||
#~ self.onreceive(self._on_receive_stream_features)
|
||||
#XXX continue with TLS
|
||||
|
@ -710,7 +710,7 @@ class ClientZeroconf:
|
|||
if self.ip_to_hash[i] == sock_hash:
|
||||
del self.ip_to_hash[i]
|
||||
break
|
||||
if self.hash_to_port.has_key(sock_hash):
|
||||
if sock_hash in self.hash_to_port:
|
||||
del self.hash_to_port[sock_hash]
|
||||
|
||||
def start_listener(self, port):
|
||||
|
|
|
@ -566,7 +566,8 @@ class SingleForm(Gtk.Table, object):
|
|||
for uri in field.media.uris:
|
||||
if uri.type_.startswith('image/'):
|
||||
try:
|
||||
img_data = base64.decodestring(uri.uri_data)
|
||||
img_data = base64.b64decode(uri.uri_data.encode(
|
||||
'utf-8')).decode('utf-8')
|
||||
pixbuf_l = GdkPixbuf.PixbufLoader()
|
||||
pixbuf_l.write(img_data)
|
||||
pixbuf_l.close()
|
||||
|
|
|
@ -193,7 +193,6 @@ class CacheDictionary:
|
|||
|
||||
def __contains__(self, key):
|
||||
return key in self.cache
|
||||
has_key = __contains__
|
||||
|
||||
_icon_cache = CacheDictionary(15)
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ except Exception:
|
|||
|
||||
def send_error(error_message):
|
||||
'''Writes error message to stderr and exits'''
|
||||
print(error_message.encode(PREFERRED_ENCODING), file=sys.stderr)
|
||||
print(error_message, file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
try:
|
||||
|
|
|
@ -122,7 +122,7 @@ def build_invite_submenu(invite_menuitem, list_, ignore_rooms=[]):
|
|||
minimized_controls = []
|
||||
for account in connected_accounts:
|
||||
minimized_controls += \
|
||||
gajim.interface.minimized_controls[account].values()
|
||||
list(gajim.interface.minimized_controls[account].values())
|
||||
for gc_control in gajim.interface.msg_win_mgr.get_controls(
|
||||
message_control.TYPE_GC) + minimized_controls:
|
||||
acct = gc_control.account
|
||||
|
|
|
@ -171,7 +171,8 @@ class ProfileWindow:
|
|||
button.show()
|
||||
text_button = self.xml.get_object('NOPHOTO_button')
|
||||
text_button.hide()
|
||||
self.avatar_encoded = base64.encodestring(data)
|
||||
self.avatar_encoded = base64.b64encode(data.encode('utf-8')).decode(
|
||||
'utf-8')
|
||||
# returns None if unknown type
|
||||
self.avatar_mime_type = mimetypes.guess_type(path_to_file)[0]
|
||||
if must_delete:
|
||||
|
|
|
@ -907,7 +907,7 @@ class SignalObject(dbus.service.Object):
|
|||
if not invalid_file and filesize < 16384:
|
||||
fd = open(picture, 'rb')
|
||||
data = fd.read()
|
||||
avatar = base64.encodestring(data)
|
||||
avatar = base64.b64encode(data.encode('utf-8')).decode('utf-8')
|
||||
avatar_mime_type = mimetypes.guess_type(picture)[0]
|
||||
vcard={}
|
||||
vcard['PHOTO'] = {'BINVAL': avatar}
|
||||
|
|
|
@ -2186,7 +2186,7 @@ class RosterWindow:
|
|||
gajim.interface.status_sent_to_groups[account] = {}
|
||||
for gc_control in gajim.interface.msg_win_mgr.get_controls(
|
||||
message_control.TYPE_GC) + \
|
||||
gajim.interface.minimized_controls[account].values():
|
||||
list(gajim.interface.minimized_controls[account].values()):
|
||||
if gc_control.account == account:
|
||||
if gajim.gc_connected[account][gc_control.room_jid]:
|
||||
gajim.connections[account].send_gc_status(
|
||||
|
@ -3923,7 +3923,7 @@ class RosterWindow:
|
|||
)
|
||||
|
||||
def on_plugins_menuitem_activate(self, widget):
|
||||
if gajim.interface.instances.has_key('plugins'):
|
||||
if 'plugins' in gajim.interface.instances:
|
||||
gajim.interface.instances['plugins'].window.present()
|
||||
else:
|
||||
gajim.interface.instances['plugins'] = plugins.gui.PluginsWindow()
|
||||
|
|
|
@ -61,7 +61,7 @@ def get_avatar_pixbuf_encoded_mime(photo):
|
|||
img_encoded = photo['BINVAL']
|
||||
avatar_encoded = img_encoded
|
||||
try:
|
||||
img_decoded = base64.decodestring(img_encoded)
|
||||
img_decoded = base64.b64decode(img_encoded.encode('utf-8')).decode('utf-8')
|
||||
except Exception:
|
||||
pass
|
||||
if img_decoded:
|
||||
|
|
Loading…
Reference in New Issue