Re: [libvirt] [python v3 PATCH] Add dict check for setTime and allow pass 'seconds' parameter

2014-11-11 Thread Michal Privoznik

On 31.10.2014 03:02, Luyao Huang wrote:

When pass None or a empty dictionary to time, it will
report error.Allow a one-element dictionary which
contains 'seconds',setting JUST seconds will do the
sane thing of passing 0 for nseconds, instead of
erroring out.If dict have a unkown key, it will report error.

Signed-off-by: Luyao Huang lhu...@redhat.com
---
  libvirt-override-virDomain.py |  6 +++---
  libvirt-override.c| 41 +
  2 files changed, 32 insertions(+), 15 deletions(-)

diff --git a/libvirt-override-virDomain.py b/libvirt-override-virDomain.py
index a50ec0d..2a4c4c9 100644
--- a/libvirt-override-virDomain.py
+++ b/libvirt-override-virDomain.py
@@ -66,9 +66,9 @@
  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 
+def setTime(self, time, flags=0):
+Set guest time to the given value. @time is a dict containing
+'seconds' field for seconds and 'nseconds' field for nanoseconds 
  ret = libvirtmod.virDomainSetTime(self._o, time, flags)
  if ret == -1: raise libvirtError ('virDomainSetTime() failed', 
dom=self)
  return ret


Well, C API doesn't require @seconds and @nseconds to be always set, ie 
when using VIR_DOMAIN_TIME_SYNC flag. I believe python binding should 
follow the design. I'll post updated patch shortly.


Michal

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [python v3 PATCH] Add dict check for setTime and allow pass 'seconds' parameter

2014-10-30 Thread Luyao Huang
When pass None or a empty dictionary to time, it will 
report error.Allow a one-element dictionary which 
contains 'seconds',setting JUST seconds will do the 
sane thing of passing 0 for nseconds, instead of 
erroring out.If dict have a unkown key, it will report error.

Signed-off-by: Luyao Huang lhu...@redhat.com
---
 libvirt-override-virDomain.py |  6 +++---
 libvirt-override.c| 41 +
 2 files changed, 32 insertions(+), 15 deletions(-)

diff --git a/libvirt-override-virDomain.py b/libvirt-override-virDomain.py
index a50ec0d..2a4c4c9 100644
--- a/libvirt-override-virDomain.py
+++ b/libvirt-override-virDomain.py
@@ -66,9 +66,9 @@
 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 
+def setTime(self, time, flags=0):
+Set guest time to the given value. @time is a dict containing
+'seconds' field for seconds and 'nseconds' field for nanoseconds 
 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 a53b46f..1d1714a 100644
--- a/libvirt-override.c
+++ b/libvirt-override.c
@@ -7784,6 +7784,8 @@ static PyObject *
 libvirt_virDomainSetTime(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
 PyObject *py_retval = NULL;
 PyObject *pyobj_domain;
+PyObject *pyobj_seconds;
+PyObject *pyobj_nseconds;
 PyObject *py_dict;
 virDomainPtr domain;
 long long seconds = 0;
@@ -7797,25 +7799,40 @@ libvirt_virDomainSetTime(PyObject *self 
ATTRIBUTE_UNUSED, PyObject *args) {
 return NULL;
 domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain);
 
-py_dict_size = PyDict_Size(py_dict);
+if (!PyDict_Check(py_dict)) {
+PyErr_Format(PyExc_TypeError, time must be dict);
+return NULL;
+}
 
-if (py_dict_size == 2) {
-PyObject *pyobj_seconds, *pyobj_nseconds;
+py_dict_size = PyDict_Size(py_dict);
 
-if (!(pyobj_seconds = PyDict_GetItemString(py_dict, seconds)) ||
-(libvirt_longlongUnwrap(pyobj_seconds, seconds)  0)) {
-PyErr_Format(PyExc_LookupError, malformed or missing 'seconds');
+if ((pyobj_seconds = PyDict_GetItemString(py_dict, seconds)) != NULL) {
+if (libvirt_longlongUnwrap(pyobj_seconds, seconds)  0) {
+PyErr_Format(PyExc_LookupError, malformed 'seconds');
 goto cleanup;
 }
+} else {
+PyErr_Format(PyExc_LookupError, Dictionary must contains 
+ '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');
+if ((pyobj_nseconds = PyDict_GetItemString(py_dict, nseconds)) != NULL) {
+if (libvirt_uintUnwrap(pyobj_nseconds, nseconds)  0) {
+PyErr_Format(PyExc_LookupError, malformed 'nseconds');
 goto cleanup;
 }
-} else if (py_dict_size  0) {
-PyErr_Format(PyExc_LookupError, Dictionary must contain 
- 'seconds' and 'nseconds');
+} else if (py_dict_size == 1) {
+nseconds = 0;
+} else {
+PyErr_Format(PyExc_LookupError, Dictionary contains 
+ unknown key);
+goto cleanup;
+}
+
+if (py_dict_size  2) {
+PyErr_Format(PyExc_LookupError, Dictionary contains 
+ unknown key);
 goto cleanup;
 }
 
-- 
1.8.3.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list