]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
refactor: remove unneeded objects from _compat modules
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sat, 28 Dec 2024 01:47:34 +0000 (02:47 +0100)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sat, 28 Dec 2024 01:47:34 +0000 (02:47 +0100)
28 files changed:
psycopg/psycopg/_compat.py
psycopg/psycopg/_connection_base.py
psycopg/psycopg/_encodings.py
psycopg/psycopg/_pipeline.py
psycopg/psycopg/_preparing.py
psycopg/psycopg/_tz.py
psycopg/psycopg/connection_async.py
psycopg/psycopg/generators.py
psycopg/psycopg/pq/misc.py
psycopg/psycopg/types/array.py
psycopg/psycopg/types/composite.py
psycopg/psycopg/types/enum.py
psycopg/psycopg/types/hstore.py
psycopg/psycopg/types/json.py
psycopg/psycopg/types/multirange.py
psycopg/psycopg/types/range.py
psycopg/psycopg/types/shapely.py
psycopg_c/psycopg_c/_psycopg.pyi
psycopg_c/psycopg_c/_psycopg/generators.pyx
psycopg_c/psycopg_c/types/datetime.pyx
psycopg_pool/psycopg_pool/_compat.py
psycopg_pool/psycopg_pool/base.py
psycopg_pool/psycopg_pool/pool.py
psycopg_pool/psycopg_pool/pool_async.py
tests/fix_db.py
tests/fix_faker.py
tests/scripts/pipeline-demo.py
tests/types/test_datetime.py

index 28a1edb6aa10fc11fbb75c2f30d4864ea54473ed..5157f77aeb3ed3bc9170ef01d108065da2ad3fe2 100644 (file)
@@ -6,12 +6,6 @@ compatibility functions for different Python versions
 
 import sys
 
-from asyncio import to_thread
-from zoneinfo import ZoneInfo
-from functools import cache
-from collections import Counter, deque as Deque
-
-
 if sys.version_info >= (3, 10):
     from typing import TypeGuard, TypeAlias
 else:
@@ -28,14 +22,9 @@ else:
     from typing_extensions import TypeVar
 
 __all__ = [
-    "Counter",
-    "Deque",
     "LiteralString",
     "Self",
     "TypeAlias",
     "TypeGuard",
     "TypeVar",
-    "ZoneInfo",
-    "cache",
-    "to_thread",
 ]
index 90cd237caecc9d6af2f906fe38dd81c945dce520..a260fe177ec1bcc29815a6361c9231fe2a32d0cf 100644 (file)
@@ -12,6 +12,7 @@ from typing import Callable, Generic, NamedTuple, TYPE_CHECKING
 from weakref import ref, ReferenceType
 from warnings import warn
 from functools import partial
+from collections import deque
 
 from . import pq
 from . import errors as e
@@ -23,7 +24,7 @@ from ._tpc import Xid
 from .rows import Row
 from .adapt import AdaptersMap
 from ._enums import IsolationLevel
-from ._compat import Deque, LiteralString, Self, TypeAlias, TypeVar
+from ._compat import LiteralString, Self, TypeAlias, TypeVar
 from .pq.misc import connection_summary
 from ._pipeline import BasePipeline
 from ._preparing import PrepareManager
@@ -117,7 +118,7 @@ class BaseConnection(Generic[Row]):
         pgconn.notify_handler = partial(BaseConnection._notify_handler, wself)
 
         # Gather notifies when the notifies() generator is not running.
-        self._notifies_backlog = Deque[Notify]()
+        self._notifies_backlog = deque[Notify]()
         self._notifies_backlog_handler = partial(
             BaseConnection._add_notify_to_backlog, wself
         )
index 42da2c529088f5272b6b8c82929d644411293e32..d6f924373c3a30b20bb60b8c4b367a9b2c015509 100644 (file)
@@ -10,10 +10,10 @@ import re
 import string
 import codecs
 from typing import Any, TYPE_CHECKING
+from functools import cache
 
 from .pq._enums import ConnStatus
 from .errors import NotSupportedError
-from ._compat import cache
 
 if TYPE_CHECKING:
     from ._connection_base import BaseConnection
index 6ad3b303fe9ad672ca574ac17f2b2007772a4b43..6621658cbaefac5590a98cd1fe92acff84485a15 100644 (file)
@@ -9,11 +9,12 @@ from __future__ import annotations
 import logging
 from types import TracebackType
 from typing import Any, TYPE_CHECKING
