Control: tags 997719 + patch
Control: tags 997719 + pending

Dear maintainer,

I've prepared an NMU for libvirt-python (versioned as 7.9.0-0.1) and
uploaded it to DELAYED/5. Please feel free to tell me if I
should delay it longer.

Regards.

SR
diff -Nru libvirt-python-7.0.0/AUTHORS libvirt-python-7.9.0/AUTHORS
--- libvirt-python-7.0.0/AUTHORS	2021-01-15 04:52:56.818376800 -0400
+++ libvirt-python-7.9.0/AUTHORS	2021-11-01 08:22:58.888680200 -0400
@@ -12,6 +12,7 @@
    Adam Litke <a...@us.ibm.com>
    Alex Jia <a...@redhat.com>
    Andrea Bolognani <abolo...@redhat.com>
+   Beraldo Leal <bl...@redhat.com>
    Boris Fiuczynski <fiu...@linux.vnet.ibm.com>
    Brian Rak <b...@gameservers.com>
    Chris Lalancette <clala...@redhat.com>
@@ -41,6 +42,7 @@
    Jim Meyering <meyer...@redhat.com>
    Jiri Denemark <jdene...@redhat.com>
    John Ferlan <jfer...@redhat.com>
+   Jonathon Jongsma <jjong...@redhat.com>
    Jovanka Gulicoska <jovanka.gulico...@gmail.com>
    Ján Tomko <jto...@redhat.com>
    KAMEZAWA Hiroyuki <kamezawa.hir...@jp.fujitsu.com>
@@ -75,6 +77,7 @@
    Pradipta Kr. Banerjee <pradipta.baner...@gmail.com>
    Qiaowei Ren <qiaowei....@intel.com>
    Radostin Stoyanov <rstoya...@fedoraproject.org>
+   renlei4 <ren.l...@zte.com.cn>
    Richard W.M. Jones <rjo...@redhat.com>
    Robie Basak <robie.ba...@canonical.com>
    Serge E. Hallyn <serge.hal...@canonical.com>
@@ -87,6 +90,7 @@
    Victor Stinner <victor.stin...@gmail.com>
    Viktor Mihajlovski <mihaj...@linux.vnet.ibm.com>
    Vincent Vanlaer <vincent.vanl...@skynet.be>
+   w00506750 <hogan.w...@huawei.com>
    Wojtek Porczyk <w...@invisiblethingslab.com>
    Wu Zongyong <wuzon...@mail.ustc.edu.cn>
    Xavier Fernandez <xav.fernan...@gmail.com>
