[nyx/master] Allow arguments in MenuItem constructor

commit 03aa68d2dd7622c55061a4df4caa390e41bc5d76 Author: Damian Johnson <atagar@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')
participants (1)
-
atagar@torproject.org