sqlalchemy-multiple-db 2.0.0__tar.gz → 2.1.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sqlalchemy-multiple-db-2.0.0/sqlalchemy_multiple_db.egg-info → sqlalchemy-multiple-db-2.1.1}/PKG-INFO +5 -1
- {sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1}/README.md +2 -0
- {sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1}/setup.py +2 -0
- sqlalchemy-multiple-db-2.1.1/sqlalchemy_multiple_db/__init__.py +3 -0
- {sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1}/sqlalchemy_multiple_db/helper.py +25 -23
- {sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1}/sqlalchemy_multiple_db/version.py +1 -1
- {sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1/sqlalchemy_multiple_db.egg-info}/PKG-INFO +5 -1
- sqlalchemy-multiple-db-2.0.0/sqlalchemy_multiple_db/__init__.py +0 -3
- {sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1}/LICENSE +0 -0
- {sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1}/MANIFEST.in +0 -0
- {sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1}/pyproject.toml +0 -0
- {sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1}/setup.cfg +0 -0
- {sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1}/sqlalchemy_multiple_db.egg-info/SOURCES.txt +0 -0
- {sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1}/sqlalchemy_multiple_db.egg-info/dependency_links.txt +0 -0
- {sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1}/sqlalchemy_multiple_db.egg-info/not-zip-safe +0 -0
- {sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1}/sqlalchemy_multiple_db.egg-info/requires.txt +0 -0
- {sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1}/sqlalchemy_multiple_db.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: sqlalchemy-multiple-db
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.1.1
|
|
4
4
|
Summary: Helper for easily connect to multiple databases.
|
|
5
5
|
Home-page: https://github.com/bigbag/sqlalchemy-multiple-db
|
|
6
6
|
Download-URL: https://pypi.python.org/pypi/sqlalchemy-multiple-db
|
|
@@ -17,6 +17,8 @@ Classifier: Programming Language :: Python :: 3.8
|
|
|
17
17
|
Classifier: Programming Language :: Python :: 3.9
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.10
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
22
|
Classifier: Operating System :: POSIX
|
|
21
23
|
Classifier: Topic :: Software Development
|
|
22
24
|
Classifier: Topic :: Software Development :: Libraries
|
|
@@ -38,6 +40,8 @@ License-File: LICENSE
|
|
|
38
40
|
**sqlalchemy-multiple-db** helper for easily connect to multiple databases.
|
|
39
41
|
|
|
40
42
|
|
|
43
|
+
* [Project Changelog](https://github.com/bigbag/sqlalchemy-multiple-db/blob/main/CHANGELOG.md)
|
|
44
|
+
|
|
41
45
|
## Installation
|
|
42
46
|
|
|
43
47
|
sqlalchemy-multiple-db is available on PyPI.
|
|
@@ -20,6 +20,8 @@ CLASSIFIERS = [
|
|
|
20
20
|
"Programming Language :: Python :: 3.9",
|
|
21
21
|
"Programming Language :: Python :: 3.10",
|
|
22
22
|
"Programming Language :: Python :: 3.11",
|
|
23
|
+
"Programming Language :: Python :: 3.12",
|
|
24
|
+
"Programming Language :: Python :: 3.13",
|
|
23
25
|
"Operating System :: POSIX",
|
|
24
26
|
"Topic :: Software Development",
|
|
25
27
|
"Topic :: Software Development :: Libraries",
|
{sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1}/sqlalchemy_multiple_db/helper.py
RENAMED
|
@@ -2,9 +2,10 @@ import logging
|
|
|
2
2
|
from contextlib import contextmanager
|
|
3
3
|
from dataclasses import dataclass, field
|
|
4
4
|
from json import dumps, loads
|
|
5
|
-
from typing import Any, Dict,
|
|
5
|
+
from typing import Any, Dict, Generator, Tuple, Union
|
|
6
6
|
|
|
7
7
|
from sqlalchemy import create_engine
|
|
8
|
+
from sqlalchemy.exc import SQLAlchemyError
|
|
8
9
|
from sqlalchemy.orm import Session, scoped_session, sessionmaker
|
|
9
10
|
from sqlalchemy.sql import text
|
|
10
11
|
|
|
@@ -25,22 +26,17 @@ DEFAULT_ENGINE_OPTIONS = {
|
|
|
25
26
|
@dataclass
|
|
26
27
|
class DBConfig:
|
|
27
28
|
dsn: str
|
|
28
|
-
session_options:
|
|
29
|
-
engine_options:
|
|
29
|
+
session_options: Dict[str, Any] = field(default_factory=dict)
|
|
30
|
+
engine_options: Dict[str, Any] = field(default_factory=dict)
|
|
30
31
|
|
|
31
32
|
def __post_init__(self):
|
|
32
|
-
session_options = DEFAULT_SESSION_OPTIONS
|
|
33
|
-
|
|
34
|
-
self.session_options = session_options
|
|
35
|
-
|
|
36
|
-
engine_options = DEFAULT_ENGINE_OPTIONS
|
|
37
|
-
engine_options.update(self.engine_options or {})
|
|
38
|
-
self.engine_options = engine_options
|
|
33
|
+
self.session_options = {**DEFAULT_SESSION_OPTIONS, **self.session_options}
|
|
34
|
+
self.engine_options = {**DEFAULT_ENGINE_OPTIONS, **self.engine_options}
|
|
39
35
|
|
|
40
36
|
|
|
41
37
|
@dataclass
|
|
42
38
|
class DBHelper:
|
|
43
|
-
sessions: Dict[str,
|
|
39
|
+
sessions: Dict[str, scoped_session] = field(init=False, repr=False)
|
|
44
40
|
config: Dict[str, DBConfig] = field(init=False, repr=False)
|
|
45
41
|
|
|
46
42
|
def __getattribute__(self, db_name):
|
|
@@ -51,7 +47,7 @@ class DBHelper:
|
|
|
51
47
|
print(f"DB: You need to call setup() for getting attribute {db_name}")
|
|
52
48
|
raise exc
|
|
53
49
|
|
|
54
|
-
def create_scoped_session(self, config: DBConfig) ->
|
|
50
|
+
def create_scoped_session(self, config: DBConfig) -> scoped_session:
|
|
55
51
|
engine_options = config.engine_options or {}
|
|
56
52
|
session_options = config.session_options or {}
|
|
57
53
|
|
|
@@ -70,32 +66,38 @@ class DBHelper:
|
|
|
70
66
|
for db_name, cfg in config.items():
|
|
71
67
|
self.sessions[db_name] = self.create_scoped_session(cfg)
|
|
72
68
|
|
|
73
|
-
def shutdown(self):
|
|
69
|
+
def shutdown(self) -> None:
|
|
74
70
|
for session in self.sessions.values():
|
|
75
71
|
session.remove()
|
|
72
|
+
self.sessions.clear()
|
|
76
73
|
|
|
77
74
|
@contextmanager
|
|
78
|
-
def session_scope(self, db_name: str = DEFAULT_DB_NAME):
|
|
79
|
-
session =
|
|
75
|
+
def session_scope(self, db_name: str = DEFAULT_DB_NAME) -> Generator[Session, None, None]:
|
|
76
|
+
session = self.sessions.get(db_name)
|
|
77
|
+
if not session:
|
|
78
|
+
raise ValueError(f"No session found for database: {db_name}")
|
|
80
79
|
try:
|
|
81
|
-
yield session
|
|
80
|
+
yield session()
|
|
81
|
+
session.commit()
|
|
82
|
+
except Exception:
|
|
83
|
+
session.rollback()
|
|
84
|
+
raise
|
|
82
85
|
finally:
|
|
83
|
-
session.
|
|
86
|
+
session.remove()
|
|
84
87
|
|
|
85
|
-
def get_status_info(self) -> Tuple[Dict[str,
|
|
88
|
+
def get_status_info(self) -> Tuple[Dict[str, Dict[str, str]], bool]:
|
|
86
89
|
full_status = True
|
|
87
90
|
full_status_info = {}
|
|
88
|
-
|
|
89
91
|
for db_name, session in self.sessions.items():
|
|
90
92
|
status = True
|
|
91
93
|
try:
|
|
92
|
-
session.execute(text("
|
|
93
|
-
except
|
|
94
|
+
session.execute(text("SELECT 1"))
|
|
95
|
+
except SQLAlchemyError as e:
|
|
96
|
+
logger.exception(f"Database {db_name} connection failed: {e}")
|
|
94
97
|
status &= False
|
|
95
98
|
full_status &= False
|
|
96
|
-
logger.exception(e)
|
|
97
99
|
finally:
|
|
98
|
-
session.
|
|
100
|
+
session.remove()
|
|
99
101
|
|
|
100
102
|
full_status_info[db_name] = {"status": "OK"} if status else {"status": "FAILED"}
|
|
101
103
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: sqlalchemy-multiple-db
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.1.1
|
|
4
4
|
Summary: Helper for easily connect to multiple databases.
|
|
5
5
|
Home-page: https://github.com/bigbag/sqlalchemy-multiple-db
|
|
6
6
|
Download-URL: https://pypi.python.org/pypi/sqlalchemy-multiple-db
|
|
@@ -17,6 +17,8 @@ Classifier: Programming Language :: Python :: 3.8
|
|
|
17
17
|
Classifier: Programming Language :: Python :: 3.9
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.10
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
22
|
Classifier: Operating System :: POSIX
|
|
21
23
|
Classifier: Topic :: Software Development
|
|
22
24
|
Classifier: Topic :: Software Development :: Libraries
|
|
@@ -38,6 +40,8 @@ License-File: LICENSE
|
|
|
38
40
|
**sqlalchemy-multiple-db** helper for easily connect to multiple databases.
|
|
39
41
|
|
|
40
42
|
|
|
43
|
+
* [Project Changelog](https://github.com/bigbag/sqlalchemy-multiple-db/blob/main/CHANGELOG.md)
|
|
44
|
+
|
|
41
45
|
## Installation
|
|
42
46
|
|
|
43
47
|
sqlalchemy-multiple-db is available on PyPI.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|