Source code for swimlane.core.fields.valueslist

import six

from swimlane.exceptions import ValidationError
from .base import MultiSelectField


[docs]class ValuesListField(MultiSelectField): field_type = ( 'Core.Models.Fields.ValuesListField, Core', 'Core.Models.Fields.ValuesList.ValuesListField, Core' ) supported_types = six.string_types def __init__(self, *args, **kwargs): """Map names to IDs for use in field rehydration""" super(ValuesListField, self).__init__(*args, **kwargs) self.selection_to_id_map = {f['name']: f['id'] for f in self.field_definition['values']}
[docs] def validate_value(self, value): """Validate provided value is one of the valid options""" super(ValuesListField, self).validate_value(value) if value is not None: if value not in self.selection_to_id_map: raise ValidationError( self.record, 'Field "{}" invalid value "{}". Valid options: {}'.format( self.name, value, ', '.join(self.selection_to_id_map.keys()) ) )
[docs] def get_batch_representation(self): """Return best batch process representation of field value""" return self.get_swimlane()
[docs] def cast_to_python(self, value): """Store actual value as internal representation""" if value is not None: if value['value'] in self.selection_to_id_map: return value['value'] return None
[docs] def cast_to_swimlane(self, value): """Rehydrate value back as full JSON representation""" if value is None: return value if value not in self.selection_to_id_map: return None return { '$type': 'Core.Models.Record.ValueSelection, Core', 'id': self.selection_to_id_map[value], 'value': value }
[docs] def cast_to_report(self, value): """Report format uses only the value's id""" value = super(ValuesListField, self).cast_to_report(value) if value: return value['id']
[docs] def cast_to_bulk_modify(self, value): """Bulk modify uses the normal Swimlane representation""" self.validate_value(value) return self.cast_to_swimlane(value)