1from __future__ import annotations
 2
 3from typing import Any
 4
 5from plain import signals
 6
 7from .connections import DatabaseConnection
 8from .exceptions import (
 9    ConnectionDoesNotExist,
10    DatabaseError,
11    DatabaseErrorWrapper,
12    DataError,
13    Error,
14    IntegrityError,
15    InterfaceError,
16    InternalError,
17    NotSupportedError,
18    OperationalError,
19    ProgrammingError,
20)
21
22PLAIN_VERSION_PICKLE_KEY = "_plain_version"
23
24
25db_connection = DatabaseConnection()
26
27
28# Register an event to reset saved queries when a Plain request is started.
29def reset_queries(**kwargs: Any) -> None:
30    if db_connection.has_connection():
31        db_connection.queries_log.clear()
32
33
34signals.request_started.connect(reset_queries)
35
36
37# Register an event to reset transaction state and close connections past
38# their lifetime.
39def close_old_connections(**kwargs: Any) -> None:
40    if db_connection.has_connection():
41        db_connection.close_if_unusable_or_obsolete()
42
43
44signals.request_started.connect(close_old_connections)
45signals.request_finished.connect(close_old_connections)
46
47
48__all__ = [
49    "db_connection",
50    "PLAIN_VERSION_PICKLE_KEY",
51    "Error",
52    "InterfaceError",
53    "DatabaseError",
54    "DataError",
55    "OperationalError",
56    "IntegrityError",
57    "InternalError",
58    "ProgrammingError",
59    "NotSupportedError",
60    "ConnectionDoesNotExist",
61    "DatabaseErrorWrapper",
62    "reset_queries",
63    "close_old_connections",
64]