]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
Expose postgres.adapters from the psycopg package
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sun, 11 Jul 2021 12:41:54 +0000 (14:41 +0200)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sun, 11 Jul 2021 13:03:30 +0000 (15:03 +0200)
psycopg/psycopg/__init__.py
tests/test_adapt.py

index dcf1cc3136726a9363c1927b76f55a69f4f77e29..5aa40c536161b5aa72170c625c7d582862b0e82f 100644 (file)
@@ -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
index dcc4e56ef45d858c310c465ab4eb8bbd6f6fe230..7c6a5d817856aff290374a5e11ad52e000138c64 100644 (file)
@@ -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"))