commit f8efef547f18d98bb236c773e2254fc10cb6b490 Author: Damian Johnson atagar@torproject.org Date: Tue Mar 29 09:28:25 2016 -0700
Help namedtuple
Having our get_help() methods provide namedtuples rather than tuples. Not a big whoop, but we might combine the handle_key() and get_help() methods soon. --- nyx/panel/__init__.py | 22 +++++++++++++++++----- nyx/panel/config.py | 20 ++++++++++---------- nyx/panel/connection.py | 22 +++++++++++----------- nyx/panel/graph.py | 12 ++++++------ nyx/panel/log.py | 18 +++++++++--------- nyx/panel/torrc.py | 18 +++++++++--------- nyx/popups.py | 12 +++++------- 7 files changed, 67 insertions(+), 57 deletions(-)
diff --git a/nyx/panel/__init__.py b/nyx/panel/__init__.py index 70c577d..b725e20 100644 --- a/nyx/panel/__init__.py +++ b/nyx/panel/__init__.py @@ -2,6 +2,7 @@ Panels consisting the nyx interface. """
+import collections import time import curses import curses.ascii @@ -33,8 +34,20 @@ CONFIG = conf.config_dict('nyx', { 'features.maxLineWrap': 8, }, conf_handler)
-# prevents curses redraws if set -HALT_ACTIVITY = False +HALT_ACTIVITY = False # prevents curses redraws if set + + +class Help(collections.namedtuple('Help', ['key', 'description', 'current'])): + """ + Help information about keybindings the panel handles. + + :var str key: key the user can press + :var str description: description of what it does + :var str current: optional current value + """ + + def __new__(self, key, description, current = None): + return super(Help, self).__new__(self, key, description, current)
class BasicValidator(object): @@ -273,11 +286,10 @@ class Panel(object): def get_help(self): """ Provides help information for the controls this page provides. This is a - list of tuples of the form... - (control, description, status) + tuple of :class:`~nyx.panel.Help` instances. """
- return [] + return ()
def draw(self, width, height): """ diff --git a/nyx/panel/config.py b/nyx/panel/config.py index 4b2881d..f0eac85 100644 --- a/nyx/panel/config.py +++ b/nyx/panel/config.py @@ -274,16 +274,16 @@ class ConfigPanel(nyx.panel.Panel): return True
def get_help(self): - return [ - ('up arrow', 'scroll up a line', None), - ('down arrow', 'scroll down a line', None), - ('page up', 'scroll up a page', None), - ('page down', 'scroll down a page', None), - ('enter', 'edit configuration option', None), - ('w', 'write torrc', None), - ('a', 'toggle filtering', None), - ('s', 'sort ordering', None), - ] + return ( + nyx.panel.Help('up arrow', 'scroll up a line'), + nyx.panel.Help('down arrow', 'scroll down a line'), + nyx.panel.Help('page up', 'scroll up a page'), + nyx.panel.Help('page down', 'scroll down a page'), + nyx.panel.Help('enter', 'edit configuration option'), + nyx.panel.Help('w', 'write torrc'), + nyx.panel.Help('a', 'toggle filtering'), + nyx.panel.Help('s', 'sort ordering'), + )
def draw(self, width, height): contents = self._get_config_options() diff --git a/nyx/panel/connection.py b/nyx/panel/connection.py index 22cda50..127cd12 100644 --- a/nyx/panel/connection.py +++ b/nyx/panel/connection.py @@ -420,23 +420,23 @@ class ConnectionPanel(nyx.panel.Panel, threading.Thread): user_traffic_allowed = tor_controller().is_user_traffic_allowed()
options = [ - ('up arrow', 'scroll up a line', None), - ('down arrow', 'scroll down a line', None), - ('page up', 'scroll up a page', None), - ('page down', 'scroll down a page', None), - ('enter', 'show connection details', None), - ('d', 'raw consensus descriptor', None), - ('s', 'sort ordering', None), - ('r', 'connection resolver', 'auto' if resolver is None else resolver), + nyx.panel.Help('up arrow', 'scroll up a line'), + nyx.panel.Help('down arrow', 'scroll down a line'), + nyx.panel.Help('page up', 'scroll up a page'), + nyx.panel.Help('page down', 'scroll down a page'), + nyx.panel.Help('enter', 'show connection details'), + nyx.panel.Help('d', 'raw consensus descriptor'), + nyx.panel.Help('s', 'sort ordering'), + nyx.panel.Help('r', 'connection resolver', 'auto' if resolver is None else resolver), ]
if user_traffic_allowed.inbound: - options.append(('c', 'client locale usage summary', None)) + options.append(nyx.panel.Help('c', 'client locale usage summary'))
if user_traffic_allowed.outbound: - options.append(('e', 'exit port usage summary', None)) + options.append(nyx.panel.Help('e', 'exit port usage summary'))
- return options + return tuple(options)
def draw(self, width, height): controller = tor_controller() diff --git a/nyx/panel/graph.py b/nyx/panel/graph.py index 510fa14..b09c8b8 100644 --- a/nyx/panel/graph.py +++ b/nyx/panel/graph.py @@ -538,12 +538,12 @@ class GraphPanel(nyx.panel.Panel): return True
def get_help(self): - return [ - ('r', 'resize graph', None), - ('s', 'graphed stats', self.displayed_stat if self.displayed_stat else 'none'), - ('b', 'graph bounds', self.bounds_type.replace('_', ' ')), - ('i', 'graph update interval', self.update_interval), - ] + return ( + nyx.panel.Help('r', 'resize graph'), + nyx.panel.Help('s', 'graphed stats', self.displayed_stat if self.displayed_stat else 'none'), + nyx.panel.Help('b', 'graph bounds', self.bounds_type.replace('_', ' ')), + nyx.panel.Help('i', 'graph update interval', self.update_interval), + )
def set_paused(self, is_pause): if is_pause: diff --git a/nyx/panel/log.py b/nyx/panel/log.py index c16eaec..8a0a9c7 100644 --- a/nyx/panel/log.py +++ b/nyx/panel/log.py @@ -261,15 +261,15 @@ class LogPanel(nyx.panel.Panel, threading.Thread): return True
def get_help(self): - return [ - ('up arrow', 'scroll log up a line', None), - ('down arrow', 'scroll log down a line', None), - ('a', 'save snapshot of the log', None), - ('e', 'change logged events', None), - ('f', 'log regex filter', 'enabled' if self._filter.selection() else 'disabled'), - ('u', 'duplicate log entries', 'visible' if self._show_duplicates else 'hidden'), - ('c', 'clear event log', None), - ] + return ( + nyx.panel.Help('up arrow', 'scroll log up a line'), + nyx.panel.Help('down arrow', 'scroll log down a line'), + nyx.panel.Help('a', 'save snapshot of the log'), + nyx.panel.Help('e', 'change logged events'), + nyx.panel.Help('f', 'log regex filter', 'enabled' if self._filter.selection() else 'disabled'), + nyx.panel.Help('u', 'duplicate log entries', 'visible' if self._show_duplicates else 'hidden'), + nyx.panel.Help('c', 'clear event log'), + )
def set_paused(self, is_pause): if is_pause: diff --git a/nyx/panel/torrc.py b/nyx/panel/torrc.py index 39318f5..560afb3 100644 --- a/nyx/panel/torrc.py +++ b/nyx/panel/torrc.py @@ -97,15 +97,15 @@ class TorrcPanel(panel.Panel): return True
def get_help(self): - return [ - ('up arrow', 'scroll up a line', None), - ('down arrow', 'scroll down a line', None), - ('page up', 'scroll up a page', None), - ('page down', 'scroll down a page', None), - ('s', 'comment stripping', 'off' if self._show_comments else 'on'), - ('l', 'line numbering', 'on' if self._show_line_numbers else 'off'), - ('x', 'reset tor (issue sighup)', None), - ] + return ( + nyx.panel.Help('up arrow', 'scroll up a line'), + nyx.panel.Help('down arrow', 'scroll down a line'), + nyx.panel.Help('page up', 'scroll up a page'), + nyx.panel.Help('page down', 'scroll down a page'), + nyx.panel.Help('s', 'comment stripping', 'off' if self._show_comments else 'on'), + nyx.panel.Help('l', 'line numbering', 'on' if self._show_line_numbers else 'off'), + nyx.panel.Help('x', 'reset tor (issue sighup)'), + )
def draw(self, width, height): scroll = self._scroller.location(self._last_content_height, height) diff --git a/nyx/popups.py b/nyx/popups.py index d6a14f1..0952a8d 100644 --- a/nyx/popups.py +++ b/nyx/popups.py @@ -93,7 +93,7 @@ def show_help_popup(): subwindow.box() subwindow.addstr(0, 0, 'Page %i Commands:' % (control.get_page() + 1), HIGHLIGHT)
- for i in range(len(help_options)): + for i, option in enumerate(help_options): if i / 2 >= subwindow.height - 2: break
@@ -102,17 +102,15 @@ def show_help_popup(): # # u: duplicate log entries (hidden)
- key, description, selection = help_options[i] - x = 2 if i % 2 == 0 else 41 y = (i / 2) + 1
- x = subwindow.addstr(x, y, key, BOLD) - x = subwindow.addstr(x, y, ': ' + description) + x = subwindow.addstr(x, y, option.key, BOLD) + x = subwindow.addstr(x, y, ': ' + option.description)
- if selection: + if option.current: x = subwindow.addstr(x, y, ' (') - x = subwindow.addstr(x, y, selection, BOLD) + x = subwindow.addstr(x, y, option.current, BOLD) x = subwindow.addstr(x, y, ')')
# tells user to press a key if the lower left is unoccupied