[tor-commits] [nyx/master] Use draw() for connection panel

atagar at torproject.org atagar at torproject.org
Sun Jul 10 19:51:05 UTC 2016


commit 18c7b0c01f0eb00c87f030d606a2d5d2278d3d9a
Author: Damian Johnson <atagar at torproject.org>
Date:   Wed Jul 6 09:29:36 2016 -0700

    Use draw() for connection panel
---
 nyx/panel/__init__.py   |  2 +-
 nyx/panel/connection.py | 94 ++++++++++++++++++++++++-------------------------
 2 files changed, 48 insertions(+), 48 deletions(-)

diff --git a/nyx/panel/__init__.py b/nyx/panel/__init__.py
index 4784292..ca16f9e 100644
--- a/nyx/panel/__init__.py
+++ b/nyx/panel/__init__.py
@@ -266,7 +266,7 @@ class Panel(object):
     if not self.visible or HALT_ACTIVITY:
       return
 
-    if self.panel_name in ('header', 'graph', 'log'):
+    if self.panel_name in ('header', 'graph', 'log', 'connections'):
       height = self.get_height() if self.get_height() != -1 else None
       width = self.get_width() if self.get_width() != -1 else None
 
diff --git a/nyx/panel/connection.py b/nyx/panel/connection.py
index 863be22..cee63e2 100644
--- a/nyx/panel/connection.py
+++ b/nyx/panel/connection.py
@@ -399,14 +399,14 @@ class ConnectionPanel(nyx.panel.DaemonPanel):
 
     return tuple(options)
 
-  def draw(self, width, height):
+  def draw(self, subwindow):
     controller = tor_controller()
     entries = self._entries
 
     lines = list(itertools.chain.from_iterable([entry.get_lines() for entry in entries]))
     is_showing_details = self._show_details and lines
     details_offset = DETAILS_HEIGHT + 1 if is_showing_details else 0
-    selected, scroll = self._scroller.selection(lines, height - details_offset - 1)
+    selected, scroll = self._scroller.selection(lines, subwindow.height - details_offset - 1)
 
     if self.is_paused():
       current_time = self.get_pause_time()
@@ -415,39 +415,39 @@ class ConnectionPanel(nyx.panel.DaemonPanel):
     else:
       current_time = time.time()
 
-    is_scrollbar_visible = len(lines) > height - details_offset - 1
+    is_scrollbar_visible = len(lines) > subwindow.height - details_offset - 1
     scroll_offset = 2 if is_scrollbar_visible else 0
 
-    self._draw_title(entries, self._show_details)
+    self._draw_title(subwindow, entries, self._show_details)
 
     if is_showing_details:
-      self._draw_details(selected, width, is_scrollbar_visible)
+      self._draw_details(subwindow, selected, subwindow.width, is_scrollbar_visible)
 
     if is_scrollbar_visible:
-      self.add_scroll_bar(scroll, scroll + height - details_offset - 1, len(lines), 1 + details_offset)
+      subwindow.scrollbar(1 + details_offset, scroll, len(lines))
 
     for line_number in range(scroll, len(lines)):
       y = line_number + details_offset + 1 - scroll
-      self._draw_line(scroll_offset, y, lines[line_number], lines[line_number] == selected, width - scroll_offset, current_time)
+      self._draw_line(subwindow, scroll_offset, y, lines[line_number], lines[line_number] == selected, subwindow.width - scroll_offset, current_time)
 
-      if y >= height:
+      if y >= subwindow.height:
         break
 
-  def _draw_title(self, entries, showing_details):
+  def _draw_title(self, subwindow, entries, showing_details):
     """
     Panel title with the number of connections we presently have.
     """
 
     if showing_details:
-      self.addstr(0, 0, 'Connection Details:', HIGHLIGHT)
+      subwindow.addstr(0, 0, 'Connection Details:', HIGHLIGHT)
     elif not entries:
-      self.addstr(0, 0, 'Connections:', HIGHLIGHT)
+      subwindow.addstr(0, 0, 'Connections:', HIGHLIGHT)
     else:
       counts = collections.Counter([entry.get_type() for entry in entries])
       count_labels = ['%i %s' % (counts[category], category.lower()) for category in Category if counts[category]]
-      self.addstr(0, 0, 'Connections (%s):' % ', '.join(count_labels), HIGHLIGHT)
+      subwindow.addstr(0, 0, 'Connections (%s):' % ', '.join(count_labels), HIGHLIGHT)
 
-  def _draw_details(self, selected, width, is_scrollbar_visible):
+  def _draw_details(self, subwindow, selected, width, is_scrollbar_visible):
     """
     Shows detailed information about the selected connection.
     """
@@ -455,64 +455,64 @@ class ConnectionPanel(nyx.panel.DaemonPanel):
     attr = (CONFIG['attr.connection.category_color'].get(selected.entry.get_type(), WHITE), BOLD)
 
     if selected.line_type == LineType.CIRCUIT_HEADER and selected.circuit.status != 'BUILT':
-      self.addstr(1, 2, 'Building Circuit...', *attr)
+      subwindow.addstr(2, 1, 'Building Circuit...', *attr)
     else:
       address = '<scrubbed>' if selected.entry.is_private() else selected.connection.remote_address
-      self.addstr(1, 2, 'address: %s:%s' % (address, selected.connection.remote_port), *attr)
-      self.addstr(2, 2, 'locale: %s' % ('??' if selected.entry.is_private() else (selected.locale if selected.locale else '??')), *attr)
+      subwindow.addstr(2, 1, 'address: %s:%s' % (address, selected.connection.remote_port), *attr)
+      subwindow.addstr(2, 2, 'locale: %s' % ('??' if selected.entry.is_private() else (selected.locale if selected.locale else '??')), *attr)
 
       matches = nyx.tracker.get_consensus_tracker().get_relay_fingerprints(selected.connection.remote_address)
 
       if not matches:
-        self.addstr(3, 2, 'No consensus data found', *attr)
+        subwindow.addstr(2, 3, 'No consensus data found', *attr)
       elif len(matches) == 1 or selected.connection.remote_port in matches:
         controller = tor_controller()
         fingerprint = matches.values()[0] if len(matches) == 1 else matches[selected.connection.remote_port]
         router_status_entry = controller.get_network_status(fingerprint, None)
 
-        self.addstr(2, 15, 'fingerprint: %s' % fingerprint, *attr)
+        subwindow.addstr(15, 2, 'fingerprint: %s' % fingerprint, *attr)
 
         if router_status_entry:
           dir_port_label = 'dirport: %s' % router_status_entry.dir_port if router_status_entry.dir_port else ''
-          self.addstr(3, 2, 'nickname: %-25s orport: %-10s %s' % (router_status_entry.nickname, router_status_entry.or_port, dir_port_label), *attr)
-          self.addstr(4, 2, 'published: %s' % router_status_entry.published.strftime("%H:%M %m/%d/%Y"), *attr)
-          self.addstr(5, 2, 'flags: %s' % ', '.join(router_status_entry.flags), *attr)
+          subwindow.addstr(2, 3, 'nickname: %-25s orport: %-10s %s' % (router_status_entry.nickname, router_status_entry.or_port, dir_port_label), *attr)
+          subwindow.addstr(2, 4, 'published: %s' % router_status_entry.published.strftime("%H:%M %m/%d/%Y"), *attr)
+          subwindow.addstr(2, 5, 'flags: %s' % ', '.join(router_status_entry.flags), *attr)
 
           server_descriptor = controller.get_server_descriptor(fingerprint, None)
 
           if server_descriptor:
             policy_label = server_descriptor.exit_policy.summary() if server_descriptor.exit_policy else 'unknown'
-            self.addstr(6, 2, 'exit policy: %s' % policy_label, *attr)
-            self.addstr(4, 38, 'os: %-14s version: %s' % (server_descriptor.operating_system, server_descriptor.tor_version), *attr)
+            subwindow.addstr(2, 6, 'exit policy: %s' % policy_label, *attr)
+            subwindow.addstr(38, 4, 'os: %-14s version: %s' % (server_descriptor.operating_system, server_descriptor.tor_version), *attr)
 
             if server_descriptor.contact:
-              self.addstr(7, 2, 'contact: %s' % server_descriptor.contact, *attr)
+              subwindow.addstr(2, 7, 'contact: %s' % server_descriptor.contact, *attr)
       else:
-        self.addstr(3, 2, 'Multiple matches, possible fingerprints are:', *attr)
+        subwindow.addstr(2, 3, 'Multiple matches, possible fingerprints are:', *attr)
 
         for i, port in enumerate(sorted(matches.keys())):
           is_last_line, remaining_relays = i == 3, len(matches) - i
 
           if not is_last_line or remaining_relays == 1:
-            self.addstr(4 + i, 2, '%i. or port: %-5s fingerprint: %s' % (i + 1, port, matches[port]), *attr)
+            subwindow.addstr(2, 4 + i, '%i. or port: %-5s fingerprint: %s' % (i + 1, port, matches[port]), *attr)
           else:
-            self.addstr(4 + i, 2, '... %i more' % remaining_relays, *attr)
+            subwindow.addstr(2, 4 + i, '... %i more' % remaining_relays, *attr)
 
           if is_last_line:
             break
 
     # draw the border, with a 'T' pipe if connecting with the scrollbar
 
