diff --git a/patchwork/api/__init__.py b/patchwork/api/__init__.py index ff42c46a..e69de29b 100644 --- a/patchwork/api/__init__.py +++ b/patchwork/api/__init__.py @@ -1,51 +0,0 @@ -# Patchwork - automated patch tracking system -# Copyright (C) 2020, Stephen Finucane -# -# SPDX-License-Identifier: GPL-2.0-or-later - -from rest_framework.fields import empty -from rest_framework.fields import get_attribute -from rest_framework.fields import SkipField -from rest_framework.relations import ManyRelatedField - - -# monkey patch django-rest-framework to work around issue #7550 [1] until #7574 -# [2] or some other variant lands -# -# [1] https://github.com/encode/django-rest-framework/issues/7550 -# [2] https://github.com/encode/django-rest-framework/pull/7574 - - -def _get_attribute(self, instance): - # Can't have any relationships if not created - if hasattr(instance, 'pk') and instance.pk is None: - return [] - - try: - relationship = get_attribute(instance, self.source_attrs) - except (KeyError, AttributeError) as exc: - if self.default is not empty: - return self.get_default() - if self.allow_null: - return None - if not self.required: - raise SkipField() - msg = ( - 'Got {exc_type} when attempting to get a value for field ' - '`{field}` on serializer `{serializer}`.\nThe serializer ' - 'field might be named incorrectly and not match ' - 'any attribute or key on the `{instance}` instance.\n' - 'Original exception text was: {exc}.'.format( - exc_type=type(exc).__name__, - field=self.field_name, - serializer=self.parent.__class__.__name__, - instance=instance.__class__.__name__, - exc=exc, - ) - ) - raise type(exc)(msg) - - return relationship.all() if hasattr(relationship, 'all') else relationship - - -ManyRelatedField.get_attribute = _get_attribute