Hi all,
From our point of view, the PySAGA VU bindings is not so far from
being pythonic, but here are few comments about this binding :
- Create method classes are useful for asynchronous creation on
the objects (JobService, NSEntry, RPC, Stream, StreamService), but
other objects do not support asynchronous creation (Context,
JobDescription, Callback, Metric, Parameter, Session, Task,
TaskContainer, URL). There's no point using a create method for
these later objects, using a constructor is better. Our proposal
is to use constructors on all objects and keep the create class
method only for objects that can be asynchronously created.
- We think that we should not modify SAGA methods to accept both
URL and string, because this would lead to more drawbacks than
benefits. Indeed, it's not a good thing to use the same argument
to store different type of objects, and URLs can be created on the
fly (futhermore when it will be possible to use constructors).
- The getter and setter (for example in URL, Parameter,
SagaException, StdIO) should be replaced by properties. However,
methods like Job.get_stdin or JobService.get_job are not real
getter and should be kept unchanged.
- The SAGA specification says "Bindings to languages that natively
support inspection on object types MAY omit this enum and the get
type() method.". So we could remove the get_type method from the
BaseObject class and so the BaseObjectType class, and use the
Python "isinstance" method instead.
- Some methods coming from the latest version of the specification
(Revised January 25, 2011) are not in the python bindings, like
SagaException.get_all_messages() and get_all_exceptions() for
example.
- The TaskContainer.size() method could be replaced with the magic
Python method .__len__() in order to enable to use the Python
standard way of getting the length len(obj)
Comments are welcomed !
Julien and Sylvain