-    self.draw_box(0, 0, width, DETAILS_HEIGHT + 2)
+    subwindow.box(0, 0, width, DETAILS_HEIGHT + 2)
 
     if is_scrollbar_visible:
-      self.addch(DETAILS_HEIGHT + 1, 1, curses.ACS_TTEE)
+      subwindow._addch(1, DETAILS_HEIGHT + 1, curses.ACS_TTEE)
 
-  def _draw_line(self, x, y, line, is_selected, width, current_time):
+  def _draw_line(self, subwindow, x, y, line, is_selected, width, current_time):
     attr = [CONFIG['attr.connection.category_color'].get(line.entry.get_type(), WHITE)]
     attr.append(HIGHLIGHT if is_selected else NORMAL)
 
-    self.addstr(y, x, ' ' * (width - x), *attr)
+    subwindow.addstr(x, y, ' ' * (width - x), *attr)
 
     if line.line_type == LineType.CIRCUIT:
       if line.circuit.path[-1][0] == line.fingerprint:
@@ -521,15 +521,15 @@ class ConnectionPanel(nyx.panel.DaemonPanel):
         prefix = (ord(' '), curses.ACS_VLINE, ord(' '), ord(' '))
 
       for char in prefix:
-        x = self.addch(y, x, char)
+        x = subwindow._addch(x, y, char)
     else:
       x += 1  # offset from edge
 
-    self._draw_address_column(x, y, line, attr)
-    self._draw_line_details(57, y, line, width - 57 - 20, attr)
-    self._draw_right_column(width - 18, y, line, current_time, attr)
+    self._draw_address_column(subwindow, x, y, line, attr)
+    self._draw_line_details(subwindow, 57, y, line, width - 57 - 20, attr)
+    self._draw_right_column(subwindow, width - 18, y, line, current_time, attr)
 
-  def _draw_address_column(self, x, y, line, attr):
+  def _draw_address_column(self, subwindow, x, y, line, attr):
     src = tor_controller().get_info('address', line.connection.local_address)
     src += ':%s' % line.connection.local_port if line.line_type == LineType.CONNECTION else ''
 
@@ -551,11 +551,11 @@ class ConnectionPanel(nyx.panel.DaemonPanel):
       dst, src = src, dst
 
     if line.line_type == LineType.CIRCUIT:
-      self.addstr(y, x, dst, *attr)
+      subwindow.addstr(x, y, dst, *attr)
     else:
-      self.addstr(y, x, '%-21s  -->  %-26s' % (src, dst), *attr)
+      subwindow.addstr(x, y, '%-21s  -->  %-26s' % (src, dst), *attr)
 
-  def _draw_line_details(self, x, y, line, width, attr):
+  def _draw_line_details(self, subwindow, 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):
@@ -572,11 +572,11 @@ class ConnectionPanel(nyx.panel.DaemonPanel):
 
     for entry in comp:
       if width >= x + len(entry):
-        x = self.addstr(y, x, entry, *attr)
+        x = subwindow.addstr(x, y, entry, *attr)
       else:
         return
 
-  def _draw_right_column(self, x, y, line, current_time, attr):
+  def _draw_right_column(self, subwindow, x, y, line, current_time, attr):
     if line.line_type == LineType.CIRCUIT:
       circ_path = [fp for fp, _ in line.circuit.path]
       circ_index = circ_path.index(line.fingerprint)
@@ -588,13 +588,13 @@ class ConnectionPanel(nyx.panel.DaemonPanel):
       else:
         placement_type = 'Middle'
 
-      self.addstr(y, x + 4, '%i / %s' % (circ_index + 1, placement_type), *attr)
+      subwindow.addstr(x + 4, y, '%i / %s' % (circ_index + 1, placement_type), *attr)
     else:
-      x = self.addstr(y, x, '+' if line.connection.is_legacy else ' ', *attr)
-      x = self.addstr(y, x, '%5s' % str_tools.time_label(current_time - line.connection.start_time, 1), *attr)
-      x = self.addstr(y, x, ' (', *attr)
-      x = self.addstr(y, x, line.entry.get_type().upper(), BOLD, *attr)
-      x = self.addstr(y, x, ')', *attr)
+      x = subwindow.addstr(x, y, '+' if line.connection.is_legacy else ' ', *attr)
+      x = subwindow.addstr(x, y, '%5s' % str_tools.time_label(current_time - line.connection.start_time, 1), *attr)
+      x = subwindow.addstr(x, y, ' (', *attr)
+      x = subwindow.addstr(x, y, line.entry.get_type().upper(), BOLD, *attr)
+      x = subwindow.addstr(x, y, ')', *attr)
 
   def _update(self):
     """





More information about the tor-commits mailing list