From 8eacbf7caf47b20fab70c4751cee826f82696ee1 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Fri, 17 May 2019 20:10:45 +0200 Subject: [PATCH 3/5] workflows: ease filtering common fields of related formdefs (#33186) --- wcs/workflows.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/wcs/workflows.py b/wcs/workflows.py index 0c3fcbe7..58b6c24d 100644 --- a/wcs/workflows.py +++ b/wcs/workflows.py @@ -783,6 +783,36 @@ class Workflow(StorableObject): def formdefs(self): return FormDef.select(lambda formdef: formdef.workflow_id == self.id) + @property + def formdefs_common_fields(self): + '''Only keep fields from related formdefs which share their varname, label and type''' + fields = collections.OrderedDict() + formdefs = self.formdefs + + if formdefs: + for field in (formdefs[0].fields or []): + if field.varname and field.label: + fields[field.varname] = field + + for formdef in formdefs[1:]: + for field in formdef.fields or []: + if field.varname not in fields: + continue + if field.varname in fields: + first_field = fields[field.varname] + if first_field.label != field.label or first_field.type != field.type: + del fields[field.varname] + + for field in self.get_backoffice_fields(): + if not field.varname: + continue + if field.varname in fields: + del fields[field.varname] + fields[field.varname] = field + + return fields + + class XmlSerialisable(object): node_name = None key = None -- 2.20.1