plone.restapi
plone.restapi copied to clipboard
CollectionFieldSerializer throws AttributeError if Catalog Object not available
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)