mistral/mistral/workbook/v2/task_defaults.py

96 lines
2.9 KiB
Python

# Copyright 2014 - Mirantis, Inc.
# Copyright 2015 - StackStorm, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import six
from mistral.workbook import types
from mistral.workbook.v2 import base
from mistral.workbook.v2 import policies
class TaskDefaultsSpec(base.BaseSpec):
# See http://json-schema.org
_task_policies_schema = policies.PoliciesSpec.get_schema(
includes=None)
_on_clause_type = {
"oneOf": [
types.NONEMPTY_STRING,
types.UNIQUE_STRING_OR_YAQL_CONDITION_LIST
]
}
_schema = {
"type": "object",
"properties": {
"retry": policies.RETRY_SCHEMA,
"wait-before": policies.WAIT_BEFORE_SCHEMA,
"wait-after": policies.WAIT_AFTER_SCHEMA,
"timeout": policies.TIMEOUT_SCHEMA,
"pause-before": policies.PAUSE_BEFORE_SCHEMA,
"concurrency": policies.CONCURRENCY_SCHEMA,
"on-complete": _on_clause_type,
"on-success": _on_clause_type,
"on-error": _on_clause_type
},
"additionalProperties": False
}
@classmethod
def get_schema(cls, includes=['definitions']):
return super(TaskDefaultsSpec, cls).get_schema(includes)
def __init__(self, data):
super(TaskDefaultsSpec, self).__init__(data)
self._policies = self._group_spec(
policies.PoliciesSpec,
'retry',
'wait-before',
'wait-after',
'timeout',
'pause-before',
'concurrency'
)
self._on_complete = self._as_list_of_tuples("on-complete")
self._on_success = self._as_list_of_tuples("on-success")
self._on_error = self._as_list_of_tuples("on-error")
def validate(self):
super(TaskDefaultsSpec, self).validate()
# Validate YAQL expressions.
self._validate_transitions('on-complete')
self._validate_transitions('on-success')
self._validate_transitions('on-error')
def _validate_transitions(self, on_clause):
val = self._data.get(on_clause, [])
[self.validate_yaql_expr(t)
for t in ([val] if isinstance(val, six.string_types) else val)]
def get_policies(self):
return self._policies
def get_on_complete(self):
return self._on_complete
def get_on_success(self):
return self._on_success
def get_on_error(self):
return self._on_error