mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-28 19:46:46 +00:00
Add typecasting to certain settings (#3726)
* [FR] Add typecasting to certain settings Fixes #3725 Add typecasting * Add types to: - INVENTREE_CACHE_PORT - INVENTREE_EMAIL_PORT - INVENTREE_LOGIN_CONFIRM_DAYS - INVENTREE_LOGIN_ATTEMPTS * cast DB_PORT to int * Add logging statements
This commit is contained in:
parent
fbde70d531
commit
dce10072ef
@ -58,7 +58,7 @@ def load_config_data() -> map:
|
|||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
def get_setting(env_var=None, config_key=None, default_value=None):
|
def get_setting(env_var=None, config_key=None, default_value=None, typecast=None):
|
||||||
"""Helper function for retrieving a configuration setting value.
|
"""Helper function for retrieving a configuration setting value.
|
||||||
|
|
||||||
- First preference is to look for the environment variable
|
- First preference is to look for the environment variable
|
||||||
@ -69,15 +69,24 @@ def get_setting(env_var=None, config_key=None, default_value=None):
|
|||||||
env_var: Name of the environment variable e.g. 'INVENTREE_STATIC_ROOT'
|
env_var: Name of the environment variable e.g. 'INVENTREE_STATIC_ROOT'
|
||||||
config_key: Key to lookup in the configuration file
|
config_key: Key to lookup in the configuration file
|
||||||
default_value: Value to return if first two options are not provided
|
default_value: Value to return if first two options are not provided
|
||||||
|
typecast: Function to use for typecasting the value
|
||||||
"""
|
"""
|
||||||
|
def try_typecasting(value):
|
||||||
|
"""Attempt to typecast the value"""
|
||||||
|
if typecast is not None:
|
||||||
|
# Try to typecast the value
|
||||||
|
try:
|
||||||
|
return typecast(value)
|
||||||
|
except Exception as error:
|
||||||
|
logger.error(f"Failed to typecast '{env_var}' with value '{value}' to type '{typecast}' with error {error}")
|
||||||
|
return value
|
||||||
|
|
||||||
# First, try to load from the environment variables
|
# First, try to load from the environment variables
|
||||||
if env_var is not None:
|
if env_var is not None:
|
||||||
val = os.getenv(env_var, None)
|
val = os.getenv(env_var, None)
|
||||||
|
|
||||||
if val is not None:
|
if val is not None:
|
||||||
return val
|
return try_typecasting(val)
|
||||||
|
|
||||||
# Next, try to load from configuration file
|
# Next, try to load from configuration file
|
||||||
if config_key is not None:
|
if config_key is not None:
|
||||||
@ -96,10 +105,10 @@ def get_setting(env_var=None, config_key=None, default_value=None):
|
|||||||
cfg_data = cfg_data[key]
|
cfg_data = cfg_data[key]
|
||||||
|
|
||||||
if result is not None:
|
if result is not None:
|
||||||
return result
|
return try_typecasting(result)
|
||||||
|
|
||||||
# Finally, return the default value
|
# Finally, return the default value
|
||||||
return default_value
|
return try_typecasting(default_value)
|
||||||
|
|
||||||
|
|
||||||
def get_boolean_setting(env_var=None, config_key=None, default_value=False):
|
def get_boolean_setting(env_var=None, config_key=None, default_value=False):
|
||||||
|
@ -346,6 +346,12 @@ for key in db_keys:
|
|||||||
env_var = os.environ.get(env_key, None)
|
env_var = os.environ.get(env_key, None)
|
||||||
|
|
||||||
if env_var:
|
if env_var:
|
||||||
|
# Make use PORT is int
|
||||||
|
if key == 'PORT':
|
||||||
|
try:
|
||||||
|
env_var = int(env_var)
|
||||||
|
except ValueError:
|
||||||
|
logger.error(f"Invalid number for {env_key}: {env_var}")
|
||||||
# Override configuration value
|
# Override configuration value
|
||||||
db_config[key] = env_var
|
db_config[key] = env_var
|
||||||
|
|
||||||
@ -503,7 +509,7 @@ DATABASES = {
|
|||||||
|
|
||||||
# Cache configuration
|
# Cache configuration
|
||||||
cache_host = get_setting('INVENTREE_CACHE_HOST', 'cache.host', None)
|
cache_host = get_setting('INVENTREE_CACHE_HOST', 'cache.host', None)
|
||||||
cache_port = get_setting('INVENTREE_CACHE_PORT', 'cache.port', '6379')
|
cache_port = get_setting('INVENTREE_CACHE_PORT', 'cache.port', '6379', typecast=int)
|
||||||
|
|
||||||
if cache_host: # pragma: no cover
|
if cache_host: # pragma: no cover
|
||||||
# We are going to rely upon a possibly non-localhost for our cache,
|
# We are going to rely upon a possibly non-localhost for our cache,
|
||||||
@ -670,7 +676,7 @@ EXCHANGE_BACKEND = 'InvenTree.exchange.InvenTreeExchange'
|
|||||||
# Email configuration options
|
# Email configuration options
|
||||||
EMAIL_BACKEND = get_setting('INVENTREE_EMAIL_BACKEND', 'email.backend', 'django.core.mail.backends.smtp.EmailBackend')
|
EMAIL_BACKEND = get_setting('INVENTREE_EMAIL_BACKEND', 'email.backend', 'django.core.mail.backends.smtp.EmailBackend')
|
||||||
EMAIL_HOST = get_setting('INVENTREE_EMAIL_HOST', 'email.host', '')
|
EMAIL_HOST = get_setting('INVENTREE_EMAIL_HOST', 'email.host', '')
|
||||||
EMAIL_PORT = int(get_setting('INVENTREE_EMAIL_PORT', 'email.port', 25))
|
EMAIL_PORT = get_setting('INVENTREE_EMAIL_PORT', 'email.port', 25, typecast=int)
|
||||||
EMAIL_HOST_USER = get_setting('INVENTREE_EMAIL_USERNAME', 'email.username', '')
|
EMAIL_HOST_USER = get_setting('INVENTREE_EMAIL_USERNAME', 'email.username', '')
|
||||||
EMAIL_HOST_PASSWORD = get_setting('INVENTREE_EMAIL_PASSWORD', 'email.password', '')
|
EMAIL_HOST_PASSWORD = get_setting('INVENTREE_EMAIL_PASSWORD', 'email.password', '')
|
||||||
EMAIL_SUBJECT_PREFIX = get_setting('INVENTREE_EMAIL_PREFIX', 'email.prefix', '[InvenTree] ')
|
EMAIL_SUBJECT_PREFIX = get_setting('INVENTREE_EMAIL_PREFIX', 'email.prefix', '[InvenTree] ')
|
||||||
@ -719,8 +725,8 @@ SOCIALACCOUNT_PROVIDERS = CONFIG.get('social_providers', [])
|
|||||||
SOCIALACCOUNT_STORE_TOKENS = True
|
SOCIALACCOUNT_STORE_TOKENS = True
|
||||||
|
|
||||||
# settings for allauth
|
# settings for allauth
|
||||||
ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = get_setting('INVENTREE_LOGIN_CONFIRM_DAYS', 'login_confirm_days', 3)
|
ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = get_setting('INVENTREE_LOGIN_CONFIRM_DAYS', 'login_confirm_days', 3, typecast=int)
|
||||||
ACCOUNT_LOGIN_ATTEMPTS_LIMIT = get_setting('INVENTREE_LOGIN_ATTEMPTS', 'login_attempts', 5)
|
ACCOUNT_LOGIN_ATTEMPTS_LIMIT = get_setting('INVENTREE_LOGIN_ATTEMPTS', 'login_attempts', 5, typecast=int)
|
||||||
ACCOUNT_LOGOUT_ON_PASSWORD_CHANGE = True
|
ACCOUNT_LOGOUT_ON_PASSWORD_CHANGE = True
|
||||||
ACCOUNT_PREVENT_ENUMERATION = True
|
ACCOUNT_PREVENT_ENUMERATION = True
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user