Commit 2ca367a1 by Calen Pennington

Extract some common logic about dirty serializers into a helper method

parent 0ca11f64
...@@ -506,3 +506,13 @@ def shim_student_view(view_func, check_logged_in=False): ...@@ -506,3 +506,13 @@ def shim_student_view(view_func, check_logged_in=False):
return response return response
return _inner return _inner
def serializer_is_dirty(preference_serializer):
"""
Return True if saving the supplied (Raw)UserPreferenceSerializer would change the database.
"""
return (
preference_serializer.instance is None or
preference_serializer.instance.value != preference_serializer.validated_data['value']
)
...@@ -20,7 +20,7 @@ from ..errors import ( ...@@ -20,7 +20,7 @@ from ..errors import (
UserAPIInternalError, UserAPIRequestError, UserNotFound, UserNotAuthorized, UserAPIInternalError, UserAPIRequestError, UserNotFound, UserNotAuthorized,
PreferenceValidationError, PreferenceUpdateError, CountryCodeError PreferenceValidationError, PreferenceUpdateError, CountryCodeError
) )
from ..helpers import intercept_errors from ..helpers import intercept_errors, serializer_is_dirty
from ..models import UserOrgTag, UserPreference from ..models import UserOrgTag, UserPreference
from ..serializers import UserSerializer, RawUserPreferenceSerializer from ..serializers import UserSerializer, RawUserPreferenceSerializer
...@@ -143,7 +143,7 @@ def update_user_preferences(requesting_user, update, user=None): ...@@ -143,7 +143,7 @@ def update_user_preferences(requesting_user, update, user=None):
try: try:
serializer = serializers[preference_key] serializer = serializers[preference_key]
if serializer.instance is None or serializer.instance.value != serializer.validated_data['value']: if serializer_is_dirty(serializer):
serializer.save() serializer.save()
except Exception as error: except Exception as error:
raise _create_preference_update_error(preference_key, preference_value, error) raise _create_preference_update_error(preference_key, preference_value, error)
...@@ -179,7 +179,8 @@ def set_user_preference(requesting_user, preference_key, preference_value, usern ...@@ -179,7 +179,8 @@ def set_user_preference(requesting_user, preference_key, preference_value, usern
existing_user = _get_authorized_user(requesting_user, username) existing_user = _get_authorized_user(requesting_user, username)
serializer = create_user_preference_serializer(existing_user, preference_key, preference_value) serializer = create_user_preference_serializer(existing_user, preference_key, preference_value)
validate_user_preference_serializer(serializer, preference_key, preference_value) validate_user_preference_serializer(serializer, preference_key, preference_value)
if serializer.instance is None or serializer.instance.value != serializer.validated_data['value']:
if serializer_is_dirty(serializer):
try: try:
serializer.save() serializer.save()
except Exception as error: except Exception as error:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment