def _ref(context, template_name, parameter_name=None, id_only=None): service = context['?service'] data = None if not parameter_name: parameter_name = template_name # add special symbol to avoid collisions with regular parameters # and prevent it from overwriting '?service' context variable parameter_name = '#' + parameter_name if parameter_name in service.parameters: data = service.parameters[parameter_name] elif template_name in service.templates: data = helpers.evaluate(service.templates[template_name], context) service.parameters[parameter_name] = data if not isinstance(data, dict): return None if not isinstance(data.get('?', {}).get('id'), helpers.ObjectID): data.setdefault('?', {})['id'] = helpers.ObjectID() if id_only is None: id_only = False elif id_only is None: id_only = True if id_only: return data['?']['id'] else: return data
def extract_attributes(self): self.context.set_data(self.cleaned_data) for name, template in self.templates.iteritems(): self.context.set_data(template, name) if semantic_version.Version.coerce(self.spec_version) \ >= semantic_version.Version.coerce('2.2'): management_form = catalog_forms.WorkflowManagementForm.name name = self.context.get_data()[management_form]['application_name'] self.application['?']['name'] = name attributes = helpers.evaluate(self.application, self.context) return attributes
def extract_attributes(self): self.context['$'] = self.cleaned_data for name, template in self.templates.iteritems(): self.context[name] = template if semantic_version.Version.coerce(self.spec_version) \ >= semantic_version.Version.coerce('2.2'): management_form = catalog_forms.WF_MANAGEMENT_NAME name = self.context['$'][management_form]['application_name'] self.application['?']['name'] = name attributes = helpers.evaluate(self.application, self.context) return attributes
def extract_attributes(self): self.context['$'] = self.cleaned_data for name, template in six.iteritems(self.templates): self.context[name] = template if semantic_version.Version.coerce(self.spec_version) \ >= semantic_version.Version.coerce('2.2'): management_form = catalog_forms.WF_MANAGEMENT_NAME name = self.context['$'][management_form]['application_name'] self.application['?']['name'] = name attributes = helpers.evaluate(self.application, self.context) return attributes
def __init__(self, cleaned_data, version, fqn, forms=None, templates=None, application=None, parameters=None, **kwargs): self.cleaned_data = cleaned_data self.templates = templates or {} self.spec_version = str(version) if forms is None: forms = [] if application is None: raise ValueError('Application section is required') else: self.application = application self.context = legacy.create_context() self.context['?service'] = self yaql_functions.register(self.context) params = parameters or {} self.parameters = {} for k, v in six.iteritems(params): if not k or not k[0].isalpha(): continue v = helpers.evaluate(v, self.context) self.parameters[k] = v self.context[k] = v self.forms = [] for key, value in six.iteritems(kwargs): setattr(self, key, value) for form in forms: (name, field_specs, validators, region) = self.extract_form_data(form) # NOTE(kzaitsev) should be str (not unicode) under python2 # however it also works as str under python3 name = helpers.to_str(name) self._add_form(name, field_specs, validators, region) # Add ManageWorkflowForm workflow_form = catalog_forms.WorkflowManagementForm() if semantic_version.Version.coerce(self.spec_version) >= \ semantic_version.Version.coerce('2.2'): app_name_field = workflow_form.name_field(fqn) workflow_form.field_specs.insert(0, app_name_field) self._add_form(workflow_form.name, workflow_form.field_specs, workflow_form.validators)
def _repeat(context, template, times): for i in range(times): context['index'] = i + 1 yield helpers.evaluate(template, context)
def extract_attributes(self): self.context.set_data(self.cleaned_data) for name, template in self.templates.iteritems(): self.context.set_data(template, name) return helpers.evaluate(self.application, self.context)
def _repeat(context, template, times): for i in xrange(times): context.set_data(i + 1, '$index') yield helpers.evaluate(template(), context)