From 5303bebd8330e978852e97e431fa62501837e994 Mon Sep 17 00:00:00 2001 From: Grollicus Date: Fri, 28 Jan 2022 18:26:06 +0100 Subject: [PATCH] allow setting the encoding on QuotedString --- psycopg2cffi/_impl/adapters.py | 10 ++++++++-- psycopg2cffi/tests/psycopg2_tests/test_quote.py | 3 +++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/psycopg2cffi/_impl/adapters.py b/psycopg2cffi/_impl/adapters.py index 20e91cf..8307cc9 100644 --- a/psycopg2cffi/_impl/adapters.py +++ b/psycopg2cffi/_impl/adapters.py @@ -13,6 +13,8 @@ adapters = {} +DEFAULT_ENCODING = 'latin1' + # Adapters assept python objects and always return bytes, as described in # http://initd.org/psycopg/articles/2011/01/24/psycopg2-porting-python-3-report/ @@ -224,7 +226,7 @@ def TimestampFromTicks(ticks): class QuotedString(_BaseAdapter): def __init__(self, obj): super(QuotedString, self).__init__(obj) - self._default_encoding = "latin1" + self._encoding = None def prepare(self, conn): self._conn = conn @@ -234,7 +236,11 @@ def encoding(self): if self._conn: return self._conn._py_enc else: - return self._default_encoding + return self._encoding or DEFAULT_ENCODING + + @encoding.setter + def encoding(self, value): + self._encoding = value def getquoted(self): obj = self._wrapped diff --git a/psycopg2cffi/tests/psycopg2_tests/test_quote.py b/psycopg2cffi/tests/psycopg2_tests/test_quote.py index e6fe2e2..cef4ef0 100755 --- a/psycopg2cffi/tests/psycopg2_tests/test_quote.py +++ b/psycopg2cffi/tests/psycopg2_tests/test_quote.py @@ -166,6 +166,9 @@ def test_encoding(self): q = psycopg2.extensions.QuotedString('hi') self.assertEqual(q.encoding, 'latin1') + q.encoding = 'ascii' + self.assertEqual(q.encoding, 'ascii') + self.conn.set_client_encoding('utf_8') q.prepare(self.conn) self.assertEqual(q.encoding, 'utf_8')