From: Daniele Varrazzo Date: Tue, 17 May 2022 19:20:34 +0000 (+0200) Subject: perf: micro optimise attribute access to ConnStatus X-Git-Tag: 3.1~86 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c3cba29ce3db480dfc1ab0e379057954f4e8a293;p=thirdparty%2Fpsycopg.git perf: micro optimise attribute access to ConnStatus --- diff --git a/psycopg/psycopg/_pipeline.py b/psycopg/psycopg/_pipeline.py index 69c2a21d3..e11c7b423 100644 --- a/psycopg/psycopg/_pipeline.py +++ b/psycopg/psycopg/_pipeline.py @@ -10,7 +10,6 @@ from typing import Any, List, Optional, Union, Tuple, Type, TYPE_CHECKING from . import pq from . import errors as e -from .pq import ConnStatus from .abc import PipelineCommand, PQGen from ._compat import Deque, TypeAlias from ._cmodule import _psycopg @@ -41,6 +40,7 @@ PendingResult: TypeAlias = Union[ FATAL_ERROR = pq.ExecStatus.FATAL_ERROR PIPELINE_ABORTED = pq.ExecStatus.PIPELINE_ABORTED +BAD = pq.ConnStatus.BAD logger = logging.getLogger("psycopg") @@ -84,7 +84,7 @@ class BasePipeline: def _exit(self) -> None: self.level -= 1 - if self.level == 0 and self.pgconn.status != ConnStatus.BAD: + if self.level == 0 and self.pgconn.status != BAD: self.pgconn.exit_pipeline_mode() def _sync_gen(self) -> PQGen[None]: diff --git a/psycopg/psycopg/connection.py b/psycopg/psycopg/connection.py index b7ce3134a..d96ef1aef 100644 --- a/psycopg/psycopg/connection.py +++ b/psycopg/psycopg/connection.py @@ -19,7 +19,6 @@ from . import pq from . import errors as e from . import waiting from . import postgres -from .pq import ConnStatus from .abc import AdaptContext, ConnectionType, Params, Query, RV from .abc import PQGen, PQGenConn from .sql import Composable, SQL @@ -59,6 +58,9 @@ CursorRow = TypeVar("CursorRow") TEXT = pq.Format.TEXT BINARY = pq.Format.BINARY +OK = pq.ConnStatus.OK +BAD = pq.ConnStatus.BAD + COMMAND_OK = pq.ExecStatus.COMMAND_OK TUPLES_OK = pq.ExecStatus.TUPLES_OK FATAL_ERROR = pq.ExecStatus.FATAL_ERROR @@ -172,7 +174,7 @@ class BaseConnection(Generic[Row]): @property def closed(self) -> bool: """`!True` if the connection is closed.""" - return self.pgconn.status == ConnStatus.BAD + return self.pgconn.status == BAD @property def broken(self) -> bool: @@ -182,7 +184,7 @@ class BaseConnection(Generic[Row]): A broken connection is always `closed`, but wasn't closed in a clean way, such as using `close()` or a ``with`` block. """ - return self.pgconn.status == ConnStatus.BAD and not self._closed + return self.pgconn.status == BAD and not self._closed @property def autocommit(self) -> bool: @@ -480,10 +482,10 @@ class BaseConnection(Generic[Row]): return result def _check_connection_ok(self) -> None: - if self.pgconn.status == ConnStatus.OK: + if self.pgconn.status == OK: return - if self.pgconn.status == ConnStatus.BAD: + if self.pgconn.status == BAD: raise e.OperationalError("the connection is closed") raise e.InterfaceError( "cannot execute operations: the connection is" diff --git a/psycopg/psycopg/generators.py b/psycopg/psycopg/generators.py index c788cadef..3e78e07c3 100644 --- a/psycopg/psycopg/generators.py +++ b/psycopg/psycopg/generators.py @@ -20,13 +20,16 @@ from typing import List, Optional, Union from . import pq from . import errors as e -from .pq import ConnStatus, PollingStatus +from .pq import PollingStatus from .abc import PipelineCommand, PQGen, PQGenConn from .pq.abc import PGconn, PGresult from .waiting import Wait, Ready from ._compat import Deque from ._encodings import pgconn_encoding, conninfo_encoding +OK = pq.ConnStatus.OK +BAD = pq.ConnStatus.BAD + COMMAND_OK = pq.ExecStatus.COMMAND_OK COPY_OUT = pq.ExecStatus.COPY_OUT COPY_IN = pq.ExecStatus.COPY_IN @@ -43,7 +46,7 @@ def connect(conninfo: str) -> PQGenConn[PGconn]: """ conn = pq.PGconn.connect_start(conninfo.encode()) while True: - if conn.status == ConnStatus.BAD: + if conn.status == BAD: encoding = conninfo_encoding(conninfo) raise e.OperationalError( f"connection is bad: {pq.error_message(conn, encoding=encoding)}", diff --git a/psycopg/psycopg/pq/misc.py b/psycopg/psycopg/pq/misc.py index b035f2581..9ad16bec4 100644 --- a/psycopg/psycopg/pq/misc.py +++ b/psycopg/psycopg/pq/misc.py @@ -10,6 +10,8 @@ from .abc import PGconn, PGresult from ._enums import ConnStatus, TransactionStatus, PipelineStatus from .._encodings import pgconn_encoding +OK = ConnStatus.OK + class PGnotify(NamedTuple): relname: bytes @@ -61,7 +63,7 @@ def error_message(obj: Union[PGconn, PGresult], encoding: str = "utf8") -> str: elif hasattr(obj, "error_message"): # obj is a PGconn obj = cast(PGconn, obj) - if obj.status == ConnStatus.OK: + if obj.status == OK: encoding = pgconn_encoding(obj) bmsg = obj.error_message @@ -87,7 +89,7 @@ def connection_summary(pgconn: PGconn) -> str: Useful for __repr__ """ parts = [] - if pgconn.status == ConnStatus.OK: + if pgconn.status == OK: # Put together the [STATUS] status = TransactionStatus(pgconn.transaction_status).name if pgconn.pipeline_status: diff --git a/psycopg/psycopg/transaction.py b/psycopg/psycopg/transaction.py index 77a576dfb..e5c1514b5 100644 --- a/psycopg/psycopg/transaction.py +++ b/psycopg/psycopg/transaction.py @@ -12,7 +12,6 @@ from typing import Generic, Iterator, Optional, Type, Union, TYPE_CHECKING from . import pq from . import sql from . import errors as e -from .pq import ConnStatus from .abc import ConnectionType, PQGen if TYPE_CHECKING: @@ -22,6 +21,8 @@ if TYPE_CHECKING: IDLE = pq.TransactionStatus.IDLE +OK = pq.ConnStatus.OK + logger = logging.getLogger(__name__) @@ -249,7 +250,7 @@ class Transaction(BaseTransaction["Connection[Any]"]): exc_val: Optional[BaseException], exc_tb: Optional[TracebackType], ) -> bool: - if self.pgconn.status == ConnStatus.OK: + if self.pgconn.status == OK: with self._conn.lock: return self._conn.wait(self._exit_gen(exc_type, exc_val, exc_tb)) else: @@ -278,7 +279,7 @@ class AsyncTransaction(BaseTransaction["AsyncConnection[Any]"]): exc_val: Optional[BaseException], exc_tb: Optional[TracebackType], ) -> bool: - if self.pgconn.status == ConnStatus.OK: + if self.pgconn.status == OK: async with self._conn.lock: return await self._conn.wait(self._exit_gen(exc_type, exc_val, exc_tb)) else: