Revision aa29e95f
b/lib/cmdlib.py | ||
---|---|---|
39 | 39 |
import socket |
40 | 40 |
import tempfile |
41 | 41 |
import shutil |
42 |
import operator |
|
43 | 42 |
import itertools |
44 | 43 |
|
45 | 44 |
from ganeti import ssh |
... | ... | |
559 | 558 |
@return: List of L{objects.QueryFieldDefinition} |
560 | 559 |
|
561 | 560 |
""" |
562 |
if fields is None: |
|
563 |
# Client requests all fields, sort by name |
|
564 |
fdefs = sorted(query.GetAllFields(cls.FIELDS.values()), |
|
565 |
key=operator.attrgetter("name")) |
|
566 |
else: |
|
567 |
# Keep order as requested by client |
|
568 |
fdefs = query.Query(cls.FIELDS, fields).GetFields() |
|
569 |
|
|
570 |
return objects.QueryFieldsResponse(fields=fdefs).ToDict() |
|
561 |
return query.QueryFields(cls.FIELDS, fields) |
|
571 | 562 |
|
572 | 563 |
def ExpandNames(self, lu): |
573 | 564 |
"""Expand names for this query. |
b/lib/query.py | ||
---|---|---|
235 | 235 |
return result |
236 | 236 |
|
237 | 237 |
|
238 |
def QueryFields(fielddefs, selected): |
|
239 |
"""Returns list of available fields. |
|
240 |
|
|
241 |
@type fielddefs: dict |
|
242 |
@param fielddefs: Field definitions |
|
243 |
@type selected: list of strings |
|
244 |
@param selected: List of selected fields |
|
245 |
@return: List of L{objects.QueryFieldDefinition} |
|
246 |
|
|
247 |
""" |
|
248 |
if selected is None: |
|
249 |
# Client requests all fields, sort by name |
|
250 |
fdefs = utils.NiceSort(GetAllFields(fielddefs.values()), |
|
251 |
key=operator.attrgetter("name")) |
|
252 |
else: |
|
253 |
# Keep order as requested by client |
|
254 |
fdefs = Query(fielddefs, selected).GetFields() |
|
255 |
|
|
256 |
return objects.QueryFieldsResponse(fields=fdefs).ToDict() |
|
257 |
|
|
258 |
|
|
238 | 259 |
def _MakeField(name, title, kind): |
239 | 260 |
"""Wrapper for creating L{objects.QueryFieldDefinition} instances. |
240 | 261 |
|
b/test/ganeti.query_unittest.py | ||
---|---|---|
23 | 23 |
|
24 | 24 |
import re |
25 | 25 |
import unittest |
26 |
import random |
|
26 | 27 |
|
27 | 28 |
from ganeti import constants |
28 | 29 |
from ganeti import utils |
... | ... | |
752 | 753 |
"ADMIN_down"])) |
753 | 754 |
|
754 | 755 |
|
756 |
class TestQueryFields(unittest.TestCase): |
|
757 |
def testAllFields(self): |
|
758 |
for fielddefs in [query.NODE_FIELDS, query.INSTANCE_FIELDS]: |
|
759 |
result = query.QueryFields(fielddefs, None) |
|
760 |
self.assert_(isinstance(result, dict)) |
|
761 |
response = objects.QueryFieldsResponse.FromDict(result) |
|
762 |
self.assertEqual([(fdef.name, fdef.title) for fdef in response.fields], |
|
763 |
[(fdef2.name, fdef2.title) |
|
764 |
for (fdef2, _, _) in utils.NiceSort(fielddefs.values(), |
|
765 |
key=lambda x: x[0].name)]) |
|
766 |
|
|
767 |
def testSomeFields(self): |
|
768 |
rnd = random.Random(5357) |
|
769 |
|
|
770 |
for _ in range(10): |
|
771 |
for fielddefs in [query.NODE_FIELDS, query.INSTANCE_FIELDS]: |
|
772 |
fields = [fdef |
|
773 |
for (fdef, _, _) in rnd.sample(fielddefs.values(), |
|
774 |
rnd.randint(5, 20))] |
|
775 |
result = query.QueryFields(fielddefs, [fdef.name for fdef in fields]) |
|
776 |
self.assert_(isinstance(result, dict)) |
|
777 |
response = objects.QueryFieldsResponse.FromDict(result) |
|
778 |
self.assertEqual([(fdef.name, fdef.title) for fdef in response.fields], |
|
779 |
[(fdef2.name, fdef2.title) for fdef2 in fields]) |
|
780 |
|
|
781 |
|
|
755 | 782 |
if __name__ == "__main__": |
756 | 783 |
testutils.GanetiTestProgram() |
Also available in: Unified diff