def validate(template): """ Validate a template dict and aggregate all errors that could occur. Return a tempplate object or raise a ValidationError """ # Task name validation errors = list() for task in template.tasks: try: TaskRegistry.get(task.name) except UnknownTaskName: errors.append(task.name) if errors: log.debug("unknown tasks: %s", errors) raise TemplateError(key=ErrorInfo.UNKNOWN_TASK, details=errors) # DAG semantic validation try: template.validate() except WorkflowRootTaskError as exc: log.debug("workflow validation error: %s", exc) raise TemplateError(key=ErrorInfo.INVALID_GRAPH, message="Workflow validation error: {}".format(exc)) from exc # Task config validation errors = list() tasks = template.as_dict().get("tasks", []) for task in tasks: err = validate_task(task, tasks) if err: errors.append(err) if errors: raise TemplateError(key=ErrorInfo.INVALID_TASK, details=errors) return template
def validate_task(task, tasks=None): """ Validate the jsonschema configuration of a task """ name = task["name"] config = task.get("config", {}) schema = getattr(TaskRegistry.get(name)[0], "SCHEMA", {}) format_checker = getattr(TaskRegistry.get(name)[0], "FORMAT_CHECKER", None) try: validate_schema(config, schema, format_checker=format_checker) except ValidationError as exc: return TemplateError.format_details(exc, task)
def validate_task(task, tasks=None): """ Validate the jsonschema configuration of a task """ name = task['name'] config = task.get('config', {}) schema = getattr(TaskRegistry.get(name)[0], 'SCHEMA', {}) format_checker = getattr(TaskRegistry.get(name)[0], 'FORMAT_CHECKER', None) try: validate_schema(config, schema, format_checker=format_checker) except ValidationError as exc: return TemplateError.format_details(exc, task)
def validate(template): """ Validate a template dict and aggregate all errors that could occur. Return a tempplate object or raise a ValidationError """ # Task name validation errors = list() for task in template.tasks: try: TaskRegistry.get(task.name) except UnknownTaskName: errors.append(task.name) if errors: log.debug('unknown tasks: %s', errors) raise TemplateError(key=ErrorInfo.UNKNOWN_TASK, details=errors) # DAG semantic validation try: template.validate() except WorkflowRootTaskError as exc: log.debug('workflow validation error: %s', exc) raise TemplateError( key=ErrorInfo.INVALID_GRAPH, message='Workflow validation error: {}'.format(exc)) from exc # Task config validation errors = list() tasks = template.as_dict().get('tasks', []) for task in tasks: err = validate_task(task, tasks) if err: errors.append(err) if errors: raise TemplateError(key=ErrorInfo.INVALID_TASK, details=errors) return template
def __init__(self, **kwargs): super().__init__(**kwargs) self.register_schema(self.CONF_SCHEMA) self.migrate_config() self.engine = None self.storage = None # Stores workflow instances with their template data self.running_workflows = {} self.AVAILABLE_TASKS = {} for name, value in TaskRegistry.all().items(): self.AVAILABLE_TASKS[name] = getattr(value[0], 'SCHEMA', {}) runtime.bus = self.bus runtime.config = self.config runtime.workflows = self.running_workflows
def __init__(self, **kwargs): super().__init__(**kwargs) self.migrate_config() self.register_schema(self.CONF_SCHEMA) self.engine = None self.storage = MongoStorage() self.AVAILABLE_TASKS = {} for name, value in TaskRegistry.all().items(): self.AVAILABLE_TASKS[name] = getattr(value[0], 'SCHEMA', {}) # Stores workflow instances with their template data self.running_workflows = {} runtime.bus = self.bus runtime.config = self.config runtime.workflows = self.running_workflows