summaryrefslogtreecommitdiff
path: root/psycopg/utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'psycopg/utils.c')
-rw-r--r--psycopg/utils.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/psycopg/utils.c b/psycopg/utils.c
index e5b221f..16b9249 100644
--- a/psycopg/utils.c
+++ b/psycopg/utils.c
@@ -118,3 +118,27 @@ psycopg_ensure_bytes(PyObject *obj)
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
+}