libvirt-python 12.1.0__tar.gz → 12.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/AUTHORS +2 -0
  2. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/ChangeLog +55 -0
  3. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/PKG-INFO +1 -1
  4. libvirt_python-12.2.0/VERSION +1 -0
  5. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/generator.py +123 -84
  6. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/libvirt-override-virConnect.py +4 -4
  7. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/libvirt-override.py +11 -10
  8. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/libvirt-python.spec +1 -1
  9. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/libvirtaio.py +1 -1
  10. libvirt_python-12.2.0/requirements-test.txt +2 -0
  11. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/tests/eventmock.py +2 -2
  12. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/tox.ini +1 -2
  13. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/typewrappers.c +1 -0
  14. libvirt_python-12.1.0/VERSION +0 -1
  15. libvirt_python-12.1.0/requirements-test.txt +0 -2
  16. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/CONTRIBUTING.rst +0 -0
  17. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/COPYING +0 -0
  18. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/HACKING +0 -0
  19. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/MANIFEST.in +0 -0
  20. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/Makefile +0 -0
  21. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/README +0 -0
  22. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/build/libvirt_python.egg-info/SOURCES.txt +0 -0
  23. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/examples/README +0 -0
  24. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/examples/consolecallback.py +0 -0
  25. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/examples/dhcpleases.py +0 -0
  26. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/examples/dominfo.py +0 -0
  27. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/examples/domipaddrs.py +0 -0
  28. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/examples/domrestore.py +0 -0
  29. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/examples/domsave.py +0 -0
  30. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/examples/domstart.py +0 -0
  31. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/examples/esxlist.py +0 -0
  32. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/examples/event-test.py +0 -0
  33. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/examples/guest-vcpus/guest-vcpu-daemon.py +0 -0
  34. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/examples/guest-vcpus/guest-vcpu.py +0 -0
  35. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/examples/nodestats.py +0 -0
  36. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/examples/sparsestream.py +0 -0
  37. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/examples/topology.py +0 -0
  38. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/libvirt-lxc-override-api.xml +0 -0
  39. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/libvirt-lxc-override.c +0 -0
  40. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/libvirt-override-api.xml +0 -0
  41. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/libvirt-override-virDomain.py +0 -0
  42. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/libvirt-override-virDomainCheckpoint.py +0 -0
  43. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/libvirt-override-virDomainSnapshot.py +0 -0
  44. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/libvirt-override-virNetwork.py +0 -0
  45. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/libvirt-override-virStoragePool.py +0 -0
  46. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/libvirt-override-virStream.py +0 -0
  47. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/libvirt-override.c +1 -1
  48. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/libvirt-qemu-override-api.xml +0 -0
  49. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/libvirt-qemu-override.c +1 -1
  50. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/libvirt-qemu-override.py +0 -0
  51. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/libvirt-utils.c +2 -2
  52. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/libvirt-utils.h +0 -0
  53. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/pyproject.toml +0 -0
  54. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/setup.cfg +0 -0
  55. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/setup.py +0 -0
  56. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/tests/test_aio.py +0 -0
  57. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/tests/test_api_coverage.py +0 -0
  58. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/tests/test_conn.py +0 -0
  59. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/tests/test_domain.py +0 -0
  60. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/tests/test_domain_checkpoint.py +0 -0
  61. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/tests/test_domain_snapshot.py +0 -0
  62. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/tests/test_interface.py +0 -0
  63. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/tests/test_network.py +0 -0
  64. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/tests/test_nodedev.py +0 -0
  65. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/tests/test_storage.py +0 -0
  66. {libvirt_python-12.1.0 → libvirt_python-12.2.0}/typewrappers.h +0 -0
@@ -14,6 +14,7 @@ The individual contributors are
14
14
  Andrea Bolognani <abologna@redhat.com>
15
15
  Ariel Otilibili <otilibil@eurecom.fr>
16
16
  Bastian Germann <bage@linutronix.de>
17
+ Ben "535" Blank <ben.blank@gmail.com>
17
18
  Beraldo Leal <bleal@redhat.com>
18
19
  Boris Fiuczynski <fiuczy@linux.vnet.ibm.com>
19
20
  Brian Rak <brak@gameservers.com>
@@ -95,6 +96,7 @@ The individual contributors are
95
96
  Stefan Berger <stefanb@us.ibm.com>
96
97
  SuhailAhmedVelorum <suhailahmedvelorum@gmail.com>
97
98
  Taizo ITO <taizo.ito@hde.co.jp>
99
+ Takashi Kajinami <kajinamit@oss.nttdata.com>
98
100
  Taku Izumi <izumi.taku@jp.fujitsu.com>
99
101
  Tomoki Sekiyama <tomoki.sekiyama@hds.com>
100
102
  Tomáš Golembiovský <tgolembi@redhat.com>
