]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
Split types.singleton module into bool and none
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sat, 26 Jun 2021 01:18:24 +0000 (02:18 +0100)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sat, 26 Jun 2021 01:30:29 +0000 (02:30 +0100)
psycopg3/psycopg3/types/__init__.py
psycopg3/psycopg3/types/bool.py [moved from psycopg3/psycopg3/types/singletons.py with 70% similarity]
psycopg3/psycopg3/types/none.py [new file with mode: 0644]
psycopg3_c/psycopg3_c/_psycopg3.pyx
psycopg3_c/psycopg3_c/types/bool.pyx [moved from psycopg3_c/psycopg3_c/types/singletons.pyx with 100% similarity]
tests/types/test_bool.py [moved from tests/types/test_singletons.py with 100% similarity]
tests/types/test_none.py [new file with mode: 0644]

index 158eee8a3f69cbb020729eea48c2813862756441..4a23921d2e8042f4fc9c4a1262e22dd7c4605933 100644 (file)
@@ -6,8 +6,10 @@ psycopg3 types package
 
 from typing import TYPE_CHECKING
 
+from . import bool
 from . import date
 from . import json
+from . import none
 from . import text
 from . import uuid
 from . import array
@@ -15,7 +17,6 @@ from . import range
 from . import network
 from . import numeric
 from . import composite
-from . import singletons
 
 from .._typeinfo import TypeInfo as TypeInfo  # exported here
 
@@ -24,8 +25,10 @@ if TYPE_CHECKING:
 
 
 def register_default_globals(ctx: "AdaptContext") -> None:
+    bool.register_default_globals(ctx)
     date.register_default_globals(ctx)
     json.register_default_globals(ctx)
+    none.register_default_globals(ctx)
     text.register_default_globals(ctx)
     uuid.register_default_globals(ctx)
     array.register_default_globals(ctx)
@@ -33,7 +36,6 @@ def register_default_globals(ctx: "AdaptContext") -> None:
     network.register_default_globals(ctx)
     numeric.register_default_globals(ctx)
     composite.register_default_globals(ctx)
-    singletons.register_default_globals(ctx)
 
     # Must come after all the types are registered
     array.register_all_arrays(ctx)
similarity index 70%
rename from psycopg3/psycopg3/types/singletons.py
rename to psycopg3/psycopg3/types/bool.py
index 9db920c0c826f95d9442339534e053fcf9ee3c0a..87ff29f272e68bcca2e1327d623b382f04a2d0c8 100644 (file)
@@ -1,5 +1,5 @@
 """
-Adapters for None and boolean.
+Adapters for booleans.
 """
 
 # Copyright (C) 2020-2021 The Psycopg Team
@@ -31,21 +31,6 @@ class BoolBinaryDumper(Dumper):
         return b"\x01" if obj else b"\x00"
 
 
-class NoneDumper(Dumper):
-    """
-    Not a complete dumper as it doesn't implement dump(), but it implements
-    quote(), so it can be used in sql composition.
-    """
-
-    format = Format.TEXT
-
-    def dump(self, obj: None) -> bytes:
-        raise NotImplementedError("NULL is passed to Postgres in other ways")
-
-    def quote(self, obj: None) -> bytes:
-        return b"NULL"
-
-
 class BoolLoader(Loader):
 
     format = Format.TEXT
@@ -65,6 +50,5 @@ class BoolBinaryLoader(Loader):
 def register_default_globals(ctx: AdaptContext) -> None:
     BoolDumper.register(bool, ctx)
     BoolBinaryDumper.register(bool, ctx)
-    NoneDumper.register(type(None), ctx)
     BoolLoader.register("bool", ctx)
     BoolBinaryLoader.register("bool", ctx)
diff --git a/psycopg3/psycopg3/types/none.py b/psycopg3/psycopg3/types/none.py
new file mode 100644 (file)
index 0000000..f200dd2
--- /dev/null
@@ -0,0 +1,28 @@
+"""
+Adapters for None.
+"""
+
+# Copyright (C) 2020-2021 The Psycopg Team
+
+from ..pq import Format
+from ..adapt import Dumper
+from ..proto import AdaptContext
+
+
+class NoneDumper(Dumper):
+    """
+    Not a complete dumper as it doesn't implement dump(), but it implements
+    quote(), so it can be used in sql composition.
+    """
+
+    format = Format.TEXT
+
+    def dump(self, obj: None) -> bytes:
+        raise NotImplementedError("NULL is passed to Postgres in other ways")
+
+    def quote(self, obj: None) -> bytes:
+        return b"NULL"
+
+
+def register_default_globals(ctx: AdaptContext) -> None:
+    NoneDumper.register(type(None), ctx)
index 520a303ec42bdf1d7b3f8863f10d46a94f1f91d6..adface937849839d0df3ce41cc20937253f73cfe 100644 (file)
@@ -29,5 +29,5 @@ include "_psycopg3/transform.pyx"
 
 include "types/date.pyx"
 include "types/numeric.pyx"
-include "types/singletons.pyx"
+include "types/bool.pyx"
 include "types/text.pyx"
diff --git a/tests/types/test_none.py b/tests/types/test_none.py
new file mode 100644 (file)
index 0000000..892e352
--- /dev/null
@@ -0,0 +1,12 @@
+from psycopg3 import sql
+from psycopg3.adapt import Transformer, Format
+
+
+def test_quote_none(conn):
+
+    tx = Transformer()
+    assert tx.get_dumper(None, Format.TEXT).quote(None) == b"NULL"
+
+    cur = conn.cursor()
+    cur.execute(sql.SQL("select {v}").format(v=sql.Literal(None)))
+    assert cur.fetchone()[0] is None