While the setter can be generated automatically, the getter is not.
However, it would be a lot easier if they both share the same logic:
a python dictionary to represent the time: dict['seconds'] to
represent seconds, and dict['nseconds'] to represent microseconds.
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
generator.py | 2 +
libvirt-override-virDomain.py | 13 ++++++
libvirt-override.c | 95 +++++++++++++++++++++++++++++++++++++++++++
sanitytest.py | 2 +-
4 files changed, 111 insertions(+), 1 deletion(-)
diff --git a/generator.py b/generator.py
index e7b4643..bdac877 100755
--- a/generator.py
+++ b/generator.py
@@ -519,6 +519,8 @@ skip_function = (
'virDomainFSFreeze', # overridden in virDomain.py
'virDomainFSThaw', # overridden in virDomain.py
+ 'virDomainGetTime', # overridden in virDomain.py
+ 'virDomainSetTime', # overridden in virDomain.py
# 'Ref' functions have no use for bindings users.
"virConnectRef",
diff --git a/libvirt-override-virDomain.py b/libvirt-override-virDomain.py
index e61ad00..a50ec0d 100644
--- a/libvirt-override-virDomain.py
+++ b/libvirt-override-virDomain.py
@@ -59,3 +59,16 @@
ret = libvirtmod.virDomainFSThaw(self._o, mountpoints, flags)
if ret == -1: raise libvirtError ('virDomainFSThaw() failed', dom=self)
return ret
+
+ def getTime(self, flags=0):
+ """Extract information about guest time """
+ ret = libvirtmod.virDomainGetTime(self._o, flags)
+ if ret == -1: raise libvirtError ('virDomainGetTime() failed', dom=self)
+ return ret
+
+ def setTime(self, time=None, flags=0):
+ """Set guest time to the given value. @time is a dict conatining
+ 'seconds' field for seconds and 'nseconds' field for nanosecons
"""
+ ret = libvirtmod.virDomainSetTime(self._o, time, flags)
+ if ret == -1: raise libvirtError ('virDomainSetTime() failed', dom=self)
+ return ret
diff --git a/libvirt-override.c b/libvirt-override.c
index c4ac223..a7a6213 100644
--- a/libvirt-override.c
+++ b/libvirt-override.c
@@ -7645,6 +7645,99 @@ libvirt_virDomainFSThaw(PyObject *self ATTRIBUTE_UNUSED, PyObject
*args) {
VIR_FREE(mountpoints);
return py_retval;
}
+
+static PyObject *
+libvirt_virDomainGetTime(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval = NULL;
+ PyObject *dict = NULL;
+ PyObject *pyobj_domain, *pyobj_seconds, *pyobj_nseconds;
+ virDomainPtr domain;
+ long long seconds;
+ unsigned int nseconds;
+ unsigned int flags;
+ int c_retval;
+
+ if (!PyArg_ParseTuple(args, (char*)"Oi:virDomainGetTime",
+ &pyobj_domain, &flags))
+ return NULL;
+ domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain);
+
+ if (!(dict = PyDict_New()))
+ goto cleanup;
+
+ LIBVIRT_BEGIN_ALLOW_THREADS;
+ c_retval = virDomainGetTime(domain, &seconds, &nseconds, flags);
+ LIBVIRT_END_ALLOW_THREADS;
+
+ if (c_retval < 0)
+ goto cleanup;
+
+ if (!(pyobj_seconds = libvirt_longlongWrap(seconds)) ||
+ PyDict_SetItemString(dict, "seconds", pyobj_seconds) < 0)
+ goto cleanup;
+ Py_DECREF(pyobj_seconds);
+
+ if (!(pyobj_nseconds = libvirt_uintWrap(nseconds)) ||
+ PyDict_SetItemString(dict, "nseconds", pyobj_nseconds) < 0)
+ goto cleanup;
+ Py_DECREF(pyobj_nseconds);
+
+ py_retval = dict;
+ dict = NULL;
+ cleanup:
+ Py_XDECREF(dict);
+ return py_retval;
+}
+
+
+static PyObject *
+libvirt_virDomainSetTime(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval = NULL;
+ PyObject *pyobj_domain;
+ PyObject *py_dict;
+ virDomainPtr domain;
+ long long seconds = 0;
+ unsigned int nseconds = 0;
+ unsigned int flags;
+ ssize_t py_dict_size;
+ int c_retval;
+
+ if (!PyArg_ParseTuple(args, (char*)"OOi:virDomainSetTime",
+ &pyobj_domain, &py_dict, &flags))
+ return NULL;
+ domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain);
+
+ py_dict_size = PyDict_Size(py_dict);
+
+ if (py_dict_size == 2) {
+ PyObject *pyobj_seconds, *pyobj_nseconds;
+
+ if (!(pyobj_seconds = PyDict_GetItemString(py_dict, "seconds")) ||
+ (libvirt_longlongUnwrap(pyobj_seconds, &seconds) < 0)) {
+ PyErr_Format(PyExc_LookupError, "malformed or missing
'seconds'");
+ goto cleanup;
+ }
+
+ if (!(pyobj_nseconds = PyDict_GetItemString(py_dict, "nseconds")) ||
+ (libvirt_uintUnwrap(pyobj_nseconds, &nseconds) < 0)) {
+ PyErr_Format(PyExc_LookupError, "malformed or missing
'nseconds'");
+ goto cleanup;
+ }
+ } else if (py_dict_size > 0) {
+ PyErr_Format(PyExc_LookupError, "Dictionary must contain "
+ "'seconds' and 'nseconds'");
+ goto cleanup;
+ }
+
+ LIBVIRT_BEGIN_ALLOW_THREADS;
+ c_retval = virDomainSetTime(domain, seconds, nseconds, flags);
+ LIBVIRT_END_ALLOW_THREADS;
+
+ py_retval = libvirt_intWrap(c_retval);
+
+ cleanup:
+ return py_retval;
+}
#endif /* LIBVIR_CHECK_VERSION(1, 2, 5) */
/************************************************************************
@@ -7825,6 +7918,8 @@ static PyMethodDef libvirtMethods[] = {
#if LIBVIR_CHECK_VERSION(1, 2, 5)
{(char *) "virDomainFSFreeze", libvirt_virDomainFSFreeze, METH_VARARGS,
NULL},
{(char *) "virDomainFSThaw", libvirt_virDomainFSThaw, METH_VARARGS, NULL},
+ {(char *) "virDomainGetTime", libvirt_virDomainGetTime, METH_VARARGS,
NULL},
+ {(char *) "virDomainSetTime", libvirt_virDomainSetTime, METH_VARARGS,
NULL},
#endif /* LIBVIR_CHECK_VERSION(1, 2, 5) */
{NULL, NULL, 0, NULL}
};
diff --git a/sanitytest.py b/sanitytest.py
index 62fe42b..6067a3f 100644
--- a/sanitytest.py
+++ b/sanitytest.py
@@ -152,7 +152,7 @@ for name in sorted(basicklassmap):
# and virDomainSnapshot namespaces which stupidly used a different
# convention which we now can't fix without breaking API
if func[0:3] == "Get" and klass not in ["virConnect",
"virDomainSnapshot", "libvirt"]:
- if func not in ["GetCPUStats"]:
+ if func not in ["GetCPUStats", "GetTime"]:
func = func[3:]
# The object creation and lookup APIs all have to get re-mapped
--
1.9.3