[libvirt] [PATCH] python: Use PyCapsule API if available
Cole Robinson
crobinso at redhat.com
Mon Jan 10 17:36:07 UTC 2011
On 12/08/2010 10:12 AM, Cole Robinson wrote:
> On Fedore 14, virt-manager spews a bunch of warnings to the console:
>
> /usr/lib64/python2.7/site-packages/libvirt.py:1781: PendingDeprecationWarning: The CObject type is marked Pending Deprecation in Python 2.7. Please use capsule objects instead.
>
> Have libvirt use the capsule API if available. I've verified this compiles
> fine on older python (2.6 in RHEL6 which doesn't have capsules), and
> virt-manager seems to function fine.
ping? I think this should be a safe change.
- Cole
> ---
> python/typewrappers.c | 89 +++++++++++++++++++++++++++---------------------
> 1 files changed, 50 insertions(+), 39 deletions(-)
>
> diff --git a/python/typewrappers.c b/python/typewrappers.c
> index 733aa20..e39d3cd 100644
> --- a/python/typewrappers.c
> +++ b/python/typewrappers.c
> @@ -16,6 +16,26 @@
>
> #include "typewrappers.h"
>
> +#ifndef Py_CAPSULE_H
> +typedef void(*PyCapsule_Destructor)(void *, void *);
> +#endif
> +
> +static PyObject *
> +libvirt_buildPyObject(void *cobj,
> + const char *name,
> + PyCapsule_Destructor destr)
> +{
> + PyObject *ret;
> +
> +#ifdef Py_CAPSULE_H
> + ret = PyCapsule_New(cobj, name, destr);
> +#else
> + ret = PyCObject_FromVoidPtrAndDesc(cobj, (void *) name, destr);
> +#endif /* _TEST_CAPSULE */
> +
> + return ret;
> +}
> +
> PyObject *
> libvirt_intWrap(int val)
> {
> @@ -105,9 +125,8 @@ libvirt_virDomainPtrWrap(virDomainPtr node)
> Py_INCREF(Py_None);
> return (Py_None);
> }
> - ret =
> - PyCObject_FromVoidPtrAndDesc((void *) node, (char *) "virDomainPtr",
> - NULL);
> +
> + ret = libvirt_buildPyObject(node, "virDomainPtr", NULL);
> return (ret);
> }
>
> @@ -120,9 +139,8 @@ libvirt_virNetworkPtrWrap(virNetworkPtr node)
> Py_INCREF(Py_None);
> return (Py_None);
> }
> - ret =
> - PyCObject_FromVoidPtrAndDesc((void *) node, (char *) "virNetworkPtr",
> - NULL);
> +
> + ret = libvirt_buildPyObject(node, "virNetworkPtr", NULL);
> return (ret);
> }
>
> @@ -135,9 +153,8 @@ libvirt_virInterfacePtrWrap(virInterfacePtr node)
> Py_INCREF(Py_None);
> return (Py_None);
> }
> - ret =
> - PyCObject_FromVoidPtrAndDesc((void *) node, (char *) "virInterfacePtr",
> - NULL);
> +
> + ret = libvirt_buildPyObject(node, "virInterfacePtr", NULL);
> return (ret);
> }
>
> @@ -150,9 +167,8 @@ libvirt_virStoragePoolPtrWrap(virStoragePoolPtr node)
> Py_INCREF(Py_None);
> return (Py_None);
> }
> - ret =
> - PyCObject_FromVoidPtrAndDesc((void *) node, (char *) "virStoragePoolPtr",
> - NULL);
> +
> + ret = libvirt_buildPyObject(node, "virStoragePoolPtr", NULL);
> return (ret);
> }
>
> @@ -165,9 +181,8 @@ libvirt_virStorageVolPtrWrap(virStorageVolPtr node)
> Py_INCREF(Py_None);
> return (Py_None);
> }
> - ret =
> - PyCObject_FromVoidPtrAndDesc((void *) node, (char *) "virStorageVolPtr",
> - NULL);
> +
> + ret = libvirt_buildPyObject(node, "virStorageVolPtr", NULL);
> return (ret);
> }
>
> @@ -180,9 +195,8 @@ libvirt_virConnectPtrWrap(virConnectPtr node)
> Py_INCREF(Py_None);
> return (Py_None);
> }
> - ret =
> - PyCObject_FromVoidPtrAndDesc((void *) node, (char *) "virConnectPtr",
> - NULL);
> +
> + ret = libvirt_buildPyObject(node, "virConnectPtr", NULL);
> return (ret);
> }
>
> @@ -195,9 +209,8 @@ libvirt_virNodeDevicePtrWrap(virNodeDevicePtr node)
> Py_INCREF(Py_None);
> return (Py_None);
> }
> - ret =
> - PyCObject_FromVoidPtrAndDesc((void *) node, (char *) "virNodeDevicePtr",
> - NULL);
> +
> + ret = libvirt_buildPyObject(node, "virNodeDevicePtr", NULL);
> return (ret);
> }
>
> @@ -210,7 +223,8 @@ libvirt_virSecretPtrWrap(virSecretPtr node)
> Py_INCREF(Py_None);
> return Py_None;
> }
> - ret = PyCObject_FromVoidPtrAndDesc(node, (char *) "virSecretPtr", NULL);
> +
> + ret = libvirt_buildPyObject(node, "virSecretPtr", NULL);
> return (ret);
> }
>
> @@ -223,7 +237,8 @@ libvirt_virNWFilterPtrWrap(virNWFilterPtr node)
> Py_INCREF(Py_None);
> return Py_None;
> }
> - ret = PyCObject_FromVoidPtrAndDesc(node, (char *) "virNWFilterPtr", NULL);
> +
> + ret = libvirt_buildPyObject(node, "virNWFilterPtr", NULL);
> return (ret);
> }
>
> @@ -236,7 +251,8 @@ libvirt_virStreamPtrWrap(virStreamPtr node)
> Py_INCREF(Py_None);
> return Py_None;
> }
> - ret = PyCObject_FromVoidPtrAndDesc(node, (char *) "virStreamPtr", NULL);
> +
> + ret = libvirt_buildPyObject(node, "virStreamPtr", NULL);
> return (ret);
> }
>
> @@ -249,9 +265,8 @@ libvirt_virDomainSnapshotPtrWrap(virDomainSnapshotPtr node)
> Py_INCREF(Py_None);
> return (Py_None);
> }
> - ret =
> - PyCObject_FromVoidPtrAndDesc((void *) node, (char *) "virDomainSnapshotPtr",
> - NULL);
> +
> + ret = libvirt_buildPyObject(node, "virDomainSnapshotPtr", NULL);
> return (ret);
> }
>
> @@ -265,9 +280,8 @@ libvirt_virEventHandleCallbackWrap(virEventHandleCallback node)
> printf("%s: WARNING - Wrapping None\n", __func__);
> return (Py_None);
> }
> - ret =
> - PyCObject_FromVoidPtrAndDesc((void *) node, (char *) "virEventHandleCallback",
> - NULL);
> +
> + ret = libvirt_buildPyObject(node, "virEventHandleCallback", NULL);
> return (ret);
> }
>
> @@ -281,9 +295,8 @@ libvirt_virEventTimeoutCallbackWrap(virEventTimeoutCallback node)
> Py_INCREF(Py_None);
> return (Py_None);
> }
> - ret =
> - PyCObject_FromVoidPtrAndDesc((void *) node, (char *) "virEventTimeoutCallback",
> - NULL);
> +
> + ret = libvirt_buildPyObject(node, "virEventTimeoutCallback", NULL);
> return (ret);
> }
>
> @@ -296,9 +309,8 @@ libvirt_virFreeCallbackWrap(virFreeCallback node)
> Py_INCREF(Py_None);
> return (Py_None);
> }
> - ret =
> - PyCObject_FromVoidPtrAndDesc((void *) node, (char *) "virFreeCallback",
> - NULL);
> +
> + ret = libvirt_buildPyObject(node, "virFreeCallback", NULL);
> return (ret);
> }
>
> @@ -311,8 +323,7 @@ libvirt_virVoidPtrWrap(void* node)
> Py_INCREF(Py_None);
> return (Py_None);
> }
> - ret =
> - PyCObject_FromVoidPtrAndDesc((void *) node, (char *) "void*",
> - NULL);
> +
> + ret = libvirt_buildPyObject(node, "void*", NULL);
> return (ret);
> }
More information about the libvir-list
mailing list