[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] Re: [PATCH,v2]: add libxl python binding



On Sat, 2010-09-11 at 12:27 +0100, Ian Campbell wrote:
> On Fri, 2010-09-10 at 18:03 +0100, Gianni Tedesco wrote: 
> > On Fri, 2010-09-10 at 17:45 +0100, Ian Campbell wrote:
> > > On Fri, 2010-09-10 at 16:49 +0100, Gianni Tedesco wrote:
> > > > Changes since v1:
> > > >  - Interpret keyword arguments in initializers: eg. 
> > > > xl.device_pci(bus=1, dev=2, fn=3)
> > > >  - Implement domain pause/unpause/rename/pci_add/pci_del and pci_parse
> > > >  - Proper type-checking in all (I hope) code-paths
> > > >  - Improve API for accessing auto-generated code and types
> > > > Changes since RFC:
> > > >  - split auto-generated code in to c and h files
> > > >  - un-break the build system
> > > >  - fix ocaml binding due to libxl API change
> > > >  - lot's of tidy-ups too numerous to mention
> > > >
> > > > -----8<---------------------------------------------------------------
> > > > Introduce python binding for libxl. The binding is not yet complete but
> > > > serveral methods are implemented and tested. Those which are implemented
> > > > provide examples of the two or three basic patterns that most future
> > > > methods should follow.
> > > >
> > > > Over 5,000 lines of boilerplate is automatically generated to wrap and
> > > > export all relevant libxl structure definitions. There are a few places
> > > > where such code cannot be fully auto-generated and special hooks are
> > > > declared and stubbed where, for example, conversion between
> > > > libxl_file_reference and a python file object is required.
> > >
> > > I'm not qualified to comment on the actual generated bindings themselves
> > > but the tiny bit which remains looks good to me.
> > >
> > > One perhaps interesting tip:
> > > > +    funcs="""static void Py%s_dealloc(Py_%s *self)
> > > > +{
> > > > +%s    self->ob_type->tp_free((PyObject *)self);
> > > [...etc...]
> > > > +}
> > > > +"""%((ty.rawname, ty.rawname, dtor) + tuple(ty.rawname for x in 
> > > > range(5)))
> > >
> > > String formatting in python can take a dictionary and then %(foo)s will
> > > expand by looking for the key 'foo' in the dict which would likely
> > > simplify (and help self-document) stuff with this pattern and get rid of
> > > the "x in range 5" stuff. I bet you had a hell of a job lining up all
> > > the %s's with their arguments correctly ;-)
> > 
> > Yeah, well, apart from the one case where it was the same thing 15
> > times. But yes, I was aware of that usage but never used it before and
> > tbh I hacked this up real quick so there's a few warts like that.
> > 
> > > e.g.
> > > """static void Py%(rawname)s_dealloc(Py_%(rawname)s... etc
> > > """ % {'rawname': ty.rawname, 'dtor': dtor... etc}
> > >
> > > etc
> > >
> > > I also think you could get rid of the long """ string containing hand
> > > written helpers by putting all that stuff in a pyxl.h and/or xl.c. I'd
> > > much prefer to edit the hand-written C code in a .h file where syntax
> > > highlighting will work properly etc. If you generate the relevant
> > > prototypes correctly then declaration shouldn't be too much of an issue.
> > 
> > Yeah, the definitions of the genwrap__*_(get|set) funcs can move to xl.c
> > which makes it a lot tidier.
> > 
> > With that bit of code motion done (see patch below) it could make sense
> > to add a few python_* attributes in libxltypes.c so that we could, for
> > example, say
> > 
> > x = Type(..., python_methods=PyFoo_Methods, python_init=Foobar_Init)
> > 
> > which would allow, eg: pci = xl.device_pci(); pci.parse("00:11.2") or
> > allow a non keyword initialiser, eg: pci = xl.device_pci("00:11.2")
> 
> I don't know that adding language specific stuff to the IDL is any
> better than just recognising specific type names which would like
> special handling in the generator. 

Actually I think enabling inheritance in the generated objects is the
way to do this. It just requires a bit of glue code both in the C and in
any inherited python wrappers to make it all work right.

Will have code for this in the next rev


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.