plone.restapi icon indicating copy to clipboard operation
plone.restapi copied to clipboard

CollectionFieldSerializer throws AttributeError if Catalog Object not available

Open 1letter opened this issue 3 years ago • 0 comments

CatalogSource in a vocabulary might not serialize if the target object, out of whichever reasons, is deleted. Extends the error handling with an AttributeError:

@adapter(ICollection, IDexterityContent, Interface)
@implementer(IFieldSerializer)
class CollectionFieldSerializer(DefaultFieldSerializer):
    def __call__(self):
        # Binding is necessary for named vocabularies
        if IField.providedBy(self.field):
            self.field = self.field.bind(self.context)
        value = self.get_value()
        value_type = self.field.value_type
        if (
            value is not None
            and IChoice.providedBy(value_type)
            and IVocabularyTokenized.providedBy(value_type.vocabulary)
        ):
            values = []
            for v in value:
                try:
                    term = value_type.vocabulary.getTerm(v)
                    values.append({"token": term.token, "title": term.title})
                except (LookupError, AttributeError):
                    log.warning("Term lookup error: %r" % v)
            value = values
        return json_compatible(value)

1letter avatar May 05 '22 14:05 1letter