def GenericList(resource, fields, names, unit, separator, header, cl=None,
- format_override=None, verbose=False, force_filter=False):
+ format_override=None, verbose=False, force_filter=False,
+ namefield=None):
"""Generic implementation for listing all items of a resource.
@param resource: One of L{constants.QR_VIA_LUXI}
indexed by field name, contents like L{_DEFAULT_FORMAT_QUERY}
@type verbose: boolean
@param verbose: whether to use verbose field descriptions or not
+ @type namefield: string
+ @param namefield: Name of field to use for simple filters (see
+ L{qlang.MakeFilter} for details)
"""
if not names:
names = None
- qfilter = qlang.MakeFilter(names, force_filter)
+ qfilter = qlang.MakeFilter(names, force_filter, namefield=namefield)
if cl is None:
cl = GetClient()
return [OP_EQUAL, namefield, text]
-def MakeFilter(args, force_filter):
+def MakeFilter(args, force_filter, namefield=None):
"""Try to make a filter from arguments to a command.
If the name could be a filter it is parsed as such. If it's just a globbing
@param args: Arguments to command
@type force_filter: bool
@param force_filter: Whether to force treatment as a full-fledged filter
+ @type namefield: string
+ @param namefield: Name of field to use for simple filters (use L{None} for
+ a default of "name")
@rtype: list
@return: Query filter
"""
+ if namefield is None:
+ namefield = "name"
+
if (force_filter or
(args and len(args) == 1 and _CheckFilter(args[0]))):
try:
result = ParseFilter(filter_text)
elif args:
- result = [OP_OR] + map(compat.partial(_MakeFilterPart, "name"), args)
+ result = [OP_OR] + map(compat.partial(_MakeFilterPart, namefield), args)
else:
result = None
[qlang.OP_OR, [qlang.OP_EQUAL, "name", "web1"],
[qlang.OP_EQUAL, "name", "web2"]])
+ def testPlainNamesOtherNamefield(self):
+ self.assertEqual(qlang.MakeFilter(["mailA", "mailB"], False,
+ namefield="id"),
+ [qlang.OP_OR, [qlang.OP_EQUAL, "id", "mailA"],
+ [qlang.OP_EQUAL, "id", "mailB"]])
+
def testForcedFilter(self):
for i in [None, [], ["1", "2"], ["", "", ""], ["a", "b", "c", "d"]]:
self.assertRaises(errors.OpPrereqError, qlang.MakeFilter, i, True)