# Copyright (C) 2021 The Psycopg Team
import sys
-from functools import partial
-from typing import Any
-
-if sys.version_info >= (3, 9):
- from asyncio import to_thread
- from zoneinfo import ZoneInfo
- from functools import cache
- from collections import Counter, deque as Deque
- from collections.abc import Callable
-else:
- import asyncio
- from typing import Callable, Counter, Deque, TypeVar
- from functools import lru_cache
- from backports.zoneinfo import ZoneInfo
-
- cache = lru_cache(maxsize=None)
-
- R = TypeVar("R")
- async def to_thread(func: Callable[..., R], /, *args: Any, **kwargs: Any) -> R:
- loop = asyncio.get_running_loop()
- func_call = partial(func, *args, **kwargs)
- return await loop.run_in_executor(None, func_call)
+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 __future__ import annotations
import sys
-
-import psycopg.errors as e
-
-if sys.version_info >= (3, 9):
- from collections import Counter, deque as Deque
-else:
- from typing import Counter, Deque
+from collections import Counter, deque as Deque
if sys.version_info >= (3, 10):
from typing import TypeAlias
else:
from typing_extensions import TypeVar
+import psycopg.errors as e
+
__all__ = [
"Counter",
"Deque",
import re
import sys
import operator
+import collections
from typing import Callable
from contextlib import contextmanager
+import pytest
-if sys.version_info >= (3, 9):
- import collections
-
- Counter = collections.Counter
-else:
- import typing
-
- Counter = typing.Counter
+Counter = collections.Counter
if sys.version_info >= (3, 11):
import typing
assert_type = typing_extensions.assert_type
-
-import pytest
-
eur = "\u20ac"