@@ -1,3 +1,58 @@
1
+ 2026- 3- 25 Ben "535" Blank <ben.blank@gmail.com>
2
+
3
+ Emit type hints for function parameters and return values in most places.
4
+
5
+
6
+ 2026- 3- 18 Takashi Kajinami <kajinamit@oss.nttdata.com>
7
+
8
+ Add CentOS Stream 10 job
9
+ CentOS Stream 10 was released some time ago. Let's add test coverage
10
+ with it.
11
+
12
+ The new jobs still allow failures but may be required in the future.
13
+
14
+
15
+
16
+ 2026- 3- 5 Takashi Kajinami <kajinamit@oss.nttdata.com>
17
+
18
+ Fix outedated requirements-test.txt
19
+ nose was replaced by pytest long ago.
20
+
21
+ Update tox.ini to use the file to maintain test requirements in
22
+ a single place.
23
+
24
+
25
+
26
+ 2026- 3- 3 Daniel P. Berrangé <berrange@redhat.com>
27
+
28
+ ensure Python.h is the first include file
29
+ Builds with -Werror fail with glibc 2.44 dev snapshots:
30
+
31
+ In file included from /usr/include/python3.14/pyconfig.h:6,
32
+ from /usr/include/python3.14/Python.h:14,
33
+ from d.c:2:
34
+ /usr/include/python3.14/pyconfig-64.h:2007:9: warning: ‘_POSIX_C_SOURCE’ redefined
35
+ 2007 | #define _POSIX_C_SOURCE 200809L
36
+ | ^~~~~~~~~~~~~~~
37
+ In file included from /usr/include/bits/libc-header-start.h:33,
38
+ from /usr/include/stdlib.h:26,
39
+ from d.c:1:
40
+ /usr/include/features.h:319:10: note: this is the location of the previous definition
41
+ 319 | # define _POSIX_C_SOURCE 202405L
42
+ | ^~~~~~~~~~~~~~~
43
+
44
+ The required solution is to include Python.h first, so that it owns
45
+ the definition of _POSIX_C_SOURCE, and thus glibc won't try to set
46
+ a default value
47
+
48
+ See also: https://bugzilla.redhat.com/show_bug.cgi?id=2416110
49
+
50
+
51
+ 2026- 3- 2 Jiri Denemark <jdenemar@redhat.com>
52
+
53
+ Post-release version bump to 12.2.0
54
+
55
+
1
56
  2026- 1- 29 Daniel P. Berrangé <berrange@redhat.com>
2
57
 
3
58
  rpm: remove extraneous license tag
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: libvirt-python
3
- Version: 12.1.0
3
+ Version: 12.2.0
4
4
  Summary: The libvirt virtualization API python binding
5
5
  Home-page: http://www.libvirt.org
6
6
  Maintainer: Libvirt Maintainers
