From 24bb210a0ce479b68f5f2fdcf4c7915e2949d7bb Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 27 May 2020 22:03:05 +0200 Subject: [PATCH] Python: [skip ci] change order of supported arguments in UnitPy::PyInit --- src/Base/UnitPyImp.cpp | 63 ++++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 30 deletions(-) diff --git a/src/Base/UnitPyImp.cpp b/src/Base/UnitPyImp.cpp index 2738861cf1..49fed19bb5 100644 --- a/src/Base/UnitPyImp.cpp +++ b/src/Base/UnitPyImp.cpp @@ -41,8 +41,41 @@ PyObject *UnitPy::PyMake(struct _typeobject *, PyObject *, PyObject *) // Pytho // constructor method int UnitPy::PyInit(PyObject* args, PyObject* /*kwd*/) { + PyObject *object; Unit *self = getUnitPtr(); + // get quantity + if (PyArg_ParseTuple(args,"O!",&(Base::QuantityPy::Type), &object)) { + // Note: must be static_cast, not reinterpret_cast + *self = static_cast(object)->getQuantityPtr()->getUnit(); + return 0; + } + PyErr_Clear(); // set by PyArg_ParseTuple() + + // get unit + if (PyArg_ParseTuple(args,"O!",&(Base::UnitPy::Type), &object)) { + // Note: must be static_cast, not reinterpret_cast + *self = *(static_cast(object)->getUnitPtr()); + return 0; + } + PyErr_Clear(); // set by PyArg_ParseTuple() + + // get string + char* string; + if (PyArg_ParseTuple(args,"et", "utf-8", &string)) { + QString qstr = QString::fromUtf8(string); + PyMem_Free(string); + try { + *self = Quantity::parse(qstr).getUnit(); + return 0; + } + catch (const Base::Exception& e) { + PyErr_SetString(PyExc_RuntimeError, e.what()); + return -1; + } + } + PyErr_Clear(); // set by PyArg_ParseTuple() + int i1=0; int i2=0; int i3=0; @@ -61,36 +94,6 @@ int UnitPy::PyInit(PyObject* args, PyObject* /*kwd*/) return -1; } } - PyErr_Clear(); // set by PyArg_ParseTuple() - - PyObject *object; - - if (PyArg_ParseTuple(args,"O!",&(Base::QuantityPy::Type), &object)) { - // Note: must be static_cast, not reinterpret_cast - *self = static_cast(object)->getQuantityPtr()->getUnit(); - return 0; - } - PyErr_Clear(); // set by PyArg_ParseTuple() - - if (PyArg_ParseTuple(args,"O!",&(Base::UnitPy::Type), &object)) { - // Note: must be static_cast, not reinterpret_cast - *self = *(static_cast(object)->getUnitPtr()); - return 0; - } - PyErr_Clear(); // set by PyArg_ParseTuple() - char* string; - if (PyArg_ParseTuple(args,"et", "utf-8", &string)) { - QString qstr = QString::fromUtf8(string); - PyMem_Free(string); - try { - *self = Quantity::parse(qstr).getUnit(); - return 0; - } - catch (const Base::Exception& e) { - PyErr_SetString(PyExc_RuntimeError, e.what()); - return -1; - } - } PyErr_SetString(PyExc_TypeError, "Either string, (float,8 ints), Unit() or Quantity()"); return -1;