1
0
mirror of https://gitlab.com/libvirt/libvirt-python.git synced 2025-07-27 11:41:52 +03:00

Normalize white space

indent by 4 spaces
one spaces around assignments

Signed-off-by: Philipp Hahn <hahn@univention.de>
This commit is contained in:
Philipp Hahn
2018-11-20 08:34:48 +01:00
parent 7c93891420
commit 0ca8dc6340
10 changed files with 429 additions and 374 deletions

View File

@ -17,7 +17,7 @@ import sys
import string import string
import re import re
quiet=True quiet = True
####################################################################### #######################################################################
# #
@ -48,6 +48,7 @@ libvirt_headers = [
"libvirt-stream", "libvirt-stream",
] ]
def getparser(): def getparser():
# Attach parser to an unmarshalling object. return both objects. # Attach parser to an unmarshalling object. return both objects.
target = docParser() target = docParser()
@ -55,6 +56,7 @@ def getparser():
parser.setContentHandler(target) parser.setContentHandler(target)
return parser, target return parser, target
class docParser(xml.sax.handler.ContentHandler): class docParser(xml.sax.handler.ContentHandler):
def __init__(self): def __init__(self):
self._methodname = None self._methodname = None
@ -94,13 +96,13 @@ class docParser(xml.sax.handler.ContentHandler):
self.function_descr = None self.function_descr = None
self.function_return = None self.function_return = None
self.function_file = None self.function_file = None
self.function_module= None self.function_module = None
if 'name' in attrs.keys(): if 'name' in attrs.keys():
self.function = attrs['name'] self.function = attrs['name']
if 'file' in attrs.keys(): if 'file' in attrs.keys():
self.function_file = attrs['file'] self.function_file = attrs['file']
if 'module' in attrs.keys(): if 'module' in attrs.keys():
self.function_module= attrs['module'] self.function_module = attrs['module']
elif tag == 'cond': elif tag == 'cond':
self._data = [] self._data = []
elif tag == 'info': elif tag == 'info':
@ -132,11 +134,11 @@ class docParser(xml.sax.handler.ContentHandler):
elif tag == 'enum': elif tag == 'enum':
# enums come from header files, hence virterror.h # enums come from header files, hence virterror.h
if attrs['file'] in libvirt_headers + ["virerror", "virterror"]: if attrs['file'] in libvirt_headers + ["virerror", "virterror"]:
enum(attrs['type'],attrs['name'],attrs['value']) enum(attrs['type'], attrs['name'], attrs['value'])
elif attrs['file'] == "libvirt-lxc": elif attrs['file'] == "libvirt-lxc":
lxc_enum(attrs['type'],attrs['name'],attrs['value']) lxc_enum(attrs['type'], attrs['name'], attrs['value'])
elif attrs['file'] == "libvirt-qemu": elif attrs['file'] == "libvirt-qemu":
qemu_enum(attrs['type'],attrs['name'],attrs['value']) qemu_enum(attrs['type'], attrs['name'], attrs['value'])
elif tag == "macro": elif tag == "macro":
if "string" in attrs.keys(): if "string" in attrs.keys():
params.append((attrs['name'], attrs['string'])) params.append((attrs['name'], attrs['string']))
@ -211,18 +213,21 @@ def function(name, desc, ret, args, file, module, cond):
name = "virConnectListDomainsID" name = "virConnectListDomainsID"
functions[name] = (desc, ret, args, file, module, cond) functions[name] = (desc, ret, args, file, module, cond)
def qemu_function(name, desc, ret, args, file, module, cond): def qemu_function(name, desc, ret, args, file, module, cond):
global onlyOverrides global onlyOverrides
if onlyOverrides and name not in qemu_functions: if onlyOverrides and name not in qemu_functions:
return return
qemu_functions[name] = (desc, ret, args, file, module, cond) qemu_functions[name] = (desc, ret, args, file, module, cond)
def lxc_function(name, desc, ret, args, file, module, cond): def lxc_function(name, desc, ret, args, file, module, cond):
global onlyOverrides global onlyOverrides
if onlyOverrides and name not in lxc_functions: if onlyOverrides and name not in lxc_functions:
return return
lxc_functions[name] = (desc, ret, args, file, module, cond) lxc_functions[name] = (desc, ret, args, file, module, cond)
def enum(type, name, value): def enum(type, name, value):
if type not in enums: if type not in enums:
enums[type] = {} enums[type] = {}
@ -251,6 +256,7 @@ def enum(type, name, value):
return return
enums[type][name] = value enums[type][name] = value
def lxc_enum(type, name, value): def lxc_enum(type, name, value):
if type not in lxc_enums: if type not in lxc_enums:
lxc_enums[type] = {} lxc_enums[type] = {}
@ -258,6 +264,7 @@ def lxc_enum(type, name, value):
return return
lxc_enums[type][name] = value lxc_enums[type][name] = value
def qemu_enum(type, name, value): def qemu_enum(type, name, value):
if type not in qemu_enums: if type not in qemu_enums:
qemu_enums[type] = {} qemu_enums[type] = {}
@ -292,7 +299,7 @@ skipped_modules = {
} }
skipped_types = { skipped_types = {
# 'int *': "usually a return type", # 'int *': "usually a return type",
'virConnectDomainEventCallback': "No function types in python", 'virConnectDomainEventCallback': "No function types in python",
'virConnectDomainEventGenericCallback': "No function types in python", 'virConnectDomainEventGenericCallback': "No function types in python",
'virConnectDomainEventRTCChangeCallback': "No function types in python", 'virConnectDomainEventRTCChangeCallback': "No function types in python",
@ -659,7 +666,7 @@ lxc_skip_function = (
"virDomainLxcEnterSecurityLabel", "virDomainLxcEnterSecurityLabel",
) )
qemu_skip_function = ( qemu_skip_function = (
#"virDomainQemuAttach", # "virDomainQemuAttach",
'virConnectDomainQemuMonitorEventRegister', # overridden in -qemu.py 'virConnectDomainQemuMonitorEventRegister', # overridden in -qemu.py
'virConnectDomainQemuMonitorEventDeregister', # overridden in -qemu.py 'virConnectDomainQemuMonitorEventDeregister', # overridden in -qemu.py
) )
@ -677,6 +684,7 @@ function_skip_index_one = (
"virDomainRevertToSnapshot", "virDomainRevertToSnapshot",
) )
def print_function_wrapper(module, name, output, export, include): def print_function_wrapper(module, name, output, export, include):
global py_types global py_types
global unknown_types global unknown_types
@ -720,12 +728,12 @@ def print_function_wrapper(module, name, output, export, include):
return 1 return 1
c_call = "" c_call = ""
format="" format = ""
format_args="" format_args = ""
c_args="" c_args = ""
c_return="" c_return = ""
c_convert="" c_convert = ""
num_bufs=0 num_bufs = 0
for arg in args: for arg in args:
# This should be correct # This should be correct
if arg[1][0:6] == "const ": if arg[1][0:6] == "const ":
@ -739,8 +747,8 @@ def print_function_wrapper(module, name, output, export, include):
format_args = format_args + ", &pyobj_%s" % (arg[0]) format_args = format_args + ", &pyobj_%s" % (arg[0])
c_args = c_args + " PyObject *pyobj_%s;\n" % (arg[0]) c_args = c_args + " PyObject *pyobj_%s;\n" % (arg[0])
c_convert = c_convert + \ c_convert = c_convert + \
" %s = (%s) Py%s_Get(pyobj_%s);\n" % (arg[0], " %s = (%s) Py%s_Get(pyobj_%s);\n" % (
arg[1], t, arg[0]) arg[0], arg[1], t, arg[0])
else: else:
format_args = format_args + ", &%s" % (arg[0]) format_args = format_args + ", &%s" % (arg[0])
if f == 't#': if f == 't#':
@ -767,8 +775,8 @@ def print_function_wrapper(module, name, output, export, include):
if args[1][1] == "char *": if args[1][1] == "char *":
c_call = "\n VIR_FREE(%s->%s);\n" % ( c_call = "\n VIR_FREE(%s->%s);\n" % (
args[0][0], args[1][0]) args[0][0], args[1][0])
c_call = c_call + " %s->%s = (%s)strdup((const xmlChar *)%s);\n" % (args[0][0], c_call = c_call + " %s->%s = (%s)strdup((const xmlChar *)%s);\n" % (
args[1][0], args[1][1], args[1][0]) args[0][0], args[1][0], args[1][1], args[1][0])
else: else:
c_call = "\n %s->%s = %s;\n" % (args[0][0], args[1][0], c_call = "\n %s->%s = %s;\n" % (args[0][0], args[1][0],
args[1][0]) args[1][0])
@ -782,7 +790,7 @@ def print_function_wrapper(module, name, output, export, include):
c_call = "\n c_retval = %s->%s;\n" % (args[0][0], ret[2]) c_call = "\n c_retval = %s->%s;\n" % (args[0][0], ret[2])
else: else:
c_call = "\n c_retval = %s(%s);\n" % (name, c_call) c_call = "\n c_retval = %s(%s);\n" % (name, c_call)
ret_convert = " py_retval = libvirt_%sWrap((%s) c_retval);\n" % (n,c) ret_convert = " py_retval = libvirt_%sWrap((%s) c_retval);\n" % (n, c)
if n == "charPtr": if n == "charPtr":
ret_convert = ret_convert + " free(c_retval);\n" ret_convert = ret_convert + " free(c_retval);\n"
ret_convert = ret_convert + " return py_retval;\n" ret_convert = ret_convert + " return py_retval;\n"
@ -875,6 +883,7 @@ def print_function_wrapper(module, name, output, export, include):
return 0 return 0
return 1 return 1
def print_c_pointer(classname, output, export, include): def print_c_pointer(classname, output, export, include):
output.write("PyObject *\n") output.write("PyObject *\n")
output.write("libvirt_%s_pointer(PyObject *self ATTRIBUTE_UNUSED, PyObject *args)\n" % classname) output.write("libvirt_%s_pointer(PyObject *self ATTRIBUTE_UNUSED, PyObject *args)\n" % classname)
@ -896,6 +905,7 @@ def print_c_pointer(classname, output, export, include):
export.write(" { (char *)\"%s_pointer\", libvirt_%s_pointer, METH_VARARGS, NULL },\n" % export.write(" { (char *)\"%s_pointer\", libvirt_%s_pointer, METH_VARARGS, NULL },\n" %
(classname, classname)) (classname, classname))
def buildStubs(module, api_xml): def buildStubs(module, api_xml):
global py_types global py_types
global unknown_types global unknown_types
@ -1019,6 +1029,7 @@ def buildStubs(module, api_xml):
return -1 return -1
return 0 return 0
####################################################################### #######################################################################
# #
# This part writes part of the Python front-end classes based on # This part writes part of the Python front-end classes based on
@ -1075,18 +1086,18 @@ classes_destructors = {
"virInterface": "virInterfaceFree", "virInterface": "virInterfaceFree",
"virStoragePool": "virStoragePoolFree", "virStoragePool": "virStoragePoolFree",
"virStorageVol": "virStorageVolFree", "virStorageVol": "virStorageVolFree",
"virNodeDevice" : "virNodeDeviceFree", "virNodeDevice": "virNodeDeviceFree",
"virSecret": "virSecretFree", "virSecret": "virSecretFree",
"virNWFilter": "virNWFilterFree", "virNWFilter": "virNWFilterFree",
"virNWFilterBinding": "virNWFilterBindingFree", "virNWFilterBinding": "virNWFilterBindingFree",
"virDomainCheckpoint": "virDomainCheckpointFree", "virDomainCheckpoint": "virDomainCheckpointFree",
"virDomainSnapshot": "virDomainSnapshotFree", "virDomainSnapshot": "virDomainSnapshotFree",
# We hand-craft __del__ for this one # We hand-craft __del__ for this one
#"virStream": "virStreamFree", # "virStream": "virStreamFree",
} }
class_skip_connect_impl = { class_skip_connect_impl = {
"virConnect" : True, "virConnect": True,
} }
class_domain_impl = { class_domain_impl = {
@ -1126,16 +1137,19 @@ functions_int_exception_test = {
} }
functions_int_default_test = "%s == -1" functions_int_default_test = "%s == -1"
def is_integral_type (name):
return not re.search ("^(unsigned)? ?(int|long)$", name) is None def is_integral_type(name):
return not re.search("^(unsigned)? ?(int|long)$", name) is None
def is_optional_arg(info): def is_optional_arg(info):
return re.search("^\(?optional\)?", info) is not None return re.search("^\(?optional\)?", info) is not None
def is_python_noninteger_type (name):
def is_python_noninteger_type(name):
return name[-1:] == "*" return name[-1:] == "*"
def nameFixup(name, classe, type, file): def nameFixup(name, classe, type, file):
# avoid a disastrous clash # avoid a disastrous clash
listname = classe + "List" listname = classe + "List"
@ -1344,6 +1358,7 @@ def functionSortKey(info):
(index, func, name, ret, args, filename, mod) = info (index, func, name, ret, args, filename, mod) = info
return func, filename return func, filename
def writeDoc(module, name, args, indent, output): def writeDoc(module, name, args, indent, output):
if module == "libvirt": if module == "libvirt":
funcs = functions funcs = functions
@ -1359,14 +1374,15 @@ def writeDoc(module, name, args, indent, output):
output.write('"""') output.write('"""')
i = val.find("\n") i = val.find("\n")
while i >= 0: while i >= 0:
str = val[0:i+1] str = val[0:i + 1]
val = val[i+1:] val = val[i + 1:]
output.write(str) output.write(str)
i = val.find("\n") i = val.find("\n")
output.write(indent) output.write(indent)
output.write(val) output.write(val)
output.write(' """\n') output.write(' """\n')
def buildWrappers(module): def buildWrappers(module):
global ctypes global ctypes
global py_types global py_types
@ -1534,20 +1550,20 @@ def buildWrappers(module):
# For functions returning an integral type there are # For functions returning an integral type there are
# several things that we can do, depending on the # several things that we can do, depending on the
# contents of functions_int_*: # contents of functions_int_*:
elif is_integral_type (ret[0]): elif is_integral_type(ret[0]):
if name not in functions_noexcept: if name not in functions_noexcept:
if name in functions_int_exception_test: if name in functions_int_exception_test:
test = functions_int_exception_test[name] test = functions_int_exception_test[name]
else: else:
test = functions_int_default_test test = functions_int_default_test
classes.write ((" if " + test + classes.write((" if " + test +
": raise libvirtError ('%s() failed')\n") % ": raise libvirtError ('%s() failed')\n") %
("ret", name)) ("ret", name))
classes.write(" return ret\n") classes.write(" return ret\n")
elif is_python_noninteger_type (ret[0]): elif is_python_noninteger_type(ret[0]):
if name not in functions_noexcept: if name not in functions_noexcept:
classes.write ((" if %s is None" + classes.write((" if %s is None" +
": raise libvirtError ('%s() failed')\n") % ": raise libvirtError ('%s() failed')\n") %
("ret", name)) ("ret", name))
classes.write(" return ret\n") classes.write(" return ret\n")
@ -1575,39 +1591,39 @@ def buildWrappers(module):
classes.write(" # methods. This corresponds to the size of payload\n") classes.write(" # methods. This corresponds to the size of payload\n")
classes.write(" # of a stream packet.\n") classes.write(" # of a stream packet.\n")
classes.write(" streamBufSize = 262120\n\n") classes.write(" streamBufSize = 262120\n\n")
if classname in [ "virDomain", "virNetwork", "virInterface", "virStoragePool", if classname in ["virDomain", "virNetwork", "virInterface", "virStoragePool",
"virStorageVol", "virNodeDevice", "virSecret","virStream", "virStorageVol", "virNodeDevice", "virSecret", "virStream",
"virNWFilter", "virNWFilterBinding" ]: "virNWFilter", "virNWFilterBinding"]:
classes.write(" def __init__(self, conn, _obj=None):\n") classes.write(" def __init__(self, conn, _obj=None):\n")
elif classname in [ "virDomainCheckpoint", "virDomainSnapshot" ]: elif classname in ["virDomainCheckpoint", "virDomainSnapshot"]:
classes.write(" def __init__(self, dom, _obj=None):\n") classes.write(" def __init__(self, dom, _obj=None):\n")
elif classname in [ "virNetworkPort" ]: elif classname in ["virNetworkPort"]:
classes.write(" def __init__(self, net, _obj=None):\n") classes.write(" def __init__(self, net, _obj=None):\n")
else: else:
classes.write(" def __init__(self, _obj=None):\n") classes.write(" def __init__(self, _obj=None):\n")
if classname in [ "virDomain", "virNetwork", "virInterface", if classname in ["virDomain", "virNetwork", "virInterface",
"virNodeDevice", "virSecret", "virStream", "virNodeDevice", "virSecret", "virStream",
"virNWFilter", "virNWFilterBinding" ]: "virNWFilter", "virNWFilterBinding"]:
classes.write(" self._conn = conn\n") classes.write(" self._conn = conn\n")
elif classname in [ "virStorageVol", "virStoragePool" ]: elif classname in ["virStorageVol", "virStoragePool"]:
classes.write(" self._conn = conn if isinstance(conn, virConnect) else conn._conn # type: virConnect\n") classes.write(" self._conn = conn if isinstance(conn, virConnect) else conn._conn # type: virConnect\n")
elif classname in [ "virDomainCheckpoint", "virDomainSnapshot" ]: elif classname in ["virDomainCheckpoint", "virDomainSnapshot"]:
classes.write(" self._dom = dom\n") classes.write(" self._dom = dom\n")
classes.write(" self._conn = dom.connect()\n") classes.write(" self._conn = dom.connect()\n")
elif classname in [ "virNetworkPort" ]: elif classname in ["virNetworkPort"]:
classes.write(" self._net = net\n") classes.write(" self._net = net\n")
classes.write(" self._conn = net.connect()\n") classes.write(" self._conn = net.connect()\n")
classes.write(" if type(_obj).__name__ not in [\"PyCapsule\", \"PyCObject\"]:\n") classes.write(" if type(_obj).__name__ not in [\"PyCapsule\", \"PyCObject\"]:\n")
classes.write(" raise Exception(\"Expected a wrapped C Object but got %s\" % type(_obj))\n") classes.write(" raise Exception(\"Expected a wrapped C Object but got %s\" % type(_obj))\n")
classes.write(" self._o = _obj\n\n") classes.write(" self._o = _obj\n\n")
destruct=None destruct = None
if classname in classes_destructors: if classname in classes_destructors:
classes.write(" def __del__(self):\n") classes.write(" def __del__(self):\n")
classes.write(" if self._o is not None:\n") classes.write(" if self._o is not None:\n")
classes.write(" libvirtmod.%s(self._o)\n" % classes.write(" libvirtmod.%s(self._o)\n" %
classes_destructors[classname]) classes_destructors[classname])
classes.write(" self._o = None\n\n") classes.write(" self._o = None\n\n")
destruct=classes_destructors[classname] destruct = classes_destructors[classname]
if classname not in class_skip_connect_impl: if classname not in class_skip_connect_impl:
# Build python safe 'connect' method # Build python safe 'connect' method
@ -1726,7 +1742,7 @@ def buildWrappers(module):
classes.write( classes.write(
" if ret is None:raise libvirtError('%s() failed', vol=self)\n" % " if ret is None:raise libvirtError('%s() failed', vol=self)\n" %
(name)) (name))
elif classname in [ "virDomainCheckpoint", "virDomainSnapshot"]: elif classname in ["virDomainCheckpoint", "virDomainSnapshot"]:
classes.write( classes.write(
" if ret is None:raise libvirtError('%s() failed', dom=self._dom)\n" % " if ret is None:raise libvirtError('%s() failed', dom=self._dom)\n" %
(name)) (name))
@ -1752,75 +1768,75 @@ def buildWrappers(module):
# For functions returning an integral type there # For functions returning an integral type there
# are several things that we can do, depending on # are several things that we can do, depending on
# the contents of functions_int_*: # the contents of functions_int_*:
elif is_integral_type (ret[0]): elif is_integral_type(ret[0]):
if name not in functions_noexcept: if name not in functions_noexcept:
if name in functions_int_exception_test: if name in functions_int_exception_test:
test = functions_int_exception_test[name] test = functions_int_exception_test[name]
else: else:
test = functions_int_default_test test = functions_int_default_test
if classname == "virConnect": if classname == "virConnect":
classes.write ((" if " + test + classes.write((" if " + test +
": raise libvirtError ('%s() failed', conn=self)\n") % ": raise libvirtError('%s() failed', conn=self)\n") %
("ret", name)) ("ret", name))
elif classname == "virDomain": elif classname == "virDomain":
classes.write ((" if " + test + classes.write((" if " + test +
": raise libvirtError ('%s() failed', dom=self)\n") % ": raise libvirtError('%s() failed', dom=self)\n") %
("ret", name)) ("ret", name))
elif classname == "virNetwork": elif classname == "virNetwork":
classes.write ((" if " + test + classes.write((" if " + test +
": raise libvirtError ('%s() failed', net=self)\n") % ": raise libvirtError('%s() failed', net=self)\n") %
("ret", name)) ("ret", name))
elif classname == "virInterface": elif classname == "virInterface":
classes.write ((" if " + test + classes.write((" if " + test +
": raise libvirtError ('%s() failed', net=self)\n") % ": raise libvirtError('%s() failed', net=self)\n") %
("ret", name)) ("ret", name))
elif classname == "virStoragePool": elif classname == "virStoragePool":
classes.write ((" if " + test + classes.write((" if " + test +
": raise libvirtError ('%s() failed', pool=self)\n") % ": raise libvirtError('%s() failed', pool=self)\n") %
("ret", name)) ("ret", name))
elif classname == "virStorageVol": elif classname == "virStorageVol":
classes.write ((" if " + test + classes.write((" if " + test +
": raise libvirtError ('%s() failed', vol=self)\n") % ": raise libvirtError('%s() failed', vol=self)\n") %
("ret", name)) ("ret", name))
else: else:
classes.write ((" if " + test + classes.write((" if " + test +
": raise libvirtError ('%s() failed')\n") % ": raise libvirtError('%s() failed')\n") %
("ret", name)) ("ret", name))
classes.write (" return ret\n") classes.write(" return ret\n")
elif is_python_noninteger_type (ret[0]): elif is_python_noninteger_type(ret[0]):
if name not in functions_noexcept: if name not in functions_noexcept:
if classname == "virConnect": if classname == "virConnect":
classes.write ((" if %s is None" + classes.write((" if %s is None" +
": raise libvirtError ('%s() failed', conn=self)\n") % ": raise libvirtError('%s() failed', conn=self)\n") %
("ret", name)) ("ret", name))
elif classname == "virDomain": elif classname == "virDomain":
classes.write ((" if %s is None" + classes.write((" if %s is None" +
": raise libvirtError ('%s() failed', dom=self)\n") % ": raise libvirtError('%s() failed', dom=self)\n") %
("ret", name)) ("ret", name))
elif classname == "virNetwork": elif classname == "virNetwork":
classes.write ((" if %s is None" + classes.write((" if %s is None" +
": raise libvirtError ('%s() failed', net=self)\n") % ": raise libvirtError('%s() failed', net=self)\n") %
("ret", name)) ("ret", name))
elif classname == "virInterface": elif classname == "virInterface":
classes.write ((" if %s is None" + classes.write((" if %s is None" +
": raise libvirtError ('%s() failed', net=self)\n") % ": raise libvirtError('%s() failed', net=self)\n") %
("ret", name)) ("ret", name))
elif classname == "virStoragePool": elif classname == "virStoragePool":
classes.write ((" if %s is None" + classes.write((" if %s is None" +
": raise libvirtError ('%s() failed', pool=self)\n") % ": raise libvirtError('%s() failed', pool=self)\n") %
("ret", name)) ("ret", name))
elif classname == "virStorageVol": elif classname == "virStorageVol":
classes.write ((" if %s is None" + classes.write((" if %s is None" +
": raise libvirtError ('%s() failed', vol=self)\n") % ": raise libvirtError('%s() failed', vol=self)\n") %
("ret", name)) ("ret", name))
else: else:
classes.write ((" if %s is None" + classes.write((" if %s is None" +
": raise libvirtError ('%s() failed')\n") % ": raise libvirtError('%s() failed')\n") %
("ret", name)) ("ret", name))
classes.write (" return ret\n") classes.write(" return ret\n")
else: else:
classes.write(" return ret\n") classes.write(" return ret\n")
@ -1829,12 +1845,11 @@ def buildWrappers(module):
try: try:
wantfuncs = [] wantfuncs = []
extra = open("libvirt-override-" + classname + ".py", "r") extra = open("libvirt-override-" + classname + ".py", "r")
classes.write (" #\n") classes.write(" #\n")
classes.write (" # %s methods from %s.py (hand coded)\n" % (classname,classname)) classes.write(" # %s methods from %s.py (hand coded)\n" % (classname, classname))
classes.write (" #\n") classes.write(" #\n")
cached = None cached = None
# Since we compile with older libvirt, we don't want to pull # Since we compile with older libvirt, we don't want to pull
# in manually written python methods which call C methods # in manually written python methods which call C methods
# that don't exist. This code attempts to detect which # that don't exist. This code attempts to detect which
@ -1854,7 +1869,7 @@ def buildWrappers(module):
for line in extra.readlines(): for line in extra.readlines():
offset = line.find(" def ") offset = line.find(" def ")
if offset != -1: if offset != -1:
name = line[offset+5:] name = line[offset + 5:]
offset = name.find("(") offset = name.find("(")
name = name[0:offset] name = name[0:offset]
if cached is not None: if cached is not None:
@ -1890,7 +1905,7 @@ def buildWrappers(module):
# Resolve only one level of reference # Resolve only one level of reference
def resolveEnum(enum, data): def resolveEnum(enum, data):
for name,val in enum.items(): for name, val in enum.items():
try: try:
int(val) int(val)
except ValueError: except ValueError:
@ -1900,19 +1915,19 @@ def buildWrappers(module):
enumvals = list(enums.items()) enumvals = list(enums.items())
# convert list of dicts to one dict # convert list of dicts to one dict
enumData = {} enumData = {}
for type,enum in enumvals: for type, enum in enumvals:
enumData.update(enum) enumData.update(enum)
if enumvals is not None: if enumvals is not None:
enumvals.sort(key=lambda x: x[0]) enumvals.sort(key=lambda x: x[0])
for type,enum in enumvals: for type, enum in enumvals:
classes.write("# %s\n" % type) classes.write("# %s\n" % type)
items = list(resolveEnum(enum, enumData).items()) items = list(resolveEnum(enum, enumData).items())
items.sort(key=enumsSortKey) items.sort(key=enumsSortKey)
if items[-1][0].endswith('_LAST'): if items[-1][0].endswith('_LAST'):
del items[-1] del items[-1]
for name,value in items: for name, value in items:
classes.write("%s = %s\n" % (name,value)) classes.write("%s = %s\n" % (name, value))
classes.write("\n") classes.write("\n")
classes.write("# typed parameter names\n") classes.write("# typed parameter names\n")
@ -1921,6 +1936,7 @@ def buildWrappers(module):
classes.close() classes.close()
def qemuBuildWrappers(module): def qemuBuildWrappers(module):
global qemu_functions global qemu_functions
@ -2027,12 +2043,12 @@ def qemuBuildWrappers(module):
# #
# Generate enum constants # Generate enum constants
# #
for type,enum in sorted(qemu_enums.items()): for type, enum in sorted(qemu_enums.items()):
fd.write("# %s\n" % type) fd.write("# %s\n" % type)
items = list(enum.items()) items = list(enum.items())
items.sort(key=lambda i: (int(i[1]), i[0])) items.sort(key=lambda i: (int(i[1]), i[0]))
for name,value in items: for name, value in items:
fd.write("%s = %s\n" % (name,value)) fd.write("%s = %s\n" % (name, value))
fd.write("\n") fd.write("\n")
fd.close() fd.close()
@ -2142,12 +2158,12 @@ def lxcBuildWrappers(module):
# #
# Generate enum constants # Generate enum constants
# #
for type,enum in sorted(lxc_enums.items()): for type, enum in sorted(lxc_enums.items()):
fd.write("# %s\n" % type) fd.write("# %s\n" % type)
items = list(enum.items()) items = list(enum.items())
items.sort(key=lambda i: (int(i[1]), i[0])) items.sort(key=lambda i: (int(i[1]), i[0]))
for name,value in items: for name, value in items:
fd.write("%s = %s\n" % (name,value)) fd.write("%s = %s\n" % (name, value))
fd.write("\n") fd.write("\n")
fd.close() fd.close()

View File

@ -1,6 +1,6 @@
def __del__(self): def __del__(self):
try: try:
for cb,opaque in self.domainEventCallbacks.items(): for cb, opaque in self.domainEventCallbacks.items():
del self.domainEventCallbacks[cb] del self.domainEventCallbacks[cb]
del self.domainEventCallbacks del self.domainEventCallbacks
libvirtmod.virConnectDomainEventDeregister(self._o, self) libvirtmod.virConnectDomainEventDeregister(self._o, self)
@ -25,7 +25,8 @@
if len(self.domainEventCallbacks) == 0: if len(self.domainEventCallbacks) == 0:
del self.domainEventCallbacks del self.domainEventCallbacks
ret = libvirtmod.virConnectDomainEventDeregister(self._o, self) ret = libvirtmod.virConnectDomainEventDeregister(self._o, self)
if ret == -1: raise libvirtError ('virConnectDomainEventDeregister() failed', conn=self) if ret == -1:
raise libvirtError('virConnectDomainEventDeregister() failed', conn=self)
except AttributeError: except AttributeError:
pass pass
@ -35,15 +36,16 @@
try: try:
self.domainEventCallbacks[cb] = opaque self.domainEventCallbacks[cb] = opaque
except AttributeError: except AttributeError:
self.domainEventCallbacks = {cb:opaque} self.domainEventCallbacks = {cb: opaque}
ret = libvirtmod.virConnectDomainEventRegister(self._o, self) ret = libvirtmod.virConnectDomainEventRegister(self._o, self)
if ret == -1: raise libvirtError ('virConnectDomainEventRegister() failed', conn=self) if ret == -1:
raise libvirtError('virConnectDomainEventRegister() failed', conn=self)
def _dispatchDomainEventCallbacks(self, dom, event, detail): def _dispatchDomainEventCallbacks(self, dom, event, detail):
"""Dispatches events to python user domain event callbacks """Dispatches events to python user domain event callbacks
""" """
try: try:
for cb,opaque in self.domainEventCallbacks.items(): for cb, opaque in self.domainEventCallbacks.items():
cb(self, virDomain(self, _obj=dom), event, detail, opaque) cb(self, virDomain(self, _obj=dom), event, detail, opaque)
return 0 return 0
except AttributeError: except AttributeError:
@ -73,7 +75,7 @@
cb = cbData["cb"] cb = cbData["cb"]
opaque = cbData["opaque"] opaque = cbData["opaque"]
cb(self, virDomain(self, _obj=dom), offset ,opaque) cb(self, virDomain(self, _obj=dom), offset, opaque)
return 0 return 0
def _dispatchDomainEventWatchdogCallback(self, dom, action, cbData): def _dispatchDomainEventWatchdogCallback(self, dom, action, cbData):
@ -272,7 +274,8 @@
domain callback will disable delivery of this event type """ domain callback will disable delivery of this event type """
try: try:
ret = libvirtmod.virConnectDomainEventDeregisterAny(self._o, callbackID) ret = libvirtmod.virConnectDomainEventDeregisterAny(self._o, callbackID)
if ret == -1: raise libvirtError ('virConnectDomainEventDeregisterAny() failed', conn=self) if ret == -1:
raise libvirtError('virConnectDomainEventDeregisterAny() failed', conn=self)
del self.domainEventCallbackID[callbackID] del self.domainEventCallbackID[callbackID]
except AttributeError: except AttributeError:
pass pass
@ -291,7 +294,8 @@
network callback will disable delivery of this event type""" network callback will disable delivery of this event type"""
try: try:
ret = libvirtmod.virConnectNetworkEventDeregisterAny(self._o, callbackID) ret = libvirtmod.virConnectNetworkEventDeregisterAny(self._o, callbackID)
if ret == -1: raise libvirtError ('virConnectNetworkEventDeregisterAny() failed', conn=self) if ret == -1:
raise libvirtError('virConnectNetworkEventDeregisterAny() failed', conn=self)
del self.networkEventCallbackID[callbackID] del self.networkEventCallbackID[callbackID]
except AttributeError: except AttributeError:
pass pass
@ -301,13 +305,13 @@
callback will enable delivery of the events""" callback will enable delivery of the events"""
if not hasattr(self, 'networkEventCallbackID'): if not hasattr(self, 'networkEventCallbackID'):
self.networkEventCallbackID = {} self.networkEventCallbackID = {}
cbData = { "cb": cb, "conn": self, "opaque": opaque } cbData = {"cb": cb, "conn": self, "opaque": opaque}
if net is None: if net is None:
ret = libvirtmod.virConnectNetworkEventRegisterAny(self._o, None, eventID, cbData) ret = libvirtmod.virConnectNetworkEventRegisterAny(self._o, None, eventID, cbData)
else: else:
ret = libvirtmod.virConnectNetworkEventRegisterAny(self._o, net._o, eventID, cbData) ret = libvirtmod.virConnectNetworkEventRegisterAny(self._o, net._o, eventID, cbData)
if ret == -1: if ret == -1:
raise libvirtError ('virConnectNetworkEventRegisterAny() failed', conn=self) raise libvirtError('virConnectNetworkEventRegisterAny() failed', conn=self)
self.networkEventCallbackID[ret] = opaque self.networkEventCallbackID[ret] = opaque
return ret return ret
@ -316,13 +320,13 @@
callback will enable delivery of the events """ callback will enable delivery of the events """
if not hasattr(self, 'domainEventCallbackID'): if not hasattr(self, 'domainEventCallbackID'):
self.domainEventCallbackID = {} self.domainEventCallbackID = {}
cbData = { "cb": cb, "conn": self, "opaque": opaque } cbData = {"cb": cb, "conn": self, "opaque": opaque}
if dom is None: if dom is None:
ret = libvirtmod.virConnectDomainEventRegisterAny(self._o, None, eventID, cbData) ret = libvirtmod.virConnectDomainEventRegisterAny(self._o, None, eventID, cbData)
else: else:
ret = libvirtmod.virConnectDomainEventRegisterAny(self._o, dom._o, eventID, cbData) ret = libvirtmod.virConnectDomainEventRegisterAny(self._o, dom._o, eventID, cbData)
if ret == -1: if ret == -1:
raise libvirtError ('virConnectDomainEventRegisterAny() failed', conn=self) raise libvirtError('virConnectDomainEventRegisterAny() failed', conn=self)
self.domainEventCallbackID[ret] = opaque self.domainEventCallbackID[ret] = opaque
return ret return ret
@ -351,7 +355,8 @@
storage pool callback will disable delivery of this event type""" storage pool callback will disable delivery of this event type"""
try: try:
ret = libvirtmod.virConnectStoragePoolEventDeregisterAny(self._o, callbackID) ret = libvirtmod.virConnectStoragePoolEventDeregisterAny(self._o, callbackID)
if ret == -1: raise libvirtError ('virConnectStoragePoolEventDeregisterAny() failed', conn=self) if ret == -1:
raise libvirtError('virConnectStoragePoolEventDeregisterAny() failed', conn=self)
del self.storagePoolEventCallbackID[callbackID] del self.storagePoolEventCallbackID[callbackID]
except AttributeError: except AttributeError:
pass pass
@ -361,13 +366,13 @@
callback will enable delivery of the events""" callback will enable delivery of the events"""
if not hasattr(self, 'storagePoolEventCallbackID'): if not hasattr(self, 'storagePoolEventCallbackID'):
self.storagePoolEventCallbackID = {} self.storagePoolEventCallbackID = {}
cbData = { "cb": cb, "conn": self, "opaque": opaque } cbData = {"cb": cb, "conn": self, "opaque": opaque}
if pool is None: if pool is None:
ret = libvirtmod.virConnectStoragePoolEventRegisterAny(self._o, None, eventID, cbData) ret = libvirtmod.virConnectStoragePoolEventRegisterAny(self._o, None, eventID, cbData)
else: else:
ret = libvirtmod.virConnectStoragePoolEventRegisterAny(self._o, pool._o, eventID, cbData) ret = libvirtmod.virConnectStoragePoolEventRegisterAny(self._o, pool._o, eventID, cbData)
if ret == -1: if ret == -1:
raise libvirtError ('virConnectStoragePoolEventRegisterAny() failed', conn=self) raise libvirtError('virConnectStoragePoolEventRegisterAny() failed', conn=self)
self.storagePoolEventCallbackID[ret] = opaque self.storagePoolEventCallbackID[ret] = opaque
return ret return ret
@ -396,7 +401,8 @@
node device callback will disable delivery of this event type""" node device callback will disable delivery of this event type"""
try: try:
ret = libvirtmod.virConnectNodeDeviceEventDeregisterAny(self._o, callbackID) ret = libvirtmod.virConnectNodeDeviceEventDeregisterAny(self._o, callbackID)
if ret == -1: raise libvirtError ('virConnectNodeDeviceEventDeregisterAny() failed', conn=self) if ret == -1:
raise libvirtError('virConnectNodeDeviceEventDeregisterAny() failed', conn=self)
del self.nodeDeviceEventCallbackID[callbackID] del self.nodeDeviceEventCallbackID[callbackID]
except AttributeError: except AttributeError:
pass pass
@ -406,13 +412,13 @@
callback will enable delivery of the events""" callback will enable delivery of the events"""
if not hasattr(self, 'nodeDeviceEventCallbackID'): if not hasattr(self, 'nodeDeviceEventCallbackID'):
self.nodeDeviceEventCallbackID = {} self.nodeDeviceEventCallbackID = {}
cbData = { "cb": cb, "conn": self, "opaque": opaque } cbData = {"cb": cb, "conn": self, "opaque": opaque}
if dev is None: if dev is None:
ret = libvirtmod.virConnectNodeDeviceEventRegisterAny(self._o, None, eventID, cbData) ret = libvirtmod.virConnectNodeDeviceEventRegisterAny(self._o, None, eventID, cbData)
else: else:
ret = libvirtmod.virConnectNodeDeviceEventRegisterAny(self._o, dev._o, eventID, cbData) ret = libvirtmod.virConnectNodeDeviceEventRegisterAny(self._o, dev._o, eventID, cbData)
if ret == -1: if ret == -1:
raise libvirtError ('virConnectNodeDeviceEventRegisterAny() failed', conn=self) raise libvirtError('virConnectNodeDeviceEventRegisterAny() failed', conn=self)
self.nodeDeviceEventCallbackID[ret] = opaque self.nodeDeviceEventCallbackID[ret] = opaque
return ret return ret
@ -439,7 +445,8 @@
secret callback will disable delivery of this event type""" secret callback will disable delivery of this event type"""
try: try:
ret = libvirtmod.virConnectSecretEventDeregisterAny(self._o, callbackID) ret = libvirtmod.virConnectSecretEventDeregisterAny(self._o, callbackID)
if ret == -1: raise libvirtError ('virConnectSecretEventDeregisterAny() failed', conn=self) if ret == -1:
raise libvirtError('virConnectSecretEventDeregisterAny() failed', conn=self)
del self.secretEventCallbackID[callbackID] del self.secretEventCallbackID[callbackID]
except AttributeError: except AttributeError:
pass pass
@ -449,13 +456,13 @@
callback will enable delivery of the events""" callback will enable delivery of the events"""
if not hasattr(self, 'secretEventCallbackID'): if not hasattr(self, 'secretEventCallbackID'):
self.secretEventCallbackID = {} self.secretEventCallbackID = {}
cbData = { "cb": cb, "conn": self, "opaque": opaque } cbData = {"cb": cb, "conn": self, "opaque": opaque}
if secret is None: if secret is None:
ret = libvirtmod.virConnectSecretEventRegisterAny(self._o, None, eventID, cbData) ret = libvirtmod.virConnectSecretEventRegisterAny(self._o, None, eventID, cbData)
else: else:
ret = libvirtmod.virConnectSecretEventRegisterAny(self._o, secret._o, eventID, cbData) ret = libvirtmod.virConnectSecretEventRegisterAny(self._o, secret._o, eventID, cbData)
if ret == -1: if ret == -1:
raise libvirtError ('virConnectSecretEventRegisterAny() failed', conn=self) raise libvirtError('virConnectSecretEventRegisterAny() failed', conn=self)
self.secretEventCallbackID[ret] = opaque self.secretEventCallbackID[ret] = opaque
return ret return ret
@ -563,19 +570,19 @@
cb(self, reason, opaque) cb(self, reason, opaque)
return 0 return 0
def unregisterCloseCallback(self): def unregisterCloseCallback(self):
"""Removes a close event callback""" """Removes a close event callback"""
ret = libvirtmod.virConnectUnregisterCloseCallback(self._o) ret = libvirtmod.virConnectUnregisterCloseCallback(self._o)
if ret == -1: raise libvirtError ('virConnectUnregisterCloseCallback() failed', conn=self) if ret == -1:
raise libvirtError('virConnectUnregisterCloseCallback() failed', conn=self)
def registerCloseCallback(self, cb, opaque): def registerCloseCallback(self, cb, opaque):
"""Adds a close event callback, providing a notification """Adds a close event callback, providing a notification
when a connection fails / closes""" when a connection fails / closes"""
cbData = { "cb": cb, "conn": self, "opaque": opaque } cbData = {"cb": cb, "conn": self, "opaque": opaque}
ret = libvirtmod.virConnectRegisterCloseCallback(self._o, cbData) ret = libvirtmod.virConnectRegisterCloseCallback(self._o, cbData)
if ret == -1: if ret == -1:
raise libvirtError ('virConnectRegisterCloseCallback() failed', conn=self) raise libvirtError('virConnectRegisterCloseCallback() failed', conn=self)
return ret return ret
def createXMLWithFiles(self, xmlDesc, files, flags=0): def createXMLWithFiles(self, xmlDesc, files, flags=0):
@ -604,11 +611,12 @@
libvirtd daemon. Any domains marked for auto destroy will libvirtd daemon. Any domains marked for auto destroy will
block attempts at migration, save-to-file, or snapshots. """ block attempts at migration, save-to-file, or snapshots. """
ret = libvirtmod.virDomainCreateXMLWithFiles(self._o, xmlDesc, files, flags) ret = libvirtmod.virDomainCreateXMLWithFiles(self._o, xmlDesc, files, flags)
if ret is None:raise libvirtError('virDomainCreateXMLWithFiles() failed', conn=self) if ret is None:
__tmp = virDomain(self,_obj=ret) raise libvirtError('virDomainCreateXMLWithFiles() failed', conn=self)
__tmp = virDomain(self, _obj=ret)
return __tmp return __tmp
def getAllDomainStats(self, stats = 0, flags=0): def getAllDomainStats(self, stats=0, flags=0):
"""Query statistics for all domains on a given connection. """Query statistics for all domains on a given connection.
Report statistics of various parameters for a running VM according to @stats Report statistics of various parameters for a running VM according to @stats
@ -656,7 +664,7 @@
retlist = list() retlist = list()
for elem in ret: for elem in ret:
record = (virDomain(self, _obj=elem[0]) , elem[1]) record = (virDomain(self, _obj=elem[0]), elem[1])
retlist.append(record) retlist.append(record)
return retlist return retlist
@ -703,7 +711,7 @@
retlist = list() retlist = list()
for elem in ret: for elem in ret:
record = (virDomain(self, _obj=elem[0]) , elem[1]) record = (virDomain(self, _obj=elem[0]), elem[1])
retlist.append(record) retlist.append(record)
return retlist return retlist

View File

@ -10,7 +10,6 @@
return retlist return retlist
def listAllCheckpoints(self, flags=0): def listAllCheckpoints(self, flags=0):
"""List all checkpoints and returns a list of checkpoint objects""" """List all checkpoints and returns a list of checkpoint objects"""
ret = libvirtmod.virDomainListAllCheckpoints(self._o, flags) ret = libvirtmod.virDomainListAllCheckpoints(self._o, flags)
@ -23,7 +22,6 @@
return retlist return retlist
def createWithFiles(self, files, flags=0): def createWithFiles(self, files, flags=0):
"""Launch a defined domain. If the call succeeds the domain moves from the """Launch a defined domain. If the call succeeds the domain moves from the
defined to the running domains pools. defined to the running domains pools.
@ -58,30 +56,35 @@
If the VIR_DOMAIN_START_FORCE_BOOT flag is set, then any managed save If the VIR_DOMAIN_START_FORCE_BOOT flag is set, then any managed save
file for this domain is discarded, and the domain boots from scratch. """ file for this domain is discarded, and the domain boots from scratch. """
ret = libvirtmod.virDomainCreateWithFiles(self._o, files, flags) ret = libvirtmod.virDomainCreateWithFiles(self._o, files, flags)
if ret == -1: raise libvirtError ('virDomainCreateWithFiles() failed', dom=self) if ret == -1:
raise libvirtError('virDomainCreateWithFiles() failed', dom=self)
return ret return ret
def fsFreeze(self, mountpoints=None, flags=0): def fsFreeze(self, mountpoints=None, flags=0):
"""Freeze specified filesystems within the guest """ """Freeze specified filesystems within the guest """
ret = libvirtmod.virDomainFSFreeze(self._o, mountpoints, flags) ret = libvirtmod.virDomainFSFreeze(self._o, mountpoints, flags)
if ret == -1: raise libvirtError ('virDomainFSFreeze() failed', dom=self) if ret == -1:
raise libvirtError('virDomainFSFreeze() failed', dom=self)
return ret return ret
def fsThaw(self, mountpoints=None, flags=0): def fsThaw(self, mountpoints=None, flags=0):
"""Thaw specified filesystems within the guest """ """Thaw specified filesystems within the guest """
ret = libvirtmod.virDomainFSThaw(self._o, mountpoints, flags) ret = libvirtmod.virDomainFSThaw(self._o, mountpoints, flags)
if ret == -1: raise libvirtError ('virDomainFSThaw() failed', dom=self) if ret == -1:
raise libvirtError('virDomainFSThaw() failed', dom=self)
return ret return ret
def getTime(self, flags=0): def getTime(self, flags=0):
"""Extract information about guest time """ """Extract information about guest time """
ret = libvirtmod.virDomainGetTime(self._o, flags) ret = libvirtmod.virDomainGetTime(self._o, flags)
if ret == None: raise libvirtError ('virDomainGetTime() failed', dom=self) if ret == None:
raise libvirtError('virDomainGetTime() failed', dom=self)
return ret return ret
def setTime(self, time=None, flags=0): def setTime(self, time=None, flags=0):
"""Set guest time to the given value. @time is a dict containing """Set guest time to the given value. @time is a dict containing
'seconds' field for seconds and 'nseconds' field for nanoseconds """ 'seconds' field for seconds and 'nseconds' field for nanoseconds """
ret = libvirtmod.virDomainSetTime(self._o, time, flags) ret = libvirtmod.virDomainSetTime(self._o, time, flags)
if ret == -1: raise libvirtError ('virDomainSetTime() failed', dom=self) if ret == -1:
raise libvirtError('virDomainSetTime() failed', dom=self)
return ret return ret

View File

@ -21,9 +21,10 @@
def eventAddCallback(self, events, cb, opaque): def eventAddCallback(self, events, cb, opaque):
self.cb = cb self.cb = cb
cbData = {"stream": self, "cb" : cb, "opaque" : opaque} cbData = {"stream": self, "cb": cb, "opaque": opaque}
ret = libvirtmod.virStreamEventAddCallback(self._o, events, cbData) ret = libvirtmod.virStreamEventAddCallback(self._o, events, cbData)
if ret == -1: raise libvirtError ('virStreamEventAddCallback() failed') if ret == -1:
raise libvirtError('virStreamEventAddCallback() failed')
def recvAll(self, handler, opaque): def recvAll(self, handler, opaque):
"""Receive the entire data stream, sending the data to the """Receive the entire data stream, sending the data to the
@ -105,7 +106,8 @@
the request would block, integer -2 is returned. the request would block, integer -2 is returned.
""" """
ret = libvirtmod.virStreamRecv(self._o, nbytes) ret = libvirtmod.virStreamRecv(self._o, nbytes)
if ret is None: raise libvirtError ('virStreamRecv() failed') if ret is None:
raise libvirtError('virStreamRecv() failed')
return ret return ret
def send(self, data): def send(self, data):
@ -123,20 +125,22 @@
subsequent call. subsequent call.
""" """
ret = libvirtmod.virStreamSend(self._o, data) ret = libvirtmod.virStreamSend(self._o, data)
if ret == -1: raise libvirtError ('virStreamSend() failed') if ret == -1:
raise libvirtError('virStreamSend() failed')
return ret return ret
def recvHole(self, flags = 0): def recvHole(self, flags=0):
"""This method is used to determine the length in bytes """This method is used to determine the length in bytes
of the empty space to be created in a stream's target of the empty space to be created in a stream's target
file when uploading or downloading sparsely populated file when uploading or downloading sparsely populated
files. This is the counterpart to sendHole. files. This is the counterpart to sendHole.
""" """
ret = libvirtmod.virStreamRecvHole(self._o, flags) ret = libvirtmod.virStreamRecvHole(self._o, flags)
if ret is None: raise libvirtError ('virStreamRecvHole() failed') if ret is None:
raise libvirtError('virStreamRecvHole() failed')
return ret return ret
def sendHole(self, length, flags = 0): def sendHole(self, length, flags=0):
"""Rather than transmitting empty file space, this method """Rather than transmitting empty file space, this method
directs the stream target to create length bytes of empty directs the stream target to create length bytes of empty
space. This method would be used when uploading or space. This method would be used when uploading or
@ -144,10 +148,11 @@
needless copy of empty file space. needless copy of empty file space.
""" """
ret = libvirtmod.virStreamSendHole(self._o, length, flags) ret = libvirtmod.virStreamSendHole(self._o, length, flags)
if ret == -1: raise libvirtError('virStreamSendHole() failed') if ret == -1:
raise libvirtError('virStreamSendHole() failed')
return ret return ret
def recvFlags(self, nbytes, flags = 0): def recvFlags(self, nbytes, flags=0):
"""Reads a series of bytes from the stream. This method may """Reads a series of bytes from the stream. This method may
block the calling application for an arbitrary amount block the calling application for an arbitrary amount
of time. This is just like recv except it has flags of time. This is just like recv except it has flags
@ -162,7 +167,8 @@
the request would block, integer -2 is returned. the request would block, integer -2 is returned.
""" """
ret = libvirtmod.virStreamRecvFlags(self._o, nbytes, flags) ret = libvirtmod.virStreamRecvFlags(self._o, nbytes, flags)
if ret is None: raise libvirtError ('virStreamRecvFlags() failed') if ret is None:
raise libvirtError('virStreamRecvFlags() failed')
return ret return ret
def sparseRecvAll(self, handler, holeHandler, opaque): def sparseRecvAll(self, handler, holeHandler, opaque):

View File

@ -78,6 +78,7 @@ class libvirtError(Exception):
return None return None
return self.err[8] return self.err[8]
# #
# register the libvirt global error handler # register the libvirt global error handler
# #
@ -86,18 +87,20 @@ def registerErrorHandler(f, ctx):
The function is called back as f(ctx, error), with error The function is called back as f(ctx, error), with error
being a list of information about the error being raised. being a list of information about the error being raised.
Returns 1 in case of success.""" Returns 1 in case of success."""
return libvirtmod.virRegisterErrorHandler(f,ctx) return libvirtmod.virRegisterErrorHandler(f, ctx)
def openAuth(uri, auth, flags=0): def openAuth(uri, auth, flags=0):
ret = libvirtmod.virConnectOpenAuth(uri, auth, flags) ret = libvirtmod.virConnectOpenAuth(uri, auth, flags)
if ret is None:raise libvirtError('virConnectOpenAuth() failed') if ret is None:
raise libvirtError('virConnectOpenAuth() failed')
return virConnect(_obj=ret) return virConnect(_obj=ret)
# #
# Return library version. # Return library version.
# #
def getVersion (name = None): def getVersion(name=None):
"""If no name parameter is passed (or name is None) then the """If no name parameter is passed (or name is None) then the
version of the libvirt library is returned as an integer. version of the libvirt library is returned as an integer.
@ -110,10 +113,11 @@ def getVersion (name = None):
Versions numbers are integers: 1000000*major + 1000*minor + release.""" Versions numbers are integers: 1000000*major + 1000*minor + release."""
if name is None: if name is None:
ret = libvirtmod.virGetVersion () ret = libvirtmod.virGetVersion()
else: else:
ret = libvirtmod.virGetVersion (name) ret = libvirtmod.virGetVersion(name)
if ret is None: raise libvirtError ("virGetVersion() failed") if ret is None:
raise libvirtError("virGetVersion() failed")
return ret return ret
@ -137,6 +141,7 @@ def _eventInvokeHandleCallback(watch, fd, event, opaque, opaquecompat=None):
libvirtmod.virEventInvokeHandleCallback(watch, fd, event, callback, opaque) libvirtmod.virEventInvokeHandleCallback(watch, fd, event, callback, opaque)
# #
# Invoke an EventTimeout callback # Invoke an EventTimeout callback
# #
@ -157,6 +162,7 @@ def _eventInvokeTimeoutCallback(timer, opaque, opaquecompat=None):
libvirtmod.virEventInvokeTimeoutCallback(timer, callback, opaque) libvirtmod.virEventInvokeTimeoutCallback(timer, callback, opaque)
def _dispatchEventHandleCallback(watch, fd, events, cbData): def _dispatchEventHandleCallback(watch, fd, events, cbData):
cb = cbData["cb"] cb = cbData["cb"]
opaque = cbData["opaque"] opaque = cbData["opaque"]
@ -164,6 +170,7 @@ def _dispatchEventHandleCallback(watch, fd, events, cbData):
cb(watch, fd, events, opaque) cb(watch, fd, events, opaque)
return 0 return 0
def _dispatchEventTimeoutCallback(timer, cbData): def _dispatchEventTimeoutCallback(timer, cbData):
cb = cbData["cb"] cb = cbData["cb"]
opaque = cbData["opaque"] opaque = cbData["opaque"]
@ -171,6 +178,7 @@ def _dispatchEventTimeoutCallback(timer, cbData):
cb(timer, opaque) cb(timer, opaque)
return 0 return 0
def virEventAddHandle(fd, events, cb, opaque): def virEventAddHandle(fd, events, cb, opaque):
""" """
register a callback for monitoring file handle events register a callback for monitoring file handle events
@ -186,11 +194,13 @@ def virEventAddHandle(fd, events, cb, opaque):
events, # int bitmap of events that have occurred events, # int bitmap of events that have occurred
opaque): # opaque data passed to eventAddHandle opaque): # opaque data passed to eventAddHandle
""" """
cbData = {"cb" : cb, "opaque" : opaque} cbData = {"cb": cb, "opaque": opaque}
ret = libvirtmod.virEventAddHandle(fd, events, cbData) ret = libvirtmod.virEventAddHandle(fd, events, cbData)
if ret == -1: raise libvirtError ('virEventAddHandle() failed') if ret == -1:
raise libvirtError('virEventAddHandle() failed')
return ret return ret
def virEventAddTimeout(timeout, cb, opaque): def virEventAddTimeout(timeout, cb, opaque):
""" """
register a callback for a timer event register a callback for a timer event
@ -206,9 +216,10 @@ def virEventAddTimeout(timeout, cb, opaque):
def cb(timer, # int id of the timer def cb(timer, # int id of the timer
opaque): # opaque data passed to eventAddTimeout opaque): # opaque data passed to eventAddTimeout
""" """
cbData = {"cb" : cb, "opaque" : opaque} cbData = {"cb": cb, "opaque": opaque}
ret = libvirtmod.virEventAddTimeout(timeout, cbData) ret = libvirtmod.virEventAddTimeout(timeout, cbData)
if ret == -1: raise libvirtError ('virEventAddTimeout() failed') if ret == -1:
raise libvirtError('virEventAddTimeout() failed')
return ret return ret