@@ -0,0 +1 @@
1
+ 12.2.0
@@ -230,75 +230,96 @@ skipped_types = {
230
230
  #######################################################################
231
231
 
232
232
  py_types = {
233
- 'void': ('', '', '', ''),
234
- 'int': ('i', '', "int", "int"),
235
- 'long': ('l', '', "long", "long"),
236
- 'double': ('d', '', "double", "double"),
237
- 'unsigned int': ('I', '', "int", "int"),
238
- 'unsigned long': ('l', '', "long", "long"),
239
- 'long long': ('L', '', "longlong", "long long"),
240
- 'unsigned long long': ('L', '', "longlong", "long long"),
241
- 'unsigned char *': ('z', '', "charPtr", "char *"),
242
- 'char *': ('z', '', "charPtr", "char *"),
243
- 'const char *': ('z', '', "constcharPtr", "const char *"),
244
- 'size_t': ('n', '', "size_t", "size_t"),
245
-
246
- 'virDomainPtr': ('O', "virDomain", "virDomainPtr", "virDomainPtr"),
247
- 'virDomain *': ('O', "virDomain", "virDomainPtr", "virDomainPtr"),
248
- 'const virDomain *': ('O', "virDomain", "virDomainPtr", "virDomainPtr"),
249
-
250
- 'virNetworkPtr': ('O', "virNetwork", "virNetworkPtr", "virNetworkPtr"),
251
- 'virNetwork *': ('O', "virNetwork", "virNetworkPtr", "virNetworkPtr"),
252
- 'const virNetwork *': ('O', "virNetwork", "virNetworkPtr", "virNetworkPtr"),
253
-
254
- 'virNetworkPortPtr': ('O', "virNetworkPort", "virNetworkPortPtr", "virNetworkPortPtr"),
255
- 'virNetworkPort *': ('O', "virNetworkPort", "virNetworkPortPtr", "virNetworkPortPtr"),
256
- 'const virNetworkPort *': ('O', "virNetworkPort", "virNetworkPortPtr", "virNetworkPortPtr"),
257
-
258
- 'virInterfacePtr': ('O', "virInterface", "virInterfacePtr", "virInterfacePtr"),
259
- 'virInterface *': ('O', "virInterface", "virInterfacePtr", "virInterfacePtr"),
260
- 'const virInterface *': ('O', "virInterface", "virInterfacePtr", "virInterfacePtr"),
261
-
262
- 'virStoragePoolPtr': ('O', "virStoragePool", "virStoragePoolPtr", "virStoragePoolPtr"),
263
- 'virStoragePool *': ('O', "virStoragePool", "virStoragePoolPtr", "virStoragePoolPtr"),
264
- 'const virStoragePool *': ('O', "virStoragePool", "virStoragePoolPtr", "virStoragePoolPtr"),
265
-
266
- 'virStorageVolPtr': ('O', "virStorageVol", "virStorageVolPtr", "virStorageVolPtr"),
267
- 'virStorageVol *': ('O', "virStorageVol", "virStorageVolPtr", "virStorageVolPtr"),
268
- 'const virStorageVol *': ('O', "virStorageVol", "virStorageVolPtr", "virStorageVolPtr"),
269
-
270
- 'virConnectPtr': ('O', "virConnect", "virConnectPtr", "virConnectPtr"),
271
- 'virConnect *': ('O', "virConnect", "virConnectPtr", "virConnectPtr"),
272
- 'const virConnect *': ('O', "virConnect", "virConnectPtr", "virConnectPtr"),
273
-
274
- 'virNodeDevicePtr': ('O', "virNodeDevice", "virNodeDevicePtr", "virNodeDevicePtr"),
275
- 'virNodeDevice *': ('O', "virNodeDevice", "virNodeDevicePtr", "virNodeDevicePtr"),
276
- 'const virNodeDevice *': ('O', "virNodeDevice", "virNodeDevicePtr", "virNodeDevicePtr"),
277
-
278
- 'virSecretPtr': ('O', "virSecret", "virSecretPtr", "virSecretPtr"),
279
- 'virSecret *': ('O', "virSecret", "virSecretPtr", "virSecretPtr"),
280
- 'const virSecret *': ('O', "virSecret", "virSecretPtr", "virSecretPtr"),
281
-
282
- 'virNWFilterPtr': ('O', "virNWFilter", "virNWFilterPtr", "virNWFilterPtr"),
283
- 'virNWFilter *': ('O', "virNWFilter", "virNWFilterPtr", "virNWFilterPtr"),
284
- 'const virNWFilter *': ('O', "virNWFilter", "virNWFilterPtr", "virNWFilterPtr"),
285
-
286
- 'virNWFilterBindingPtr': ('O', "virNWFilterBinding", "virNWFilterBindingPtr", "virNWFilterBindingPtr"),
287
- 'virNWFilterBinding *': ('O', "virNWFilterBinding", "virNWFilterBindingPtr", "virNWFilterBindingPtr"),
288
- 'const virNWFilterBinding *': ('O', "virNWFilterBinding", "virNWFilterBindingPtr", "virNWFilterBindingPtr"),
289
-
290
- 'virStreamPtr': ('O', "virStream", "virStreamPtr", "virStreamPtr"),
291
- 'virStream *': ('O', "virStream", "virStreamPtr", "virStreamPtr"),
292
- 'const virStream *': ('O', "virStream", "virStreamPtr", "virStreamPtr"),
293
-
294
- 'virDomainCheckpointPtr': ('O', "virDomainCheckpoint", "virDomainCheckpointPtr", "virDomainCheckpointPtr"),
295
- 'virDomainCheckpoint *': ('O', "virDomainCheckpoint", "virDomainCheckpointPtr", "virDomainCheckpointPtr"),
296
- 'const virDomainCheckpoint *': ('O', "virDomainCheckpoint", "virDomainCheckpointPtr", "virDomainCheckpointPtr"),
297
-
298
- 'virDomainSnapshotPtr': ('O', "virDomainSnapshot", "virDomainSnapshotPtr", "virDomainSnapshotPtr"),
299
- 'virDomainSnapshot *': ('O', "virDomainSnapshot", "virDomainSnapshotPtr", "virDomainSnapshotPtr"),
300
- 'const virDomainSnapshot *': ('O', "virDomainSnapshot", "virDomainSnapshotPtr", "virDomainSnapshotPtr"),
301
- } # type: Dict[str, Tuple[str, str, str, str]]
233
+ 'void': ('', '', '', '', 'None'),
234
+ 'int': ('i', '', "int", "int", "int"),
235
+ 'long': ('l', '', "long", "long", "int"),
236
+ 'double': ('d', '', "double", "double", "float"),
237
+ 'unsigned int': ('I', '', "int", "int", "int"),
238
+ 'unsigned long': ('l', '', "long", "long", "int"),
239
+ 'long long': ('L', '', "longlong", "long long", "int"),
240
+ 'unsigned long long': ('L', '', "longlong", "long long", "int"),
241
+ 'unsigned char *': ('z', '', "charPtr", "char *", "str"),
242
+ 'char *': ('z', '', "charPtr", "char *", "str"),
243
+ 'const char *': ('z', '', "constcharPtr", "const char *", "str"),
244
+ 'size_t': ('n', '', "size_t", "size_t", "int"),
245
+
246
+ 'virDomainPtr': ('O', "virDomain", "virDomainPtr", "virDomainPtr", "virDomain"),
247
+ 'virDomain *': ('O', "virDomain", "virDomainPtr", "virDomainPtr", "virDomain"),
248
+ 'const virDomain *': ('O', "virDomain", "virDomainPtr", "virDomainPtr", "virDomain"),
249
+
250
+ 'virNetworkPtr': ('O', "virNetwork", "virNetworkPtr", "virNetworkPtr", "virNetwork"),
251
+ 'virNetwork *': ('O', "virNetwork", "virNetworkPtr", "virNetworkPtr", "virNetwork"),
252
+ 'const virNetwork *': ('O', "virNetwork", "virNetworkPtr", "virNetworkPtr", "virNetwork"),
253
+
254
+ 'virNetworkPortPtr': ('O', "virNetworkPort", "virNetworkPortPtr", "virNetworkPortPtr", "virNetworkPort"),
255
+ 'virNetworkPort *': ('O', "virNetworkPort", "virNetworkPortPtr", "virNetworkPortPtr", "virNetworkPort"),
256
+ 'const virNetworkPort *': ('O', "virNetworkPort", "virNetworkPortPtr", "virNetworkPortPtr", "virNetworkPort"),
257
+
258
+ 'virInterfacePtr': ('O', "virInterface", "virInterfacePtr", "virInterfacePtr", "virInterface"),
259
+ 'virInterface *': ('O', "virInterface", "virInterfacePtr", "virInterfacePtr", "virInterface"),
260
+ 'const virInterface *': ('O', "virInterface", "virInterfacePtr", "virInterfacePtr", "virInterface"),
261
+
262
+ 'virStoragePoolPtr': ('O', "virStoragePool", "virStoragePoolPtr", "virStoragePoolPtr", "virStoragePool"),
263
+ 'virStoragePool *': ('O', "virStoragePool", "virStoragePoolPtr", "virStoragePoolPtr", "virStoragePool"),
264
+ 'const virStoragePool *': ('O', "virStoragePool", "virStoragePoolPtr", "virStoragePoolPtr", "virStoragePool"),
265
+
266
+ 'virStorageVolPtr': ('O', "virStorageVol", "virStorageVolPtr", "virStorageVolPtr", "virStorageVol"),
267
+ 'virStorageVol *': ('O', "virStorageVol", "virStorageVolPtr", "virStorageVolPtr", "virStorageVol"),
268
+ 'const virStorageVol *': ('O', "virStorageVol", "virStorageVolPtr", "virStorageVolPtr", "virStorageVol"),
269
+
270
+ 'virConnectPtr': ('O', "virConnect", "virConnectPtr", "virConnectPtr", "virConnect"),
271
+ 'virConnect *': ('O', "virConnect", "virConnectPtr", "virConnectPtr", "virConnect"),
272
+ 'const virConnect *': ('O', "virConnect", "virConnectPtr", "virConnectPtr", "virConnect"),
273
+
274
+ 'virNodeDevicePtr': ('O', "virNodeDevice", "virNodeDevicePtr", "virNodeDevicePtr", "virNodeDevice"),
275
+ 'virNodeDevice *': ('O', "virNodeDevice", "virNodeDevicePtr", "virNodeDevicePtr", "virNodeDevice"),
276
+ 'const virNodeDevice *': ('O', "virNodeDevice", "virNodeDevicePtr", "virNodeDevicePtr", "virNodeDevice"),
277
+
278
+ 'virSecretPtr': ('O', "virSecret", "virSecretPtr", "virSecretPtr", "virSecret"),
279
+ 'virSecret *': ('O', "virSecret", "virSecretPtr", "virSecretPtr", "virSecret"),
280
+ 'const virSecret *': ('O', "virSecret", "virSecretPtr", "virSecretPtr", "virSecret"),
281
+
282
+ 'virNWFilterPtr': ('O', "virNWFilter", "virNWFilterPtr", "virNWFilterPtr", "virNWFilter"),
283
+ 'virNWFilter *': ('O', "virNWFilter", "virNWFilterPtr", "virNWFilterPtr", "virNWFilter"),
284
+ 'const virNWFilter *': ('O', "virNWFilter", "virNWFilterPtr", "virNWFilterPtr", "virNWFilter"),
285
+
286
+ 'virNWFilterBindingPtr': ('O', "virNWFilterBinding", "virNWFilterBindingPtr", "virNWFilterBindingPtr", "virNWFilterBinding"),
287
+ 'virNWFilterBinding *': ('O', "virNWFilterBinding", "virNWFilterBindingPtr", "virNWFilterBindingPtr", "virNWFilterBinding"),
288
+ 'const virNWFilterBinding *': ('O', "virNWFilterBinding", "virNWFilterBindingPtr", "virNWFilterBindingPtr", "virNWFilterBinding"),
289
+
290
+ 'virStreamPtr': ('O', "virStream", "virStreamPtr", "virStreamPtr", "virStream"),
291
+ 'virStream *': ('O', "virStream", "virStreamPtr", "virStreamPtr", "virStream"),
292
+ 'const virStream *': ('O', "virStream", "virStreamPtr", "virStreamPtr", "virStream"),
293
+
294
+ 'virDomainCheckpointPtr': ('O', "virDomainCheckpoint", "virDomainCheckpointPtr", "virDomainCheckpointPtr", "virDomainCheckpoint"),
295
+ 'virDomainCheckpoint *': ('O', "virDomainCheckpoint", "virDomainCheckpointPtr", "virDomainCheckpointPtr", "virDomainCheckpoint"),
296
+ 'const virDomainCheckpoint *': ('O', "virDomainCheckpoint", "virDomainCheckpointPtr", "virDomainCheckpointPtr", "virDomainCheckpoint"),
297
+
298
+ 'virDomainSnapshotPtr': ('O', "virDomainSnapshot", "virDomainSnapshotPtr", "virDomainSnapshotPtr", "virDomainSnapshot"),
299
+ 'virDomainSnapshot *': ('O', "virDomainSnapshot", "virDomainSnapshotPtr", "virDomainSnapshotPtr", "virDomainSnapshot"),
300
+ 'const virDomainSnapshot *': ('O', "virDomainSnapshot", "virDomainSnapshotPtr", "virDomainSnapshotPtr", "virDomainSnapshot"),
301
+ } # type: Dict[str, Tuple[str, str, str, str, str]]
302
+
303
+
304
+ # These C types are used only in generated Python code, so don't need the
305
+ # C-supporting elements from py_types.
306
+ py_types_only = {
307
+ 'bool': "bool",
308
+ 'const unsigned char *': "str",
309
+ 'const char **': "List[str]",
310
+ 'unsigned int *': "List[int]",
311
+ 'virErrorPtr': "_RawError",
312
+ 'virEventAddHandleFunc': "_EventAddHandleFunc[_T]",
313
+ 'virEventUpdateHandleFunc': "_EventUpdateHandleFunc",
314
+ 'virEventRemoveHandleFunc': "_EventRemoveHandleFunc",
315
+ 'virEventAddTimeoutFunc': "_EventAddTimeoutFunc[_T]",
316
+ 'virEventUpdateTimeoutFunc': "_EventUpdateTimeoutFunc",
317
+ 'virEventRemoveTimeoutFunc': "_EventRemoveTimeoutFunc",
318
+ 'virBlkioParameterPtr': "_BlkioParameter",
319
+ 'virMemoryParameterPtr': "_MemoryParameter",
320
+ 'virSchedParameterPtr': "_SchedParameter",
321
+ 'virTypedParameterPtr': "_TypedParameter",
322
+ } # type: Dict[str, str]
302
323
 
