]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
refactor: drop use of `postgres.types` to know OIDs at import time
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Fri, 6 Jan 2023 14:36:45 +0000 (14:36 +0000)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Mon, 9 Jan 2023 17:44:16 +0000 (17:44 +0000)
16 files changed:
psycopg/psycopg/__init__.py
psycopg/psycopg/crdb/__init__.py
psycopg/psycopg/crdb/_types.py
psycopg/psycopg/dbapi20.py
psycopg/psycopg/postgres.py
psycopg/psycopg/types/array.py
psycopg/psycopg/types/bool.py
psycopg/psycopg/types/composite.py
psycopg/psycopg/types/datetime.py
psycopg/psycopg/types/json.py
psycopg/psycopg/types/multirange.py
psycopg/psycopg/types/net.py
psycopg/psycopg/types/numeric.py
psycopg/psycopg/types/range.py
psycopg/psycopg/types/string.py
psycopg/psycopg/types/uuid.py

index baadf30c3885888a12bab4905bd03ebbc5ecf61b..072edef5233a41ab6a49209cabae20542571744b 100644 (file)
@@ -46,6 +46,7 @@ paramstyle = "pyformat"
 
 # register default adapters for PostgreSQL
 adapters = postgres.adapters  # exposed by the package
+postgres.register_default_types(adapters.types)
 postgres.register_default_adapters(adapters)
 
 # After the default ones, because these can deal with the bytea oid better
index 323903aba94a1d816e2b489dd9da014ca12a2d2a..11e1dc3b6ab684ffed1ea3e1413b8ef875e7c103 100644 (file)
@@ -10,6 +10,7 @@ from .connection import CrdbConnection, AsyncCrdbConnection, CrdbConnectionInfo
 adapters = _types.adapters  # exposed by the package
 connect = CrdbConnection.connect
 
