From a8ad9c8d1a7ea8e0a3f1650beee06c7c604a9bee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=B4mulo=20Penido?= Date: Wed, 12 Feb 2025 14:41:46 -0300 Subject: [PATCH] fix: error when loading survey block without user in new runtime (#36226) * fix: always define a student_data_store to prevent errors on XBlock load * chore: bump xblock version to 5.1.2 --- openedx/core/djangoapps/xblock/runtime/runtime.py | 8 +++++--- requirements/edx/base.txt | 2 +- requirements/edx/development.txt | 2 +- requirements/edx/doc.txt | 2 +- requirements/edx/testing.txt | 2 +- 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/openedx/core/djangoapps/xblock/runtime/runtime.py b/openedx/core/djangoapps/xblock/runtime/runtime.py index 2bf84e9954..8829cedac7 100644 --- a/openedx/core/djangoapps/xblock/runtime/runtime.py +++ b/openedx/core/djangoapps/xblock/runtime/runtime.py @@ -18,7 +18,7 @@ from opaque_keys.edx.keys import UsageKeyV2, LearningContextKey from web_fragments.fragment import Fragment from xblock.core import XBlock from xblock.exceptions import NoSuchServiceError -from xblock.field_data import FieldData, SplitFieldData +from xblock.field_data import DictFieldData, FieldData, SplitFieldData from xblock.fields import Scope, ScopeIds from xblock.runtime import IdReader, KvsFieldData, MemoryIdManager, Runtime @@ -351,8 +351,10 @@ class XBlockRuntime(RuntimeShim, Runtime): Initialize the FieldData implementation for the specified XBlock """ if self.user is None: - # No user is specified, so we want to throw an error if anything attempts to read/write user-specific fields - student_data_store = None + # No user is specified, so we want to ignore any user-specific data. We cannot throw an + # error here because the XBlock loading process will write to the user_state if we have + # mutable fields. + student_data_store = DictFieldData({}) elif self.user.is_anonymous: # This is an anonymous (non-registered) user: assert isinstance(self.user_id, str) and self.user_id.startswith("anon") diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index fafc6ff17c..32f3638340 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -1252,7 +1252,7 @@ wheel==0.45.1 # via django-pipeline wrapt==1.17.2 # via -r requirements/edx/kernel.in -xblock[django]==5.1.1 +xblock[django]==5.1.2 # via # -r requirements/edx/kernel.in # acid-xblock diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt index 318464d448..93396ff1a3 100644 --- a/requirements/edx/development.txt +++ b/requirements/edx/development.txt @@ -2239,7 +2239,7 @@ wrapt==1.17.2 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -xblock[django]==5.1.1 +xblock[django]==5.1.2 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt diff --git a/requirements/edx/doc.txt b/requirements/edx/doc.txt index ddda43eb5b..b67891daf4 100644 --- a/requirements/edx/doc.txt +++ b/requirements/edx/doc.txt @@ -1573,7 +1573,7 @@ wheel==0.45.1 # django-pipeline wrapt==1.17.2 # via -r requirements/edx/base.txt -xblock[django]==5.1.1 +xblock[django]==5.1.2 # via # -r requirements/edx/base.txt # acid-xblock diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt index 6a727650fe..843e5b3757 100644 --- a/requirements/edx/testing.txt +++ b/requirements/edx/testing.txt @@ -1663,7 +1663,7 @@ wheel==0.45.1 # django-pipeline wrapt==1.17.2 # via -r requirements/edx/base.txt -xblock[django]==5.1.1 +xblock[django]==5.1.2 # via # -r requirements/edx/base.txt # acid-xblock