def check_data(project, data): """ Validate data from task['data'] """ if data is None: raise ValidationError('Task is empty (None)') replace_task_data_undefined_with_config_field(data, project) # iterate over data types from project for data_key, data_type in project.data_types.items(): if data_key not in data: raise ValidationError( '"{data_key}" key is expected in task data'.format( data_key=data_key)) expected_types = _DATA_TYPES.get(data_type, (str, )) if not isinstance(data[data_key], tuple(expected_types)): raise ValidationError( 'data["{data_key}"]={data_value} ' 'is of type "{type}", ' 'but types "{expected_types}" are expected'.format( data_key=data_key, data_value=data[data_key], type=type(data[data_key]), expected_types=expected_types)) if data_type == 'List': for item in data[data_key]: key = 'text' # FIXME: read key from config (elementValue from List) if key not in item: raise ValidationError( 'Each item from List must have key ' + key) return data
def to_representation(self, task): project = task.project data = task.data replace_task_data_undefined_with_config_field(data, project) return super().to_representation(task)
def check_data(project, data): """ Validate data from task['data'] """ if data is None: raise ValidationError('Task is empty (None)') replace_task_data_undefined_with_config_field(data, project) # iterate over data types from project for data_key, data_type in project.data_types.items(): if data_key not in data: raise ValidationError( '"{data_key}" key is expected in task data'.format( data_key=data_key)) expected_types = _DATA_TYPES.get(data_type, (str, )) if not isinstance(data[data_key], tuple(expected_types)): raise ValidationError( 'data[\'{data_key}\']={data_value} is of type \'{type}\', ' "but the object tag {data_type} expects the following types: {expected_types}" .format( data_key=data_key, data_value=data[data_key], type=type(data[data_key]).__name__, data_type=data_type, expected_types=[e.__name__ for e in expected_types])) if data_type == 'List': for item in data[data_key]: key = 'text' # FIXME: read key from config (elementValue from List) if key not in item: raise ValidationError( 'Each item from List must have key ' + key) return data
def to_representation(self, instance): project = instance.project if project: # resolve $undefined$ key in task data data = instance.data replace_task_data_undefined_with_config_field(data, project) return super().to_representation(instance)
def to_representation(self, task): project = task.project data = task.data # add interpolate_key_frames param to annotations serializer if 'annotations' in self.fields: self.fields['annotations'].context['interpolate_key_frames'] = self.context.get('interpolate_key_frames', False) replace_task_data_undefined_with_config_field(data, project) return super().to_representation(task)
def to_representation(self, instance): project = self.project(instance) if project: # resolve uri for storage (s3/gcs/etc) if self.context.get('resolve_uri', False): instance.data = instance.resolve_uri(instance.data, project) # resolve $undefined$ key in task data data = instance.data replace_task_data_undefined_with_config_field(data, project) return super().to_representation(instance)