<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def load_tasks_from_dir(self, dir_path, propagate_exceptions=False):
 """ 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` """

        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