Extract some common logic about dirty serializers into a helper method

This commit is contained in:
Calen Pennington
2017-04-28 15:41:03 -04:00
parent 0ca11f6428
commit 2ca367a147
2 changed files with 14 additions and 3 deletions

View File

@@ -506,3 +506,13 @@ def shim_student_view(view_func, check_logged_in=False):
return response
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']
)

View File

@@ -20,7 +20,7 @@ from ..errors import (
UserAPIInternalError, UserAPIRequestError, UserNotFound, UserNotAuthorized,
PreferenceValidationError, PreferenceUpdateError, CountryCodeError
)
from ..helpers import intercept_errors
from ..helpers import intercept_errors, serializer_is_dirty
from ..models import UserOrgTag, UserPreference
from ..serializers import UserSerializer, RawUserPreferenceSerializer
@@ -143,7 +143,7 @@ def update_user_preferences(requesting_user, update, user=None):
try:
serializer = serializers[preference_key]
if serializer.instance is None or serializer.instance.value != serializer.validated_data['value']:
if serializer_is_dirty(serializer):
serializer.save()
except Exception as 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
existing_user = _get_authorized_user(requesting_user, username)
serializer = create_user_preference_serializer(existing_user, 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:
serializer.save()
except Exception as error: