Skip to content

Comments

feat: support component static files and update create_next_version f…#401

Merged
ormsbee merged 4 commits intoopenedx:mainfrom
WGU-Open-edX:dwong2708/lp_load_static_files
Oct 4, 2025
Merged

feat: support component static files and update create_next_version f…#401
ormsbee merged 4 commits intoopenedx:mainfrom
WGU-Open-edX:dwong2708/lp_load_static_files

Conversation

@dwong2708
Copy link
Contributor

@dwong2708 dwong2708 commented Oct 1, 2025

Resolves: #384 and #400

Changes

  • Add support for component static files.
  • Update create_next_version_* APIs to accept a new parameter force_version_num, which keeps the provided version number instead of auto-incrementing.

Input:
test2.zip

Output:
Component versions
image

HTML component
image

HTML component - v4 and static files

image

@openedx-webhooks openedx-webhooks added the open-source-contribution PR author is not from Axim or 2U label Oct 1, 2025
@openedx-webhooks
Copy link

openedx-webhooks commented Oct 1, 2025

Thanks for the pull request, @dwong2708!

This repository is currently maintained by @axim-engineering.

Once you've gone through the following steps feel free to tag them in a comment and let them know that your changes are ready for engineering review.

🔘 Get product approval

If you haven't already, check this list to see if your contribution needs to go through the product review process.

  • If it does, you'll need to submit a product proposal for your contribution, and have it reviewed by the Product Working Group.
    • This process (including the steps you'll need to take) is documented here.
  • If it doesn't, simply proceed with the next step.
🔘 Provide context

To help your reviewers and other members of the community understand the purpose and larger context of your changes, feel free to add as much of the following information to the PR description as you can:

  • Dependencies

    This PR must be merged before / after / at the same time as ...

  • Blockers

    This PR is waiting for OEP-1234 to be accepted.

  • Timeline information

    This PR must be merged by XX date because ...

  • Partner information

    This is for a course on edx.org.

  • Supporting documentation
  • Relevant Open edX discussion forum threads
🔘 Get a green build

If one or more checks are failing, continue working on your changes until this is no longer the case and your build turns green.

Details
Where can I find more information?

If you'd like to get more details on all aspects of the review process for open source pull requests (OSPRs), check out the following resources:

When can I expect my changes to be merged?

Our goal is to get community contributions seen and reviewed as efficiently as possible.

However, the amount of time that it takes to review and merge a PR can vary significantly based on factors such as:

  • The size and impact of the changes that it introduces
  • The need for product review
  • Maintenance status of the parent repository

💡 As a result it may take up to several weeks or months to complete a review and merge your PR.

@dwong2708
Copy link
Contributor Author

Hi @ormsbee , would you mind taking a look at the create_next_version changes? I’d like to confirm if you’re good with this approach or if you think it should be adjusted. If it looks fine, I’ll go ahead and add the tests.

@dwong2708 dwong2708 requested a review from ormsbee October 1, 2025 23:17
@ormsbee
Copy link
Contributor

ormsbee commented Oct 2, 2025

@dwong2708: This PR is still marked as being in Draft status. Is it ready for review?

@dwong2708 dwong2708 marked this pull request as ready for review October 2, 2025 16:48
@dwong2708
Copy link
Contributor Author

@dwong2708: This PR is still marked as being in Draft status. Is it ready for review?

Ready to review now @ormsbee . Thank you.

@mphilbrick211 mphilbrick211 added the mao-onboarding Reviewing this will help onboard devs from an Axim mission-aligned organization (MAO). label Oct 2, 2025
@mphilbrick211 mphilbrick211 moved this from Needs Triage to Ready for Review in Contributions Oct 2, 2025
created_by: int | None,
container_version_cls: type[ContainerVersionModel] = ContainerVersion, # type: ignore[assignment]
entities_action: ChildrenEntitiesAction = ChildrenEntitiesAction.REPLACE,
force_version_num: int | None = None,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add an entry for this in the Args: part of the docstring, and explain why someone would use it. Please do the same for all other functions where this has been added as an optional arg.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changes applied. Thank you.

Comment on lines 715 to 716
if not num_version:
return resolved_files
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add a comment that explains the reasoning for this.

Copy link
Contributor Author

@dwong2708 dwong2708 Oct 3, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it is no longer needed since it was already validated in the serializers. I adjusted it. Thanks

content_to_replace = self._resolve_static_files(valid_draft, entity_key, component_static_files)
components_api.create_next_component_version(
self.components_map_by_key[entity_key].publishable_entity.id,
content_to_replace=content_to_replace,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will this do the right thing if I have a file in a published version and that file is not there in the draft version? The content_to_replace param is basically a diff, so if we'd need to do something like:

content_to_replace_for_published = {
    'static/profile.webp': Content(),
    'static/background.webp': Content(),
}

# after we create the published version data, make the replacement
# dict remove all the static assets
content_to_replace_for_draft = {
    key: None for key in content_to_replace_for_published
}

# now selectively re-add the stuff that appears in the draft version
content_to_replace_for_draft['static/new_image.web'] = Content()

Actually, now that I think on it, maybe we could make an optional "ignore_previous_content" param to create_next_component_version? So if ignore_previous_content=True, we could skip this whole section:

https://github.com/openedx/openedx-learning/blob/312d02474dfe7fdc7883d2c733f190c5fa84051f/openedx_learning/apps/authoring/components/api.py#L244-L254

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wonderful. ignore_previous_content makes the implementation easier to handle this case. Thank you

)

def test_create_next_version_forcing_num_version(self):
"""Test creating a next version with a forced version number."""
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please expand this test to include adding content to it and having different content between the two versions that are created.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Applied. Thanks

@dwong2708 dwong2708 requested a review from ormsbee October 3, 2025 19:15
@ormsbee ormsbee merged commit fa41661 into openedx:main Oct 4, 2025
11 checks passed
@github-project-automation github-project-automation bot moved this from Ready for Review to Done in Contributions Oct 4, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

mao-onboarding Reviewing this will help onboard devs from an Axim mission-aligned organization (MAO). open-source-contribution PR author is not from Axim or 2U

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

Restore Static Files from components

4 participants