+from collections import deque
 
 from . import pq
 from . import errors as e
 from .abc import PipelineCommand, PQGen
-from ._compat import Deque, Self, TypeAlias
+from ._compat import Self, TypeAlias
 from .pq.misc import connection_summary
 from .generators import pipeline_communicate, fetch_many, send
 from ._capabilities import capabilities
@@ -41,14 +42,14 @@ logger = logging.getLogger("psycopg")
 
 
 class BasePipeline:
-    command_queue: Deque[PipelineCommand]
-    result_queue: Deque[PendingResult]
+    command_queue: deque[PipelineCommand]
+    result_queue: deque[PendingResult]
 
     def __init__(self, conn: BaseConnection[Any]) -> None:
         self._conn = conn
         self.pgconn = conn.pgconn
-        self.command_queue = Deque[PipelineCommand]()
-        self.result_queue = Deque[PendingResult]()
+        self.command_queue = deque[PipelineCommand]()
+        self.result_queue = deque[PendingResult]()
         self.level = 0
 
     def __repr__(self) -> str:
index 4a06ff44f92fe65b447ecf7f72202e3a1e25d229..6842e44a5727b0547a7e55e25d4766d10b8d69ab 100644 (file)
@@ -8,12 +8,12 @@ from __future__ import annotations
 
 from enum import IntEnum, auto
 from typing import Any, TYPE_CHECKING
+from collections import deque, OrderedDict
 from collections.abc import Sequence
-from collections import OrderedDict
 
 from . import pq
 from .abc import PQGen
-from ._compat import Deque, TypeAlias
+from ._compat import TypeAlias
 from ._queries import PostgresQuery
 
 if TYPE_CHECKING:
@@ -49,7 +49,7 @@ class PrepareManager:
         # Counter to generate prepared statements names
         self._prepared_idx = 0
 
-        self._to_flush = Deque["bytes | None"]()
+        self._to_flush = deque["bytes | None"]()
 
     @staticmethod
     def key(query: PostgresQuery) -> Key:
index c6f400d7c881ce3fcc4dc8b0757da834f4a01891..de7be44b54b20783d6aef340ba7f9cd0a03ac59a 100644 (file)
@@ -8,9 +8,9 @@ from __future__ import annotations
 
 import logging
 from datetime import timezone, tzinfo
+from zoneinfo import ZoneInfo
 
 from .pq.abc import PGconn
-from ._compat import ZoneInfo
 
 logger = logging.getLogger("psycopg")
 
index c581e7623972adf570beae94de09f220eff7f22e..20397607859f8e38d47842610e48041e704912e8 100644 (file)
@@ -35,8 +35,7 @@ from ._connection_base import BaseConnection, CursorRow, Notify
 if True:  # ASYNC
     import sys
     import asyncio
-    from asyncio import Lock
-    from ._compat import to_thread
+    from asyncio import Lock, to_thread
 else:
     from threading import Lock
 
index 5d6554f36fb1585f55c0f20ff11c0d2846b4edf4..8eee7ccca370cadda7370c552c658fc7861ef560 100644 (file)
@@ -24,13 +24,13 @@ from __future__ import annotations
 
 import logging
 from time import monotonic
+from collections import deque
 
 from . import pq
 from . import errors as e
 from .abc import Buffer, PipelineCommand, PQGen, PQGenConn
 from .pq.abc import PGcancelConn, PGconn, PGresult
 from .waiting import Wait, Ready
-from ._compat import Deque
 from ._cmodule import _psycopg
 from ._encodings import conninfo_encoding
 
