Diff of /Configs/CONSTANTS.py [000000] .. [b4a150]

Switch to side-by-side view

--- a
+++ b/Configs/CONSTANTS.py
@@ -0,0 +1,119 @@
+#!/usr/bin/env python
+# -*- coding: UTF-8 -*-
+#
+# Copyright 2017 University of Westminster. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ==============================================================================
+""" It reads and sets constants, based on the configuration file and input arguments.
+"""
+
+import os
+import sys
+import logging
+from ReadersWriters.PyConfigParser import PyConfigParser
+
+__author__ = "Mohsen Mesgarpour"
+__copyright__ = "Copyright 2016, https://github.com/mesgarpour"
+__credits__ = ["Mohsen Mesgarpour"]
+__license__ = "GPL"
+__version__ = "1.1"
+__maintainer__ = "Mohsen Mesgarpour"
+__email__ = "mohsen.mesgarpour@gmail.com"
+__status__ = "Release"
+
+
+class CONSTANTS:
+    # configuration settings
+    __logger = None
+    app_name = None
+
+    # Database
+    db_host = None
+    db_user = None
+    db_password = None
+    db_port = None
+    db_echo = None
+    db_pool_timeout = None
+    db_pool_recycle = None
+    db_session_vars = None
+
+    # Inputs and Outputs
+    io_path = None
+    config_path = None
+    config_features_path = None
+
+    @staticmethod
+    def set(io_path: str,
+            app_name: str="logs",
+            config_features_path: str="ConfigInputs/input_features_configs",
+            config_path: str="ConfigInputs/CONFIGURATIONS"):
+        """Configure configuration file and set the constants.
+        :param io_path: the input output directory path.
+        :param app_name: the application name, which will be used as the log file name.
+        :param config_features_path: the configuration of the input features.
+        :param config_path: the configuration directory path.
+        """
+        CONSTANTS.__logger = logging.getLogger(CONSTANTS.app_name)
+        CONSTANTS.__logger.debug(__name__)
+
+        CONSTANTS.io_path = io_path
+        CONSTANTS.config_path = os.path.abspath(config_path)
+        CONSTANTS.config_features_path = os.path.abspath(config_features_path)
+        CONSTANTS.app_name = app_name
+
+        CONSTANTS.__set_configs_general()
+        CONSTANTS.__set_config_other_settings()
+
+    @staticmethod
+    def __set_configs_general():
+        """Set general configuration constants, including the MySQL database constants.
+        """
+        # configuration settings
+        config = PyConfigParser(CONSTANTS.config_path, CONSTANTS.app_name, ext="ini")
+        section = ""
+
+        try:
+            # Database
+            section = 'Database'
+            CONSTANTS.db_host = str(config.option(section, 'db_host'))
+            CONSTANTS.db_user = str(config.option(section, 'db_user'))
+            CONSTANTS.db_password = str(config.option(section, 'db_password'))
+            CONSTANTS.db_port = str(config.option(section, 'db_port'))
+            CONSTANTS.db_echo = str(config.option(section, 'db_echo')) == 'True'
+            CONSTANTS.db_pool_timeout = int(config.option(section, 'db_pool_timeout'))
+            CONSTANTS.db_pool_recycle = int(config.option(section, 'db_pool_recycle'))
+            CONSTANTS.db_session_vars = str(config.option(section, 'db_session_vars')).split(';')
+        except():
+            CONSTANTS.__logger.error(__name__ + " - Invalid configuration(s) in the " + section + " section")
+            sys.exit()
+
+    @staticmethod
+    def __set_config_other_settings():
+        """Set other configuration constants.
+        """
+        CONSTANTS.__create_directories(CONSTANTS.io_path)
+        CONSTANTS.io_path = os.path.abspath(CONSTANTS.io_path)
+
+    @staticmethod
+    def __create_directories(path: str):
+        """Create folder if it does not exist.
+        :param path: Directory path.
+        """
+        if not os.path.exists(path):
+            try:
+                os.makedirs(path, exist_ok=True)
+            except OSError as e:
+                CONSTANTS.__logger.error(
+                    __name__ + ' - Directory creation error: {0:d}:\n {1:s}'.format(e.args[0], str(e.args[1])))
+                sys.exit()