mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-11-04 07:05:41 +00:00 
			
		
		
		
	Merge pull request #2168 from SchrodingersGat/db-options-cleanup
Add support for backend-specific database functionality
This commit is contained in:
		@@ -385,39 +385,6 @@ Q_CLUSTER = {
 | 
				
			|||||||
    'sync': False,
 | 
					    'sync': False,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Markdownx configuration
 | 
					 | 
				
			||||||
# Ref: https://neutronx.github.io/django-markdownx/customization/
 | 
					 | 
				
			||||||
MARKDOWNX_MEDIA_PATH = datetime.now().strftime('markdownx/%Y/%m/%d')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Markdownify configuration
 | 
					 | 
				
			||||||
# Ref: https://django-markdownify.readthedocs.io/en/latest/settings.html
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
MARKDOWNIFY_WHITELIST_TAGS = [
 | 
					 | 
				
			||||||
    'a',
 | 
					 | 
				
			||||||
    'abbr',
 | 
					 | 
				
			||||||
    'b',
 | 
					 | 
				
			||||||
    'blockquote',
 | 
					 | 
				
			||||||
    'em',
 | 
					 | 
				
			||||||
    'h1', 'h2', 'h3',
 | 
					 | 
				
			||||||
    'i',
 | 
					 | 
				
			||||||
    'img',
 | 
					 | 
				
			||||||
    'li',
 | 
					 | 
				
			||||||
    'ol',
 | 
					 | 
				
			||||||
    'p',
 | 
					 | 
				
			||||||
    'strong',
 | 
					 | 
				
			||||||
    'ul'
 | 
					 | 
				
			||||||
]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
MARKDOWNIFY_WHITELIST_ATTRS = [
 | 
					 | 
				
			||||||
    'href',
 | 
					 | 
				
			||||||
    'src',
 | 
					 | 
				
			||||||
    'alt',
 | 
					 | 
				
			||||||
]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
MARKDOWNIFY_BLEACH = False
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
DATABASES = {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
Configure the database backend based on the user-specified values.
 | 
					Configure the database backend based on the user-specified values.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -484,7 +451,47 @@ logger.info(f"DB_ENGINE: {db_engine}")
 | 
				
			|||||||
logger.info(f"DB_NAME: {db_name}")
 | 
					logger.info(f"DB_NAME: {db_name}")
 | 
				
			||||||
logger.info(f"DB_HOST: {db_host}")
 | 
					logger.info(f"DB_HOST: {db_host}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DATABASES['default'] = db_config
 | 
					"""
 | 
				
			||||||
 | 
					In addition to base-level database configuration, we may wish to specify specific options to the database backend
 | 
				
			||||||
 | 
					Ref: https://docs.djangoproject.com/en/3.2/ref/settings/#std:setting-OPTIONS
 | 
				
			||||||
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 'OPTIONS' or 'options' can be specified in config.yaml
 | 
				
			||||||
 | 
					db_options = db_config.get('OPTIONS', db_config.get('options', {}))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Specific options for postgres backend
 | 
				
			||||||
 | 
					if 'postgres' in db_engine:
 | 
				
			||||||
 | 
					    from psycopg2.extensions import ISOLATION_LEVEL_READ_COMMITTED, ISOLATION_LEVEL_SERIALIZABLE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Connection timeout
 | 
				
			||||||
 | 
					    if 'connect_timeout' not in db_options:
 | 
				
			||||||
 | 
					        db_options['connect_timeout'] = int(os.getenv('INVENTREE_DB_TIMEOUT', 2))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Postgres's default isolation level is Read Committed which is
 | 
				
			||||||
 | 
					    # normally fine, but most developers think the database server is
 | 
				
			||||||
 | 
					    # actually going to do Serializable type checks on the queries to
 | 
				
			||||||
 | 
					    # protect against simultaneous changes.
 | 
				
			||||||
 | 
					    if 'isolation_level' not in db_options:
 | 
				
			||||||
 | 
					        serializable = _is_true(os.getenv("PG_ISOLATION_SERIALIZABLE", "true"))
 | 
				
			||||||
 | 
					        db_options['isolation_level'] = ISOLATION_LEVEL_SERIALIZABLE if serializable else ISOLATION_LEVEL_READ_COMMITTED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Specific options for MySql / MariaDB backend
 | 
				
			||||||
 | 
					if 'mysql' in db_engine:
 | 
				
			||||||
 | 
					    # TODO
 | 
				
			||||||
 | 
					    pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Specific options for sqlite backend
 | 
				
			||||||
 | 
					if 'sqlite' in db_engine:
 | 
				
			||||||
 | 
					    # TODO
 | 
				
			||||||
 | 
					    pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Provide OPTIONS dict back to the database configuration dict
 | 
				
			||||||
 | 
					db_config['OPTIONS'] = db_options
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DATABASES = {
 | 
				
			||||||
 | 
					    'default': db_config
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CACHES = {
 | 
					CACHES = {
 | 
				
			||||||
    'default': {
 | 
					    'default': {
 | 
				
			||||||
@@ -683,3 +690,34 @@ ACCOUNT_FORMS = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
SOCIALACCOUNT_ADAPTER = 'InvenTree.forms.CustomSocialAccountAdapter'
 | 
					SOCIALACCOUNT_ADAPTER = 'InvenTree.forms.CustomSocialAccountAdapter'
 | 
				
			||||||
ACCOUNT_ADAPTER = 'InvenTree.forms.CustomAccountAdapter'
 | 
					ACCOUNT_ADAPTER = 'InvenTree.forms.CustomAccountAdapter'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Markdownx configuration
 | 
				
			||||||
 | 
					# Ref: https://neutronx.github.io/django-markdownx/customization/
 | 
				
			||||||
 | 
					MARKDOWNX_MEDIA_PATH = datetime.now().strftime('markdownx/%Y/%m/%d')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Markdownify configuration
 | 
				
			||||||
 | 
					# Ref: https://django-markdownify.readthedocs.io/en/latest/settings.html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MARKDOWNIFY_WHITELIST_TAGS = [
 | 
				
			||||||
 | 
					    'a',
 | 
				
			||||||
 | 
					    'abbr',
 | 
				
			||||||
 | 
					    'b',
 | 
				
			||||||
 | 
					    'blockquote',
 | 
				
			||||||
 | 
					    'em',
 | 
				
			||||||
 | 
					    'h1', 'h2', 'h3',
 | 
				
			||||||
 | 
					    'i',
 | 
				
			||||||
 | 
					    'img',
 | 
				
			||||||
 | 
					    'li',
 | 
				
			||||||
 | 
					    'ol',
 | 
				
			||||||
 | 
					    'p',
 | 
				
			||||||
 | 
					    'strong',
 | 
				
			||||||
 | 
					    'ul'
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MARKDOWNIFY_WHITELIST_ATTRS = [
 | 
				
			||||||
 | 
					    'href',
 | 
				
			||||||
 | 
					    'src',
 | 
				
			||||||
 | 
					    'alt',
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MARKDOWNIFY_BLEACH = False
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user