-
Notifications
You must be signed in to change notification settings - Fork 217
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[DEPR]: Support for XBlock Runtimes with raw string scope IDs #784
Comments
@bradenmacdonald we talked a few months ago about making this change. Here's a formal DEPR for it. @ormsbee , my understanding and my research indicates that edx-platform will be completely unaffected by this. Let me know if you disagree. @robrap , just a heads up that I plan to bring this up at the edx-platform maintenance WG meeting on Thursday. I'm going to propose that the 6-month waiting period be waived since this shouldn't impact 2U, or any other known site operator for that matter. |
Thanks @kdmccormick. Thoughts:
|
@kdmccormick: I had totally forgotten this still existed. 😱 No objections. |
@robrap Sounds good. Task list updated 👍🏻 |
This is now Accepted. I will work through the removal steps listed above, hopefully soon, definitely before the Sumac cutoff. |
In other words: Starting with XBlock 6.0.0, we will assume that XBlock Scope IDs are instances of OpaqueKey.
(Most if not all people can ignore this DEPR. Only operators with entirely custom XBlock Runtime implementations need to pay attention. We're actually not aware of any such custom Runtime implementations currently, so this DEPR is most likely just a formality.)
Proposal Date
Proposed 2024-08-27
Communicated 2024-09-02
Target Ticket Acceptance Date
2024-09-11
Earliest Open edX Named Release Without This Functionality
Sumac (master: Late Sept 2024)
Rationale
History
edx-platform was created circa 20211 and the XBlock framework was created circa 2012. Originally, those systems used carefully-formatted strings (
str
instances) to identify XBlocks in various contexts:Circa 2014, in order to deal with the fragility and complexity of those strings in the light of a major overhaul of edx-platform's MongoDB schema (from "old" ModuleStore to "split" ModuleStore), we created the opaque-keys package. An OpaqueKey is a value object which identifies an XBlock scope and has a well-defined string representation; each subclass of OpaqueKey identifies a different kind of scope. Specifically, in this new system:
edx-platform was completely migrated over from string IDs to OpaqueKey IDs and has exclusively used opaque-keys for the past decade.
However, this migration was never represented in the XBlock framework. In theory, any object can be used as an XBlock scope ID. XBlock tests still use string IDs, as does the xblock workbench. In practice, though, edx-platform is the only production XBlock runtime that any of us are aware of, so in the real world XBlocks are all running with OpaqueKey scope IDs rather than string scope IDs.
Rationale for now assuming that scope IDs are OpaqueKeys
As an XBlock developer, it is confusing that the XBlock documentation makes no mention of OpaqueKeys, and it is strange and unhelpful that the XBlock Workbench identifies blocks in a way that is inconsistent from edx-platform.
Furthermore, we are adding type annotations to the XBlock package. The type annotations would be significantly less potent and instructive if they had to support string IDs: they would all be typed as
object
orAny
, so edx-platform would need to disable mypy with# type: ignore
wherever it treated an ID is an OpaqueKey. However, once we assume that scope IDs are all OpaqueKeys, we can annotate various XBlock API signatures withLearningContextKey
,UsageKey
,DefinitionKey
, etc.. This will allow for stronger correctness checking in CI, better documentation for core and plugin developers, and more accurate code intelligence for developers using IDEs.Removal
Beginning in XBlock 6.0.0:
opaque_keys.edx.UsageKey
.opaque_keys.edx.DefinitionKey
.MemoryIdManager
will generate instances ofUsageKey
andDefinitionKey
, as appropriate, rather thanstr
.Replacement
N/A
Deprecation
In the interest of making it easy to update unit tests, we will make the XBlock API raise obvious assertion errors wherever the new scope-IDs-are-OpaqueKeys assumption is violated.
We do not plan to raise warnings ahead of time. We believe that only the XBlock Workbench (xblock-sdk) is in violation of this assumption, and Axim will take care of fixing it.
Migration
If any production XBlock Runtimes exist using string scope IDs, those IDs can be substituted with OpaqueKey instances whose
__str__
methods generate identical scope IDs. We do not expect any such Runtimes to exist, though. If you know of one and need help understanding the migration, please reach out.Additional Info
None
Task List
edx-platform repo
Constrain XBlock to < 6:
XBlock repo
assert
statements to certain constructors to ensure that IDs are OpaqueKeys.XBlock/xblock/core.py
Lines 442 to 444 in 19e7527
xblock-sdk repo
back to the edx-platform repo
The text was updated successfully, but these errors were encountered: