Files
SMANAGE/gvsds/db_router.py
T
2026-06-16 11:55:14 +08:00

58 lines
1.4 KiB
Python

from gvsds.app_config import getdict
_DEFAULT_APP_DB_MAP = {
'core': 'default',
'gerp': 'default',
'ugm': 'default',
'crb': 'minecraft',
'invite': 'plans',
'ccgo': 'default',
'sve': 'document',
't4': 't4pc',
'mc': 'minecraft',
'doc': 'document',
'api': 'default',
'msync': 'default',
'payment': 'default',
'commission': 'default',
'stats': 'default',
}
def _load_app_db_map():
from gvsds.app_config import items as _app_items
if _app_items('db_router'):
result = {}
for key, value in _app_items('db_router'):
result[key] = value
return result
return _DEFAULT_APP_DB_MAP
class DatabaseRouter:
app_db_map = None
model_db_map = {}
@classmethod
def _ensure_map(cls):
if cls.app_db_map is None:
cls.app_db_map = _load_app_db_map()
def _get_db(self, model):
self._ensure_map()
app_label = model._meta.app_label
if app_label in self.model_db_map:
return self.model_db_map[app_label]
return self.app_db_map.get(app_label, 'default')
def db_for_read(self, model, **hints):
return self._get_db(model)
def db_for_write(self, model, **hints):
return self._get_db(model)
def allow_migrate(self, db, app_label, model_name=None, **hints):
self._ensure_map()
target_db = self.app_db_map.get(app_label, 'default')
return db == target_db