Contrary to what I thought, this update appears to be mostly compatible with all the code listed that came before. All generators have been switched out for lists so that information can be used from one location. If this is determined to somehow have an impact despite Wolfram Alpha not being expected to return oodles of information, then the code can be easily rewritten to use generators instead of lists. Lists are simply more convenient when experimenting with the source code.
Added a section at the bottom explaining what a developer should do if they need access to information that the Wolfram Alpha API provides but that isn't built into the interface. Because of the way this update handles the API's replies the information is easy to access using builtin data types.
These changes will most likely break most code that relies on this library.
Using generators is great and all, but if you want to query Wolfram Alpha for more complex information with
more context this library needs to be able to do that and be expandable at the same time. There's a lot more to Wolfram Alpha and the Python API should be able to access that content in a uniform way.
Redesign how information is stored and accessed. This way code can be written once. A developer using this API should not have to build contingencies just because Wolfram Alpha changes its output. The API should handle that.
These changes move the parsing of the tree out of the Wolfram API's returned XML and into Python dictionaries. This allows the full suite of tools that work with Python dictionaries to be used as well as simplifying and unifying how the responses should be handled.
In addition, I have added consistencies in certain areas that allow information to be accessed in one, unified way; regardless of how it would otherwise have been formatted by the library.
With this I want to encourage simplicity. You shouldn't have to look back through the code to figure out exactly what is being iterated over when someone decided to write iter(self) instead of simply iter(self.pods).
Also moved the Client class to the top of the file where it can be immediately seen.