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