From 0538c375e584b78f85bb29eaa2d3a01e48d9d021 Mon Sep 17 00:00:00 2001 From: Michael Hanselmann <hansmi@google.com> Date: Wed, 8 Dec 2010 18:54:14 +0100 Subject: [PATCH] objects: Add custom de-/serializing code for query responses MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit β¦ and use them in cmdlib. Signed-off-by: Michael Hanselmann <hansmi@google.com> Reviewed-by: RenΓ© Nussbaumer <rn@google.com> --- 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 0f0506488..04cc20bfb 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 06a8dc2c5..62b749c39 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", ] -- GitLab