code: def load_tasks_from_dir(self, dir_path, propagate_exceptions=False):
          
          if not os.path.exists(dir_path):
              raise GOSTaskException()
          if os.path.isfile(dir_path):
              raise GOSTaskException()
          result = {}
          for file_basename in os.listdir(dir_path):
              full_file_path = os.path.join(dir_path, file_basename)
              try:
                  result.update(self.load_tasks_from_file(full_file_path))
              except (GOSTaskException, GOSIOException):
                  if propagate_exceptions:
                      raise
          return result
docs: Imports all python modules in specified directories and returns subclasses of BaseTask from them
  
          :param propagate_exceptions: a flag that indicates if exceptions from single file import shall be raised during the
              whole directory lookup
          :param dir_path: fully qualified directory path, where all python modules will be search for subclasses of BaseTask
          :type dir_path: `str`
          :return: a dict of CustomTasks, where key is CustomTask.name, and value is a CustomClass task itself
          :rtype: `dict`