changed db routing to better facilitate plugin support

This commit is contained in:
MassiveAtoms
2020-07-16 17:28:59 -03:00
parent b65ef99935
commit 017e473b4d
4 changed files with 63 additions and 62 deletions

View File

@ -5,22 +5,45 @@ class DjangoRouter:
A router to control all database operations on models in the
auth and contenttypes applications.
"""
route_app_labels = {'auth', 'contenttypes', "sessions", "sites", "admin", "flatpages"}
def db_for_read(self, model, **hints):
"""
Attempts to read anything else goes to calibre
"""
return 'default'
def db_for_write(self, model, **hints):
"""
Attempts to write auth and contenttypes models go to 'calibre'.
"""
return 'default'
def allow_relation(self, obj1, obj2, **hints):
"""
Allow relations.
"""
return True
def allow_migrate(self, db, app_label, model_name=None, **hints):
"""
Yes
"""
return True
class CalibreRouter:
"""
A router to control all database operations on models in the
auth and contenttypes applications.
"""
route_app_labels = {"library"}
def db_for_read(self, model, **hints):
"""
Attempts to read auth and contenttypes models go to default.
"""
if model._meta.app_label in self.route_app_labels:
return 'default'
return None
def db_for_write(self, model, **hints):
"""
Attempts to write auth and contenttypes models go to django.
"""
if model._meta.app_label in self.route_app_labels:
return 'default'
return 'calibre'
return None
def allow_relation(self, obj1, obj2, **hints):
@ -35,42 +58,19 @@ class DjangoRouter:
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
"""
Make sure the auth and contenttypes apps only appear in the
'django' database.
"""
if app_label in self.route_app_labels:
return db == 'default'
return None
class CalibreRouter:
"""
A router to control all database operations on models in the
auth and contenttypes applications.
"""
def db_for_read(self, model, **hints):
"""
Attempts to read anything else goes to calibre
"""
return 'calibre'
# def db_for_write(self, model, **hints): # might be prudent not to allow writes
# def allow_migrate(self, db, app_label, model_name=None, **hints):
# """
# Attempts to write auth and contenttypes models go to 'calibre'.
# Make sure the auth and contenttypes apps only appear in the
# 'django' database.
# """
# return 'calibre'
# if app_label in self.route_app_labels:
# return db == 'default'
# return None
def allow_relation(self, obj1, obj2, **hints):
"""
Allow relations.
"""
return True
# def allow_migrate(self, db, app_label, model_name=None, **hints): # might be prudent not to allow migrations
# def db_for_write(self, model, **hints):
# """
# Yes
# Attempts to write auth and contenttypes models go to django.
# """
# return True
# if model._meta.app_label in self.route_app_labels:
# return 'default'
# return None