[tor-commits] [nyx/master] Split line detail rendering into its own function

atagar at torproject.org atagar at torproject.org
Tue Sep 22 17:08:42 UTC 2015


commit f5c7984f118e01950192db841ff3be261441edb8
Author: Damian Johnson <atagar at torproject.org>
Date:   Sun Sep 20 12:35:51 2015 -0700

    Split line detail rendering into its own function
---
 nyx/connection_panel.py |   62 ++++++++++++++++++-----------------------------
 1 file changed, 24 insertions(+), 38 deletions(-)

diff --git a/nyx/connection_panel.py b/nyx/connection_panel.py
index 7b6d4df..540c094 100644
--- a/nyx/connection_panel.py
+++ b/nyx/connection_panel.py
@@ -169,7 +169,7 @@ class ConnectionEntry(Entry):
 
       if fingerprint:
         nickname = nyx.util.tracker.get_consensus_tracker().get_relay_nickname(fingerprint)
-        locale = tor_controller().get_info('ip-to-country/%s' % connection.remote_address, None)
+        locale = tor_controller().get_info('ip-to-country/%s' % self._connection.remote_address, None)
 
     return [Line(self, LineType.CONNECTION, self._connection, None, fingerprint, nickname, locale)]
 
@@ -566,41 +566,6 @@ class ConnectionPanel(panel.Panel, threading.Thread):
     attr = nyx.util.ui_tools.get_color(CONFIG['attr.connection.category_color'].get(line.entry.get_type(), 'white'))
     attr |= curses.A_STANDOUT if is_selected else curses.A_NORMAL
 
-    def get_etc_content(line, width):
-      if line.line_type == LineType.CIRCUIT_HEADER:
-        etc_attr = ['Purpose: %s' % line.circuit.purpose.capitalize(), 'Circuit ID: %s' % line.circuit.id]
-
-        for i in range(len(etc_attr), -1, -1):
-          etc_label = ', '.join(etc_attr[:i])
-
-          if width >= len(etc_label):
-            return etc_label
-
-        return ''
-      elif line.entry.get_type() in (Category.SOCKS, Category.HIDDEN, Category.CONTROL):
-        # for applications show the command/pid
-
-        try:
-          port = line.connection.local_port if line.entry.get_type() == Category.HIDDEN else line.connection.remote_port
-          process = nyx.util.tracker.get_port_usage_tracker().fetch(port)
-          display_label = '%s (%s)' % (process.name, process.pid) if process.pid else process.name
-        except nyx.util.tracker.UnresolvedResult:
-          display_label = 'resolving...'
-        except nyx.util.tracker.UnknownApplication:
-          display_label = 'UNKNOWN'
-
-        return display_label if len(display_label) < width else ''
-      else:
-        fingerprint = line.fingerprint if line.fingerprint else 'UNKNOWN'
-        nickname = line.nickname if line.nickname else 'UNKNOWN'
-
-        if width > 52:
-          return '%-40s  %s' % (fingerprint, str_tools.crop(nickname, width - 42, 0))
-        elif width > 42:
-          return fingerprint
-        else:
-          return ''
-
     self.addstr(y, x, ' ' * (width - x), attr)
 
     if line.line_type != LineType.CIRCUIT:
@@ -610,14 +575,14 @@ class ConnectionPanel(panel.Panel, threading.Thread):
       time_label = time_prefix + '%5s' % str_tools.time_label(current_time - line.connection.start_time, 1)
 
       x = self._draw_address_column(x + 1, y, line, attr)
-      x = self.addstr(y, x + 2, get_etc_content(line, subsection_width - x), attr)
+      self._draw_line_details(x + 2, y, line, subsection_width - x, attr)
       x = self.addstr(y, subsection_width + 1, time_label, attr)
       x = self.addstr(y, x, ' (', attr)
       x = self.addstr(y, x, line.entry.get_type().upper(), attr | curses.A_BOLD)
       x = self.addstr(y, x, ')', attr)
     else:
       self._draw_address_column(x, y, line, attr)
-      self.addstr(y, x + 53, get_etc_content(line, width - x - 19 - 53), attr)
+      self._draw_line_details(x + 53, y, line, width - x - 19 - 53, attr)
 
       circ_path = [fp for fp, _ in line.circuit.path]
       circ_index = circ_path.index(line.fingerprint)
@@ -657,6 +622,27 @@ class ConnectionPanel(panel.Panel, threading.Thread):
     else:
       return self.addstr(y, x, '%-21s  -->  %-26s' % (src, dst), attr)
 
+  def _draw_line_details(self, x, y, line, width, attr):
+    if line.line_type == LineType.CIRCUIT_HEADER:
+      comp = ['Purpose: %s' % line.circuit.purpose.capitalize(), ', Circuit ID: %s' % line.circuit.id]
+    elif line.entry.get_type() in (Category.SOCKS, Category.HIDDEN, Category.CONTROL):
+      try:
+        port = line.connection.local_port if line.entry.get_type() == Category.HIDDEN else line.connection.remote_port
+        process = nyx.util.tracker.get_port_usage_tracker().fetch(port)
+        comp = ['%s (%s)' % (process.name, process.pid) if process.pid else process.name]
+      except nyx.util.tracker.UnresolvedResult:
+        comp = ['resolving...']
+      except nyx.util.tracker.UnknownApplication:
+        comp = ['UNKNOWN']
+    else:
+      comp = ['%-40s' % (line.fingerprint if line.fingerprint else 'UNKNOWN'), '  ' + (line.nickname if line.nickname else 'UNKNOWN')]
+
+    for entry in comp:
+      if width >= x + len(entry):
+        x = self.addstr(y, x, entry, attr)
+      else:
+        return
+
   def stop(self):
     """
     Halts further resolutions and terminates the thread.





More information about the tor-commits mailing list