Commit 0f6ef444 by Calen Pennington

Don't pass in a user object to DjangoUserStateClient

parent 69772ef2
...@@ -44,7 +44,13 @@ class DjangoXBlockUserStateClient(XBlockUserStateClient): ...@@ -44,7 +44,13 @@ class DjangoXBlockUserStateClient(XBlockUserStateClient):
""" """
pass pass
def __init__(self, user): def __init__(self, user=None):
"""
Arguments:
user (:class:`~User`): An already-loaded django user. If this user matches the username
supplied to `set_many`, then that will reduce the number of queries made to store
the user state.
"""
self.user = user self.user = user
@contract( @contract(
...@@ -69,7 +75,6 @@ class DjangoXBlockUserStateClient(XBlockUserStateClient): ...@@ -69,7 +75,6 @@ class DjangoXBlockUserStateClient(XBlockUserStateClient):
Raises: Raises:
DoesNotExist if no entry is found. DoesNotExist if no entry is found.
""" """
assert self.user.username == username
try: try:
_usage_key, state = next(self.get_many(username, [block_key], scope, fields=fields)) _usage_key, state = next(self.get_many(username, [block_key], scope, fields=fields))
except StopIteration: except StopIteration:
...@@ -88,7 +93,6 @@ class DjangoXBlockUserStateClient(XBlockUserStateClient): ...@@ -88,7 +93,6 @@ class DjangoXBlockUserStateClient(XBlockUserStateClient):
state (dict): A dictionary mapping field names to values state (dict): A dictionary mapping field names to values
scope (Scope): The scope to load data from scope (Scope): The scope to load data from
""" """
assert self.user.username == username
self.set_many(username, {block_key: state}, scope) self.set_many(username, {block_key: state}, scope)
@contract( @contract(
...@@ -107,7 +111,6 @@ class DjangoXBlockUserStateClient(XBlockUserStateClient): ...@@ -107,7 +111,6 @@ class DjangoXBlockUserStateClient(XBlockUserStateClient):
scope (Scope): The scope to delete data from scope (Scope): The scope to delete data from
fields: A list of fields to delete. If None, delete all stored fields. fields: A list of fields to delete. If None, delete all stored fields.
""" """
assert self.user.username == username
return self.delete_many(username, [block_key], scope, fields=fields) return self.delete_many(username, [block_key], scope, fields=fields)
@contract( @contract(
...@@ -183,7 +186,6 @@ class DjangoXBlockUserStateClient(XBlockUserStateClient): ...@@ -183,7 +186,6 @@ class DjangoXBlockUserStateClient(XBlockUserStateClient):
(UsageKey, field_state) tuples for each specified UsageKey in block_keys. (UsageKey, field_state) tuples for each specified UsageKey in block_keys.
field_state is a dict mapping field names to values. field_state is a dict mapping field names to values.
""" """
assert self.user.username == username
if scope != Scope.user_state: if scope != Scope.user_state:
raise ValueError("Only Scope.user_state is supported, not {}".format(scope)) raise ValueError("Only Scope.user_state is supported, not {}".format(scope))
...@@ -208,7 +210,6 @@ class DjangoXBlockUserStateClient(XBlockUserStateClient): ...@@ -208,7 +210,6 @@ class DjangoXBlockUserStateClient(XBlockUserStateClient):
:meth:`delete` or :meth:`delete_many`. :meth:`delete` or :meth:`delete_many`.
scope (Scope): The scope to load data from scope (Scope): The scope to load data from
""" """
assert self.user.username == username
if scope != Scope.user_state: if scope != Scope.user_state:
raise ValueError("Only Scope.user_state is supported") raise ValueError("Only Scope.user_state is supported")
...@@ -216,7 +217,11 @@ class DjangoXBlockUserStateClient(XBlockUserStateClient): ...@@ -216,7 +217,11 @@ class DjangoXBlockUserStateClient(XBlockUserStateClient):
# that were queried in get_many) so that if the score has # that were queried in get_many) so that if the score has
# been changed by some other piece of the code, we don't overwrite # been changed by some other piece of the code, we don't overwrite
# that score. # that score.
user = User.objects.get(username=username) if self.user.username == username:
user = self.user
else:
user = User.objects.get(username=username)
for usage_key, state in block_keys_to_state.items(): for usage_key, state in block_keys_to_state.items():
student_module, created = StudentModule.objects.get_or_create( student_module, created = StudentModule.objects.get_or_create(
student=user, student=user,
...@@ -254,7 +259,6 @@ class DjangoXBlockUserStateClient(XBlockUserStateClient): ...@@ -254,7 +259,6 @@ class DjangoXBlockUserStateClient(XBlockUserStateClient):
scope (Scope): The scope to delete data from scope (Scope): The scope to delete data from
fields: A list of fields to delete. If None, delete all stored fields. fields: A list of fields to delete. If None, delete all stored fields.
""" """
assert self.user.username == username
if scope != Scope.user_state: if scope != Scope.user_state:
raise ValueError("Only Scope.user_state is supported") raise ValueError("Only Scope.user_state is supported")
...@@ -293,7 +297,6 @@ class DjangoXBlockUserStateClient(XBlockUserStateClient): ...@@ -293,7 +297,6 @@ class DjangoXBlockUserStateClient(XBlockUserStateClient):
Yields: tuples of (block, field_name, modified_date) for each selected field. Yields: tuples of (block, field_name, modified_date) for each selected field.
""" """
assert self.user.username == username
if scope != Scope.user_state: if scope != Scope.user_state:
raise ValueError("Only Scope.user_state is supported") raise ValueError("Only Scope.user_state is supported")
...@@ -317,7 +320,6 @@ class DjangoXBlockUserStateClient(XBlockUserStateClient): ...@@ -317,7 +320,6 @@ class DjangoXBlockUserStateClient(XBlockUserStateClient):
scope (Scope): The scope to load data from scope (Scope): The scope to load data from
""" """
assert self.user.username == username
if scope != Scope.user_state: if scope != Scope.user_state:
raise ValueError("Only Scope.user_state is supported") raise ValueError("Only Scope.user_state is supported")
student_modules = list( student_modules = list(
......
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