diff -Nru libvirt-python-7.0.0/ChangeLog libvirt-python-7.9.0/ChangeLog
--- libvirt-python-7.0.0/ChangeLog	2021-01-15 04:52:56.868377000 -0400
+++ libvirt-python-7.9.0/ChangeLog	2021-11-01 08:22:58.915347000 -0400
@@ -1,3 +1,364 @@
+2021-10-08 Daniel P. Berrangé  <berra...@redhat.com>
+    
+    Add support for domain event for memory device size change
+    
+    
+2021-10-01 Jiri Denemark  <jdene...@redhat.com>
+    
+    Post-release version bump to 7.9.0
+    
+    
+2021-09-24 Michal Privoznik  <mpriv...@redhat.com>
+    
+    sanitytest: Add virNetworkCreateXMLFlags() to list of name fixups
+    When checking whether each C API is exported to Python and vice
+    versa the sanitytest script is doing some name fixing. For
+    instance virNetworkCreateXML() is translated into
+    virConnect.networkCreateXML(). However, we have new C API on the
+    way: virNetworkCreateXMLFlags() which is not on the list for
+    these name fixups. Add it there.
+    
+    Mind you, the python code generator works just fine because
+    generator.py:1082 compares just the prefix.
+    
+    
+    
+2021-09-21 Jonathon Jongsma  <jjong...@redhat.com>
+    
+    Don't mention email patch submission in README
+    Since patches are now submitted via gitlab merge requests, don't mention
+    mailing list patch submission in the README. Point to the CONTRIBUTING
+    file instead.
+    
+    
+    
+2021-09-21 Jonathon Jongsma  <jjong...@redhat.com>
+    
+    Update readme to mention pytest instead of nose
+    Commit a376a2ab switch from python-nose to python-pytest for tests, but
+    the README was not updated.
+    
+    
+    
+2021-09-21 Jonathon Jongsma  <jjong...@redhat.com>
+    
+    Add new autostart API for node devices
+    Provide a manual override for the virNodeDeviceGetAutostart() API
+    modeled on what's done for the network and storage APIs.
+    
+    
+    
+2021-09-02 Daniel P. Berrangé  <berra...@redhat.com>
+    
+    ci: remove obsolete refresh script and documentation
+    We now use lcitool's manifest feature to generate files.
+    
+    
+    
+2021-09-02 Daniel P. Berrangé  <berra...@redhat.com>
+    
+    ci: re-generate containers/gitlab config from manifest
+    This uses the command "lcitool manifest ci/manifest.yml" to re-generate
+    all existing dockerfiles and gitlab CI config.
+    
+    
+    
+2021-09-02 Daniel P. Berrangé  <berra...@redhat.com>
+    
+    ci: define a CI manifest file
+    This is to be used with the command "lcitool manifest ci/manifest.yml"
+    to re-generate all existing dockerfiles and gitlab CI config.
+    
+    
+    
+2021-09-01 Daniel P. Berrangé  <berra...@redhat.com>
+    
+    rpm: drop support for RHEL-7
+    We no longer support libvirt on this distro
+    
+    
+    
+2021-09-01 Jiri Denemark  <jdene...@redhat.com>
+    
+    Post-release version bump to 7.8.0
+    
+    
+2021-08-02 Jiri Denemark  <jdene...@redhat.com>
+    
+    Post-release version bump to 7.7.0
+    
+    
+2021-07-27 Daniel P. Berrangé  <berra...@redhat.com>
+    
+    gitlab: use custom docker:dind image
+    The current docker:dind container has broken default seccomp filter that
+    results in clone3 being blocked, which in turn breaks Fedora 35 rawhide.
+    
+    This custom image has a workaround that causes the seccomp filter to
+    return ENOSYS for clone3 instad of EPERM, thus triggering glibc to
+    fallback to clone correctly.
+    
+    
+    
+2021-07-01 Jiri Denemark  <jdene...@redhat.com>
+    
+    Post-release version bump to 7.6.0
+    
+    
+2021-06-25 Peter Krempa  <pkre...@redhat.com>
+    
+    Fix BlockThreshold Callback argument conversion once more
+    The conversion was changed from "OssiiO" to "OssLLO". Unfortunately the
+    arguments are unsigned long long, where the proper coversion character
+    is 'K'.
+    
+    Fixes: https://gitlab.com/libvirt/libvirt-python/-/merge_requests/40
+    Fixes: fd069ac85c8cf1593587dc9287a3d5eb6bd4bdb9
+    Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1976109
+    
+    
+2021-06-01 Jiri Denemark  <jdene...@redhat.com>
+    
+    Post-release version bump to 7.5.0
+    
+    
+2021-05-27 w00506750  <hogan.w...@huawei.com>
+    
+    iothread: fix memory access out of bounds
+    When the 'pcpu' is larger then the last 'iothr->cpumap' bits,
+    set the list element to False to avoid out of bounds access
+    'iothr->cpumap'.
+    
+    Reviewed-by: Hogan Wang <hogan.w...@huawei.com>
+    
+    
+2021-05-27 Jiri Denemark  <jdene...@redhat.com>
+    
+    Post-release version bump to 7.4.0
+    
+    
+2021-05-25 Daniel P. Berrangé  <berra...@redhat.com>
+    
+    containers: refresh containers with latest libvirt-ci
+    
+    
+2021-05-25 Daniel P. Berrangé  <berra...@redhat.com>
+    
+    gitlab: don't set RPM variable on container job
+    
+    
+2021-05-25 Daniel P. Berrangé  <berra...@redhat.com>
+    
+    gitlab: add OpenSUSE Tumbleweed container and build
+    
+    
+2021-05-25 Daniel P. Berrangé  <berra...@redhat.com>
+    
+    gitlab: introduce Fedora 34 container and build
+    
+    
+2021-05-25 Daniel P. Berrangé  <berra...@redhat.com>
+    
+    gitlab: rename opensuse-152 to opensuse-leap-152
+    
+    
+2021-05-25 Daniel P. Berrangé  <berra...@redhat.com>
+    
+    gitlab: rename centos-stream to centos-stream-8
+    
+    
+2021-05-25 Daniel P. Berrangé  <berra...@redhat.com>
+    
+    gitlab: drop Fedora 32 container and build
+    
+    
+2021-05-25 Daniel P. Berrangé  <berra...@redhat.com>
+    
+    gitlab: drop centos-7 container and build
+    
+    
+2021-04-15 Michal Privoznik  <mpriv...@redhat.com>
+    
+    generator.py: Untangle virNodeDevice name fixup
+    The way that virNodeDevice method name fixup is written makes it
+    hard to find via grep (matching the virNodeDevice prefix and then
+    matching only the operation like "Get", "Lookup", ...). Expand
+    the string matching to match the pattern of other cases.
+    
+    
+    
+2021-04-15 Michal Privoznik  <mpriv...@redhat.com>
+    
+    generator.py: Fix method names for new virNodeDevice*() APIs
+    In the 7.3.0 release we are going to have three new public APIs:
+    
+    virNodeDeviceDefineXML()
+    virNodeDeviceUndefine()
+    virNodeDeviceCreate()
+    
+    The first one is slightly problematic, because it takes
+    virConnectPtr argument and thus our generator wants to put its
+    wrapper under virConnect python class, which is correct, but
+    what's incorrect is the name it chooses for the method:
+    defineXML(). Such method already exists and wraps
+    virDomainDefineXML() around. Also, the name is rather confusing
+    anyway - it's missing the 'nodeDevice' prefix.
+    
+    Fortunately, the fix is easy - add another case into nameFixup().
+    
+    The story with virNodeDeviceCreate() is similar. Except, this time
+    the class in which the method was put is correct. But the name is
+    still wrong, because our generator matched 'virNodeDeviceCreate'
+    thinking it's the good old virNodeDeviceCreateXML() API and
+    "fixed" the name of the method to nodeDeviceCreate().
+    
+    Luckily, virNodeDeviceUndefine() is just fine.
+    
+    
+    
+2021-04-12 Ján Tomko  <jto...@redhat.com>
+    
+    spec: use pytest instead of nose
+    
+    
+2021-04-12 Daniel P. Berrangé  <berra...@redhat.com>
+    
+    rpm: use HTTPS for URLs
+    
+    
+2021-04-09 Daniel P. Berrangé  <berra...@redhat.com>
+    
+    Don't run sanity checks by default
+    The sanity check scripts verify that the binding covers all APIs in the
+    libvirt library/headers being built against. This is primarily there for
+    libvirt maintainers to identify when there are gaps in API coverage.
+    
+    This is not something downstream consumers of libvirt-python should be
+    running themselves, so we shouldn't added it to tests by default.
+    
+    In addition if people are working on branches or submitting merge
+    requests for python changes, we shouldn't block their work for failed
+    API coverage sanity tests, if the python binding otherwise builds fine
+    and passes regular unit tests.
+    
+    Thus, we introduce a new gitlab job "api-coverage" with some conditions:
+    
+    - If pushing to a branch, the job is treated as non-fatal
+    - For regular scheduled builds, it is mandatory
+    - Don't run in any other scenarios
+    
+    This job uses the artifacts from the centos-8-git-build job and re-runs
+    the test suite, requesting the sanity tests to be run too.
+    
+    This will achieve the result of letting us see missing API coverage
+    in nightly builds, without blocking other contributions.
+    
+    
+    
+2021-04-07 Ján Tomko  <jto...@redhat.com>
+    
+    tests: use assertEqual instead of assertEquals
+    tests/test_conn.py:17: DeprecationWarning: Please use assertEqual instead.
+    
+    
+    
+2021-04-07 Ján Tomko  <jto...@redhat.com>
+    
+    ci: refresh containers for nose->pytest switch
+    Matches libvirt-ci commit facd5d855c97bf5b127ff9bf245c8fdf514dd916
+    
+    
+    
+2021-04-07 Ján Tomko  <jto...@redhat.com>
+    
+    setup: use pytest instead of nose to run the test suite
+    The software we use for running tests - nose - has been
+    deprecated in favor of nose2.
+    
+    We don't use anything nose-specific, just unittest.TestCase,
+    which pytest can handle just fine.
+    
+    Switch to using pytest, which we already use for libvirt-dbus.
+    
+    
+    
+2021-04-07 Ján Tomko  <jto...@redhat.com>
+    
+    setup: drop have_libvirtaio
+    This function says we have libvirtaio on Python >= 3.3,
+    however we already mandate Python >= 3.5 at the start of the file.
+    
+    
+    
+2021-04-07 Andrea Bolognani  <abolo...@redhat.com>
+    
+    ci: Move dco job to sanity_checks stage
+    If the DCO check fails we still want the pipeline to fail, but
+    that doesn't mean there's no value in running the other jobs to
+    get a better picture.
+    
+    
+    
+2021-04-07 Andrea Bolognani  <abolo...@redhat.com>
+    
+    ci: Use 'extends' GitLab CI feature
+    This is the recommended way to use templates in job
+    definitions.
+    
+    
+    
+2021-04-06 Ján Tomko  <jto...@redhat.com>
+    
+    ci: drop openSUSE leap 15.1 in favor of 15.2
+    
+    
+2021-04-06 Ján Tomko  <jto...@redhat.com>
+    
+    ci: refresh dockerfiles
+    Refresh to match libvirt-ci commit 94c25bde639eb31ff2071fb6abfd3d5c777f4ab2
+    
+    
+    
+2021-04-01 Jiri Denemark  <jdene...@redhat.com>
+    
+    Post-release version bump to 7.3.0
+    
+    
+2021-03-01 Jiri Denemark  <jdene...@redhat.com>
+    
+    Post-release version bump to 7.2.0
+    
+    
+2021-03-01 renlei4  <ren.l...@zte.com.cn>
+    
+    Fix wrong type for BlockThreshold Callback
+    type of threshold and excess are unsigned long long,
+    but PyObject_CallMethod incorrectly set it to int.
+    
+    if threshold or excess greater than 0x7FFFFFFF(max int),
+    those variables will overflow.
+    
+    
+    
+2021-02-15 Daniel P. Berrangé  <berra...@redhat.com>
+    
+    Add impl override for virDomainGetMessages
+    
+    
+2021-02-09 Beraldo Leal  <bl...@redhat.com>
+    
+    improving readme with requirements
+    When installing this library in a fresh system, some basic packages are
+    necessary to compile and run. This patch will add basic instructions
+    with some requirements to help new contributors and users.
+    
+    
+    
+2021-01-15 Jiri Denemark  <jdene...@redhat.com>
+    
+    Post-release version bump to 7.1.0
+    
+    
 2020-12-15 Daniel P. Berrangé  <berra...@redhat.com>
     
     ci: refresh containers for CentOS-8 PowerTools repo rename