@@ -226,7 +226,7 @@ def _fetch(pgconn: PGconn) -> PQGen[PGresult | None]:
 
 
 def _pipeline_communicate(
-    pgconn: PGconn, commands: Deque[PipelineCommand]
+    pgconn: PGconn, commands: deque[PipelineCommand]
 ) -> PQGen[list[list[PGresult]]]:
     """Generator to send queries from a connection in pipeline mode while also
     receiving results.
index cb95e5ef2f80a220c1928f2a34a82fbf3a43e918..71206ee4f96fbc74c2f204bdd35babe00d347f7d 100644 (file)
@@ -13,10 +13,10 @@ import logging
 import ctypes.util
 from typing import NamedTuple
 from pathlib import Path
+from functools import cache
 
 from . import abc
 from ._enums import ConnStatus, TransactionStatus, PipelineStatus
-from .._compat import cache
 
 logger = logging.getLogger("psycopg.pq")
 
index a50d3bf586091a133246cfa8b9885fdcc152e3cb..d14bd2b97883af96e3801fe506fa0724f270a2c6 100644 (file)
@@ -10,6 +10,7 @@ import re
 import struct
 from math import prod
 from typing import Any, cast, Callable
+from functools import cache
 
 from .. import pq
 from .. import errors as e
@@ -17,7 +18,6 @@ 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, TEXT_ARRAY_OID
-from .._compat import cache
 from .._struct import pack_len, unpack_len
 from .._cmodule import _psycopg
 from .._typeinfo import TypeInfo
index 8346ff334cc1705bb8476225f30b01562f144fcd..3a17185653da802a595748723c44b58be8505208 100644 (file)
@@ -9,6 +9,7 @@ from __future__ import annotations
 import re
 import struct
 from typing import Any, Callable, cast, NamedTuple, TYPE_CHECKING
+from functools import cache
 from collections import namedtuple
 from collections.abc import Iterator, Sequence
 
@@ -18,7 +19,6 @@ from .. import sql
 from .. import postgres
 from ..adapt import Transformer, PyFormat, RecursiveDumper, Loader, Dumper, Buffer
 from .._oids import TEXT_OID
-from .._compat import cache
 from .._struct import pack_len, unpack_len
 from .._typeinfo import TypeInfo
 from .._encodings import _as_python_identifier
index cfc09c34276dfd35c66a12400bee7ab1aa227062..1dfa4acd02f4693b41f0463bd6e3d63faab52c2b 100644 (file)
@@ -6,6 +6,7 @@ from __future__ import annotations
 
 from enum import Enum
 from typing import Any, Generic, cast, TYPE_CHECKING
+from functools import cache
 from collections.abc import Mapping, Sequence
 
 from .. import sql
@@ -14,7 +15,7 @@ from .. import errors as e
 from ..pq import Format
 from ..abc import AdaptContext, Query
 from ..adapt import Buffer, Dumper, Loader
-from .._compat import cache, TypeAlias, TypeVar
+from .._compat import TypeAlias, TypeVar
 from .._encodings import conn_encoding
 from .._typeinfo import TypeInfo
 
index 55944c1488b07502aa04b12eea60fb716932720c..cd83887411e983274808d934e7be4d6a26bd0799 100644 (file)
@@ -7,13 +7,14 @@ dict to hstore adaptation
 from __future__ import annotations
 
 import re
+from functools import cache
 
 from .. import errors as e
 from .. import postgres
 from ..abc import Buffer, AdaptContext
 from .._oids import TEXT_OID
 from ..adapt import PyFormat, RecursiveDumper, RecursiveLoader
-from .._compat import cache, TypeAlias
+from .._compat import TypeAlias
 from .._typeinfo import TypeInfo
 
 _re_escape = re.compile(r'(["\\])')
index 56ac23418542e252d4978a57ca62e4513bf03c00..a3897049e3edf220db331e0fa9c0e922bd6b89f1 100644 (file)
@@ -8,6 +8,7 @@ from __future__ import annotations
 
 import json
 from typing import Any, Callable
+from functools import cache
 
 from .. import abc
 from .. import _oids
@@ -15,7 +16,7 @@ from .. import errors as e
 from ..pq import Format
 from ..adapt import Buffer, Dumper, Loader, PyFormat, AdaptersMap
 from ..errors import DataError
-from .._compat import cache, TypeAlias
+from .._compat import TypeAlias
 
 JsonDumpsFunction: TypeAlias = Callable[[Any], "str | bytes"]
 JsonLoadsFunction: TypeAlias = Callable[["str | bytes"], Any]
index 97b9f8f9e1512bf69687ce8b758906023190119b..33b419c4278c9c3a96ddab5019caaccf464ba6e9 100644 (file)
@@ -9,6 +9,7 @@ from __future__ import annotations
 from decimal import Decimal
 from typing import Any, Generic, overload, TYPE_CHECKING
 from datetime import date, datetime
+from functools import cache
 from collections.abc import Iterable, MutableSequence
 
 from .. import sql
@@ -19,7 +20,6 @@ from ..pq import Format
 from ..abc import AdaptContext, Buffer, Dumper, DumperKey, Query
 from ..adapt import RecursiveDumper, RecursiveLoader, PyFormat
 from .._oids import INVALID_OID, TEXT_OID
-from .._compat import cache
 from .._struct import pack_len, unpack_len
 from .._typeinfo import TypeInfo, TypesRegistry
 
index 3327a8411ae299c296b3686831b2214c30c78ec4..d5c28b4175f8b88707f26b66022d8641d4480afe 100644 (file)
@@ -10,6 +10,7 @@ import re
 from typing import Any, Generic, cast, TYPE_CHECKING
 from decimal import Decimal
 from datetime import date, datetime
+from functools import cache
 
 from .. import sql
 from .. import _oids
@@ -19,7 +20,7 @@ from ..pq import Format
 from ..abc import AdaptContext, Buffer, Dumper, DumperKey, DumpFunc, LoadFunc, Query
 from ..adapt import RecursiveDumper, RecursiveLoader, PyFormat
 from .._oids import INVALID_OID, TEXT_OID
-from .._compat import cache, TypeVar
+from .._compat import TypeVar
 from .._struct import pack_len, unpack_len
 from .._typeinfo import TypeInfo, TypesRegistry
 
index 6a7e15761bfc48a5b09f9c91e664a7b53fef44c8..0ea441a4f805740726d18a968f682c9ae0c9fe07 100644 (file)
@@ -4,11 +4,12 @@ Adapters for PostGIS geometries
 
 from __future__ import annotations
 
+from functools import cache
+
 from .. import postgres
 from ..abc import AdaptContext, Buffer
 from ..adapt import Dumper, Loader
 from ..pq import Format
-from .._compat import cache
 from .._typeinfo import TypeInfo
 
 try:
index 1c661ea99cd47a5ff890f484b005a4946d5482e7..61fa0ce3fdc7bf542edf495f05925cf80070f8d1 100644 (file)
@@ -10,12 +10,12 @@ information. Will submit a bug.
 from __future__ import annotations
 
 from typing import Any, Sequence
+from collections import deque
 
 from psycopg import pq, abc, BaseConnection
 from psycopg.rows import Row, RowMaker
 from psycopg.adapt import AdaptersMap, PyFormat
 from psycopg.pq.abc import PGcancelConn, PGconn, PGresult
-from psycopg._compat import Deque
 
 class Transformer(abc.AdaptContext):
     types: tuple[int, ...] | None
@@ -60,7 +60,7 @@ def send(pgconn: PGconn) -> abc.PQGen[None]: ...
 def fetch_many(pgconn: PGconn) -> abc.PQGen[list[PGresult]]: ...
 def fetch(pgconn: PGconn) -> abc.PQGen[PGresult | None]: ...
 def pipeline_communicate(
-    pgconn: PGconn, commands: Deque[abc.PipelineCommand]
+    pgconn: PGconn, commands: deque[abc.PipelineCommand]
 ) -> abc.PQGen[list[list[PGresult]]]: ...
 def wait_c(
     gen: abc.PQGen[abc.RV], fileno: int, interval: float | None = None
index a908577c2a3689d06a973e24f4b16a6a5ca3218e..d382a4bd1e506eb61a9c17152ace0d9376fd0f75 100644 (file)
@@ -7,12 +7,12 @@ C implementation of generators for the communication protocols with the libpq
 from cpython.object cimport PyObject_CallFunctionObjArgs
 
 from time import monotonic
+from collections import deque
 
 from psycopg import errors as e
 from psycopg.pq import abc
 from psycopg.abc import PipelineCommand, PQGen
 from psycopg._enums import Wait, Ready
-from psycopg._compat import Deque
 from psycopg._encodings import conninfo_encoding
 
 cdef object WAIT_W = Wait.W
@@ -245,7 +245,7 @@ def fetch(pq.PGconn pgconn) -> PQGen[PGresult | None]:
 
 
 def pipeline_communicate(
-    pq.PGconn pgconn, commands: Deque[PipelineCommand]
+    pq.PGconn pgconn, commands: deque[PipelineCommand]
 ) -> PQGen[list[list[PGresult]]]:
     """Generator to send queries from a connection in pipeline mode while also
     receiving results.
