Hello community,
here is the log from the commit of package libvirt-python for openSUSE:Factory checked in at 2014-07-10 08:18:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libvirt-python (Old)
and /work/SRC/openSUSE:Factory/.libvirt-python.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libvirt-python"
Changes:
--------
--- /work/SRC/openSUSE:Factory/libvirt-python/libvirt-python.changes 2014-06-10 14:39:17.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.libvirt-python.new/libvirt-python.changes 2014-07-10 09:32:03.000000000 +0200
@@ -1,0 +2,6 @@
+Wed Jul 2 13:36:18 MDT 2014 - jfehlig@suse.com
+
+- Update to 1.2.6
+ - Add all new APIs and constants in libvirt 1.2.6
+
+-------------------------------------------------------------------
Old:
----
libvirt-python-1.2.5.tar.bz2
New:
----
libvirt-python-1.2.6.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libvirt-python.spec ++++++
--- /var/tmp/diff_new_pack.UvDpQY/_old 2014-07-10 09:32:04.000000000 +0200
+++ /var/tmp/diff_new_pack.UvDpQY/_new 2014-07-10 09:32:04.000000000 +0200
@@ -18,7 +18,7 @@
Name: libvirt-python
Url: http://libvirt.org/
-Version: 1.2.5
+Version: 1.2.6
Release: 0
Summary: Library providing a simple virtualization API
License: LGPL-2.1+
++++++ libvirt-python-1.2.5.tar.bz2 -> libvirt-python-1.2.6.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libvirt-python-1.2.5/AUTHORS new/libvirt-python-1.2.6/AUTHORS
--- old/libvirt-python-1.2.5/AUTHORS 2014-06-02 03:55:34.000000000 +0200
+++ new/libvirt-python-1.2.6/AUTHORS 2014-07-02 08:12:23.000000000 +0200
@@ -346,6 +346,10 @@
Eric Blake
Eric Blake
Eric Blake
+ Eric Blake
+ Eric Blake
+ Eric Blake
+ Eric Blake
Federico Simoncelli
Giuseppe Scrivano
Giuseppe Scrivano
@@ -380,6 +384,7 @@
Hu Tao
Hu Tao
Hu Tao
+ Jason Andryuk
Jim Fehlig
Jim Meyering
Jim Meyering
@@ -443,6 +448,7 @@
Martin Kletzander
Martin Kletzander
Martin Kletzander
+ Martin Kletzander
MATSUDA Daiki
MATSUDA Daiki
Matthias Bolte
@@ -465,9 +471,12 @@
Michal Privoznik
Michal Privoznik
Michal Privoznik
+ Michal Privoznik
Miloslav Trmač
Minoru Usui
Minoru Usui
+ Nehal J Wani
+ Nehal J Wani
Nikunj A. Dadhania
Osier Yang
Osier Yang
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libvirt-python-1.2.5/ChangeLog new/libvirt-python-1.2.6/ChangeLog
--- old/libvirt-python-1.2.5/ChangeLog 2014-06-02 03:55:34.000000000 +0200
+++ new/libvirt-python-1.2.6/ChangeLog 2014-07-02 08:12:23.000000000 +0200
@@ -1,3 +1,125 @@
+2014-06-27 Nehal J Wani
+
+ Implement new virNetworkGetDHCPLeases API
+ This API returns a list of DHCP leases for all network interfaces
+ connected to the given virtual network or limited output just for one
+ interface if mac is specified.
+
+ Example Output:
+ [{'iface': 'virbr3', 'ipaddr': '192.168.150.181', 'hostname': 'ubuntu14',
+ 'expirytime': 1403737495L, 'prefix': 24, 'clientid': None,
+ 'mac': '52:54:00:e8:73:eb', 'iaid': None, 'type': 0},
+ {'iface': 'virbr3', 'ipaddr': '2001:db8:ca2:2:1::bd', 'hostname': 'fedora20-test',
+ 'expirytime': 1403738587L, 'prefix': 64, 'clientid': '00:04:b1:d8:86:42:e1:6a:aa:cf:d5:86:94:23:6f:94:04:cd',
+ 'mac': '52:54:00:5b:40:98', 'iaid': '5980312', 'type': 1}]
+
+
+
+2014-06-25 Eric Blake
+
+ maint: document development against uninstalled libvirt
+ Thanks to Dan's recent work in libvirt.git, it is much easier to
+ develop against uninstalled libvirt. Mention how.
+
+ * README: More details.
+
+
+
+2014-06-25 Nehal J Wani
+
+ build: use correct int conversion in NodeGetFreePages
+ Commit c8ba859bc7 introduced a compiler warning while un-wrapping
+ a python object to uint in libvirt_virNodeGetFreePages.
+
+ On compiling libvirt-python against libvirt 1.2.6, we get:
+
+ libvirt-override.c: In function ‘libvirt_virNodeGetFreePages’:
+ libvirt-override.c:7811:9: warning: pointer targets in passing argument 2 of ‘libvirt_intUnwrap’ differ in signedness [-Wpointer-sign]
+ if (libvirt_intUnwrap(tmp, &pages[i]) < 0)
+ ^
+ In file included from libvirt-override.c:24:0:
+ typewrappers.h:169:5: note: expected ‘int *’ but argument is of type ‘unsigned int *’
+ int libvirt_intUnwrap(PyObject *obj, int *val);
+ ^
+
+
+
+2014-06-20 Michal Privoznik
+
+ Implement new virNodeGetFreePages API
+ The API expose information on host's free pages counts. For easier
+ access, in python this API returns a dictionary such as:
+
+ In [4]: conn.getFreePages([2048,1*1024*1024], -1, 5)
+ Out[4]:
+ {-1: {2048: 114, 1048576: 4},
+ 0: {2048: 3, 1048576: 1},
+ 1: {2048: 100, 1048576: 1},
+ 2: {2048: 10, 1048576: 1},
+ 3: {2048: 1, 1048576: 1}}
+
+ At the top level of the returned dictionary there's a pair of and another dictionary that contains detailed information on
+ each supported page size. The information then consists of fairs of
+ <page size> and <count of free pages>.
+
+
+
+2014-06-19 Jason Andryuk
+
+ Correct virDomainMigrateToURI3 definition
+ dconnuri is a string, so update the definition to match. Without this,
+ the generated python would fail when passed a string.
+
+
+2014-06-18 Eric Blake
+
+ build: provide wrapper makefile
+ After years of finger training, I'm so used to 'make check' just
+ working, that I lose quite a bit of time re-learning that in this
+ project, it is spelled 'python setup.py build check'. A shim
+ makefile bridges the gap.
+
+ * Makefile: New file.
+
+
+
+2014-06-18 Eric Blake
+
+ event-test: add missing events
+ Update the example to be able to trace all events.
+
+ * examples/event-test.py (main): Match full list of domain events.
+ (myDomainEventIOErrorReasonCallback)
+ (myDomainEventControlErrorCallback)
+ (myDomainEventBlockJobCallback, myDomainEventBlockJob2Callback)
+ (blockJobTypeToString, blockJobStatusToString): New functions.
+
+
+
+2014-06-18 Eric Blake
+
+ blockjob: support new BLOCK_JOB_2 event
+ Libvirt 1.2.6 is introducing a new block job event that passes disk
+ information by target device rather than host file name. At the
+ python level, we are just a passthrough, so we can reuse all the
+ existing code and just wire up the new enum value.
+
+ * libvirt-override-virConnect.py
+ (_dispatchDomainEventBlockPullCallback): Rename...
+ (_dispatchDomainEventBlockJobCallback): ...to this, and make
+ generic to both events.
+ * libvirt-override.c
+ (libvirt_virConnectDomainEventBlockJobCallback): Match naming.
+ (libvirt_virConnectDomainEventRegisterAny): Allow new registration.
+
+
+
+2014-06-02 Martin Kletzander
+
+ Bump version to 1.2.6 for new dev cycle
+
+
2014-05-27 Martin Kletzander
fix leak in memoryStats with older python
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libvirt-python-1.2.5/PKG-INFO new/libvirt-python-1.2.6/PKG-INFO
--- old/libvirt-python-1.2.5/PKG-INFO 2014-06-02 03:55:35.000000000 +0200
+++ new/libvirt-python-1.2.6/PKG-INFO 2014-07-02 08:12:23.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: libvirt-python
-Version: 1.2.5
+Version: 1.2.6
Summary: The libvirt virtualization API
Home-page: http://www.libvirt.org
Author: Libvirt Maintainers
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libvirt-python-1.2.5/README new/libvirt-python-1.2.6/README
--- old/libvirt-python-1.2.5/README 2014-05-04 08:57:48.000000000 +0200
+++ new/libvirt-python-1.2.6/README 2014-06-30 08:25:00.000000000 +0200
@@ -21,6 +21,21 @@
python setup.py build
python setup.py install --user
+If python-nose is installed, you can test the package with
+
+ python setup.py test
+
+A makefile shim is provided so that you can do
+
+ make && make check
+
+rather than directly invoking setup.py.
+
+As of libvirt 1.2.6, it is possible to develop against an uninstalled
+libvirt.git checkout, by setting some environment variables:
+
+ export PKG_CONFIG_PATH=/path/to/libvirt/git/src/
+ export LD_LIBRARY_PATH=/path/to/libvirt/git/src/.libs/
Patches for this code should be sent to the main libvirt
development mailing list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libvirt-python-1.2.5/examples/event-test.py new/libvirt-python-1.2.6/examples/event-test.py
--- old/libvirt-python-1.2.5/examples/event-test.py 2014-05-04 08:57:48.000000000 +0200
+++ new/libvirt-python-1.2.6/examples/event-test.py 2014-06-30 08:25:00.000000000 +0200
@@ -456,6 +456,14 @@
)
return domEventStrings[event][detail]
+def blockJobTypeToString(type):
+ blockJobTypes = ( "unknown", "Pull", "Copy", "Commit", "ActiveCommit", )
+ return blockJobTypes[type]
+
+def blockJobStatusToString(status):
+ blockJobStatus = ( "Completed", "Failed", "Canceled", "Ready", )
+ return blockJobStatus[status]
+
def myDomainEventCallback1 (conn, dom, event, detail, opaque):
print("myDomainEventCallback1 EVENT: Domain %s(%s) %s %s" % (dom.name(), dom.ID(),
domEventToString(event),
@@ -477,10 +485,14 @@
def myDomainEventIOErrorCallback(conn, dom, srcpath, devalias, action, opaque):
print("myDomainEventIOErrorCallback: Domain %s(%s) %s %s %d" % (dom.name(), dom.ID(), srcpath, devalias, action))
-
+def myDomainEventIOErrorReasonCallback(conn, dom, srcpath, devalias, action, reason, opaque):
+ print("myDomainEventIOErrorReasonCallback: Domain %s(%s) %s %s %d %s" % (dom.name(), dom.ID(), srcpath, devalias, action, reason))
def myDomainEventGraphicsCallback(conn, dom, phase, localAddr, remoteAddr, authScheme, subject, opaque):
print("myDomainEventGraphicsCallback: Domain %s(%s) %d %s" % (dom.name(), dom.ID(), phase, authScheme))
-
+def myDomainEventControlErrorCallback(conn, dom, opaque):
+ print("myDomainEventControlErrorCallback: Domain %s(%s)" % (dom.name(), dom.ID()))
+def myDomainEventBlockJobCallback(conn, dom, disk, type, status, opaque):
+ print("myDomainEventBlockJobCallback: Domain %s(%s) %s on disk %s %s" % (dom.name(), dom.ID(), blockJobTypeToString(type), disk, blockJobStatusToString(status)))
def myDomainEventDiskChangeCallback(conn, dom, oldSrcPath, newSrcPath, devAlias, reason, opaque):
print("myDomainEventDiskChangeCallback: Domain %s(%s) disk change oldSrcPath: %s newSrcPath: %s devAlias: %s reason: %s" % (
dom.name(), dom.ID(), oldSrcPath, newSrcPath, devAlias, reason))
@@ -501,6 +513,8 @@
def myDomainEventDeviceRemovedCallback(conn, dom, dev, opaque):
print("myDomainEventDeviceRemovedCallback: Domain %s(%s) device removed: %s" % (
dom.name(), dom.ID(), dev))
+def myDomainEventBlockJob2Callback(conn, dom, disk, type, status, opaque):
+ print("myDomainEventBlockJob2Callback: Domain %s(%s) %s on disk %s %s" % (dom.name(), dom.ID(), blockJobTypeToString(type), disk, blockJobStatusToString(status)))
##########################################################################
# Network events
@@ -591,14 +605,17 @@
vc.registerCloseCallback(myConnectionCloseCallback, None)
- #Add 2 callbacks to prove this works with more than just one
+ #Add 2 lifecycle callbacks to prove this works with more than just one
vc.domainEventRegister(myDomainEventCallback1,None)
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_LIFECYCLE, myDomainEventCallback2, None)
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_REBOOT, myDomainEventRebootCallback, None)
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_RTC_CHANGE, myDomainEventRTCChangeCallback, None)
- vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR, myDomainEventIOErrorCallback, None)
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_WATCHDOG, myDomainEventWatchdogCallback, None)
+ vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR, myDomainEventIOErrorCallback, None)
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_GRAPHICS, myDomainEventGraphicsCallback, None)
+ vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON, myDomainEventIOErrorReasonCallback, None)
+ vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_CONTROL_ERROR, myDomainEventControlErrorCallback, None)
+ vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_BLOCK_JOB, myDomainEventBlockJobCallback, None)
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_DISK_CHANGE, myDomainEventDiskChangeCallback, None)
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_TRAY_CHANGE, myDomainEventTrayChangeCallback, None)
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_PMWAKEUP, myDomainEventPMWakeupCallback, None)
@@ -606,6 +623,7 @@
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_BALLOON_CHANGE, myDomainEventBalloonChangeCallback, None)
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_PMSUSPEND_DISK, myDomainEventPMSuspendDiskCallback, None)
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED, myDomainEventDeviceRemovedCallback, None)
+ vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_BLOCK_JOB_2, myDomainEventBlockJob2Callback, None)
vc.networkEventRegisterAny(None, libvirt.VIR_NETWORK_EVENT_ID_LIFECYCLE, myNetworkEventLifecycleCallback, None)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libvirt-python-1.2.5/generator.py new/libvirt-python-1.2.6/generator.py
--- old/libvirt-python-1.2.5/generator.py 2014-06-02 03:54:49.000000000 +0200
+++ new/libvirt-python-1.2.6/generator.py 2014-06-30 08:25:00.000000000 +0200
@@ -462,6 +462,8 @@
'virDomainMigrate3',
'virDomainMigrateToURI3',
'virConnectGetCPUModelNames',
+ 'virNodeGetFreePages',
+ 'virNetworkGetDHCPLeases',
)
lxc_skip_impl = (
@@ -567,6 +569,8 @@
"virTypedParamsGetString",
"virTypedParamsGetUInt",
"virTypedParamsGetULLong",
+
+ 'virNetworkDHCPLeaseFree', # only useful in C, python code uses list
)
lxc_skip_function = (
@@ -1114,6 +1118,7 @@
elif name[0:13] == "virNetworkGet":
func = name[13:]
func = func[0:1].lower() + func[1:]
+ func = func.replace("dHCP", "DHCP")
elif name[0:10] == "virNetwork":
func = name[10:]
func = func[0:1].lower() + func[1:]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libvirt-python-1.2.5/libvirt-override-api.xml new/libvirt-python-1.2.6/libvirt-override-api.xml
--- old/libvirt-python-1.2.5/libvirt-override-api.xml 2014-05-04 08:57:48.000000000 +0200
+++ new/libvirt-python-1.2.6/libvirt-override-api.xml 2014-06-30 08:25:00.000000000 +0200
@@ -562,7 +562,7 @@
<info>Migrate the domain object from its current host to the destination host
given by URI.</info>
<arg name='domain' type='virDomainPtr' info='a domain object'/>
- <arg name='dconnuri' type='virConnectPtr' info='URI for target libvirtd if @flags includes VIR_MIGRATE_PEER2PEER'/>
+ <arg name='dconnuri' type='char *' info='URI for target libvirtd if @flags includes VIR_MIGRATE_PEER2PEER'/>
<arg name='params' type='char *' info='dictionary with migration parameters'/>
<arg name='flags' type='unsigned int' info='an OR'ed set of virDomainMigrateFlags'/>
<return type='int' info='0 in case of success, -1 in case of failure.'/>
@@ -624,5 +624,21 @@
<arg name='conn' type='virConnectPtr' info='pointer to the hypervisor connection'/>
<arg name='flags' type='int' info='unused, pass 0'/>
</function>
+ <function name="virNodeGetFreePages" file='python'>
+ <info>Returns the number of available pages for a list of cells and page sizes</info>
+ <arg name='conn' type='virConnectPtr' info='pointer to the hypervisor connection'/>
+ <arg name='pages' type='char *' info='list of desired page sizes'/>
+ <arg name='startCell' type='int' info='first cell in the list'/>
+ <arg name='maxCells' type='int' info='number of cell in the list'/>
+ <arg name='flags' type='int' info='unused, pass 0'/>
+ <return type='char *' info='the list available memory in the cells'/>
+ </function>
+ <function name="virNetworkGetDHCPLeases" file='python'>
+ <info>Returns a list of dhcp leases for interfaces connected to the given virtual network</info>
+ <arg name='network' type='virNetworkPtr' info='a network object'/>
+ <arg name='mac' type='const char *' info='optional mac address'/>
+ <arg name='flags' type='unsigned int' info='unused, pass 0'/>
+ <return type='char *' info="list of leases"/>
+ </function>
</symbols>
</api>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libvirt-python-1.2.5/libvirt-override-virConnect.py new/libvirt-python-1.2.6/libvirt-override-virConnect.py
--- old/libvirt-python-1.2.5/libvirt-override-virConnect.py 2014-05-04 08:57:48.000000000 +0200
+++ new/libvirt-python-1.2.6/libvirt-override-virConnect.py 2014-06-30 08:25:00.000000000 +0200
@@ -113,14 +113,14 @@
authScheme, subject, opaque)
return 0
- def _dispatchDomainEventBlockPullCallback(self, dom, path, type, status, cbData):
- """Dispatches events to python user domain blockJob event callbacks
+ def _dispatchDomainEventBlockJobCallback(self, dom, disk, type, status, cbData):
+ """Dispatches events to python user domain blockJob/blockJob2 event callbacks
"""
try:
cb = cbData["cb"]
opaque = cbData["opaque"]
- cb(self, virDomain(self, _obj=dom), path, type, status, opaque)
+ cb(self, virDomain(self, _obj=dom), disk, type, status, opaque)
return 0
except AttributeError:
pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libvirt-python-1.2.5/libvirt-override.c new/libvirt-python-1.2.6/libvirt-override.c
--- old/libvirt-python-1.2.5/libvirt-override.c 2014-06-02 03:54:49.000000000 +0200
+++ new/libvirt-python-1.2.6/libvirt-override.c 2014-06-30 08:25:00.000000000 +0200
@@ -6085,7 +6085,7 @@
static int
libvirt_virConnectDomainEventBlockJobCallback(virConnectPtr conn ATTRIBUTE_UNUSED,
virDomainPtr dom,
- const char *path,
+ const char *disk,
int type,
int status,
void *opaque)
@@ -6114,9 +6114,9 @@
/* Call the Callback Dispatcher */
pyobj_ret = PyObject_CallMethod(pyobj_conn,
- (char*)"_dispatchDomainEventBlockPullCallback",
+ (char*)"_dispatchDomainEventBlockJobCallback",
(char*)"OsiiO",
- pyobj_dom, path, type, status, pyobj_cbData);
+ pyobj_dom, disk, type, status, pyobj_cbData);
Py_DECREF(pyobj_cbData);
Py_DECREF(pyobj_dom);
@@ -6506,6 +6506,7 @@
}
#endif /* LIBVIR_CHECK_VERSION(1, 1, 1) */
+
static PyObject *
libvirt_virConnectDomainEventRegisterAny(ATTRIBUTE_UNUSED PyObject *self,
PyObject *args)
@@ -6561,6 +6562,9 @@
cb = VIR_DOMAIN_EVENT_CALLBACK(libvirt_virConnectDomainEventGenericCallback);
break;
case VIR_DOMAIN_EVENT_ID_BLOCK_JOB:
+#if LIBVIR_CHECK_VERSION(1, 2, 6)
+ case VIR_DOMAIN_EVENT_ID_BLOCK_JOB_2:
+#endif /* LIBVIR_CHECK_VERSION(1, 2, 6) */
cb = VIR_DOMAIN_EVENT_CALLBACK(libvirt_virConnectDomainEventBlockJobCallback);
break;
case VIR_DOMAIN_EVENT_ID_DISK_CHANGE:
@@ -7760,6 +7764,197 @@
}
#endif /* LIBVIR_CHECK_VERSION(1, 2, 5) */
+
+#if LIBVIR_CHECK_VERSION(1, 2, 6)
+static PyObject *
+libvirt_virNodeGetFreePages(PyObject *self ATTRIBUTE_UNUSED,
+ PyObject *args) {
+ PyObject *py_retval = NULL;
+ PyObject *pyobj_conn;
+ PyObject *pyobj_pagesize;
+ PyObject *pyobj_counts = NULL;
+ virConnectPtr conn;
+ unsigned int *pages = NULL;
+ int startCell;
+ unsigned int cellCount;
+ unsigned int flags;
+ unsigned long long *counts = NULL;
+ int c_retval;
+ ssize_t pyobj_pagesize_size, i, j;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOiii:virNodeGetFreePages",
+ &pyobj_conn, &pyobj_pagesize, &startCell,
+ &cellCount, &flags))
+ return NULL;
+
+ if (!PyList_Check(pyobj_pagesize)) {
+ PyErr_Format(PyExc_TypeError, "pagesize must be list");
+ return NULL;
+ }
+
+ if (cellCount == 0) {
+ PyErr_Format(PyExc_LookupError, "cellCount must not be zero");
+ return NULL;
+ }
+
+ conn = (virConnectPtr) PyvirConnect_Get(pyobj_conn);
+
+ pyobj_pagesize_size = PyList_Size(pyobj_pagesize);
+ if (VIR_ALLOC_N(pages, pyobj_pagesize_size) < 0 ||
+ VIR_ALLOC_N(counts, pyobj_pagesize_size * cellCount) < 0 ||
+ !(pyobj_counts = PyDict_New()))
+ goto cleanup;
+
+ for (i = 0; i < pyobj_pagesize_size; i++) {
+ PyObject *tmp = PyList_GetItem(pyobj_pagesize, i);
+
+ if (libvirt_uintUnwrap(tmp, &pages[i]) < 0)
+ goto cleanup;
+ }
+
+ LIBVIRT_BEGIN_ALLOW_THREADS;
+ c_retval = virNodeGetFreePages(conn,
+ pyobj_pagesize_size, pages,
+ startCell, cellCount,
+ counts, flags);
+ LIBVIRT_END_ALLOW_THREADS;
+
+ if (c_retval < 0) {
+ py_retval = VIR_PY_NONE;
+ goto cleanup;
+ }
+
+ for (i = 0; i < c_retval;) {
+ PyObject *per_node = NULL;
+ PyObject *node = NULL;
+
+ if (!(per_node = PyDict_New()) ||
+ !(node = libvirt_intWrap(startCell + i/pyobj_pagesize_size))) {
+ Py_XDECREF(per_node);
+ Py_XDECREF(node);
+ goto cleanup;
+ }
+
+ for (j = 0; j < pyobj_pagesize_size; j ++) {
+ PyObject *page = NULL;
+ PyObject *count = NULL;
+
+ if (!(page = libvirt_intWrap(pages[j])) ||
+ !(count = libvirt_intWrap(counts[i + j])) ||
+ PyDict_SetItem(per_node, page, count) < 0) {
+ Py_XDECREF(page);
+ Py_XDECREF(count);
+ Py_XDECREF(per_node);
+ Py_XDECREF(node);
+ goto cleanup;
+ }
+ }
+ i += pyobj_pagesize_size;
+
+ if (PyDict_SetItem(pyobj_counts, node, per_node) < 0) {
+ Py_XDECREF(per_node);
+ Py_XDECREF(node);
+ goto cleanup;
+ }
+ }
+
+ py_retval = pyobj_counts;
+ pyobj_counts = NULL;
+ cleanup:
+ Py_XDECREF(pyobj_counts);
+ VIR_FREE(pages);
+ VIR_FREE(counts);
+ return py_retval;
+}
+
+
+static PyObject *
+libvirt_virNetworkGetDHCPLeases(PyObject *self ATTRIBUTE_UNUSED,
+ PyObject *args)
+{
+ PyObject *py_retval = NULL;
+ PyObject *py_lease = NULL;
+ virNetworkPtr network;
+ PyObject *pyobj_network;
+ unsigned int flags;
+ virNetworkDHCPLeasePtr *leases = NULL;
+ int leases_count;
+ char *mac = NULL;
+ size_t i;
+
+ if (!PyArg_ParseTuple(args, (char *) "Ozi:virNetworkDHCPLeasePtr",
+ &pyobj_network, &mac, &flags))
+ return NULL;
+
+ network = (virNetworkPtr) PyvirNetwork_Get(pyobj_network);
+
+ LIBVIRT_BEGIN_ALLOW_THREADS;
+ leases_count = virNetworkGetDHCPLeases(network, mac, &leases, flags);
+ LIBVIRT_END_ALLOW_THREADS;
+
+ if (leases_count < 0) {
+ py_retval = VIR_PY_NONE;
+ goto cleanup;
+ }
+
+ if (!(py_retval = PyList_New(leases_count)))
+ goto no_memory;
+
+ for (i = 0; i < leases_count; i++) {
+ virNetworkDHCPLeasePtr lease = leases[i];
+
+ if ((py_lease = PyDict_New()) == NULL)
+ goto no_memory;
+
+#define VIR_SET_LEASE_ITEM(NAME, VALUE_OBJ_FUNC) \
+ do { \
+ PyObject *tmp_val; \
+ \
+ if (!(tmp_val = VALUE_OBJ_FUNC)) \
+ goto no_memory; \
+ \
+ if (PyDict_SetItemString(py_lease, NAME, tmp_val) < 0) { \
+ Py_DECREF(tmp_val); \
+ goto no_memory; \
+ } \
+ } while (0)
+
+ VIR_SET_LEASE_ITEM("iface", libvirt_charPtrWrap(lease->iface));
+ VIR_SET_LEASE_ITEM("expirytime", libvirt_longlongWrap(lease->expirytime));
+ VIR_SET_LEASE_ITEM("type", libvirt_intWrap(lease->type));
+ VIR_SET_LEASE_ITEM("mac", libvirt_charPtrWrap(lease->mac));
+ VIR_SET_LEASE_ITEM("ipaddr", libvirt_charPtrWrap(lease->ipaddr));
+ VIR_SET_LEASE_ITEM("prefix", libvirt_uintWrap(lease->prefix));
+ VIR_SET_LEASE_ITEM("hostname", libvirt_charPtrWrap(lease->hostname));
+ VIR_SET_LEASE_ITEM("clientid", libvirt_charPtrWrap(lease->clientid));
+ VIR_SET_LEASE_ITEM("iaid", libvirt_charPtrWrap(lease->iaid));
+
+#undef VIR_SET_LEASE_ITEM
+
+ if (PyList_SetItem(py_retval, i, py_lease) < 0)
+ goto no_memory;
+
+ py_lease = NULL;
+ }
+
+ cleanup:
+ Py_XDECREF(py_lease);
+ if (leases) {
+ for (i = 0; i < leases_count; i++)
+ virNetworkDHCPLeaseFree(leases[i]);
+ }
+ VIR_FREE(leases);
+
+ return py_retval;
+
+ no_memory:
+ Py_XDECREF(py_retval);
+ py_retval = PyErr_NoMemory();
+ goto cleanup;
+}
+
+#endif /* LIBVIR_CHECK_VERSION(1, 2, 6) */
+
/************************************************************************
* *
* The registration stuff *
@@ -7941,6 +8136,10 @@
{(char *) "virDomainGetTime", libvirt_virDomainGetTime, METH_VARARGS, NULL},
{(char *) "virDomainSetTime", libvirt_virDomainSetTime, METH_VARARGS, NULL},
#endif /* LIBVIR_CHECK_VERSION(1, 2, 5) */
+#if LIBVIR_CHECK_VERSION(1, 2, 6)
+ {(char *) "virNodeGetFreePages", libvirt_virNodeGetFreePages, METH_VARARGS, NULL},
+ {(char *) "virNetworkGetDHCPLeases", libvirt_virNetworkGetDHCPLeases, METH_VARARGS, NULL},
+#endif /* LIBVIR_CHECK_VERSION(1, 2, 6) */
{NULL, NULL, 0, NULL}
};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libvirt-python-1.2.5/libvirt-python.spec new/libvirt-python-1.2.6/libvirt-python.spec
--- old/libvirt-python-1.2.5/libvirt-python.spec 2014-06-02 03:55:34.000000000 +0200
+++ new/libvirt-python-1.2.6/libvirt-python.spec 2014-07-02 08:12:22.000000000 +0200
@@ -6,7 +6,7 @@
Summary: The libvirt virtualization API python2 binding
Name: libvirt-python
-Version: 1.2.5
+Version: 1.2.6
Release: 1%{?dist}%{?extra_release}
Source0: http://libvirt.org/sources/python/%{name}-%{version}.tar.gz
Url: http://libvirt.org
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libvirt-python-1.2.5/sanitytest.py new/libvirt-python-1.2.6/sanitytest.py
--- old/libvirt-python-1.2.5/sanitytest.py 2014-06-02 03:54:49.000000000 +0200
+++ new/libvirt-python-1.2.6/sanitytest.py 2014-06-30 08:25:00.000000000 +0200
@@ -78,6 +78,9 @@
if name[0:14] == "virTypedParams":
continue
+ if name[0:23] == "virNetworkDHCPLeaseFree":
+ continue
+
# These aren't functions, they're callback signatures
if name in ["virConnectAuthCallbackPtr", "virConnectCloseFunc",
"virStreamSinkFunc", "virStreamSourceFunc", "virStreamEventCallback",
@@ -210,6 +213,9 @@
if func[0:8] == "fSFreeze" or func[0:6] == "fSThaw":
func = "fs" + func[2:]
+ if klass == "virNetwork":
+ func = func.replace("dHCP", "DHCP")
+
# ...except when they don't. More stupid naming
# decisions we can't fix
if func == "iD":
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libvirt-python-1.2.5/setup.py new/libvirt-python-1.2.6/setup.py
--- old/libvirt-python-1.2.5/setup.py 2014-06-02 03:54:49.000000000 +0200
+++ new/libvirt-python-1.2.6/setup.py 2014-06-30 08:25:00.000000000 +0200
@@ -309,7 +309,7 @@
_c_modules, _py_modules = get_module_lists()
setup(name = 'libvirt-python',
- version = '1.2.5',
+ version = '1.2.6',
url = 'http://www.libvirt.org',
maintainer = 'Libvirt Maintainers',
maintainer_email = 'libvir-list@redhat.com',
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org