Commit Graph

25005 Commits

Author SHA1 Message Date
Glib Glugovskiy
c5d94d21bf docs: change default value for a toggle to correct doc (#34747) 2024-05-09 08:57:43 -03:00
jawad khan
67ccd702f5 feat: Added upgrade deadline in blocks api (#34750) 2024-05-09 12:19:50 +05:00
David Ormsbee
6308c968db refactor: always define CORS_ALLOW_HEADERS centrally
The LMS and Studio need to set values for CORS_ALLOW_HEADERS so that the
MFEs can work properly, since preflight requests will need to send over
extra headers. Prior to this commit, CORS_ALLOW_HEADERS was being
redefined in multiple places in edx-platform and again in Tutor's config
because it was only being conditionally set if ENABLE_CORS_HEADERS was
True (which was a policy setting). But CORS_ALLOW_HEADERS is application
logic in that the value is determined by what the view needs, and won't
vary by deployment.

By consolidating this to always be defined in the common.py files, we
make sure that deployment environments don't have to define it. An
example of where this bit us was when course import in the course
authoring MFE did not work because Tutor was using an outdated value for
this setting.

A followup to this would be to just rip out the ENABLE_CORS_HEADERS
setting entirely, and just always have it on. But that would benefit
from a little more discovery to make sure there's no weird use case that
still requires it to be False (maybe something in the test suite?).
2024-05-08 16:16:05 -04:00
David Ormsbee
d8aab3f72c fix: remove modulestore init to avoid pymongo deadlocks
Prior to this commit, the LMS would log the following error in tutor
production:

  pymongo/topology.py:175: UserWarning: MongoClient opened before fork.
  Create MongoClient only after forking. See PyMongo's documentation for
  details:
  https://pymongo.readthedocs.io/en/stable/faq.html#is-pymongo-fork-safe

Quoting from that page:

> PyMongo is not fork-safe. Care must be taken when using instances of
> MongoClient with fork(). Specifically, instances of MongoClient must
> not be copied from a parent process to a child process. Instead, the
> parent process and each child process must create their own instances
> of MongoClient. Instances of MongoClient copied from the parent
> process have a high probability of deadlock in the child process due
> to the inherent incompatibilities between fork(), threads, and locks
> described below. PyMongo will attempt to issue a warning if there is a
> chance of this deadlock occurring.

For edx-platform, the MongoClient connection is initalized with the
modulestore() invocation. That call creates and caches a global variable
that Studio or the LMS will reuse across the life of the worker process.

That initialization was put into lms/wsgi.py in 7c758ec9, but originated
in lms/startup.py with 51d0dd1. The original reason for it is because at
that time (2013), we still supported the XML Modulestore, which stored
courses on disk as directories of OLX files and static assets. The XML
Modulestore would then read the entirety of those courses into memory at
startup. This meant that the startup process was *extremely* expensive,
so we needed to have it happen before the workers started serving
requests to users, instead of having the system lazily read them in when
the first user request arrived.

Loading course content in this form hasn't been supported since 2016,
meaning that modulestore initialization is no longer the performance
time bomb that it once was. The fact that this code remained here is
likely an oversight, which was considered harmless until @ztraboo
reported these pymongo log messages during the course of investigating
performance issues:

https://discuss.openedx.org/t/atlas-mongodb-performance-issues-un-indexed-queries/12803/16

Two potential followups that should be explored after this:

1. Tutor should probably be forking earlier than this, before we load
   Django settings and initialize database and cache connections.
2. It's possible that the caching mechanism for modulestore should be
   revisited to operate at the request cache level. The performance
   benefit of keeping it around may not be worth the potential memory
   leaks. Anything we do here would have to be very carefully monitored
   though, since connection costs may add up.
2024-05-07 11:20:20 -04:00
Kyle D. McCormick
21a1235a28 revert: revert: build: finish replacing paver assets
This reverts commit 4c0284b87d.
2024-05-07 08:40:40 -04:00
Kyle McCormick
4c0284b87d Revert "build: finish replacing paver assets (#34554)" (#34700)
Reverts #34554, which causes compilation of edX.org's
legacy comprehensive theme to be skipped in their deployment pipeline.
We have not determined the precise cause yet, but it seems like the
compile_sass management command is not correctly getting the
list of comprehensive theme directories from Django settings.
2024-05-06 12:57:51 -04:00
Troy Sankey
08323ccb18 Merge pull request #34686 from openedx/pwnage101/ENT-8766
fix: remove setting toggle which might be causing bug with future course redirects
2024-05-06 09:52:01 -07:00
Maria Grimaldi
b792222772 fix: add support to Group Configuration view for Teams partitions (#34643) 2024-05-06 11:46:02 -04:00
Ivan Niedielnitsev
333f1ff2c2 feat: [FC-0056] Add waffle flags for navigation and auxiliary (discussion and notification) sidebars (#34650)
Add waffle flags for navigation and auxiliary (discussion and notification) sidebars.
---------

Co-authored-by: Glib Glugovskiy <glib.glugovskiy@raccoongang.com>
Co-authored-by: Glib Glugovskiy <glugov1998@gmail.com>
Co-authored-by: Adolfo R. Brandes <arbrandes@arbrand.es>
2024-05-06 11:04:51 -03:00
Navin Karkera
8077719b8e fix: enroll users when added to a forum role (#32436) 2024-05-06 09:00:31 -04:00
Kyle McCormick
3f0f7ce705 build: finish replacing paver assets (#34554)
Together, these changes make it so that all features of the Paver-based
asset compilation system are supported with drop-in Paver-free
replacements. The remaining Paver asset functions are trivial wrappers,
which can be comfortably deleted before Sumac.

* Turn `./manage.py ... compile_sass` into a simple wrapper around `npm
  run compile-sass`
* Turn `paver webpack` into a simple wrapper around `npm run webpack`
* Turn `pavelib.assets:collect_assets` into a simple wrapper around
  `./manage.py ... collectstatic`
* Add/improve deprecation warnings for all Paver asset commands.
* Load defaults for asset-related Django settings from environment
  variables. This allows the build to work without Python. For the
  settings which will be removed in Sumac, I've added deprecation
  warnings.
* Change EDX_PLATFORM_THEME_DIRS env var to COMPREHENSIVE_THEME_DIRS.
  This simplifies the migration instructions, because all the new env
  vars now match their corresponding Django settings. This amends an
  ADR, but it should not be a breaking change because the  env var was
  recently added (since Quince) and nobody should be using it yet.
* Future-proof the static assets ADR with links. The linked pages will
  be kept up-to-date even if the ADR isn't.

Part of: https://github.com/openedx/edx-platform/issues/34467
2024-05-06 08:29:45 -04:00
Troy Sankey
2cb35cb24b fix: remove setting toggle which might be causing bug with future course redirects
We've long rolled out the
`COURSEWARE_COURSE_NOT_STARTED_ENTERPRISE_LEARNER_ERROR` setting toggle so
it should be safe to remove.

I'm completely at a loss as to why course access checks are not
returning the `course_not_started_enterprise_learner` error code when it
should, but it does in stage/local, so this PR is grasping at straws.

ENT-8766
2024-05-03 11:15:59 -07:00
Syed Sajjad Hussain Shah
2ce25b3eb6 feat: autogenerate username on registration (#34562)
* feat: autogenerate username on registration

---------

Co-authored-by: Attiya Ishaque <atiya.ishaq@arbisoft.com>
Co-authored-by: Blue <ahtesham-quraish@users.noreply.github.com>
2024-05-02 08:58:37 +05:00
Kyle McCormick
85d726f797 feat!: remove SkillTaggingMixin from common XBLOCK_MIXINS (#34530)
Skill tagging [1] is not a core feature, and it is not installed into core
requirements, evidenced by the fact that a try-except clause must be used to
import it into common settings. Setting overrides like this should be made in
each operator's private settings file rather than the upstream common settings
file.

BREAKING CHANGE: Operators who install the xblock-skilltagging package will
need to add SkillTaggingMixin to XBLOCK_MIXINS_EXTRA (or XBLOCK_MIXINS) in a
private settings/YAML file, as it will no longer be done automatically in
common settings. The README for xblock-skilltagging has an example [2]

[1] https://github.com/openedx/xblock-skill-tagging
[2] https://github.com/openedx/xblock-skill-tagging?tab=readme-ov-file#configuration
2024-04-29 13:29:47 -04:00
Saad Yousaf
45cd459dde feat: add flag for showing/hiding new discussion sidebar view on course home page. (#34561)
Co-authored-by: Saad Yousaf <saad.yousaf@A006-01048.local>
2024-04-29 12:57:49 +05:00
Navin Karkera
61b8961cdf fix: auto enroll users when added as staff (#32561)
The course team management section under Instructor > Membership tab
allows users to be added a role even if are not enrolled in the course.
This is behaviour does not match the help text displayed in the section.

This PR updates modify_access api to enrolls user if they are not enrolled
after adding them to a role as well as changes the help text to reflect
actual changes.
2024-04-26 13:16:32 -04:00
Ivan Niedielnitsev
30836729b7 feat: Implement Sidebar Navigation [FC-0056] (#34457)
This commit addresses to the need to add an API for Sidebar Navigation
that returns the course structure with sections, subsections, and
**units**, according to user access rules. (Previous outline requests
only went down to subsections.)

To improve the performance of the API, we cache the course structure
for a user, which makes it much easier to calculate the block structure
for the user at each request. However, there may be cases when this
caching can lead to an overflow of the cache storage in high-loaded LMS
with large courses, so the corresponding flag
"courseware.disable_navigation_sidebar_blocks_caching" was added so
that this caching can be disabled.
2024-04-26 12:04:42 -04:00
Maria Grimaldi
809ffc3743 feat: connect teams with content groups using dynamic partition generator (#33788)
Implements the connection from the teams feature to the content groups feature. This implementation uses the dynamic partition generator extension point to associate content groups with the users that belong to a Team.

This implementation was heavily inspired by the enrollment tracks dynamic partitions.
2024-04-25 13:02:49 -04:00
Zachary Hancock
3852358ca2 feat: feature setting to gate courseware search to verified enrollments (#34606)
Adds a Django setting that limits courseware search to users in a verified enrollment track.
2024-04-25 11:41:53 -04:00
Glib Glugovskiy
c37e9765ef feat(mobile_api): Add course access object to mobile course info API (#34273)
* feat: include access serializer into mobile info api view

* test: add tests for serializer and view methods

* test: move tests to common directory and update test case

* fix: cr fixes and use snake case for functions

* test: fix additional get call assertion

* feat: add required course access messages to mobile endpoint

* test: [AXM-229] Improve test coverage

* style: [AXM-229] Try to fix linters

* fix: remove redundant comment

* refactor: change names for the test files

---------

Co-authored-by: KyryloKireiev <kirillkireev888@gmail.com>
2024-04-25 13:13:43 +05:00
Mohammad Ahtasham ul Hassan
649631e589 feat: add source_system to enrollments (#34540)
* feat: add source_system to enrollments
2024-04-24 17:47:39 +05:00
Dmytro
9738f61519 fix: "Course org display str" option doesnt influence certificate (#34465)
"Course organization display string" option in Advanced settings doesn't influence certificate
Co-authored-by: Dima Alipov <dimaalipov@MacBook-Pro-Dima.local>
2024-04-23 09:21:32 -04:00
Muhammad Anas
aea7fcee45 feat: added feature flag to enable blake2b hashing 2024-04-22 14:09:41 -04:00
Ahtisham Shahid
5b1d52d811 fix: endorsed post notification audiance updated (#34513) 2024-04-22 13:09:04 +05:00
Feanil Patel
6ea123db4d Merge pull request #34528 from openedx/feanil/remove_django_splash
feat!: Remove the django-splash app.
2024-04-19 10:53:46 -04:00
Feanil Patel
884fe8ace9 fix: Fix function mocking.
The way the patch decorator was being used is not supported in python
3.11.  Use the patch decorator to auto generate the correct mock and
make the test a bit more readabale.  The new change is both 3.8 and
3.11 compatible.
2024-04-18 13:28:30 -04:00
Feanil Patel
08b3f0bf32 fix: Create a bad unicode file differently.
In Python 3.11 CSV files are allowed to have null characters so the test
data is no longer a valid. We update it to not have a valid unicode
character to still test this code path correctly.

I'm not concerned about the fact that the files with null will get past
this test beacause there are other checks on the content of the file
that catch if it doesn't have enough or the right fields so this should
be a safe change to make to the tests.

Relevant Change in Python: https://github.com/python/cpython/issues/71767
2024-04-18 13:28:30 -04:00
Feanil Patel
9bd4474f7d test: Reduce query counts now that we dropped django-splash. 2024-04-18 12:43:33 -04:00
Feanil Patel
cec7969ce8 feat!: Remove the django-splash app.
DEPR: https://github.com/openedx/public-engineering/issues/224

The django-splash repo was created 11 years ago to let the LMS redirect
users to a splash screen when a user comes to the site for the first
time. It works by looking for a configurable cookie value and
redirecting from the middleware.

This feature was never documented, has some edx.org hardcoded defaults,
and is not compatible with MFEs.

BREAKING CHANGE: The django splash feature will no longer be available.
2024-04-18 12:43:26 -04:00
Kyle D. McCormick
38d350f48c docs: document XBLOCK_MIXINS and XBLOCK_EXTRA_MIXINS 2024-04-17 09:43:12 -04:00
Jansen Kantor
8d8ff29d4c fix: don't urljoin empty string (#34516) 2024-04-16 11:30:15 -04:00
Glenn R. Martin
81e781c34d feat: waffle refunds for commerce-coordinator
# feat: waffle refunds for commerce-coordinator

Based on approved: #34438

However CLA is invalid now for initial creator so a new PR was required.
2024-04-12 10:43:37 -04:00
Glenn R. Martin
294c6a7768 fix: feedback from Shafqat 2024-04-09 11:12:57 -04:00
Glenn R. Martin
9e56c1d04b fix: broken lms test for CC switching in Ecommerce Service 2024-04-09 11:09:49 -04:00
Rodrigo Martin
b42e66bcdc fix(AU-1855): Fix email WCR email subject variable text (#34488)
* fix(AU-1855): Fix email WCR email subject variable text

* fix(AU-1855): Add filter force_escape before blockstrans
2024-04-08 13:42:15 -03:00
Glenn R. Martin
fc3a8f7ebb chore: exception handling 2024-04-08 10:32:22 -04:00
Irtaza Akram
a1f08d85bd Merge pull request #34398 from openedx/xblock2
upgrade xblock==2.0
References:
- https://github.com/openedx/public-engineering/issues/15
- https://github.com/openedx/XBlock/pull/680
2024-04-08 14:30:38 +05:00
michaelroytman
541bc6f5cb feat: add must_retry as valid status to approve_id_verifications management command
Sometimes, submissions to an IDV provider fail, which results in an IDV attempt moving from the "ready" status into the "must_retry" status instead of the "submitted" status.

We would like to approve these attempts too.
2024-04-05 14:01:45 -04:00
Rodrigo Martin
e768d6d9e5 feat: send email after course reset completion (#34460)
* feat: send email after course reset completion

* fix: lint test

* fix: clean code

* fix: correct expected email parts

* fix: logs

* fix: email assertion
2024-04-05 12:27:21 -03:00
Bryann Valderrama
85620ec73c feat: add grading method support for problems with multiple attempts (#33911)
A new field in the Problem settings for choosing a Grading Method. Currently, the only Grading Method is the Last Score. From now on, when turning the feature flag on, the new grading methods available for configuration in Studio are:
- Last Score (Default): The last score made is taken for grading.
- First Score: The first score made is taken for grading.
- Highest Score: The highest score made is taken for grading.
- Average Score: The average of all scores made is taken for grading.
2024-04-04 14:04:25 -04:00
Irtaza Akram
c810a1b3e5 Merge branch 'master' into xblock2 2024-04-04 15:16:55 +05:00
Jansen Kantor
e49628558c feat: add validation and actions to course reset django admins (#34453)
* fix: course opt in course id should be unique

* feat: add validation for opt in course id admin page

* feat: admin action to mark audits as failed
2024-04-03 10:08:50 -04:00
Jansen Kantor
9c5779ad9c feat: add flag to silence signals and events when clearing state (#34434)
* feat: add flag to silence signals and events when clearing state

* feat: don't emit signals and events when clearing entire course
2024-04-03 10:08:29 -04:00
Phillip Shiu
7535f27aa2 fix: change default for COORDINATOR_CHECKOUT_REDIRECT_PATH 2024-04-03 07:21:15 -04:00
Irtaza Akram
682a80addd fix: review changes 2024-04-03 16:03:56 +05:00
Phillip Shiu
ed5270469a chore: bypass invalid-django-waffle-import
This edx-lint check is to prevent:

    import waffle

However, we are doing:

    import .waffle

Where .waffle is importing correctly from edx_toggles instead of
directly from the Django waffle library.

See also:

be07c3739d/edx_lint/pylint/annotations_check.py (L379)
2024-04-02 04:53:22 -04:00
Phillip Shiu
5989d3e736 chore: remove unused import 2024-04-02 04:53:22 -04:00
Phillip Shiu
87a1469232 feat: waffle refunds for commerce-coordinator 2024-04-02 04:53:21 -04:00
Irtaza Akram
3faa773bb9 feat: add support for xblock 2 2024-04-01 16:02:06 +05:00
Jansen Kantor
104969c659 fix: add gradebook to devstack csrf trust list (#34451) 2024-03-29 14:20:59 -04:00