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

@ -23,13 +23,6 @@ with open( BASE_DIR + "/settings.json", "r") as userfile:
INTERNAL_IPS = usersettings["INTERNAL_IPS"] INTERNAL_IPS = usersettings["INTERNAL_IPS"]
# CALIBRE_DIR = os.path.abspath(
# "C:\\Users\\MassiveAtoms\\Documents\\Calibre Library")
# SECRET_KEY = 'u(8^+rb%rz5hsx4v^^y(ul7g(4n7a8!db@s*9(m5cs*2_ppy8+'
# ALLOWED_HOSTS = ['127.0.0.1', ]
# INTERNAL_IPS = ['127.0.0.1', ]
# Build paths inside the project like this: os.path.join(BASE_DIR, ...) # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
@ -99,11 +92,13 @@ INSTALLED_APPS = [
'django.contrib.messages', 'django.contrib.messages',
'django.contrib.staticfiles', 'django.contrib.staticfiles',
"library", "library",
'debug_toolbar', # DEBUG purposes # "silk",
# 'debug_toolbar', # DEBUG purposes
] ]
MIDDLEWARE = [ MIDDLEWARE = [
'debug_toolbar.middleware.DebugToolbarMiddleware', # DEBUG purposes # 'silk.middleware.SilkyMiddleware', # DEBUG/profiling purposes
# 'debug_toolbar.middleware.DebugToolbarMiddleware', # DEBUG purposes
'django.middleware.cache.UpdateCacheMiddleware', # cache 'django.middleware.cache.UpdateCacheMiddleware', # cache
'django.middleware.security.SecurityMiddleware', 'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware',
@ -138,8 +133,9 @@ TEMPLATES = [
WSGI_APPLICATION = 'CalibreWebCompanion.wsgi.application' WSGI_APPLICATION = 'CalibreWebCompanion.wsgi.application'
## ##
# Database ########################################################################
## DATBASE ##
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases # https://docs.djangoproject.com/en/3.0/ref/settings/#databases
DATABASES = { DATABASES = {
@ -154,7 +150,7 @@ DATABASES = {
} }
DATABASE_ROUTERS = ["db_routers.DjangoRouter", "db_routers.CalibreRouter"] DATABASE_ROUTERS = [ "db_routers.CalibreRouter", "db_routers.DjangoRouter"]
# Password validation # Password validation
# https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators # https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators

View File

@ -30,8 +30,9 @@ urlpatterns = [
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
if settings.DEBUG: # DEBUG purposes # if settings.DEBUG: # DEBUG purposes
import debug_toolbar # urlpatterns+= [path('silk/', include('silk.urls', namespace='silk'))]
urlpatterns = [ # import debug_toolbar
path('__debug__/', include(debug_toolbar.urls)), # urlpatterns = [
] + urlpatterns # path('__debug__/', include(debug_toolbar.urls)),
# ] + urlpatterns

View File

@ -5,22 +5,45 @@ class DjangoRouter:
A router to control all database operations on models in the A router to control all database operations on models in the
auth and contenttypes applications. 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): def db_for_read(self, model, **hints):
""" """
Attempts to read auth and contenttypes models go to default. Attempts to read auth and contenttypes models go to default.
""" """
if model._meta.app_label in self.route_app_labels: if model._meta.app_label in self.route_app_labels:
return 'default' return 'calibre'
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 None return None
def allow_relation(self, obj1, obj2, **hints): def allow_relation(self, obj1, obj2, **hints):
@ -35,42 +58,19 @@ class DjangoRouter:
return True return True
return None return None
def allow_migrate(self, db, app_label, model_name=None, **hints): # 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
# """ # """
# 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): # def db_for_write(self, model, **hints):
"""
Allow relations.
"""
return True
# def allow_migrate(self, db, app_label, model_name=None, **hints): # might be prudent not to allow migrations
# """ # """
# 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

View File

@ -1 +1,5 @@
django==3.0.8 django>=3.0.8
# development
django-debug-toolbar>=2.2
django-silk>=4.0
locust>=1.1