diff --git a/pyproject.toml b/pyproject.toml index 6460427..24aa643 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "shipchain-common" -version = "1.0.29" +version = "1.0.30" description = "A PyPI package containing shared code for ShipChain's Python/Django projects." license = "Apache-2.0" diff --git a/src/shipchain_common/viewsets.py b/src/shipchain_common/viewsets.py index 4447e9e..dc684f7 100644 --- a/src/shipchain_common/viewsets.py +++ b/src/shipchain_common/viewsets.py @@ -232,7 +232,7 @@ def get_serializer(self, *args, **kwargs): """ serialization_type = kwargs.pop('serialization_type', mixins.SerializationType.REQUEST) serializer_class = self.get_serializer_class(serialization_type) - kwargs['context'] = self.get_serializer_context() + kwargs.setdefault('context', self.get_serializer_context()) return serializer_class(*args, **kwargs) # pylint: disable=arguments-differ diff --git a/tests/test_viewsets.py b/tests/test_viewsets.py index 33b852f..f294df5 100644 --- a/tests/test_viewsets.py +++ b/tests/test_viewsets.py @@ -10,6 +10,8 @@ from shipchain_common.mixins import SerializationType, MultiSerializerViewSetMixin, MultiPermissionViewSetMixin from shipchain_common.viewsets import ActionConfiguration, ConfigurableGenericViewSet +from rest_framework_json_api import serializers +from tests.django_mocking.models import EnumObject class FakePermission: @@ -55,6 +57,12 @@ class CustomActionCSVSerializer(DefaultSerializer): pass +class ModelSerializer(serializers.ModelSerializer): + class Meta: + model = EnumObject + fields = '__all__' + + class TestActionConfiguration: def test_validation_list(self): @@ -469,6 +477,18 @@ def test_configurable_generic_view_set(self, viewset): assert 'update' not in viewset.configuration assert 'update' not in viewset.action_user_permissions + def test_custom_context(self, viewset): + viewset.default_required_user_permissions = ['feature.default_permission'] + viewset.configuration = { + 'create': ActionConfiguration( + request_serializer=ModelSerializer + ), + } + + viewset.action = 'create' + serializer = viewset.get_serializer(context={'custom key': 'custom value'}) + assert serializer.context['custom key'] == 'custom value' + def test_configurable_generic_view_set_default_user_perms(self, viewset): viewset.default_required_user_permissions = ['feature.default_permission'] viewset.configuration = {