+_types.register_crdb_types(adapters.types)
 _types.register_crdb_adapters(adapters)
 
 __all__ = [
index ac04c96e88cba8ea989aaf2cc55d4ff1d15a7a70..1cbd7d04062d8eac6e2a5e92588c4278fc3b00ab 100644 (file)
@@ -118,46 +118,47 @@ def _register_crdb_none_adapters(context: AdaptContext) -> None:
     context.adapters.register_dumper(NoneType, CrdbNoneDumper)
 
 
-for t in [
-    TypeInfo("json", 3802, 3807, regtype="jsonb"),  # Alias json -> jsonb.
-    TypeInfo("int8", 20, 1016, regtype="integer"),  # Alias integer -> int8
-    TypeInfo('"char"', 18, 1002),  # special case, not generated
-    # autogenerated: start
-    # Generated from CockroachDB 22.2.1
-    TypeInfo("bit", 1560, 1561),
-    TypeInfo("bool", 16, 1000, regtype="boolean"),
-    TypeInfo("bpchar", 1042, 1014, regtype="character"),
-    TypeInfo("bytea", 17, 1001),
-    TypeInfo("date", 1082, 1182),
-    TypeInfo("float4", 700, 1021, regtype="real"),
-    TypeInfo("float8", 701, 1022, regtype="double precision"),
-    TypeInfo("inet", 869, 1041),
-    TypeInfo("int2", 21, 1005, regtype="smallint"),
-    TypeInfo("int2vector", 22, 1006),
-    TypeInfo("int4", 23, 1007),
-    TypeInfo("int8", 20, 1016, regtype="bigint"),
-    TypeInfo("interval", 1186, 1187),
-    TypeInfo("jsonb", 3802, 3807),
-    TypeInfo("name", 19, 1003),
-    TypeInfo("numeric", 1700, 1231),
-    TypeInfo("oid", 26, 1028),
-    TypeInfo("oidvector", 30, 1013),
-    TypeInfo("record", 2249, 2287),
-    TypeInfo("regclass", 2205, 2210),
-    TypeInfo("regnamespace", 4089, 4090),
-    TypeInfo("regproc", 24, 1008),
-    TypeInfo("regprocedure", 2202, 2207),
-    TypeInfo("regrole", 4096, 4097),
-    TypeInfo("regtype", 2206, 2211),
-    TypeInfo("text", 25, 1009),
-    TypeInfo("time", 1083, 1183, regtype="time without time zone"),
-    TypeInfo("timestamp", 1114, 1115, regtype="timestamp without time zone"),
-    TypeInfo("timestamptz", 1184, 1185, regtype="timestamp with time zone"),
-    TypeInfo("timetz", 1266, 1270, regtype="time with time zone"),
-    TypeInfo("unknown", 705, 0),
-    TypeInfo("uuid", 2950, 2951),
-    TypeInfo("varbit", 1562, 1563, regtype="bit varying"),
-    TypeInfo("varchar", 1043, 1015, regtype="character varying"),
-    # autogenerated: end
-]:
-    types.add(t)
+def register_crdb_types(types: TypesRegistry) -> None:
+    for t in [
+        TypeInfo("json", 3802, 3807, regtype="jsonb"),  # Alias json -> jsonb.
+        TypeInfo("int8", 20, 1016, regtype="integer"),  # Alias integer -> int8
+        TypeInfo('"char"', 18, 1002),  # special case, not generated
+        # autogenerated: start
+        # Generated from CockroachDB 22.2.1
+        TypeInfo("bit", 1560, 1561),
+        TypeInfo("bool", 16, 1000, regtype="boolean"),
+        TypeInfo("bpchar", 1042, 1014, regtype="character"),
+        TypeInfo("bytea", 17, 1001),
+        TypeInfo("date", 1082, 1182),
+        TypeInfo("float4", 700, 1021, regtype="real"),
+        TypeInfo("float8", 701, 1022, regtype="double precision"),
+        TypeInfo("inet", 869, 1041),
+        TypeInfo("int2", 21, 1005, regtype="smallint"),
+        TypeInfo("int2vector", 22, 1006),
+        TypeInfo("int4", 23, 1007),
+        TypeInfo("int8", 20, 1016, regtype="bigint"),
+        TypeInfo("interval", 1186, 1187),
+        TypeInfo("jsonb", 3802, 3807),
+        TypeInfo("name", 19, 1003),
+        TypeInfo("numeric", 1700, 1231),
+        TypeInfo("oid", 26, 1028),
+        TypeInfo("oidvector", 30, 1013),
+        TypeInfo("record", 2249, 2287),
+        TypeInfo("regclass", 2205, 2210),
+        TypeInfo("regnamespace", 4089, 4090),
+        TypeInfo("regproc", 24, 1008),
+        TypeInfo("regprocedure", 2202, 2207),
+        TypeInfo("regrole", 4096, 4097),
+        TypeInfo("regtype", 2206, 2211),
+        TypeInfo("text", 25, 1009),
+        TypeInfo("time", 1083, 1183, regtype="time without time zone"),
+        TypeInfo("timestamp", 1114, 1115, regtype="timestamp without time zone"),
+        TypeInfo("timestamptz", 1184, 1185, regtype="timestamp with time zone"),
+        TypeInfo("timetz", 1266, 1270, regtype="time with time zone"),
+        TypeInfo("unknown", 705, 0),
+        TypeInfo("uuid", 2950, 2951),
+        TypeInfo("varbit", 1562, 1563, regtype="bit varying"),
+        TypeInfo("varchar", 1043, 1015, regtype="character varying"),
+        # autogenerated: end
+    ]:
+        types.add(t)
index 3c3d8b72f9747dcd1aa1fd112c918e9dc0b8ebca..aab4c822f3f628a5bebadcf14d81eee24f2e1e55 100644 (file)
@@ -9,15 +9,15 @@ import datetime as dt
 from math import floor
 from typing import Any, Sequence, Union
 
-from . import postgres
+from . import _oids
 from .abc import AdaptContext, Buffer
 from .types.string import BytesDumper, BytesBinaryDumper
 
 
 class DBAPITypeObject:
-    def __init__(self, name: str, type_names: Sequence[str]):
+    def __init__(self, name: str, oids: Sequence[int]):
         self.name = name
-        self.values = tuple(postgres.types[n].oid for n in type_names)
+        self.values = tuple(oids)
 
     def __repr__(self) -> str:
         return f"psycopg.{self.name}"
@@ -35,13 +35,33 @@ class DBAPITypeObject:
             return NotImplemented
 
 
-BINARY = DBAPITypeObject("BINARY", ("bytea",))
+BINARY = DBAPITypeObject("BINARY", (_oids.BYTEA_OID,))
 DATETIME = DBAPITypeObject(
-    "DATETIME", "timestamp timestamptz date time timetz interval".split()
+    "DATETIME",
+    (
+        _oids.TIMESTAMP_OID,
+        _oids.TIMESTAMPTZ_OID,
+        _oids.DATE_OID,
+        _oids.TIME_OID,
+        _oids.TIMETZ_OID,
+        _oids.INTERVAL_OID,
+    ),
+)
+NUMBER = DBAPITypeObject(
+    "NUMBER",
+    (
+        _oids.INT2_OID,
+        _oids.INT4_OID,
+        _oids.INT8_OID,
+        _oids.FLOAT4_OID,
+        _oids.FLOAT8_OID,
+        _oids.NUMERIC_OID,
+    ),
+)
+ROWID = DBAPITypeObject("ROWID", (_oids.OID_OID,))
+STRING = DBAPITypeObject(
+    "STRING", (_oids.TEXT_OID, _oids.VARCHAR_OID, _oids.BPCHAR_OID)
 )
-NUMBER = DBAPITypeObject("NUMBER", "int2 int4 int8 float4 float8 numeric".split())
-ROWID = DBAPITypeObject("ROWID", ("oid",))
-STRING = DBAPITypeObject("STRING", "text varchar bpchar".split())
 
 
 class Binary:
index 53a8ccf59fa00da6f215c202d2d9b5c12015ce54..10843a2d65203925b4e89464aea530d9c846f175 100644 (file)
@@ -14,89 +14,92 @@ types = TypesRegistry()
 # Global adapter maps with PostgreSQL types configuration
 adapters = AdaptersMap(types=types)
 
-# Use tools/update_oids.py to update this data.
-for t in [
-    TypeInfo('"char"', 18, 1002),
-    # autogenerated: start
-    # Generated from PostgreSQL 15.1
-    TypeInfo("aclitem", 1033, 1034),
-    TypeInfo("bit", 1560, 1561),
-    TypeInfo("bool", 16, 1000, regtype="boolean"),
-    TypeInfo("box", 603, 1020, delimiter=";"),
-    TypeInfo("bpchar", 1042, 1014, regtype="character"),
-    TypeInfo("bytea", 17, 1001),
-    TypeInfo("cid", 29, 1012),
-    TypeInfo("cidr", 650, 651),
-    TypeInfo("circle", 718, 719),
-    TypeInfo("date", 1082, 1182),
-    TypeInfo("float4", 700, 1021, regtype="real"),
-    TypeInfo("float8", 701, 1022, regtype="double precision"),
-    TypeInfo("gtsvector", 3642, 3644),
-    TypeInfo("inet", 869, 1041),
-    TypeInfo("int2", 21, 1005, regtype="smallint"),
-    TypeInfo("int2vector", 22, 1006),
-    TypeInfo("int4", 23, 1007, regtype="integer"),
-    TypeInfo("int8", 20, 1016, regtype="bigint"),
-    TypeInfo("interval", 1186, 1187),
-    TypeInfo("json", 114, 199),
-    TypeInfo("jsonb", 3802, 3807),
-    TypeInfo("jsonpath", 4072, 4073),
-    TypeInfo("line", 628, 629),
-    TypeInfo("lseg", 601, 1018),
-    TypeInfo("macaddr", 829, 1040),
-    TypeInfo("macaddr8", 774, 775),
-    TypeInfo("money", 790, 791),
-    TypeInfo("name", 19, 1003),
-    TypeInfo("numeric", 1700, 1231),
-    TypeInfo("oid", 26, 1028),
-    TypeInfo("oidvector", 30, 1013),
-    TypeInfo("path", 602, 1019),
-    TypeInfo("pg_lsn", 3220, 3221),
-    TypeInfo("point", 600, 1017),
-    TypeInfo("polygon", 604, 1027),
-    TypeInfo("record", 2249, 2287),
-    TypeInfo("refcursor", 1790, 2201),
-    TypeInfo("regclass", 2205, 2210),
-    TypeInfo("regcollation", 4191, 4192),
-    TypeInfo("regconfig", 3734, 3735),
-    TypeInfo("regdictionary", 3769, 3770),
-    TypeInfo("regnamespace", 4089, 4090),
-    TypeInfo("regoper", 2203, 2208),
-    TypeInfo("regoperator", 2204, 2209),
-    TypeInfo("regproc", 24, 1008),
-    TypeInfo("regprocedure", 2202, 2207),
-    TypeInfo("regrole", 4096, 4097),
-    TypeInfo("regtype", 2206, 2211),
-    TypeInfo("text", 25, 1009),
-    TypeInfo("tid", 27, 1010),
-    TypeInfo("time", 1083, 1183, regtype="time without time zone"),
-    TypeInfo("timestamp", 1114, 1115, regtype="timestamp without time zone"),
-    TypeInfo("timestamptz", 1184, 1185, regtype="timestamp with time zone"),
-    TypeInfo("timetz", 1266, 1270, regtype="time with time zone"),
-    TypeInfo("tsquery", 3615, 3645),
-    TypeInfo("tsvector", 3614, 3643),
-    TypeInfo("txid_snapshot", 2970, 2949),
-    TypeInfo("uuid", 2950, 2951),
-    TypeInfo("varbit", 1562, 1563, regtype="bit varying"),
-    TypeInfo("varchar", 1043, 1015, regtype="character varying"),
-    TypeInfo("xid", 28, 1011),
-    TypeInfo("xid8", 5069, 271),
-    TypeInfo("xml", 142, 143),
-    RangeInfo("daterange", 3912, 3913, subtype_oid=1082),
-    RangeInfo("int4range", 3904, 3905, subtype_oid=23),
-    RangeInfo("int8range", 3926, 3927, subtype_oid=20),
-    RangeInfo("numrange", 3906, 3907, subtype_oid=1700),
-    RangeInfo("tsrange", 3908, 3909, subtype_oid=1114),
-    RangeInfo("tstzrange", 3910, 3911, subtype_oid=1184),
-    MultirangeInfo("datemultirange", 4535, 6155, range_oid=3912, subtype_oid=1082),
-    MultirangeInfo("int4multirange", 4451, 6150, range_oid=3904, subtype_oid=23),
-    MultirangeInfo("int8multirange", 4536, 6157, range_oid=3926, subtype_oid=20),
-    MultirangeInfo("nummultirange", 4532, 6151, range_oid=3906, subtype_oid=1700),
-    MultirangeInfo("tsmultirange", 4533, 6152, range_oid=3908, subtype_oid=1114),
-    MultirangeInfo("tstzmultirange", 4534, 6153, range_oid=3910, subtype_oid=1184),
-    # autogenerated: end
-]:
-    types.add(t)
+
+def register_default_types(types: TypesRegistry) -> None:
+
+    # Use tools/update_oids.py to update this data.
+    for t in [
+        TypeInfo('"char"', 18, 1002),
+        # autogenerated: start
+        # Generated from PostgreSQL 15.1
+        TypeInfo("aclitem", 1033, 1034),
+        TypeInfo("bit", 1560, 1561),
+        TypeInfo("bool", 16, 1000, regtype="boolean"),
+        TypeInfo("box", 603, 1020, delimiter=";"),
+        TypeInfo("bpchar", 1042, 1014, regtype="character"),
+        TypeInfo("bytea", 17, 1001),
+        TypeInfo("cid", 29, 1012),
+        TypeInfo("cidr", 650, 651),
+        TypeInfo("circle", 718, 719),
+        TypeInfo("date", 1082, 1182),
+        TypeInfo("float4", 700, 1021, regtype="real"),
+        TypeInfo("float8", 701, 1022, regtype="double precision"),
+        TypeInfo("gtsvector", 3642, 3644),
+        TypeInfo("inet", 869, 1041),
+        TypeInfo("int2", 21, 1005, regtype="smallint"),
+        TypeInfo("int2vector", 22, 1006),
+        TypeInfo("int4", 23, 1007, regtype="integer"),
+        TypeInfo("int8", 20, 1016, regtype="bigint"),
+        TypeInfo("interval", 1186, 1187),
+        TypeInfo("json", 114, 199),
+        TypeInfo("jsonb", 3802, 3807),
+        TypeInfo("jsonpath", 4072, 4073),
+        TypeInfo("line", 628, 629),
+        TypeInfo("lseg", 601, 1018),
+        TypeInfo("macaddr", 829, 1040),
+        TypeInfo("macaddr8", 774, 775),
+        TypeInfo("money", 790, 791),
+        TypeInfo("name", 19, 1003),
+        TypeInfo("numeric", 1700, 1231),
+        TypeInfo("oid", 26, 1028),
+        TypeInfo("oidvector", 30, 1013),
+        TypeInfo("path", 602, 1019),
+        TypeInfo("pg_lsn", 3220, 3221),
+        TypeInfo("point", 600, 1017),
+        TypeInfo("polygon", 604, 1027),
+        TypeInfo("record", 2249, 2287),
+        TypeInfo("refcursor", 1790, 2201),
+        TypeInfo("regclass", 2205, 2210),
+        TypeInfo("regcollation", 4191, 4192),
+        TypeInfo("regconfig", 3734, 3735),
+        TypeInfo("regdictionary", 3769, 3770),
+        TypeInfo("regnamespace", 4089, 4090),
+        TypeInfo("regoper", 2203, 2208),
+        TypeInfo("regoperator", 2204, 2209),
+        TypeInfo("regproc", 24, 1008),
+        TypeInfo("regprocedure", 2202, 2207),
+        TypeInfo("regrole", 4096, 4097),
+        TypeInfo("regtype", 2206, 2211),
+        TypeInfo("text", 25, 1009),
+        TypeInfo("tid", 27, 1010),
+        TypeInfo("time", 1083, 1183, regtype="time without time zone"),
+        TypeInfo("timestamp", 1114, 1115, regtype="timestamp without time zone"),
+        TypeInfo("timestamptz", 1184, 1185, regtype="timestamp with time zone"),
+        TypeInfo("timetz", 1266, 1270, regtype="time with time zone"),
+        TypeInfo("tsquery", 3615, 3645),
+        TypeInfo("tsvector", 3614, 3643),
+        TypeInfo("txid_snapshot", 2970, 2949),
+        TypeInfo("uuid", 2950, 2951),
+        TypeInfo("varbit", 1562, 1563, regtype="bit varying"),
+        TypeInfo("varchar", 1043, 1015, regtype="character varying"),
+        TypeInfo("xid", 28, 1011),
+        TypeInfo("xid8", 5069, 271),
+        TypeInfo("xml", 142, 143),
+        RangeInfo("daterange", 3912, 3913, subtype_oid=1082),
+        RangeInfo("int4range", 3904, 3905, subtype_oid=23),
+        RangeInfo("int8range", 3926, 3927, subtype_oid=20),
+        RangeInfo("numrange", 3906, 3907, subtype_oid=1700),
+        RangeInfo("tsrange", 3908, 3909, subtype_oid=1114),
+        RangeInfo("tstzrange", 3910, 3911, subtype_oid=1184),
+        MultirangeInfo("datemultirange", 4535, 6155, range_oid=3912, subtype_oid=1082),
+        MultirangeInfo("int4multirange", 4451, 6150, range_oid=3904, subtype_oid=23),
+        MultirangeInfo("int8multirange", 4536, 6157, range_oid=3926, subtype_oid=20),
+        MultirangeInfo("nummultirange", 4532, 6151, range_oid=3906, subtype_oid=1700),
+        MultirangeInfo("tsmultirange", 4533, 6152, range_oid=3908, subtype_oid=1114),
+        MultirangeInfo("tstzmultirange", 4534, 6153, range_oid=3910, subtype_oid=1184),
+        # autogenerated: end
+    ]:
+        types.add(t)
 
 
 def register_default_adapters(context: AdaptContext) -> None:
index 3771841b8405df50e05d8dd8625f17e7eeecc44d..93f9da389a122e402594b40f9f59996da3cad69e 100644 (file)
@@ -13,7 +13,7 @@ from .. import errors as e
 from .. import postgres
 from ..abc import AdaptContext, Buffer, Dumper, DumperKey, NoneType, Loader, Transformer
 from ..adapt import RecursiveDumper, RecursiveLoader, PyFormat
-from .._oids import TEXT_OID, INVALID_OID
+from .._oids import TEXT_OID, INVALID_OID, TEXT_ARRAY_OID
 from .._compat import cache, prod
 from .._struct import pack_len, unpack_len
 from .._cmodule import _psycopg
@@ -26,14 +26,12 @@ _struct_dim = struct.Struct("!II")  # dim, lower bound
 _pack_dim = cast(Callable[[int, int], bytes], _struct_dim.pack)
 _unpack_dim = cast(Callable[[Buffer, int], Tuple[int, int]], _struct_dim.unpack_from)
 
-TEXT_ARRAY_OID = postgres.types["text"].array_oid
-
 PY_TEXT = PyFormat.TEXT
 PQ_BINARY = pq.Format.BINARY
 
 
 class BaseListDumper(RecursiveDumper):
-    element_oid = 0
+    element_oid = INVALID_OID
 
     def __init__(self, cls: type, context: Optional[AdaptContext] = None):
         if cls is NoneType:
index db7e18127910c5d38f4bdc585ec7c8693ff449b1..db34ce17c5cd5d2ad077bb6a84a2f210688f1ed9 100644 (file)
@@ -4,7 +4,7 @@ Adapters for booleans.
 
 # Copyright (C) 2020 The Psycopg Team
 
-from .. import postgres
+from .. import _oids
 from ..pq import Format
 from ..abc import AdaptContext
 from ..adapt import Buffer, Dumper, Loader
@@ -12,7 +12,7 @@ from ..adapt import Buffer, Dumper, Loader
 
 class BoolDumper(Dumper):
 
-    oid = postgres.types["bool"].oid
+    oid = _oids.BOOL_OID
 
     def dump(self, obj: bool) -> bytes:
         return b"t" if obj else b"f"
@@ -24,7 +24,7 @@ class BoolDumper(Dumper):
 class BoolBinaryDumper(Dumper):
 
     format = Format.BINARY
-    oid = postgres.types["bool"].oid
+    oid = _oids.BOOL_OID
 
     def dump(self, obj: bool) -> bytes:
         return b"\x01" if obj else b"\x00"
index d75b1d413f7c2cfddb0ca06eb59123787612e57e..9170aa279576260e25f7064056ce60e60a8aec54 100644 (file)
@@ -61,7 +61,7 @@ class SequenceDumper(RecursiveDumper):
 class TupleDumper(SequenceDumper):
 
     # Should be this, but it doesn't work
-    # oid = postgres_types["record"].oid
+    # oid = _oids.RECORD_OID
 
     def dump(self, obj: Tuple[Any, ...]) -> bytes:
         return self._dump_sequence(obj, b"(", b")", b",")
index f0dfe83eb0d360c8e4fe6908250e49475016900b..d4842cdcdb8c60cd711ed7a5f42dcf5dec42208a 100644 (file)
@@ -9,7 +9,7 @@ import struct
 from datetime import date, datetime, time, timedelta, timezone
 from typing import Any, Callable, cast, Optional, Tuple, TYPE_CHECKING
 
-from .. import postgres
+from .. import _oids
 from ..pq import Format
 from .._tz import get_tzinfo
 from ..abc import AdaptContext, DumperKey
@@ -39,7 +39,7 @@ _py_date_min_days = date.min.toordinal()
 
 class DateDumper(Dumper):
 
-    oid = postgres.types["date"].oid
+    oid = _oids.DATE_OID
 
     def dump(self, obj: date) -> bytes:
         # NOTE: whatever the PostgreSQL DateStyle input format (DMY, MDY, YMD)
@@ -50,7 +50,7 @@ class DateDumper(Dumper):
 class DateBinaryDumper(Dumper):
 
     format = Format.BINARY
-    oid = postgres.types["date"].oid
+    oid = _oids.DATE_OID
 
     def dump(self, obj: date) -> bytes:
         days = obj.toordinal() - _pg_date_epoch_days
@@ -77,7 +77,7 @@ class _BaseTimeTextDumper(_BaseTimeDumper):
 
 class TimeDumper(_BaseTimeTextDumper):
 
-    oid = postgres.types["time"].oid
+    oid = _oids.TIME_OID
 
     def upgrade(self, obj: time, format: PyFormat) -> Dumper:
         if not obj.tzinfo:
@@ -88,13 +88,13 @@ class TimeDumper(_BaseTimeTextDumper):
 
 class TimeTzDumper(_BaseTimeTextDumper):
 
-    oid = postgres.types["timetz"].oid
+    oid = _oids.TIMETZ_OID
 
 
 class TimeBinaryDumper(_BaseTimeDumper):
 
     format = Format.BINARY
-    oid = postgres.types["time"].oid
+    oid = _oids.TIME_OID
 
     def dump(self, obj: time) -> bytes:
         us = obj.microsecond + 1_000_000 * (
@@ -112,7 +112,7 @@ class TimeBinaryDumper(_BaseTimeDumper):
 class TimeTzBinaryDumper(_BaseTimeDumper):
 
     format = Format.BINARY
-    oid = postgres.types["timetz"].oid
+    oid = _oids.TIMETZ_OID
 
     def dump(self, obj: time) -> bytes:
         us = obj.microsecond + 1_000_000 * (
@@ -145,7 +145,7 @@ class _BaseDatetimeTextDumper(_BaseDatetimeDumper):
 
 class DatetimeDumper(_BaseDatetimeTextDumper):
 
-    oid = postgres.types["timestamptz"].oid
+    oid = _oids.TIMESTAMPTZ_OID
 
     def upgrade(self, obj: datetime, format: PyFormat) -> Dumper:
         if obj.tzinfo:
@@ -156,13 +156,13 @@ class DatetimeDumper(_BaseDatetimeTextDumper):
 
 class DatetimeNoTzDumper(_BaseDatetimeTextDumper):
 
-    oid = postgres.types["timestamp"].oid
+    oid = _oids.TIMESTAMP_OID
 
 
 class DatetimeBinaryDumper(_BaseDatetimeDumper):
 
     format = Format.BINARY
-    oid = postgres.types["timestamptz"].oid
+    oid = _oids.TIMESTAMPTZ_OID
 
     def dump(self, obj: datetime) -> bytes:
         delta = obj - _pg_datetimetz_epoch
@@ -179,7 +179,7 @@ class DatetimeBinaryDumper(_BaseDatetimeDumper):
 class DatetimeNoTzBinaryDumper(_BaseDatetimeDumper):
 
     format = Format.BINARY
-    oid = postgres.types["timestamp"].oid
+    oid = _oids.TIMESTAMP_OID
 
     def dump(self, obj: datetime) -> bytes:
         delta = obj - _pg_datetime_epoch
@@ -189,7 +189,7 @@ class DatetimeNoTzBinaryDumper(_BaseDatetimeDumper):
 
 class TimedeltaDumper(Dumper):
 
-    oid = postgres.types["interval"].oid
+    oid = _oids.INTERVAL_OID
 
     def __init__(self, cls: type, context: Optional[AdaptContext] = None):
         super().__init__(cls, context)
@@ -218,7 +218,7 @@ class TimedeltaDumper(Dumper):
 class TimedeltaBinaryDumper(Dumper):
 
     format = Format.BINARY
-    oid = postgres.types["interval"].oid
+    oid = _oids.INTERVAL_OID
 
     def dump(self, obj: timedelta) -> bytes:
         micros = 1_000_000 * obj.seconds + obj.microseconds
index a80e0e4e35b01aec145681ffca279c20d9f4618b..fc4a6d6f3fbbfb158d7464a21939eff90b9e6f91 100644 (file)
@@ -8,8 +8,8 @@ import json
 from typing import Any, Callable, Dict, Optional, Tuple, Type, Union
 
 from .. import abc
+from .. import _oids
 from .. import errors as e
-from .. import postgres
 from ..pq import Format
 from ..adapt import Buffer, Dumper, Loader, PyFormat, AdaptersMap
 from ..errors import DataError
@@ -134,24 +134,24 @@ class _JsonDumper(Dumper):
 
 class JsonDumper(_JsonDumper):
 
-    oid = postgres.types["json"].oid
+    oid = _oids.JSON_OID
 
 
 class JsonBinaryDumper(_JsonDumper):
 
     format = Format.BINARY
-    oid = postgres.types["json"].oid
+    oid = _oids.JSON_OID
 
 
 class JsonbDumper(_JsonDumper):
 
-    oid = postgres.types["jsonb"].oid
+    oid = _oids.JSONB_OID
 
 
 class JsonbBinaryDumper(_JsonDumper):
 
     format = Format.BINARY
-    oid = postgres.types["jsonb"].oid
+    oid = _oids.JSONB_OID
 
     def dump(self, obj: _JsonWrapper) -> bytes:
         dumps = obj.dumps or self.dumps
index 44235494feeeec085eaeca39234671621142d355..682402a20e9c3d653ccebbfbf60c19fe80896471 100644 (file)
@@ -9,6 +9,7 @@ from typing import Any, Generic, List, Iterable
 from typing import MutableSequence, Optional, Type, Union, overload
 from datetime import date, datetime
 
+from .. import _oids
 from .. import errors as e
 from .. import postgres
 from ..pq import Format
@@ -378,27 +379,27 @@ def register_multirange(
 
 
 class Int4MultirangeDumper(MultirangeDumper):
-    oid = postgres.types["int4multirange"].oid
+    oid = _oids.INT4MULTIRANGE_OID
 
 
 class Int8MultirangeDumper(MultirangeDumper):
-    oid = postgres.types["int8multirange"].oid
+    oid = _oids.INT8MULTIRANGE_OID
 
 
 class NumericMultirangeDumper(MultirangeDumper):
-    oid = postgres.types["nummultirange"].oid
+    oid = _oids.NUMMULTIRANGE_OID
 
 
 class DateMultirangeDumper(MultirangeDumper):
-    oid = postgres.types["datemultirange"].oid
+    oid = _oids.DATEMULTIRANGE_OID
 
 
 class TimestampMultirangeDumper(MultirangeDumper):
-    oid = postgres.types["tsmultirange"].oid
+    oid = _oids.TSMULTIRANGE_OID
 
 
 class TimestamptzMultirangeDumper(MultirangeDumper):
-    oid = postgres.types["tstzmultirange"].oid
+    oid = _oids.TSTZMULTIRANGE_OID
 
 
 # Binary dumpers for builtin multirange types wrappers
@@ -407,81 +408,81 @@ class TimestamptzMultirangeDumper(MultirangeDumper):
 
 
 class Int4MultirangeBinaryDumper(MultirangeBinaryDumper):
-    oid = postgres.types["int4multirange"].oid
+    oid = _oids.INT4MULTIRANGE_OID
 
 
 class Int8MultirangeBinaryDumper(MultirangeBinaryDumper):
-    oid = postgres.types["int8multirange"].oid
+    oid = _oids.INT8MULTIRANGE_OID
 
 
 class NumericMultirangeBinaryDumper(MultirangeBinaryDumper):
-    oid = postgres.types["nummultirange"].oid
+    oid = _oids.NUMMULTIRANGE_OID
 
 
 class DateMultirangeBinaryDumper(MultirangeBinaryDumper):
-    oid = postgres.types["datemultirange"].oid
+    oid = _oids.DATEMULTIRANGE_OID
 
 
 class TimestampMultirangeBinaryDumper(MultirangeBinaryDumper):
-    oid = postgres.types["tsmultirange"].oid
+    oid = _oids.TSMULTIRANGE_OID
 
 
 class TimestamptzMultirangeBinaryDumper(MultirangeBinaryDumper):
-    oid = postgres.types["tstzmultirange"].oid
+    oid = _oids.TSTZMULTIRANGE_OID
 
 
 # Text loaders for builtin multirange types
 
 
 class Int4MultirangeLoader(MultirangeLoader[int]):
-    subtype_oid = postgres.types["int4"].oid
+    subtype_oid = _oids.INT4_OID
 
 
 class Int8MultirangeLoader(MultirangeLoader[int]):
-    subtype_oid = postgres.types["int8"].oid
+    subtype_oid = _oids.INT8_OID
 
 
 class NumericMultirangeLoader(MultirangeLoader[Decimal]):
-    subtype_oid = postgres.types["numeric"].oid
+    subtype_oid = _oids.NUMERIC_OID
 
 
 class DateMultirangeLoader(MultirangeLoader[date]):
-    subtype_oid = postgres.types["date"].oid
+    subtype_oid = _oids.DATE_OID
 
 
 class TimestampMultirangeLoader(MultirangeLoader[datetime]):
-    subtype_oid = postgres.types["timestamp"].oid
+    subtype_oid = _oids.TIMESTAMP_OID
 
 
 class TimestampTZMultirangeLoader(MultirangeLoader[datetime]):
-    subtype_oid = postgres.types["timestamptz"].oid
+    subtype_oid = _oids.TIMESTAMPTZ_OID
 
 
 # Binary loaders for builtin multirange types
 
 
 class Int4MultirangeBinaryLoader(MultirangeBinaryLoader[int]):
-    subtype_oid = postgres.types["int4"].oid
+    subtype_oid = _oids.INT4_OID
 
 
 class Int8MultirangeBinaryLoader(MultirangeBinaryLoader[int]):
-    subtype_oid = postgres.types["int8"].oid
+    subtype_oid = _oids.INT8_OID
 
 
 class NumericMultirangeBinaryLoader(MultirangeBinaryLoader[Decimal]):
-    subtype_oid = postgres.types["numeric"].oid
+    subtype_oid = _oids.NUMERIC_OID
 
 
 class DateMultirangeBinaryLoader(MultirangeBinaryLoader[date]):
-    subtype_oid = postgres.types["date"].oid
+    subtype_oid = _oids.DATE_OID
 
 
 class TimestampMultirangeBinaryLoader(MultirangeBinaryLoader[datetime]):
-    subtype_oid = postgres.types["timestamp"].oid
+    subtype_oid = _oids.TIMESTAMP_OID
 
 
 class TimestampTZMultirangeBinaryLoader(MultirangeBinaryLoader[datetime]):
-    subtype_oid = postgres.types["timestamptz"].oid
+    subtype_oid = _oids.TIMESTAMPTZ_OID
 
 
 def register_default_adapters(context: AdaptContext) -> None:
index 2f2c05b1ea35e0388cfbded9bbb4190b4c202f62..99a023e9b421fa658cc21fbab93e5e8b184abf24 100644 (file)
@@ -7,7 +7,7 @@ Adapters for network types.
 from typing import Callable, Optional, Type, Union, TYPE_CHECKING
 from typing_extensions import TypeAlias
 
-from .. import postgres
+from .. import _oids
 from ..pq import Format
 from ..abc import AdaptContext
 from ..adapt import Buffer, Dumper, Loader
@@ -51,7 +51,7 @@ class _LazyIpaddress:
 
 class InterfaceDumper(Dumper):
 
-    oid = postgres.types["inet"].oid
+    oid = _oids.INET_OID
 
     def dump(self, obj: Interface) -> bytes:
         return str(obj).encode()
@@ -59,7 +59,7 @@ class InterfaceDumper(Dumper):
 
 class NetworkDumper(Dumper):
 
-    oid = postgres.types["cidr"].oid
+    oid = _oids.CIDR_OID
 
     def dump(self, obj: Network) -> bytes:
         return str(obj).encode()
@@ -67,7 +67,7 @@ class NetworkDumper(Dumper):
 
 class _AIBinaryDumper(Dumper):
     format = Format.BINARY
-    oid = postgres.types["inet"].oid
+    oid = _oids.INET_OID
 
 
 class AddressBinaryDumper(_AIBinaryDumper):
@@ -111,7 +111,7 @@ class InetBinaryDumper(_AIBinaryDumper, _LazyIpaddress):
 class NetworkBinaryDumper(Dumper):
 
     format = Format.BINARY
-    oid = postgres.types["cidr"].oid
+    oid = _oids.CIDR_OID
 
     def dump(self, obj: Network) -> bytes:
         packed = obj.network_address.packed
index 1bd9329f5947bb64b5a93514f0af4588778bd11a..ada6e942ee770183d33dbc2bbf458231c3af26bc 100644 (file)
@@ -9,7 +9,7 @@ from math import log
 from typing import Any, Callable, DefaultDict, Dict, Tuple, Union, cast
 from decimal import Decimal, DefaultContext, Context
 
-from .. import postgres
+from .. import _oids
 from .. import errors as e
 from ..pq import Format
 from ..abc import AdaptContext
@@ -66,7 +66,7 @@ class _SpecialValuesDumper(Dumper):
 
 class FloatDumper(_SpecialValuesDumper):
 
-    oid = postgres.types["float8"].oid
+    oid = _oids.FLOAT8_OID
 
     _special = {
         b"inf": b"'Infinity'::float8",
@@ -76,13 +76,13 @@ class FloatDumper(_SpecialValuesDumper):
 
 
 class Float4Dumper(FloatDumper):
-    oid = postgres.types["float4"].oid
+    oid = _oids.FLOAT4_OID
 
 
 class FloatBinaryDumper(Dumper):
 
     format = Format.BINARY
-    oid = postgres.types["float8"].oid
+    oid = _oids.FLOAT8_OID
 
     def dump(self, obj: float) -> bytes:
         return pack_float8(obj)
@@ -90,7 +90,7 @@ class FloatBinaryDumper(Dumper):
 
 class Float4BinaryDumper(FloatBinaryDumper):
 
-    oid = postgres.types["float4"].oid
+    oid = _oids.FLOAT4_OID
 
     def dump(self, obj: float) -> bytes:
         return pack_float4(obj)
@@ -98,7 +98,7 @@ class Float4BinaryDumper(FloatBinaryDumper):
 
 class DecimalDumper(_SpecialValuesDumper):
 
-    oid = postgres.types["numeric"].oid
+    oid = _oids.NUMERIC_OID
 
     def dump(self, obj: Decimal) -> bytes:
         if obj.is_nan():
@@ -115,23 +115,23 @@ class DecimalDumper(_SpecialValuesDumper):
 
 
 class Int2Dumper(_IntDumper):
-    oid = postgres.types["int2"].oid
+    oid = _oids.INT2_OID
 
 
 class Int4Dumper(_IntDumper):
-    oid = postgres.types["int4"].oid
+    oid = _oids.INT4_OID
 
 
 class Int8Dumper(_IntDumper):
-    oid = postgres.types["int8"].oid
+    oid = _oids.INT8_OID
 
 
 class IntNumericDumper(_IntDumper):
-    oid = postgres.types["numeric"].oid
+    oid = _oids.NUMERIC_OID
 
 
 class OidDumper(_IntDumper):
-    oid = postgres.types["oid"].oid
+    oid = _oids.OID_OID
 
 
 class IntDumper(Dumper):
@@ -363,7 +363,7 @@ NUMERIC_NINF_BIN = _pack_numeric_head(0, 0, NUMERIC_NINF, 0)
 class DecimalBinaryDumper(Dumper):
 
     format = Format.BINARY
-    oid = postgres.types["numeric"].oid
+    oid = _oids.NUMERIC_OID
 
     def dump(self, obj: Decimal) -> Buffer:
         return dump_decimal_to_numeric_binary(obj)
@@ -380,7 +380,7 @@ class NumericDumper(DecimalDumper):
 class NumericBinaryDumper(Dumper):
 
     format = Format.BINARY
-    oid = postgres.types["numeric"].oid
+    oid = _oids.NUMERIC_OID
 
     def dump(self, obj: Union[Decimal, int]) -> Buffer:
         if isinstance(obj, int):
index 513f68a506b90fc60b52c5745d9893902ed0555b..81ca38e38ec97a7cbe54a33e9bd0af5a5b6e8212 100644 (file)
@@ -10,6 +10,7 @@ from typing import cast
 from decimal import Decimal
 from datetime import date, datetime
 
+from .. import _oids
 from .. import errors as e
 from .. import postgres
 from ..pq import Format
@@ -564,27 +565,27 @@ def register_range(info: RangeInfo, context: Optional[AdaptContext] = None) -> N
 
 
 class Int4RangeDumper(RangeDumper):
-    oid = postgres.types["int4range"].oid
+    oid = _oids.INT4RANGE_OID
 
 
 class Int8RangeDumper(RangeDumper):
-    oid = postgres.types["int8range"].oid
+    oid = _oids.INT8RANGE_OID
 
 
 class NumericRangeDumper(RangeDumper):
-    oid = postgres.types["numrange"].oid
+    oid = _oids.NUMRANGE_OID
 
 
 class DateRangeDumper(RangeDumper):
-    oid = postgres.types["daterange"].oid
+    oid = _oids.DATERANGE_OID
 
 
 class TimestampRangeDumper(RangeDumper):
-    oid = postgres.types["tsrange"].oid
+    oid = _oids.TSRANGE_OID
 
 
 class TimestamptzRangeDumper(RangeDumper):
-    oid = postgres.types["tstzrange"].oid
+    oid = _oids.TSTZRANGE_OID
 
 
 # Binary dumpers for builtin range types wrappers
@@ -593,81 +594,81 @@ class TimestamptzRangeDumper(RangeDumper):
 
 
 class Int4RangeBinaryDumper(RangeBinaryDumper):
-    oid = postgres.types["int4range"].oid
+    oid = _oids.INT4RANGE_OID
 
 
 class Int8RangeBinaryDumper(RangeBinaryDumper):
-    oid = postgres.types["int8range"].oid
+    oid = _oids.INT8RANGE_OID
 
 
 class NumericRangeBinaryDumper(RangeBinaryDumper):
-    oid = postgres.types["numrange"].oid
+    oid = _oids.NUMRANGE_OID
 
 
 class DateRangeBinaryDumper(RangeBinaryDumper):
-    oid = postgres.types["daterange"].oid
+    oid = _oids.DATERANGE_OID
 
 
 class TimestampRangeBinaryDumper(RangeBinaryDumper):
-    oid = postgres.types["tsrange"].oid
+    oid = _oids.TSRANGE_OID
 
 
 class TimestamptzRangeBinaryDumper(RangeBinaryDumper):
-    oid = postgres.types["tstzrange"].oid
+    oid = _oids.TSTZRANGE_OID
 
 
 # Text loaders for builtin range types
 
 
 class Int4RangeLoader(RangeLoader[int]):
-    subtype_oid = postgres.types["int4"].oid
+    subtype_oid = _oids.INT4_OID
 
 
 class Int8RangeLoader(RangeLoader[int]):
-    subtype_oid = postgres.types["int8"].oid
+    subtype_oid = _oids.INT8_OID
 
 
 class NumericRangeLoader(RangeLoader[Decimal]):
-    subtype_oid = postgres.types["numeric"].oid
+    subtype_oid = _oids.NUMERIC_OID
 
 
 class DateRangeLoader(RangeLoader[date]):
-    subtype_oid = postgres.types["date"].oid
+    subtype_oid = _oids.DATE_OID
 
 
 class TimestampRangeLoader(RangeLoader[datetime]):
-    subtype_oid = postgres.types["timestamp"].oid
+    subtype_oid = _oids.TIMESTAMP_OID
 
 
 class TimestampTZRangeLoader(RangeLoader[datetime]):
-    subtype_oid = postgres.types["timestamptz"].oid
+    subtype_oid = _oids.TIMESTAMPTZ_OID
 
 
 # Binary loaders for builtin range types
 
 
 class Int4RangeBinaryLoader(RangeBinaryLoader[int]):
-    subtype_oid = postgres.types["int4"].oid
+    subtype_oid = _oids.INT4_OID
 
 
 class Int8RangeBinaryLoader(RangeBinaryLoader[int]):
-    subtype_oid = postgres.types["int8"].oid
+    subtype_oid = _oids.INT8_OID
 
 
 class NumericRangeBinaryLoader(RangeBinaryLoader[Decimal]):
-    subtype_oid = postgres.types["numeric"].oid
+    subtype_oid = _oids.NUMERIC_OID
 
 
 class DateRangeBinaryLoader(RangeBinaryLoader[date]):
-    subtype_oid = postgres.types["date"].oid
+    subtype_oid = _oids.DATE_OID
 
 
 class TimestampRangeBinaryLoader(RangeBinaryLoader[datetime]):
-    subtype_oid = postgres.types["timestamp"].oid
+    subtype_oid = _oids.TIMESTAMP_OID
 
 
 class TimestampTZRangeBinaryLoader(RangeBinaryLoader[datetime]):
-    subtype_oid = postgres.types["timestamptz"].oid
+    subtype_oid = _oids.TIMESTAMPTZ_OID
 
 
 def register_default_adapters(context: AdaptContext) -> None:
index fe5779b2009bfef6dc430543087993940363a3c4..11318667915a4a24da6cd56481fc8227421d7c53 100644 (file)
@@ -6,12 +6,11 @@ Adapters for textual types.
 
 from typing import Optional, Union, TYPE_CHECKING
 
-from .. import postgres
+from .. import _oids
 from ..pq import Format, Escaping
 from ..abc import AdaptContext
 from ..adapt import Buffer, Dumper, Loader
 from ..errors import DataError
-from .._oids import INVALID_OID
 from .._encodings import conn_encoding
 
 if TYPE_CHECKING:
@@ -58,17 +57,17 @@ class _StrDumper(_BaseStrDumper):
 
 class StrBinaryDumper(_StrBinaryDumper):
 
-    oid = postgres.types["text"].oid
+    oid = _oids.TEXT_OID
 
 
 class StrBinaryDumperVarchar(_StrBinaryDumper):
 
-    oid = postgres.types["varchar"].oid
+    oid = _oids.VARCHAR_OID
 
 
 class StrBinaryDumperName(_StrBinaryDumper):
 
-    oid = postgres.types["name"].oid
+    oid = _oids.NAME_OID
 
 
 class StrDumper(_StrDumper):
@@ -81,17 +80,17 @@ class StrDumper(_StrDumper):
     text oid is required, for instance with variadic functions.
     """
 
-    oid = postgres.types["text"].oid
+    oid = _oids.TEXT_OID
 
 
 class StrDumperVarchar(_StrDumper):
 
-    oid = postgres.types["varchar"].oid
+    oid = _oids.VARCHAR_OID
 
 
 class StrDumperName(_StrDumper):
 
-    oid = postgres.types["name"].oid
+    oid = _oids.NAME_OID
 
 
 class StrDumperUnknown(_StrDumper):
@@ -133,7 +132,7 @@ class TextBinaryLoader(TextLoader):
 
 class BytesDumper(Dumper):
 
-    oid = postgres.types["bytea"].oid
+    oid = _oids.BYTEA_OID
     _qprefix = b""
 
     def __init__(self, cls: type, context: Optional[AdaptContext] = None):
@@ -172,7 +171,7 @@ class BytesDumper(Dumper):
 class BytesBinaryDumper(Dumper):
 
     format = Format.BINARY
-    oid = postgres.types["bytea"].oid
+    oid = _oids.BYTEA_OID
 
     def dump(self, obj: Buffer) -> Buffer:
         return obj
@@ -216,7 +215,7 @@ def register_default_adapters(context: AdaptContext) -> None:
     adapters.register_dumper(str, StrDumper)
     adapters.register_dumper(str, StrDumperUnknown)
 
-    adapters.register_loader(INVALID_OID, TextLoader)
+    adapters.register_loader(_oids.INVALID_OID, TextLoader)
     adapters.register_loader("bpchar", TextLoader)
     adapters.register_loader("name", TextLoader)
     adapters.register_loader("text", TextLoader)
@@ -236,5 +235,5 @@ def register_default_adapters(context: AdaptContext) -> None:
     adapters.register_dumper(memoryview, BytesBinaryDumper)
 
     adapters.register_loader("bytea", ByteaLoader)
-    adapters.register_loader(INVALID_OID, ByteaBinaryLoader)
+    adapters.register_loader(_oids.INVALID_OID, ByteaBinaryLoader)
     adapters.register_loader("bytea", ByteaBinaryLoader)
index f92354c358f86e85d76ed69b39c7f05f94aa968e..f9f35d54f87899459abe677d61756656047b288b 100644 (file)
@@ -6,7 +6,7 @@ Adapters for the UUID type.
 
 from typing import Callable, Optional, TYPE_CHECKING
 
-from .. import postgres
+from .. import _oids
 from ..pq import Format
 from ..abc import AdaptContext
 from ..adapt import Buffer, Dumper, Loader
@@ -20,7 +20,7 @@ UUID: Callable[..., "uuid.UUID"] = None  # type: ignore[assignment]
 
 class UUIDDumper(Dumper):
 
-    oid = postgres.types["uuid"].oid
+    oid = _oids.UUID_OID
 
     def dump(self, obj: "uuid.UUID") -> bytes:
         return obj.hex.encode()