Skip to content

test: DO NOT MERGE - Dummy PR to track upstream master#824

Draft
kaustavb12 wants to merge 184 commits intoopen-craft:kaustav/downstream_pr_targetfrom
openedx:master
Draft

test: DO NOT MERGE - Dummy PR to track upstream master#824
kaustavb12 wants to merge 184 commits intoopen-craft:kaustav/downstream_pr_targetfrom
openedx:master

Conversation

@kaustavb12
Copy link
Copy Markdown
Member

@kaustavb12 kaustavb12 commented Feb 6, 2026

Settings

AN_IMPORTANT_NOTICE: |
  ##########################################
  This is the OpenCraft Sandbox (sandbox.opencraft.com) tracking upstream master.
  Please do not delete or modify this instance without checking with Fox first.
  ##########################################
PLATFORM_NAME: OpenCraft Sandbox
LMS_HOST: sandbox.opencraft.com
CMS_HOST: studio.sandbox.opencraft.com
PREVIEW_LMS_HOST: preview.sandbox.opencraft.com
GROVE_NEW_MFES:
  catalog:
    port: 1998
    repository: https://github.com/openedx/frontend-app-catalog.git
    version: master
GROVE_SIMPLE_THEME_BRANCH: sandbox
GROVE_SIMPLE_THEME_REPO: https://github.com/open-craft/brand-openedx.git
GROVE_COMMON_SETTINGS: |
  CATALOG_MICROFRONTEND_URL = 'https://apps.sandbox.opencraft.com/catalog'
  ENABLE_CATALOG_MICROFRONTEND = True
GROVE_MFE_LMS_COMMON_SETTINGS: |
  MFE_CONFIG['LOGO_URL'] = 'https://raw.githubusercontent.com/open-craft/brand-openedx/refs/heads/sandbox/logo.png'
  MFE_CONFIG['LOGO_TRADEMARK_URL'] = 'https://raw.githubusercontent.com/open-craft/brand-openedx/refs/heads/sandbox/logo-trademark.png'
  MFE_CONFIG['LOGO_WHITE_URL'] = 'https://raw.githubusercontent.com/open-craft/brand-openedx/refs/heads/sandbox/logo-white.png'
  MFE_CONFIG['FAVICON_URL'] = 'https://raw.githubusercontent.com/open-craft/brand-openedx/refs/heads/sandbox/favicon.ico'
OPENEDX_EXTRA_PIP_REQUIREMENTS:
- git+https://gitlab.com/opencraft/dev/openedx-auto-studio.git@master
CONTACT_EMAIL: help@opencraft.com

Tutor requirements

tutor plugins enable sandbox
tutor plugins enable grove-simple-theme
tutor generate-tokens

…regardless of nesting or randomization (#36677)

This PR ensures that the instructor "Problem Responses" report in Open edX includes all student responses to all problems under any selected block, including those that are nested or randomized (such as those from legacy library_content blocks). Previously, the report could miss responses to problems that were not directly visible to the instructor or admin user generating the report, especially in courses using randomized content blocks or deep nesting.

In courses that use randomized content (e.g., legacy library_content blocks) or have deeply nested structures, the instructor dashboard’s problem response report was incomplete. It only included responses to problems visible in the block tree for the user generating the report (typically the admin or instructor). As a result, responses to problems served randomly to students, or problems nested in containers, were omitted from the CSV export. This led to inaccurate reporting and made it difficult for instructors to audit all student answers.
@kaustavb12 kaustavb12 marked this pull request as draft February 6, 2026 08:34
brian-smith-tcril and others added 5 commits February 9, 2026 09:32
…37991)

We hope this will fix an error where loremipsum is using pkg_resources,
which setuptools dropped support for as of v82 (released yesterday).
- Fixes the issues described in openedx/frontend-app-authoring#2762 (comment):
    - Changed the background color for the library icon in the unit page.
    - Update punctuation for the library icon tooltip in the unit page.
    - Allows breaking the tooltip into multiple lines.
- Returns top parent key instead of boolean in upstream info api
- Adds edited_on raw time in course outline api
- Adds has_changes to course details api
@open-craft open-craft locked and limited conversation to collaborators Feb 10, 2026
rodmgwgu and others added 22 commits February 10, 2026 13:50
* chore: discussion service to enable permission and access provider
#38005)

- Fix a simple typo in an unsupported reason message for blocks with children in content libraries
This commit introduces several improvements to database migration
scripts to enhance compatibility between MySQL and PostgreSQL, ensure
case-sensitive behavior where needed, and improve migration safety and
correctness. The changes include dynamic SQL generation based on the
database engine, improved transaction handling, and adjustments to
field types and adapters for better cross-database support.

Database compatibility and case sensitivity improvements:

- Migration scripts in split_modulestore_django and learning_sequences
  now dynamically generate SQL statements for altering column case
  sensitivity and uniqueness based on whether the database is MySQL or
  PostgreSQL, ensuring correct behavior across both backends.
  - common/djangoapps/split_modulestore_django/migrations/0001_initial.py
  - openedx/core/djangoapps/content/learning_sequences/migrations/0001_initial.py

- The courseware.fields module now checks for "postgresql" in the
  database engine string instead of a specific backend name, improving
  compatibility with different PostgreSQL drivers.
  - lms/djangoapps/courseware/fields.py

- The 0011_csm_id_bigint migration in courseware now supports both MySQL
  and PostgreSQL for altering column types, with specific SQL for each
  backend.
  - lms/djangoapps/courseware/migrations/0011_csm_id_bigint.py

- The 0009_readd_facebook_url migration in course_overviews now
  introspects the table structure using backend-specific SQL for MySQL
  and PostgreSQL, ensuring correct detection of existing fields.
  - openedx/core/djangoapps/content/course_overviews/migrations/0009_readd_facebook_url.py

Migration safety and correctness:

- Service user creation and deletion in the commerce app is now wrapped
  in atomic transactions to ensure database consistency.
  - lms/djangoapps/commerce/migrations/0001_data__add_ecommerce_service_user.py

- The move_overrides_to_edx_when migration in courseware now specifies
  a no-op reverse migration, preventing accidental data loss on migration
  rollback.
  - lms/djangoapps/courseware/migrations/0008_move_idde_to_edx_when.py

Adapter registration and code cleanup:

- The common_initialization app now registers custom adapters for
  CourseLocator and related classes in psycopg2 when using PostgreSQL,
  ensuring proper serialization of these types.
  - openedx/core/djangoapps/common_initialization/apps.py

- Minor code cleanup and formatting improvements in migration files,
  including import order and field formatting for readability.
  - lms/djangoapps/grades/migrations/0015_historicalpersistentsubsectiongradeoverride.py
Upgrades openedx-learning from 0.31.0 to 0.32.0,
incorporating a major openedx-learning Python API
restructuring: ca0b3eb
- Change the `i18n` service declaration from `wants` to `needs`, since the
  runtime must provide it for the block to function correctly.

- Update the `public_view` webpack JS reference from `VideoBlockMain` to
  `VideoBlockDisplay`, as all VideoBlock JS files are bundled into
  `VideoBlockDisplay` and `VideoBlockMain` is not referring to anything
   or no longer exists in the repository.
- Styles to make component cards selectable.
- Action to select a component and send a message to the parent of the iframe
- Handler for a "deselect all" message and for selecting a specific component
build!: Switch to openedx-core (renamed from openedx-learning)

Instead of installing openedx-learning==0.32.0, we install openedx-core==0.34.1.
We update various class names, function names, docstrings, and comments to
represent the rename:

* We say "openedx-core" when referring to the whole repo or PyPI project
  * or occasionally "Open edX Core" if we want it to look nice in the docs.
* We say "openedx_content" to refer to the Content API within openedx-core,
   which is actually the thing we have been calling "Learning Core" all along.
  * In snake-case code, it's `*_openedx_content_*`.
  * In camel-case code, it's `*OpenedXContent*`

For consistency's sake we avoid anything else like oex_core, OeXCore,
OpenEdXCore, OexContent, openedx-content, OpenEdxContent, etc.
There should be no more references to learning_core, learning-core, Learning Core,
Learning-Core, LC, openedx-learning, openedx_learning, etc.

BREAKING CHANGE: for openedx-learning/openedx-core developers:
You may need to uninstall openedx-learning and re-install openedx-core
from your venv. If running tutor, you may need to un-mount openedx-learning,
rename the directory to openedx-core, re-mount it, and re-build.
The code APIs themselves are fully backwards-compatible.

Part of: openedx/openedx-core#470
Update our calls to the openedx_content API to reflect 0.35.0's shift
in terminology from "contents" to "media".

---------

Co-authored-by: Kyle McCormick <kyle@axim.org>
fix: don't update business logic

fix: comparison condition

fix: linting errors

fix: linting error

test: progress api test

test: add not-null scenario

fix: linting errors

test: fix assertion

refactor: tests
…-update

fix: calculate last_grade_publish_date for all unreleased subsections
Commit generated by workflow `openedx/openedx-platform/.github/workflows/upgrade-one-python-dependency.yml@refs/heads/master`

Co-authored-by: navinkarkera <10894099+navinkarkera@users.noreply.github.com>
…length (#38044)

refactor: remove some 'max_length=255' to be more DRY

feat: example of making an OpaqueKeyField case_sensitive (modulestore_migrator)

test: update test now that we're using case-insensitive collation on SQLite
kdmccormick and others added 30 commits March 31, 2026 09:15
This line was likely added here with the intent of defining an
edx-toggles-style FeatureToggle object. Instead, it just
declares a local variable named ENABLE_FORUM_DAILY_DIGEST,
whereas the actual check occurs at either of:

* settings.ENABLE_FORUM_DAILY_DIGEST  # new way
* settings.FEATURES['ENABLE_FORUM_DAILY_DIGEST']  # old way

The toggle annotation has already been correctly updated
to reflect that the toggle default is effectively False.
feat: implement hard delete for enterprise customer admin

Commit generated by workflow `openedx/openedx-platform/.github/workflows/upgrade-one-python-dependency.yml@refs/heads/master`
Adds the following warnings:
- Legacy library edit page
- Edit legacy library block
- View legacy library block
The view_survey endpoint accepted a redirect_url GET parameter and passed
it directly to HttpResponseRedirect() with no validation. If a non-existent
survey name was requested, this produced an immediate 302 to an
attacker-controlled URL. If a valid survey was requested, the same URL was
embedded in a hidden _redirect_url form field; after submission, submit_answers
echoed it back in JSON and client-side JS used it as location.href — a second
unvalidated redirect path.

Fix both by ignoring user-supplied redirect URLs entirely:
- view_survey no longer reads redirect_url from GET params
- submit_answers always redirects to reverse('dashboard') rather than
  reading _redirect_url from the POST body

Note: view_student_survey retains its redirect_url parameter because it is
also called from the courseware view (courseware/views/views.py), which passes
a server-controlled course_home_url. That call path is unaffected.

Fixes: GHSA-2843-x998-f8r2

BREAKING CHANGE: The redirect_url GET parameter on /survey/<name>/ is no longer
honored. Requests that previously redirected to a caller-specified URL after
survey completion will now always redirect to the dashboard.
* feat: Upgrade Python dependency xblocks-contrib

Commit generated by workflow `openedx/openedx-platform/.github/workflows/upgrade-one-python-dependency.yml@refs/heads/master`

* fix: fix poll block tests after removing legacy attributes

---------

Co-authored-by: salman2013 <4454296+salman2013@users.noreply.github.com>
…cord' (#38285)

Was due to a broken migration file, fixed in openedx-core==0.38.2
This is a preparatory commit so that switching from isort to ruff (which
uses a compatible but not identical sort order) results in a minimal diff
in the follow-up commit.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Drop the direct isort requirement and migrate the isort config to ruff
config.
isort:skip_file and isort:skip pragmas are not respected by ruff.
Replace them with ruff equivalents:
- File-level: # ruff: noqa: I001 (cms/__init__.py, cms/wsgi.py,
  openedx/core/lib/safe_lxml/etree.py, cms/conftest.py)
- Line-level: # noqa: I001 (manage.py, cms/urls.py)

We also added some suppressions to settings file where the wildcard
import and other import ordering is important.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Mechanical changes produced by `ruff check --select I --fix .`:
- adds trailing commas to multi-line import groups
- converts backslash line continuations to parentheses

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
When ruff auto-fixes expand single-line imports to multi-line (adding
parentheses and trailing commas), inline pylint disables that were on
the original line end up on the last item inside the parens rather than
on the `from` statement. Pylint does not recognize these as suppressing
the warning on the import.

Affected issues: unused-import, reimported, redefined-outer-name,
useless-import-alias, wrong-import-position.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
fix: add info logger instead of error when catalog is not enabled
fix: course_detail title is being set by block.display_name already
fix: read latest CSRF token from cookie
This adds synchronization for the following attributes:
1. In-context discussion enabled.
2. Posting restrictions.
3. Plugin configuration (e.g., grouping at the subsection level).
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.