|
@@ -1,4 +1,6 @@
|
|
import logging
|
|
import logging
|
|
|
|
+import os
|
|
|
|
+import inspect
|
|
|
|
|
|
logging.basicConfig()
|
|
logging.basicConfig()
|
|
logger = logging.getLogger("kalliope")
|
|
logger = logging.getLogger("kalliope")
|
|
@@ -26,6 +28,11 @@ class Utils(object):
|
|
UNDERLINE='\033[4m'
|
|
UNDERLINE='\033[4m'
|
|
)
|
|
)
|
|
|
|
|
|
|
|
+ ##################
|
|
|
|
+ #
|
|
|
|
+ # Shell properly displayed
|
|
|
|
+ #
|
|
|
|
+ #########
|
|
@classmethod
|
|
@classmethod
|
|
def print_info(cls, text_to_print):
|
|
def print_info(cls, text_to_print):
|
|
print cls.color_list["BLUE"] + text_to_print + cls.color_list["ENDLINE"]
|
|
print cls.color_list["BLUE"] + text_to_print + cls.color_list["ENDLINE"]
|
|
@@ -58,8 +65,23 @@ class Utils(object):
|
|
def print_underline(cls, text_to_print):
|
|
def print_underline(cls, text_to_print):
|
|
print cls.color_list["UNDERLINE"] + text_to_print + cls.color_list["ENDLINE"]
|
|
print cls.color_list["UNDERLINE"] + text_to_print + cls.color_list["ENDLINE"]
|
|
|
|
|
|
- @classmethod
|
|
|
|
- def get_dynamic_class_instantiation(cls, package_name, module_name, parameters=None):
|
|
|
|
|
|
+ @staticmethod
|
|
|
|
+ def print_yaml_nicely(to_print):
|
|
|
|
+ """
|
|
|
|
+ Used for debug
|
|
|
|
+ :param to_print: Dict to print nicely
|
|
|
|
+ :return:
|
|
|
|
+ """
|
|
|
|
+ import json
|
|
|
|
+ print json.dumps(to_print, indent=2)
|
|
|
|
+
|
|
|
|
+ ##################
|
|
|
|
+ #
|
|
|
|
+ # Dynamic loading
|
|
|
|
+ #
|
|
|
|
+ #########
|
|
|
|
+ @staticmethod
|
|
|
|
+ def get_dynamic_class_instantiation(package_name, module_name, parameters=None):
|
|
"""
|
|
"""
|
|
Load a python class dynamically
|
|
Load a python class dynamically
|
|
|
|
|
|
@@ -91,12 +113,57 @@ class Utils(object):
|
|
return klass(parameters)
|
|
return klass(parameters)
|
|
return None
|
|
return None
|
|
|
|
|
|
|
|
+ ##################
|
|
|
|
+ #
|
|
|
|
+ # Paths management
|
|
|
|
+ #
|
|
|
|
+ #########
|
|
|
|
+ @staticmethod
|
|
|
|
+ def get_current_file_parent_parent_path(current_script_path):
|
|
|
|
+ parent_parent_path = os.path.normpath(current_script_path + os.sep + os.pardir + os.sep + os.pardir)
|
|
|
|
+ return parent_parent_path
|
|
|
|
+
|
|
|
|
+ @staticmethod
|
|
|
|
+ def get_current_file_parent_path(current_script_path):
|
|
|
|
+ parent_path = os.path.normpath(current_script_path + os.sep + os.pardir)
|
|
|
|
+ return parent_path
|
|
|
|
+
|
|
@classmethod
|
|
@classmethod
|
|
- def print_yaml_nicely(cls, to_print):
|
|
|
|
|
|
+ def get_real_file_path(cls, file_path_to_test):
|
|
"""
|
|
"""
|
|
- Used for debug
|
|
|
|
- :param to_print: Dict to print nicely
|
|
|
|
- :return:
|
|
|
|
|
|
+ Try to return a full path from a given <file_path_to_test>
|
|
|
|
+ If the path is an absolute on, we return it directly.
|
|
|
|
+
|
|
|
|
+ If the path is relative, we try to get the full path in this order:
|
|
|
|
+ - from the current directory where kalliope has been called + the file_path_to_test.
|
|
|
|
+ Eg: /home/me/Documents/kalliope_config
|
|
|
|
+ - from /etc/kalliope + file_path_to_test
|
|
|
|
+ - from the default file passed as <file_name> at the root of the project
|
|
|
|
+
|
|
|
|
+ :param file_path_to_test file path to test
|
|
|
|
+ :type file_path_to_test: str
|
|
|
|
+ :return: absolute path to the file file_path_to_test or None if is doen't exist
|
|
"""
|
|
"""
|
|
- import json
|
|
|
|
- print json.dumps(to_print, indent=2)
|
|
|
|
|
|
+
|
|
|
|
+ if not os.path.isabs(file_path_to_test):
|
|
|
|
+ current_script_path = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
|
|
|
|
+ path_order = {
|
|
|
|
+ 1: os.getcwd() + os.sep + file_path_to_test,
|
|
|
|
+ 2: "/etc/kalliope" + os.sep + file_path_to_test,
|
|
|
|
+ # In this case 'get_current_file_parent_parent_path' is corresponding to kalliope root path
|
|
|
|
+ # from /an/unknown/path/kalliope/core/Utils to /an/unknown/path/kalliope
|
|
|
|
+ 3: cls.get_current_file_parent_path(current_script_path) + os.sep + file_path_to_test
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for key in sorted(path_order):
|
|
|
|
+ new_file_path_to_test = path_order[key]
|
|
|
|
+ logger.debug("Try to load file from %s: %s" % (key, new_file_path_to_test))
|
|
|
|
+ if os.path.isfile(new_file_path_to_test):
|
|
|
|
+ logger.debug("File found in %s" % new_file_path_to_test)
|
|
|
|
+ return new_file_path_to_test
|
|
|
|
+
|
|
|
|
+ else:
|
|
|
|
+ if os.path.isfile(file_path_to_test):
|
|
|
|
+ return file_path_to_test
|
|
|
|
+ else:
|
|
|
|
+ return None
|