bugfix in unit parser
partly revert to 810fadab23
and change python string handling to "et" method
This commit is contained in:
parent
9671d9658b
commit
f2367c6c19
|
@ -83,29 +83,22 @@ int QuantityPy::PyInit(PyObject* args, PyObject* kwd)
|
|||
return 0;
|
||||
}
|
||||
PyErr_Clear(); // set by PyArg_ParseTuple()
|
||||
if (PyArg_ParseTuple(args,"O", &object)) {
|
||||
if (PyString_Check(object) || PyUnicode_Check(object)) {
|
||||
QString qstr;
|
||||
if (PyUnicode_Check(object)) {
|
||||
PyObject * utf8str = PyUnicode_AsUTF8String(object);
|
||||
qstr = QString::fromUtf8(PyString_AsString(utf8str));
|
||||
Py_DECREF(utf8str);
|
||||
}
|
||||
else {
|
||||
qstr = QString::fromUtf8(PyString_AsString(object));
|
||||
}
|
||||
try {
|
||||
*self = Quantity::parse(qstr);
|
||||
}
|
||||
catch(const Base::Exception& e) {
|
||||
PyErr_SetString(PyExc_ValueError, e.what());
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
} // Not string or unicode
|
||||
} // zero or more than one object
|
||||
PyErr_SetString(PyExc_TypeError, "Either quantity, float and Base unit, float and 8 integers or unicode or utf-8 string expected");
|
||||
return -1;
|
||||
char* string;
|
||||
if (PyArg_ParseTuple(args,"et", "utf-8", &string)) {
|
||||
QString qstr = QString::fromUtf8(string);
|
||||
PyMem_Free(string);
|
||||
try {
|
||||
*self = Quantity::parse(qstr);
|
||||
}catch(const Base::Exception& e) {
|
||||
PyErr_SetString(PyExc_ValueError, e.what());
|
||||
return-1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
PyErr_SetString(PyExc_TypeError, "Either three floats, tuple or Vector expected");
|
||||
return -1;
|
||||
}
|
||||
|
||||
PyObject* QuantityPy::getUserPreferred(PyObject *args)
|
||||
|
@ -178,32 +171,16 @@ PyObject* QuantityPy::getValueAs(PyObject *args)
|
|||
|
||||
if (!quant.isValid()) {
|
||||
PyErr_Clear();
|
||||
PyObject *object;
|
||||
if (PyArg_ParseTuple(args,"O", &object)) {
|
||||
if (PyString_Check(object) || PyUnicode_Check(object)) {
|
||||
QString qstr;
|
||||
if (PyUnicode_Check(object)) {
|
||||
PyObject * utf8str = PyUnicode_AsUTF8String(object);
|
||||
qstr = QString::fromUtf8(PyString_AsString(utf8str));
|
||||
Py_DECREF(utf8str);
|
||||
}
|
||||
else {
|
||||
qstr = QString::fromUtf8(PyString_AsString(object));
|
||||
}
|
||||
try {
|
||||
quant = Quantity::parse(qstr);
|
||||
}
|
||||
catch(const Base::Exception& e) {
|
||||
PyErr_SetString(PyExc_ValueError, e.what());
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
} // Not string or unicode
|
||||
} // zero or more than one object
|
||||
} // !isValid
|
||||
char* string;
|
||||
if (PyArg_ParseTuple(args,"et", "utf-8", &string)) {
|
||||
QString qstr = QString::fromUtf8(string);
|
||||
PyMem_Free(string);
|
||||
quant = Quantity::parse(qstr);
|
||||
}
|
||||
}
|
||||
|
||||
if (!quant.isValid()) {
|
||||
PyErr_SetString(PyExc_TypeError, "Either quantity, float and Base unit, float and 8 integers or unicode or utf-8 string expected");
|
||||
PyErr_SetString(PyExc_TypeError, "Either quantity, string, float or unit expected");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -72,27 +72,14 @@ int UnitPy::PyInit(PyObject* args, PyObject* kwd)
|
|||
return 0;
|
||||
}
|
||||
PyErr_Clear(); // set by PyArg_ParseTuple()
|
||||
if (PyArg_ParseTuple(args,"O", &object)) {
|
||||
if (PyString_Check(object) || PyUnicode_Check(object)) {
|
||||
QString qstr;
|
||||
if (PyUnicode_Check(object)) {
|
||||
PyObject * utf8str = PyUnicode_AsUTF8String(object);
|
||||
qstr = QString::fromUtf8(PyString_AsString(utf8str));
|
||||
Py_DECREF(utf8str);
|
||||
}
|
||||
else {
|
||||
qstr = QString::fromUtf8(PyString_AsString(object));
|
||||
}
|
||||
try {
|
||||
*self = Quantity::parse(qstr).getUnit();
|
||||
}
|
||||
catch(const Base::Exception& e) {
|
||||
PyErr_SetString(PyExc_ValueError, e.what());
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
} // Not string or unicode
|
||||
} // zero or more than one object
|
||||
char* string;
|
||||
if (PyArg_ParseTuple(args,"et", "utf-8", &string)) {
|
||||
QString qstr = QString::fromUtf8(string);
|
||||
PyMem_Free(string);
|
||||
*self = Quantity::parse(qstr).getUnit();
|
||||
return 0;
|
||||
}
|
||||
|
||||
PyErr_SetString(PyExc_TypeError, "Either string, (float,8 ints), Unit() or Quantity()");
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -128,33 +128,25 @@ PyMethodDef UnitsApi::Methods[] = {
|
|||
|
||||
PyObject* UnitsApi::sParseQuantity(PyObject * /*self*/, PyObject *args,PyObject * /*kwd*/)
|
||||
{
|
||||
PyObject * object;
|
||||
if (PyArg_ParseTuple(args,"O", &object)) {
|
||||
if (PyString_Check(object) || PyUnicode_Check(object)) {
|
||||
QString qstr;
|
||||
if (PyUnicode_Check(object)) {
|
||||
PyObject * utf8str = PyUnicode_AsUTF8String(object);
|
||||
qstr = QString::fromUtf8(PyString_AsString(utf8str));
|
||||
Py_DECREF(utf8str);
|
||||
}
|
||||
else {
|
||||
qstr = QString::fromUtf8(PyString_AsString(object));
|
||||
}
|
||||
Quantity rtn;
|
||||
try {
|
||||
rtn = Quantity::parse(qstr);
|
||||
}
|
||||
catch (const Base::Exception&) {
|
||||
PyErr_Format(PyExc_IOError, "invalid unit expression \n");
|
||||
return 0L;
|
||||
}
|
||||
catch (const std::exception&) {
|
||||
PyErr_Format(PyExc_IOError, "invalid unit expression \n");
|
||||
return 0L;
|
||||
}
|
||||
return new QuantityPy(new Quantity(rtn));
|
||||
} //string or unicode
|
||||
} //if one object
|
||||
PyErr_Format(PyExc_IOError, "invalid unit expression \n");
|
||||
return 0L;
|
||||
char *pstr;
|
||||
if (!PyArg_ParseTuple(args, "et", "utf-8", &pstr)) // convert args: Python->C
|
||||
return NULL; // NULL triggers exception
|
||||
|
||||
Quantity rtn;
|
||||
QString qstr = QString::fromUtf8(pstr);
|
||||
PyMem_Free(pstr);
|
||||
try {
|
||||
rtn = Quantity::parse(QString::fromLatin1(pstr));
|
||||
}
|
||||
catch (const Base::Exception&) {
|
||||
PyErr_Format(PyExc_IOError, "invalid unit expression \n");
|
||||
return 0L;
|
||||
}
|
||||
catch (const std::exception&) {
|
||||
PyErr_Format(PyExc_IOError, "invalid unit expression \n");
|
||||
return 0L;
|
||||
}
|
||||
|
||||
return new QuantityPy(new Quantity(rtn));
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user