diff -Nru libvirt-python-7.0.0/debian/changelog libvirt-python-7.9.0/debian/changelog
--- libvirt-python-7.0.0/debian/changelog	2021-02-18 03:45:20.000000000 -0400
+++ libvirt-python-7.9.0/debian/changelog	2021-11-24 20:02:38.000000000 -0400
@@ -1,3 +1,11 @@
+libvirt-python (7.9.0-0.1) unstable; urgency=medium
+
+  * Non-maintainer upload.
+  * New upstream release
+    (Closes: #997719)
+
+ -- Stefano Rivera <stefa...@debian.org>  Wed, 24 Nov 2021 20:02:38 -0400
+
 libvirt-python (7.0.0-2) unstable; urgency=medium
 
   * Upload to unstable 
diff -Nru libvirt-python-7.0.0/examples/event-test.py libvirt-python-7.9.0/examples/event-test.py
--- libvirt-python-7.0.0/examples/event-test.py	2020-12-01 04:54:25.366521600 -0400
+++ libvirt-python-7.9.0/examples/event-test.py	2021-11-01 08:22:56.095336200 -0400
@@ -640,6 +640,10 @@
     print("myDomainEventMemoryFailureCallback: Domain %s(%s) memory failure recipient %d action %d flags %d" % (
         dom.name(), dom.ID(), recipient, action, flags))
 
+def myDomainEventMemoryDeviceSizeChangeCallback(conn: libvirt.virConnect, dom: libvirt.virDomain, recipient: int, action: int, flags: int, opaque: _T) -> None:
+    print("myDomainEventMemoryDeviceSizeChangeCallback: Domain %s(%s) memory device size change alias %s size %d" % (
+        dom.name(), dom.ID(), alias, size))
+
 
 ##########################################################################
 # Network events
@@ -793,6 +797,7 @@
         vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_METADATA_CHANGE, myDomainEventMetadataChangeCallback, None),
         vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_BLOCK_THRESHOLD, myDomainEventBlockThresholdCallback, None),
         vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_MEMORY_FAILURE, myDomainEventMemoryFailureCallback, None),