303
324
 
304
325
  #######################################################################
@@ -712,7 +733,7 @@ def print_function_wrapper(package: str, name: str, output: IO[str], export: IO[
712
733
  a_type = a_type[6:]
713
734
  c_args += " %s %s;\n" % (a_type, a_name)
714
735
  if a_type in py_types:
715
- (f, t, n, c) = py_types[a_type]
736
+ (f, t, n, c, p) = py_types[a_type]
716
737
  if f:
717
738
  format += f
718
739
  if t:
@@ -750,7 +771,7 @@ def print_function_wrapper(package: str, name: str, output: IO[str], export: IO[
750
771
  c_call = "\n %s(%s);\n" % (name, c_call)
751
772
  ret_convert = " Py_INCREF(Py_None);\n return Py_None;\n"
752
773
  elif r_type in py_types:
753
- (f, t, n, c) = py_types[r_type]
774
+ (f, t, n, c, p) = py_types[r_type]
754
775
  c_return = " %s c_retval;\n" % (r_type)
755
776
  if file == "python_accessor" and r_field:
756
777
  c_call = "\n c_retval = %s->%s;\n" % (args[0][0], r_field)
@@ -858,7 +879,7 @@ def load_apis(module: str, api_xml: str):
858
879
  print("Found %d functions in %s" % ((n), api_xml))
859
880
 
860
881
  override_api_xml = "%s-override-api.xml" % module
861
- py_types['pythonObject'] = ('O', "pythonObject", "pythonObject", "pythonObject")
882
+ py_types['pythonObject'] = ('O', "pythonObject", "pythonObject", "pythonObject", "object")
862
883
 
863
884
  try:
864
885
  onlyOverrides = True
@@ -890,8 +911,8 @@ def emit_c_code(module: str) -> None:
890
911
 
891
912
  wrapper = open(wrapper_file, "w")
892
913
  wrapper.write("/* Generated by generator.py */\n\n")
893
- wrapper.write("#include <stdlib.h>\n")
894
914
  wrapper.write("#include <Python.h>\n")
915
+ wrapper.write("#include <stdlib.h>\n")
895
916
  wrapper.write("#include <libvirt/%s.h>\n" % (module,))
896
917
  wrapper.write("#include \"typewrappers.h\"\n")
897
918
  wrapper.write("#include \"%s.h\"\n\n" % (module))
@@ -1366,6 +1387,9 @@ def emit_py_code(module: str) -> None:
1366
1387
  if extra:
1367
1388
  extra.close()
1368
1389
 
1390
+ types_map = {name: types[-1] for name, types in py_types.items()}
1391
+ types_map.update(py_types_only)
1392
+
1369
1393
  if "None" in function_classes:
1370
1394
  flist = function_classes["None"]
1371
1395
  oldfile = ""
@@ -1378,12 +1402,18 @@ def emit_py_code(module: str) -> None:
1378
1402
  if n != 0:
1379
1403
  classes.write(", ")
1380
1404
  classes.write("%s" % a_name)
1405
+ if a_type in types_map:
1406
+ classes.write(": \"%s\"" % types_map[a_type])
1381
1407
  if a_name == "flags" or is_optional_arg(a_info):
1382
1408
  if is_integral_type(a_type):
1383
1409
  classes.write("=0")
1384
1410
  else:
1385
1411
  classes.write("=None")
1386
- classes.write("):\n")
1412
+ r_type, r_info, r_field = ret
1413
+ classes.write(")")
1414
+ if r_type in types_map:
1415
+ classes.write(" -> \"%s\"" % types_map[r_type])
1416
+ classes.write(":\n")
1387
1417
  writeDoc(module, name, args, ' ', classes)
1388
1418
 
1389
1419
  for a_name, a_type, a_info in args:
@@ -1395,7 +1425,6 @@ def emit_py_code(module: str) -> None:
1395
1425
  " %s__o = %s%s\n" %
1396
1426
  (a_name, a_name, classes_type[a_type][0]))
1397
1427
 
1398
- r_type, r_info, r_field = ret
1399
1428
  if r_type != "void":
1400
1429
  classes.write(" ret = ")
1401
1430
  else:
@@ -1477,18 +1506,18 @@ def emit_py_code(module: str) -> None:
1477
1506
  if classname in ["virDomain", "virNetwork", "virInterface", "virStoragePool",
1478
1507
  "virStorageVol", "virNodeDevice", "virSecret", "virStream",
1479
1508
  "virNWFilter", "virNWFilterBinding"]:
1480
- classes.write(" def __init__(self, conn, _obj=None):\n")
1509
+ classes.write(" def __init__(self, conn: \"virConnect\", _obj: object=None):\n")
1481
1510
  classes.write(" self._conn = conn\n")
1482
1511
  elif classname in ["virDomainCheckpoint", "virDomainSnapshot"]:
1483
- classes.write(" def __init__(self, dom, _obj=None):\n")
1512
+ classes.write(" def __init__(self, dom: \"virDomain\", _obj: object=None):\n")
1484
1513
  classes.write(" self._dom = dom\n")
1485
1514
  classes.write(" self._conn = dom.connect()\n")
1486
1515
  elif classname in ["virNetworkPort"]:
1487
- classes.write(" def __init__(self, net, _obj=None) -> None:\n")
1516
+ classes.write(" def __init__(self, net: \"virNetwork\", _obj: object=None) -> None:\n")
1488
1517
  classes.write(" self._net = net\n")
1489
1518
  classes.write(" self._conn = net.connect()\n")
1490
1519
  else:
1491
- classes.write(" def __init__(self, _obj=None):\n")
1520
+ classes.write(" def __init__(self, _obj: object=None):\n")
1492
1521
 
1493
1522
  classes.write(" if type(_obj).__name__ not in [\"PyCapsule\", \"PyCObject\"]:\n")
1494
1523
  classes.write(" raise Exception(\"Expected a wrapped C Object but got %s\" % type(_obj))\n")
@@ -1515,7 +1544,7 @@ def emit_py_code(module: str) -> None:
1515
1544
  classes.write(" def network(self):\n")
1516
1545
  classes.write(" return self._net\n\n")
1517
1546
 
1518
- classes.write(" def c_pointer(self):\n")
1547
+ classes.write(" def c_pointer(self) -> object:\n")
1519
1548
  classes.write(" \"\"\"Get C pointer to underlying object\"\"\"\n")
1520
1549
  classes.write(" return %s.%s_pointer(self._o)\n\n" %
1521
1550
  (pymod, classname))
@@ -1542,12 +1571,18 @@ def emit_py_code(module: str) -> None:
1542
1571
  for n, (a_name, a_type, a_info) in enumerate(args):
1543
1572
  if n != index:
1544
1573
  classes.write(", %s" % a_name)
1574
+ if a_type in types_map:
1575
+ classes.write(": \"%s\"" % types_map[a_type])
1545
1576
  if a_name == "flags" or is_optional_arg(a_info):
1546
1577
  if is_integral_type(a_type):
1547
1578
  classes.write("=0")
1548
1579
  else:
1549
1580
  classes.write("=None")
1550
- classes.write("):\n")
1581
+ r_type, r_info, r_field = ret
1582
+ classes.write(")")
1583
+ if r_type in types_map:
1584
+ classes.write(" -> \"%s\"" % types_map[r_type])
1585
+ classes.write(":\n")
1551
1586
  writeDoc(module, name, args, ' ', classes)
1552
1587
  for n, (a_name, a_type, a_info) in enumerate(args):
1553
1588
  if a_type in classes_type:
@@ -1558,7 +1593,6 @@ def emit_py_code(module: str) -> None:
1558
1593
  classes.write(" else:\n"
1559
1594
  " %s__o = %s%s\n" %
1560
1595
  (a_name, a_name, classes_type[a_type][0]))
1561
- r_type, r_info, r_field = ret
1562
1596
  if r_type != "void":
1563
1597
  classes.write(" ret = ")
1564
1598
  else:
@@ -1701,10 +1735,15 @@ def emit_py_code(module: str) -> None:
1701
1735
  if n != 0:
1702
1736
  classes.write(", ")
1703
1737
  classes.write("%s" % a_name)
1704
- classes.write("):\n")
1738
+ if a_type in types_map:
1739
+ classes.write(": \"%s\"" % types_map[a_type])
1740
+ r_type, r_info, r_field = ret
1741
+ classes.write(")")
1742
+ if r_type in types_map:
1743
+ classes.write(" -> \"%s\"" % types_map[r_type])
1744
+ classes.write(":\n")
1705
1745
  writeDoc(module, name, args, ' ', classes)
1706
1746
 
1707
- r_type, r_info, r_field = ret
1708
1747
  if r_type != "void":
1709
1748
  classes.write(" ret = ")
1710
1749
  else:
@@ -16,7 +16,7 @@
16
16
  def __exit__(self, exc_type_: Optional[Type[BaseException]], exc_value_: Optional[BaseException], traceback_: Optional[TracebackType]) -> None:
17
17
  self.close()
18
18
 
19
- def domainEventDeregister(self, cb: _DomainCB) -> None:
19
+ def domainEventDeregister(self, cb: _DomainCB[_T]) -> None:
20
20
  """Removes a Domain Event Callback. De-registering for a
21
21
  domain callback will disable delivery of this event type """
22
22
  try:
@@ -29,13 +29,13 @@
29
29
  except AttributeError:
30
30
  pass
31
31
 
32
- def domainEventRegister(self, cb: _DomainCB, opaque: _T) -> None:
32
+ def domainEventRegister(self, cb: _DomainCB[_T], opaque: _T) -> None:
33
33
  """Adds a Domain Event Callback. Registering for a domain
34
34
  callback will enable delivery of the events """
35
35
  try:
36
36
  self.domainEventCallbacks[cb] = opaque
37
37
  except AttributeError:
38
- self.domainEventCallbacks = {cb: opaque} # type: Dict[_DomainCB, _T]
38
+ self.domainEventCallbacks = {cb: opaque} # type: Dict[_DomainCB[_T], _T]
39
39
  ret = libvirtmod.virConnectDomainEventRegister(self._o, self)
40
40
  if ret == -1:
41
41
  raise libvirtError('virConnectDomainEventRegister() failed')
@@ -572,7 +572,7 @@
572
572
  if ret == -1:
573
573
  raise libvirtError('virConnectUnregisterCloseCallback() failed')
574
574
 
575
- def registerCloseCallback(self, cb: Callable, opaque: _T) -> int:
575
+ def registerCloseCallback(self, cb: Callable[['virConnect', int, _T], None], opaque: _T) -> int:
576
576
  """Adds a close event callback, providing a notification
577
577
  when a connection fails / closes"""
578
578
  cbData = {"cb": cb, "conn": self, "opaque": opaque}
@@ -3,11 +3,11 @@ from types import TracebackType
3
3
  from typing import Any, Callable, Dict, List, Optional, overload, Tuple, Type, TypeVar, Union
4
4
  _T = TypeVar('_T')
5
5
  _EventCB = Callable[[int, int, int, _T], None]
6
- _EventAddHandleFunc = Callable[[int, int, _EventCB, _T], int]
6
+ _EventAddHandleFunc = Callable[[int, int, _EventCB[_T], _T], int]
7
7
  _EventUpdateHandleFunc = Callable[[int, int], None]
8
8
  _EventRemoveHandleFunc = Callable[[int], int]
9
9
  _TimerCB = Callable[[int, _T], None]
10
- _EventAddTimeoutFunc = Callable[[int, _TimerCB, _T], int]
10
+ _EventAddTimeoutFunc = Callable[[int, _TimerCB[_T], _T], int]
11
11
  _EventUpdateTimeoutFunc = Callable[[int, int], None]
12
12
  _EventRemoveTimeoutFunc = Callable[[int], int]
13
13
  _DomainCB = Callable[['virConnect', 'virDomain', int, int, _T], Optional[int]]
@@ -15,6 +15,7 @@ _BlkioParameter = Dict[str, Any]
15
15
  _MemoryParameter = Dict[str, Any]
16
16
  _SchedParameter = Dict[str, Any]
17
17
  _TypedParameter = Dict[str, Any]
18
+ _RawError = Tuple[int, int, str, int, str, Optional[str], Optional[str], int, int]
18
19
 
19
20
 
20
21
  # The root of all libvirt errors.
@@ -23,7 +24,7 @@ class libvirtError(Exception):
23
24
 
24
25
  # Never call virConnGetLastError().
25
26
  # virGetLastError() is now thread local
26
- err = libvirtmod.virGetLastError() # type: Optional[Tuple[int, int, str, int, str, Optional[str], Optional[str], int, int]]
27
+ err = libvirtmod.virGetLastError() # type: Optional[_RawError]
27
28
  if err is None:
28
29
  msg = defmsg
29
30
  else:
@@ -82,7 +83,7 @@ class libvirtError(Exception):
82
83
  #
83
84
  # register the libvirt global error handler
84
85
  #
85
- def registerErrorHandler(f: Callable[[_T, List], None], ctx: _T) -> int:
86
+ def registerErrorHandler(f: Callable[[_T, _RawError], None], ctx: _T) -> int:
86
87
  """Register a Python function for error reporting.
87
88
  The function is called back as f(ctx, error), with error
88
89
  being a list of information about the error being raised.
@@ -153,10 +154,10 @@ def getVersion(name: Optional[str] = None) -> int:
153
154
  # Invoke an EventHandle callback
154
155
  #
155
156
  @overload
156
- def _eventInvokeHandleCallback(watch: int, fd: int, event: int, opaque: Tuple[_EventCB, _T], opaquecompat: None = None) -> None: ... # noqa E704
157
+ def _eventInvokeHandleCallback(watch: int, fd: int, event: int, opaque: Tuple[_EventCB[_T], _T], opaquecompat: None = None) -> None: ... # noqa E704
157
158
  @overload # noqa F811
158
- def _eventInvokeHandleCallback(watch: int, fd: int, event: int, opaque: _EventCB, opaquecompat: _T = None) -> None: ... # noqa E704
159
- def _eventInvokeHandleCallback(watch: int, fd: int, event: int, opaque: Union[Tuple[_EventCB, _T], _EventCB], opaquecompat: Optional[_T] = None) -> None: # noqa F811
159
+ def _eventInvokeHandleCallback(watch: int, fd: int, event: int, opaque: _EventCB[_T], opaquecompat: _T = None) -> None: ... # noqa E704
160
+ def _eventInvokeHandleCallback(watch: int, fd: int, event: int, opaque: Union[Tuple[_EventCB[_T], _T], _EventCB[_T]], opaquecompat: Optional[_T] = None) -> None: # noqa F811
160
161
  """
161
162
  Invoke the Event Impl Handle Callback in C
162
163
  """
@@ -178,7 +179,7 @@ def _eventInvokeHandleCallback(watch: int, fd: int, event: int, opaque: Union[Tu
178
179
  #
179
180
  # Invoke an EventTimeout callback
180
181
  #
181
- def _eventInvokeTimeoutCallback(timer: int, opaque: Union[Tuple[_TimerCB, _T], _TimerCB], opaquecompat: Optional[_T] = None) -> None:
182
+ def _eventInvokeTimeoutCallback(timer: int, opaque: Union[Tuple[_TimerCB[_T], _T], _TimerCB[_T]], opaquecompat: Optional[_T] = None) -> None:
182
183
  """
183
184
  Invoke the Event Impl Timeout Callback in C
184
185
  """
@@ -213,7 +214,7 @@ def _dispatchEventTimeoutCallback(timer: int, cbData: Dict[str, Any]) -> int:
213
214
  return 0
214
215
 
215
216
 
216
- def virEventAddHandle(fd: int, events: int, cb: _EventCB, opaque: _T) -> int:
217
+ def virEventAddHandle(fd: int, events: int, cb: _EventCB[_T], opaque: _T) -> int:
217
218
  """
218
219
  register a callback for monitoring file handle events
219
220
 
@@ -235,7 +236,7 @@ def virEventAddHandle(fd: int, events: int, cb: _EventCB, opaque: _T) -> int:
235
236
  return ret
236
237
 
237
238
 
238
- def virEventAddTimeout(timeout: int, cb: _TimerCB, opaque: _T) -> int:
239
+ def virEventAddTimeout(timeout: int, cb: _TimerCB[_T], opaque: _T) -> int:
239
240
  """
240
241
  register a callback for a timer event
241
242
 
@@ -16,7 +16,7 @@
16
16
 
17
17
  Summary: The libvirt virtualization API python3 binding
18
18
  Name: libvirt-python
19
- Version: 12.1.0
19
+ Version: 12.2.0
20
20
  Release: 1%{?dist}
21
21
  Source0: https://libvirt.org/sources/python/%{dist_name}-%{version}.tar.gz
22
22
  Url: https://libvirt.org
@@ -418,7 +418,7 @@ class virEventAsyncIOImpl(object):
418
418
  callback.close()
419
419
  return 0
420
420
 
421
- def _add_timeout(self, timeout: int, cb: libvirt._TimerCB, opaque: _T) -> int:
421
+ def _add_timeout(self, timeout: int, cb: libvirt._TimerCB[_T], opaque: _T) -> int:
422
422
  '''Register a callback for a timer event
423
423
 
424
424
  :param int timeout: the timeout to monitor
@@ -0,0 +1,2 @@
1
+ pytest
2
+ lxml
@@ -12,7 +12,7 @@ _remove_timeout_impl = None
12
12
 
13
13
  _registered = False
14
14
 
15
- def _add_handle(fd: int, event: int, cb: libvirt._EventCB, opaque: libvirt._T) -> int:
15
+ def _add_handle(fd: int, event: int, cb: libvirt._EventCB[libvirt._T], opaque: libvirt._T) -> int:
16
16
  global _add_handle_impl
17
17
  assert _add_handle_impl != None
18
18
  return _add_handle_impl(fd, event, cb, opaque)
@@ -27,7 +27,7 @@ def _remove_handle(watch: int) -> int:
27
27
  assert _remove_handle_impl != None
28
28
  return _remove_handle_impl(watch)
29
29
 
30
- def _add_timeout(timeout: int, cb: libvirt._TimerCB, opaque: libvirt._T) -> int:
30
+ def _add_timeout(timeout: int, cb: libvirt._TimerCB[libvirt._T], opaque: libvirt._T) -> int:
31
31
  global _add_timeout_impl
32
32
  assert _add_timeout_impl != None
33
33
  return _add_timeout_impl(timeout, cb, opaque)
@@ -3,7 +3,6 @@ envlist = py39,py310,py311,py312,py313
3
3
 
4
4
  [testenv]
5
5
  deps=
6
- lxml
7
- pytest
6
+ -r{toxinidir}/requirements-test.txt
8
7
  commands=
9
8
  pytest
@@ -12,6 +12,7 @@
12
12
  * which has over 180 autoconf-style HAVE_* definitions. Shame on them. */
13
13
  #undef HAVE_PTHREAD_H
14
14
 
15
+ #include <Python.h>
15
16
  #include <stdio.h>
16
17
  #include <string.h>
17
18
  #include "typewrappers.h"
@@ -1 +0,0 @@
1
- 12.1.0
@@ -1,2 +0,0 @@
1
- nose
2
- lxml
File without changes
File without changes
File without changes
@@ -19,9 +19,9 @@
19
19
 
20
20
  #define PY_SSIZE_T_CLEAN
21
21
 
22
+ #include <Python.h>
22
23
  #include <stdio.h>
23
24
  #include <string.h>
24
- #include <Python.h>
25
25
  #include <libvirt/libvirt.h>
26
26
  #include <libvirt/virterror.h>
27
27
  #include <stddef.h>
@@ -14,8 +14,8 @@
14
14
  which has over 180 autoconf-style HAVE_* definitions. Shame on them. */
15
15
  #undef HAVE_PTHREAD_H
16
16
 
17
- #include <stdio.h>
18
17
  #include <Python.h>
18
+ #include <stdio.h>
19
19
  #include <libvirt/libvirt-qemu.h>
20
20
  #include <libvirt/virterror.h>
21
21
  #include "typewrappers.h"
@@ -19,10 +19,10 @@
19
19
  *
20
20
  */
21
21
 
22
- #include <string.h>
23
-
24
22
  #include <Python.h>
25
23
 
24
+ #include <string.h>
25
+
26
26
  /* Ugly python defines that, which is also defined in errno.h */
27
27
  #undef _POSIC_C_SOURCE
28
28