diff options
author | Daniele Varrazzo <daniele.varrazzo@gmail.com> | 2010-12-25 11:57:04 +0100 |
---|---|---|
committer | Daniele Varrazzo <daniele.varrazzo@gmail.com> | 2010-12-31 03:18:27 +0100 |
commit | 2e22eef727fc3b57e63c7a6a1b5cbae9533cd632 (patch) | |
tree | 0454997f99f724358477e3e6900ef9ac497053ea | |
parent | d3f3f1caf0177f32b70dcb7632ad0a164abcfc65 (diff) | |
download | psycopg2-2e22eef727fc3b57e63c7a6a1b5cbae9533cd632.tar.gz |
Added utility function to convert bytes to string in Python 3.
-rw-r--r-- | psycopg/psycopg.h | 1 | ||||
-rw-r--r-- | psycopg/utils.c | 24 |
2 files changed, 25 insertions, 0 deletions
diff --git a/psycopg/psycopg.h b/psycopg/psycopg.h index 57a73d0..e87744c 100644 --- a/psycopg/psycopg.h +++ b/psycopg/psycopg.h @@ -122,6 +122,7 @@ HIDDEN char *psycopg_escape_string(PyObject *conn, HIDDEN char *psycopg_strdup(const char *from, Py_ssize_t len); HIDDEN PyObject * psycopg_ensure_bytes(PyObject *obj); +HIDDEN PyObject * psycopg_ensure_text(PyObject *obj); /* Exceptions docstrings */ #define Error_doc \ 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 +} |