test: PR checks for ulmo.1 branch#295
Open
viv-helix wants to merge 450 commits into
Open
Conversation
* feat: add games to beta component types * feat: auto-open editor on block creation --------- Co-authored-by: pganesh-apphelix <pganesh-apphelix@2U.com>
Re-compilation and upgrade-package should be able to run without updating the common_constraints.txt file. We do this all the time when backporting fixes to older releases. We shouldn't pull in the latest common_constraints.txt in those cases as they may not be compatible with older releases.
…t_backport build: Don't update common_constraints.txt on re-compilation.
…7796) For legacy library_content references in courses, this PR: - **Removes the spurious sync after updating a reference to a migrated library**, so that users don't need to "update" their content _after_ updating their reference, _unless_ there were real content edits that happened since they last synced. We do this by correctly associating a DraftChangeLogRecord with the ModulestoreBlockSource migration artifact, and then comparing that version information before offering a sync. (related issue: openedx/frontend-app-authoring#2626). - **Prompts users to update a reference to a migrated library with higher priority than prompting them to sync legacy content updates for that reference**, so that users don't end up needing to accept legacy content updates in order to get a to a point where they can update to V2 content. - **Ensures the library references in courses always follow the correct migration,** as defined by the data `forwarded` fields in the data model, which are populated based on the REST API spec and the stated product UI requirements. For the migration itself, this PR: - **Allows non-admins to migrate libraries**, fixing: openedx#37774 - **When triggered via the UI, ensures the migration uses nice title-based target slugs instead of ugly source-hash-based slugs.** We've had this as an option for a long time, but preserve_url_slugs defaulted to True instead of False in the REST API serializer, so we weren't taking advantage of it. - **Unifies logic between single-source and bulk migration**. These were implement as two separate code paths, with drift in their implementations. In particular, the collection update-vs-create-new logic was completely different for single-souce vs. bulk. - **When using the Skip or Update strategies for repeats, it consistently follows mappings established by the latest successful migration** rather than following mappings across arbitrary previous migrations. - **We log unexpected exceptions more often**, although there is so much more room for improvement here. - **Adds more validation to the REST API** so that client mistakes more often become 400s with validation messages rather than 500s. For developers, this PR: - Adds unit tests to the REST API - Ensures that all migration business logic now goes through a general-purpose Python API. - Ensures that the data model (specifically `forwarded`, and `change_log_record`) is now populated and respected. - Adds more type annotations. Backports: 91e521e Backport note: Compared to the original commit, this backport commit excludes the REST APIs which were not defined at the time of the Ulmo cutoff: * /api/v1/modulestore_migrator/libraries * /api/v1/modulestore_migrator/migration_info * /api/v1/modulestore_migrator/migration_blocks
This is to fix an issue in the following common migration situation: 1. An existing course references content in a legacy content library. 2. The legacy content library is migrated to the new library system. 3. The user clicks on "Update reference" from the Randomized Content Block in the course. This action is supposed to update the children of the LibraryContentBlock (usually ProblemBlocks) so that the "upstream" attribute is set to point at the UsageKeys of the content in the new libraries they were migrated to. What was happening instead was that the upstream entries for these child blocks were left blank, breaking the upstream/sync connection and making it so that the courses did not receive any updates from the migrated libraries. There were two issues: 1. get_forwarding_for_blocks() was being called with the child UsageKeys in the course, when it should have been called with the v1 library usage keys instead (since those are the things being forwarded). 2. We were checking that the target_key was a v2 Library key, but really the upstream target_key is supposed to be a LibraryUsageLocatorV2, i.e. the key of the specific piece of content, not the library it ended up in. Note on testing: Although there were unit tests for the migration of legacy content libraries, there were not any unit tests for the migration of legacy library *blocks*. This commit adds a minimal test, which would have caught the bug we're fixing. It would be good to add more comprehensive testing unit testing for this part of the migration flow. --------- Co-authored-by: Kyle McCormick <kyle@axim.org>
Implements soft delete functionality for discussion threads, responses, and comments using the is_deleted flag instead of permanently deleting records. This enables safe deletion and restoration of discussion content while preserving existing data.
This commit migrates the data calculation logic for the GradeSummary table, which was previously in the frontend-app-learning. This commit also introduces a new visibility option for assignment scores: “Never show individual assessment results, but show overall assessment results after the due date.” With this option, learners cannot see question-level correctness or scores at any time. However, once the due date has passed, they can view their overall score in the total grades section on the Progress page. These two changes are coupled with each other because it compromises the integrity of this data to do the score hiding logic on the front end. The corresponding frontend PR is: openedx/frontend-app-learning#1797 Co-authored-by: Muhammad Anas <88967643+Anas12091101@users.noreply.github.com>
* fix: improve beta label contrast in gamesxblock * fix: address copilot comment Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
There is a singleton SplitMongoModuleStore instance that is returned whenever we call the ubiquitous modulestore() function (wrapped in a MixedModuleStore). During initialization, SplitMongoModuleStore sets up a small handful of XBlock runtime services that are intended to be shared globally: i18n, fs, cache. When we get an individual block back from the store using get_item(), SplitMongoModuleStore creates a SplitModuleStoreRuntime using SplitMongoModuleStore.create_runtime(). These runtimes are intended to be modified on a per-item, and later per-user basis (using prepare_runtime_for_user()). Prior to this commit, the create_runtime() method was assigning the globally shared SplitMongoModuleStore.services dict directly to the newly instantiated SplitModuleStoreRuntime. This meant that even though each block had its own _services dict, they were all in fact pointing to the same underlying object. This exposed us to a risk of multiple threads contaminating each other's SplitModuleStoreRuntime services when deployed under load in multithreaded mode. We believe this led to a race condition that caused student submissions to be mis-scored in some cases. This commit makes a copy of the SplitMongoModuleStore.services dict for each SplitModuleStoreRuntime. The baseline global services are still shared, but other per-item and per-user services are now better isolated from each other. This commit also includes a small modification to the PartitionService, which up until this point had relied on the (incorrect) shared instance behavior. The details are provided in the comments in the PartitionService __init__(). It's worth noting that the historical rationale for having a singleton ModuleStore instance is that the ModuleStore used to be extremely expensive to initialize. This was because at one point, the init process required reading entire XML-based courses into memory, or pre-computing complex field inheritance caches. This is no longer the case, and SplitMongoModuleStore initialization is in the 1-2 ms range, with most of that being for PyMongo's connection setup. We should try to fully remove the global singleton in the Verawood release cycle in order to make this kind of bug less likely.
Commit generated by workflow `edx/edx-platform/.github/workflows/upgrade-one-python-dependency.yml@refs/heads/release-ulmo`
* feat: add new API to retrieve all components in a unit * feat: add waffle flag to enable unit expanded view * fix: test cases
…97a2a0 feat: Upgrade Python dependency edx-enterprise
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* fix: restrict PDF rendering to relative paths * fix: enhance PDF viewer security by removing file param and communicating via postMessage * fix: remove HTML escaping from chapter URLs and titles in PDF viewer * fix: refactor PDF viewer integration for improved chapter navigation and security * fix: enhance security in StaticPdfBookTest by removing file parameter exposure * fix: secure PDF viewer iframe by removing unnecessary file parameter * fix: add newline at end of static_pdfbook.html for proper file termination --------- Co-authored-by: papphelix <ppatro-apphelix@2u.com>
chore: updated version of enterprise-integrated-channels
Implements soft delete functionality for discussion threads, responses, and comments using the is_deleted flag instead of permanently deleting records. This enables safe deletion and restoration of discussion content while preserving existing data.
This commit updates the logic in the build_block_structure function to ensure that block locations are consistently normalized by removing branch and version information. This change addresses issues when creating a BlockStructure from modulestore using the published_only branch. Without this change, we end up comparing versioned keys to unversioned ones later on, which always yields False.
Co-authored-by: papphelix <ppatro-apphelix@2u.com>
…store (#85) * fix: use target user enrollment for org-level bulk delete and bulk restore
Upgrade snowflake connector version Commit generated by workflow `edx/edx-platform/.github/workflows/upgrade-one-python-dependency.yml@refs/heads/release-ulmo`
…tegrated-channels-b3b7258 feat: Upgrade Python dependency enterprise-integrated-channels
Added permission for privileged users to restore deleted content .
Other steps taken too: - Add ADR and URL routes comment for migrated SAML admin views to help ensure people don't inadvertantly register conflicting URL routes. - Remove validate_uuid4_string, convert_saml_slug_provider_id, and fetch_metadata_xml from third_party_auth/utils.py (migrated to edx-enterprise) - Remove test_convert_saml_slug_provider_id test and import - Add TestCreateOrUpdateBulkSAMLProviderData test class with 4 tests covering create, update, bulk_update, and multiple keys paths - Remove unused imports: logging, requests, uuid.UUID ENT-11567 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: centralize authn MFE branding and remove duplicate context * fix: add authn MFE branding helper tests and remove dead imports
* feat: add audio description upload & playback backend * fix: audio description upload flow in devstack * refactor: extract LMS-safe audio description download URL helper * feat: gate audio description upload with contentstore waffle flag * feat: add audio description functionality to video player * fix: refactor for audio description * fix: refactor code * refactor: rename audio description upload toggle to audio description * feat: enhance audio description synchronization and playback handling * fix: update audio description handlers and imports for consistency --------- Co-authored-by: Aditya Bhalsod <abhalsod-sonata@2u.com>
feat: remove SAML provider admin views from openedx-platform
hotfix for broken SAML views Commit generated by workflow `edx/edx-platform/.github/workflows/upgrade-one-python-dependency.yml@refs/heads/release-ulmo`
…fd38 feat: Upgrade Python dependency edx-enterprise
feat: add phase 1 Datadog instrumentation for thread creation
Introduce _UpstreamKeyString class to handle XML serialization.
feat: integrated channels 0.1.57 Commit generated by workflow `edx/edx-platform/.github/workflows/upgrade-one-python-dependency.yml@refs/heads/release-ulmo`
…rumentation feat: add forum telemetry for thread update and delete
…mentation feat: add forum telemetry for thread vote and unvote
* feat: add audio description upload & playback backend * fix: audio description upload flow in devstack * refactor: extract LMS-safe audio description download URL helper * feat: gate audio description upload with contentstore waffle flag * feat: add audio description functionality to video player * fix: refactor for audio description * fix: refactor code * refactor: rename audio description upload toggle to audio description * feat: enhance audio description synchronization and playback handling * fix: update audio description handlers and imports for consistency --------- Co-authored-by: Devasia Joseph <djoseph-apphelix@2u.com>
…grated-channels-358748b feat: Upgrade Python dependency enterprise-integrated-channels
…tion feat: add forum telemetry for comment create update and delete
…umentation feat: add forum telemetry for comment vote and unvote
…port (#207) * feat: add SES routing for account activation emails with fallback support * refactor: simplify SES routing and fallback logic per review feedback
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Describe what this pull request changes, and why. Include implications for people using this change.
Design decisions and their rationales should be documented in the repo (docstring / ADR), per
OEP-19, and can be
linked here.
Useful information to include:
"Developer", and "Operator".
changes.
Supporting information
Link to other information about the change, such as Jira issues, GitHub issues, or Discourse discussions.
Be sure to check they are publicly readable, or if not, repeat the information here.
Testing instructions
Please provide detailed step-by-step instructions for testing this change.
Deadline
"None" if there's no rush, or provide a specific date or event (and reason) if there is one.
Other information
Include anything else that will help reviewers and consumers understand the change.