Skip to content

Refactor or deprecate parent-child relationships between XBlocks #729

@kdmccormick

Description

@kdmccormick

This would be a long-term initiative. It probably belongs on the platform-roadmap.

Context

We have decided that parent-child relationships should only exist at/below the VerticalBlock: https://github.com/openedx/edx-platform/blob/master/docs/decisions/0006-role-of-xblock.rst

We have further discussed that parent-child relationships in their entirety should be removed; I'm not sure if we came to a consensus on that.

TODO -- Add more context ( @ormsbee , @kdmccormick , and @bradenmacdonald ).

Tasks

Off the top of my head...

  • File a DEPR encompassing our plan to:
    • Remove parent-child relationships on the base XBlock class. Delete the _HasChildrenMetaclass. Move all parent-child logic to a new subclass, XBlockWithChildren. Make it XBlock.has_children a read-only class property. Some details.
    • Raise an exception if get_parent is called at or above the VerticalBlock level.
    • For all XBlockWithChildren subclasses above the VerticalBlock (so, CourseBlock, SectionBlock, and SequenceBlock): Move their implementations to either Learning Core or edx-platform djangoapps.
  • Decide: Should parent-child relationships still exist at/below the Vertical block?
    • Either way -> ADR it.
    • Yes -> We're done.
    • No -> File another DEPR encompassing our plan to:
      • Raise deprecation warnings on the XBlockWithChildren class.
      • For all remaining XBlockWithChildren subclasses in edx-platform (eg, LibraryContentBlock, SplitTestBlock):
        Move their implementations to either Learning Core or edx-platform djangoapps.
      • Write guidance on how custom XBlockWithChildren subclasses can be similarly migrated. Ensure that, for example, OpenCraft's ProblemBuilder block can be migrated using this guide.
      • Delete the XBlockWithChildren class, and delete all parent-child logic from the XBlock repository.
      • Delete all parent-child logic from modulestore and edx-platform's XBlock runtimes.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions