diff options
Diffstat (limited to 'scripts/automation')
-rw-r--r-- | scripts/automation/regression/functional_tests/filters_test.py | 2 | ||||
-rw-r--r-- | scripts/automation/trex_control_plane/common/filters.py | 54 |
2 files changed, 52 insertions, 4 deletions
diff --git a/scripts/automation/regression/functional_tests/filters_test.py b/scripts/automation/regression/functional_tests/filters_test.py index b45b98bb..abb92999 100644 --- a/scripts/automation/regression/functional_tests/filters_test.py +++ b/scripts/automation/regression/functional_tests/filters_test.py @@ -86,7 +86,7 @@ class ToggleFilter_Test(functional_general_test.CGeneralFunctional_Test): self.list_db.remove(1) assert_equal(toggle_filter.filter_items(), [3, 5, 6]) - def test_list_toggeliing_negative(self): + def test_list_toggling_negative(self): toggle_filter = filters.ToggleFilter(self.list_db) assert_raises(KeyError, toggle_filter.toggle_item, 10) diff --git a/scripts/automation/trex_control_plane/common/filters.py b/scripts/automation/trex_control_plane/common/filters.py index d2ca7b16..bf04a775 100644 --- a/scripts/automation/trex_control_plane/common/filters.py +++ b/scripts/automation/trex_control_plane/common/filters.py @@ -8,12 +8,43 @@ class ToggleFilter(object): This class provides a "sticky" filter, that works by "toggling" items of the original database on and off. """ def __init__(self, db_ref, show_by_default=True): + """ + Instantiate a ToggleFilter object + + :parameters: + db_ref : iterable + an iterable object (i.e. list, set etc) that would serve as the reference db of the instance. + Changes in that object will affect the output of ToggleFilter instance. + + show_by_default: bool + decide if by default all the items are "on", i.e. these items will be presented if no other + toggling occurred. + + default value : **True** + + """ self._data = db_ref self._toggle_db = set() self._filter_method = filter self.__set_initial_state(show_by_default) def toggle_item(self, item_key): + """ + Toggle a single item in/out. + + :parameters: + item_key : + an item the by its value the filter can decide to toggle or not. + Example: int, str and so on. + + :return: + + **True** if item toggled **into** the filtered items + + **False** if item toggled **out from** the filtered items + + :raises: + + KeyError, in case if item key is not part of the toggled list and not part of the referenced db. + + """ if item_key in self._toggle_db: self._toggle_db.remove(item_key) return False @@ -24,7 +55,23 @@ class ToggleFilter(object): raise KeyError("Provided item key isn't a key of the referenced data structure.") def toggle_items(self, *args): - return all(map(self.toggle_item, args)) + """ + Toggle multiple items in/out with a single call. Each item will be ha. + + :parameters: + args : iterable + an iterable object containing all item keys to be toggled in/out + + :return: + + **True** if all toggled items were toggled **into** the filtered items + + **False** if at least one of the items was toggled **out from** the filtered items + + :raises: + + KeyError, in case if ont of the item keys was not part of the toggled list and not part of the referenced db. + + """ + # in python 3, 'map' returns an iterator, so wrapping with 'list' call creates same effect for both python 2 and 3 + return all(list(map(self.toggle_item, args))) def filter_items(self): """ @@ -67,12 +114,13 @@ class ToggleFilter(object): def dict_filter(function, iterable): assert isinstance(iterable, dict) return {k: v - for k,v in iterable.iteritems() + for k,v in iterable.items() if function(k)} @staticmethod def list_filter(function, iterable): - return filter(function, iterable) + # in python 3, filter returns an iterator, so wrapping with list creates same effect for both python 2 and 3 + return list(filter(function, iterable)) @staticmethod def set_filter(function, iterable): |