diff --git a/docs/en_US/config_py.rst b/docs/en_US/config_py.rst index 7f4a779fe..67cc4f97d 100644 --- a/docs/en_US/config_py.rst +++ b/docs/en_US/config_py.rst @@ -46,11 +46,11 @@ The configuration files are as follows: Windows,%CommonProgramFiles%\\pgadmin\\config_system.py .. note:: If the SERVER_MODE or DATA_DIR settings are changed in - ``config_distro.py``, ``config_local.py``, or ``config_system.py`` you - will most likely need to re-set the LOG_FILE, SQLITE_PATH, SESSION_DB_PATH, - STORAGE_DIR, KERBEROS_CCACHE_DIR, and AZURE_CREDENTIAL_CACHE_DIR values - as well as they will have been set based on the default configuration or - overridden by the runtime. + ``config_distro.py``, ``config_local.py``, or ``config_system.py`` + LOG_FILE, SQLITE_PATH, SESSION_DB_PATH, STORAGE_DIR, KERBEROS_CCACHE_DIR, + and AZURE_CREDENTIAL_CACHE_DIR values will be set based on DATA_DIR unless + values are explicitly overridden for any of the variable in any of the + above file. The default ``config.py`` file is shown below for reference: diff --git a/docs/en_US/server_deployment.rst b/docs/en_US/server_deployment.rst index c760bd83d..f1b896de4 100644 --- a/docs/en_US/server_deployment.rst +++ b/docs/en_US/server_deployment.rst @@ -86,7 +86,9 @@ In order to configure the Python code, follow these steps: file locations should be appropriate: *NOTE: You must ensure the directories specified are writeable by - the user that the web server processes will be running as, e.g. apache or www-data.* + the user that the web server processes will be running as, e.g. apache or www-data. + You may specify DATA_DIR in order to create all required directories and files + under DATA_DIR folder.* .. code-block:: python @@ -94,6 +96,8 @@ In order to configure the Python code, follow these steps: SQLITE_PATH = '/var/lib/pgadmin4/pgadmin4.db' SESSION_DB_PATH = '/var/lib/pgadmin4/sessions' STORAGE_DIR = '/var/lib/pgadmin4/storage' + AZURE_CREDENTIAL_CACHE_DIR = '/var/lib/pgadmin4/azurecredentialcache' + KERBEROS_CCACHE_DIR = '/var/lib/pgadmin4/kerberoscache' 4. Run the following command to create the configuration database: diff --git a/web/config.py b/web/config.py index c9920f910..a8a7ff1be 100644 --- a/web/config.py +++ b/web/config.py @@ -835,16 +835,33 @@ AUTO_DISCOVER_SERVERS = True ########################################################################## # Local config settings ########################################################################## +# User configs loaded from config_local, config_distro etc. +user_config_settings = {} + + +# Function to Extract settings from config_local, config_distro etc. +def get_variables_from_module(module_name): + module = globals().get(module_name, None) + variables = {} + if module: + variables = {key: value for key, value in module.__dict__.items() + if not (key.startswith('__') or key.startswith('_'))} + return variables + # Load distribution-specific config overrides try: - from config_distro import * + import config_distro + config_distro_settings = get_variables_from_module('config_distro') + user_config_settings.update(config_distro_settings) except ImportError: pass # Load local config overrides try: - from config_local import * + import config_local + config_local_settings = get_variables_from_module('config_local') + user_config_settings.update(config_local_settings) except ImportError: pass @@ -860,10 +877,29 @@ elif sys.platform.startswith('darwin'): if os.path.exists(system_config_dir + '/config_system.py'): try: sys.path.insert(0, system_config_dir) - from config_system import * + import config_system + config_system_settings = get_variables_from_module('config_system') + user_config_settings.update(config_system_settings) except ImportError: pass +# Update settings for 'LOG_FILE', 'SQLITE_PATH', 'SESSION_DB_PATH', +# 'AZURE_CREDENTIAL_CACHE_DIR', 'KERBEROS_CCACHE_DIR', 'STORAGE_DIR' +# of DATA_DIR is user defined +data_dir_dependent_settings = ['LOG_FILE', 'SQLITE_PATH', 'SESSION_DB_PATH', + 'AZURE_CREDENTIAL_CACHE_DIR', + 'KERBEROS_CCACHE_DIR', 'STORAGE_DIR'] + +if 'DATA_DIR' in user_config_settings: + for setting in data_dir_dependent_settings: + if setting not in user_config_settings: + data_dir = user_config_settings['DATA_DIR'] + file_dir_name = os.path.basename(locals().get(setting)) + locals().update({setting: os.path.join(data_dir, file_dir_name)}) + +# Finally update config user configs +locals().update(user_config_settings) + # Override DEFAULT_SERVER value from environment variable. if 'PGADMIN_CONFIG_DEFAULT_SERVER' in os.environ: DEFAULT_SERVER = os.environ['PGADMIN_CONFIG_DEFAULT_SERVER']