View File

@ -1,5 +1,6 @@
# Manually written part of python bindings for libvirt-qemu # Manually written part of python bindings for libvirt-qemu
def _dispatchQemuMonitorEventCallback(conn, dom, event, seconds, micros, details, cbData): def _dispatchQemuMonitorEventCallback(conn, dom, event, seconds, micros, details, cbData):
"""Dispatches events to python user qemu monitor event callbacks """Dispatches events to python user qemu monitor event callbacks
""" """
@ -9,27 +10,30 @@ def _dispatchQemuMonitorEventCallback(conn, dom, event, seconds, micros, details
cb(conn, libvirt.virDomain(conn, _obj=dom), event, seconds, micros, details, opaque) cb(conn, libvirt.virDomain(conn, _obj=dom), event, seconds, micros, details, opaque)
return 0 return 0
def qemuMonitorEventDeregister(conn, callbackID): def qemuMonitorEventDeregister(conn, callbackID):
"""Removes a qemu monitor event callback. De-registering for a callback """Removes a qemu monitor event callback. De-registering for a callback
will disable delivery of this event type""" will disable delivery of this event type"""
try: try:
ret = libvirtmod_qemu.virConnectDomainQemuMonitorEventDeregister(conn._o, callbackID) ret = libvirtmod_qemu.virConnectDomainQemuMonitorEventDeregister(conn._o, callbackID)
if ret == -1: raise libvirt.libvirtError ('virConnectDomainQemuMonitorEventDeregister() failed') if ret == -1:
raise libvirt.libvirtError('virConnectDomainQemuMonitorEventDeregister() failed')
del conn.qemuMonitorEventCallbackID[callbackID] del conn.qemuMonitorEventCallbackID[callbackID]
except AttributeError: except AttributeError:
pass pass
def qemuMonitorEventRegister(conn, dom, event, cb, opaque, flags=0): def qemuMonitorEventRegister(conn, dom, event, cb, opaque, flags=0):
"""Adds a qemu monitor event callback. Registering for a monitor """Adds a qemu monitor event callback. Registering for a monitor
callback will enable delivery of the events""" callback will enable delivery of the events"""
if not hasattr(conn, 'qemuMonitorEventCallbackID'): if not hasattr(conn, 'qemuMonitorEventCallbackID'):
conn.qemuMonitorEventCallbackID = {} conn.qemuMonitorEventCallbackID = {}
cbData = { "cb": cb, "conn": conn, "opaque": opaque } cbData = {"cb": cb, "conn": conn, "opaque": opaque}
if dom is None: if dom is None:
ret = libvirtmod_qemu.virConnectDomainQemuMonitorEventRegister(conn._o, None, event, cbData, flags) ret = libvirtmod_qemu.virConnectDomainQemuMonitorEventRegister(conn._o, None, event, cbData, flags)
else: else:
ret = libvirtmod_qemu.virConnectDomainQemuMonitorEventRegister(conn._o, dom._o, event, cbData, flags) ret = libvirtmod_qemu.virConnectDomainQemuMonitorEventRegister(conn._o, dom._o, event, cbData, flags)
if ret == -1: if ret == -1:
raise libvirt.libvirtError ('virConnectDomainQemuMonitorEventRegister() failed') raise libvirt.libvirtError('virConnectDomainQemuMonitorEventRegister() failed')
conn.qemuMonitorEventCallbackID[ret] = opaque conn.qemuMonitorEventCallbackID[ret] = opaque
return ret return ret

View File

@ -78,6 +78,7 @@ class Callback(object):
self.impl.log.debug('callback %d close(), scheduling ff', self.iden) self.impl.log.debug('callback %d close(), scheduling ff', self.iden)
self.impl.schedule_ff_callback(self.iden, self.opaque) self.impl.schedule_ff_callback(self.iden, self.opaque)
# #
# file descriptors # file descriptors
# #
@ -161,6 +162,7 @@ class Descriptor(object):
self.update() self.update()
return callback return callback
class DescriptorDict(dict): class DescriptorDict(dict):
'''Descriptors collection '''Descriptors collection
@ -175,6 +177,7 @@ class DescriptorDict(dict):
self[fd] = descriptor self[fd] = descriptor
return descriptor return descriptor
class FDCallback(Callback): class FDCallback(Callback):
'''Callback for file descriptor (watcher) '''Callback for file descriptor (watcher)
@ -197,6 +200,7 @@ class FDCallback(Callback):
self.event = event self.event = event
self.descriptor.update() self.descriptor.update()
# #
# timeouts # timeouts
# #
@ -254,6 +258,7 @@ class TimeoutCallback(Callback):
self.update(timeout=-1) self.update(timeout=-1)
super(TimeoutCallback, self).close() super(TimeoutCallback, self).close()
# #
# main implementation # main implementation
# #
@ -448,10 +453,13 @@ class virEventAsyncIOImpl(object):
_current_impl = None _current_impl = None
def getCurrentImpl(): def getCurrentImpl():
'''Return the current implementation, or None if not yet registered''' '''Return the current implementation, or None if not yet registered'''
return _current_impl return _current_impl
def virEventRegisterAsyncIOImpl(loop=None): def virEventRegisterAsyncIOImpl(loop=None):
'''Arrange for libvirt's callbacks to be dispatched via asyncio event loop '''Arrange for libvirt's callbacks to be dispatched via asyncio event loop

View File

@ -22,6 +22,7 @@ def get_libvirt_api_xml_path():
sys.exit(proc.returncode) sys.exit(proc.returncode)
return stdout.splitlines()[0] return stdout.splitlines()[0]
# Path to the libvirt API XML file # Path to the libvirt API XML file
if len(sys.argv) >= 3: if len(sys.argv) >= 3:
xml = sys.argv[2] xml = sys.argv[2]
@ -96,7 +97,7 @@ for n in set:
# Phase 2: Identify all classes and methods in the 'libvirt' python module # Phase 2: Identify all classes and methods in the 'libvirt' python module
gotenums = [] gotenums = []
gottypes = [] gottypes = []
gotfunctions = { "libvirt": [] } gotfunctions = {"libvirt": []}
for name in dir(libvirt): for name in dir(libvirt):
if name[0] == '_': if name[0] == '_':
@ -188,7 +189,6 @@ for cname in wantfunctions:
name.endswith("Callback")): name.endswith("Callback")):
continue continue
# virEvent APIs go into main 'libvirt' namespace not any class # virEvent APIs go into main 'libvirt' namespace not any class
if name[0:8] == "virEvent": if name[0:8] == "virEvent":
if name[-4:] == "Func": if name[-4:] == "Func":
@ -231,7 +231,6 @@ for name in sorted(basicklassmap):
else: else:
continue continue
# All the error handling methods need special handling # All the error handling methods need special handling
if klass == "libvirt": if klass == "libvirt":
if func in ["CopyLastError", "DefaultErrorFunc", if func in ["CopyLastError", "DefaultErrorFunc",
@ -264,7 +263,7 @@ for name in sorted(basicklassmap):
"LookupByUUIDString", "LookupByVolume" "LookupByName", "LookupByUUIDString", "LookupByVolume" "LookupByName",
"LookupByID", "LookupByName", "LookupByKey", "LookupByPath", "LookupByID", "LookupByName", "LookupByKey", "LookupByPath",
"LookupByMACString", "LookupByUsage", "LookupByVolume", "LookupByMACString", "LookupByUsage", "LookupByVolume",
"LookupByTargetPath","LookupSCSIHostByWWN", "LookupByPortDev", "LookupByTargetPath", "LookupSCSIHostByWWN", "LookupByPortDev",
"Restore", "RestoreFlags", "Restore", "RestoreFlags",
"SaveImageDefineXML", "SaveImageGetXMLDesc", "DefineXMLFlags"]: "SaveImageDefineXML", "SaveImageGetXMLDesc", "DefineXMLFlags"]:
if klass != "virDomain": if klass != "virDomain":

View File

@ -1,7 +1,7 @@
import unittest import unittest
import libvirt import libvirt
class TestLibvirtConn(unittest.TestCase): class TestLibvirtConn(unittest.TestCase):
def setUp(self): def setUp(self):
self.conn = libvirt.open("test:///default") self.conn = libvirt.open("test:///default")

View File

@ -1,7 +1,7 @@
import unittest import unittest
import libvirt import libvirt
class TestLibvirtDomain(unittest.TestCase): class TestLibvirtDomain(unittest.TestCase):
def setUp(self): def setUp(self):
self.conn = libvirt.open("test:///default") self.conn = libvirt.open("test:///default")