+        vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_MEMORY_DEVICE_SIZE_CHANGE, myDomainEventMemoryDeviceSizeChangeCallback, None),
     ]
 
     netcallbacks = [
diff -Nru libvirt-python-7.0.0/generator.py libvirt-python-7.9.0/generator.py
--- libvirt-python-7.0.0/generator.py	2020-12-01 04:54:25.369855000 -0400
+++ libvirt-python-7.9.0/generator.py	2021-10-01 04:38:50.840980000 -0400
@@ -479,6 +479,8 @@
     'virDomainGetGuestInfo',
     'virDomainAuthorizedSSHKeysGet',
     'virDomainAuthorizedSSHKeysSet',
+    'virDomainGetMessages',
+    'virNodeDeviceGetAutostart',
 }
 
 lxc_skip_impl = {
@@ -1236,13 +1238,16 @@
     elif name[0:13] == "virStorageVol":
         func = name[13:]
         func = func[0:1].lower() + func[1:]
+    elif name[0:16] == "virNodeDeviceGet":
+        func = name[16].lower() + name[17:]
+    elif name[0:19] == "virNodeDeviceLookup":
+        func = name[3].lower() + name[4:]
+    elif name[0:22] == "virNodeDeviceCreateXML":
+        func = name[3].lower() + name[4:]
+    elif name[0:19] == "virNodeDeviceDefine":
+        func = name[3].lower() + name[4:]
     elif name[0:13] == "virNodeDevice":
-        if name[13:16] == "Get":
-            func = name[16].lower() + name[17:]
-        elif name[13:19] == "Lookup" or name[13:19] == "Create":
-            func = name[3].lower() + name[4:]
-        else:
-            func = name[13].lower() + name[14:]
+        func = name[13].lower() + name[14:]
     elif name[0:7] == "virNode":
         func = name[7:]
         func = func[0:1].lower() + func[1:]
diff -Nru libvirt-python-7.0.0/libvirt-override-api.xml libvirt-python-7.9.0/libvirt-override-api.xml
--- libvirt-python-7.0.0/libvirt-override-api.xml	2020-12-01 04:54:25.369855000 -0400
+++ libvirt-python-7.9.0/libvirt-override-api.xml	2021-10-01 04:38:50.840980000 -0400
@@ -194,6 +194,11 @@
       <return type='int' info='the autostart flag, or None in case of error'/>
       <arg name='pool' type='virStoragePoolPtr' info='a storage pool object'/>
     </function>
+    <function name='virNodeDeviceGetAutostart' file='python'>
+      <info>Extract the autostart flag for a node device.</info>
+      <return type='int' info='the autostart flag, or None in case of error'/>
+      <arg name='dev' type='virNodeDevicePtr' info='a node device object'/>
+    </function>
     <function name='virDomainBlockStats' file='python'>
       <info>Extracts block device statistics for a domain</info>
       <return type='char *' info='a tuple of statistics'/>
@@ -834,5 +839,11 @@
       <arg name='keys' type='char *' info='optional list of authorized keys to set/append/remove'/>
       <arg name='flags' type='int' info='optional OR&apos;ed set of virDomainAuthorizedSSHKeysSetFlags'/>
     </function>
+    <function name='virDomainGetMessages' file='python'>
+      <info>Fetch list of messages reported against domain.</info>
+      <return type='char *' info='list of messages'/>
+      <arg name='domain' type='virDomainPtr' info='a domain object'/>
+      <arg name='flags' type='unsigned int' info='optional fine-tuning flags'/>
+    </function>
   </symbols>
 </api>
diff -Nru libvirt-python-7.0.0/libvirt-override.c libvirt-python-7.9.0/libvirt-override.c
--- libvirt-python-7.0.0/libvirt-override.c	2021-01-15 04:52:53.748373000 -0400
+++ libvirt-python-7.9.0/libvirt-override.c	2021-11-01 08:22:56.095336200 -0400
@@ -1625,10 +1625,14 @@
         VIR_PY_TUPLE_SET_GOTO(iothrtpl, 1, iothrmap, cleanup);
 
         for (pcpu = 0; pcpu < cpunum; pcpu++)
-            VIR_PY_LIST_SET_GOTO(iothrmap, pcpu,
-                                 PyBool_FromLong(VIR_CPU_USED(iothr->cpumap,
-                                                              pcpu)),
-                                 cleanup);
+            if (VIR_CPU_MAPLEN(pcpu + 1) > iothr->cpumaplen) {
+                VIR_PY_LIST_SET_GOTO(iothrmap, pcpu, PyBool_FromLong(0), cleanup);
+            } else {
+                VIR_PY_LIST_SET_GOTO(iothrmap, pcpu,
+                                     PyBool_FromLong(VIR_CPU_USED(iothr->cpumap,
+                                                                  pcpu)),
+                                     cleanup);
+            }
     }
 
     py_retval = py_iothrinfo;
