On Fri, Nov 22, 2019 at 11:14 PM Richard W.M. Jones <rjones(a)redhat.com> wrote:
On Fri, Nov 22, 2019 at 02:55:31PM -0600, Eric Blake wrote:
> On 11/22/19 1:53 PM, Richard W.M. Jones wrote:
> >To avoid breaking existing plugins, Python plugins wishing to use
> >version 2 of the API must opt in by declaring:
> >
> > def api_version():
> > return 2
> >
> >(Plugins which do not do this are assumed to want API version 1).
>
> Could we also permit the python code to declare a global variable
> instead of a function? But a function is just fine (and easier to
> integrate the way we do all our other callbacks).
I couldn't work out how to do this, plus we have the callback_defined
function which makes this easy, so yes, I did the easy thing :-)
> >@@ -54,20 +61,20 @@ def get_size(h):
> > return len(disk)
> >-def pread(h, count, offset):
> >+def pread(h, count, offset, flags):
> > global disk
> > return disk[offset:offset+count]
>
> Do we really want to be passing 'flags' as an integer that the
> python script must decode?
While I'm no Python programmer, it does look as if existing Python
core APIs are happy to use bitmasks, eg:
https://docs.python.org/3/library/os.html#os.open
and this is also easy to implement and keeps it similar to the C API.
Lot of python code is a thin wrapper over C code, and low level
details like flags
leak out to python, so this is a reasonable API.
But having more pythonic API can make python developer little happier when
working with this code. I don't know if it is worth the extra effort.
Nir