From: Daniele Varrazzo Date: Fri, 14 Feb 2025 16:30:30 +0000 (+0100) Subject: style: apply isort on codebase X-Git-Tag: 3.2.5~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b9b57fd7556132d557ca162d69478bb59048ca57;p=thirdparty%2Fpsycopg.git style: apply isort on codebase --- diff --git a/docs/lib/pg3_docs.py b/docs/lib/pg3_docs.py index 07fcea27c..4388cc9d4 100644 --- a/docs/lib/pg3_docs.py +++ b/docs/lib/pg3_docs.py @@ -83,7 +83,7 @@ def monkeypatch_autodoc(): """ Patch autodoc in order to use information found by `recover_defined_module`. """ - from sphinx.ext.autodoc import Documenter, AttributeDocumenter + from sphinx.ext.autodoc import AttributeDocumenter, Documenter orig_doc_get_real_modname = Documenter.get_real_modname orig_attr_get_real_modname = AttributeDocumenter.get_real_modname diff --git a/docs/lib/ticket_role.py b/docs/lib/ticket_role.py index 3f8a81204..f8f935bf5 100644 --- a/docs/lib/ticket_role.py +++ b/docs/lib/ticket_role.py @@ -10,6 +10,7 @@ An interpreted text role to link docs to tickets issues. """ import re + from docutils import nodes, utils from docutils.parsers.rst import roles diff --git a/psycopg/psycopg/__init__.py b/psycopg/psycopg/__init__.py index 71e70a65a..cd1ad261e 100644 --- a/psycopg/psycopg/__init__.py +++ b/psycopg/psycopg/__init__.py @@ -7,36 +7,30 @@ psycopg -- PostgreSQL database adapter for Python import logging from . import pq # noqa: F401 import early to stabilize side effects -from . import types -from . import postgres +from . import dbapi20, postgres, types from ._tpc import Xid -from .copy import Copy, AsyncCopy +from .copy import AsyncCopy, Copy from ._enums import IsolationLevel from .cursor import Cursor -from .errors import Warning, Error, InterfaceError, DatabaseError -from .errors import DataError, OperationalError, IntegrityError -from .errors import InternalError, ProgrammingError, NotSupportedError +from .errors import DatabaseError, DataError, Error, IntegrityError, InterfaceError +from .errors import InternalError, NotSupportedError, OperationalError +from .errors import ProgrammingError, Warning from ._column import Column -from ._pipeline import Pipeline, AsyncPipeline +from .dbapi20 import BINARY, DATETIME, NUMBER, ROWID, STRING, Binary, Date +from .dbapi20 import DateFromTicks, Time, TimeFromTicks, Timestamp, TimestampFromTicks +from .version import __version__ as __version__ # noqa: F401 +from ._pipeline import AsyncPipeline, Pipeline from .connection import Connection -from .transaction import Rollback, Transaction, AsyncTransaction +from .raw_cursor import AsyncRawCursor, AsyncRawServerCursor, RawCursor, RawServerCursor +from .transaction import AsyncTransaction, Rollback, Transaction from .cursor_async import AsyncCursor from ._capabilities import Capabilities, capabilities -from .server_cursor import AsyncServerCursor, ServerCursor from .client_cursor import AsyncClientCursor, ClientCursor -from .raw_cursor import AsyncRawCursor, RawCursor -from .raw_cursor import AsyncRawServerCursor, RawServerCursor +from .server_cursor import AsyncServerCursor, ServerCursor from ._connection_base import BaseConnection, Notify from ._connection_info import ConnectionInfo from .connection_async import AsyncConnection -from . import dbapi20 -from .dbapi20 import BINARY, DATETIME, NUMBER, ROWID, STRING -from .dbapi20 import Binary, Date, DateFromTicks, Time, TimeFromTicks -from .dbapi20 import Timestamp, TimestampFromTicks - -from .version import __version__ as __version__ # noqa: F401 - # Set the logger to a quiet default, can be enabled if needed logger = logging.getLogger("psycopg") if logger.level == logging.NOTSET: diff --git a/psycopg/psycopg/_acompat.py b/psycopg/psycopg/_acompat.py index d7290889d..3875a97bf 100644 --- a/psycopg/psycopg/_acompat.py +++ b/psycopg/psycopg/_acompat.py @@ -13,7 +13,7 @@ from __future__ import annotations import queue import asyncio import threading -from typing import Any, Callable, Coroutine, TYPE_CHECKING +from typing import TYPE_CHECKING, Any, Callable, Coroutine from ._compat import TypeAlias, TypeVar diff --git a/psycopg/psycopg/_adapters_map.py b/psycopg/psycopg/_adapters_map.py index c633b6bef..d8fedfa12 100644 --- a/psycopg/psycopg/_adapters_map.py +++ b/psycopg/psycopg/_adapters_map.py @@ -6,10 +6,10 @@ Mapping from types/oids to Dumpers/Loaders from __future__ import annotations -from typing import Any, cast, TYPE_CHECKING +from typing import TYPE_CHECKING, Any, cast -from . import pq from . import errors as e +from . import pq from .abc import Dumper, Loader from ._enums import PyFormat as PyFormat from ._compat import TypeVar diff --git a/psycopg/psycopg/_capabilities.py b/psycopg/psycopg/_capabilities.py index d1f6bb3eb..323141efc 100644 --- a/psycopg/psycopg/_capabilities.py +++ b/psycopg/psycopg/_capabilities.py @@ -6,8 +6,7 @@ psycopg capabilities objects from __future__ import annotations -from . import pq -from . import _cmodule +from . import _cmodule, pq from .errors import NotSupportedError diff --git a/psycopg/psycopg/_cmodule.py b/psycopg/psycopg/_cmodule.py index b3abf12fd..bc67f1daf 100644 --- a/psycopg/psycopg/_cmodule.py +++ b/psycopg/psycopg/_cmodule.py @@ -8,6 +8,7 @@ Simplify access to the _psycopg module from __future__ import annotations from types import ModuleType + from . import pq __version__: str | None = None diff --git a/psycopg/psycopg/_column.py b/psycopg/psycopg/_column.py index 92973824e..372775cf8 100644 --- a/psycopg/psycopg/_column.py +++ b/psycopg/psycopg/_column.py @@ -6,7 +6,7 @@ The Column object in Cursor.description from __future__ import annotations -from typing import Any, Sequence, TYPE_CHECKING +from typing import TYPE_CHECKING, Any, Sequence from operator import attrgetter if TYPE_CHECKING: diff --git a/psycopg/psycopg/_compat.py b/psycopg/psycopg/_compat.py index 7ffd76b8b..b7ceb3a79 100644 --- a/psycopg/psycopg/_compat.py +++ b/psycopg/psycopg/_compat.py @@ -5,19 +5,21 @@ compatibility functions for different Python versions # Copyright (C) 2021 The Psycopg Team import sys -from functools import partial from typing import Any +from functools import partial 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 import Counter + from collections import 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) @@ -31,9 +33,9 @@ else: if sys.version_info >= (3, 10): - from typing import TypeGuard, TypeAlias + from typing import TypeAlias, TypeGuard else: - from typing_extensions import TypeGuard, TypeAlias + from typing_extensions import TypeAlias, TypeGuard if sys.version_info >= (3, 11): from typing import LiteralString, Self diff --git a/psycopg/psycopg/_connection_base.py b/psycopg/psycopg/_connection_base.py index e364d7e86..65440ce2f 100644 --- a/psycopg/psycopg/_connection_base.py +++ b/psycopg/psycopg/_connection_base.py @@ -8,17 +8,15 @@ from __future__ import annotations import sys import logging -from typing import Callable, Generic, NamedTuple, TYPE_CHECKING -from weakref import ref, ReferenceType +from typing import TYPE_CHECKING, Callable, Generic, NamedTuple +from weakref import ReferenceType, ref from warnings import warn from functools import partial -from . import pq from . import errors as e -from . import postgres -from . import generators +from . import generators, postgres, pq from .abc import PQGen, PQGenConn, Query -from .sql import Composable, SQL +from .sql import SQL, Composable from ._tpc import Xid from .rows import Row from .adapt import AdaptersMap @@ -31,9 +29,10 @@ from ._capabilities import capabilities from ._connection_info import ConnectionInfo if TYPE_CHECKING: - from .pq.abc import PGconn, PGresult from psycopg_pool.base import BasePool + from .pq.abc import PGconn, PGresult + # Row Type variable for Cursor (when it needs to be distinguished from the # connection's one) CursorRow = TypeVar("CursorRow") diff --git a/psycopg/psycopg/_conninfo_attempts.py b/psycopg/psycopg/_conninfo_attempts.py index 8c75e60e3..37809a8d4 100644 --- a/psycopg/psycopg/_conninfo_attempts.py +++ b/psycopg/psycopg/_conninfo_attempts.py @@ -15,9 +15,7 @@ from random import shuffle from . import errors as e from .abc import ConnDict, ConnMapping -from ._conninfo_utils import get_param, is_ip_address, get_param_def -from ._conninfo_utils import split_attempts - +from ._conninfo_utils import get_param, get_param_def, is_ip_address, split_attempts logger = logging.getLogger("psycopg") diff --git a/psycopg/psycopg/_conninfo_attempts_async.py b/psycopg/psycopg/_conninfo_attempts_async.py index ff8b15d39..5605f23ad 100644 --- a/psycopg/psycopg/_conninfo_attempts_async.py +++ b/psycopg/psycopg/_conninfo_attempts_async.py @@ -12,8 +12,7 @@ from random import shuffle from . import errors as e from .abc import ConnDict, ConnMapping -from ._conninfo_utils import get_param, is_ip_address, get_param_def -from ._conninfo_utils import split_attempts +from ._conninfo_utils import get_param, get_param_def, is_ip_address, split_attempts if True: # ASYNC: import asyncio diff --git a/psycopg/psycopg/_conninfo_utils.py b/psycopg/psycopg/_conninfo_utils.py index 4e7025d3e..844e71abd 100644 --- a/psycopg/psycopg/_conninfo_utils.py +++ b/psycopg/psycopg/_conninfo_utils.py @@ -11,9 +11,9 @@ from functools import lru_cache from ipaddress import ip_address from dataclasses import dataclass +from . import errors as e from . import pq from .abc import ConnDict, ConnMapping -from . import errors as e def split_attempts(params: ConnMapping) -> list[ConnDict]: diff --git a/psycopg/psycopg/_copy.py b/psycopg/psycopg/_copy.py index 6d85066d8..32f8fc857 100644 --- a/psycopg/psycopg/_copy.py +++ b/psycopg/psycopg/_copy.py @@ -11,14 +11,14 @@ from __future__ import annotations from abc import ABC, abstractmethod from types import TracebackType -from typing import Any, Iterator, Sequence, TYPE_CHECKING +from typing import TYPE_CHECKING, Any, Iterator, Sequence -from . import pq from . import errors as e +from . import pq from ._compat import Self -from ._copy_base import BaseCopy, MAX_BUFFER_SIZE, QUEUE_SIZE, PREFER_FLUSH -from .generators import copy_to, copy_end -from ._acompat import spawn, gather, Queue, Worker +from ._acompat import Queue, Worker, gather, spawn +from ._copy_base import MAX_BUFFER_SIZE, PREFER_FLUSH, QUEUE_SIZE, BaseCopy +from .generators import copy_end, copy_to if TYPE_CHECKING: from .abc import Buffer diff --git a/psycopg/psycopg/_copy_async.py b/psycopg/psycopg/_copy_async.py index 02d27bae3..22ef3b197 100644 --- a/psycopg/psycopg/_copy_async.py +++ b/psycopg/psycopg/_copy_async.py @@ -8,14 +8,14 @@ from __future__ import annotations from abc import ABC, abstractmethod from types import TracebackType -from typing import Any, AsyncIterator, Sequence, TYPE_CHECKING +from typing import TYPE_CHECKING, Any, AsyncIterator, Sequence -from . import pq from . import errors as e +from . import pq from ._compat import Self -from ._copy_base import BaseCopy, MAX_BUFFER_SIZE, QUEUE_SIZE, PREFER_FLUSH -from .generators import copy_to, copy_end -from ._acompat import aspawn, agather, AQueue, AWorker +from ._acompat import AQueue, AWorker, agather, aspawn +from ._copy_base import MAX_BUFFER_SIZE, PREFER_FLUSH, QUEUE_SIZE, BaseCopy +from .generators import copy_end, copy_to if TYPE_CHECKING: from .abc import Buffer diff --git a/psycopg/psycopg/_copy_base.py b/psycopg/psycopg/_copy_base.py index 21608c972..6acc77719 100644 --- a/psycopg/psycopg/_copy_base.py +++ b/psycopg/psycopg/_copy_base.py @@ -10,11 +10,11 @@ import re import sys import struct from abc import ABC, abstractmethod -from typing import Any, Generic, Match, Sequence, TYPE_CHECKING +from typing import TYPE_CHECKING, Any, Generic, Match, Sequence -from . import pq from . import adapt from . import errors as e +from . import pq from .abc import Buffer, ConnectionType, PQGen, Transformer from .pq.misc import connection_summary from ._cmodule import _psycopg diff --git a/psycopg/psycopg/_cursor_base.py b/psycopg/psycopg/_cursor_base.py index 45b600674..fe71a1451 100644 --- a/psycopg/psycopg/_cursor_base.py +++ b/psycopg/psycopg/_cursor_base.py @@ -6,21 +6,20 @@ Psycopg BaseCursor object from __future__ import annotations +from typing import TYPE_CHECKING, Any, Generic, Iterable, NoReturn, Sequence from functools import partial -from typing import Any, Generic, Iterable, NoReturn, Sequence -from typing import TYPE_CHECKING -from . import pq from . import adapt from . import errors as e -from .abc import ConnectionType, Query, Params, PQGen +from . import pq +from .abc import ConnectionType, Params, PQGen, Query from .rows import Row, RowMaker -from ._capabilities import capabilities from ._column import Column from .pq.misc import connection_summary -from ._queries import PostgresQuery, PostgresClientQuery +from ._queries import PostgresClientQuery, PostgresQuery from ._preparing import Prepare from .generators import execute, fetch, send +from ._capabilities import capabilities if TYPE_CHECKING: from .abc import Transformer diff --git a/psycopg/psycopg/_dns.py b/psycopg/psycopg/_dns.py index 9dd67f0b5..b642b2bca 100644 --- a/psycopg/psycopg/_dns.py +++ b/psycopg/psycopg/_dns.py @@ -11,20 +11,20 @@ import os import re import warnings from random import randint -from typing import Any, DefaultDict, NamedTuple, Sequence, TYPE_CHECKING +from typing import TYPE_CHECKING, Any, DefaultDict, NamedTuple, Sequence from collections import defaultdict try: - from dns.resolver import Resolver, Cache - from dns.asyncresolver import Resolver as AsyncResolver + from dns.resolver import Cache, Resolver from dns.exception import DNSException + from dns.asyncresolver import Resolver as AsyncResolver except ImportError: raise ImportError( "the module psycopg._dns requires the package 'dnspython' installed" ) -from . import errors as e from . import conninfo +from . import errors as e if TYPE_CHECKING: from dns.rdtypes.IN.SRV import SRV diff --git a/psycopg/psycopg/_encodings.py b/psycopg/psycopg/_encodings.py index 42da2c529..d1ef6dd2d 100644 --- a/psycopg/psycopg/_encodings.py +++ b/psycopg/psycopg/_encodings.py @@ -7,13 +7,13 @@ Mappings between PostgreSQL and Python encodings. from __future__ import annotations import re -import string import codecs -from typing import Any, TYPE_CHECKING +import string +from typing import TYPE_CHECKING, Any -from .pq._enums import ConnStatus from .errors import NotSupportedError from ._compat import cache +from .pq._enums import ConnStatus if TYPE_CHECKING: from ._connection_base import BaseConnection diff --git a/psycopg/psycopg/_pipeline.py b/psycopg/psycopg/_pipeline.py index 6ad3b303f..f4752829a 100644 --- a/psycopg/psycopg/_pipeline.py +++ b/psycopg/psycopg/_pipeline.py @@ -8,20 +8,20 @@ from __future__ import annotations import logging from types import TracebackType -from typing import Any, TYPE_CHECKING +from typing import TYPE_CHECKING, Any -from . import pq from . import errors as e +from . import pq from .abc import PipelineCommand, PQGen from ._compat import Deque, Self, TypeAlias from .pq.misc import connection_summary -from .generators import pipeline_communicate, fetch_many, send +from .generators import fetch_many, pipeline_communicate, send from ._capabilities import capabilities if TYPE_CHECKING: from .pq.abc import PGresult - from .connection import Connection from ._preparing import Key, Prepare # noqa: F401 + from .connection import Connection from ._cursor_base import BaseCursor # noqa: F401 from ._connection_base import BaseConnection from .connection_async import AsyncConnection diff --git a/psycopg/psycopg/_preparing.py b/psycopg/psycopg/_preparing.py index c48c86c09..10a487494 100644 --- a/psycopg/psycopg/_preparing.py +++ b/psycopg/psycopg/_preparing.py @@ -7,7 +7,7 @@ Support for prepared statements from __future__ import annotations from enum import IntEnum, auto -from typing import Any, Sequence, TYPE_CHECKING +from typing import TYPE_CHECKING, Any, Sequence from collections import OrderedDict from . import pq diff --git a/psycopg/psycopg/_py_transformer.py b/psycopg/psycopg/_py_transformer.py index 53008949d..0af6884cb 100644 --- a/psycopg/psycopg/_py_transformer.py +++ b/psycopg/psycopg/_py_transformer.py @@ -11,13 +11,13 @@ dependencies problems). from __future__ import annotations -from typing import Any, Sequence, DefaultDict, TYPE_CHECKING +from typing import TYPE_CHECKING, Any, DefaultDict, Sequence from collections import defaultdict -from . import pq from . import abc from . import errors as e -from .abc import Buffer, LoadFunc, AdaptContext, PyFormat, NoneType +from . import pq +from .abc import AdaptContext, Buffer, LoadFunc, NoneType, PyFormat from .rows import Row, RowMaker from ._oids import INVALID_OID, TEXT_OID from ._compat import TypeAlias diff --git a/psycopg/psycopg/_queries.py b/psycopg/psycopg/_queries.py index 3368e79d1..22e5b4bf6 100644 --- a/psycopg/psycopg/_queries.py +++ b/psycopg/psycopg/_queries.py @@ -7,14 +7,13 @@ Utility module to manipulate queries from __future__ import annotations import re -from typing import Any, Callable, Mapping, Match, NamedTuple -from typing import Sequence, TYPE_CHECKING +from typing import TYPE_CHECKING, Any, Callable, Mapping, Match, NamedTuple, Sequence from functools import lru_cache -from . import pq from . import errors as e +from . import pq +from .abc import Buffer, Params, Query from .sql import Composable -from .abc import Buffer, Query, Params from ._enums import PyFormat from ._compat import TypeAlias, TypeGuard from ._encodings import conn_encoding diff --git a/psycopg/psycopg/_struct.py b/psycopg/psycopg/_struct.py index 01978a500..72536d6bd 100644 --- a/psycopg/psycopg/_struct.py +++ b/psycopg/psycopg/_struct.py @@ -7,7 +7,7 @@ Utility functions to deal with binary structs. from __future__ import annotations import struct -from typing import Callable, cast, Protocol +from typing import Callable, Protocol, cast from . import errors as e from .abc import Buffer diff --git a/psycopg/psycopg/_tpc.py b/psycopg/psycopg/_tpc.py index 880feff3c..e3719010c 100644 --- a/psycopg/psycopg/_tpc.py +++ b/psycopg/psycopg/_tpc.py @@ -8,7 +8,7 @@ from __future__ import annotations import re import datetime as dt -from base64 import b64encode, b64decode +from base64 import b64decode, b64encode from dataclasses import dataclass, replace _re_xid = re.compile(r"^(\d+)_([^_]*)_([^_]*)$") diff --git a/psycopg/psycopg/_typeinfo.py b/psycopg/psycopg/_typeinfo.py index 27a41a733..c9126364e 100644 --- a/psycopg/psycopg/_typeinfo.py +++ b/psycopg/psycopg/_typeinfo.py @@ -9,10 +9,10 @@ information to the adapters if needed. from __future__ import annotations -from typing import Any, Iterator, overload, Sequence, TYPE_CHECKING +from typing import TYPE_CHECKING, Any, Iterator, Sequence, overload -from . import sql from . import errors as e +from . import sql from .abc import AdaptContext, Query from .rows import dict_row from ._compat import TypeAlias, TypeVar @@ -21,8 +21,8 @@ from ._encodings import conn_encoding if TYPE_CHECKING: from .connection import Connection - from .connection_async import AsyncConnection from ._connection_base import BaseConnection + from .connection_async import AsyncConnection T = TypeVar("T", bound="TypeInfo") RegistryKey: TypeAlias = "str | int | tuple[type, int]" diff --git a/psycopg/psycopg/abc.py b/psycopg/psycopg/abc.py index b1e403183..3b9639762 100644 --- a/psycopg/psycopg/abc.py +++ b/psycopg/psycopg/abc.py @@ -6,9 +6,8 @@ Protocol objects representing different implementations of the same classes. from __future__ import annotations -from typing import Any, Callable, Generator, Mapping -from typing import Protocol, Sequence, TYPE_CHECKING -from typing import Dict, Union # drop with Python 3.8 +from typing import TYPE_CHECKING, Any, Callable, Dict # drop with Python 3.8 +from typing import Generator, Mapping, Protocol, Sequence, Union from . import pq from ._enums import PyFormat as PyFormat @@ -18,7 +17,7 @@ if TYPE_CHECKING: from . import sql # noqa: F401 from .rows import Row, RowMaker from .pq.abc import PGresult - from .waiting import Wait, Ready # noqa: F401 + from .waiting import Ready, Wait # noqa: F401 from ._adapters_map import AdaptersMap from ._connection_base import BaseConnection diff --git a/psycopg/psycopg/adapt.py b/psycopg/psycopg/adapt.py index 428042fe1..2918f555b 100644 --- a/psycopg/psycopg/adapt.py +++ b/psycopg/psycopg/adapt.py @@ -7,9 +7,9 @@ Entry point into the adaptation system. from __future__ import annotations from abc import ABC, abstractmethod -from typing import Any, TYPE_CHECKING +from typing import TYPE_CHECKING, Any -from . import pq, abc +from . import abc, pq # Objects exported here from ._enums import PyFormat as PyFormat diff --git a/psycopg/psycopg/client_cursor.py b/psycopg/psycopg/client_cursor.py index 5a64e5fe7..5088b16b2 100644 --- a/psycopg/psycopg/client_cursor.py +++ b/psycopg/psycopg/client_cursor.py @@ -9,20 +9,20 @@ from __future__ import annotations from typing import TYPE_CHECKING from functools import partial -from ._queries import PostgresQuery, PostgresClientQuery - -from . import pq from . import adapt from . import errors as e -from .abc import ConnectionType, Query, Params +from . import pq +from .abc import ConnectionType, Params, Query from .rows import Row from .cursor import Cursor +from ._queries import PostgresClientQuery, PostgresQuery from ._preparing import Prepare from ._cursor_base import BaseCursor from .cursor_async import AsyncCursor if TYPE_CHECKING: from typing import Any # noqa: F401 + from .connection import Connection # noqa: F401 from .connection_async import AsyncConnection # noqa: F401 diff --git a/psycopg/psycopg/connection.py b/psycopg/psycopg/connection.py index 92afeb22a..70d77467d 100644 --- a/psycopg/psycopg/connection.py +++ b/psycopg/psycopg/connection.py @@ -12,30 +12,28 @@ from __future__ import annotations import logging from time import monotonic from types import TracebackType -from typing import Any, Generator, Iterator, cast, overload, TYPE_CHECKING +from typing import TYPE_CHECKING, Any, Generator, Iterator, cast, overload +from threading import Lock from contextlib import contextmanager -from . import pq from . import errors as e -from . import waiting -from .abc import AdaptContext, ConnDict, ConnParam, Params, PQGen, Query, RV +from . import pq, waiting +from .abc import RV, AdaptContext, ConnDict, ConnParam, Params, PQGen, Query from ._tpc import Xid -from .rows import Row, RowFactory, tuple_row, args_row +from .rows import Row, RowFactory, args_row, tuple_row from .adapt import AdaptersMap from ._enums import IsolationLevel +from .cursor import Cursor from ._compat import Self -from .conninfo import make_conninfo, conninfo_to_dict -from .conninfo import conninfo_attempts, timeout_from_conninfo +from .conninfo import conninfo_attempts, conninfo_to_dict, make_conninfo +from .conninfo import timeout_from_conninfo from ._pipeline import Pipeline from .generators import notifies from .transaction import Transaction -from .cursor import Cursor from ._capabilities import capabilities from .server_cursor import ServerCursor from ._connection_base import BaseConnection, CursorRow, Notify -from threading import Lock - if TYPE_CHECKING: from .pq.abc import PGconn diff --git a/psycopg/psycopg/connection_async.py b/psycopg/psycopg/connection_async.py index 205ab5776..3c6615a24 100644 --- a/psycopg/psycopg/connection_async.py +++ b/psycopg/psycopg/connection_async.py @@ -9,20 +9,19 @@ from __future__ import annotations import logging from time import monotonic from types import TracebackType -from typing import Any, AsyncGenerator, AsyncIterator, cast, overload, TYPE_CHECKING +from typing import TYPE_CHECKING, Any, AsyncGenerator, AsyncIterator, cast, overload from contextlib import asynccontextmanager -from . import pq from . import errors as e -from . import waiting -from .abc import AdaptContext, ConnDict, ConnParam, Params, PQGen, Query, RV +from . import pq, waiting +from .abc import RV, AdaptContext, ConnDict, ConnParam, Params, PQGen, Query from ._tpc import Xid -from .rows import Row, AsyncRowFactory, tuple_row, args_row +from .rows import AsyncRowFactory, Row, args_row, tuple_row from .adapt import AdaptersMap from ._enums import IsolationLevel from ._compat import Self -from .conninfo import make_conninfo, conninfo_to_dict -from .conninfo import conninfo_attempts_async, timeout_from_conninfo +from .conninfo import conninfo_attempts_async, conninfo_to_dict, make_conninfo +from .conninfo import timeout_from_conninfo from ._pipeline import AsyncPipeline from .generators import notifies from .transaction import AsyncTransaction @@ -35,6 +34,7 @@ if True: # ASYNC import sys import asyncio from asyncio import Lock + from ._compat import to_thread else: from threading import Lock diff --git a/psycopg/psycopg/conninfo.py b/psycopg/psycopg/conninfo.py index f40b58a6b..e8c33876b 100644 --- a/psycopg/psycopg/conninfo.py +++ b/psycopg/psycopg/conninfo.py @@ -8,12 +8,10 @@ from __future__ import annotations import re -from . import pq +from . import _conninfo_attempts, _conninfo_attempts_async, _conninfo_utils from . import errors as e -from . import _conninfo_utils -from . import _conninfo_attempts -from . import _conninfo_attempts_async -from .abc import ConnParam, ConnDict +from . import pq +from .abc import ConnDict, ConnParam # re-exoprts conninfo_attempts = _conninfo_attempts.conninfo_attempts diff --git a/psycopg/psycopg/copy.py b/psycopg/psycopg/copy.py index b43d25ca6..c57347973 100644 --- a/psycopg/psycopg/copy.py +++ b/psycopg/psycopg/copy.py @@ -4,8 +4,8 @@ Module gathering the various parts of the copy subsystem. from typing import IO -from .abc import Buffer from . import _copy, _copy_async +from .abc import Buffer # re-exports diff --git a/psycopg/psycopg/crdb/__init__.py b/psycopg/psycopg/crdb/__init__.py index 11e1dc3b6..dbdcf5f34 100644 --- a/psycopg/psycopg/crdb/__init__.py +++ b/psycopg/psycopg/crdb/__init__.py @@ -5,7 +5,7 @@ CockroachDB support package. # Copyright (C) 2022 The Psycopg Team from . import _types -from .connection import CrdbConnection, AsyncCrdbConnection, CrdbConnectionInfo +from .connection import AsyncCrdbConnection, CrdbConnection, CrdbConnectionInfo adapters = _types.adapters # exposed by the package connect = CrdbConnection.connect diff --git a/psycopg/psycopg/crdb/_types.py b/psycopg/psycopg/crdb/_types.py index 2b07fbe8a..fcf2a47ef 100644 --- a/psycopg/psycopg/crdb/_types.py +++ b/psycopg/psycopg/crdb/_types.py @@ -5,15 +5,15 @@ Types configuration specific for CockroachDB. # Copyright (C) 2022 The Psycopg Team from enum import Enum -from .._typeinfo import TypeInfo, TypesRegistry from ..abc import AdaptContext, NoneType from .._oids import TEXT_OID from .._typemod import BitTypeModifier, CharTypeModifier, NumericTypeModifier from .._typemod import TimeTypeModifier -from .._adapters_map import AdaptersMap -from ..types.enum import EnumDumper, EnumBinaryDumper +from .._typeinfo import TypeInfo, TypesRegistry +from ..types.enum import EnumBinaryDumper, EnumDumper from ..types.none import NoneDumper +from .._adapters_map import AdaptersMap types = TypesRegistry() @@ -54,8 +54,7 @@ def register_crdb_adapters(context: AdaptContext) -> None: def _register_postgres_adapters(context: AdaptContext) -> None: # Same adapters used by PostgreSQL, or a good starting point for customization - from ..types import array, bool, composite, datetime - from ..types import numeric, numpy, string, uuid + from ..types import array, bool, composite, datetime, numeric, numpy, string, uuid array.register_default_adapters(context) composite.register_default_adapters(context) diff --git a/psycopg/psycopg/crdb/connection.py b/psycopg/psycopg/crdb/connection.py index 9ca1c640d..60db9a876 100644 --- a/psycopg/psycopg/crdb/connection.py +++ b/psycopg/psycopg/crdb/connection.py @@ -7,15 +7,15 @@ CockroachDB-specific connections. from __future__ import annotations import re -from typing import Any, TYPE_CHECKING +from typing import TYPE_CHECKING, Any from .. import errors as e from ..rows import Row +from ._types import adapters from ..connection import Connection from .._adapters_map import AdaptersMap from .._connection_info import ConnectionInfo from ..connection_async import AsyncConnection -from ._types import adapters if TYPE_CHECKING: from ..pq.abc import PGconn diff --git a/psycopg/psycopg/cursor.py b/psycopg/psycopg/cursor.py index 0415ff319..52451dc5f 100644 --- a/psycopg/psycopg/cursor.py +++ b/psycopg/psycopg/cursor.py @@ -10,14 +10,14 @@ Psycopg Cursor object. from __future__ import annotations from types import TracebackType -from typing import Any, Iterator, Iterable, TYPE_CHECKING, overload +from typing import TYPE_CHECKING, Any, Iterable, Iterator, overload from contextlib import contextmanager -from . import pq from . import errors as e -from .abc import Query, Params +from . import pq +from .abc import Params, Query from .copy import Copy, Writer -from .rows import Row, RowMaker, RowFactory +from .rows import Row, RowFactory, RowMaker from ._compat import Self from ._pipeline import Pipeline from ._cursor_base import BaseCursor diff --git a/psycopg/psycopg/cursor_async.py b/psycopg/psycopg/cursor_async.py index 7fddd6280..0296c5179 100644 --- a/psycopg/psycopg/cursor_async.py +++ b/psycopg/psycopg/cursor_async.py @@ -7,14 +7,14 @@ Psycopg AsyncCursor object. from __future__ import annotations from types import TracebackType -from typing import Any, AsyncIterator, Iterable, TYPE_CHECKING, overload +from typing import TYPE_CHECKING, Any, AsyncIterator, Iterable, overload from contextlib import asynccontextmanager -from . import pq from . import errors as e -from .abc import Query, Params +from . import pq +from .abc import Params, Query from .copy import AsyncCopy, AsyncWriter -from .rows import Row, RowMaker, AsyncRowFactory +from .rows import AsyncRowFactory, Row, RowMaker from ._compat import Self from ._pipeline import Pipeline from ._cursor_base import BaseCursor diff --git a/psycopg/psycopg/dbapi20.py b/psycopg/psycopg/dbapi20.py index 204e5712c..cdcf8655f 100644 --- a/psycopg/psycopg/dbapi20.py +++ b/psycopg/psycopg/dbapi20.py @@ -13,7 +13,7 @@ from typing import Any, Sequence from . import _oids from .abc import AdaptContext, Buffer -from .types.string import BytesDumper, BytesBinaryDumper +from .types.string import BytesBinaryDumper, BytesDumper class DBAPITypeObject: diff --git a/psycopg/psycopg/errors.py b/psycopg/psycopg/errors.py index 4be182e3c..42d156068 100644 --- a/psycopg/psycopg/errors.py +++ b/psycopg/psycopg/errors.py @@ -20,16 +20,16 @@ DBAPI-defined Exceptions are defined in the following hierarchy:: from __future__ import annotations -from dataclasses import dataclass, field, fields -from typing import Any, Callable, NoReturn, Sequence, TYPE_CHECKING +from typing import TYPE_CHECKING, Any, Callable, NoReturn, Sequence from asyncio import CancelledError +from dataclasses import dataclass, field, fields from .pq.abc import PGconn, PGresult -from .pq._enums import ConnStatus, DiagnosticField, PipelineStatus, TransactionStatus from ._compat import TypeAlias, TypeGuard +from .pq._enums import ConnStatus, DiagnosticField, PipelineStatus, TransactionStatus if TYPE_CHECKING: - from .pq.misc import PGnotify, ConninfoOption + from .pq.misc import ConninfoOption, PGnotify ErrorInfo: TypeAlias = "PGresult | dict[int, bytes | None] | None" diff --git a/psycopg/psycopg/generators.py b/psycopg/psycopg/generators.py index 44e9f4e99..f1827be2b 100644 --- a/psycopg/psycopg/generators.py +++ b/psycopg/psycopg/generators.py @@ -25,12 +25,12 @@ from __future__ import annotations import logging from time import monotonic -from . import pq from . import errors as e +from . import pq from .abc import Buffer, PipelineCommand, PQGen, PQGenConn from .pq.abc import PGcancelConn, PGconn, PGresult -from .waiting import Wait, Ready from ._compat import Deque +from .waiting import Ready, Wait from ._cmodule import _psycopg from ._encodings import conninfo_encoding diff --git a/psycopg/psycopg/postgres.py b/psycopg/psycopg/postgres.py index 3c2536f95..362012027 100644 --- a/psycopg/psycopg/postgres.py +++ b/psycopg/psycopg/postgres.py @@ -133,8 +133,8 @@ def register_default_types(types: TypesRegistry) -> None: def register_default_adapters(context: AdaptContext) -> None: - from .types import array, bool, composite, datetime, enum, json, multirange - from .types import net, none, numeric, numpy, range, string, uuid + from .types import array, bool, composite, datetime, enum, json, multirange, net + from .types import none, numeric, numpy, range, string, uuid array.register_default_adapters(context) composite.register_default_adapters(context) diff --git a/psycopg/psycopg/pq/__init__.py b/psycopg/psycopg/pq/__init__.py index b9aee92b2..4f242980d 100644 --- a/psycopg/psycopg/pq/__init__.py +++ b/psycopg/psycopg/pq/__init__.py @@ -16,10 +16,9 @@ import logging from typing import Callable from . import abc -from .misc import ConninfoOption, PGnotify, PGresAttDesc -from .misc import error_message, version_pretty -from ._enums import ConnStatus, DiagnosticField, ExecStatus, Format, Trace -from ._enums import Ping, PipelineStatus, PollingStatus, TransactionStatus +from .misc import ConninfoOption, PGnotify, PGresAttDesc, error_message, version_pretty +from ._enums import ConnStatus, DiagnosticField, ExecStatus, Format, Ping +from ._enums import PipelineStatus, PollingStatus, Trace, TransactionStatus logger = logging.getLogger(__name__) diff --git a/psycopg/psycopg/pq/_debug.py b/psycopg/psycopg/pq/_debug.py index 13e995435..d55be281d 100644 --- a/psycopg/psycopg/pq/_debug.py +++ b/psycopg/psycopg/pq/_debug.py @@ -32,11 +32,10 @@ import inspect import logging from typing import Any, Callable from functools import wraps -from .._compat import Self, TypeVar -from . import abc -from . import PGconn +from . import PGconn, abc from .misc import connection_summary +from .._compat import Self, TypeVar Func = TypeVar("Func", bound=Callable[..., Any]) diff --git a/psycopg/psycopg/pq/_pq_ctypes.py b/psycopg/psycopg/pq/_pq_ctypes.py index b2da35f7b..9128f1532 100644 --- a/psycopg/psycopg/pq/_pq_ctypes.py +++ b/psycopg/psycopg/pq/_pq_ctypes.py @@ -9,8 +9,8 @@ from __future__ import annotations import sys import ctypes import ctypes.util -from ctypes import Structure, CFUNCTYPE, POINTER -from ctypes import c_char, c_char_p, c_int, c_size_t, c_ubyte, c_uint, c_void_p +from ctypes import CFUNCTYPE, POINTER, Structure, c_char, c_char_p, c_int, c_size_t +from ctypes import c_ubyte, c_uint, c_void_p from typing import Any, NoReturn from .misc import find_libpq_full_path, version_pretty diff --git a/psycopg/psycopg/pq/_pq_ctypes.pyi b/psycopg/psycopg/pq/_pq_ctypes.pyi index 94e0af908..091ef6be7 100644 --- a/psycopg/psycopg/pq/_pq_ctypes.pyi +++ b/psycopg/psycopg/pq/_pq_ctypes.pyi @@ -4,9 +4,9 @@ types stub for ctypes functions # Copyright (C) 2020 The Psycopg Team +from ctypes import Array, _Pointer, c_char, c_char_p, c_int, c_ubyte, c_uint, c_ulong +from ctypes import pointer from typing import Any, Callable, Sequence -from ctypes import Array, pointer, _Pointer -from ctypes import c_char, c_char_p, c_int, c_ubyte, c_uint, c_ulong class FILE: ... diff --git a/psycopg/psycopg/pq/abc.py b/psycopg/psycopg/pq/abc.py index 8e91fd2f5..ecbd26888 100644 --- a/psycopg/psycopg/pq/abc.py +++ b/psycopg/psycopg/pq/abc.py @@ -6,14 +6,14 @@ Protocol objects to represent objects exposed by different pq implementations. from __future__ import annotations -from typing import Any, Callable, Protocol, Sequence, TYPE_CHECKING from typing import Union # drop with Python 3.8 +from typing import TYPE_CHECKING, Any, Callable, Protocol, Sequence from ._enums import Format, Trace from .._compat import Self, TypeAlias if TYPE_CHECKING: - from .misc import PGnotify, ConninfoOption, PGresAttDesc + from .misc import ConninfoOption, PGnotify, PGresAttDesc # An object implementing the buffer protocol (ish) Buffer: TypeAlias = Union[bytes, bytearray, memoryview] diff --git a/psycopg/psycopg/pq/misc.py b/psycopg/psycopg/pq/misc.py index cb95e5ef2..fe825d699 100644 --- a/psycopg/psycopg/pq/misc.py +++ b/psycopg/psycopg/pq/misc.py @@ -6,8 +6,8 @@ Various functionalities to make easier to work with the libpq. from __future__ import annotations -import re import os +import re import sys import logging import ctypes.util @@ -15,7 +15,7 @@ from typing import NamedTuple from pathlib import Path from . import abc -from ._enums import ConnStatus, TransactionStatus, PipelineStatus +from ._enums import ConnStatus, PipelineStatus, TransactionStatus from .._compat import cache logger = logging.getLogger("psycopg.pq") diff --git a/psycopg/psycopg/pq/pq_ctypes.py b/psycopg/psycopg/pq/pq_ctypes.py index 27f0b0fed..e35a0486f 100644 --- a/psycopg/psycopg/pq/pq_ctypes.py +++ b/psycopg/psycopg/pq/pq_ctypes.py @@ -15,22 +15,21 @@ from __future__ import annotations import sys import logging from os import getpid +from ctypes import POINTER, Array, addressof, byref, c_char_p, c_int, c_size_t, c_ulong +from ctypes import c_void_p, cast, create_string_buffer, py_object, string_at +from typing import TYPE_CHECKING, Any, Callable, Sequence +from typing import cast as t_cast from weakref import ref -from ctypes import Array, POINTER, cast, string_at, create_string_buffer, byref -from ctypes import addressof, c_char_p, c_int, c_size_t, c_ulong, c_void_p, py_object -from typing import Any, Callable, Sequence -from typing import cast as t_cast, TYPE_CHECKING - -from .. import errors as e -from .._encodings import pg2pyenc from . import _pq_ctypes as impl -from .misc import PGnotify, ConninfoOption, PGresAttDesc -from .misc import connection_summary, _clean_error_message +from .. import errors as e +from .misc import ConninfoOption, PGnotify, PGresAttDesc, _clean_error_message +from .misc import connection_summary from ._enums import ConnStatus, ExecStatus, Format, Trace # Imported locally to call them from __del__ methods -from ._pq_ctypes import PQclear, PQfinish, PQfreeCancel, PQcancelFinish, PQstatus +from ._pq_ctypes import PQcancelFinish, PQclear, PQfinish, PQfreeCancel, PQstatus +from .._encodings import pg2pyenc if TYPE_CHECKING: from . import abc diff --git a/psycopg/psycopg/raw_cursor.py b/psycopg/psycopg/raw_cursor.py index 41486a2c2..5f42d7013 100644 --- a/psycopg/psycopg/raw_cursor.py +++ b/psycopg/psycopg/raw_cursor.py @@ -7,18 +7,20 @@ psycopg raw queries cursors from __future__ import annotations from typing import TYPE_CHECKING -from .abc import ConnectionType, Query, Params + +from .abc import ConnectionType, Params, Query from .sql import Composable from .rows import Row from ._enums import PyFormat from .cursor import Cursor -from .cursor_async import AsyncCursor -from .server_cursor import ServerCursor, AsyncServerCursor from ._queries import PostgresQuery from ._cursor_base import BaseCursor +from .cursor_async import AsyncCursor +from .server_cursor import AsyncServerCursor, ServerCursor if TYPE_CHECKING: from typing import Any # noqa: F401 + from .connection import Connection # noqa: F401 from .connection_async import AsyncConnection # noqa: F401 diff --git a/psycopg/psycopg/rows.py b/psycopg/psycopg/rows.py index fe97b7d56..1053fc80c 100644 --- a/psycopg/psycopg/rows.py +++ b/psycopg/psycopg/rows.py @@ -7,21 +7,21 @@ psycopg row factories from __future__ import annotations import functools -from typing import Any, Callable, NamedTuple, NoReturn -from typing import TYPE_CHECKING, Protocol, Sequence -from typing import Dict, Tuple # drop with Python 3.8 +from typing import TYPE_CHECKING, Any, Callable, Dict # drop with Python 3.8 +from typing import NamedTuple, NoReturn, Protocol, Sequence, Tuple from collections import namedtuple -from . import pq from . import errors as e +from . import pq from ._compat import TypeAlias, TypeVar from ._encodings import _as_python_identifier if TYPE_CHECKING: + from psycopg.pq.abc import PGresult + from .cursor import Cursor from ._cursor_base import BaseCursor from .cursor_async import AsyncCursor - from psycopg.pq.abc import PGresult COMMAND_OK = pq.ExecStatus.COMMAND_OK TUPLES_OK = pq.ExecStatus.TUPLES_OK diff --git a/psycopg/psycopg/server_cursor.py b/psycopg/psycopg/server_cursor.py index c1492b386..f375846e0 100644 --- a/psycopg/psycopg/server_cursor.py +++ b/psycopg/psycopg/server_cursor.py @@ -6,14 +6,13 @@ psycopg server-side cursor objects. from __future__ import annotations -from typing import Any, AsyncIterator, Iterable, Iterator, TYPE_CHECKING, overload +from typing import TYPE_CHECKING, Any, AsyncIterator, Iterable, Iterator, overload from warnings import warn -from . import pq -from . import sql from . import errors as e -from .abc import ConnectionType, Query, Params, PQGen -from .rows import Row, RowFactory, AsyncRowFactory +from . import pq, sql +from .abc import ConnectionType, Params, PQGen, Query +from .rows import AsyncRowFactory, Row, RowFactory from .cursor import Cursor from ._compat import Self from .generators import execute diff --git a/psycopg/psycopg/sql.py b/psycopg/psycopg/sql.py index c0b5b8e96..81a96a098 100644 --- a/psycopg/psycopg/sql.py +++ b/psycopg/psycopg/sql.py @@ -9,7 +9,7 @@ from __future__ import annotations import codecs import string from abc import ABC, abstractmethod -from typing import Any, Iterator, Iterable, Sequence +from typing import Any, Iterable, Iterator, Sequence from .pq import Escaping from .abc import AdaptContext diff --git a/psycopg/psycopg/transaction.py b/psycopg/psycopg/transaction.py index d0a3aa349..cde6c40ce 100644 --- a/psycopg/psycopg/transaction.py +++ b/psycopg/psycopg/transaction.py @@ -7,13 +7,11 @@ Transaction context managers returned by Connection.transaction() from __future__ import annotations import logging - from types import TracebackType -from typing import Any, Generic, Iterator, TYPE_CHECKING +from typing import TYPE_CHECKING, Any, Generic, Iterator -from . import pq -from . import sql from . import errors as e +from . import pq, sql from .abc import ConnectionType, PQGen from ._compat import Self from .pq.misc import connection_summary diff --git a/psycopg/psycopg/types/array.py b/psycopg/psycopg/types/array.py index 1da8f4316..156ee890f 100644 --- a/psycopg/psycopg/types/array.py +++ b/psycopg/psycopg/types/array.py @@ -9,14 +9,13 @@ from __future__ import annotations import re import struct from math import prod -from typing import Any, cast, Callable, Pattern +from typing import Any, Callable, Pattern, cast -from .. import pq 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, TEXT_ARRAY_OID +from .. import postgres, pq +from ..abc import AdaptContext, Buffer, Dumper, DumperKey, Loader, NoneType, Transformer +from .._oids import INVALID_OID, TEXT_ARRAY_OID, TEXT_OID +from ..adapt import PyFormat, RecursiveDumper, RecursiveLoader from .._compat import cache from .._struct import pack_len, unpack_len from .._cmodule import _psycopg diff --git a/psycopg/psycopg/types/composite.py b/psycopg/psycopg/types/composite.py index 576529a05..a2bf8c146 100644 --- a/psycopg/psycopg/types/composite.py +++ b/psycopg/psycopg/types/composite.py @@ -8,16 +8,12 @@ from __future__ import annotations import re import struct +from typing import TYPE_CHECKING, Any, Callable, Iterator, NamedTuple, Sequence, cast from collections import namedtuple -from typing import Any, Callable, cast, Iterator -from typing import NamedTuple, Sequence, TYPE_CHECKING - -from .. import pq -from .. import abc -from .. import sql -from .. import postgres -from ..adapt import Transformer, PyFormat, RecursiveDumper, Loader, Dumper, Buffer + +from .. import abc, postgres, pq, sql from .._oids import TEXT_OID +from ..adapt import Buffer, Dumper, Loader, PyFormat, RecursiveDumper, Transformer from .._compat import cache from .._struct import pack_len, unpack_len from .._typeinfo import TypeInfo diff --git a/psycopg/psycopg/types/datetime.py b/psycopg/psycopg/types/datetime.py index 3d8db27f8..016e216bc 100644 --- a/psycopg/psycopg/types/datetime.py +++ b/psycopg/psycopg/types/datetime.py @@ -8,15 +8,15 @@ from __future__ import annotations import re import struct +from typing import TYPE_CHECKING, Any, Callable, cast from datetime import date, datetime, time, timedelta, timezone -from typing import Any, Callable, cast, TYPE_CHECKING from .. import _oids from ..pq import Format from .._tz import get_tzinfo from ..abc import AdaptContext, DumperKey from ..adapt import Buffer, Dumper, Loader, PyFormat -from ..errors import InterfaceError, DataError +from ..errors import DataError, InterfaceError from .._struct import pack_int4, pack_int8, unpack_int4, unpack_int8 if TYPE_CHECKING: diff --git a/psycopg/psycopg/types/enum.py b/psycopg/psycopg/types/enum.py index 82e7f174c..41a4686cd 100644 --- a/psycopg/psycopg/types/enum.py +++ b/psycopg/psycopg/types/enum.py @@ -5,17 +5,16 @@ Adapters for the enum type. from __future__ import annotations from enum import Enum -from typing import Any, Generic, Mapping, Sequence, cast, TYPE_CHECKING +from typing import TYPE_CHECKING, Any, Generic, Mapping, Sequence, cast -from .. import sql -from .. import postgres from .. import errors as e +from .. import postgres, sql from ..pq import Format from ..abc import AdaptContext, Query from ..adapt import Buffer, Dumper, Loader -from .._compat import cache, TypeAlias, TypeVar -from .._encodings import conn_encoding +from .._compat import TypeAlias, TypeVar, cache from .._typeinfo import TypeInfo +from .._encodings import conn_encoding if TYPE_CHECKING: from .._connection_base import BaseConnection diff --git a/psycopg/psycopg/types/hstore.py b/psycopg/psycopg/types/hstore.py index 55944c148..7f1da6e67 100644 --- a/psycopg/psycopg/types/hstore.py +++ b/psycopg/psycopg/types/hstore.py @@ -10,10 +10,10 @@ import re from .. import errors as e from .. import postgres -from ..abc import Buffer, AdaptContext +from ..abc import AdaptContext, Buffer from .._oids import TEXT_OID from ..adapt import PyFormat, RecursiveDumper, RecursiveLoader -from .._compat import cache, TypeAlias +from .._compat import TypeAlias, cache from .._typeinfo import TypeInfo _re_escape = re.compile(r'(["\\])') diff --git a/psycopg/psycopg/types/json.py b/psycopg/psycopg/types/json.py index 56ac23418..51bb22e03 100644 --- a/psycopg/psycopg/types/json.py +++ b/psycopg/psycopg/types/json.py @@ -9,13 +9,12 @@ from __future__ import annotations import json from typing import Any, Callable -from .. import abc -from .. import _oids +from .. import _oids, abc from .. import errors as e from ..pq import Format -from ..adapt import Buffer, Dumper, Loader, PyFormat, AdaptersMap +from ..adapt import AdaptersMap, Buffer, Dumper, Loader, PyFormat from ..errors import DataError -from .._compat import cache, TypeAlias +from .._compat import TypeAlias, cache JsonDumpsFunction: TypeAlias = Callable[[Any], "str | bytes"] JsonLoadsFunction: TypeAlias = Callable[["str | bytes"], Any] diff --git a/psycopg/psycopg/types/multirange.py b/psycopg/psycopg/types/multirange.py index 1bf98ed34..8c1f75ec1 100644 --- a/psycopg/psycopg/types/multirange.py +++ b/psycopg/psycopg/types/multirange.py @@ -6,25 +6,23 @@ Support for multirange types adaptation. from __future__ import annotations +from typing import TYPE_CHECKING, Any, Generic, Iterable, MutableSequence, overload from decimal import Decimal -from typing import Any, Generic, Iterable, MutableSequence, overload, TYPE_CHECKING from datetime import date, datetime -from .. import sql from .. import _oids from .. import errors as e -from .. import postgres +from .. import postgres, sql from ..pq import Format from ..abc import AdaptContext, Buffer, Dumper, DumperKey, Query -from ..adapt import RecursiveDumper, RecursiveLoader, PyFormat +from .range import Range, T, dump_range_binary, dump_range_text, fail_dump +from .range import load_range_binary, load_range_text from .._oids import INVALID_OID, TEXT_OID +from ..adapt import PyFormat, RecursiveDumper, RecursiveLoader from .._compat import cache from .._struct import pack_len, unpack_len from .._typeinfo import TypeInfo, TypesRegistry -from .range import Range, T, load_range_text, load_range_binary -from .range import dump_range_text, dump_range_binary, fail_dump - if TYPE_CHECKING: from .._connection_base import BaseConnection diff --git a/psycopg/psycopg/types/net.py b/psycopg/psycopg/types/net.py index a04aed08f..31b9a961a 100644 --- a/psycopg/psycopg/types/net.py +++ b/psycopg/psycopg/types/net.py @@ -6,7 +6,7 @@ Adapters for network types. from __future__ import annotations -from typing import Callable, TYPE_CHECKING +from typing import TYPE_CHECKING, Callable from .. import _oids from ..pq import Format @@ -45,10 +45,9 @@ class _LazyIpaddress: global IPv4Network, IPv6Network if ip_address is None: - from ipaddress import ip_address, ip_interface, ip_network - from ipaddress import IPv4Address, IPv6Address - from ipaddress import IPv4Interface, IPv6Interface - from ipaddress import IPv4Network, IPv6Network + from ipaddress import IPv4Address, IPv4Interface, IPv4Network, IPv6Address + from ipaddress import IPv6Interface, IPv6Network, ip_address, ip_interface + from ipaddress import ip_network class InterfaceDumper(Dumper): diff --git a/psycopg/psycopg/types/none.py b/psycopg/psycopg/types/none.py index 1669abb8d..723e06d1c 100644 --- a/psycopg/psycopg/types/none.py +++ b/psycopg/psycopg/types/none.py @@ -6,7 +6,7 @@ Adapters for None. from __future__ import annotations -from ..abc import AdaptContext, NoneType, Buffer +from ..abc import AdaptContext, Buffer, NoneType from ..adapt import Dumper diff --git a/psycopg/psycopg/types/numeric.py b/psycopg/psycopg/types/numeric.py index d13f16e8b..8c0e64ed1 100644 --- a/psycopg/psycopg/types/numeric.py +++ b/psycopg/psycopg/types/numeric.py @@ -10,29 +10,26 @@ import sys import struct from abc import ABC, abstractmethod from math import log -from typing import Any, Callable, DefaultDict, cast, TYPE_CHECKING -from decimal import Decimal, DefaultContext, Context +from typing import TYPE_CHECKING, Any, Callable, DefaultDict, cast +from decimal import Context, Decimal, DefaultContext from .. import _oids from .. import errors as e from ..pq import Format from ..abc import AdaptContext from ..adapt import Buffer, Dumper, Loader, PyFormat -from .._struct import pack_int2, pack_uint2, unpack_int2 -from .._struct import pack_int4, pack_uint4, unpack_int4, unpack_uint4 -from .._struct import pack_int8, unpack_int8 -from .._struct import pack_float4, pack_float8, unpack_float4, unpack_float8 +from .._struct import pack_float4, pack_float8, pack_int2, pack_int4, pack_int8 +from .._struct import pack_uint2, pack_uint4, unpack_float4, unpack_float8, unpack_int2 +from .._struct import unpack_int4, unpack_int8, unpack_uint4 # Exposed here -from .._wrappers import ( - Int2 as Int2, - Int4 as Int4, - Int8 as Int8, - IntNumeric as IntNumeric, - Oid as Oid, - Float4 as Float4, - Float8 as Float8, -) +from .._wrappers import Float4 as Float4 +from .._wrappers import Float8 as Float8 +from .._wrappers import Int2 as Int2 +from .._wrappers import Int4 as Int4 +from .._wrappers import Int8 as Int8 +from .._wrappers import IntNumeric as IntNumeric +from .._wrappers import Oid as Oid if TYPE_CHECKING: import numpy diff --git a/psycopg/psycopg/types/numpy.py b/psycopg/psycopg/types/numpy.py index 9427a2213..e83b9731c 100644 --- a/psycopg/psycopg/types/numpy.py +++ b/psycopg/psycopg/types/numpy.py @@ -9,11 +9,10 @@ from typing import Any from .. import _oids from ..pq import Format from ..abc import AdaptContext, Buffer -from .._struct import pack_int2, pack_int4, pack_int8 - -from .bool import BoolDumper, BoolBinaryDumper +from .bool import BoolBinaryDumper, BoolDumper +from .numeric import Float4BinaryDumper, Float4Dumper, FloatBinaryDumper, FloatDumper from .numeric import _IntDumper, dump_int_to_numeric_binary -from .numeric import FloatDumper, Float4Dumper, FloatBinaryDumper, Float4BinaryDumper +from .._struct import pack_int2, pack_int4, pack_int8 class NPInt16Dumper(_IntDumper): diff --git a/psycopg/psycopg/types/range.py b/psycopg/psycopg/types/range.py index 3327a8411..6488d3d76 100644 --- a/psycopg/psycopg/types/range.py +++ b/psycopg/psycopg/types/range.py @@ -7,19 +7,18 @@ Support for range types adaptation. from __future__ import annotations import re -from typing import Any, Generic, cast, TYPE_CHECKING +from typing import TYPE_CHECKING, Any, Generic, cast from decimal import Decimal from datetime import date, datetime -from .. import sql from .. import _oids from .. import errors as e -from .. import postgres +from .. import postgres, sql 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 ..adapt import PyFormat, RecursiveDumper, RecursiveLoader +from .._compat import TypeVar, cache from .._struct import pack_len, unpack_len from .._typeinfo import TypeInfo, TypesRegistry diff --git a/psycopg/psycopg/types/shapely.py b/psycopg/psycopg/types/shapely.py index 6a7e15761..78260e687 100644 --- a/psycopg/psycopg/types/shapely.py +++ b/psycopg/psycopg/types/shapely.py @@ -5,14 +5,14 @@ Adapters for PostGIS geometries from __future__ import annotations from .. import postgres +from ..pq import Format from ..abc import AdaptContext, Buffer from ..adapt import Dumper, Loader -from ..pq import Format from .._compat import cache from .._typeinfo import TypeInfo try: - from shapely.wkb import loads, dumps + from shapely.wkb import dumps, loads from shapely.geometry.base import BaseGeometry except ImportError: diff --git a/psycopg/psycopg/types/string.py b/psycopg/psycopg/types/string.py index b802a6c83..262ac658c 100644 --- a/psycopg/psycopg/types/string.py +++ b/psycopg/psycopg/types/string.py @@ -9,7 +9,7 @@ from __future__ import annotations from typing import TYPE_CHECKING from .. import _oids -from ..pq import Format, Escaping +from ..pq import Escaping, Format from ..abc import AdaptContext from ..adapt import Buffer, Dumper, Loader from ..errors import DataError diff --git a/psycopg/psycopg/types/uuid.py b/psycopg/psycopg/types/uuid.py index 33d8acd75..596337746 100644 --- a/psycopg/psycopg/types/uuid.py +++ b/psycopg/psycopg/types/uuid.py @@ -6,7 +6,7 @@ Adapters for the UUID type. from __future__ import annotations -from typing import Callable, TYPE_CHECKING +from typing import TYPE_CHECKING, Callable from .. import _oids from ..pq import Format diff --git a/psycopg/psycopg/waiting.py b/psycopg/psycopg/waiting.py index 449918679..05994b5d5 100644 --- a/psycopg/psycopg/waiting.py +++ b/psycopg/psycopg/waiting.py @@ -15,12 +15,13 @@ import sys import select import logging import selectors -from asyncio import get_event_loop, wait_for, Event, TimeoutError +from asyncio import Event, TimeoutError, get_event_loop, wait_for from selectors import DefaultSelector from . import errors as e from .abc import RV, PQGen, PQGenConn, WaitFunc -from ._enums import Wait as Wait, Ready as Ready # re-exported +from ._enums import Ready as Ready +from ._enums import Wait as Wait # re-exported from ._cmodule import _psycopg WAIT_R = Wait.R diff --git a/psycopg_c/psycopg_c/_psycopg.pyi b/psycopg_c/psycopg_c/_psycopg.pyi index e5ec24878..fe19c120f 100644 --- a/psycopg_c/psycopg_c/_psycopg.pyi +++ b/psycopg_c/psycopg_c/_psycopg.pyi @@ -11,7 +11,7 @@ from __future__ import annotations from typing import Any, Sequence -from psycopg import pq, abc, BaseConnection +from psycopg import BaseConnection, abc, pq from psycopg.rows import Row, RowMaker from psycopg.adapt import AdaptersMap, PyFormat from psycopg.pq.abc import PGcancelConn, PGconn, PGresult diff --git a/psycopg_c/psycopg_c/_psycopg/adapt.pyx b/psycopg_c/psycopg_c/_psycopg/adapt.pyx index 70d3c5f8b..5d38e7742 100644 --- a/psycopg_c/psycopg_c/_psycopg/adapt.pyx +++ b/psycopg_c/psycopg_c/_psycopg/adapt.pyx @@ -16,12 +16,11 @@ equivalent C implementations. from typing import Any cimport cython +from libc.string cimport memchr, memcpy +from cpython.bytearray cimport PyByteArray_AS_STRING, PyByteArray_FromStringAndSize +from cpython.bytearray cimport PyByteArray_GET_SIZE, PyByteArray_Resize -from libc.string cimport memcpy, memchr -from cpython.bytearray cimport PyByteArray_FromStringAndSize, PyByteArray_Resize -from cpython.bytearray cimport PyByteArray_GET_SIZE, PyByteArray_AS_STRING - -from psycopg_c.pq cimport _buffer_as_string_and_size, Escaping +from psycopg_c.pq cimport Escaping, _buffer_as_string_and_size from psycopg import errors as e diff --git a/psycopg_c/psycopg_c/_psycopg/copy.pyx b/psycopg_c/psycopg_c/_psycopg/copy.pyx index dd34be1a9..cf29252bf 100644 --- a/psycopg_c/psycopg_c/_psycopg/copy.pyx +++ b/psycopg_c/psycopg_c/_psycopg/copy.pyx @@ -5,17 +5,18 @@ C optimised functions for the copy system. # Copyright (C) 2020 The Psycopg Team +from libc.stdint cimport int32_t, uint16_t, uint32_t from libc.string cimport memcpy -from libc.stdint cimport uint16_t, uint32_t, int32_t -from cpython.bytearray cimport PyByteArray_FromStringAndSize, PyByteArray_Resize -from cpython.bytearray cimport PyByteArray_AS_STRING, PyByteArray_GET_SIZE +from cpython.bytearray cimport PyByteArray_AS_STRING, PyByteArray_FromStringAndSize +from cpython.bytearray cimport PyByteArray_GET_SIZE, PyByteArray_Resize from cpython.memoryview cimport PyMemoryView_FromObject -from psycopg_c._psycopg cimport endian from psycopg_c.pq cimport ViewBuffer +from psycopg_c._psycopg cimport endian from psycopg import errors as e + cdef int32_t _binary_null = -1 diff --git a/psycopg_c/psycopg_c/_psycopg/endian.pxd b/psycopg_c/psycopg_c/_psycopg/endian.pxd index 17a4a547f..09dcc93e7 100644 --- a/psycopg_c/psycopg_c/_psycopg/endian.pxd +++ b/psycopg_c/psycopg_c/_psycopg/endian.pxd @@ -6,6 +6,7 @@ Access to endian conversion function from libc.stdint cimport uint16_t, uint32_t, uint64_t + cdef extern from * nogil: # from https://gist.github.com/panzi/6856583 # Improved in: diff --git a/psycopg_c/psycopg_c/_psycopg/generators.pyx b/psycopg_c/psycopg_c/_psycopg/generators.pyx index c280d1389..594db0881 100644 --- a/psycopg_c/psycopg_c/_psycopg/generators.pyx +++ b/psycopg_c/psycopg_c/_psycopg/generators.pyx @@ -11,10 +11,11 @@ from time import monotonic 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._enums import Ready, Wait from psycopg._compat import Deque from psycopg._encodings import conninfo_encoding + cdef object WAIT_W = Wait.W cdef object WAIT_R = Wait.R cdef object WAIT_RW = Wait.RW diff --git a/psycopg_c/psycopg_c/_psycopg/transform.pyx b/psycopg_c/psycopg_c/_psycopg/transform.pyx index b2f252f2c..3a5fc9a87 100644 --- a/psycopg_c/psycopg_c/_psycopg/transform.pyx +++ b/psycopg_c/psycopg_c/_psycopg/transform.pyx @@ -9,12 +9,11 @@ too many temporary Python objects and performing less memory copying. # Copyright (C) 2020 The Psycopg Team cimport cython -from cpython.ref cimport Py_INCREF, Py_DECREF +from cpython.ref cimport Py_DECREF, Py_INCREF from cpython.set cimport PySet_Add, PySet_Contains from cpython.dict cimport PyDict_GetItem, PyDict_SetItem -from cpython.list cimport ( - PyList_New, PyList_CheckExact, - PyList_GET_ITEM, PyList_SET_ITEM, PyList_GET_SIZE) +from cpython.list cimport PyList_CheckExact, PyList_GET_ITEM, PyList_GET_SIZE +from cpython.list cimport PyList_New, PyList_SET_ITEM from cpython.bytes cimport PyBytes_AS_STRING from cpython.tuple cimport PyTuple_New, PyTuple_SET_ITEM from cpython.object cimport PyObject, PyObject_CallFunctionObjArgs diff --git a/psycopg_c/psycopg_c/pq/escaping.pyx b/psycopg_c/psycopg_c/pq/escaping.pyx index 85ae955a0..2956b2f59 100644 --- a/psycopg_c/psycopg_c/pq/escaping.pyx +++ b/psycopg_c/psycopg_c/pq/escaping.pyx @@ -4,8 +4,8 @@ psycopg_c.pq.Escaping object implementation. # Copyright (C) 2020 The Psycopg Team +from cpython.mem cimport PyMem_Free, PyMem_Malloc from libc.string cimport strlen -from cpython.mem cimport PyMem_Malloc, PyMem_Free cdef class Escaping: diff --git a/psycopg_c/psycopg_c/pq/pgconn.pyx b/psycopg_c/psycopg_c/pq/pgconn.pyx index 9ec1039df..7c4eccb83 100644 --- a/psycopg_c/psycopg_c/pq/pgconn.pyx +++ b/psycopg_c/psycopg_c/pq/pgconn.pyx @@ -18,18 +18,21 @@ cdef extern from * nogil: pid_t getpid() from libc.stdio cimport fdopen -from cpython.mem cimport PyMem_Malloc, PyMem_Free +from cpython.mem cimport PyMem_Free, PyMem_Malloc from cpython.bytes cimport PyBytes_AsString from cpython.memoryview cimport PyMemoryView_FromObject import sys -from psycopg._encodings import pg2pyenc -from psycopg.pq import Format as PqFormat, Trace, version_pretty -from psycopg.pq.misc import PGnotify, connection_summary, _clean_error_message +from psycopg.pq import Format as PqFormat +from psycopg.pq import Trace, version_pretty +from psycopg.pq.misc import PGnotify, _clean_error_message, connection_summary from psycopg.pq._enums import ExecStatus +from psycopg._encodings import pg2pyenc + from psycopg_c.pq cimport PQBuffer + cdef object _check_supported(fname, int pgversion): if libpq.PG_VERSION_NUM < pgversion: raise e.NotSupportedError( diff --git a/psycopg_c/psycopg_c/pq/pgresult.pyx b/psycopg_c/psycopg_c/pq/pgresult.pyx index f3fd42992..9547af93a 100644 --- a/psycopg_c/psycopg_c/pq/pgresult.pyx +++ b/psycopg_c/psycopg_c/pq/pgresult.pyx @@ -5,7 +5,7 @@ psycopg_c.pq.PGresult object implementation. # Copyright (C) 2020 The Psycopg Team cimport cython -from cpython.mem cimport PyMem_Malloc, PyMem_Free +from cpython.mem cimport PyMem_Free, PyMem_Malloc from psycopg.pq.misc import PGresAttDesc from psycopg.pq._enums import ExecStatus diff --git a/psycopg_c/psycopg_c/pq/pqbuffer.pyx b/psycopg_c/psycopg_c/pq/pqbuffer.pyx index eb5d64822..69118cb00 100644 --- a/psycopg_c/psycopg_c/pq/pqbuffer.pyx +++ b/psycopg_c/psycopg_c/pq/pqbuffer.pyx @@ -6,8 +6,8 @@ PQbuffer object implementation. cimport cython from cpython.bytes cimport PyBytes_AsStringAndSize -from cpython.buffer cimport PyObject_CheckBuffer, PyBUF_SIMPLE -from cpython.buffer cimport PyObject_GetBuffer, PyBuffer_Release +from cpython.buffer cimport PyBUF_SIMPLE, PyBuffer_Release, PyObject_CheckBuffer +from cpython.buffer cimport PyObject_GetBuffer @cython.freelist(32) diff --git a/psycopg_c/psycopg_c/types/array.pyx b/psycopg_c/psycopg_c/types/array.pyx index 148df3aa7..a67cc1d3d 100644 --- a/psycopg_c/psycopg_c/types/array.pyx +++ b/psycopg_c/psycopg_c/types/array.pyx @@ -6,20 +6,21 @@ C optimized functions to manipulate arrays import cython +from cpython.mem cimport PyMem_Free, PyMem_Realloc +from cpython.ref cimport Py_INCREF from libc.stdint cimport int32_t, uint32_t from libc.string cimport memset, strchr -from cpython.mem cimport PyMem_Realloc, PyMem_Free -from cpython.ref cimport Py_INCREF -from cpython.list cimport PyList_New,PyList_Append, PyList_GetSlice -from cpython.list cimport PyList_GET_ITEM, PyList_SET_ITEM, PyList_GET_SIZE +from cpython.list cimport PyList_Append, PyList_GET_ITEM, PyList_GET_SIZE +from cpython.list cimport PyList_GetSlice, PyList_New, PyList_SET_ITEM from cpython.object cimport PyObject from psycopg_c.pq cimport _buffer_as_string_and_size -from psycopg_c.pq.libpq cimport Oid from psycopg_c._psycopg cimport endian +from psycopg_c.pq.libpq cimport Oid from psycopg import errors as e + cdef extern from *: """ /* Defined in PostgreSQL in src/include/utils/array.h */ diff --git a/psycopg_c/psycopg_c/types/datetime.pyx b/psycopg_c/psycopg_c/types/datetime.pyx index e2a6ac8a3..a14456b09 100644 --- a/psycopg_c/psycopg_c/types/datetime.pyx +++ b/psycopg_c/psycopg_c/types/datetime.pyx @@ -4,12 +4,13 @@ Cython adapters for date/time types. # Copyright (C) 2021 The Psycopg Team +from cpython cimport datetime as cdt from libc.stdint cimport int64_t from libc.string cimport memset, strchr -from cpython cimport datetime as cdt from cpython.dict cimport PyDict_GetItem from cpython.object cimport PyObject, PyObject_CallFunctionObjArgs + cdef extern from "Python.h": const char *PyUnicode_AsUTF8AndSize(unicode obj, Py_ssize_t *size) except NULL object PyTimeZone_FromOffset(object offset) @@ -21,14 +22,13 @@ static int _uspad[] = {0, 100000, 10000, 1000, 100, 10, 1}; """ cdef int *_uspad -from datetime import date, time, timedelta, datetime, timezone +from datetime import date, datetime, time, timedelta, timezone from psycopg_c._psycopg cimport endian from psycopg import errors as e from psycopg._compat import ZoneInfo - # Initialise the datetime C API cdt.import_datetime() diff --git a/psycopg_c/psycopg_c/types/numeric.pyx b/psycopg_c/psycopg_c/types/numeric.pyx index 31dc75b3e..24fd0c4ad 100644 --- a/psycopg_c/psycopg_c/types/numeric.pyx +++ b/psycopg_c/psycopg_c/types/numeric.pyx @@ -5,25 +5,25 @@ Cython adapters for numeric types. # Copyright (C) 2020 The Psycopg Team cimport cython - +from cpython.mem cimport PyMem_Free from libc.stdint cimport * from libc.string cimport memcpy, memset, strlen -from cpython.mem cimport PyMem_Free from cpython.dict cimport PyDict_GetItem, PyDict_SetItem -from cpython.long cimport ( - PyLong_FromString, PyLong_FromLong, PyLong_FromLongLong, - PyLong_FromUnsignedLong, PyLong_AsLongLong) +from cpython.long cimport PyLong_AsLongLong, PyLong_FromLong, PyLong_FromLongLong +from cpython.long cimport PyLong_FromString, PyLong_FromUnsignedLong from cpython.bytes cimport PyBytes_AsStringAndSize -from cpython.float cimport PyFloat_FromDouble, PyFloat_AsDouble +from cpython.float cimport PyFloat_AsDouble, PyFloat_FromDouble from cpython.unicode cimport PyUnicode_DecodeUTF8 import sys -from decimal import Decimal, Context, DefaultContext +from decimal import Context, Decimal, DefaultContext from psycopg_c._psycopg cimport endian + from psycopg import errors as e from psycopg._wrappers import Int2, Int4, Int8, IntNumeric + cdef extern from "Python.h": # work around https://github.com/cython/cython/issues/3909 double PyOS_string_to_double( diff --git a/psycopg_c/psycopg_c/types/string.pyx b/psycopg_c/psycopg_c/types/string.pyx index f1b8b64f4..d3c2145ff 100644 --- a/psycopg_c/psycopg_c/types/string.pyx +++ b/psycopg_c/psycopg_c/types/string.pyx @@ -5,8 +5,7 @@ Cython adapters for textual types. # Copyright (C) 2020 The Psycopg Team cimport cython - -from libc.string cimport memcpy, memchr +from libc.string cimport memchr, memcpy from cpython.bytes cimport PyBytes_AsString, PyBytes_AsStringAndSize from cpython.unicode cimport ( PyUnicode_AsEncodedString, @@ -16,11 +15,12 @@ from cpython.unicode cimport ( PyUnicode_DecodeUTF8, ) -from psycopg_c.pq cimport libpq, Escaping, _buffer_as_string_and_size +from psycopg_c.pq cimport Escaping, _buffer_as_string_and_size, libpq from psycopg import errors as e from psycopg._encodings import pg2pyenc + cdef extern from "Python.h": const char *PyUnicode_AsUTF8AndSize(unicode obj, Py_ssize_t *size) except NULL diff --git a/psycopg_c/setup.py b/psycopg_c/setup.py index b122ee2ec..e0178b041 100644 --- a/psycopg_c/setup.py +++ b/psycopg_c/setup.py @@ -8,10 +8,10 @@ PostgreSQL database adapter for Python - optimisation package import os import sys import subprocess as sp - -from setuptools import setup, Extension -from distutils.command.build_ext import build_ext from distutils import log +from distutils.command.build_ext import build_ext + +from setuptools import Extension, setup # Move to the directory of setup.py: executing this file from another location # (e.g. from the project root) will fail diff --git a/psycopg_pool/psycopg_pool/__init__.py b/psycopg_pool/psycopg_pool/__init__.py index e4d975fed..f29381d57 100644 --- a/psycopg_pool/psycopg_pool/__init__.py +++ b/psycopg_pool/psycopg_pool/__init__.py @@ -5,11 +5,11 @@ psycopg connection pool package # Copyright (C) 2021 The Psycopg Team from .pool import ConnectionPool -from .pool_async import AsyncConnectionPool -from .null_pool import NullConnectionPool -from .null_pool_async import AsyncNullConnectionPool from .errors import PoolClosed, PoolTimeout, TooManyRequests from .version import __version__ as __version__ # noqa: F401 +from .null_pool import NullConnectionPool +from .pool_async import AsyncConnectionPool +from .null_pool_async import AsyncNullConnectionPool __all__ = [ "AsyncConnectionPool", diff --git a/psycopg_pool/psycopg_pool/_acompat.py b/psycopg_pool/psycopg_pool/_acompat.py index 9081d3ecd..5e20b73ad 100644 --- a/psycopg_pool/psycopg_pool/_acompat.py +++ b/psycopg_pool/psycopg_pool/_acompat.py @@ -15,7 +15,7 @@ import queue import asyncio import logging import threading -from typing import Any, Callable, Coroutine, TYPE_CHECKING +from typing import TYPE_CHECKING, Any, Callable, Coroutine from ._compat import TypeAlias, TypeVar diff --git a/psycopg_pool/psycopg_pool/_compat.py b/psycopg_pool/psycopg_pool/_compat.py index fc13e29fb..d4964d784 100644 --- a/psycopg_pool/psycopg_pool/_compat.py +++ b/psycopg_pool/psycopg_pool/_compat.py @@ -11,7 +11,8 @@ import sys import psycopg.errors as e if sys.version_info >= (3, 9): - from collections import Counter, deque as Deque + from collections import Counter + from collections import deque as Deque else: from typing import Counter, Deque diff --git a/psycopg_pool/psycopg_pool/abc.py b/psycopg_pool/psycopg_pool/abc.py index 1c13cad1d..ca5df0c29 100644 --- a/psycopg_pool/psycopg_pool/abc.py +++ b/psycopg_pool/psycopg_pool/abc.py @@ -6,17 +6,19 @@ Types used in the psycopg_pool package from __future__ import annotations -from typing import Awaitable, Callable, TYPE_CHECKING from typing import Union # drop with Python 3.8 +from typing import TYPE_CHECKING, Awaitable, Callable from ._compat import TypeAlias, TypeVar if TYPE_CHECKING: from typing import Any # noqa: F401 + + from psycopg import AsyncConnection, Connection # noqa: F401 + from psycopg.rows import TupleRow # noqa: F401 + from .pool import ConnectionPool # noqa: F401 from .pool_async import AsyncConnectionPool # noqa: F401 - from psycopg import Connection, AsyncConnection # noqa: F401 - from psycopg.rows import TupleRow # noqa: F401 # Connection types to make the pool generic CT = TypeVar("CT", bound="Connection[Any]", default="Connection[TupleRow]") diff --git a/psycopg_pool/psycopg_pool/base.py b/psycopg_pool/psycopg_pool/base.py index 427fd24dc..9f9984f22 100644 --- a/psycopg_pool/psycopg_pool/base.py +++ b/psycopg_pool/psycopg_pool/base.py @@ -8,7 +8,7 @@ from __future__ import annotations from time import monotonic from random import random -from typing import Any, TYPE_CHECKING +from typing import TYPE_CHECKING, Any from psycopg import errors as e diff --git a/psycopg_pool/psycopg_pool/null_pool.py b/psycopg_pool/psycopg_pool/null_pool.py index fb071b594..37b7bc707 100644 --- a/psycopg_pool/psycopg_pool/null_pool.py +++ b/psycopg_pool/psycopg_pool/null_pool.py @@ -15,12 +15,12 @@ from typing import Any, cast from psycopg import Connection from psycopg.pq import TransactionStatus -from .abc import CT, ConnectionCB, ConnectFailedCB +from .abc import CT, ConnectFailedCB, ConnectionCB +from .pool import AddConnection, ConnectionPool from .errors import PoolTimeout, TooManyRequests from ._compat import ConnectionTimeout from ._acompat import Event from .base_null_pool import _BaseNullConnectionPool -from .pool import ConnectionPool, AddConnection logger = logging.getLogger("psycopg.pool") diff --git a/psycopg_pool/psycopg_pool/null_pool_async.py b/psycopg_pool/psycopg_pool/null_pool_async.py index f89aa2ed8..b73504824 100644 --- a/psycopg_pool/psycopg_pool/null_pool_async.py +++ b/psycopg_pool/psycopg_pool/null_pool_async.py @@ -12,12 +12,12 @@ from typing import Any, cast from psycopg import AsyncConnection from psycopg.pq import TransactionStatus -from .abc import ACT, AsyncConnectionCB, AsyncConnectFailedCB +from .abc import ACT, AsyncConnectFailedCB, AsyncConnectionCB from .errors import PoolTimeout, TooManyRequests from ._compat import ConnectionTimeout from ._acompat import AEvent +from .pool_async import AddConnection, AsyncConnectionPool from .base_null_pool import _BaseNullConnectionPool -from .pool_async import AsyncConnectionPool, AddConnection logger = logging.getLogger("psycopg.pool") diff --git a/psycopg_pool/psycopg_pool/pool.py b/psycopg_pool/psycopg_pool/pool.py index 3696a83ab..115894486 100644 --- a/psycopg_pool/psycopg_pool/pool.py +++ b/psycopg_pool/psycopg_pool/pool.py @@ -14,22 +14,21 @@ import warnings from abc import ABC, abstractmethod from time import monotonic from types import TracebackType -from typing import Any, Iterator, cast, Generic +from typing import Any, Generic, Iterator, cast from weakref import ref from contextlib import contextmanager -from psycopg import errors as e from psycopg import Connection +from psycopg import errors as e from psycopg.pq import TransactionStatus -from .abc import CT, ConnectionCB, ConnectFailedCB +from .abc import CT, ConnectFailedCB, ConnectionCB from .base import AttemptWithBackoff, BasePool +from .sched import Scheduler from .errors import PoolClosed, PoolTimeout, TooManyRequests from ._compat import Deque, Self -from ._acompat import Condition, Event, Lock, Queue, Worker, spawn, gather -from ._acompat import sleep, current_thread_name -from .sched import Scheduler - +from ._acompat import Condition, Event, Lock, Queue, Worker, current_thread_name +from ._acompat import gather, sleep, spawn logger = logging.getLogger("psycopg.pool") diff --git a/psycopg_pool/psycopg_pool/pool_async.py b/psycopg_pool/psycopg_pool/pool_async.py index 718cb9c25..fc52a6fe4 100644 --- a/psycopg_pool/psycopg_pool/pool_async.py +++ b/psycopg_pool/psycopg_pool/pool_async.py @@ -11,20 +11,20 @@ import warnings from abc import ABC, abstractmethod from time import monotonic from types import TracebackType -from typing import Any, AsyncIterator, cast, Generic +from typing import Any, AsyncIterator, Generic, cast from weakref import ref from contextlib import asynccontextmanager -from psycopg import errors as e from psycopg import AsyncConnection +from psycopg import errors as e from psycopg.pq import TransactionStatus -from .abc import ACT, AsyncConnectionCB, AsyncConnectFailedCB +from .abc import ACT, AsyncConnectFailedCB, AsyncConnectionCB from .base import AttemptWithBackoff, BasePool from .errors import PoolClosed, PoolTimeout, TooManyRequests from ._compat import Deque, Self -from ._acompat import ACondition, AEvent, ALock, AQueue, AWorker, aspawn, agather -from ._acompat import asleep, current_task_name +from ._acompat import ACondition, AEvent, ALock, AQueue, AWorker, agather, asleep +from ._acompat import aspawn, current_task_name from .sched_async import AsyncScheduler if True: # ASYNC diff --git a/psycopg_pool/psycopg_pool/sched.py b/psycopg_pool/psycopg_pool/sched.py index eff588a79..f41179858 100644 --- a/psycopg_pool/psycopg_pool/sched.py +++ b/psycopg_pool/psycopg_pool/sched.py @@ -19,11 +19,11 @@ from __future__ import annotations import logging from time import monotonic -from heapq import heappush, heappop +from heapq import heappop, heappush from typing import Any, Callable from ._task import Task -from ._acompat import Lock, Event +from ._acompat import Event, Lock logger = logging.getLogger(__name__) diff --git a/psycopg_pool/psycopg_pool/sched_async.py b/psycopg_pool/psycopg_pool/sched_async.py index 1ba23d47d..86f59d036 100644 --- a/psycopg_pool/psycopg_pool/sched_async.py +++ b/psycopg_pool/psycopg_pool/sched_async.py @@ -16,11 +16,11 @@ from __future__ import annotations import logging from time import monotonic -from heapq import heappush, heappop +from heapq import heappop, heappush from typing import Any, Callable from ._task import Task -from ._acompat import ALock, AEvent +from ._acompat import AEvent, ALock logger = logging.getLogger(__name__) diff --git a/tests/_test_connection.py b/tests/_test_connection.py index a161300b1..d48ee5230 100644 --- a/tests/_test_connection.py +++ b/tests/_test_connection.py @@ -8,6 +8,7 @@ from typing import Any from dataclasses import dataclass import pytest + import psycopg from psycopg.conninfo import conninfo_to_dict diff --git a/tests/_test_cursor.py b/tests/_test_cursor.py index f2f643e51..39df2ec2b 100644 --- a/tests/_test_cursor.py +++ b/tests/_test_cursor.py @@ -8,6 +8,7 @@ import re from typing import Any, Match import pytest + import psycopg from psycopg.rows import RowMaker diff --git a/tests/_test_transaction.py b/tests/_test_transaction.py index 27618e5fe..688dfec4e 100644 --- a/tests/_test_transaction.py +++ b/tests/_test_transaction.py @@ -1,9 +1,10 @@ import sys + import pytest + import psycopg from psycopg import pq - # TODOCRDB: is this the expected behaviour? crdb_skip_external_observer = pytest.mark.crdb( "skip", reason="deadlock on observer connection" diff --git a/tests/adapters_example.py b/tests/adapters_example.py index d69141dd1..4d111c890 100644 --- a/tests/adapters_example.py +++ b/tests/adapters_example.py @@ -1,7 +1,7 @@ from __future__ import annotations from psycopg import pq -from psycopg.abc import Dumper, Loader, AdaptContext, PyFormat, Buffer +from psycopg.abc import AdaptContext, Buffer, Dumper, Loader, PyFormat def f() -> None: diff --git a/tests/conftest.py b/tests/conftest.py index 643a3174f..4a1d4de41 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,8 +1,8 @@ from __future__ import annotations +import sys import asyncio import selectors -import sys from typing import Any import pytest diff --git a/tests/crdb/test_adapt.py b/tests/crdb/test_adapt.py index ce5bacf9f..2a758fce1 100644 --- a/tests/crdb/test_adapt.py +++ b/tests/crdb/test_adapt.py @@ -2,14 +2,13 @@ from copy import deepcopy import pytest -from psycopg.crdb import adapters, CrdbConnection - +from psycopg.crdb import CrdbConnection, adapters from psycopg.adapt import PyFormat, Transformer -from psycopg.types.array import ListDumper from psycopg.postgres import types as builtins +from psycopg.types.array import ListDumper -from ..test_adapt import MyStr, make_dumper, make_bin_dumper -from ..test_adapt import make_loader, make_bin_loader +from ..test_adapt import MyStr, make_bin_dumper, make_bin_loader, make_dumper +from ..test_adapt import make_loader pytestmark = pytest.mark.crdb diff --git a/tests/crdb/test_connection.py b/tests/crdb/test_connection.py index 87a0bcf7f..b935e8530 100644 --- a/tests/crdb/test_connection.py +++ b/tests/crdb/test_connection.py @@ -9,7 +9,7 @@ import psycopg.crdb from psycopg import errors as e from psycopg.crdb import CrdbConnection -from ..acompat import sleep, spawn, gather +from ..acompat import gather, sleep, spawn pytestmark = [pytest.mark.crdb] diff --git a/tests/crdb/test_connection_async.py b/tests/crdb/test_connection_async.py index 6de10fe52..f965ccc5b 100644 --- a/tests/crdb/test_connection_async.py +++ b/tests/crdb/test_connection_async.py @@ -6,7 +6,7 @@ import psycopg.crdb from psycopg import errors as e from psycopg.crdb import AsyncCrdbConnection -from ..acompat import asleep, spawn, gather +from ..acompat import asleep, gather, spawn pytestmark = [pytest.mark.crdb] if True: # ASYNC diff --git a/tests/crdb/test_copy.py b/tests/crdb/test_copy.py index 8670227d9..aa2d1024b 100644 --- a/tests/crdb/test_copy.py +++ b/tests/crdb/test_copy.py @@ -1,19 +1,22 @@ # WARNING: this file is auto-generated by 'async_to_sync.py' # from the original file 'test_copy_async.py' # DO NOT CHANGE! Change the original file instead. -import pytest import string -from random import randrange, choice +from random import choice, randrange from typing import Any # noqa: ignore -from psycopg import pq, sql, errors as e +import pytest + +from psycopg import errors as e +from psycopg import pq, sql from psycopg.adapt import PyFormat from psycopg.types.numeric import Int4 from ..utils import eur -from .._test_copy import sample_text, sample_binary # noqa +from .._test_copy import sample_binary # noqa from .._test_copy import ensure_table, sample_records from .._test_copy import sample_tabledef as sample_tabledef_pg +from .._test_copy import sample_text # CRDB int/serial are int8 sample_tabledef = sample_tabledef_pg.replace("int", "int4").replace("serial", "int4") diff --git a/tests/crdb/test_copy_async.py b/tests/crdb/test_copy_async.py index 9880f6fe4..60c52ab52 100644 --- a/tests/crdb/test_copy_async.py +++ b/tests/crdb/test_copy_async.py @@ -1,16 +1,19 @@ -import pytest import string -from random import randrange, choice +from random import choice, randrange from typing import Any # noqa: ignore -from psycopg import pq, sql, errors as e +import pytest + +from psycopg import errors as e +from psycopg import pq, sql from psycopg.adapt import PyFormat from psycopg.types.numeric import Int4 from ..utils import eur -from .._test_copy import sample_text, sample_binary # noqa +from .._test_copy import sample_binary # noqa from .._test_copy import ensure_table_async, sample_records from .._test_copy import sample_tabledef as sample_tabledef_pg +from .._test_copy import sample_text # CRDB int/serial are int8 sample_tabledef = sample_tabledef_pg.replace("int", "int4").replace("serial", "int4") diff --git a/tests/crdb/test_cursor.py b/tests/crdb/test_cursor.py index 443addc9d..b41de3023 100644 --- a/tests/crdb/test_cursor.py +++ b/tests/crdb/test_cursor.py @@ -7,9 +7,12 @@ import json from uuid import uuid4 import pytest -from psycopg import pq, errors as e + +from psycopg import errors as e +from psycopg import pq from psycopg.rows import namedtuple_row -from ..acompat import Queue, spawn, gather + +from ..acompat import Queue, gather, spawn pytestmark = [pytest.mark.crdb] diff --git a/tests/crdb/test_cursor_async.py b/tests/crdb/test_cursor_async.py index 0607c7708..4c803fa87 100644 --- a/tests/crdb/test_cursor_async.py +++ b/tests/crdb/test_cursor_async.py @@ -4,9 +4,12 @@ import json from uuid import uuid4 import pytest -from psycopg import pq, errors as e + +from psycopg import errors as e +from psycopg import pq from psycopg.rows import namedtuple_row -from ..acompat import AQueue, spawn, gather + +from ..acompat import AQueue, gather, spawn pytestmark = [pytest.mark.crdb] if True: # ASYNC diff --git a/tests/crdb/test_no_crdb.py b/tests/crdb/test_no_crdb.py index df43f3bd1..622c6409c 100644 --- a/tests/crdb/test_no_crdb.py +++ b/tests/crdb/test_no_crdb.py @@ -1,8 +1,8 @@ +import pytest + from psycopg.pq import TransactionStatus from psycopg.crdb import CrdbConnection -import pytest - pytestmark = pytest.mark.crdb("skip") diff --git a/tests/dbapi20.py b/tests/dbapi20.py index d15dbcb1a..fae83ca2a 100644 --- a/tests/dbapi20.py +++ b/tests/dbapi20.py @@ -19,12 +19,11 @@ __rcs_id__ = '$Id: dbapi20.py,v 1.11 2005/01/02 02:41:01 zenzen Exp $' __version__ = '$Revision: 1.12 $'[11:-2] __author__ = 'Stuart Bishop ' -import unittest -import time import sys +import time +import unittest from typing import Any - # Revision 1.12 2009/02/06 03:35:11 kf7xm # Tested okay with Python 3.0, includes last minute patches from Mark H. # diff --git a/tests/fix_crdb.py b/tests/fix_crdb.py index b02aa2a36..f1679f6f0 100644 --- a/tests/fix_crdb.py +++ b/tests/fix_crdb.py @@ -2,9 +2,10 @@ from __future__ import annotations import pytest -from .utils import VersionCheck from psycopg.crdb import CrdbConnection +from .utils import VersionCheck + def pytest_configure(config): # register libpq marker diff --git a/tests/fix_db.py b/tests/fix_db.py index bb1109c05..342e51392 100644 --- a/tests/fix_db.py +++ b/tests/fix_db.py @@ -3,15 +3,15 @@ from __future__ import annotations import io import os import sys -import pytest import logging from contextlib import contextmanager +import pytest + import psycopg -from psycopg import pq -from psycopg import sql -from psycopg.conninfo import conninfo_to_dict, make_conninfo +from psycopg import pq, sql from psycopg._compat import cache +from psycopg.conninfo import conninfo_to_dict, make_conninfo from psycopg.pq._debug import PGconnDebug from .utils import check_postgres_version diff --git a/tests/fix_dns.py b/tests/fix_dns.py index 4a538e5d6..f8bbebafb 100644 --- a/tests/fix_dns.py +++ b/tests/fix_dns.py @@ -1,5 +1,5 @@ -import asyncio import socket +import asyncio import pytest diff --git a/tests/fix_faker.py b/tests/fix_faker.py index e9c8f0770..d4eee3875 100644 --- a/tests/fix_faker.py +++ b/tests/fix_faker.py @@ -8,7 +8,7 @@ from uuid import UUID from random import choice, random, randrange from typing import Any from decimal import Decimal -from contextlib import contextmanager, asynccontextmanager +from contextlib import asynccontextmanager, contextmanager import pytest @@ -16,8 +16,8 @@ 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.range import Range from psycopg.types.numeric import Int4, Int8 from psycopg.types.multirange import Multirange diff --git a/tests/fix_psycopg.py b/tests/fix_psycopg.py index bc054fdb7..f7934603e 100644 --- a/tests/fix_psycopg.py +++ b/tests/fix_psycopg.py @@ -41,7 +41,7 @@ class Tpc: self.conn = conn def check_tpc(self): - from .fix_crdb import is_crdb, crdb_skip_message + from .fix_crdb import crdb_skip_message, is_crdb if is_crdb(self.conn): pytest.skip(crdb_skip_message("2-phase commit")) diff --git a/tests/pool/test_pool.py b/tests/pool/test_pool.py index a3e991d1f..cd19b7636 100644 --- a/tests/pool/test_pool.py +++ b/tests/pool/test_pool.py @@ -12,10 +12,10 @@ import pytest import psycopg from psycopg.pq import TransactionStatus -from psycopg.rows import class_row, Row, TupleRow +from psycopg.rows import Row, TupleRow, class_row -from ..utils import assert_type, Counter, set_autocommit -from ..acompat import Event, spawn, gather, sleep, skip_sync +from ..utils import Counter, assert_type, set_autocommit +from ..acompat import Event, gather, skip_sync, sleep, spawn from .test_pool_common import delay_connection try: diff --git a/tests/pool/test_pool_async.py b/tests/pool/test_pool_async.py index bdcedff49..580260090 100644 --- a/tests/pool/test_pool_async.py +++ b/tests/pool/test_pool_async.py @@ -9,10 +9,10 @@ import pytest import psycopg from psycopg.pq import TransactionStatus -from psycopg.rows import class_row, Row, TupleRow +from psycopg.rows import Row, TupleRow, class_row -from ..utils import assert_type, Counter, set_autocommit -from ..acompat import AEvent, spawn, gather, asleep, skip_sync +from ..utils import Counter, assert_type, set_autocommit +from ..acompat import AEvent, asleep, gather, skip_sync, spawn from .test_pool_common_async import delay_connection try: diff --git a/tests/pool/test_pool_async_noasyncio.py b/tests/pool/test_pool_async_noasyncio.py index 4afb210df..dd79d9741 100644 --- a/tests/pool/test_pool_async_noasyncio.py +++ b/tests/pool/test_pool_async_noasyncio.py @@ -1,8 +1,8 @@ # These tests relate to AsyncConnectionPool, but are not marked asyncio # because they rely on the pool initialization outside the asyncio loop. -import asyncio import sys +import asyncio import pytest diff --git a/tests/pool/test_pool_common.py b/tests/pool/test_pool_common.py index 1f2230cf0..261fb195a 100644 --- a/tests/pool/test_pool_common.py +++ b/tests/pool/test_pool_common.py @@ -12,7 +12,7 @@ import pytest import psycopg from ..utils import set_autocommit -from ..acompat import Event, spawn, gather, sleep, is_alive, skip_async, skip_sync +from ..acompat import Event, gather, is_alive, skip_async, skip_sync, sleep, spawn try: import psycopg_pool as pool diff --git a/tests/pool/test_pool_common_async.py b/tests/pool/test_pool_common_async.py index 4ee23270c..228d19aae 100644 --- a/tests/pool/test_pool_common_async.py +++ b/tests/pool/test_pool_common_async.py @@ -9,7 +9,7 @@ import pytest import psycopg from ..utils import set_autocommit -from ..acompat import AEvent, spawn, gather, asleep, is_alive, skip_async, skip_sync +from ..acompat import AEvent, asleep, gather, is_alive, skip_async, skip_sync, spawn try: import psycopg_pool as pool diff --git a/tests/pool/test_pool_null.py b/tests/pool/test_pool_null.py index 89b39d7af..21a0025ba 100644 --- a/tests/pool/test_pool_null.py +++ b/tests/pool/test_pool_null.py @@ -11,10 +11,10 @@ from packaging.version import parse as ver # noqa: F401 # used in skipif import psycopg from psycopg.pq import TransactionStatus -from psycopg.rows import class_row, Row, TupleRow +from psycopg.rows import Row, TupleRow, class_row from ..utils import assert_type, set_autocommit -from ..acompat import Event, sleep, spawn, gather, skip_sync +from ..acompat import Event, gather, skip_sync, sleep, spawn from .test_pool_common import delay_connection, ensure_waiting try: diff --git a/tests/pool/test_pool_null_async.py b/tests/pool/test_pool_null_async.py index c74acb8fd..6346628dc 100644 --- a/tests/pool/test_pool_null_async.py +++ b/tests/pool/test_pool_null_async.py @@ -8,10 +8,10 @@ from packaging.version import parse as ver # noqa: F401 # used in skipif import psycopg from psycopg.pq import TransactionStatus -from psycopg.rows import class_row, Row, TupleRow +from psycopg.rows import Row, TupleRow, class_row from ..utils import assert_type, set_autocommit -from ..acompat import AEvent, asleep, spawn, gather, skip_sync +from ..acompat import AEvent, asleep, gather, skip_sync, spawn from .test_pool_common_async import delay_connection, ensure_waiting try: diff --git a/tests/pool/test_sched.py b/tests/pool/test_sched.py index 8cfff6017..f579801a0 100644 --- a/tests/pool/test_sched.py +++ b/tests/pool/test_sched.py @@ -8,7 +8,7 @@ from contextlib import contextmanager import pytest -from ..acompat import spawn, gather, sleep +from ..acompat import gather, sleep, spawn try: from psycopg_pool.sched import Scheduler diff --git a/tests/pool/test_sched_async.py b/tests/pool/test_sched_async.py index 16366735d..1add98ccd 100644 --- a/tests/pool/test_sched_async.py +++ b/tests/pool/test_sched_async.py @@ -5,7 +5,7 @@ from contextlib import asynccontextmanager import pytest -from ..acompat import spawn, gather, asleep +from ..acompat import asleep, gather, spawn try: from psycopg_pool.sched_async import AsyncScheduler diff --git a/tests/pq/test_pgconn.py b/tests/pq/test_pgconn.py index 6c555a229..02953b4de 100644 --- a/tests/pq/test_pgconn.py +++ b/tests/pq/test_pgconn.py @@ -1,21 +1,21 @@ from __future__ import annotations -import contextlib import os import sys import time import ctypes import logging import weakref -from functools import partial +import contextlib from select import select -from typing import Iterator, TYPE_CHECKING +from typing import TYPE_CHECKING, Iterator +from functools import partial import pytest import psycopg -from psycopg import pq import psycopg.generators +from psycopg import pq if TYPE_CHECKING: from psycopg.pq.abc import PGcancelConn, PGconn diff --git a/tests/pq/test_pgresult.py b/tests/pq/test_pgresult.py index f7072f74e..3c4267133 100644 --- a/tests/pq/test_pgresult.py +++ b/tests/pq/test_pgresult.py @@ -1,4 +1,5 @@ import ctypes + import pytest from psycopg import pq diff --git a/tests/scripts/copytest.py b/tests/scripts/copytest.py index dae4b9cfc..7303fa967 100755 --- a/tests/scripts/copytest.py +++ b/tests/scripts/copytest.py @@ -10,8 +10,8 @@ from typing import Any from argparse import ArgumentParser, Namespace import psycopg -from psycopg.abc import Query from psycopg import sql +from psycopg.abc import Query logger = logging.getLogger() logging.basicConfig( diff --git a/tests/scripts/dectest.py b/tests/scripts/dectest.py index 0fb65ad90..27ea6d04c 100644 --- a/tests/scripts/dectest.py +++ b/tests/scripts/dectest.py @@ -4,6 +4,7 @@ A quick and rough performance comparison of text vs. binary Decimal adaptation from random import randrange from decimal import Decimal + import psycopg from psycopg import sql diff --git a/tests/scripts/pipeline-demo.py b/tests/scripts/pipeline-demo.py index 8f44e15e0..5af239ddd 100644 --- a/tests/scripts/pipeline-demo.py +++ b/tests/scripts/pipeline-demo.py @@ -10,20 +10,20 @@ happens when the output buffer is full. from __future__ import annotations -import argparse import asyncio import logging -from contextlib import contextmanager -from functools import partial +import argparse from typing import Any, Iterator, Sequence +from functools import partial +from contextlib import contextmanager from psycopg import AsyncConnection, Connection -from psycopg import pq, waiting from psycopg import errors as e +from psycopg import pq, waiting +from psycopg.pq import DiagnosticField, Format from psycopg.abc import PipelineCommand -from psycopg.generators import pipeline_communicate -from psycopg.pq import Format, DiagnosticField from psycopg._compat import Deque +from psycopg.generators import pipeline_communicate psycopg_logger = logging.getLogger("psycopg") pipeline_logger = logging.getLogger("pipeline") diff --git a/tests/scripts/spiketest.py b/tests/scripts/spiketest.py index 2c9cc164a..334433e57 100644 --- a/tests/scripts/spiketest.py +++ b/tests/scripts/spiketest.py @@ -12,14 +12,13 @@ The test is inspired to the `spike analysis`__ illustrated by HikariCP # mypy: allow-untyped-calls import time +import logging import threading import psycopg import psycopg_pool from psycopg.rows import Row -import logging - def main() -> None: opt = parse_cmdline() diff --git a/tests/test_adapt.py b/tests/test_adapt.py index 49f9c46ec..8115ceb22 100644 --- a/tests/test_adapt.py +++ b/tests/test_adapt.py @@ -7,14 +7,14 @@ from typing import Any import pytest import psycopg -from psycopg import pq, sql, postgres from psycopg import errors as e +from psycopg import postgres, pq, sql from psycopg.abc import Buffer -from psycopg.adapt import Transformer, PyFormat, Dumper, Loader +from psycopg.adapt import Dumper, Loader, PyFormat, Transformer from psycopg._cmodule import _psycopg from psycopg.postgres import types as builtins -from psycopg.types.array import ListDumper, ListBinaryDumper -from psycopg.types.string import StrDumper, StrBinaryDumper +from psycopg.types.array import ListBinaryDumper, ListDumper +from psycopg.types.string import StrBinaryDumper, StrDumper @pytest.mark.parametrize( diff --git a/tests/test_capabilities.py b/tests/test_capabilities.py index 6f7b55e43..674a083c2 100644 --- a/tests/test_capabilities.py +++ b/tests/test_capabilities.py @@ -2,10 +2,10 @@ import re import pytest -from psycopg import pq, _cmodule +from psycopg import _cmodule, pq try: - from psycopg import Capabilities, capabilities, NotSupportedError + from psycopg import Capabilities, NotSupportedError, capabilities except ImportError: # Allow to import the module with Psycopg 3.1 pass diff --git a/tests/test_column.py b/tests/test_column.py index f23181027..ad5a5c055 100644 --- a/tests/test_column.py +++ b/tests/test_column.py @@ -3,7 +3,8 @@ import pickle import pytest from psycopg.postgres import types as builtins -from .fix_crdb import is_crdb, crdb_encoding, skip_crdb + +from .fix_crdb import crdb_encoding, is_crdb, skip_crdb def test_description_attribs(conn): diff --git a/tests/test_concurrency.py b/tests/test_concurrency.py index 7585e71c1..28889333a 100644 --- a/tests/test_concurrency.py +++ b/tests/test_concurrency.py @@ -8,8 +8,8 @@ import time import queue import signal import threading -import multiprocessing import subprocess as sp +import multiprocessing import pytest diff --git a/tests/test_connection.py b/tests/test_connection.py index 151f5fec0..39f0c2b98 100644 --- a/tests/test_connection.py +++ b/tests/test_connection.py @@ -5,22 +5,24 @@ from __future__ import annotations import sys import time -import pytest import logging import weakref from typing import Any +import pytest + import psycopg -from psycopg import pq, errors as e +from psycopg import errors as e +from psycopg import pq from psycopg.rows import tuple_row from psycopg.conninfo import conninfo_to_dict, timeout_from_conninfo -from .acompat import is_async, skip_sync, skip_async, sleep +from .acompat import is_async, skip_async, skip_sync, sleep +from .test_adapt import make_bin_dumper, make_dumper from ._test_cursor import my_row_factory -from ._test_connection import tx_params, tx_params_isolation, tx_values_map -from ._test_connection import conninfo_params_timeout from ._test_connection import testctx # noqa: F401 # fixture -from .test_adapt import make_bin_dumper, make_dumper +from ._test_connection import conninfo_params_timeout, tx_params, tx_params_isolation +from ._test_connection import tx_values_map def test_connect(conn_cls, dsn): diff --git a/tests/test_connection_async.py b/tests/test_connection_async.py index c874ec55e..3cffd8992 100644 --- a/tests/test_connection_async.py +++ b/tests/test_connection_async.py @@ -2,22 +2,24 @@ from __future__ import annotations import sys import time -import pytest import logging import weakref from typing import Any +import pytest + import psycopg -from psycopg import pq, errors as e +from psycopg import errors as e +from psycopg import pq from psycopg.rows import tuple_row from psycopg.conninfo import conninfo_to_dict, timeout_from_conninfo -from .acompat import is_async, skip_sync, skip_async, asleep +from .acompat import asleep, is_async, skip_async, skip_sync +from .test_adapt import make_bin_dumper, make_dumper from ._test_cursor import my_row_factory -from ._test_connection import tx_params, tx_params_isolation, tx_values_map -from ._test_connection import conninfo_params_timeout from ._test_connection import testctx # noqa: F401 # fixture -from .test_adapt import make_bin_dumper, make_dumper +from ._test_connection import conninfo_params_timeout, tx_params, tx_params_isolation +from ._test_connection import tx_values_map async def test_connect(aconn_cls, dsn): diff --git a/tests/test_connection_info.py b/tests/test_connection_info.py index 956a3c4fa..e7b45909b 100644 --- a/tests/test_connection_info.py +++ b/tests/test_connection_info.py @@ -3,7 +3,7 @@ import datetime as dt import pytest import psycopg -from psycopg.conninfo import make_conninfo, conninfo_to_dict +from psycopg.conninfo import conninfo_to_dict, make_conninfo from psycopg._encodings import pg2pyenc from .fix_crdb import crdb_encoding diff --git a/tests/test_conninfo.py b/tests/test_conninfo.py index 8e64fe3a5..4222dce30 100644 --- a/tests/test_conninfo.py +++ b/tests/test_conninfo.py @@ -1,8 +1,8 @@ import pytest from psycopg import ProgrammingError -from psycopg.conninfo import make_conninfo, conninfo_to_dict -from psycopg.conninfo import timeout_from_conninfo, _DEFAULT_CONNECT_TIMEOUT +from psycopg.conninfo import _DEFAULT_CONNECT_TIMEOUT, conninfo_to_dict, make_conninfo +from psycopg.conninfo import timeout_from_conninfo snowman = "\u2603" diff --git a/tests/test_conninfo_attempts.py b/tests/test_conninfo_attempts.py index 0f4ba1b11..d081f22af 100644 --- a/tests/test_conninfo_attempts.py +++ b/tests/test_conninfo_attempts.py @@ -4,7 +4,7 @@ import pytest import psycopg -from psycopg.conninfo import conninfo_to_dict, conninfo_attempts +from psycopg.conninfo import conninfo_attempts, conninfo_to_dict pytestmark = pytest.mark.anyio diff --git a/tests/test_conninfo_attempts_async.py b/tests/test_conninfo_attempts_async.py index aada9f1e0..403795481 100644 --- a/tests/test_conninfo_attempts_async.py +++ b/tests/test_conninfo_attempts_async.py @@ -1,7 +1,7 @@ import pytest import psycopg -from psycopg.conninfo import conninfo_to_dict, conninfo_attempts_async +from psycopg.conninfo import conninfo_attempts_async, conninfo_to_dict pytestmark = pytest.mark.anyio diff --git a/tests/test_copy.py b/tests/test_copy.py index 642917e8c..c2e6598fc 100644 --- a/tests/test_copy.py +++ b/tests/test_copy.py @@ -10,7 +10,8 @@ from itertools import cycle import pytest import psycopg -from psycopg import pq, sql, errors as e +from psycopg import errors as e +from psycopg import pq, sql from psycopg.copy import Copy, LibpqWriter, QueuedLibpqWriter from psycopg.adapt import PyFormat from psycopg.types import TypeInfo @@ -18,10 +19,11 @@ from psycopg.types.hstore import register_hstore from psycopg.types.numeric import Int4 from .utils import eur -from ._test_copy import sample_text, sample_binary, sample_binary_rows # noqa -from ._test_copy import sample_values, sample_records, sample_tabledef -from ._test_copy import ensure_table, py_to_raw, special_chars, FileWriter -from .test_adapt import StrNoneDumper, StrNoneBinaryDumper +from ._test_copy import sample_binary # noqa +from ._test_copy import FileWriter, ensure_table, py_to_raw, sample_binary_rows +from ._test_copy import sample_records, sample_tabledef, sample_text, sample_values +from ._test_copy import special_chars +from .test_adapt import StrNoneBinaryDumper, StrNoneDumper pytestmark = pytest.mark.crdb_skip("copy") diff --git a/tests/test_copy_async.py b/tests/test_copy_async.py index a4c15dba8..1168bc31b 100644 --- a/tests/test_copy_async.py +++ b/tests/test_copy_async.py @@ -7,7 +7,8 @@ from itertools import cycle import pytest import psycopg -from psycopg import pq, sql, errors as e +from psycopg import errors as e +from psycopg import pq, sql from psycopg.copy import AsyncCopy, AsyncLibpqWriter, AsyncQueuedLibpqWriter from psycopg.adapt import PyFormat from psycopg.types import TypeInfo @@ -16,10 +17,11 @@ from psycopg.types.numeric import Int4 from .utils import eur from .acompat import alist -from ._test_copy import sample_text, sample_binary, sample_binary_rows # noqa -from ._test_copy import sample_values, sample_records, sample_tabledef -from ._test_copy import ensure_table_async, py_to_raw, special_chars, AsyncFileWriter -from .test_adapt import StrNoneDumper, StrNoneBinaryDumper +from ._test_copy import sample_binary # noqa +from ._test_copy import AsyncFileWriter, ensure_table_async, py_to_raw +from ._test_copy import sample_binary_rows, sample_records, sample_tabledef +from ._test_copy import sample_text, sample_values, special_chars +from .test_adapt import StrNoneBinaryDumper, StrNoneDumper pytestmark = pytest.mark.crdb_skip("copy") diff --git a/tests/test_cursor.py b/tests/test_cursor.py index 28b96a7b4..e31791e96 100644 --- a/tests/test_cursor.py +++ b/tests/test_cursor.py @@ -6,8 +6,10 @@ Tests for psycopg.Cursor that are not supposed to pass for subclasses. """ import pytest + import psycopg -from psycopg import pq, rows, errors as e +from psycopg import errors as e +from psycopg import pq, rows from psycopg.adapt import PyFormat diff --git a/tests/test_cursor_async.py b/tests/test_cursor_async.py index 9c5c3ebdd..f54b31aa7 100644 --- a/tests/test_cursor_async.py +++ b/tests/test_cursor_async.py @@ -3,8 +3,10 @@ Tests for psycopg.Cursor that are not supposed to pass for subclasses. """ import pytest + import psycopg -from psycopg import pq, rows, errors as e +from psycopg import errors as e +from psycopg import pq, rows from psycopg.adapt import PyFormat diff --git a/tests/test_cursor_client.py b/tests/test_cursor_client.py index f9d9d9744..70a4d55db 100644 --- a/tests/test_cursor_client.py +++ b/tests/test_cursor_client.py @@ -4,6 +4,7 @@ import datetime as dt import pytest + import psycopg from psycopg import rows diff --git a/tests/test_cursor_client_async.py b/tests/test_cursor_client_async.py index 63fb5d5af..753c95434 100644 --- a/tests/test_cursor_client_async.py +++ b/tests/test_cursor_client_async.py @@ -1,6 +1,7 @@ import datetime as dt import pytest + import psycopg from psycopg import rows diff --git a/tests/test_cursor_common.py b/tests/test_cursor_common.py index dbfdb3a6f..f1fcf665d 100644 --- a/tests/test_cursor_common.py +++ b/tests/test_cursor_common.py @@ -8,20 +8,19 @@ Tests common to psycopg.Cursor and its subclasses. import weakref import datetime as dt from typing import Any -from packaging.version import parse as ver import pytest +from packaging.version import parse as ver import psycopg -from psycopg import pq, sql, rows +from psycopg import pq, rows, sql from psycopg.adapt import PyFormat from psycopg.types import TypeInfo from .utils import raiseif from .acompat import closing from .fix_crdb import crdb_encoding -from ._test_cursor import my_row_factory, ph -from ._test_cursor import execmany, _execmany # noqa: F401 +from ._test_cursor import _execmany, execmany, my_row_factory, ph # noqa: F401 execmany = execmany # avoid F811 underneath diff --git a/tests/test_cursor_common_async.py b/tests/test_cursor_common_async.py index 772a6db85..9a96785c8 100644 --- a/tests/test_cursor_common_async.py +++ b/tests/test_cursor_common_async.py @@ -5,20 +5,19 @@ Tests common to psycopg.AsyncCursor and its subclasses. import weakref import datetime as dt from typing import Any -from packaging.version import parse as ver import pytest +from packaging.version import parse as ver import psycopg -from psycopg import pq, sql, rows +from psycopg import pq, rows, sql from psycopg.adapt import PyFormat from psycopg.types import TypeInfo from .utils import raiseif from .acompat import aclosing, alist, anext from .fix_crdb import crdb_encoding -from ._test_cursor import my_row_factory, ph -from ._test_cursor import execmany, _execmany # noqa: F401 +from ._test_cursor import _execmany, execmany, my_row_factory, ph # noqa: F401 execmany = execmany # avoid F811 underneath diff --git a/tests/test_cursor_raw.py b/tests/test_cursor_raw.py index 059d22d1c..64ef05125 100644 --- a/tests/test_cursor_raw.py +++ b/tests/test_cursor_raw.py @@ -2,8 +2,10 @@ # from the original file 'test_cursor_raw_async.py' # DO NOT CHANGE! Change the original file instead. import pytest + import psycopg -from psycopg import pq, rows, errors as e +from psycopg import errors as e +from psycopg import pq, rows from psycopg.adapt import PyFormat from ._test_cursor import ph diff --git a/tests/test_cursor_raw_async.py b/tests/test_cursor_raw_async.py index e6e85124a..42a241e4a 100644 --- a/tests/test_cursor_raw_async.py +++ b/tests/test_cursor_raw_async.py @@ -1,6 +1,8 @@ import pytest + import psycopg -from psycopg import pq, rows, errors as e +from psycopg import errors as e +from psycopg import pq, rows from psycopg.adapt import PyFormat from ._test_cursor import ph diff --git a/tests/test_cursor_server.py b/tests/test_cursor_server.py index 30a6a5e35..25df3a9c2 100644 --- a/tests/test_cursor_server.py +++ b/tests/test_cursor_server.py @@ -5,7 +5,8 @@ import pytest from packaging.version import parse as ver import psycopg -from psycopg import pq, rows, errors as e +from psycopg import errors as e +from psycopg import pq, rows from ._test_cursor import ph diff --git a/tests/test_cursor_server_async.py b/tests/test_cursor_server_async.py index 92b669405..febd01be1 100644 --- a/tests/test_cursor_server_async.py +++ b/tests/test_cursor_server_async.py @@ -2,12 +2,12 @@ import pytest from packaging.version import parse as ver import psycopg -from psycopg import pq, rows, errors as e +from psycopg import errors as e +from psycopg import pq, rows from .acompat import alist from ._test_cursor import ph - pytestmark = pytest.mark.crdb_skip("server-side cursor") cursor_classes = [psycopg.AsyncServerCursor] diff --git a/tests/test_dns_srv.py b/tests/test_dns_srv.py index 0857de45f..d41d1405e 100644 --- a/tests/test_dns_srv.py +++ b/tests/test_dns_srv.py @@ -111,9 +111,9 @@ def afake_srv(monkeypatch): def get_fake_srv_function(monkeypatch): import_dnspython() + from dns.exception import DNSException from dns.rdtypes.IN.A import A from dns.rdtypes.IN.SRV import SRV - from dns.exception import DNSException fake_hosts = { ("_pg._tcp.dot.com", "SRV"): ["0 0 5432 ."], diff --git a/tests/test_encodings.py b/tests/test_encodings.py index 113f0e38b..0b6f10f6a 100644 --- a/tests/test_encodings.py +++ b/tests/test_encodings.py @@ -1,4 +1,5 @@ import codecs + import pytest import psycopg diff --git a/tests/test_errors.py b/tests/test_errors.py index 935813bf8..8dab38fde 100644 --- a/tests/test_errors.py +++ b/tests/test_errors.py @@ -7,8 +7,8 @@ from weakref import ref import pytest import psycopg -from psycopg import pq from psycopg import errors as e +from psycopg import pq from .utils import eur from .fix_crdb import is_crdb diff --git a/tests/test_generators.py b/tests/test_generators.py index dce12f42c..2975af43a 100644 --- a/tests/test_generators.py +++ b/tests/test_generators.py @@ -1,12 +1,11 @@ import time -from collections import deque from functools import partial +from collections import deque import pytest import psycopg -from psycopg import waiting -from psycopg import pq +from psycopg import pq, waiting from psycopg.conninfo import conninfo_to_dict, make_conninfo diff --git a/tests/test_gevent.py b/tests/test_gevent.py index befbeb219..68df41314 100644 --- a/tests/test_gevent.py +++ b/tests/test_gevent.py @@ -3,6 +3,7 @@ import json import subprocess as sp import pytest + import psycopg pytest.importorskip("gevent") diff --git a/tests/test_notify.py b/tests/test_notify.py index 8f741619d..e811f0e71 100644 --- a/tests/test_notify.py +++ b/tests/test_notify.py @@ -6,9 +6,10 @@ from __future__ import annotations from time import time import pytest + from psycopg import Notify -from .acompat import Event, sleep, gather, spawn +from .acompat import Event, gather, sleep, spawn pytestmark = pytest.mark.crdb_skip("notify") diff --git a/tests/test_notify_async.py b/tests/test_notify_async.py index 8c87f3349..ee0d3c06b 100644 --- a/tests/test_notify_async.py +++ b/tests/test_notify_async.py @@ -3,6 +3,7 @@ from __future__ import annotations from time import time import pytest + from psycopg import Notify from .acompat import AEvent, alist, asleep, gather, spawn diff --git a/tests/test_pipeline.py b/tests/test_pipeline.py index 89abdbf53..7a012aaee 100644 --- a/tests/test_pipeline.py +++ b/tests/test_pipeline.py @@ -11,8 +11,8 @@ from itertools import groupby import pytest import psycopg -from psycopg import pq from psycopg import errors as e +from psycopg import pq from .acompat import is_async diff --git a/tests/test_pipeline_async.py b/tests/test_pipeline_async.py index c50413b83..56a76bfef 100644 --- a/tests/test_pipeline_async.py +++ b/tests/test_pipeline_async.py @@ -8,10 +8,10 @@ from itertools import groupby import pytest import psycopg -from psycopg import pq from psycopg import errors as e +from psycopg import pq -from .acompat import is_async, anext +from .acompat import anext, is_async pytestmark = [ pytest.mark.pipeline, diff --git a/tests/test_psycopg_dbapi20.py b/tests/test_psycopg_dbapi20.py index aa4309734..768b98f8b 100644 --- a/tests/test_psycopg_dbapi20.py +++ b/tests/test_psycopg_dbapi20.py @@ -1,14 +1,14 @@ from __future__ import annotations -import pytest import datetime as dt from typing import Any +import pytest + import psycopg from psycopg.conninfo import conninfo_to_dict -from . import dbapi20 -from . import dbapi20_tpc +from . import dbapi20, dbapi20_tpc @pytest.fixture(scope="class") diff --git a/tests/test_query.py b/tests/test_query.py index 7263a8045..9247e521d 100644 --- a/tests/test_query.py +++ b/tests/test_query.py @@ -2,7 +2,7 @@ import pytest import psycopg from psycopg import pq -from psycopg.adapt import Transformer, PyFormat +from psycopg.adapt import PyFormat, Transformer from psycopg._queries import PostgresQuery, _split_query diff --git a/tests/test_sql.py b/tests/test_sql.py index b5f1b37ca..a5807f0a0 100644 --- a/tests/test_sql.py +++ b/tests/test_sql.py @@ -7,10 +7,10 @@ import datetime as dt import pytest -from psycopg import pq, sql, ProgrammingError +from psycopg import ProgrammingError, pq, sql from psycopg.adapt import PyFormat -from psycopg._encodings import py2pgenc from psycopg.types import TypeInfo +from psycopg._encodings import py2pgenc from psycopg.types.string import StrDumper from .utils import eur diff --git a/tests/test_transaction.py b/tests/test_transaction.py index 1f18f40dc..0e94ff4c5 100644 --- a/tests/test_transaction.py +++ b/tests/test_transaction.py @@ -6,11 +6,12 @@ import logging import pytest from psycopg import Rollback -from psycopg import pq, errors as e +from psycopg import errors as e +from psycopg import pq -from ._test_transaction import in_transaction, insert_row, inserted, get_exc_info -from ._test_transaction import ExpectedException, crdb_skip_external_observer from ._test_transaction import create_test_table # noqa # autouse fixture +from ._test_transaction import ExpectedException, crdb_skip_external_observer +from ._test_transaction import get_exc_info, in_transaction, insert_row, inserted @pytest.fixture diff --git a/tests/test_transaction_async.py b/tests/test_transaction_async.py index c78dcb1f6..a2ad4765b 100644 --- a/tests/test_transaction_async.py +++ b/tests/test_transaction_async.py @@ -3,11 +3,12 @@ import logging import pytest from psycopg import Rollback -from psycopg import pq, errors as e +from psycopg import errors as e +from psycopg import pq -from ._test_transaction import in_transaction, insert_row, inserted, get_exc_info -from ._test_transaction import ExpectedException, crdb_skip_external_observer from ._test_transaction import create_test_table # noqa # autouse fixture +from ._test_transaction import ExpectedException, crdb_skip_external_observer +from ._test_transaction import get_exc_info, in_transaction, insert_row, inserted @pytest.fixture diff --git a/tests/test_typeinfo.py b/tests/test_typeinfo.py index aaed8d048..94a704eb5 100644 --- a/tests/test_typeinfo.py +++ b/tests/test_typeinfo.py @@ -4,10 +4,10 @@ import psycopg from psycopg import sql from psycopg.pq import TransactionStatus from psycopg.types import TypeInfo -from psycopg.types.composite import CompositeInfo from psycopg.types.enum import EnumInfo -from psycopg.types.multirange import MultirangeInfo from psycopg.types.range import RangeInfo +from psycopg.types.composite import CompositeInfo +from psycopg.types.multirange import MultirangeInfo from .fix_crdb import crdb_encoding diff --git a/tests/test_waiting.py b/tests/test_waiting.py index 15c331ac3..22ce74ef9 100644 --- a/tests/test_waiting.py +++ b/tests/test_waiting.py @@ -6,8 +6,7 @@ import socket import pytest import psycopg -from psycopg import waiting -from psycopg import generators +from psycopg import generators, waiting from psycopg.pq import ConnStatus, ExecStatus skip_if_not_linux = pytest.mark.skipif( diff --git a/tests/test_windows.py b/tests/test_windows.py index 09e61ba93..9494765ad 100644 --- a/tests/test_windows.py +++ b/tests/test_windows.py @@ -1,6 +1,7 @@ -import pytest -import asyncio import sys +import asyncio + +import pytest from psycopg.errors import InterfaceError diff --git a/tests/types/test_array.py b/tests/types/test_array.py index c1df5dae5..fdb9c888f 100644 --- a/tests/types/test_array.py +++ b/tests/types/test_array.py @@ -9,14 +9,13 @@ import pytest import psycopg import psycopg.types.numeric -from psycopg import pq -from psycopg import sql -from psycopg.adapt import PyFormat, Transformer, Dumper +from psycopg import pq, sql +from psycopg.adapt import Dumper, PyFormat, Transformer from psycopg.types import TypeInfo from psycopg.postgres import types as builtins from psycopg.types.array import register_array -from ..test_adapt import StrNoneDumper, StrNoneBinaryDumper +from ..test_adapt import StrNoneBinaryDumper, StrNoneDumper tests_str = [ ([[[[[["a"]]]]]], "{{{{{{a}}}}}}"), diff --git a/tests/types/test_bool.py b/tests/types/test_bool.py index 73f394d13..5646d4e1a 100644 --- a/tests/types/test_bool.py +++ b/tests/types/test_bool.py @@ -1,8 +1,7 @@ import pytest -from psycopg import pq -from psycopg import sql -from psycopg.adapt import Transformer, PyFormat +from psycopg import pq, sql +from psycopg.adapt import PyFormat, Transformer from psycopg.postgres import types as builtins diff --git a/tests/types/test_composite.py b/tests/types/test_composite.py index b0433f19b..b5dae9e22 100644 --- a/tests/types/test_composite.py +++ b/tests/types/test_composite.py @@ -1,16 +1,15 @@ import pytest -from psycopg import pq, postgres, sql +from psycopg import postgres, pq, sql from psycopg.adapt import PyFormat from psycopg.postgres import types as builtins from psycopg.types.range import Range -from psycopg.types.composite import CompositeInfo, register_composite -from psycopg.types.composite import TupleDumper, TupleBinaryDumper +from psycopg.types.composite import CompositeInfo, TupleBinaryDumper, TupleDumper +from psycopg.types.composite import register_composite from ..utils import eur -from ..fix_crdb import is_crdb, crdb_skip_message -from ..test_adapt import StrNoneDumper, StrNoneBinaryDumper - +from ..fix_crdb import crdb_skip_message, is_crdb +from ..test_adapt import StrNoneBinaryDumper, StrNoneDumper pytestmark = pytest.mark.crdb_skip("composite") diff --git a/tests/types/test_datetime.py b/tests/types/test_datetime.py index 637fcb128..19c84373c 100644 --- a/tests/types/test_datetime.py +++ b/tests/types/test_datetime.py @@ -130,7 +130,8 @@ class TestDate: # NOTE: this is an example in the docs. Make sure it doesn't regress when # adding binary datetime adapters from datetime import date - from psycopg.types.datetime import DateLoader, DateDumper + + from psycopg.types.datetime import DateDumper, DateLoader class InfDateDumper(DateDumper): def dump(self, obj): diff --git a/tests/types/test_enum.py b/tests/types/test_enum.py index 482b5879b..b92fb4361 100644 --- a/tests/types/test_enum.py +++ b/tests/types/test_enum.py @@ -2,7 +2,8 @@ from enum import Enum, auto import pytest -from psycopg import pq, sql, errors as e +from psycopg import errors as e +from psycopg import pq, sql from psycopg.adapt import PyFormat from psycopg.types import TypeInfo from psycopg.types.enum import EnumInfo, register_enum diff --git a/tests/types/test_json.py b/tests/types/test_json.py index 3fce60b4c..3b4aadc36 100644 --- a/tests/types/test_json.py +++ b/tests/types/test_json.py @@ -4,8 +4,7 @@ from copy import deepcopy import pytest import psycopg.types -from psycopg import pq -from psycopg import sql +from psycopg import pq, sql from psycopg.adapt import PyFormat from psycopg.types.json import set_json_dumps, set_json_loads diff --git a/tests/types/test_multirange.py b/tests/types/test_multirange.py index fc074a419..8c17e630c 100644 --- a/tests/types/test_multirange.py +++ b/tests/types/test_multirange.py @@ -6,14 +6,13 @@ import pytest from psycopg import pq, sql from psycopg.adapt import PyFormat -from psycopg.types.range import Range from psycopg.types import multirange -from psycopg.types.multirange import Multirange, MultirangeInfo -from psycopg.types.multirange import register_multirange +from psycopg.types.range import Range +from psycopg.types.multirange import Multirange, MultirangeInfo, register_multirange from ..utils import eur from .test_range import create_test_range -from ..test_adapt import StrNoneDumper, StrNoneBinaryDumper +from ..test_adapt import StrNoneBinaryDumper, StrNoneDumper pytestmark = [ pytest.mark.pg(">= 14"), diff --git a/tests/types/test_net.py b/tests/types/test_net.py index d5fe346d5..adfcf74d5 100644 --- a/tests/types/test_net.py +++ b/tests/types/test_net.py @@ -2,8 +2,7 @@ import ipaddress import pytest -from psycopg import pq -from psycopg import sql +from psycopg import pq, sql from psycopg.adapt import PyFormat crdb_skip_inet = pytest.mark.crdb_skip("inet") diff --git a/tests/types/test_none.py b/tests/types/test_none.py index 94827a3a0..48ba7b50d 100644 --- a/tests/types/test_none.py +++ b/tests/types/test_none.py @@ -1,5 +1,5 @@ from psycopg import sql -from psycopg.adapt import Transformer, PyFormat +from psycopg.adapt import PyFormat, Transformer def test_quote_none(conn): diff --git a/tests/types/test_numeric.py b/tests/types/test_numeric.py index 9af20a045..da5fe9066 100644 --- a/tests/types/test_numeric.py +++ b/tests/types/test_numeric.py @@ -1,17 +1,16 @@ from __future__ import annotations import enum -from math import isnan, isinf, exp +from math import exp, isinf, isnan from decimal import Decimal import pytest import psycopg -from psycopg import pq -from psycopg import sql +from psycopg import pq, sql from psycopg.abc import Buffer -from psycopg.adapt import Transformer, PyFormat -from psycopg.types.numeric import Int8, Int8Dumper, Int8BinaryDumper, FloatLoader +from psycopg.adapt import PyFormat, Transformer +from psycopg.types.numeric import FloatLoader, Int8, Int8BinaryDumper, Int8Dumper from ..fix_crdb import is_crdb diff --git a/tests/types/test_numpy.py b/tests/types/test_numpy.py index 86e007831..f42e7e012 100644 --- a/tests/types/test_numpy.py +++ b/tests/types/test_numpy.py @@ -4,8 +4,8 @@ from math import isnan import pytest from packaging.version import parse as ver # noqa: F401 # used in skipif -from psycopg.adapt import PyFormat from psycopg.pq import Format +from psycopg.adapt import PyFormat try: import numpy as np diff --git a/tests/types/test_range.py b/tests/types/test_range.py index bb90fcd8b..d097b12fa 100644 --- a/tests/types/test_range.py +++ b/tests/types/test_range.py @@ -10,8 +10,8 @@ from psycopg.types import range as range_module from psycopg.types.range import Range, RangeInfo, register_range from ..utils import eur -from ..fix_crdb import is_crdb, crdb_skip_message -from ..test_adapt import StrNoneDumper, StrNoneBinaryDumper +from ..fix_crdb import crdb_skip_message, is_crdb +from ..test_adapt import StrNoneBinaryDumper, StrNoneDumper pytestmark = pytest.mark.crdb_skip("range") diff --git a/tests/types/test_shapely.py b/tests/types/test_shapely.py index 0f7007e2d..cd7dc259e 100644 --- a/tests/types/test_shapely.py +++ b/tests/types/test_shapely.py @@ -2,12 +2,13 @@ import pytest import psycopg from psycopg.pq import Format -from psycopg.types import TypeInfo from psycopg.adapt import PyFormat +from psycopg.types import TypeInfo pytest.importorskip("shapely") -from shapely.geometry import Point, Polygon, MultiPolygon # noqa: E402 +from shapely.geometry import MultiPolygon, Point, Polygon # noqa: E402 + from psycopg.types.shapely import register_shapely # noqa: E402 pytestmark = [ diff --git a/tests/types/test_string.py b/tests/types/test_string.py index d23e5e03b..ca1ed6c0b 100644 --- a/tests/types/test_string.py +++ b/tests/types/test_string.py @@ -1,11 +1,10 @@ import pytest import psycopg -from psycopg import pq -from psycopg import sql +from psycopg import Binary from psycopg import errors as e +from psycopg import pq, sql from psycopg.adapt import PyFormat -from psycopg import Binary from ..utils import eur from ..fix_crdb import crdb_encoding, crdb_scs_off diff --git a/tests/types/test_uuid.py b/tests/types/test_uuid.py index f86f06665..3e9987bfb 100644 --- a/tests/types/test_uuid.py +++ b/tests/types/test_uuid.py @@ -1,11 +1,10 @@ import sys -from uuid import UUID import subprocess as sp +from uuid import UUID import pytest -from psycopg import pq -from psycopg import sql +from psycopg import pq, sql from psycopg.adapt import PyFormat diff --git a/tests/typing_example.py b/tests/typing_example.py index 12b51553f..627d9bec1 100644 --- a/tests/typing_example.py +++ b/tests/typing_example.py @@ -2,11 +2,11 @@ from __future__ import annotations -from dataclasses import dataclass from typing import Any, Callable, Sequence +from dataclasses import dataclass -from psycopg import Connection, Cursor, ServerCursor, connect, rows -from psycopg import AsyncConnection, AsyncCursor, AsyncServerCursor +from psycopg import AsyncConnection, AsyncCursor, AsyncServerCursor, Connection, Cursor +from psycopg import ServerCursor, connect, rows def int_row_factory( diff --git a/tests/utils.py b/tests/utils.py index 98f42915d..cac50a066 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -6,7 +6,6 @@ import operator from typing import Callable from contextlib import contextmanager - if sys.version_info >= (3, 9): import collections diff --git a/tools/async_to_sync.py b/tools/async_to_sync.py index ae4d755cc..d714f5095 100755 --- a/tools/async_to_sync.py +++ b/tools/async_to_sync.py @@ -12,7 +12,6 @@ Hint: in order to explore the AST of a module you can run: from __future__ import annotations import os -from concurrent.futures import ProcessPoolExecutor import sys import logging import subprocess as sp @@ -20,6 +19,7 @@ from copy import deepcopy from typing import Any, Literal from pathlib import Path from argparse import ArgumentParser, Namespace, RawDescriptionHelpFormatter +from concurrent.futures import ProcessPoolExecutor from importlib.metadata import version import ast_comments as ast # type: ignore diff --git a/tools/update_backer.py b/tools/update_backer.py index 045f55971..a33c5c4ef 100755 --- a/tools/update_backer.py +++ b/tools/update_backer.py @@ -4,8 +4,9 @@ import sys import logging -import requests from pathlib import Path + +import requests from ruamel.yaml import YAML # pip install ruamel.yaml logger = logging.getLogger() diff --git a/tools/update_errors.py b/tools/update_errors.py index 3218ccac5..b9406c34e 100755 --- a/tools/update_errors.py +++ b/tools/update_errors.py @@ -12,8 +12,8 @@ import os import re import sys import logging -from urllib.request import urlopen from collections import defaultdict, namedtuple +from urllib.request import urlopen from psycopg.errors import get_base_exception diff --git a/tools/update_oids.py b/tools/update_oids.py index 096cbe9d5..96b0df9ab 100755 --- a/tools/update_oids.py +++ b/tools/update_oids.py @@ -23,8 +23,8 @@ from pathlib import Path import psycopg from psycopg.pq import version_pretty -from psycopg.rows import TupleRow from psycopg.crdb import CrdbConnection +from psycopg.rows import TupleRow from psycopg._compat import TypeAlias Connection: TypeAlias = psycopg.Connection[TupleRow]