Commit Graph

67774 Commits

Author SHA1 Message Date
Feanil Patel
31ce287d44 Merge pull request #37549 from openedx/dependabot/github_actions/actions/upload-artifact-5
chore(deps): bump actions/upload-artifact from 4 to 5
2026-01-09 12:24:02 -05:00
Nathan Sprenkle
e45ae329e7 feat: add toggle for unifying site & translation language (#37854) 2026-01-09 11:59:03 -05:00
Taylor Payne
7111e8b18c refactor: bring common settings into common module (#37746) 2026-01-09 09:20:59 -07:00
Daniel Wong
7f1f8767a8 docs: instructor ORA api spec (#37775)
* docs: instructor ORA api spec
2026-01-08 16:30:26 -07:00
Daniel Wong
cd6faeb966 Follow-up to PR 36789 (#37751)
* refactor(certificates): replace direct model imports with data classes and APIs

* fix: use Certificates API to create certificates

* docs: update docstring for get_certificate_for_user

* fix: remove trailing whitespace

---------

Co-authored-by: coder1918 <ram.chandra@wgu.edu>
Co-authored-by: Deborah Kaplan <deborahgu@users.noreply.github.com>
2026-01-08 13:03:46 -05:00
Muhammad Arslan
7e72ec2778 fix: race condition in shared runtime services (#37825)
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.
2026-01-08 10:33:04 -05:00
Irtaza Akram
474dc71f0d chore: remove legacy problem studio view (#37795)
* fix: remove legacy problem studio view and resource templates
2026-01-08 13:07:15 +05:00
Muhammad Farhan Khan
0b628353ef refactor: move editor_saved to VideoConfigService (#37829)
refactor: move editor_saved to VideoConfigService (#37829)
* This moves edx-platform-specific logic out of the VideoBlock,
in preparation for the VideoBlock extraction
2026-01-08 11:50:08 +05:00
Irtaza Akram
d29b0473f4 fix: align pylint fixes in edx-platform Problem XBlock with extracted xblocks-contrib/problem (#37758)
* fix: pylint issues for problem xblock
2026-01-07 16:39:11 +05:00
Ahtisham Shahid
2f065bbae4 chore: updated notification settings docs (#37839) 2026-01-07 14:03:33 +05:00
Irtaza Akram
33cc1a94ba chore: upstream ProblemBlock exceptions and shared utilities to XBlock (#37806)
* fix: add support for xblock 5.3.0
2026-01-07 13:30:53 +05:00
Krish Tyagi
1ffa136d45 fix: removal of temporary saml toggle (#37651)
Removes temporary rollout toggle ENABLE_SAML_CONFIG_SIGNAL_HANDLERS. The
toggle was used to rollout a fix, and now the fix that uses the signal handlers is
enabled by default.

The only follow-up needed by anyone is to no longer set this toggle, which will no
longer do anything.
2026-01-06 16:38:41 -05:00
Irtaza Akram
fd33d80fb7 fix: autoformat problem block template files using djlint (#37760) 2026-01-06 17:55:30 +05:00
Irtaza Akram
87bf1003b7 fix: remove settings.DEBUG from problem block (#37812)
* fix: remove settings.DEBUG from problem block
2026-01-06 17:51:50 +05:00
David Ormsbee
1d9ca333cf fix: correct upstream field for migrated libraries (#37804)
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>
2026-01-05 16:35:31 -05:00
Awais Ansari
7aaf511a38 feat: added batched email template (#37834) 2026-01-05 14:28:08 +05:00
Irtaza Akram
50a0691a8a fix: depr enable_xblock_xml_validation (#37810) 2026-01-05 13:35:29 +05:00
Feanil Patel
67819a6efc Merge pull request #37826 from openedx/repo-tools/upgrade-python-requirements-9d2bbb1
chore: Upgrade Python requirements
2026-01-02 11:26:47 -05:00
Feanil Patel
22b1d6e731 Merge pull request #37831 from openedx/feanil/geoip2-bot-update-country-database-20631988549
Update GeoLite Database
2026-01-02 11:26:42 -05:00
feanil
e31bbae35f chore: geoip2: update maxmind geolite country database 2026-01-02 11:01:28 -05:00
Muhammad Arslan
e548e924cd fix: remove text from base query_params (#37835) 2026-01-02 20:05:21 +05:00
Ahtisham Shahid
85fc7207be feat: added buffer to immediate email notification (#37741) 2026-01-02 17:48:01 +05:00
salmannawaz
b2376c5f7c chore: use html block base for about, statictab,courseinfo blocks 2026-01-01 16:42:58 +05:00
Feanil Patel
c1bfbcf6fc build: Recompile the requirements 2025-12-30 20:43:54 -05:00
Feanil Patel
c8140a978b fix: Drop the markdown extra.
It was removed from the package and markdown support is now part of the
default package without the extras decleration.

1e95ac6fc8 (diff-60f61ab7a8d1910d86d9fda2261620314edcae5894d5aaa236b821c7256badd7)
2025-12-30 20:19:48 -05:00
salmannawaz
2aeac45994 Convert discussion block sass variable into css variables (#37742)
* chore: convert discussion sass variable into css variables
2025-12-30 23:13:47 +05:00
Ahtisham Shahid
bac7e12b5c feat: make email cadence overrideable from settings (#37822) 2025-12-30 13:10:08 +05:00
Muhammad Farhan Khan
b94ccde7b4 refactor: Update VideoConfigService get_transcript method (#37809)
Update VideoConfigService get_transcript method
Update method for the bumper videos
2025-12-30 11:59:48 +05:00
edX requirements bot
f2df24d806 chore: Upgrade Python requirements 2025-12-29 21:50:09 -05:00
Ahtisham Shahid
9d2bbb1797 refactor: removed all references to CourseNotificationPreference (#37768) 2025-12-29 15:11:56 +05:00
Muhammad Farhan Khan
360a97fdd3 refactor: Move available_translations into VideoConfigService (#37808)
This moves edx-platform-specific logic out of the VideoBlock,
in preparation for the VideoBlock extraction:
openedx#36282
2025-12-26 18:56:57 +05:00
Rômulo Penido
e26a3fb7e6 fix: add course name on collection description on import (#37817)
Co-authored-by: Chris Chávez <xnpiochv@gmail.com>
2025-12-24 18:25:09 +00:00
Navin Karkera
a37528d5ad feat: allow specifying custom page size for course list api (#37815) 2025-12-24 11:56:49 -05:00
Ahtisham Shahid
432926d2dc feat: added option to override default preferences (#37807) 2025-12-24 13:19:11 +05:00
Muhammad Farhan Khan
c5333b3550 refactor: Move upload/delete transcript int video_config service
Merge pull request #37793 from openedx/farhan/upload-delete-transcript
2025-12-24 12:21:58 +05:00
Feanil Patel
00f72bb41e Merge pull request #37504 from Pearson-Advance/felipeb/learning-microfrontend-url-site-aware
feat: make LEARNING_MICROFRONTEND_URL site aware.
2025-12-23 10:58:34 -05:00
farhan
3c9e1a90de refactor: Move upload/delete transcript int video_config service
This moves edx-platform-specific logic out of the VideoBlock,
in preparation for the VideoBlock extraction:
https://github.com/openedx/edx-platform/issues/36282
2025-12-23 20:44:14 +05:00
Feanil Patel
f23c5d619f Merge pull request #37805 from openedx/repo-tools/upgrade-python-requirements-32b7f27
chore: Upgrade Python requirements
2025-12-23 10:15:02 -05:00
Feanil Patel
e2d19b6780 fix: Update to match compile-requirements output.
For some reason sphinx is being listed as a thing that requires
`roman-numerals` during the upgrade call but not during
`compile-requirements`. This just commits the expectations from
compile-requirements for now so we can land the package update.
2025-12-23 09:37:55 -05:00
edX requirements bot
a93b93e6fb chore: Upgrade Python requirements 2025-12-23 09:24:16 -05:00
Navin Karkera
32b7f27c46 feat: api to bulk update legacy library references (#37789)
Adds API to fetch all legacy library content blocks that are ready to be updated to use library v2 and convert to item banks.
Also adds API to update all the references via a user celery task and to fetch its status.
2025-12-22 12:49:43 -05:00
Asad Ali
f6633dafb1 fix: make pull_translations (#37801) 2025-12-22 19:12:50 +05:00
Muhammad Farhan Khan
277481f741 chore: remove unused/legacy translation method from video block
Remove unused/legacy translation method from video block
2025-12-22 17:57:52 +05:00
Muhammad Farhan Khan
f93322aae8 chore: remove unused copy_or_rename_transcript method
Merge pull request #37779 from openedx/farhan/remove-legace-code
2025-12-22 12:58:16 +05:00
Feanil Patel
7b91d1d64c Merge pull request #37797 from openedx/feanil/change_common_constraints_update
build: Don't update common_constraints.txt on re-compilation.
2025-12-19 12:37:59 -05:00
Feanil Patel
cc1514e360 build: Don't update common_constraints.txt on re-compilation.
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.
2025-12-19 10:51:58 -05:00
David Ormsbee
f899c7907a fix: allow library creation by course creators
Prior to this, if ENABLE_ORGANIZATION_STAFF_ACCESS_FOR_CONTENT_LIBRARIES
was enabled, we would not return the orgs that someone had course
creator rights on, even if ENABLE_CREATOR_GROUP was enabled. (For the
moment, we are conflating "can create courses" with "can create
libraries" for a given org, even though we should probably eventually
split those apart.)
2025-12-18 22:56:33 -05:00
Kyle McCormick
91e521ef51 fix: Various fixes to modulestore_migrator (#37711)
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:
  https://github.com/openedx/frontend-app-authoring/issues/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:
  https://github.com/openedx/edx-platform/issues/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.
2025-12-18 23:49:36 +00:00
Feanil Patel
cf417c3123 Merge pull request #37790 from openedx/feanil/drop_unsupported_variants
feat: Drop unsupported service variants.
2025-12-18 15:05:20 -05:00
Feanil Patel
0f7a7e5c98 feat: Drop unsupported service variants.
We haven't done anything specila for lms-xml for over a decade and we
dropped lms-preview support last year when we added preview capabality
to the new Authoring MFE.

https://github.com/openedx/edx-platform/pull/36460
2025-12-18 12:10:34 -05:00