[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [nyx/master] Merging ConnectionEntry into parent class
commit 3d48452bf48d7e125aecb127e85f10e0ca6dae90
Author: Damian Johnson <atagar@xxxxxxxxxxxxxx>
Date: Sat Jul 25 18:11:52 2015 -0700
Merging ConnectionEntry into parent class
What a mess. The ConnectionEntry was the sole subclass of the parent. I see
what I was intending to do with the separation, but... seriously? *sigh*
---
nyx/connections/conn_entry.py | 52 --------------------------------
nyx/connections/conn_panel.py | 2 +-
nyx/connections/entries.py | 67 +++++++++++++++++++++++++++++------------
3 files changed, 48 insertions(+), 73 deletions(-)
diff --git a/nyx/connections/conn_entry.py b/nyx/connections/conn_entry.py
index 7693982..ec1779e 100644
--- a/nyx/connections/conn_entry.py
+++ b/nyx/connections/conn_entry.py
@@ -42,10 +42,6 @@ CATEGORY_COLOR = {
LABEL_FORMAT = '%s --> %s %s%s'
LABEL_MIN_PADDING = 2 # min space between listing label and following data
-# sort value for scrubbed ip addresses
-
-SCRUBBED_IP_VAL = 255 ** 4
-
CONFIG = conf.config_dict('nyx', {
'features.connection.markInitialConnections': True,
'features.connection.showIps': True,
@@ -119,54 +115,6 @@ class Endpoint:
return default
-class ConnectionEntry(entries.ConnectionPanelEntry):
- """
- Represents a connection being made to or from this system. These only
- concern real connections so it includes the inbound, outbound, directory,
- application, and controller categories.
- """
-
- def __init__(self, conn):
- entries.ConnectionPanelEntry.__init__(self)
- self.connection = conn
- self.lines = [ConnectionLine(conn)]
-
- def get_sort_value(self, attr, listing_type):
- """
- Provides the value of a single attribute used for sorting purposes.
- """
-
- connection_line = self.lines[0]
-
- if attr == entries.SortAttr.IP_ADDRESS:
- if connection_line.is_private():
- return SCRUBBED_IP_VAL # orders at the end
-
- return connection_line.sort_address
- elif attr == entries.SortAttr.PORT:
- return connection_line.sort_port
- elif attr == entries.SortAttr.FINGERPRINT:
- return connection_line.foreign.get_fingerprint('UNKNOWN')
- elif attr == entries.SortAttr.NICKNAME:
- my_nickname = connection_line.foreign.get_nickname()
-
- if my_nickname:
- return my_nickname.lower()
- else:
- return 'z' * 20 # orders at the end
- elif attr == entries.SortAttr.CATEGORY:
- return Category.index_of(connection_line.get_type())
- elif attr == entries.SortAttr.UPTIME:
- return self.connection.start_time
- elif attr == entries.SortAttr.COUNTRY:
- if connection.is_private_address(self.lines[0].foreign.get_address()):
- return ''
- else:
- return connection_line.foreign.get_locale('')
- else:
- return entries.ConnectionPanelEntry.get_sort_value(self, attr, listing_type)
-
-
class ConnectionLine(entries.ConnectionPanelLine):
"""
Display component of the ConnectionEntry.
diff --git a/nyx/connections/conn_panel.py b/nyx/connections/conn_panel.py
index 364c42f..18fe7e7 100644
--- a/nyx/connections/conn_panel.py
+++ b/nyx/connections/conn_panel.py
@@ -470,7 +470,7 @@ class ConnectionPanel(panel.Panel, threading.Thread):
current_resolution_count = conn_resolver.run_counter()
with self._vals_lock:
- new_entries = [conn_entry.ConnectionEntry(conn) for conn in conn_resolver.get_value()]
+ new_entries = [entries.ConnectionPanelEntry.from_connection(conn) for conn in conn_resolver.get_value()]
for circ in tor_controller().get_circuits([]):
# Skips established single-hop circuits (these are for directory
diff --git a/nyx/connections/entries.py b/nyx/connections/entries.py
index f4693b0..301b457 100644
--- a/nyx/connections/entries.py
+++ b/nyx/connections/entries.py
@@ -29,32 +29,36 @@ SORT_COLORS = {
PORT_COUNT = 65536
+# sort value for scrubbed ip addresses
+
+SCRUBBED_IP_VAL = 255 ** 4
+
def to_unix_time(dt):
return (dt - datetime.datetime(1970, 1, 1)).total_seconds()
class ConnectionPanelEntry:
- """
- Common parent for connection panel entries. This consists of a list of lines
- in the panel listing. This caches results until the display indicates that
- they should be flushed.
- """
-
- def __init__(self):
+ def __init__(self, start_time):
self.lines = []
self.flush_cache = True
+ self.start_time = start_time
+ self.lines = []
+
+ @staticmethod
+ def from_connection(conn):
+ import nyx.connections.conn_entry
+
+ entry = ConnectionPanelEntry(conn.start_time)
+ entry.lines = [nyx.connections.conn_entry.ConnectionLine(conn)]
+ return entry
@staticmethod
def from_circuit(circ):
import nyx.connections.circ_entry
- import nyx.connections.conn_entry
import nyx.util.tracker
- # TODO: should be ConnectionPanelEntry rather than a ConnectionEntry, but
- # looks like that presently provides sorting
-
- entry = nyx.connections.conn_entry.ConnectionEntry(nyx.util.tracker.Connection(to_unix_time(circ.created), False, '127.0.0.1', 0, '127.0.0.1', 0, 'tcp'))
+ entry = ConnectionPanelEntry(to_unix_time(circ.created))
entry.lines = [nyx.connections.circ_entry.CircHeaderLine(circ)]
path = [path_entry[0] for path_entry in circ.path]
@@ -116,14 +120,37 @@ class ConnectionPanelEntry:
def get_sort_value(self, attr, listing_type):
"""
Provides the value of a single attribute used for sorting purposes.
-
- Arguments:
- attr - list of SortAttr values for the field being sorted on
- listing_type - ListingType enumeration for the attribute we're listing
- entries by
"""
- if attr == SortAttr.LISTING:
+ connection_line = self.lines[0]
+
+ if attr == SortAttr.IP_ADDRESS:
+ if connection_line.is_private():
+ return SCRUBBED_IP_VAL # orders at the end
+
+ return connection_line.sort_address
+ elif attr == SortAttr.PORT:
+ return connection_line.sort_port
+ elif attr == SortAttr.FINGERPRINT:
+ return connection_line.foreign.get_fingerprint('UNKNOWN')
+ elif attr == SortAttr.NICKNAME:
+ my_nickname = connection_line.foreign.get_nickname()
+
+ if my_nickname:
+ return my_nickname.lower()
+ else:
+ return 'z' * 20 # orders at the end
+ elif attr == SortAttr.CATEGORY:
+ import nyx.connections.conn_entry
+ return nyx.connections.conn_entry.Category.index_of(connection_line.get_type())
+ elif attr == SortAttr.UPTIME:
+ return self.start_time
+ elif attr == SortAttr.COUNTRY:
+ if connection_line.connection.is_private_address(self.lines[0].foreign.get_address()):
+ return ''
+ else:
+ return connection_line.foreign.get_locale('')
+ elif attr == SortAttr.LISTING:
if listing_type == ListingType.IP_ADDRESS:
# uses the IP address as the primary value, and port as secondary
sort_value = self.get_sort_value(SortAttr.IP_ADDRESS, listing_type) * PORT_COUNT
@@ -133,8 +160,8 @@ class ConnectionPanelEntry:
return self.get_sort_value(SortAttr.FINGERPRINT, listing_type)
elif listing_type == ListingType.NICKNAME:
return self.get_sort_value(SortAttr.NICKNAME, listing_type)
-
- return ''
+ else:
+ return ''
def reset_display(self):
"""
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits