After we merged this PR: https://github.com/openedx/edx-platform/pull/33920 this error began popping up in logs: Unable to load XBlock 'staffgradedxblock' .... ImportError: cannot import name 'get_course_blocks' from partially initialized module 'lms.djangoapps.course_blocks.api' (most likely due to a circular import) ... The root cause was the new imports of `derived_key` and `BlockKey` into xmodule/library_content_block.py. Those new imports come from xmodule/modulestore/store_utilities.py, which runs `XBlock.load_classes()` at the module level, which fails because we are still in the process of loading xmodule/library_content_block. As a solution, we move both `derived_key` and `BlockKey` to xmodule/util/keys.py. We could potentially move that file to opaque-keys eventually, depending on how well we think that those concepts generalize. Also: * We rename the function from derived_key to derive_key, as functions should be verbs. * We combine the first to parameters of derive_key (a source ContextKey and a source BlockKey) into a single parameter (a source UsageKey). In my opinion, this makes the function call easier to understand.
11 lines
314 B
Python
11 lines
314 B
Python
"""
|
|
General utilities
|
|
"""
|
|
from collections import namedtuple
|
|
|
|
# We import BlockKey here for backwards compatibility with modulestore code.
|
|
# Feel free to remove this and fix the imports if you have time.
|
|
from xmodule.util.keys import BlockKey
|
|
|
|
CourseEnvelope = namedtuple('CourseEnvelope', 'course_key structure')
|