@@ -3351,6 +3355,32 @@
     return libvirt_intWrap(autostart);
 }
 
+#if LIBVIR_CHECK_VERSION(7, 8, 0)
+static PyObject *
+libvirt_virNodeDeviceGetAutostart(PyObject *self ATTRIBUTE_UNUSED,
+                                  PyObject *args)
+{
+    int c_retval, autostart;
+    virNodeDevicePtr dev;
+    PyObject *pyobj_dev;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:virNodeDeviceGetAutostart",
+                          &pyobj_dev))
+        return NULL;
+
+    dev = (virNodeDevicePtr) PyvirNodeDevice_Get(pyobj_dev);
+
+    LIBVIRT_BEGIN_ALLOW_THREADS;
+    c_retval = virNodeDeviceGetAutostart(dev, &autostart);
+    LIBVIRT_END_ALLOW_THREADS;
+
+    if (c_retval < 0)
+        return VIR_PY_INT_FAIL;
+
+    return libvirt_intWrap(autostart);
+}
+#endif /* LIBVIR_CHECK_VERSION(7, 8, 0) */
+
 static PyObject *
 libvirt_virNodeGetCellsFreeMemory(PyObject *self ATTRIBUTE_UNUSED,
                                   PyObject *args)
@@ -7232,7 +7262,7 @@
     /* Call the Callback Dispatcher */
     pyobj_ret = PyObject_CallMethod(pyobj_conn,
                                     (char*)"_dispatchDomainEventBlockThresholdCallback",
-                                    (char*)"OssiiO",
+                                    (char*)"OssKKO",
                                     pyobj_dom, dev, path, threshold, excess,
                                     pyobj_cbData);
 
@@ -7310,6 +7340,61 @@
 #endif /* VIR_DOMAIN_EVENT_ID_MEMORY_FAILURE */
 
 
+#ifdef VIR_DOMAIN_EVENT_ID_MEMORY_DEVICE_SIZE_CHANGE
+static int
+libvirt_virConnectDomainEventMemoryDeviceSizeChangeCallback(virConnectPtr conn ATTRIBUTE_UNUSED,
+                                                            virDomainPtr dom,
+                                                            const char *alias,
+                                                            unsigned long long size,
+                                                            void *opaque)
+{
+    PyObject *pyobj_cbData = (PyObject*)opaque;
+    PyObject *pyobj_dom;
+    PyObject *pyobj_ret = NULL;
+    PyObject *pyobj_conn;
+    PyObject *dictKey;
+    int ret = -1;
+
+    LIBVIRT_ENSURE_THREAD_STATE;
+
+    if (!(dictKey = libvirt_constcharPtrWrap("conn")))
+        goto cleanup;
+    pyobj_conn = PyDict_GetItem(pyobj_cbData, dictKey);
+    Py_DECREF(dictKey);
+
+    /* Create a python instance of this virDomainPtr */
+    virDomainRef(dom);
+    if (!(pyobj_dom = libvirt_virDomainPtrWrap(dom))) {
+        virDomainFree(dom);
+        goto cleanup;
+    }
+    Py_INCREF(pyobj_cbData);
+
+    /* Call the Callback Dispatcher */
+    pyobj_ret = PyObject_CallMethod(pyobj_conn,
+                                    (char*)"_dispatchDomainEventMemoryDeviceSizeChangeCallback",
+                                    (char*)"OsKO",
+                                    pyobj_dom, alias, size,
+                                    pyobj_cbData);
+
+    Py_DECREF(pyobj_cbData);
+    Py_DECREF(pyobj_dom);
+
+ cleanup:
+    if (!pyobj_ret) {
+        DEBUG("%s - ret:%p\n", __FUNCTION__, pyobj_ret);
+        PyErr_Print();
+    } else {
+        Py_DECREF(pyobj_ret);
+        ret = 0;
+    }
+
+    LIBVIRT_RELEASE_THREAD_STATE;
+    return ret;
+}
+#endif /* VIR_DOMAIN_EVENT_ID_MEMORY_DEVICE_SIZE_CHANGE */
+
+
 static PyObject *
 libvirt_virConnectDomainEventRegisterAny(PyObject *self ATTRIBUTE_UNUSED,
                                          PyObject *args)
@@ -7440,6 +7525,11 @@
         cb = VIR_DOMAIN_EVENT_CALLBACK(libvirt_virConnectDomainEventMemoryFailureCallback);
         break;
 #endif /* VIR_DOMAIN_EVENT_ID_MEMORY_FAILURE */
+#ifdef VIR_DOMAIN_EVENT_ID_MEMORY_DEVICE_SIZE_CHANGE
+    case VIR_DOMAIN_EVENT_ID_MEMORY_DEVICE_SIZE_CHANGE:
+        cb = VIR_DOMAIN_EVENT_CALLBACK(libvirt_virConnectDomainEventMemoryDeviceSizeChangeCallback);
+        break;
+#endif /* VIR_DOMAIN_EVENT_ID_MEMORY_DEVICE_SIZE_CHANGE */
     case VIR_DOMAIN_EVENT_ID_LAST:
         break;
     }
@@ -10514,6 +10604,49 @@
 }
 #endif /* LIBVIR_CHECK_VERSION(6, 10, 0) */
 
+#if LIBVIR_CHECK_VERSION(7, 1, 0)
+static PyObject *
+libvirt_virDomainGetMessages(PyObject *self ATTRIBUTE_UNUSED,
+                             PyObject *args)
+{
+    PyObject *pyobj_dom = NULL;
+    virDomainPtr dom = NULL;
+    char **msgs = NULL;
+    int nmsgs;
+    int i;
+    unsigned int flags;
+    PyObject *ret = NULL;
+
+    if (!PyArg_ParseTuple(args, (char *)"OI:virDomainGetMessages",
+                          &pyobj_dom, &flags))
+        return NULL;
+    dom = (virDomainPtr) PyvirDomain_Get(pyobj_dom);
+
+    LIBVIRT_BEGIN_ALLOW_THREADS;
+    nmsgs = virDomainGetMessages(dom, &msgs, flags);
+    LIBVIRT_END_ALLOW_THREADS;
+
+    if (nmsgs < 0)
+        return VIR_PY_NONE;
+
+    if ((ret = PyList_New(nmsgs)) == NULL)
+        goto error;
+
+    for (i = 0; i < nmsgs; i++)
+        VIR_PY_LIST_SET_GOTO(ret, i, libvirt_constcharPtrWrap(msgs[i]), error);
+
+ done:
+    for (i = 0; i < nmsgs; i++)
+        VIR_FREE(msgs[i]);
+    VIR_FREE(msgs);
+    return ret;
+
+ error:
+    Py_CLEAR(ret);
+    goto done;
+}
+#endif /* LIBVIR_CHECK_VERSION(7, 1, 0) */
+
 
 /************************************************************************
  *									*
@@ -10783,6 +10916,12 @@
     {(char *) "virDomainAuthorizedSSHKeysGet", libvirt_virDomainAuthorizedSSHKeysGet, METH_VARARGS, NULL},
     {(char *) "virDomainAuthorizedSSHKeysSet", libvirt_virDomainAuthorizedSSHKeysSet, METH_VARARGS, NULL},
 #endif /* LIBVIR_CHECK_VERSION(6, 10, 0) */
+#if LIBVIR_CHECK_VERSION(7, 1, 0)
+    {(char *) "virDomainGetMessages", libvirt_virDomainGetMessages, METH_VARARGS, NULL},
+#endif /* LIBVIR_CHECK_VERSION(7, 1, 0) */
+#if LIBVIR_CHECK_VERSION(7, 8, 0)
+    {(char *) "virNodeDeviceGetAutostart", libvirt_virNodeDeviceGetAutostart, METH_VARARGS, NULL},
+#endif /* LIBVIR_CHECK_VERSION(7, 8, 0) */
     {NULL, NULL, 0, NULL}
 };
 
diff -Nru libvirt-python-7.0.0/libvirt-override-virConnect.py libvirt-python-7.9.0/libvirt-override-virConnect.py
--- libvirt-python-7.0.0/libvirt-override-virConnect.py	2020-12-01 04:54:25.369855000 -0400
+++ libvirt-python-7.9.0/libvirt-override-virConnect.py	2021-11-01 08:22:56.095336200 -0400
@@ -270,6 +270,15 @@
         cb(self, virDomain(self, _obj=dom), recipient, action, flags, opaque)
         return 0
 
+    def _dispatchDomainEventMemoryDeviceSizeChangeCallback(self, dom: 'virDomain', alias: str, size: int, cbData: Dict[str, Any]) -> int:
+        """Dispatches event to python user domain memory device size change event callbacks
+        """
+        cb = cbData["cb"]
+        opaque = cbData["opaque"]
+
+        cb(self, virDomain(self, _obj=dom), alias, size, opaque)
+        return 0
+
     def domainEventDeregisterAny(self, callbackID: int) -> None:
         """Removes a Domain Event Callback. De-registering for a
            domain callback will disable delivery of this event type """
diff -Nru libvirt-python-7.0.0/libvirt-python.spec libvirt-python-7.9.0/libvirt-python.spec
--- libvirt-python-7.0.0/libvirt-python.spec	2021-01-15 04:52:56.791710100 -0400
+++ libvirt-python-7.9.0/libvirt-python.spec	2021-11-01 08:22:58.858680000 -0400
@@ -3,8 +3,8 @@
 # This spec file assumes you are building on a Fedora or RHEL version
 # that's still supported by the vendor. It may work on other distros
 # or versions, but no effort will be made to ensure that going forward
