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]