From 11277bc3fb8c34d9d77d8561ce71c687f9d8ce35 Mon Sep 17 00:00:00 2001 From: Daniele Varrazzo Date: Sun, 11 Jul 2021 14:41:54 +0200 Subject: [PATCH] Expose postgres.adapters from the psycopg package --- psycopg/psycopg/__init__.py | 7 ++++--- tests/test_adapt.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/psycopg/psycopg/__init__.py b/psycopg/psycopg/__init__.py index dcf1cc313..5aa40c536 100644 --- a/psycopg/psycopg/__init__.py +++ b/psycopg/psycopg/__init__.py @@ -33,15 +33,16 @@ if logger.level == logging.NOTSET: logger.setLevel(logging.WARNING) # register default adapters for PostgreSQL -postgres.register_default_adapters(postgres.adapters) +adapters = postgres.adapters # exposed by the package +postgres.register_default_adapters(adapters) # DBAPI compliancy connect = Connection.connect apilevel = "2.0" threadsafety = 2 paramstyle = "pyformat" -postgres.adapters.register_dumper(Binary, BinaryTextDumper) # dbapi20 -postgres.adapters.register_dumper(Binary, BinaryBinaryDumper) # dbapi20 +adapters.register_dumper(Binary, BinaryTextDumper) # dbapi20 +adapters.register_dumper(Binary, BinaryBinaryDumper) # dbapi20 # Note: defining the exported methods helps both Sphynx in documenting that diff --git a/tests/test_adapt.py b/tests/test_adapt.py index dcc4e56ef..7c6a5d817 100644 --- a/tests/test_adapt.py +++ b/tests/test_adapt.py @@ -44,6 +44,22 @@ def test_quote(data, result): assert dumper.quote(data) == result +def test_dump_global_ctx(dsn): + try: + psycopg.adapters.register_dumper(MyStr, make_bin_dumper("gb")) + psycopg.adapters.register_dumper(MyStr, make_dumper("gt")) + conn = psycopg.connect(dsn) + cur = conn.execute("select %s", [MyStr("hello")]) + assert cur.fetchone() == ("hellogt",) + cur = conn.execute("select %b", [MyStr("hello")]) + assert cur.fetchone() == ("hellogb",) + cur = conn.execute("select %t", [MyStr("hello")]) + assert cur.fetchone() == ("hellogt",) + finally: + for fmt in Format: + psycopg.adapters._dumpers[fmt].pop(MyStr, None) + + def test_dump_connection_ctx(conn): conn.adapters.register_dumper(MyStr, make_bin_dumper("b")) conn.adapters.register_dumper(MyStr, make_dumper("t")) @@ -156,6 +172,22 @@ def test_cast(data, format, type, result): assert rv == result +def test_load_global_ctx(dsn): + from psycopg.types import string + + try: + psycopg.adapters.register_loader(TEXT_OID, make_loader("gt")) + psycopg.adapters.register_loader(TEXT_OID, make_bin_loader("gb")) + conn = psycopg.connect(dsn) + cur = conn.cursor(binary=False).execute("select 'hello'::text") + assert cur.fetchone() == ("hellogt",) + cur = conn.cursor(binary=True).execute("select 'hello'::text") + assert cur.fetchone() == ("hellogb",) + finally: + psycopg.adapters.register_loader(TEXT_OID, string.TextLoader) + psycopg.adapters.register_loader(TEXT_OID, string.TextBinaryLoader) + + def test_load_connection_ctx(conn): conn.adapters.register_loader(TEXT_OID, make_loader("t")) conn.adapters.register_loader(TEXT_OID, make_bin_loader("b")) -- 2.47.3