|  | @@ -1,8 +1,7 @@
 | 
	
		
			
				|  |  |  import logging
 | 
	
		
			
				|  |  |  import os
 | 
	
		
			
				|  |  | -import yaml
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -from core.Utils import Utils
 | 
	
		
			
				|  |  | +import yaml
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  logging.basicConfig()
 | 
	
		
			
				|  |  |  logger = logging.getLogger("kalliope")
 | 
	
	
		
			
				|  | @@ -28,36 +27,14 @@ class YAMLLoader:
 | 
	
		
			
				|  |  |          root_dir = os.path.join(current_dir, "../../")
 | 
	
		
			
				|  |  |          root_dir = os.path.normpath(root_dir)
 | 
	
		
			
				|  |  |          logger.debug("Root dir: %s " % root_dir)
 | 
	
		
			
				|  |  | -        file_path_to_load = os.path.join(root_dir, yaml_file)
 | 
	
		
			
				|  |  | -        logger.debug("File path to load: %s " % file_path_to_load)
 | 
	
		
			
				|  |  | -        if os.path.isfile(yaml_file):
 | 
	
		
			
				|  |  | -            # data = IncludeLoader(open(file_path_to_load, 'r')).get_data()
 | 
	
		
			
				|  |  | -            # print Utils.print_yaml_nicely(data)
 | 
	
		
			
				|  |  | -            data = IncludeImport(file_path_to_load).get_data()
 | 
	
		
			
				|  |  | +        cls.file_path_to_load = os.path.join(root_dir, yaml_file)
 | 
	
		
			
				|  |  | +        logger.debug("File path to load: %s " % cls.file_path_to_load)
 | 
	
		
			
				|  |  | +        if os.path.isfile(cls.file_path_to_load):
 | 
	
		
			
				|  |  | +            inc_import = IncludeImport(cls.file_path_to_load)
 | 
	
		
			
				|  |  | +            data = inc_import.get_data()
 | 
	
		
			
				|  |  |              return data
 | 
	
		
			
				|  |  |          else:
 | 
	
		
			
				|  |  | -            raise YAMLFileNotFound("File %s not found" % file_path_to_load)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -class IncludeLoader(yaml.Loader):
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    def __init__(self, *args, **kwargs):
 | 
	
		
			
				|  |  | -        super(IncludeLoader, self).__init__(*args, **kwargs)
 | 
	
		
			
				|  |  | -        self.add_constructor('#include', self._include)
 | 
	
		
			
				|  |  | -        if 'root' in kwargs:
 | 
	
		
			
				|  |  | -            self.root = kwargs['root']
 | 
	
		
			
				|  |  | -        elif isinstance(self.stream, file):
 | 
	
		
			
				|  |  | -            self.root = os.path.dirname(self.stream.name)
 | 
	
		
			
				|  |  | -        else:
 | 
	
		
			
				|  |  | -            self.root = os.path.curdir
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    def _include(self, loader, node):
 | 
	
		
			
				|  |  | -        oldRoot = self.root
 | 
	
		
			
				|  |  | -        filename = os.path.join(self.root, loader.construct_scalar(node))
 | 
	
		
			
				|  |  | -        self.root = os.path.dirname(filename)
 | 
	
		
			
				|  |  | -        data = yaml.load(open(filename, 'r'))
 | 
	
		
			
				|  |  | -        self.root = oldRoot
 | 
	
		
			
				|  |  | -        return data
 | 
	
		
			
				|  |  | +            raise YAMLFileNotFound("File %s not found" % cls.file_path_to_load)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  class IncludeImport(object):
 | 
	
	
		
			
				|  | @@ -67,12 +44,22 @@ class IncludeImport(object):
 | 
	
		
			
				|  |  |          Load yaml file, with includes statement
 | 
	
		
			
				|  |  |          :param file_path: path to the yaml file to load
 | 
	
		
			
				|  |  |          """
 | 
	
		
			
				|  |  | +        # get the parent dir. will be used in case of relative path
 | 
	
		
			
				|  |  | +        parent_dir = os.path.normpath(file_path + os.sep + os.pardir)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        # load the yaml file
 | 
	
		
			
				|  |  |          self.data = yaml.load(open(file_path, 'r'))
 | 
	
		
			
				|  |  | -        # print "content: %s" % self.data
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        # add included brain
 | 
	
		
			
				|  |  |          if isinstance(self.data, list):
 | 
	
		
			
				|  |  |              for el in self.data:
 | 
	
		
			
				|  |  |                  if "includes" in el:
 | 
	
		
			
				|  |  |                      for inc in el["includes"]:
 | 
	
		
			
				|  |  | +                        # if the path is relative, we add the root path
 | 
	
		
			
				|  |  | +                        if not os.path.isabs(inc):  # os.path.isabs returns True if the path is absolute
 | 
	
		
			
				|  |  | +                            # logger.debug("File path %s is relative, adding the root path" % inc)
 | 
	
		
			
				|  |  | +                            inc = os.path.join(parent_dir, inc)
 | 
	
		
			
				|  |  | +                            # logger.debug("New path: %s" % inc)
 | 
	
		
			
				|  |  |                          self.update(yaml.load(open(inc)))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def get_data(self):
 | 
	
	
		
			
				|  | @@ -82,7 +69,8 @@ class IncludeImport(object):
 | 
	
		
			
				|  |  |          # print "cur_data: %s" % self.data
 | 
	
		
			
				|  |  |          # print "data to add %s" % data_to_add
 | 
	
		
			
				|  |  |          # we add each synapse inside the extended brain into the main brain data
 | 
	
		
			
				|  |  | -        for el in data_to_add:
 | 
	
		
			
				|  |  | -            self.data.append(el)
 | 
	
		
			
				|  |  | +        if data_to_add is not None:
 | 
	
		
			
				|  |  | +            for el in data_to_add:
 | 
	
		
			
				|  |  | +                self.data.append(el)
 | 
	
		
			
				|  |  |          # print "final data: %s" % self.data
 | 
	
		
			
				|  |  |  
 |