diff --git a/lib/qlang.py b/lib/qlang.py index ec4f41b96aa1b6644fd5eba13dcdb22ec528da80..3d8a806ac621fb8465eb485a63e3e8fb27ea601d 100644 --- a/lib/qlang.py +++ b/lib/qlang.py @@ -73,3 +73,16 @@ def ReadSimpleFilter(namefield, filter_): result.append(value) return result + + +def MakeSimpleFilter(namefield, values): + """Builds a filter for use with L{ReadSimpleFilter}. + + @param namefield: Name of field containing item name + @param values: List of names + + """ + if values: + return [OP_OR] + [[OP_EQUAL, namefield, i] for i in values] + + return None diff --git a/test/ganeti.qlang_unittest.py b/test/ganeti.qlang_unittest.py index c0ab03d597f80a90f54b3a79c5d70b7e2732c9f1..72c5558bdacdd1f67a9f317d8a05829ce187c3ac 100755 --- a/test/ganeti.qlang_unittest.py +++ b/test/ganeti.qlang_unittest.py @@ -56,5 +56,23 @@ class TestReadSimpleFilter(unittest.TestCase): "name", i) +class TestMakeSimpleFilter(unittest.TestCase): + def _Test(self, field, names, expected, parse_exp=None): + if parse_exp is None: + parse_exp = names + + filter_ = qlang.MakeSimpleFilter(field, names) + self.assertEqual(filter_, expected) + self.assertEqual(qlang.ReadSimpleFilter(field, filter_), parse_exp) + + def test(self): + self._Test("name", None, None, parse_exp=[]) + self._Test("name", [], None) + self._Test("name", ["node1.example.com"], + ["|", ["=", "name", "node1.example.com"]]) + self._Test("xyz", ["a", "b", "c"], + ["|", ["=", "xyz", "a"], ["=", "xyz", "b"], ["=", "xyz", "c"]]) + + if __name__ == "__main__": testutils.GanetiTestProgram()