Hi Michael,
i just wrote a small program with the new Python SDK. I found it very
easy to use, so great work. I do have a few points of feedback:
* Probably we want all Exceptions derived from a single base class.
That way, the user can intercept any ovirtsdk with a single try/except
clause. Currently that's not possible, as all your exceptions derive
directly from Exception.
* I think the .get() method should be id-based not name based. Using
"id" as a primary key has a number of advantages over name:
- It is immutable, which makes e.g. renaming a lot easier.
- It allows you to retrieve an object without a search query or a filter.
- It matches how the API works as well.
Also currently i think it's not possible to retrieve a resource by
its ID, unless you use the id= keyword argument to list() which
retrieves the whole collection and then filters out the matching id.
* You may want to introduce some non-entity related operations, like
ping(), and connect(). These allow you to better control when you
connect, and allow an program to test if the connection details work.
That helps client except the right exceptions at the right time, and
display more relevant error messages.
* There's two Python objects involved for each API object. For a VM
for example, you have params.VM and brokers.VM. This distinction is made
visible to the user, for example:
template = api.templates.get('Blank')
vm = params.VM()
vm.name = 'foo'
vm.template = template # ERROR
The last line need to be:
vm.template = params.Template(id=template.id)
In my version of the Python API i used mix-in classes to add the OO
behavior to the generated classes. It was easy, because PyXB had support
for that. This gave me the single class behavior. I am not sure if
GenerateDS generated code allows that. I'm pretty sure it could be done
though, but you may need to do some Python magic.
* Nitpick: should this just be called "ovirt" instead of
"ovirtsdk"?
Overall great work though!
Regards,
Geert