-%define min_rhel 7
-%define min_fedora 29
+%define min_rhel 8
+%define min_fedora 33
 
 %if (0%{?fedora} && 0%{?fedora} >= %{min_fedora}) || (0%{?rhel} && 0%{?rhel} >= %{min_rhel})
     %define supported_platform 1
@@ -14,20 +14,15 @@
 
 Summary: The libvirt virtualization API python3 binding
 Name: libvirt-python
-Version: 7.0.0
+Version: 7.9.0
 Release: 1%{?dist}
-Source0: http://libvirt.org/sources/python/%{name}-%{version}.tar.gz
-Url: http://libvirt.org
+Source0: https://libvirt.org/sources/python/%{name}-%{version}.tar.gz
+Url: https://libvirt.org
 License: LGPLv2+
 BuildRequires: libvirt-devel == %{version}
 BuildRequires: python3-devel
-%if 0%{?rhel} == 7
-BuildRequires: python36-nose
-BuildRequires: python36-lxml
-%else
-BuildRequires: python3-nose
+BuildRequires: python3-pytest
 BuildRequires: python3-lxml
-%endif
 BuildRequires: gcc
 
 # Don't want provides for python shared objects
@@ -68,18 +63,10 @@
 exit 1
 %endif
 
-%if 0%{?fedora} || 0%{?rhel} >= 8
 %py3_build
-%else
-CFLAGS="$RPM_OPT_FLAGS" %{__python3} setup.py build
-%endif
 
 %install
-%if 0%{?fedora} || 0%{?rhel} >= 8
 %py3_install
-%else
-%{__python3} setup.py install --skip-build --root=%{buildroot}
-%endif
 
 %check
 %{__python3} setup.py test
diff -Nru libvirt-python-7.0.0/PKG-INFO libvirt-python-7.9.0/PKG-INFO
--- libvirt-python-7.0.0/PKG-INFO	2021-01-15 04:52:57.048377000 -0400
+++ libvirt-python-7.9.0/PKG-INFO	2021-11-01 08:22:59.015347500 -0400
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: libvirt-python
-Version: 7.0.0
+Version: 7.9.0
 Summary: The libvirt virtualization API python binding
 Home-page: http://www.libvirt.org
 Author: Libvirt Maintainers
diff -Nru libvirt-python-7.0.0/README libvirt-python-7.9.0/README
--- libvirt-python-7.0.0/README	2020-12-01 04:54:25.366521600 -0400
+++ libvirt-python-7.9.0/README	2021-10-01 04:38:50.840980000 -0400
@@ -1,5 +1,5 @@
-     Libvirt Python Binding README
-     =============================
+Libvirt Python Binding README
+=============================
 
 This package provides a python binding to the libvirt.so,
 libvirt-qemu.so and libvirt-lxc.so library APIs.
@@ -10,6 +10,15 @@
 This code is distributed under the terms of the LGPL version
 2 or later.
 
+Requirements
+------------
+
+To build the libvirt python binary requires the GCC and pkg-config
+tools, and development headers for the libvirt and python libraries.
+
+Building and installing
+-----------------------
+
 The module can be built by following the normal python module
 build process
 
@@ -21,7 +30,7 @@
   python setup.py build
   python setup.py install --user
 
-If python-nose is installed, you can test the package with
+If python-pytest is installed, you can test the package with
 
   python setup.py test
 
@@ -38,16 +47,5 @@
 
   /path/to/libvirt/run python setup.py build
 
-Patches for this code should be sent to the main libvirt
-development mailing list
-
-  http://libvirt.org/contact.html#email
-
-To send patches, it is strongly recommended to use the
-'git send-email' command.
-
-Make sure the mails mention that the patch is for the python
-binding. This can be done by setting a config parameter in the
-local git checkout
-
-  git config format.subjectprefix "PATCH python"
+Patches for this code should be submitted as merge requests to the
+project page on gitlab. See CONTRIBUTING.rst for more information.
diff -Nru libvirt-python-7.0.0/sanitytest.py libvirt-python-7.9.0/sanitytest.py
--- libvirt-python-7.0.0/sanitytest.py	2020-12-01 04:54:25.373188300 -0400
+++ libvirt-python-7.9.0/sanitytest.py	2021-10-01 04:38:50.844312000 -0400
@@ -253,7 +253,8 @@
                 "LookupByMACString", "LookupByUsage", "LookupByVolume",
                 "LookupByTargetPath", "LookupSCSIHostByWWN", "LookupByPortDev",
                 "Restore", "RestoreFlags",
-                "SaveImageDefineXML", "SaveImageGetXMLDesc", "DefineXMLFlags"]:
+                "SaveImageDefineXML", "SaveImageGetXMLDesc", "DefineXMLFlags",
+                "CreateXMLFlags"]:
         if klass != "virDomain":
             func = klass[3:] + func
 
diff -Nru libvirt-python-7.0.0/setup.py libvirt-python-7.9.0/setup.py
--- libvirt-python-7.0.0/setup.py	2020-12-01 10:44:28.099603700 -0400
+++ libvirt-python-7.9.0/setup.py	2021-11-01 08:22:56.095336200 -0400
@@ -55,12 +55,6 @@
     except DistutilsExecError:
         return False
 
