Esempio n. 1
0
    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
Esempio n. 2
0
    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)
Esempio n. 3
0
    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
Esempio n. 4
0
    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)
Esempio n. 5
0
    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)
Esempio n. 6
0
    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)