Allow adapting bytes using QuotedString on Python 3 too

Close #365.
This commit is contained in:
Daniele Varrazzo 2016-07-01 19:11:04 +01:00
parent c585478dd1
commit 61764ea581
3 changed files with 12 additions and 4 deletions

1
NEWS
View File

@ -13,6 +13,7 @@ What's new in psycopg 2.6.2
(:ticket:`#333`). (:ticket:`#333`).
- Fixed `!PersistentConnectionPool` on Python 3 (:ticket:`#348`). - Fixed `!PersistentConnectionPool` on Python 3 (:ticket:`#348`).
- Fixed segfault on `repr()` of an unitialized connection (:ticket:`#361`). - Fixed segfault on `repr()` of an unitialized connection (:ticket:`#361`).
- Allow adapting bytes using QuotedString on Python 3 too (:ticket:`#365`).
- Added support for setuptools/wheel (:ticket:`#370`). - Added support for setuptools/wheel (:ticket:`#370`).
- Fix build on Windows with Python 3.5, VS 2015 (:ticket:`#380`). - Fix build on Windows with Python 3.5, VS 2015 (:ticket:`#380`).
- Fixed `!errorcodes.lookup` initialization thread-safety (:ticket:`#382`). - Fixed `!errorcodes.lookup` initialization thread-safety (:ticket:`#382`).

View File

@ -75,15 +75,13 @@ qstring_quote(qstringObject *self)
} }
} }
#if PY_MAJOR_VERSION < 3 /* if the wrapped object is a binary string, we don't know how to
/* if the wrapped object is a simple string, we don't know how to
(re)encode it, so we pass it as-is */ (re)encode it, so we pass it as-is */
else if (PyString_Check(self->wrapped)) { else if (Bytes_Check(self->wrapped)) {
str = self->wrapped; str = self->wrapped;
/* INCREF to make it ref-wise identical to unicode one */ /* INCREF to make it ref-wise identical to unicode one */
Py_INCREF(str); Py_INCREF(str);
} }
#endif
/* if the wrapped object is not a string, this is an error */ /* if the wrapped object is not a string, this is an error */
else { else {

View File

@ -23,6 +23,7 @@
# License for more details. # License for more details.
import sys import sys
import testutils
from testutils import unittest, ConnectingTestCase from testutils import unittest, ConnectingTestCase
import psycopg2 import psycopg2
@ -206,6 +207,14 @@ class TestQuotedString(ConnectingTestCase):
self.assertEqual(a.encoding, 'utf_8') self.assertEqual(a.encoding, 'utf_8')
self.assertEqual(a.getquoted(), b("'\xe2\x98\x83'")) self.assertEqual(a.getquoted(), b("'\xe2\x98\x83'"))
@testutils.skip_before_python(3)
def test_adapt_bytes(self):
snowman = u"\u2603"
self.conn.set_client_encoding('utf8')
a = psycopg2.extensions.QuotedString(snowman.encode('utf8'))
a.prepare(self.conn)
self.assertEqual(a.getquoted(), b("'\xe2\x98\x83'"))
def test_suite(): def test_suite():
return unittest.TestLoader().loadTestsFromName(__name__) return unittest.TestLoader().loadTestsFromName(__name__)