From 60cba7f80f3708ce2bdc478fe452aca294edfa67 Mon Sep 17 00:00:00 2001 From: Michael Hanselmann <hansmi@google.com> Date: Wed, 8 Dec 2010 18:53:07 +0100 Subject: [PATCH] qlang: Add function to build simple filter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This will be used in clients to build the filters for query2. Signed-off-by: Michael Hanselmann <hansmi@google.com> Reviewed-by: RenΓ© Nussbaumer <rn@google.com> --- lib/qlang.py | 13 +++++++++++++ test/ganeti.qlang_unittest.py | 18 ++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/lib/qlang.py b/lib/qlang.py index ec4f41b96..3d8a806ac 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 c0ab03d59..72c5558bd 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() -- GitLab