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

@ -23,11 +23,11 @@ Result objects have `pods` (a Pod is an answer group from Wolfram Alpha)::
for pod in res.pods:
do_something_with(pod)
Pod objects have `subpods` (a Subpod is a specific response with the plaintext
Pod objects have ``subpods`` (a Subpod is a specific response with the plaintext
reply and some additional info)::
for pod in res.pods:
for sub in pod.subpod:
for sub in pod.subpods:
print(sub.text)
You may also query for simply the pods which have 'Result' titles or are

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