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.
Files changed (17) hide show
  1. {sqlalchemy-multiple-db-2.0.0/sqlalchemy_multiple_db.egg-info → sqlalchemy-multiple-db-2.1.1}/PKG-INFO +5 -1
  2. {sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1}/README.md +2 -0
  3. {sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1}/setup.py +2 -0
  4. sqlalchemy-multiple-db-2.1.1/sqlalchemy_multiple_db/__init__.py +3 -0
  5. {sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1}/sqlalchemy_multiple_db/helper.py +25 -23
  6. {sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1}/sqlalchemy_multiple_db/version.py +1 -1
  7. {sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1/sqlalchemy_multiple_db.egg-info}/PKG-INFO +5 -1
  8. sqlalchemy-multiple-db-2.0.0/sqlalchemy_multiple_db/__init__.py +0 -3
  9. {sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1}/LICENSE +0 -0
  10. {sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1}/MANIFEST.in +0 -0
  11. {sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1}/pyproject.toml +0 -0
  12. {sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1}/setup.cfg +0 -0
  13. {sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1}/sqlalchemy_multiple_db.egg-info/SOURCES.txt +0 -0
  14. {sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1}/sqlalchemy_multiple_db.egg-info/dependency_links.txt +0 -0
  15. {sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1}/sqlalchemy_multiple_db.egg-info/not-zip-safe +0 -0
  16. {sqlalchemy-multiple-db-2.0.0 → sqlalchemy-multiple-db-2.1.1}/sqlalchemy_multiple_db.egg-info/requires.txt +0 -0
  17. {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.0.0
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.
@@ -10,6 +10,8 @@
10
10
  **sqlalchemy-multiple-db** helper for easily connect to multiple databases.
11
11
 
12
12
 
13
+ * [Project Changelog](https://github.com/bigbag/sqlalchemy-multiple-db/blob/main/CHANGELOG.md)
14
+
13
15
  ## Installation
14
16
 
15
17
  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",
@@ -0,0 +1,3 @@
1
+ from .helper import DEFAULT_DB_NAME, DBConfig, DBHelper, db
2
+
3
+ __all__ = ["DEFAULT_DB_NAME", "DBConfig", "DBHelper", "db"]
@@ -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, Optional, Tuple, Union
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: Optional[Dict[str, Any]] = None
29
- engine_options: Optional[Dict[str, Any]] = None
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
- session_options.update(self.session_options or {})
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, Session] = field(init=False, repr=False)
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) -> Session:
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 = db.sessions[db_name]
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.close()
86
+ session.remove()
84
87
 
85
- def get_status_info(self) -> Tuple[Dict[str, Any], bool]:
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("select 1;"))
93
- except Exception as e:
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.close()
100
+ session.remove()
99
101
 
100
102
  full_status_info[db_name] = {"status": "OK"} if status else {"status": "FAILED"}
101
103
 
@@ -1,3 +1,3 @@
1
1
  __all__ = "VERSION"
2
2
 
3
- VERSION = "2.0.0"
3
+ VERSION = "2.1.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sqlalchemy-multiple-db
3
- Version: 2.0.0
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.
@@ -1,3 +0,0 @@
1
- from .helper import DBConfig, DBHelper, db
2
-
3
- __all__ = ["DBConfig", "DBHelper", "db"]