fix: Update discussions lti_configuration during provider_type change

Else, we risk updating it when we don't intend to, eg:
- changing from an LTI-backed provider (Piazza) to a non-LTI-backed
  provider (legacy)
  - the settings are no longer relevant
- changing from a non-LTI-backed provider (legacy) to an LTI-backed
  provider (Piazza)
  - the settings _are_ now relevant
This commit is contained in:
stvn
2021-04-15 18:40:52 -07:00
parent c1742b7b66
commit 33e499ea04

View File

@@ -150,6 +150,8 @@ class DiscussionsConfigurationView(APIView):
value = validated_data.get(key)
if value is not None:
setattr(instance, key, value)
# _update_* helpers assume `enabled` and `provider_type`
# have already been set
instance = self._update_lti(instance, validated_data)
instance.save()
return instance
@@ -159,15 +161,19 @@ class DiscussionsConfigurationView(APIView):
Update LtiConfiguration
"""
lti_configuration_data = validated_data.get('lti_configuration')
if lti_configuration_data:
instance.lti_configuration = instance.lti_configuration or LtiConfiguration()
lti_configuration = LtiSerializer(
instance.lti_configuration,
supports_lti = instance.supports('lti')
if not supports_lti:
instance.lti_configuration = None
elif lti_configuration_data:
lti_configuration = instance.lti_configuration or LtiConfiguration()
lti_serializer = LtiSerializer(
lti_configuration,
data=lti_configuration_data,
partial=True,
)
if lti_configuration.is_valid(raise_exception=True):
lti_configuration.save()
if lti_serializer.is_valid(raise_exception=True):
lti_serializer.save()
instance.lti_configuration = lti_configuration
return instance
# pylint: disable=redefined-builtin