67959 Commits

Author SHA1 Message Date
Feanil Patel
aea900061a Merge pull request #37878 from openedx/feanil/update_readme_python_version
docs: Update the supported python version in the README.
2026-01-13 16:38:20 -05:00
Feanil Patel
6062c04e8a docs: Apply suggestion from @kdmccormick
Co-authored-by: Kyle McCormick <kyle@axim.org>
2026-01-13 14:17:59 -05:00
irfanuddinahmad
e6deac0cf1 Merge pull request #37879 from irfanuddinahmad/iahmad/ENT-10552
chore: updated version of enterprise-integrated-channels
2026-01-13 21:40:40 +05:00
irfanuddinahmad
6e59e0f248 chore: updated version of enterprise-integrated-channels 2026-01-13 20:56:17 +05:00
jawad khan
99e7492b5e Removed DEFAULT_HASHING_ALGORITHM from lms (#37820)
* chore: Removed DEFAULT_HASHING_ALGORITHM from lms

* fix: removed session_hash_verified from session verification
2026-01-13 18:13:52 +05:00
Ahtisham Shahid
14e508ea9f feat: added new email template for batched email notification (#37844) 2026-01-13 10:49:12 +05:00
Feanil Patel
bfc5fd5f94 Merge pull request #37861 from openedx/dependabot/github_actions/actions/cache-5
build(deps): bump actions/cache from 4 to 5
2026-01-12 16:22:45 -05:00
Feanil Patel
d5cb793f8b docs: Update the supported python version in the README.
We have tested and now work with Python 3.12 so update the readme so
that people are using the latest version.
2026-01-12 15:58:53 -05:00
Feanil Patel
88ee0b11a5 Merge pull request #37860 from openedx/dependabot/github_actions/actions/download-artifact-7
build(deps): bump actions/download-artifact from 6 to 7
2026-01-12 15:37:29 -05:00
Feanil Patel
24b28d1811 Merge pull request #37862 from openedx/dependabot/github_actions/actions/upload-artifact-6
build(deps): bump actions/upload-artifact from 5 to 6
2026-01-12 15:36:43 -05:00
Feanil Patel
7f6c678ad4 Merge pull request #37863 from openedx/dependabot/github_actions/peter-evans/create-pull-request-8
build(deps): bump peter-evans/create-pull-request from 7 to 8
2026-01-12 15:35:55 -05:00
Feanil Patel
fa64270df4 docs: Remove some code block annotations that were failing.
Sphinx was complaining about these code-block annotations so don't claim
a language since the code doesn't fully match that language and the
parsing fails.
2026-01-12 13:13:54 -05:00
Feanil Patel
35fab7bbb6 docs: Add the top-level decision records to the docs site.
The `decisions` directory was not previously included in the
edx-platform docs build.
2026-01-12 13:13:54 -05:00
Feanil Patel
02db4874f0 docs: Ignore a venv generated during docs build.
To build some of the docs dynamically, a new virtualenv is created.
Without this ignore, sphinx also reads all the files under that tree and
then complains that they're not properly linked to the rest of the docs.
2026-01-12 13:13:54 -05:00
Feanil Patel
908aca4409 fix: Remove unused bad validation for images.
The `CourseRunImageField` is a subclass of the DRF
`serializers.ImageField` serializer and that class ignores the
`default_validators` and actually just uses Django's image validation
which is already correct and does in fact validate that the image content
is correct not just that the image extension is correct.

The DRF code that does the validation:
https://github.com/encode/django-rest-framework/blob/main/rest_framework/fields.py#L1621-L1628

Which actually just calls the Django Image Validators.

The Django Field definition:
https://github.com/django/django/blob/main/django/forms/fields.py#L712

And you can see that in the
[`to_python`](https://github.com/django/django/blob/main/django/forms/fields.py#L721)
function of that class it actually checks the image content.

This function is never actually called and so it's just misleading.
2026-01-12 12:58:21 -05:00
Feanil Patel
46dc65da3f build: Don't clean the .venv folder.
Make it so `make clean` doesn't blow away the venv folder.  Given that
this is managed by the developer, we should be able to manage its
lifecycle independently.

It was previously just in the list of files that comes by default from
github's gitignore so it's not like we previously were of the opinion
that we should delete this folder.  Just that previously we had no
opinion about it and now I think we should not delete it.
2026-01-12 11:13:09 -05:00
Feanil Patel
615f86035c Merge pull request #37857 from openedx/feanil/fix_docs_build
docs: Add a new setting to the docs settings.
2026-01-12 10:52:45 -05:00
salmannawaz
af55715eba chore: convert mako template into django template 2026-01-12 11:57:34 +05:00
dependabot[bot]
ccba906244 build(deps): bump peter-evans/create-pull-request from 7 to 8
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 7 to 8.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v7...v8)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-12 05:01:42 +00:00
dependabot[bot]
39e16bf8b2 build(deps): bump actions/upload-artifact from 5 to 6
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5 to 6.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-12 05:01:37 +00:00
dependabot[bot]
b53eddc801 build(deps): bump actions/cache from 4 to 5
Bumps [actions/cache](https://github.com/actions/cache) from 4 to 5.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-12 05:01:29 +00:00
dependabot[bot]
6307cb6dc4 build(deps): bump actions/download-artifact from 6 to 7
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 6 to 7.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-12 05:01:20 +00:00
Taylor Payne
d49de134d5 refactor: hoist annotations for common settings with differing values (#37800) 2026-01-09 13:07:12 -07:00
Feanil Patel
50c1e41940 docs: Add a new setting to the docs settings. 2026-01-09 13:53:42 -05:00
Feanil Patel
b609f675bd Merge pull request #37554 from ttak-apphelix/ttak-apphelix/remove-pytz-3
chore: use zoneinfo instead of pytz
2026-01-09 13:26:28 -05:00
Feanil Patel
2a69605f0b Merge pull request #37562 from ttak-apphelix/ttak-apphelix/remove-pytz-4
chore: use zoneinfo instead of pytz
2026-01-09 13:15:48 -05:00
Feanil Patel
fc85126869 Merge pull request #37672 from openedx/dependabot/github_actions/actions/checkout-6
build(deps): bump actions/checkout from 5 to 6
2026-01-09 12:41:55 -05:00
Feanil Patel
92adcdf785 Merge pull request #37548 from openedx/dependabot/github_actions/actions/download-artifact-6
chore(deps): bump actions/download-artifact from 5 to 6
2026-01-09 12:41:04 -05:00
Awais Qureshi
54c10bc728 chore: all apis converted to DRF so require_post_params (#37091)
* chore: all apis converted to DRF so `require_post_params` is not required.
2026-01-09 12:30:39 -05:00
Feanil Patel
0a1af20b8f Merge pull request #37506 from openedx/dependabot/github_actions/actions/setup-node-6
chore(deps): bump actions/setup-node from 5 to 6
2026-01-09 12:24:30 -05:00
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
Tarun Tak
f9d65aa23f chore: use zoneinfo instead of pytz 2026-01-09 12:22:23 -05:00
Nathan Sprenkle
e45ae329e7 feat: add toggle for unifying site & translation language (#37854) 2026-01-09 11:59:03 -05:00
Tarun Tak
f841763640 chore: use zoneinfo instead of pytz 2026-01-09 11:43:33 -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