commit 77e53454fb75f2477f3ad0473a241bfc770a432b Author: Damian Johnson atagar@torproject.org Date: Sun Aug 30 12:14:56 2015 -0700
Localize sort functionality in panel's sort function
Merging the get_sort_value() into the sort function. Nice simplification. --- nyx/connections/conn_panel.py | 39 ++++++++++++++++++++++++++++++++------- nyx/connections/entries.py | 38 -------------------------------------- 2 files changed, 32 insertions(+), 45 deletions(-)
diff --git a/nyx/connections/conn_panel.py b/nyx/connections/conn_panel.py index b9c4980..f28c943 100644 --- a/nyx/connections/conn_panel.py +++ b/nyx/connections/conn_panel.py @@ -158,18 +158,43 @@ class ConnectionPanel(panel.Panel, threading.Thread): ordering_keys = [entries.SortAttr.keys()[entries.SortAttr.index_of(v)] for v in ordering] nyx_config.set('features.connection.order', ', '.join(ordering_keys))
- def sort_type(attr): + def sort_value(entry, attr): if attr == entries.SortAttr.LISTING: if self.get_listing_type() == entries.ListingType.IP_ADDRESS: - return entries.SortAttr.IP_ADDRESS + attr = entries.SortAttr.IP_ADDRESS elif self.get_listing_type() == entries.ListingType.FINGERPRINT: - return entries.SortAttr.FINGERPRINT + attr = entries.SortAttr.FINGERPRINT elif self.get_listing_type() == entries.ListingType.NICKNAME: - return entries.SortAttr.NICKNAME - - return attr + attr = entries.SortAttr.NICKNAME + + connection_line = entry.get_lines()[0] + + if attr == entries.SortAttr.IP_ADDRESS: + if entry.is_private(): + return 255 ** 4 # orders at the end + + ip_value = 0 + + for octet in connection_line.connection.remote_address.split('.'): + ip_value = ip_value * 255 + int(octet) + + return ip_value * 65536 + connection_line.connection.remote_port + elif attr == entries.SortAttr.PORT: + return connection_line.connection.remote_port + elif attr == entries.SortAttr.FINGERPRINT: + return connection_line.get_fingerprint('UNKNOWN') + elif attr == entries.SortAttr.NICKNAME: + return connection_line.get_nickname('z' * 20) + elif attr == entries.SortAttr.CATEGORY: + return conn_entry.Category.index_of(entry.get_type()) + elif attr == entries.SortAttr.UPTIME: + return connection_line.connection.start_time + elif attr == entries.SortAttr.COUNTRY: + return '' if entry.is_private() else connection_line.get_locale('') + else: + return ''
- self._entries.sort(key = lambda i: [i.get_sort_value(sort_type(attr)) for attr in CONFIG['features.connection.order']]) + self._entries.sort(key = lambda i: [sort_value(i, attr) for attr in CONFIG['features.connection.order']]) self._entry_lines = list(itertools.chain.from_iterable([entry.get_lines() for entry in self._entries]))
def get_listing_type(self): diff --git a/nyx/connections/entries.py b/nyx/connections/entries.py index b30ae43..20d19a8 100644 --- a/nyx/connections/entries.py +++ b/nyx/connections/entries.py @@ -113,44 +113,6 @@ class Entry(object):
return self._lines
- @lru_cache() - def get_sort_value(self, attr): - """ - Value for sorting by a given attribute. - - :param SortAtt attr: attribute to be sorted by - - :returns: comparable object by the given attribute - """ - - connection_line = self._lines[0] - - if attr == SortAttr.IP_ADDRESS: - if self.is_private(): - return 255 ** 4 # orders at the end - - ip_value = 0 - - for octet in connection_line.connection.remote_address.split('.'): - ip_value = ip_value * 255 + int(octet) - - return ip_value * 65536 + connection_line.connection.remote_port - elif attr == SortAttr.PORT: - return connection_line.connection.remote_port - elif attr == SortAttr.FINGERPRINT: - return connection_line.get_fingerprint('UNKNOWN') - elif attr == SortAttr.NICKNAME: - return connection_line.get_nickname('z' * 20) - elif attr == SortAttr.CATEGORY: - import nyx.connections.conn_entry - return nyx.connections.conn_entry.Category.index_of(self.get_type()) - elif attr == SortAttr.UPTIME: - return connection_line.connection.start_time - elif attr == SortAttr.COUNTRY: - return '' if self.is_private() else connection_line.get_locale('') - else: - return '' -
class ConnectionPanelLine: """
tor-commits@lists.torproject.org