Replace a Preinstalled XBlock With a Custom Implementation#
In XBlock v5.1.0
, the ability was introduced to override an XBlock with a custom
implementation.
This can be done by:
Creating an XBlock in a new or existing package installed into
edx-platform
.Adding the
xblock.v1.overrides
entry point insetup.py
, pointing to your custom XBlock.
This works with updated logic in load_class
’s default_select
, which gives
load priority to a class with the .overrides
suffix.
This can be disabled by providing a different select
kwarg to load_class
which
ignores or otherwise changes override logic.
Example#
Imagine there is an XBlock installed edx-platform
:
# edx-platform/xblocks/video_block.py
class VideoBlock(XBlock):
...
# edx-platform/setup.py
setup(
# ...
entry_points={
"xblock.v1": [
"video = xblocks.video_block:VideoBlock"
# ...
]
}
)
If you then create your own Python package with a custom version of that XBlock…
# your_plugin/xblocks/video_block.py
class YourVideoBlock(XBlock):
...
# your_plugin/setup.py
setup(
# ...
entry_points={
"xblock.v1.overrides": [
"video = your_plugin.xblocks.video_block:YourVideoBlock"
# ...
],
}
)
And install that package into your virtual environment, then your block should be loaded instead of the existing implementation.
Note
The load_class
code will throw an error in the following cases:
There are multiple classes attempting to override one XBlock implementation.
There is an override provided where an existing XBlock implementation is not found.