… and use them in cmdlib.
---
lib/cmdlib.py | 11 +++--------
lib/objects.py | 29 +++++++++++++++++++++++++----
2 files changed, 28 insertions(+), 12 deletions(-)
diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index 2dda843..ed4faff 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -550,9 +550,7 @@ class _QueryBase:
else:
fdefs = query.Query(cls.FIELDS, fields).GetFields()
- return {
- "fields": [fdef.ToDict() for fdef in fdefs],
- }
+ return objects.QueryFieldsResponse(fields=fdefs).ToDict()
def ExpandNames(self, lu):
"""Expand names for this query.
@@ -584,11 +582,8 @@ class _QueryBase:
"""
data = self._GetQueryData(lu)
- return {
- "data": self.query.Query(data),
- "fields": [fdef.ToDict()
- for fdef in self.query.GetFields()],
- }
+ return objects.QueryResponse(data=self.query.Query(data),
+ fields=self.query.GetFields()).ToDict()
def OldStyleQuery(self, lu):
"""Collect data and execute query.
diff --git a/lib/objects.py b/lib/objects.py
index 06a8dc2..62b749c 100644
--- a/lib/objects.py
+++ b/lib/objects.py
@@ -1392,6 +1392,29 @@ class QueryFieldDefinition(ConfigObject):
]
+class _QueryResponseBase(ConfigObject):
+ __slots__ = [
+ "fields",
+ ]
+
+ def ToDict(self):
+ """Custom function for serializing.
+
+ """
+ mydict = super(_QueryResponseBase, self).ToDict()
+ mydict["fields"] = self._ContainerToDicts(mydict["fields"])
+ return mydict
+
+ @classmethod
+ def FromDict(cls, val):
+ """Custom function for de-serializing.
+
+ """
+ obj = super(_QueryResponseBase, cls).FromDict(val)
+ obj.fields = cls._ContainerFromDicts(obj.fields, list,
QueryFieldDefinition)
+ return obj
+
+
class QueryRequest(ConfigObject):
"""Object holding a query request.
@@ -1403,7 +1426,7 @@ class QueryRequest(ConfigObject):
]
-class QueryResponse(ConfigObject):
+class QueryResponse(_QueryResponseBase):
"""Object holding the response to a query.
@ivar fields: List of L{QueryFieldDefinition} objects
@@ -1411,7 +1434,6 @@ class QueryResponse(ConfigObject):
"""
__slots__ = [
- "fields",
"data",
]
@@ -1426,14 +1448,13 @@ class QueryFieldsRequest(ConfigObject):
]
-class QueryFieldsResponse(ConfigObject):
+class QueryFieldsResponse(_QueryResponseBase):
"""Object holding the response to a query for fields.
@ivar fields: List of L{QueryFieldDefinition} objects
"""
__slots__ = [
- "fields",
]
--
1.7.3.1