Re-use more of the from_doc constructor and attribute type transformation in the Result object. Restore Pod.subpods through an alias property.

This commit is contained in:
Jason R. Coombs
2016-09-03 14:56:06 -04:00
parent 273cd73330
commit 1a4dc2fc62
2 changed files with 13 additions and 6 deletions

View File

@@ -82,7 +82,6 @@ class Document(dict):
doc = [doc]
return map(cls, doc)
def __getattr__(self, name):
type = self._attr_types.get(name, lambda x: x)
attr_name = '@' + name
@@ -148,6 +147,10 @@ class Pod(ErrorHandler, Document):
super(Pod, self).__init__(*args, **kwargs)
self._handle_error(self)
@property
def subpods(self):
return self.subpod
@property
def primary(self):
return '@primary' in self and xml_bool(self['@primary'])
@@ -168,6 +171,10 @@ class Result(ErrorHandler, Document):
"""
Handles processing the response for the programmer.
"""
_attr_types = dict(
pod=Pod.from_doc,
)
def __init__(self, stream):
super(Result, self).__init__()
doc = xmltodict.parse(stream, dict_constructor=dict)['queryresult']
@@ -183,15 +190,15 @@ class Result(ErrorHandler, Document):
@property
def pods(self):
return map(Pod, self.get('pod', []))
return self.pod
@property
def assumptions(self):
return map(Assumption, self.get('assumptions', []))
return Assumption.from_doc(self.get('assumptions', []))
@property
def warnings(self):
return map(Warning, self.get('warnings', []))
return Warning.from_doc(self.get('warnings', []))
def __iter__(self):
return self.info