[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 4 of 4] pyxl: Add _get_attribs() method to all classes
tools/python/genwrap.py | 18 ++++++++++++++++-- tools/python/xen/lowlevel/xl/xl.c | 25 +++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) # HG changeset patch # User Gianni Tedesco <gianni.tedesco@xxxxxxxxxx> # Date 1291900689 0 # Node ID 35dd6a11ce56488d01f9f1cb365e6035687390ca # Parent 521af80c82bb6fc8e4403bbe2313b3a8b3c78841 pyxl: Add _get_attribs() method to all classes This returns a dictionary of (attrib_name, value) tuples corresponding to all fields of the libxl data-type that is being wrapped. This allows for creation of super-classes of those types after they have been returned from libxl. Signed-off-by: Gianni Tedesco <gianni.tedesco@xxxxxxxxxx> diff -r 521af80c82bb -r 35dd6a11ce56 tools/python/genwrap.py --- a/tools/python/genwrap.py Thu Dec 09 13:16:19 2010 +0000 +++ b/tools/python/genwrap.py Thu Dec 09 13:18:09 2010 +0000 @@ -127,6 +127,17 @@ static PyObject *Py%(rawname)s_new(PyTyp l.append(' { .name = NULL }') l.append('};') struct=""" +static PyObject *Py%s__get_attribs(PyObject *self, PyObject *args) +{ + return genwrap__get_attribs(self, Py%s_getset); +} + +static PyMethodDef Py%s_methods[] = { + {"_get_attribs", (PyCFunction)Py%s__get_attribs, METH_NOARGS, + "Get all attributes as dictionary"}, + {NULL, NULL, 0, NULL} +}; + static PyTypeObject Py%s_Type= { PyObject_HEAD_INIT(NULL) 0, @@ -156,7 +167,7 @@ static PyTypeObject Py%s_Type= { 0, /* tp_weaklistoffset */ NULL, /* tp_iter */ NULL, /* tp_iternext */ - NULL, /* tp_methods */ + Py%s_methods, /* tp_methods */ NULL, /* tp_members */ Py%s_getset, /* tp_getset */ NULL, /* tp_base */ @@ -178,7 +189,7 @@ int Py%s_Check(PyObject *self) { return (self->ob_type == &Py%s_Type); } -"""%tuple(ty.rawname for x in range(15)) +"""%tuple(ty.rawname for x in range(20)) return funcs + '\n'.join(l) + "\n" + struct def py_initfuncs(types): @@ -237,6 +248,9 @@ _hidden void genwrap__init(PyObject *m); /* Generic type initialiser */ _hidden int genwrap__obj_init(PyObject *self, PyObject *args, PyObject *kwds); +/* Generic type dictionary getter */ +_hidden PyObject *genwrap__get_attribs(PyObject *self, PyGetSetDef *getsets); + /* Auto-generated get/set functions for simple data-types */ _hidden int genwrap__string_set(PyObject *v, char **str); _hidden PyObject *genwrap__string_get(char **str); diff -r 521af80c82bb -r 35dd6a11ce56 tools/python/xen/lowlevel/xl/xl.c --- a/tools/python/xen/lowlevel/xl/xl.c Thu Dec 09 13:16:19 2010 +0000 +++ b/tools/python/xen/lowlevel/xl/xl.c Thu Dec 09 13:18:09 2010 +0000 @@ -57,6 +57,31 @@ static PyObject *xl_error_obj; +PyObject *genwrap__get_attribs(PyObject *self, PyGetSetDef *getsets) +{ + PyObject *dict; + PyGetSetDef *cur; + + dict = PyDict_New(); + if ( NULL == dict ) { + PyErr_SetString(PyExc_MemoryError, "Allocating dictionary"); + return NULL; + } + + for(cur = getsets; cur->name; cur++) { + PyObject *tmp; + tmp = (*cur->get)(self, cur->closure); + if ( NULL == tmp ) { + Py_DECREF(dict); + return NULL; + } + PyDict_SetItemString(dict, cur->name, tmp); + Py_DECREF(tmp); + } + + return dict; +} + int genwrap__obj_init(PyObject *self, PyObject *args, PyObject *kwds) { PyObject *key, *value; _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |