DO NOT MERGE - DO NOT CLOSE - Dummy PR to track upstream master#824
Draft
kaustavb12 wants to merge 352 commits intoopen-craft:kaustav/downstream_pr_targetfrom
Draft
DO NOT MERGE - DO NOT CLOSE - Dummy PR to track upstream master#824kaustavb12 wants to merge 352 commits intoopen-craft:kaustav/downstream_pr_targetfrom
kaustavb12 wants to merge 352 commits intoopen-craft:kaustav/downstream_pr_targetfrom
Conversation
Don't add a new reference to the old FEATURES dictionary and drop an unncessary test. Co-authored-by: Taylor Payne <taylor.payne2@wgu.edu> Co-authored-by: Feanil Patel <feanil@axim.org>
…ride from ABOUT_ATTRIBUTES
This change adds a new kind of generic user agreement that allows plugins or even the core platform to record a user's acknowledgement of an agreement.
Adds new models and API to store user agreements such as fair use agreements, terms of service, code of conduct etc. that need to be accepted by the user.
Remove Python 3.11 from all CI workflow matrices and update requires-python to >=3.12 in pyproject.toml. Also remove ubuntu-22.04 compatibility include entries from unit-tests.yml that were tied to Python 3.11 testing. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
pylint was upgraded from 3.x to 4.x by make upgrade, which now enforces the 120-char line limit more strictly. - cms/envs/devstack.py, production.py: split long lines in triple-quoted string literals (Markdown text, so Python newlines become spaces — no content change) - test_containers.py: add pylint disable/enable around OLX assertion block where XML attribute strings cannot be split Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
setuptools 82+ removed pkg_resources, which pyfilesystem2 (fs) still uses for namespace package declarations. The constraints.txt pin handles this for full installs, but the static-assets-check workflow only installs requirements/edx/assets.txt. Pre-installing pip-tools.txt ensures setuptools 81.x is in place before the assets install runs. See: PyFilesystem/pyfilesystem2#577 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
And add back and comment the old 3.11 tests for when we drop future major dependencies.
6.7.0 | invite new enterprise admins email Commit generated by workflow `openedx/openedx-platform/.github/workflows/upgrade-one-python-dependency.yml@refs/heads/master`
- Add decorator to enforce AuthZ course permissions - Add ADR documenting the new Authz Django app
Commit generated by workflow `openedx/openedx-platform/.github/workflows/upgrade-one-python-dependency.yml@refs/heads/master` Co-authored-by: salman2013 <4454296+salman2013@users.noreply.github.com>
Co-authored-by: Kiro <noreply@kiro.dev>
fix: backward compat for transmit learner data task Commit generated by workflow `openedx/openedx-platform/.github/workflows/upgrade-one-python-dependency.yml@refs/heads/master`
The latest version of snowflake-connector-python claims to fix the underlying issue that caused us to pin cryptography so unpin both of these and re-build dependencies to see if the issues are resolved.
pact-python 3.x (released after the 1.x series) ships a new Rust FFI-based
verifier that breaks backward compatibility with the old Ruby-based verifier.
The constructor and verification call both changed:
Old API (pact-python 1.x):
verifier = Verifier(provider='lms', provider_base_url=url)
output, _ = verifier.verify_pacts(pact_file, headers=[...], provider_states_setup_url=...)
assert output == 0
New API (pact-python 3.x):
Verifier(name='lms')
.add_transport(url=url)
.add_source(pact_file)
.add_custom_header('Pact-Authentication', 'Allow')
.state_handler(provider_states_setup_url, body=True)
.verify()
Key differences:
- `provider` → `name`, `provider_base_url` → `.add_transport(url=...)`
- `verify_pacts()` is gone; replaced by fluent `.add_source()` + `.verify()`
- Headers are set individually via `.add_custom_header(name, value)` rather
than as a list of `Key: Value` strings
- `provider_states_setup_url` becomes `.state_handler(url, body=True)`;
`body=True` is required for URL-based handlers and matches what the
provider state views already expect (they read from request.body)
- `verify()` raises RuntimeError on failure instead of returning a non-zero
exit code, so the `assert output == 0` is no longer needed
- The verifier is now created fresh inside the test method rather than in
setUpClass, because `add_source` and `add_custom_header` accumulate state
on the underlying FFI handle — sharing a verifier across multiple test
invocations would cause duplicate sources/headers on the second run
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: prevent .modal-fullscreen cascading flex boxes * fix: fix fullscreen for word cloud and lti consumer
Bump edx-enterprise version to 8.0.2 Commit generated by workflow `openedx/openedx-platform/.github/workflows/upgrade-one-python-dependency.yml@refs/heads/master` Co-authored-by: brobro10000 <82611798+brobro10000@users.noreply.github.com>
* chore: change xblocks-contrib to 0.16.1 --------- Co-authored-by: Kyle D McCormick <kyle@axim.org>
…oints (#38458) - Support ?ordering= query param on special exam allowances and attempts list endpoints via in-memory sort (edx-proctoring returns plain lists, not querysets; see openedx/edx-proctoring#1320) - Add derived exam_type field (timed/proctored/practice) to special exam and attempt serializer responses - Return authenticated user's username in course metadata response - Make reason field optional and blank-safe on due date extension endpoint (BlockDueDateSerializerV2)
- Integrate extended profile model into account settings flow - Improve validation and error handling - Refactor form handling and API separation - Ensure atomic updates for profile changes - Support PROFILE_EXTENSION_FORM setting - Add and update comprehensive unit tests - Improve documentation and code clarity
feat: add support for course permission in authz rest apis Commit generated by workflow `openedx/openedx-platform/.github/workflows/upgrade-one-python-dependency.yml@refs/heads/master` Co-authored-by: MaferMazu <35668326+MaferMazu@users.noreply.github.com>
Co-authored-by: Copilot <copilot@github.com>
* docs: Add link to new notifications documentation and remove from this repo * docs: fix whitespace * docs: pylint Split long comment into two lines for readability.
* chore(deps): update dependency jasmine-core to v2.99.1
* fix: refactor certificate_editor_spec to not call AjaxHelpers inside it()
Jasmine 2.99.x added ensureIsNotNested() which throws
'afterEach' should only be used in 'describe' function
when afterEach() is called from inside a running spec.
AjaxHelpers.requests() calls afterEach() internally, so it must
be called from a describe() body. Replicate the createFakeRequests()
pattern in beforeEach/afterEach instead:
- Set up sinon.useFakeXMLHttpRequest() in describe('Basic') beforeEach
- Tear down in afterEach via requests.restore()
- Remove inline AjaxHelpers.requests(this) from 3 it() bodies
- Remove AjaxHelpers.requests(that) from clickDeleteItem() helper
(uses the module-level requests variable instead)
This file was a cascade-causing failure: sinon's fake XHR was left
active after the suite ran, intercepting requests from later suites.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: refactor group_configuration_spec to not call AjaxHelpers inside it()
Jasmine 2.99.x throws when afterEach() is called from inside a running
spec. AjaxHelpers.requests() calls afterEach() internally, so it must
be called from a describe() body.
Move fake XHR setup to the top-level beforeEach/afterEach using
sinon.useFakeXMLHttpRequest() directly, so all nested describe blocks
share a single module-level requests array. Remove all inline
AjaxHelpers.requests() calls (12 it() bodies + 2 helper functions).
This file was a cascade-causing failure: sinon's fake XHR was left
active after the suite ran, intercepting requests from later suites.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: refactor paged_container_spec to not call AjaxHelpers inside it()
Move fake XHR setup to describe-level beforeEach/afterEach using
sinon.useFakeXMLHttpRequest() directly. Remove ~50 inline
AjaxHelpers.requests(this) calls from it() bodies including the
testSendsAjax() helper that generated it() blocks inline.
AjaxHelpers is still imported and used for its utility functions
(respondWithJson, expectJsonRequest, expectNoRequests, etc.) which
only operate on the requests array and don't call afterEach() internally.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: refactor paging_spec to not call AjaxHelpers inside it()
Move fake XHR setup to describe-level beforeEach/afterEach.
Remove ~30 inline AjaxHelpers.requests(this) calls from it() bodies.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: refactor assets, settings/main, pages/index specs to not call AjaxHelpers inside it()
Move fake XHR setup to describe-level beforeEach/afterEach in each file.
Remove inline AjaxHelpers.requests(this) calls from it() bodies and helper
functions (assets_spec.js setup() helper).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: refactor certificate_details and certificate_preview specs
Move fake XHR setup to describe-level beforeEach/afterEach.
Remove inline AjaxHelpers.requests(this) calls from it() bodies.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: refactor main_spec and section_spec from AjaxHelpers.server() pattern
AjaxHelpers.server() calls afterEach() internally, which throws in
jasmine 2.99.x when called from inside an it() body.
Replace AjaxHelpers.server([...]) in each it() with:
- sinon.fakeServer.create() in beforeEach
- server.respondWith([...]) per test
- server.restore() in afterEach
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: refactor remaining CMS specs to not call AjaxHelpers inside it()
Files fixed:
- upload_spec.js: add XHR setup to describe("Uploads") lifecycle hooks
- xblock_spec.js: add XHR setup to describe('XBlockView') lifecycle hooks;
fix postXBlockRequest(AjaxHelpers.requests(this), []) inline call
- unit_outline_spec.js: remove AjaxHelpers.requests(test) from
createUnitOutlineView() helper; use describe-level lifecycle hooks
- move_xblock_modal_spec.js: add XHR setup to describe lifecycle hooks
- course_rerun_spec.js: add XHR setup to describe lifecycle hooks
- library_users_spec.js: add XHR setup to both describe blocks
- drag_and_drop_spec.js: add XHR setup to describe('AJAX') lifecycle hooks
(sinon already imported)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: refactor additional CMS specs away from AjaxHelpers.requests()
Jasmine 2.99.x added ensureIsNotNested() which throws when afterEach()
is called from within a running spec. AjaxHelpers.requests() calls
afterEach() internally, so it cannot be used from it() bodies or helper
functions that are called from it() bodies.
Files fixed:
- xblock_editor_spec.js (ES6 imports)
- modals/edit_xblock_spec.js (15 calls in it() bodies)
- xblock_string_field_editor_spec.js (calls in it() and helper)
- container_spec.js (init() helper returned requests)
- move_xblock_spec.js (6 calls in it() bodies)
- pages/container_spec.js (renderContainerPage helper)
- pages/course_outline_spec.js (createCourseOutlinePage helper)
- pages/container_subviews_spec.js (called from beforeEach)
- assets_squire_spec.js (factory functions inside async beforeEach)
Pattern: move sinon.useFakeXMLHttpRequest() setup into describe-level
beforeEach/afterEach; keep AjaxHelpers utility functions unchanged.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: replace AjaxHelpers.requests() calls in spec files for Jasmine 2.99.x
AjaxHelpers.requests() internally calls afterEach() to restore the sinon
fake XHR, but Jasmine 2.99.x forbids calling afterEach() from within a
running spec (it() body) or helper functions called from it() bodies,
producing: 'afterEach' should only be used in 'describe' function.
Replace all occurrences across 44 spec files by moving sinon fake XHR
setup into beforeEach/afterEach at the describe scope using the pattern:
xhrFactory = sinon.useFakeXMLHttpRequest();
requests = []; requests.currentIndex = 0;
requests.restore = function() { xhrFactory.restore(); };
xhrFactory.onCreate = function(req) { requests.push(req); };
See https://jasmine.github.io/api/2.99/global.html#afterEach for the
restriction that afterEach must be called at describe scope.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix(tests): reorder beforeEach in assets_squire_spec to avoid sinon/Squire conflict
The sync sinon fake XHR beforeEach was running before the async Squire
beforeEach that calls injector.require(). This caused sinon to intercept
RequireJS's internal XHR module-loading requests, so done() was never
called and sinon was left in a broken state. This cascaded to fail
subsequent test files (e.g. group_configuration_spec.js) with
"xhrFactory.restore is not a function".
Fix: run the async Squire beforeEach first (modules load via real XHR),
then activate sinon fake XHR in a second sync beforeEach. Also consolidate
the two afterEach blocks in "Asset view" into one.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: reset MathJax.Hub.Queue spy in refreshMath beforeEach to avoid jasmine-jquery Sizzle error
In Jasmine 2.99, toHaveBeenCalledWith iterates ALL recorded spy call
arguments element-by-element (even for calls that obviously don't match)
to build a useful diff. In Jasmine 2.6, array comparison short-circuited
on the first failing element.
Problem.bind() calls MathJax.Hub.Queue([refreshMath, null, domEl]) for
each input.math element. When toHaveBeenCalledWith then checks that call
against the expected args ["Text", stubbedJax, "E=mc^2"], it compares
each element pairwise — including domEl (index 2 of the actual array)
against "E=mc^2" (index 2 of the expected array).
jasmine-jquery's custom equality tester calls $(domEl).is("E=mc^2") when
it sees a DOM node on the left. jQuery's Sizzle interprets "E=mc^2" as a
CSS selector and throws a syntax error.
Fix: reset Queue.calls after new Problem() so bind()'s call is not in the
recorded set. This isolates the describe to testing only what refreshMath
itself queues, which is the intent of the test.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Feanil Patel <feanil@axim.org>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…FC-0123] (#38481) - Added `old_version` and `new_version` to `LibraryHistoryEntry` and its serializer. - Populated these fields in block and container history APIs (draft history, publish history entries, and creation entry). - Preserved delete semantics by allowing `new_version` to be `null` for soft-deletes.
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
Settings
Tutor requirements