index e2a6ac8a373933d360584f8b0532a09c47de3224..a3b80e181607537657292fbdd142075003e138fa 100644 (file)
@@ -22,11 +22,11 @@ static int _uspad[] = {0, 100000, 10000, 1000, 100, 10, 1};
     cdef int *_uspad
 
 from datetime import date, time, timedelta, datetime, timezone
+from zoneinfo import ZoneInfo
 
 from psycopg_c._psycopg cimport endian
 
 from psycopg import errors as e
-from psycopg._compat import ZoneInfo
 
 
 # Initialise the datetime C API
index 2f8a329f7df8f6da9e06f2c68e4f06971d9542a8..be6a967e03c6a3e6a61e719f2e73fdfeb3881ce2 100644 (file)
@@ -7,7 +7,6 @@ compatibility functions for different Python versions
 from __future__ import annotations
 
 import sys
-from collections import Counter, deque as Deque
 
 if sys.version_info >= (3, 10):
     from typing import TypeAlias
@@ -27,8 +26,6 @@ else:
 import psycopg.errors as e
 
 __all__ = [
-    "Counter",
-    "Deque",
     "Self",
     "TypeAlias",
     "TypeVar",
index 427fd24dc1c335370d8bf2a55bbf38610e7c7d69..eb1edf3811f43af35c877d0670926c40e435c496 100644 (file)
@@ -9,11 +9,11 @@ from __future__ import annotations
 from time import monotonic
 from random import random
 from typing import Any, TYPE_CHECKING
+from collections import Counter, deque
 
 from psycopg import errors as e
 
 from .errors import PoolClosed
-from ._compat import Counter, Deque
 
 if TYPE_CHECKING:
     from psycopg._connection_base import BaseConnection
@@ -40,7 +40,7 @@ class BasePool:
     _CONNECTIONS_ERRORS = "connections_errors"
     _CONNECTIONS_LOST = "connections_lost"
 
-    _pool: Deque[Any]
+    _pool: deque[Any]
 
     def __init__(
         self,
@@ -79,7 +79,7 @@ class BasePool:
         self.num_workers = num_workers
 
         self._nconns = min_size  # currently in the pool, out, being prepared
-        self._pool = Deque()
+        self._pool = deque()
         self._stats = Counter[str]()
 
         # Min number of connections in the pool in a max_idle unit of time.
index 0f1a0e9326ba8b4d8a340d2b0020a8b674157579..7466e021a7f56c465498589c9019d0b2a8b36708 100644 (file)
@@ -15,6 +15,7 @@ from abc import ABC, abstractmethod
 from time import monotonic
 from types import TracebackType
 from typing import Any, cast, Generic
+from collections import deque
 from collections.abc import Iterator
 from weakref import ref
 from contextlib import contextmanager
@@ -26,7 +27,7 @@ from psycopg.pq import TransactionStatus
 from .abc import CT, ConnectionCB, ConnectFailedCB
 from .base import AttemptWithBackoff, BasePool
 from .errors import PoolClosed, PoolTimeout, TooManyRequests
-from ._compat import Deque, Self
+from ._compat import Self
 from ._acompat import Condition, Event, Lock, Queue, Worker, spawn, gather
 from ._acompat import sleep, current_thread_name
 from .sched import Scheduler
@@ -36,7 +37,7 @@ logger = logging.getLogger("psycopg.pool")
 
 
 class ConnectionPool(Generic[CT], BasePool):
-    _pool: Deque[CT]
+    _pool: deque[CT]
 
     def __init__(
         self,
@@ -72,7 +73,7 @@ class ConnectionPool(Generic[CT], BasePool):
         self._sched: Scheduler
         self._tasks: Queue[MaintenanceTask]
 
-        self._waiting = Deque[WaitingClient[CT]]()
+        self._waiting = deque[WaitingClient[CT]]()
 
         # to notify that the pool is full
         self._pool_full_event: Event | None = None
index 2ecb298b5b86082886b937d7ea5c6821f864ca2b..6f841dd09a5a6bc41102465867776e5f7013838d 100644 (file)
@@ -12,6 +12,7 @@ from abc import ABC, abstractmethod
 from time import monotonic
 from types import TracebackType
 from typing import Any, cast, Generic
+from collections import deque
 from collections.abc import AsyncIterator
 from weakref import ref
 from contextlib import asynccontextmanager
@@ -23,7 +24,7 @@ from psycopg.pq import TransactionStatus
 from .abc import ACT, AsyncConnectionCB, AsyncConnectFailedCB
 from .base import AttemptWithBackoff, BasePool
 from .errors import PoolClosed, PoolTimeout, TooManyRequests
-from ._compat import Deque, Self
+from ._compat import Self
 from ._acompat import ACondition, AEvent, ALock, AQueue, AWorker, aspawn, agather
 from ._acompat import asleep, current_task_name
 from .sched_async import AsyncScheduler
@@ -35,7 +36,7 @@ logger = logging.getLogger("psycopg.pool")
 
 
 class AsyncConnectionPool(Generic[ACT], BasePool):
-    _pool: Deque[ACT]
+    _pool: deque[ACT]
 
     def __init__(
         self,
@@ -71,7 +72,7 @@ class AsyncConnectionPool(Generic[ACT], BasePool):
         self._sched: AsyncScheduler
         self._tasks: AQueue[MaintenanceTask]
 
-        self._waiting = Deque[WaitingClient[ACT]]()
+        self._waiting = deque[WaitingClient[ACT]]()
 
         # to notify that the pool is full
         self._pool_full_event: AEvent | None = None
index bb1109c05484121500310f7703f6da63b4153f70..64744dbe56035d2c71a853fd2bd637027d0be42a 100644 (file)
@@ -5,13 +5,13 @@ import os
 import sys
 import pytest
 import logging
+from functools import cache
 from contextlib import contextmanager
 
 import psycopg
 from psycopg import pq
 from psycopg import sql
 from psycopg.conninfo import conninfo_to_dict, make_conninfo
-from psycopg._compat import cache
 from psycopg.pq._debug import PGconnDebug
 
 from .utils import check_postgres_version
index e9c8f077044eb8fd521f2c01692da9162ee6b268..c1cfbda36cdfaf087b11bcfc453fd0c659632b45 100644 (file)
@@ -9,13 +9,13 @@ from random import choice, random, randrange
 from typing import Any
 from decimal import Decimal
 from contextlib import contextmanager, asynccontextmanager
+from collections import deque
 
 import pytest
 
 import psycopg
 from psycopg import sql
 from psycopg.adapt import PyFormat
-from psycopg._compat import Deque
 from psycopg.types.range import Range
 from psycopg.types.json import Json, Jsonb
 from psycopg.types.numeric import Int4, Int8
@@ -932,7 +932,7 @@ class JsonFloat:
 
 
 def deep_import(name):
-    parts = Deque(name.split("."))
+    parts = deque(name.split("."))
     seen = []
     if not parts:
         raise ValueError("name must be a dot-separated name")
index 45956097f9cd93721c666e1fb73989c88fd12d8d..d9eb92b5e326d82fea9bbe30229d3bcbc6ace322 100644 (file)
@@ -16,6 +16,7 @@ import logging
 from contextlib import contextmanager
 from functools import partial
 from typing import Any
+from collections import deque
 from collections.abc import Iterator, Sequence
 
 from psycopg import AsyncConnection, Connection
@@ -24,7 +25,6 @@ from psycopg import errors as e
 from psycopg.abc import PipelineCommand
 from psycopg.generators import pipeline_communicate
 from psycopg.pq import Format, DiagnosticField
-from psycopg._compat import Deque
 
 psycopg_logger = logging.getLogger("psycopg")
 pipeline_logger = logging.getLogger("pipeline")
@@ -112,7 +112,7 @@ class LoggingPGconn:
 @contextmanager
 def prepare_pipeline_demo_pq(
     pgconn: LoggingPGconn, rows_to_send: int, logger: logging.Logger
-) -> Iterator[tuple[Deque[PipelineCommand], Deque[str]]]:
+) -> Iterator[tuple[deque[PipelineCommand], deque[str]]]:
     """Set up pipeline demo with initial queries and yield commands and
     results queue for pipeline_communicate().
     """
@@ -138,8 +138,8 @@ def prepare_pipeline_demo_pq(
         ),
     ]
 
-    commands = Deque[PipelineCommand]()
-    results_queue = Deque[str]()
+    commands = deque[PipelineCommand]()
+    results_queue = deque[str]()
 
     for qname, query in setup_queries:
         if qname == "prepare":
index a50b53d18aeb191daa838ed8ddcadab182e0b1ff..907abe6dda38d1180361d532ee270dcbe5a4ffba 100644 (file)
@@ -1,10 +1,10 @@
 import datetime as dt
 
 import pytest
+from zoneinfo import ZoneInfo
 
 from psycopg import DataError, pq, sql
 from psycopg.adapt import PyFormat
-from psycopg._compat import ZoneInfo
 
 crdb_skip_datestyle = pytest.mark.crdb("skip", reason="set datestyle/intervalstyle")
 crdb_skip_negative_interval = pytest.mark.crdb("skip", reason="negative interval")