refactor: Move discussions api LTI serialization logic

This commit is contained in:
stvn
2021-04-07 19:57:00 -07:00
parent 442a8a52cd
commit 67e045b5e0

View File

@@ -41,6 +41,31 @@ class LtiSerializer(serializers.ModelSerializer):
'version',
]
def to_internal_value(self, data: dict) -> dict:
"""
Transform the incoming primitive data into a native value
"""
data = data or {}
payload = {
key: value
for key, value in data.items()
if key in self.Meta.fields
}
return payload
def update(self, instance: LtiConfiguration, validated_data: dict) -> LtiConfiguration:
"""
Create/update a model-backed instance
"""
instance = instance or LtiConfiguration()
instance.config_store = LtiConfiguration.CONFIG_ON_DB
if validated_data:
for key, value in validated_data.items():
if key in self.Meta.fields:
setattr(instance, key, value)
instance.save()
return instance
@view_auth_classes()
class DiscussionsConfigurationView(APIView):
@@ -114,19 +139,24 @@ class DiscussionsConfigurationView(APIView):
value = validated_data.get(key)
if value is not None:
setattr(instance, key, value)
instance = self._update_lti(instance, validated_data)
instance.save()
return instance
def _update_lti(self, instance: DiscussionsConfiguration, validated_data: dict) -> DiscussionsConfiguration:
"""
Update LtiConfiguration
"""
lti_configuration_data = validated_data.get('lti_configuration')
if lti_configuration_data:
lti_key = lti_configuration_data.get('lti_1p1_client_key')
lti_secret = lti_configuration_data.get('lti_1p1_client_secret')
lti_url = lti_configuration_data.get('lti_1p1_launch_url')
lti_configuration = instance.lti_configuration or LtiConfiguration()
lti_configuration.config_store = LtiConfiguration.CONFIG_ON_DB
lti_configuration.lti_1p1_client_key = lti_key
lti_configuration.lti_1p1_client_secret = lti_secret
lti_configuration.lti_1p1_launch_url = lti_url
lti_configuration.save()
instance.lti_configuration = lti_configuration
instance.save()
instance.lti_configuration = instance.lti_configuration or LtiConfiguration()
lti_configuration = LtiSerializer(
instance.lti_configuration,
data=lti_configuration_data,
partial=True,
)
if lti_configuration.is_valid(raise_exception=True):
lti_configuration.save()
return instance
# pylint: disable=redefined-builtin