-def have_libvirtaio():
-    # This depends on asyncio, which in turn depends on "yield from" syntax.
-    # The asyncio module itself is in standard library since 3.4, but there is
-    # an out-of-tree version compatible with 3.3.
-    return sys.version_info >= (3, 3)
-
 def get_pkgconfig_data(args, mod, required=True):
     """Run pkg-config to and return content associated with it"""
     f = os.popen("%s %s %s" % (get_pkgcfg(), " ".join(args), mod))
@@ -135,8 +129,7 @@
         c_modules.append(modulelxc)
         py_modules.append("libvirt_lxc")
 
-    if have_libvirtaio():
-        py_modules.append("libvirtaio")
+    py_modules.append("libvirtaio")
 
     return c_modules, py_modules
 
@@ -155,8 +148,7 @@
         self.spawn([sys.executable, "generator.py", "libvirt-qemu", apis[1]])
         if have_libvirt_lxc():
             self.spawn([sys.executable, "generator.py", "libvirt-lxc", apis[2]])
-        if have_libvirtaio():
-            shutil.copy('libvirtaio.py', 'build')
+        shutil.copy('libvirtaio.py', 'build')
 
         build.run(self)
 
@@ -294,13 +286,13 @@
             self.build_platlib = os.path.join(self.build_base,
                                               'lib' + plat_specifier)
 
-    def find_nosetests_path(self):
+    def find_pytest_path(self):
         binaries = [
-            "nosetests-%d.%d" % (sys.version_info[0],
+            "pytest-%d.%d" % (sys.version_info[0],
                                  sys.version_info[1]),
-            "nosetests-%d" % (sys.version_info[0]),
-            "nosetests%d" % (sys.version_info[0]),
-            "nosetests",
+            "pytest-%d" % (sys.version_info[0]),
+            "pytest%d" % (sys.version_info[0]),
+            "pytest",
         ]
 
         for binary in binaries:
@@ -308,7 +300,7 @@
             if path is not None:
                 return path
 
-        raise Exception("Cannot find any nosetests binary")
+        raise Exception("Cannot find any pytest binary")
 
     def run(self):
         """
@@ -321,9 +313,11 @@
             os.environ["PYTHONPATH"] = self.build_platlib + ":" + os.environ["PYTHONPATH"]
         else:
             os.environ["PYTHONPATH"] = self.build_platlib
-        self.spawn([sys.executable, "sanitytest.py", self.build_platlib, apis[0]])
-        nose = self.find_nosetests_path()
-        self.spawn([sys.executable, nose])
+
+        if "LIBVIRT_API_COVERAGE" in os.environ:
+            self.spawn([sys.executable, "sanitytest.py", self.build_platlib, apis[0]])
+        pytest = self.find_pytest_path()
+        self.spawn([sys.executable, pytest])
 
 
 class my_clean(clean):
@@ -341,7 +335,7 @@
 _c_modules, _py_modules = get_module_lists()
 
 setup(name = 'libvirt-python',
-      version = '7.0.0',
+      version = '7.9.0',
       url = 'http://www.libvirt.org',
       maintainer = 'Libvirt Maintainers',
       maintainer_email = 'libvir-l...@redhat.com',
diff -Nru libvirt-python-7.0.0/tests/test_conn.py libvirt-python-7.9.0/tests/test_conn.py
--- libvirt-python-7.0.0/tests/test_conn.py	2020-12-01 04:54:25.373188300 -0400
+++ libvirt-python-7.9.0/tests/test_conn.py	2021-10-01 04:38:50.844312000 -0400
@@ -14,9 +14,9 @@
 
     def testConnDomainList(self):
         doms = self.conn.listAllDomains()
-        self.assertEquals(len(doms), 1)
-        self.assertEquals(type(doms[0]), libvirt.virDomain)
-        self.assertEquals(doms[0].name(), "test")
+        self.assertEqual(len(doms), 1)
+        self.assertEqual(type(doms[0]), libvirt.virDomain)
+        self.assertEqual(doms[0].name(), "test")
 
 class TestLibvirtConnAuth(unittest.TestCase):
     connXML = """
diff -Nru libvirt-python-7.0.0/tests/test_domain.py libvirt-python-7.9.0/tests/test_domain.py
--- libvirt-python-7.0.0/tests/test_domain.py	2020-12-01 04:54:25.373188300 -0400
+++ libvirt-python-7.9.0/tests/test_domain.py	2021-10-01 04:38:50.844312000 -0400
@@ -13,7 +13,7 @@
 
     def testDomainSchedParams(self):
         params = self.dom.schedulerParameters()
-        self.assertEquals(len(params), 1)
+        self.assertEqual(len(params), 1)
         self.assertTrue("weight" in params)
         params["weight"] = 100
         self.dom.setSchedulerParameters(params)
diff -Nru libvirt-python-7.0.0/tox.ini libvirt-python-7.9.0/tox.ini
--- libvirt-python-7.0.0/tox.ini	2020-12-01 04:54:25.373188300 -0400
+++ libvirt-python-7.9.0/tox.ini	2021-10-01 04:38:50.844312000 -0400
@@ -4,7 +4,7 @@
 [testenv]
 deps=
     lxml
-    nose
+    pytest
 commands=
     python sanitytest.py
-    nosetests
+    pytest

Reply via email to