Author: asterix
Date: 2008-12-03 18:38:16 +0100 (Wed, 03 Dec 2008)
New Revision: 10758
Modified:
trunk/src/chat_control.py
trunk/src/common/connection.py
trunk/src/common/helpers.py
trunk/src/common/xmpp/dispatcher_nb.py
trunk/src/conversation_textview.py
trunk/src/htmltextview.py
trunk/src/profile_window.py
trunk/src/roster_window.py
trunk/src/tooltips.py
Log:
[thorstenp] fix possible undefined loop variables
Modified: trunk/src/chat_control.py
===================================================================
--- trunk/src/chat_control.py 2008-12-03 17:16:04 UTC (rev 10757)
+++ trunk/src/chat_control.py 2008-12-03 17:38:16 UTC (rev 10758)
@@ -400,14 +400,12 @@
def disconnect_style_event(self, widget):
# Try to find the event_id
- found = False
- for id_ in self.handlers:
+ for id_ in self.handlers.keys():
if self.handlers[id_] == widget:
- found = True
+ widget.disconnect(id_)
+ del self.handlers[id_]
break
if found:
- widget.disconnect(id_)
- del self.handlers[id_]
def connect_style_event(self, widget, set_fg = False, set_bg = False):
self.disconnect_style_event(widget)
Modified: trunk/src/common/connection.py
===================================================================
--- trunk/src/common/connection.py 2008-12-03 17:16:04 UTC (rev 10757)
+++ trunk/src/common/connection.py 2008-12-03 17:38:16 UTC (rev 10758)
@@ -35,6 +35,7 @@
import os
import random
import socket
+import operator
import time
import locale
@@ -379,30 +380,31 @@
self.dispatch('STANZA_SENT', unicode(data))
def _select_next_host(self, hosts):
- '''Chooses best 'real' host basing on the SRV priority and weight data;
- more info in RFC2782'''
- hosts_best_prio = []
- best_prio = 65535
- sum_weight = 0
- for h in hosts:
- if h['prio'] < best_prio:
- hosts_best_prio = [h]
- best_prio = h['prio']
- sum_weight = h['weight']
- elif h['prio'] == best_prio:
- hosts_best_prio.append(h)
- sum_weight += h['weight']
- if len(hosts_best_prio) == 1:
- return hosts_best_prio[0]
- r = random.randint(0, sum_weight)
- min_w = sum_weight
- # We return the one for which has the minimum weight and weight >= r
- for h in hosts_best_prio:
- if h['weight'] >= r:
- if h['weight'] <= min_w:
- min_w = h['weight']
- return h
+ '''Selects the next host according to RFC2782 p.3 based on it's
+ priority. Chooses between hosts with the same priority randomly,
+ where the probability of being selected is proportional to the weight
+ of the host.'''
+ hosts_by_prio = sorted(hosts, key=operator.itemgetter('prio'))
+
+ try:
+ lowest_prio = hosts_by_prio[0]['prio']
+ except IndexError:
+ raise ValueError("No hosts to choose from!")
+
+ hosts_lowest_prio = [h for h in hosts_by_prio if h['prio'] == lowest_prio]
+
+ if len(hosts_lowest_prio) == 1:
+ return hosts_lowest_prio[0]
+ else:
+ rndint = random.randint(0, sum(h['weight'] for h in hosts_lowest_prio))
+ weightsum = 0
+ for host in sorted(hosts_lowest_prio, key=operator.itemgetter(
+ 'weight')):
+ weightsum += host['weight']
+ if weightsum >= rndint:
+ return host
+
def connect(self, data = None):
''' Start a connection to the Jabber server.
Returns connection, and connection type ('tls', 'ssl', 'tcp', '')
Modified: trunk/src/common/helpers.py
===================================================================
--- trunk/src/common/helpers.py 2008-12-03 17:16:04 UTC (rev 10757)
+++ trunk/src/common/helpers.py 2008-12-03 17:38:16 UTC (rev 10758)
@@ -410,31 +410,23 @@
return _('has closed the chat window or tab')
return ''
-def is_in_path(name_of_command, return_abs_path = False):
- # if return_abs_path is True absolute path will be returned
- # for name_of_command
- # on failures False is returned
- is_in_dir = False
- found_in_which_dir = None
- path = os.getenv('PATH').split(os.pathsep)
- for path_to_directory in path:
+def is_in_path(command, return_abs_path=False):
+ '''Returns True if 'command' is found in one of the directories in the
+ user's path. If 'return_abs_path' is True, returns the absolute path of
+ the first found command instead. Returns False otherwise and on errors.'''
+
+ for directory in os.getenv('PATH').split(os.pathsep):
try:
- contents = os.listdir(path_to_directory)
- except OSError: # user can have something in PATH that is not a dir
+ if command in os.listdir(directory):
+ if return_abs_path:
+ return os.path.join(directory, command)
+ else:
+ return True
+ except OSError:
+ # If the user has non directories in his path
pass
- else:
- is_in_dir = name_of_command in contents
- if is_in_dir:
- if return_abs_path:
- found_in_which_dir = path_to_directory
- break
+ return False
- if found_in_which_dir:
- abs_path = os.path.join(path_to_directory, name_of_command)
- return abs_path
- else:
- return is_in_dir
-
def exec_command(command):
subprocess.Popen(command, shell = True)
Modified: trunk/src/common/xmpp/dispatcher_nb.py
===================================================================
--- trunk/src/common/xmpp/dispatcher_nb.py 2008-12-03 17:16:04 UTC (rev 10757)
+++ trunk/src/common/xmpp/dispatcher_nb.py 2008-12-03 17:38:16 UTC (rev 10758)
@@ -227,14 +227,11 @@
if typ+ns not in self.handlers[xmlns][name]:
return
for pack in self.handlers[xmlns][name][typ+ns]:
- if handler==pack['func']:
- break
- else:
- pack=None
- try:
- self.handlers[xmlns][name][typ+ns].remove(pack)
- except ValueError:
- pass
+ if pack['func'] == handler:
+ try:
+ self.handlers[xmlns][name][typ+ns].remove(pack)
+ except ValueError:
+ pass
def RegisterDefaultHandler(self,handler):
''' Specify the handler that will be used if no NodeProcessed exception were raised.
Modified: trunk/src/conversation_textview.py
===================================================================
--- trunk/src/conversation_textview.py 2008-12-03 17:16:04 UTC (rev 10757)
+++ trunk/src/conversation_textview.py 2008-12-03 17:38:16 UTC (rev 10758)
@@ -211,7 +211,7 @@
self.account = account
- self.change_cursor = None
+ self.change_cursor = False
self.last_time_printout = 0
font = pango.FontDescription(gajim.config.get('conversation_font'))
@@ -618,7 +618,7 @@
if self.change_cursor:
self.tv.get_window(gtk.TEXT_WINDOW_TEXT).set_cursor(
gtk.gdk.Cursor(gtk.gdk.XTERM))
- self.change_cursor = None
+ self.change_cursor = False
tag_table = self.tv.get_buffer().get_tag_table()
over_line = False
xep0184_warning = False
@@ -627,7 +627,7 @@
tag_table.lookup('xmpp'), tag_table.lookup('sth_at_sth')):
self.tv.get_window(gtk.TEXT_WINDOW_TEXT).set_cursor(
gtk.gdk.Cursor(gtk.gdk.HAND2))
- self.change_cursor = tag
+ self.change_cursor = True
elif tag == tag_table.lookup('focus-out-line'):
over_line = True
elif tag == tag_table.lookup('xep0184-warning'):
@@ -642,14 +642,13 @@
self.show_line_tooltip)
self.tv.get_window(gtk.TEXT_WINDOW_TEXT).set_cursor(
gtk.gdk.Cursor(gtk.gdk.LEFT_PTR))
- self.change_cursor = tag
+ self.change_cursor = True
if xep0184_warning and not self.xep0184_warning_tooltip.win:
- self.xep0184_warning_tooltip.timeout = \
- gobject.timeout_add(500,
+ self.xep0184_warning_tooltip.timeout = gobject.timeout_add(500,
self.show_xep0184_warning_tooltip)
self.tv.get_window(gtk.TEXT_WINDOW_TEXT).set_cursor(
gtk.gdk.Cursor(gtk.gdk.LEFT_PTR))
- self.change_cursor = tag
+ self.change_cursor = True
def clear(self, tv = None):
'''clear text in the textview'''
Modified: trunk/src/htmltextview.py
===================================================================
--- trunk/src/htmltextview.py 2008-12-03 17:16:04 UTC (rev 10757)
+++ trunk/src/htmltextview.py 2008-12-03 17:38:16 UTC (rev 10758)
@@ -967,21 +967,17 @@
x, y, _ = widget.window.get_pointer()
x, y = widget.window_to_buffer_coords(gtk.TEXT_WINDOW_TEXT, x, y)
tags = widget.get_iter_at_location(x, y).get_tags()
- is_over_anchor = False
- for tag in tags:
- if getattr(tag, 'is_anchor', False):
- is_over_anchor = True
- break
+ anchor_tags = [tag for tag in tags if getattr(tag, 'is_anchor', False)]
if self.tooltip.timeout != 0:
# Check if we should hide the line tooltip
- if not is_over_anchor:
+ if not anchor_tags:
self.tooltip.hide_tooltip()
- if not self._changed_cursor and is_over_anchor:
+ if not self._changed_cursor and anchor_tags:
window = widget.get_window(gtk.TEXT_WINDOW_TEXT)
window.set_cursor(gtk.gdk.Cursor(gtk.gdk.HAND2))
self._changed_cursor = True
- self.tooltip.timeout = gobject.timeout_add(500, self.show_tooltip, tag)
- elif self._changed_cursor and not is_over_anchor:
+ self.tooltip.timeout = gobject.timeout_add(500, self.show_tooltip, anchor_tags[0])
+ elif self._changed_cursor and not anchor_tags:
window = widget.get_window(gtk.TEXT_WINDOW_TEXT)
window.set_cursor(gtk.gdk.Cursor(gtk.gdk.XTERM))
self._changed_cursor = False
Modified: trunk/src/profile_window.py
===================================================================
--- trunk/src/profile_window.py 2008-12-03 17:16:04 UTC (rev 10757)
+++ trunk/src/profile_window.py 2008-12-03 17:38:16 UTC (rev 10758)
@@ -266,10 +266,8 @@
found = False
for e in loc[entries[0]]:
if entries[1] in e:
- found = True
+ e[entries[2]] = txt
break
- if found:
- e[entries[2]] = txt
else:
loc[entries[0]].append({entries[1]: '', entries[2]: txt})
return vcard_
Modified: trunk/src/roster_window.py
===================================================================
--- trunk/src/roster_window.py 2008-12-03 17:16:04 UTC (rev 10757)
+++ trunk/src/roster_window.py 2008-12-03 17:38:16 UTC (rev 10758)
@@ -2512,7 +2512,7 @@
_('You must read them before removing this transport.'))
return
if len(list_) == 1:
- pritext = _('Transport "%s" will be removed') % contact.jid
+ pritext = _('Transport "%s" will be removed') % list_[0][0].jid
sectext = _('You will no longer be able to send and receive messages '
'from contacts using this transport.')
else:
@@ -2564,12 +2564,12 @@
'value' : group, 'child': [u'message', u'iq', u'presence-out']}
gajim.connections[account].blocked_list.append(new_rule)
for account in accounts:
- gajim.connections[account].set_privacy_list(
- 'block', gajim.connections[account].blocked_list)
- if len(gajim.connections[account].blocked_list) == 1:
- gajim.connections[account].set_active_list('block')
- gajim.connections[account].set_default_list('block')
- gajim.connections[account].get_privacy_list('block')
+ connection = gajim.connections[account]
+ connection.set_privacy_list('block', connection.blocked_list)
+ if len(connection.blocked_list) == 1:
+ connection.set_active_list('block')
+ connection.set_default_list('block')
+ connection.get_privacy_list('block')
self.get_status_message('offline', on_continue)
Modified: trunk/src/tooltips.py
===================================================================
--- trunk/src/tooltips.py 2008-12-03 17:16:04 UTC (rev 10757)
+++ trunk/src/tooltips.py 2008-12-03 17:38:16 UTC (rev 10758)
@@ -463,13 +463,13 @@
contact_keys = sorted(contacts_dict.keys())
contact_keys.reverse()
for priority in contact_keys:
- for contact in contacts_dict[priority]:
- status_line = self.get_status_info(contact.resource,
- contact.priority, contact.show, contact.status)
+ for acontact in contacts_dict[priority]:
+ status_line = self.get_status_info(acontact.resource,
+ acontact.priority, acontact.show, acontact.status)
- icon_name = self._get_icon_name_for_tooltip(contact)
+ icon_name = self._get_icon_name_for_tooltip(acontact)
self.add_status_row(file_path, icon_name, status_line,
- contact.last_status_time)
+ acontact.last_status_time)
properties.append((self.table, None))
else: # only one resource