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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user