[tor-commits] [nyx/master] Allow arguments in MenuItem constructor

atagar at torproject.org atagar at torproject.org
Sat Aug 27 18:23:50 UTC 2016


commit 03aa68d2dd7622c55061a4df4caa390e41bc5d76
Author: Damian Johnson <atagar at torproject.org>
Date:   Wed Aug 24 08:26:28 2016 -0700

    Allow arguments in MenuItem constructor
    
    We use partials quite a bit when constructing MenuItems. Better to just include
    this in the constructor.
---
 nyx/menu.py  | 33 +++++++++++++++------------------
 test/menu.py | 11 +++++++----
 2 files changed, 22 insertions(+), 22 deletions(-)

diff --git a/nyx/menu.py b/nyx/menu.py
index 71dd738..7a42fd1 100644
--- a/nyx/menu.py
+++ b/nyx/menu.py
@@ -40,13 +40,16 @@ class MenuItem(object):
   :var Submenu submenu: top-level submenu we reside within
   """
 
-  def __init__(self, label, callback):
+  def __init__(self, label, callback, *args):
     self.label = label
     self.suffix = ''
-
-    self._callback = callback
     self._parent = None
 
+    if args:
+      self._callback = functools.partial(callback, *args)
+    else:
+      self._callback = callback
+
   @property
   def prefix(self):
     return ''
@@ -196,14 +199,13 @@ def make_actions_menu():
   actions_menu = Submenu('Actions')
   actions_menu.add(MenuItem('Close Menu', None))
   actions_menu.add(MenuItem('New Identity', header_panel.send_newnym))
-  actions_menu.add(MenuItem('Reset Tor', functools.partial(controller.signal, stem.Signal.RELOAD)))
+  actions_menu.add(MenuItem('Reset Tor', controller.signal, stem.Signal.RELOAD))
 
   if control.is_paused():
-    label, arg = 'Unpause', False
+    actions_menu.add(MenuItem('Unpause', control.set_paused, False))
   else:
-    label, arg = 'Pause', True
+    actions_menu.add(MenuItem('Pause', control.set_paused, True))
 
-  actions_menu.add(MenuItem(label, functools.partial(control.set_paused, arg)))
   actions_menu.add(MenuItem('Exit', control.quit))
 
   return actions_menu
@@ -331,11 +333,9 @@ def make_log_menu(log_panel):
   log_menu.add(MenuItem('Clear', log_panel.clear))
 
   if log_panel.is_duplicates_visible():
-    label, arg = 'Hide', False
+    log_menu.add(MenuItem('Hide Duplicates', log_panel.set_duplicate_visability, False))
   else:
-    label, arg = 'Show', True
-
-  log_menu.add(MenuItem('%s Duplicates' % label, functools.partial(log_panel.set_duplicate_visability, arg)))
+    log_menu.add(MenuItem('Show Duplicates', log_panel.set_duplicate_visability, True))
 
   # filter submenu
 
@@ -418,17 +418,14 @@ def make_torrc_menu(torrc_panel):
   torrc_menu = Submenu('Torrc')
 
   if torrc_panel._show_comments:
-    label, arg = 'Hide', False
+    torrc_menu.add(MenuItem('Hide Comments', torrc_panel.set_comments_visible, False))
   else:
-    label, arg = 'Show', True
-
-  torrc_menu.add(MenuItem('%s Comments' % label, functools.partial(torrc_panel.set_comments_visible, arg)))
+    torrc_menu.add(MenuItem('Show Comments', torrc_panel.set_comments_visible, True))
 
   if torrc_panel._show_line_numbers:
-    label, arg = 'Hide', False
+    torrc_menu.add(MenuItem('Hide Line Numbers', torrc_panel.set_line_number_visible, False))
   else:
-    label, arg = 'Show', True
-  torrc_menu.add(MenuItem('%s Line Numbers' % label, functools.partial(torrc_panel.set_line_number_visible, arg)))
+    torrc_menu.add(MenuItem('Show Line Numbers', torrc_panel.set_line_number_visible, True))
 
   return torrc_menu
 
diff --git a/test/menu.py b/test/menu.py
index fdf3352..2aa0e4b 100644
--- a/test/menu.py
+++ b/test/menu.py
@@ -11,11 +11,11 @@ class Container(object):
   value = False
 
   def __nonzero__(self):
-    return self.value
+    return bool(self.value)
 
 
 def action(*args):
-  IS_CALLED.value = True
+  IS_CALLED.value = args if args else True
 
 
 NO_OP = lambda: None
@@ -40,11 +40,14 @@ class TestMenuItem(unittest.TestCase):
 
   def test_selection(self):
     menu_item = MenuItem('Test Item', action)
-
-    self.assertFalse(IS_CALLED)
     menu_item.select()
     self.assertTrue(IS_CALLED)
 
+  def test_selection_with_value(self):
+    menu_item = MenuItem('Test Item', action, 'hi')
+    menu_item.select()
+    self.assertEqual(('hi',), IS_CALLED.value)
+
   def test_menu_item_hierarchy(self):
     root_submenu = Submenu('Root Submenu')
     middle_submenu = Submenu('Middle Submenu')





More information about the tor-commits mailing list