From 2ca367a14796f535c7d0270a13f4c8b0009c400f Mon Sep 17 00:00:00 2001 From: Calen Pennington Date: Fri, 28 Apr 2017 15:41:03 -0400 Subject: [PATCH] Extract some common logic about dirty serializers into a helper method --- openedx/core/djangoapps/user_api/helpers.py | 10 ++++++++++ openedx/core/djangoapps/user_api/preferences/api.py | 7 ++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/openedx/core/djangoapps/user_api/helpers.py b/openedx/core/djangoapps/user_api/helpers.py index 230957fc09..d9459b1f59 100644 --- a/openedx/core/djangoapps/user_api/helpers.py +++ b/openedx/core/djangoapps/user_api/helpers.py @@ -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'] + ) diff --git a/openedx/core/djangoapps/user_api/preferences/api.py b/openedx/core/djangoapps/user_api/preferences/api.py index a017d91252..ed6e530a66 100644 --- a/openedx/core/djangoapps/user_api/preferences/api.py +++ b/openedx/core/djangoapps/user_api/preferences/api.py @@ -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: