changed db routing to better facilitate plugin support
This commit is contained in:
		@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1 +1,5 @@
 | 
				
			|||||||
django==3.0.8
 | 
					django>=3.0.8
 | 
				
			||||||
 | 
					# development
 | 
				
			||||||
 | 
					django-debug-toolbar>=2.2
 | 
				
			||||||
 | 
					django-silk>=4.0
 | 
				
			||||||
 | 
					locust>=1.1
 | 
				
			||||||
		Reference in New Issue
	
	Block a user