From 2e5c33dbbcc0f235e251e83cefc51cb12d648e41 Mon Sep 17 00:00:00 2001 From: Iustin Pop <iustin@google.com> Date: Wed, 12 Oct 2011 11:07:18 +0200 Subject: [PATCH] Rename filter and filter_ to qfilter We currently use 'filter' as the OpCode, QueryRequest and RAPI field name for representing a query filter. However, since 'filter' is a built-in function, we actually have to use filter_ throughout the code in order to not override the built-in function. This patch simply goes and does a global sed over the code. Due to the fact that the RAPI interface already exposed this field, we add compatibility code for now which handles both forms. Signed-off-by: Iustin Pop <iustin@google.com> Reviewed-by: Michael Hanselmann <hansmi@google.com> --- htools/Ganeti/Luxi.hs | 2 +- lib/cli.py | 22 +++---- lib/cmdlib.py | 6 +- lib/luxi.py | 8 +-- lib/objects.py | 2 +- lib/opcodes.py | 4 +- lib/query.py | 24 +++---- lib/rapi/client.py | 12 ++-- lib/rapi/rlib2.py | 11 +++- lib/server/masterd.py | 4 +- lib/watcher/__init__.py | 4 +- test/ganeti.cli_unittest.py | 16 ++--- test/ganeti.qlang_unittest.py | 18 +++--- test/ganeti.query_unittest.py | 98 ++++++++++++++--------------- test/ganeti.rapi.client_unittest.py | 12 ++-- 15 files changed, 125 insertions(+), 118 deletions(-) diff --git a/htools/Ganeti/Luxi.hs b/htools/Ganeti/Luxi.hs index 7b9535133..66ab6ce88 100644 --- a/htools/Ganeti/Luxi.hs +++ b/htools/Ganeti/Luxi.hs @@ -78,7 +78,7 @@ $(genLuxiOp "LuxiOp" [("Query" , [ ("what", [t| QrViaLuxi |], [| id |]) , ("fields", [t| [String] |], [| id |]) - , ("filter", [t| Maybe (String, [[String]]) |], [| id |]) + , ("qfilter", [t| Maybe (String, [[String]]) |], [| id |]) ], SDict) , ("QueryNodes", [ ("names", [t| [String] |], [| id |]) diff --git a/lib/cli.py b/lib/cli.py index 9622a5b85..9fb6af7b6 100644 --- a/lib/cli.py +++ b/lib/cli.py @@ -2694,9 +2694,9 @@ def GenericList(resource, fields, names, unit, separator, header, cl=None, if not names: names = None - filter_ = qlang.MakeFilter(names, force_filter) + qfilter = qlang.MakeFilter(names, force_filter) - response = cl.Query(resource, fields, filter_) + response = cl.Query(resource, fields, qfilter) found_unknown = _WarnUnknownFields(response.fields) @@ -2925,24 +2925,24 @@ def GetOnlineNodes(nodes, cl=None, nowarn=False, secondary_ips=False, if cl is None: cl = GetClient() - filter_ = [] + qfilter = [] if nodes: - filter_.append(qlang.MakeSimpleFilter("name", nodes)) + qfilter.append(qlang.MakeSimpleFilter("name", nodes)) if nodegroup is not None: - filter_.append([qlang.OP_OR, [qlang.OP_EQUAL, "group", nodegroup], + qfilter.append([qlang.OP_OR, [qlang.OP_EQUAL, "group", nodegroup], [qlang.OP_EQUAL, "group.uuid", nodegroup]]) if filter_master: - filter_.append([qlang.OP_NOT, [qlang.OP_TRUE, "master"]]) + qfilter.append([qlang.OP_NOT, [qlang.OP_TRUE, "master"]]) - if filter_: - if len(filter_) > 1: - final_filter = [qlang.OP_AND] + filter_ + if qfilter: + if len(qfilter) > 1: + final_filter = [qlang.OP_AND] + qfilter else: - assert len(filter_) == 1 - final_filter = filter_[0] + assert len(qfilter) == 1 + final_filter = qfilter[0] else: final_filter = None diff --git a/lib/cmdlib.py b/lib/cmdlib.py index 17d423e87..e4c92a883 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -468,13 +468,13 @@ class _QueryBase: #: Attribute holding field definitions FIELDS = None - def __init__(self, filter_, fields, use_locking): + def __init__(self, qfilter, fields, use_locking): """Initializes this class. """ self.use_locking = use_locking - self.query = query.Query(self.FIELDS, fields, filter_=filter_, + self.query = query.Query(self.FIELDS, fields, qfilter=qfilter, namefield="name") self.requested_data = self.query.RequestedData() self.names = self.query.RequestedNames() @@ -4820,7 +4820,7 @@ class LUQuery(NoHooksLU): def CheckArguments(self): qcls = _GetQueryImplementation(self.op.what) - self.impl = qcls(self.op.filter, self.op.fields, self.op.use_locking) + self.impl = qcls(self.op.qfilter, self.op.fields, self.op.use_locking) def ExpandNames(self): self.impl.ExpandNames(self) diff --git a/lib/luxi.py b/lib/luxi.py index 4371613a1..b9826eaff 100644 --- a/lib/luxi.py +++ b/lib/luxi.py @@ -499,18 +499,18 @@ class Client(object): break return result - def Query(self, what, fields, filter_): + def Query(self, what, fields, qfilter): """Query for resources/items. @param what: One of L{constants.QR_VIA_LUXI} @type fields: List of strings @param fields: List of requested fields - @type filter_: None or list - @param filter_: Query filter + @type qfilter: None or list + @param qfilter: Query filter @rtype: L{objects.QueryResponse} """ - req = objects.QueryRequest(what=what, fields=fields, filter=filter_) + req = objects.QueryRequest(what=what, fields=fields, qfilter=qfilter) result = self.CallMethod(REQ_QUERY, req.ToDict()) return objects.QueryResponse.FromDict(result) diff --git a/lib/objects.py b/lib/objects.py index 131678511..1b7eece36 100644 --- a/lib/objects.py +++ b/lib/objects.py @@ -1468,7 +1468,7 @@ class QueryRequest(ConfigObject): __slots__ = [ "what", "fields", - "filter", + "qfilter", ] diff --git a/lib/opcodes.py b/lib/opcodes.py index 3e159e13a..1367c2a55 100644 --- a/lib/opcodes.py +++ b/lib/opcodes.py @@ -821,7 +821,7 @@ class OpQuery(OpCode): @ivar what: Resources to query for, must be one of L{constants.QR_VIA_OP} @ivar fields: List of fields to retrieve - @ivar filter: Query filter + @ivar qfilter: Query filter """ OP_DSC_FIELD = "what" @@ -830,7 +830,7 @@ class OpQuery(OpCode): _PUseLocking, ("fields", ht.NoDefault, ht.TListOf(ht.TNonEmptyString), "Requested fields"), - ("filter", None, ht.TOr(ht.TNone, ht.TListOf), + ("qfilter", None, ht.TOr(ht.TNone, ht.TListOf), "Query filter"), ] diff --git a/lib/query.py b/lib/query.py index 7a9360c87..fa541b82c 100644 --- a/lib/query.py +++ b/lib/query.py @@ -409,13 +409,13 @@ class _FilterCompilerHelper: self._hints = None self._op_handler = None - def __call__(self, hints, filter_): + def __call__(self, hints, qfilter): """Converts a query filter into a callable function. @type hints: L{_FilterHints} or None @param hints: Callbacks doing analysis on filter - @type filter_: list - @param filter_: Filter structure + @type qfilter: list + @param qfilter: Filter structure @rtype: callable @return: Function receiving context and item as parameters, returning boolean as to whether item matches filter @@ -431,20 +431,20 @@ class _FilterCompilerHelper: } try: - filter_fn = self._Compile(filter_, 0) + filter_fn = self._Compile(qfilter, 0) finally: self._op_handler = None return filter_fn - def _Compile(self, filter_, level): + def _Compile(self, qfilter, level): """Inner function for converting filters. Calls the correct handler functions for the top-level operator. This function is called recursively (e.g. for logic operators). """ - if not (isinstance(filter_, (list, tuple)) and filter_): + if not (isinstance(qfilter, (list, tuple)) and qfilter): raise errors.ParameterError("Invalid filter on level %s" % level) # Limit recursion @@ -453,7 +453,7 @@ class _FilterCompilerHelper: " nested too deep)" % self._LEVELS_MAX) # Create copy to be modified - operands = filter_[:] + operands = qfilter[:] op = operands.pop(0) try: @@ -581,7 +581,7 @@ class _FilterCompilerHelper: " (op '%s', flags %s)" % (op, field_flags)) -def _CompileFilter(fields, hints, filter_): +def _CompileFilter(fields, hints, qfilter): """Converts a query filter into a callable function. See L{_FilterCompilerHelper} for details. @@ -589,11 +589,11 @@ def _CompileFilter(fields, hints, filter_): @rtype: callable """ - return _FilterCompilerHelper(fields)(hints, filter_) + return _FilterCompilerHelper(fields)(hints, qfilter) class Query: - def __init__(self, fieldlist, selected, filter_=None, namefield=None): + def __init__(self, fieldlist, selected, qfilter=None, namefield=None): """Initializes this class. The field definition is a dictionary with the field's name as a key and a @@ -620,7 +620,7 @@ class Query: self._requested_names = None self._filter_datakinds = frozenset() - if filter_ is not None: + if qfilter is not None: # Collect requested names if wanted if namefield: hints = _FilterHints(namefield) @@ -628,7 +628,7 @@ class Query: hints = None # Build filter function - self._filter_fn = _CompileFilter(fieldlist, hints, filter_) + self._filter_fn = _CompileFilter(fieldlist, hints, qfilter) if hints: self._requested_names = hints.RequestedNames() self._filter_datakinds = hints.ReferencedData() diff --git a/lib/rapi/client.py b/lib/rapi/client.py index 9f3002a80..e72b30839 100644 --- a/lib/rapi/client.py +++ b/lib/rapi/client.py @@ -1829,15 +1829,15 @@ class GanetiRapiClient(object): # pylint: disable=R0904 ("/%s/groups/%s/tags" % (GANETI_RAPI_VERSION, group)), query, None) - def Query(self, what, fields, filter_=None): + def Query(self, what, fields, qfilter=None): """Retrieves information about resources. @type what: string @param what: Resource name, one of L{constants.QR_VIA_RAPI} @type fields: list of string @param fields: Requested fields - @type filter_: None or list - @param filter_: Query filter + @type qfilter: None or list + @param qfilter: Query filter @rtype: string @return: job id @@ -1847,8 +1847,10 @@ class GanetiRapiClient(object): # pylint: disable=R0904 "fields": fields, } - if filter_ is not None: - body["filter"] = filter_ + if qfilter is not None: + body["qfilter"] = qfilter + # TODO: remove this after 2.7 + body["filter"] = qfilter return self._SendRequest(HTTP_PUT, ("/%s/query/%s" % diff --git a/lib/rapi/rlib2.py b/lib/rapi/rlib2.py index 1ecf732a1..a3277e25f 100644 --- a/lib/rapi/rlib2.py +++ b/lib/rapi/rlib2.py @@ -1189,8 +1189,8 @@ class R_2_query(baserlib.ResourceBase): GET_OPCODE = opcodes.OpQuery PUT_OPCODE = opcodes.OpQuery - def _Query(self, fields, filter_): - return self.GetClient().Query(self.items[0], fields, filter_).ToDict() + def _Query(self, fields, qfilter): + return self.GetClient().Query(self.items[0], fields, qfilter).ToDict() def GET(self): """Returns resource information. @@ -1215,7 +1215,12 @@ class R_2_query(baserlib.ResourceBase): except KeyError: fields = _GetQueryFields(self.queryargs) - return self._Query(fields, self.request_body.get("filter", None)) + qfilter = body.get("qfilter", None) + # TODO: remove this after 2.7 + if qfilter is None: + qfilter = body.get("filter", None) + + return self._Query(fields, qfilter) class R_2_query_fields(baserlib.ResourceBase): diff --git a/lib/server/masterd.py b/lib/server/masterd.py index 0318b7a3a..adab38689 100644 --- a/lib/server/masterd.py +++ b/lib/server/masterd.py @@ -235,9 +235,9 @@ class ClientOps: if req.what in constants.QR_VIA_OP: result = self._Query(opcodes.OpQuery(what=req.what, fields=req.fields, - filter=req.filter)) + qfilter=req.qfilter)) elif req.what == constants.QR_LOCK: - if req.filter is not None: + if req.qfilter is not None: raise errors.OpPrereqError("Lock queries can't be filtered") return self.server.context.glm.QueryLocks(req.fields) elif req.what in constants.QR_VIA_LUXI: diff --git a/lib/watcher/__init__.py b/lib/watcher/__init__.py index c84f3e802..b7efac391 100644 --- a/lib/watcher/__init__.py +++ b/lib/watcher/__init__.py @@ -638,13 +638,13 @@ def _GetGroupData(cl, uuid): opcodes.OpQuery(what=constants.QR_INSTANCE, fields=["name", "status", "admin_state", "snodes", "pnode.group.uuid", "snodes.group.uuid"], - filter=[qlang.OP_EQUAL, "pnode.group.uuid", uuid], + qfilter=[qlang.OP_EQUAL, "pnode.group.uuid", uuid], use_locking=True), # Get all nodes in group opcodes.OpQuery(what=constants.QR_NODE, fields=["name", "bootid", "offline"], - filter=[qlang.OP_EQUAL, "group.uuid", uuid], + qfilter=[qlang.OP_EQUAL, "group.uuid", uuid], use_locking=True), ] diff --git a/test/ganeti.cli_unittest.py b/test/ganeti.cli_unittest.py index 1f5b3d0e4..2231c293d 100755 --- a/test/ganeti.cli_unittest.py +++ b/test/ganeti.cli_unittest.py @@ -765,7 +765,7 @@ class TestGetOnlineNodes(unittest.TestCase): def CountPending(self): return len(self._query) - def Query(self, res, fields, filter_): + def Query(self, res, fields, qfilter): if res != constants.QR_NODE: raise Exception("Querying wrong resource") @@ -774,7 +774,7 @@ class TestGetOnlineNodes(unittest.TestCase): if exp_fields != fields: raise Exception("Expected fields %s, got %s" % (exp_fields, fields)) - if not (filter_ is None or check_filter(filter_)): + if not (qfilter is None or check_filter(qfilter)): raise Exception("Filter doesn't match expectations") return objects.QueryResponse(fields=None, data=result) @@ -804,8 +804,8 @@ class TestGetOnlineNodes(unittest.TestCase): def testNoMaster(self): cl = self._FakeClient() - def _CheckFilter(filter_): - self.assertEqual(filter_, [qlang.OP_NOT, [qlang.OP_TRUE, "master"]]) + def _CheckFilter(qfilter): + self.assertEqual(qfilter, [qlang.OP_NOT, [qlang.OP_TRUE, "master"]]) return True cl.AddQueryResult(["name", "offline", "sip"], _CheckFilter, [ @@ -835,8 +835,8 @@ class TestGetOnlineNodes(unittest.TestCase): def testNoMasterFilterNodeName(self): cl = self._FakeClient() - def _CheckFilter(filter_): - self.assertEqual(filter_, + def _CheckFilter(qfilter): + self.assertEqual(qfilter, [qlang.OP_AND, [qlang.OP_OR] + [[qlang.OP_EQUAL, "name", name] for name in ["node2", "node3"]], @@ -877,8 +877,8 @@ class TestGetOnlineNodes(unittest.TestCase): def testNodeGroup(self): cl = self._FakeClient() - def _CheckFilter(filter_): - self.assertEqual(filter_, + def _CheckFilter(qfilter): + self.assertEqual(qfilter, [qlang.OP_OR, [qlang.OP_EQUAL, "group", "foobar"], [qlang.OP_EQUAL, "group.uuid", "foobar"]]) return True diff --git a/test/ganeti.qlang_unittest.py b/test/ganeti.qlang_unittest.py index c781289ab..b3cf4f7a3 100755 --- a/test/ganeti.qlang_unittest.py +++ b/test/ganeti.qlang_unittest.py @@ -1,7 +1,7 @@ #!/usr/bin/python # -# Copyright (C) 2010 Google Inc. +# Copyright (C) 2010, 2011 Google Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -37,8 +37,8 @@ class TestMakeSimpleFilter(unittest.TestCase): if parse_exp is None: parse_exp = names - filter_ = qlang.MakeSimpleFilter(field, names) - self.assertEqual(filter_, expected) + qfilter = qlang.MakeSimpleFilter(field, names) + self.assertEqual(qfilter, expected) def test(self): self._Test("name", None, None, parse_exp=[]) @@ -53,9 +53,9 @@ class TestParseFilter(unittest.TestCase): def setUp(self): self.parser = qlang.BuildFilterParser() - def _Test(self, filter_, expected, expect_filter=True): - self.assertEqual(qlang.MakeFilter([filter_], not expect_filter), expected) - self.assertEqual(qlang.ParseFilter(filter_, parser=self.parser), expected) + def _Test(self, qfilter, expected, expect_filter=True): + self.assertEqual(qlang.MakeFilter([qfilter], not expect_filter), expected) + self.assertEqual(qlang.ParseFilter(qfilter, parser=self.parser), expected) def test(self): self._Test("name==\"foobar\"", [qlang.OP_EQUAL, "name", "foobar"]) @@ -167,13 +167,13 @@ class TestParseFilter(unittest.TestCase): # Non-matching regexp delimiters tests.append("name =~ /foobarbaz#") - for filter_ in tests: + for qfilter in tests: try: - qlang.ParseFilter(filter_, parser=self.parser) + qlang.ParseFilter(qfilter, parser=self.parser) except errors.QueryFilterParseError, err: self.assertEqual(len(err.GetDetails()), 3) else: - self.fail("Invalid filter '%s' did not raise exception" % filter_) + self.fail("Invalid filter '%s' did not raise exception" % qfilter) class TestMakeFilter(unittest.TestCase): diff --git a/test/ganeti.query_unittest.py b/test/ganeti.query_unittest.py index 5618c7f15..426513169 100755 --- a/test/ganeti.query_unittest.py +++ b/test/ganeti.query_unittest.py @@ -1060,32 +1060,32 @@ class TestQueryFilter(unittest.TestCase): assert "name" in fielddefs # No name field - q = query.Query(fielddefs, ["name"], filter_=["=", "name", "abc"], + q = query.Query(fielddefs, ["name"], qfilter=["=", "name", "abc"], namefield=None) self.assertEqual(q.RequestedNames(), None) # No filter - q = query.Query(fielddefs, ["name"], filter_=None, namefield="name") + q = query.Query(fielddefs, ["name"], qfilter=None, namefield="name") self.assertEqual(q.RequestedNames(), None) # Check empty query - q = query.Query(fielddefs, ["name"], filter_=["|"], namefield="name") + q = query.Query(fielddefs, ["name"], qfilter=["|"], namefield="name") self.assertEqual(q.RequestedNames(), None) # Check order - q = query.Query(fielddefs, ["name"], filter_=["|"] + innerfilter, + q = query.Query(fielddefs, ["name"], qfilter=["|"] + innerfilter, namefield="name") self.assertEqual(q.RequestedNames(), ["x0", "x1", "x2", "x3"]) # Check reverse order q = query.Query(fielddefs, ["name"], - filter_=["|"] + list(reversed(innerfilter)), + qfilter=["|"] + list(reversed(innerfilter)), namefield="name") self.assertEqual(q.RequestedNames(), ["x3", "x2", "x1", "x0"]) # Duplicates q = query.Query(fielddefs, ["name"], - filter_=["|"] + innerfilter + list(reversed(innerfilter)), + qfilter=["|"] + innerfilter + list(reversed(innerfilter)), namefield="name") self.assertEqual(q.RequestedNames(), ["x0", "x1", "x2", "x3"]) @@ -1095,21 +1095,21 @@ class TestQueryFilter(unittest.TestCase): # Filter with AND q = query.Query(fielddefs, ["name"], - filter_=["|", ["=", "name", "foo"], + qfilter=["|", ["=", "name", "foo"], ["&", ["=", "name", ""]]], namefield="name") self.assertTrue(q.RequestedNames() is None) # Filter with NOT q = query.Query(fielddefs, ["name"], - filter_=["|", ["=", "name", "foo"], + qfilter=["|", ["=", "name", "foo"], ["!", ["=", "name", ""]]], namefield="name") self.assertTrue(q.RequestedNames() is None) # Filter with only OR (names must be in correct order) q = query.Query(fielddefs, ["name"], - filter_=["|", ["=", "name", "x17361"], + qfilter=["|", ["=", "name", "x17361"], ["|", ["=", "name", "x22015"]], ["|", ["|", ["=", "name", "x13193"]]], ["=", "name", "x15215"]], @@ -1136,14 +1136,14 @@ class TestQueryFilter(unittest.TestCase): ] for fielddefs in query.ALL_FIELD_LISTS: - for filter_ in checks: + for qfilter in checks: self.assertRaises(errors.ParameterError, query._CompileFilter, - fielddefs, None, filter_) + fielddefs, None, qfilter) for op in ["|", "!"]: - filter_ = self._GenNestedFilter(op, levels_max - 1) + qfilter = self._GenNestedFilter(op, levels_max - 1) self.assertTrue(callable(query._CompileFilter(fielddefs, None, - filter_))) + qfilter))) def testQueryInputOrder(self): fielddefs = query._PrepareFieldList([ @@ -1160,10 +1160,10 @@ class TestQueryFilter(unittest.TestCase): { "pnode": "node20", "snode": "node1", }, ] - filter_ = ["|", ["=", "pnode", "node1"], ["=", "snode", "node1"]] + qfilter = ["|", ["=", "pnode", "node1"], ["=", "snode", "node1"]] q = query.Query(fielddefs, ["pnode", "snode"], namefield="pnode", - filter_=filter_) + qfilter=qfilter) self.assertTrue(q.RequestedNames() is None) self.assertFalse(q.RequestedData()) self.assertEqual(q.Query(data), @@ -1179,7 +1179,7 @@ class TestQueryFilter(unittest.TestCase): # No name field, result must be in incoming order q = query.Query(fielddefs, ["pnode", "snode"], namefield=None, - filter_=filter_) + qfilter=qfilter) self.assertFalse(q.RequestedData()) self.assertEqual(q.Query(data), [[(constants.RS_NORMAL, "node1"), (constants.RS_NORMAL, "node44")], @@ -1242,7 +1242,7 @@ class TestQueryFilter(unittest.TestCase): ] q = query.Query(fielddefs, ["pnode", "num"], namefield="pnode", - filter_=["|", ["=", "pnode", "node1"], + qfilter=["|", ["=", "pnode", "node1"], ["=", "pnode", "node2"], ["=", "pnode", "node1"]]) self.assertEqual(q.RequestedNames(), ["node1", "node2"], @@ -1268,7 +1268,7 @@ class TestQueryFilter(unittest.TestCase): ] q = query.Query(fielddefs, ["pnode", "num"], namefield="pnode", - filter_=["|", ["=", "pnode", "nodeX"], + qfilter=["|", ["=", "pnode", "nodeX"], ["=", "pnode", "nodeY"], ["=", "pnode", "nodeY"], ["=", "pnode", "nodeY"], @@ -1311,20 +1311,20 @@ class TestQueryFilter(unittest.TestCase): # Empty filter q = query.Query(fielddefs, ["name", "other"], namefield="name", - filter_=["|"]) + qfilter=["|"]) self.assertTrue(q.RequestedNames() is None) self.assertEqual(q.RequestedData(), set([DK_A, DK_B])) self.assertEqual(q.Query(data), []) # Normal filter q = query.Query(fielddefs, ["name", "other"], namefield="name", - filter_=["=", "name", "node1"]) + qfilter=["=", "name", "node1"]) self.assertEqual(q.RequestedNames(), ["node1"]) self.assertEqual(q.Query(data), [[(constants.RS_NORMAL, "node1"), (constants.RS_NORMAL, "foo")]]) q = query.Query(fielddefs, ["name", "other"], namefield="name", - filter_=(["|", ["=", "name", "node1"], + qfilter=(["|", ["=", "name", "node1"], ["=", "name", "node3"]])) self.assertEqual(q.RequestedNames(), ["node1", "node3"]) self.assertEqual(q.Query(data), @@ -1333,7 +1333,7 @@ class TestQueryFilter(unittest.TestCase): # Complex filter q = query.Query(fielddefs, ["name", "other"], namefield="name", - filter_=(["|", ["=", "name", "node1"], + qfilter=(["|", ["=", "name", "node1"], ["|", ["=", "name", "node3"], ["=", "name", "node2"]], ["=", "name", "node3"]])) @@ -1348,11 +1348,11 @@ class TestQueryFilter(unittest.TestCase): for i in [-1, 0, 1, 123, [], None, True, False]: self.assertRaises(errors.ParameterError, query.Query, fielddefs, ["name", "other"], namefield="name", - filter_=["=", "name", i]) + qfilter=["=", "name", i]) # Negative filter q = query.Query(fielddefs, ["name", "other"], namefield="name", - filter_=["!", ["|", ["=", "name", "node1"], + qfilter=["!", ["|", ["=", "name", "node1"], ["=", "name", "node3"]]]) self.assertTrue(q.RequestedNames() is None) self.assertEqual(q.Query(data), @@ -1360,7 +1360,7 @@ class TestQueryFilter(unittest.TestCase): # Not equal q = query.Query(fielddefs, ["name", "other"], namefield="name", - filter_=["!=", "name", "node3"]) + qfilter=["!=", "name", "node3"]) self.assertTrue(q.RequestedNames() is None) self.assertEqual(q.Query(data), [[(constants.RS_NORMAL, "node1"), (constants.RS_NORMAL, "foo")], @@ -1368,7 +1368,7 @@ class TestQueryFilter(unittest.TestCase): # Data type q = query.Query(fielddefs, [], namefield="name", - filter_=["|", ["=", "other", "bar"], + qfilter=["|", ["=", "other", "bar"], ["=", "name", "foo"]]) self.assertTrue(q.RequestedNames() is None) self.assertEqual(q.RequestedData(), set([DK_A, DK_B])) @@ -1376,13 +1376,13 @@ class TestQueryFilter(unittest.TestCase): # Only one data type q = query.Query(fielddefs, ["other"], namefield="name", - filter_=["=", "other", "bar"]) + qfilter=["=", "other", "bar"]) self.assertTrue(q.RequestedNames() is None) self.assertEqual(q.RequestedData(), set([DK_B])) self.assertEqual(q.Query(data), [[(constants.RS_NORMAL, "bar")]]) q = query.Query(fielddefs, [], namefield="name", - filter_=["=", "other", "bar"]) + qfilter=["=", "other", "bar"]) self.assertTrue(q.RequestedNames() is None) self.assertEqual(q.RequestedData(), set([DK_B])) self.assertEqual(q.Query(data), [[]]) @@ -1403,7 +1403,7 @@ class TestQueryFilter(unittest.TestCase): ] q = query.Query(fielddefs, ["name", "other"], namefield="name", - filter_=["=[]", "other", "bar"]) + qfilter=["=[]", "other", "bar"]) self.assertTrue(q.RequestedNames() is None) self.assertEqual(q.Query(data), [ [(constants.RS_NORMAL, "node2"), @@ -1411,7 +1411,7 @@ class TestQueryFilter(unittest.TestCase): ]) q = query.Query(fielddefs, ["name", "other"], namefield="name", - filter_=["|", ["=[]", "other", "bar"], + qfilter=["|", ["=[]", "other", "bar"], ["=[]", "other", "a"], ["=[]", "other", "b"]]) self.assertTrue(q.RequestedNames() is None) @@ -1428,7 +1428,7 @@ class TestQueryFilter(unittest.TestCase): # Boolean test q = query.Query(fielddefs, ["name", "other"], namefield="name", - filter_=["?", "other"]) + qfilter=["?", "other"]) self.assertEqual(q.OldStyleQuery(data), [ ["node1", ["a", "b", "foo"]], ["node2", ["x", "y", "bar"]], @@ -1436,7 +1436,7 @@ class TestQueryFilter(unittest.TestCase): ]) q = query.Query(fielddefs, ["name", "other"], namefield="name", - filter_=["!", ["?", "other"]]) + qfilter=["!", ["?", "other"]]) self.assertEqual(q.OldStyleQuery(data), [ ["empty", []], ]) @@ -1454,7 +1454,7 @@ class TestQueryFilter(unittest.TestCase): ] q = query.Query(fielddefs, ["name"], namefield="name", - filter_=["=", "name", "node2"]) + qfilter=["=", "name", "node2"]) self.assertEqual(q.RequestedNames(), ["node2"]) self.assertEqual(q.Query(data), [ [(constants.RS_NORMAL, "node2.example.com")], @@ -1462,19 +1462,19 @@ class TestQueryFilter(unittest.TestCase): ]) q = query.Query(fielddefs, ["name"], namefield="name", - filter_=["=", "name", "node1"]) + qfilter=["=", "name", "node1"]) self.assertEqual(q.RequestedNames(), ["node1"]) self.assertEqual(q.Query(data), [ [(constants.RS_NORMAL, "node1.example.com")], ]) q = query.Query(fielddefs, ["name"], namefield="name", - filter_=["=", "name", "othername"]) + qfilter=["=", "name", "othername"]) self.assertEqual(q.RequestedNames(), ["othername"]) self.assertEqual(q.Query(data), []) q = query.Query(fielddefs, ["name"], namefield="name", - filter_=["|", ["=", "name", "node1.example.com"], + qfilter=["|", ["=", "name", "node1.example.com"], ["=", "name", "node2"]]) self.assertEqual(q.RequestedNames(), ["node1.example.com", "node2"]) self.assertEqual(q.Query(data), [ @@ -1489,7 +1489,7 @@ class TestQueryFilter(unittest.TestCase): ]) q = query.Query(fielddefs, ["name"], namefield="name", - filter_=["!=", "name", "node1"]) + qfilter=["!=", "name", "node1"]) self.assertTrue(q.RequestedNames() is None) self.assertEqual(q.Query(data), [ [(constants.RS_NORMAL, "node2.example.com")], @@ -1515,7 +1515,7 @@ class TestQueryFilter(unittest.TestCase): ] q = query.Query(fielddefs, ["name", "value"], - filter_=["|", ["=", "value", False], + qfilter=["|", ["=", "value", False], ["=", "value", True]]) self.assertTrue(q.RequestedNames() is None) self.assertEqual(q.Query(data), [ @@ -1525,7 +1525,7 @@ class TestQueryFilter(unittest.TestCase): ]) q = query.Query(fielddefs, ["name", "value"], - filter_=["|", ["=", "value", False], + qfilter=["|", ["=", "value", False], ["!", ["=", "value", False]]]) self.assertTrue(q.RequestedNames() is None) self.assertEqual(q.Query(data), [ @@ -1538,10 +1538,10 @@ class TestQueryFilter(unittest.TestCase): for i in ["False", "True", "0", "1", "no", "yes", "N", "Y"]: self.assertRaises(errors.ParameterError, query.Query, fielddefs, ["name", "value"], - filter_=["=", "value", i]) + qfilter=["=", "value", i]) # Truth filter - q = query.Query(fielddefs, ["name", "value"], filter_=["?", "value"]) + q = query.Query(fielddefs, ["name", "value"], qfilter=["?", "value"]) self.assertTrue(q.RequestedNames() is None) self.assertEqual(q.Query(data), [ [(constants.RS_NORMAL, "node2"), (constants.RS_NORMAL, True)], @@ -1549,7 +1549,7 @@ class TestQueryFilter(unittest.TestCase): ]) # Negative bool filter - q = query.Query(fielddefs, ["name", "value"], filter_=["!", ["?", "value"]]) + q = query.Query(fielddefs, ["name", "value"], qfilter=["!", ["?", "value"]]) self.assertTrue(q.RequestedNames() is None) self.assertEqual(q.Query(data), [ [(constants.RS_NORMAL, "node1"), (constants.RS_NORMAL, False)], @@ -1557,7 +1557,7 @@ class TestQueryFilter(unittest.TestCase): # Complex truth filter q = query.Query(fielddefs, ["name", "value"], - filter_=["|", ["&", ["=", "name", "node1"], + qfilter=["|", ["&", ["=", "name", "node1"], ["!", ["?", "value"]]], ["?", "value"]]) self.assertTrue(q.RequestedNames() is None) @@ -1583,14 +1583,14 @@ class TestQueryFilter(unittest.TestCase): ] q = query.Query(fielddefs, ["name"], namefield="name", - filter_=["=~", "name", "site"]) + qfilter=["=~", "name", "site"]) self.assertTrue(q.RequestedNames() is None) self.assertEqual(q.Query(data), [ [(constants.RS_NORMAL, "node2.site.example.com")], ]) q = query.Query(fielddefs, ["name"], namefield="name", - filter_=["=~", "name", "^node2"]) + qfilter=["=~", "name", "^node2"]) self.assertTrue(q.RequestedNames() is None) self.assertEqual(q.Query(data), [ [(constants.RS_NORMAL, "node2.example.net")], @@ -1598,7 +1598,7 @@ class TestQueryFilter(unittest.TestCase): ]) q = query.Query(fielddefs, ["name"], namefield="name", - filter_=["=~", "name", r"(?i)\.COM$"]) + qfilter=["=~", "name", r"(?i)\.COM$"]) self.assertTrue(q.RequestedNames() is None) self.assertEqual(q.Query(data), [ [(constants.RS_NORMAL, "node1.example.com")], @@ -1606,7 +1606,7 @@ class TestQueryFilter(unittest.TestCase): ]) q = query.Query(fielddefs, ["name"], namefield="name", - filter_=["=~", "name", r"."]) + qfilter=["=~", "name", r"."]) self.assertTrue(q.RequestedNames() is None) self.assertEqual(q.Query(data), [ [(constants.RS_NORMAL, "node1.example.com")], @@ -1615,7 +1615,7 @@ class TestQueryFilter(unittest.TestCase): ]) q = query.Query(fielddefs, ["name"], namefield="name", - filter_=["=~", "name", r"^$"]) + qfilter=["=~", "name", r"^$"]) self.assertTrue(q.RequestedNames() is None) self.assertEqual(q.Query(data), [ [(constants.RS_NORMAL, "")], @@ -1623,7 +1623,7 @@ class TestQueryFilter(unittest.TestCase): # Invalid regular expression self.assertRaises(errors.ParameterError, query.Query, fielddefs, ["name"], - filter_=["=~", "name", r"["]) + qfilter=["=~", "name", r"["]) if __name__ == "__main__": diff --git a/test/ganeti.rapi.client_unittest.py b/test/ganeti.rapi.client_unittest.py index 758490c22..c84f72e91 100755 --- a/test/ganeti.rapi.client_unittest.py +++ b/test/ganeti.rapi.client_unittest.py @@ -1,7 +1,7 @@ #!/usr/bin/python # -# Copyright (C) 2010 Google Inc. +# Copyright (C) 2010, 2011 Google Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -1239,22 +1239,22 @@ class GanetiRapiClientTests(testutils.GanetiTestCase): def testQuery(self): for idx, what in enumerate(constants.QR_VIA_RAPI): - for idx2, filter_ in enumerate([None, ["?", "name"]]): + for idx2, qfilter in enumerate([None, ["?", "name"]]): job_id = 11010 + (idx << 4) + (idx2 << 16) fields = sorted(query.ALL_FIELDS[what].keys())[:10] self.rapi.AddResponse(str(job_id)) - self.assertEqual(self.client.Query(what, fields, filter_=filter_), + self.assertEqual(self.client.Query(what, fields, qfilter=qfilter), job_id) self.assertItems([what]) self.assertHandler(rlib2.R_2_query) self.assertFalse(self.rapi.GetLastHandler().queryargs) data = serializer.LoadJson(self.rapi.GetLastRequestData()) self.assertEqual(data["fields"], fields) - if filter_ is None: - self.assertTrue("filter" not in data) + if qfilter is None: + self.assertTrue("qfilter" not in data) else: - self.assertEqual(data["filter"], filter_) + self.assertEqual(data["qfilter"], qfilter) self.assertEqual(self.rapi.CountPending(), 0) def testQueryFields(self): -- GitLab