Added utility function to convert bytes to string in Python 3.

This commit is contained in:
Daniele Varrazzo 2010-12-25 11:57:04 +01:00
parent d3f3f1caf0
commit 2e22eef727
2 changed files with 25 additions and 0 deletions

View File

@ -122,6 +122,7 @@ HIDDEN char *psycopg_escape_string(PyObject *conn,
HIDDEN char *psycopg_strdup(const char *from, Py_ssize_t len); HIDDEN char *psycopg_strdup(const char *from, Py_ssize_t len);
HIDDEN PyObject * psycopg_ensure_bytes(PyObject *obj); HIDDEN PyObject * psycopg_ensure_bytes(PyObject *obj);
HIDDEN PyObject * psycopg_ensure_text(PyObject *obj);
/* Exceptions docstrings */ /* Exceptions docstrings */
#define Error_doc \ #define Error_doc \

View File

@ -118,3 +118,27 @@ psycopg_ensure_bytes(PyObject *obj)
return rv; return rv;
} }
/* Take a Python object and return text from it.
*
* On Py3 this means converting bytes to unicode. On Py2 bytes are fine.
*
* The function is ref neutral: steals a ref from obj and adds one to the
* return value. It is safe to call it on NULL.
*/
PyObject *
psycopg_ensure_text(PyObject *obj)
{
#if PY_MAJOR_VERSION < 3
return obj;
#else
if (obj) {
/* bytes to unicode in Py3 */
PyObject *rv = PyUnicode_FromEncodedObject(obj, "utf8", "replace");
Py_DECREF(obj);
return rv;
}
else {
return NULL;
}
#endif
}