Commit Graph

173 Commits

Author SHA1 Message Date
M. Zulqarnain
1003f262ad feat: Django codemods on LMS (1) (#28851) 2021-11-02 17:00:46 +05:00
michaelroytman
bb299c9521 feat: Remove Use of VERIFIED_NAME_FLAG Waffle Flag and is_verified_enabled Utility
The VERIFIED_NAME_FLAG, the VerifiedNameEnabledView, and the verified_name_enabled key removed from responses for both VerifiedNameView view and VerifiedNameHistoryView
were removed as part https://github.com/edx/edx-name-affirmation/pull/12. This was released in version 2.0.0 of the edx-name-affirmation PyPI package. Please see below for additional context for the removal, copied from the name-affirmation commit message.

The VERIFIED_NAME_FLAG was added as part https://github.com/edx/edx-name-affirmation/pull/12, [MST-801](https://openedx.atlassian.net/browse/MST-801) in order to control the release of the Verified Name project. It was used for a phased roll out by percentage of users.

The release reached a percentage of 50% before it was observed that, due to the way percentage roll out works in django-waffle, the code to create or update VerifiedName records was not working properly. The code was written such that any change to a SoftwareSecurePhotoVerification model instance sent a signal, which was received and handled by the Name Affirmation application. If the VERIFIED_NAME_FLAG was on for the requesting user, a Celery task was launched from the Name Affirmation application to perform the creation of or update to the appropriate VerifiedName model instances based on the verify_student application signal. However, we observed that when SoftwareSecurePhotoVerification records were moved into the "created" or "ready" status, a Celery task in Name Affirmation was created, but when SoftwareSecurePhotoVerification records were moved into the "submitted" status, the corresponding Celery task in Name Affirmation was not created. This caused VerifiedName records to stay in the "pending" state.

The django-waffle waffle flag used by the edx-toggle library implements percentage rollout by setting a cookie in a learner's browser session to assign them to the enabled or disabled group.
It turns out that the code that submits a SoftwareSecurePhotoVerification record, which moves it into the "submitted" state, happens as part of a Celery task in the verify_student application in the edx-platform. Therefore, we believe that because there is no request object in a Celery task, the edx-toggle code is defaulting to the case where there is no request object. In this case, the code checks whether the flag is enabled for everyone when determining whether the flag is enabled. Because of the percentage rollout (i.e. waffle flag not enabled for everyone), the Celery task in Name Affirmation is not created. This behavior was confirmed by logging added as part of https://github.com/edx/edx-name-affirmation/pull/62.

We have determined that we do not need the waffle flag, as we are comfortable that enabling the waffle flag for everyone will fix the issue and are comfortable releasing the feature to all users. For this reason, we are removing references to the flag.

[MST-1130](https://openedx.atlassian.net/browse/MST-1130)
2021-11-01 13:33:55 -04:00
Felipe Montoya
678c159cf8 docs: adding the first version of documentation for open edx events
Includes:
- general documentation
- links to individual events definitions and location
- adding examples to events docs
- adding annotations at the trigger location
2021-10-13 15:28:24 -05:00
Felipe Montoya
dbb4658819 Merge pull request #28640 from eduNEXT/MJG/2nd_batch_openedx_events
[BD-32] feat: add 2nd batch of Open edX Events
2021-09-22 14:12:06 -05:00
Maria Grimaldi
1c447e6176 feat: add 2nd batch of Open edX Events
* Add COURSE_ENROLLMENT_CHANGED: sent after the enrollment update
* Add COURSE_UNENROLLMENT_COMPLETED: sent after the user's unenrollment
* Add CERTIFICATE_CREATED after the user's certificate generation has
been completed
* Add CERTIFICATE_CHANGED: after the certification update has been
completed
* Add CERTIFICATE_REVOKED: after the certificate revocation has been
completed
* Add COHORT_MEMBERSHIP_CHANGED: when a cohort membership update ends
2021-09-15 14:50:28 -04:00
oliviaruizknott
59fefa10eb feat: Change override date to datetime
When first building the Certificate Date Override feature, I set up the
CertificateDateOverride model to store the override dates as Dates
instead of DateTimes.

Turns out this is not how edX typically handles dates, and it’s causing
some minor headaches around needing to convert values. Also, using just
Dates causes timezone issues.

MICROBA-1488
2021-09-10 14:42:36 -06:00
oliviaruizknott
703c917f2a refactor: Use post_delete for date override
Previously, using the bulk delete tool in the Django admin for
`CertificateDateOverride`s would not trigger the post to the credentials
service to delete the corresponding date override stored there. This was
because we were sending the COURSE_CERT_CHANGED signal from an
overridden version of the delete() method. But the Django docs warn:

"Note that the delete() method for an object is not necessarily called
when deleting objects in bulk using a QuerySet or as a result of a
cascading delete. To ensure customized delete logic gets executed, you
can use pre_delete and/or post_delete signals."

Now we use the post_delete signal instead of overriding the delete()
method to make sure the COURSE_CERT_CHANGED signal is sent for both
individual and bulk deletes.

MICROBA-1487
2021-09-01 14:03:35 -06:00
oliviaruizknott
eb2d606283 refactor: send cert changed signal on_commit
Because we have ATOMIC_REQUESTS turned on, the COURSE_CERT_CHANGED
signal was being sent *before* the date override was committed to the
database. This means that the date override data sent to credentials on
CertificateDateOverride save() was always one commit behind.

Django provides an on_commit() function to allow us to perform actions
only after a transaction is completed successfully. I believe this
is when we want this signal to be sent.

This is an alternative to 1) disabling atomic transactions for a view
(honestly, I’m not sure which view we would target anyway), or 2)
passing more data down through the signal.

Toward MICROBA-1423
2021-08-25 15:45:17 -06:00
oliviaruizknott
e99029659c feat: Send date override to credentials
When sending a GeneratedCertificate to Credentials, send the associated
CertificateDateOverride (if there is one), or else None. This
will be triggered after any save of a GeneratedCertificate, and after
any save or deletion of a single CertificateDateOverride.

Credentials will eventually store its own copy of this date override, or
edit or remove exiting date overrides.
2021-08-17 12:22:27 -06:00
Bianca Severino
d2fa7f7239 feat: use verified name for certs if enabled
If the verified name feature is enabled and the user has their
preference set to use verified name for certificates, create and
display certificates with their verified name rather than their
profile name.
2021-08-06 14:28:06 -04:00
Christie Rice
cdeda7a313 fix: Update mode in course certificate when marking cert as invalidated, not verified or not passing (#28330)
MICROBA-1410
2021-08-03 11:24:11 -04:00
oliviaruizknott
8906adb072 feat: Add CertificateDateOverride model
Add a new model (and corresponding migration) to the certificates
app in the LMS: CertificateDateOverride. The model will eventually be
used to allow course teams / support to override the "Issued On" date
for a given course certificate.
2021-08-02 12:44:37 -06:00
Christie Rice
5883d13092 feat!: Remove CertificateWhitelist model (#28308)
This model has been replaced by the CertificateAllowlist.

MICROBA-1304
2021-07-29 09:50:34 -04:00
Awais Qureshi
bdb1e61b82 chore: Django3 has removed python_2_unicode_compatible.
Execute the codemodes.
2021-07-27 23:35:00 +05:00
Matt Tuchfarber
d16c9a804c refactor: Move cert code to cert app
The `may_certify` function is used to determine whether a learner should
be able to see that their certificate is ready. It is therefore entirely
in the certificates domain. This remove may_certifiy and
may_certify_for_course from the xmodule and course_overview
apps and into the certificates app. The xmodule may_certify was not called
outside of tests prior to this, and the other's were easily moved.

In order to avoid circular imports, this also moved
certificate_info_for_user out of the model code and into an API
2021-07-21 15:56:19 -04:00
Justin Hynes
bbda7384f8 refactor: Remove use of CourseOverview model directly in the Certificates app
[MICROBA-1289]
* Remove use of the CourseOverview model directly in the Certificates app
* Introduce a few new Python API functions in the `course_overview` and `catalog` django apps to replace functionality in the Certificates app.
2021-07-13 10:26:39 -04:00
Christie Rice
69580aa592 feat!: Read from the allowlist model, instead of from the whitelist model. Only write to the allowlist model. (#27974)
MICROBA-982
2021-06-25 09:47:32 -04:00
Christie Rice
0ee5a64939 feat: Save updates to the allowlist model, and add history to the allowlist model (#27904)
MICROBA-982
2021-06-14 12:07:28 -04:00
Christie Rice
878b6f5607 test: Add model tests (#27814)
MICROBA-982
2021-06-08 14:31:17 -04:00
Albert (AJ) St. Aubin
c37e88fdbf refactor: Move CertificateStatuses to data.py file per OEP-49
[MICROBA-678]

To allow access to CertificateStatuses constants in other Django apps we are moving the
CertificateStatuses enum to data.py per OEP-49.
2021-06-08 08:56:21 -04:00
Justin Hynes
6a0f57a266 refactor: update references to deprecated whitelist model
[MICROBA-1012]
- update python files to reference the allowlist instead of whitelist

As part of the Certificates v2 work, and in an effort to make the codebase more inclusive, we are moving away from using the term "whitelist" in favor of "allowlist". This PR is part of our renaming efforts across the Certificates Django app, and other Django apps that make use of Certificates functionality.
2021-06-03 14:09:24 -04:00
Christie Rice
953004e58a feat: Add CertificateAllowlist model (#27802)
MICROBA-982
2021-06-02 09:20:02 -04:00
Justin Hynes
48f4f9f475 feat: add edx.certificate.revoked event
[MICROBA-1075]
- Adds a new `edx.certificate.revoked` event to the LMS.
- Refactor of our certificate revocation functions in the GeneratedCertificate model.

This new event will be emit when a GeneratedCertificate with the status of `downloadable` is revoked (through the `invalidate(), mark_notpassing(), or mark_unverified() functions). Event will have a `source` field that will allow us how our certificates are being revoked from learners and can be broken down in the following way:
*Invalidate*
- allowlist_removal
- certificate_generation
- certificate_regeneration
- certificate_service
- certificate_invalidation_list
- bulk_certificate_regeneration

*mark_notpassing*
- certificate_generation
- notpassing_signal

*unverified*
- certificate_generation
2021-05-25 13:44:01 -04:00
Christie Rice
a699fe5281 docs: Add documentation for GeneratedCertificate fields (#27722)
MICROBA-1218
2021-05-25 13:27:56 -04:00
Usama Sadiq
60f49d4048 refactor: pyupgrade second iteration (#27442) 2021-05-03 17:13:15 +05:00
Justin Hynes
563b48c50c [MICROBA-1139]
* Change order of object Manager declarations in the GeneratedCertificate model. Declaration order matters and It appears that having the "base" `objects` declaration after the other Custom Managers creates an issue where I cannot access `objects` in a migration without this change.
* As part of the manager migration there is a cleanup function that resets the `error_reason` field to an empty string for all certificates in the `downloadable` state that currently have an error listed in the record.
2021-04-27 15:55:51 -04:00
Christie Rice
a6d9275cde fix: Ignore passing signal if the cert status is already downloadable (#27403)
MICROBA-1106
2021-04-27 10:24:30 -04:00
Christie Rice
6e1f700cdc feat: Generate more certificate status for V2 course certs (#27326)
MICROBA-1106
2021-04-27 09:40:06 -04:00
Justin Hynes
8902a945ea docs: Add ADR for recent cert revocation and regeneration changes
[MICROBA-1080]
- Add additional context in the `invalidate` and `mark_notpassing` functions related to recent work
2021-04-23 11:33:07 -04:00
Justin Hynes
2c96a2aca9 feat: stop removing verify_uuid value when revoking course certificates
[MB-1077]
- Stop removing the verify_uuid when revoking course certificates. In v2 of course certificates this will allow us to retain the same URL to the certificate. If a learner's certificate is revoked (from being invalidated or no longer passing the course) the UUID will remain intact and the URL will not change.
- Look for an existing cert for the user in a course-run during generation. If one exists, use the UUID from the existing certificate when updating the record.
- Stop generating a `key` for v2 web-certificates. This is not needed for web-certs (this is used in PDF cert generation).
2021-04-12 14:39:21 -04:00
Christie Rice
8d4d4f5e79 fix: Clear error reason when setting a non-error status (#27273)
MICROBA-1106
2021-04-07 14:11:13 -04:00
Christie Rice
3d20c848f8 style: Use constants for certificate status. Update certificate status and grade documentation. (#27250)
MICROBA-1074
2021-04-07 09:38:56 -04:00
Christie Rice
1181fb343e feat!: Remove allow_certificate checks from course certificates (#27206)
DEPR-140 MICROBA-985
2021-04-05 14:00:07 -04:00
Justin Hynes
346fe90002 chore: remove cert_allowlist_generation management command
[MICROBA-1100]
* Remove `cert_allowlist_generation` management command. This has been replaced by the `cert_generation` management command which can handle generation of allowlist and v2 certificates.
* Remove AllowListGenerationConfiguration configuration model.
2021-04-01 08:53:14 -04:00
Justin Hynes
6b38debfeb feat: Update cert_generation mgmt command with ability to read arguments from config model
[MICROBA-1100]
* Add CertificationGenerationCommandConfiguration model that will store the command arguments for the `cert_generation` mgmt command
* Add ability to add entries to the CertificationGenerationCommandConfiguration through Django admin
* Update mgmt command with ability to read arguments from the config model/database
* Fix failing test in `test_cert_generation.py`
* Add new test for missing `users` argument in `test_cert_generation.py`
2021-04-01 07:39:33 -04:00
Justin Hynes
eed9202485 MICROBA-1011 | Remove duplicate allowlist entries and add constraint to model to prevent future occurrences
[MICROBA-1011]
- Add data migration to remove the duplicate certificate allowlist entries before adding the new constraint to the CertificateWhitelist model.
- Add `unique_together` constraint to the CertificateWhitelist model. A learner should only have a single allowlist entry per course-run.
2021-03-12 14:18:39 -05:00
Christie Rice
4aff07ad82 MICROBA-923 Add method to generate V2 course certificates (#26898) 2021-03-09 11:02:19 -05:00
Usama Sadiq
cfb911966a Merge pull request #26520 from edx/usamasadiq/bom-2355-pyupgrade
Ran pyupgrade on lms/djangoapps-I
2021-03-01 15:54:01 +05:00
Christie Rice
fdc219a319 MICROBA-918 Unify course cert invalidation (#26691) 2021-02-25 10:30:18 -05:00
usamasadiq
84bb9faa3f refactor: ran pyupgrade on lms/djangoapps/certificates 2021-02-25 19:58:39 +05:00
Matt Tuchfarber
0374c3f62b Update help text 2021-02-16 15:16:52 -05:00
Matt Tuchfarber
d380d85f5c feat: Allow cert allowlist mgmt cmd to use db args
The management command to generate certificates for users on a course's
allowlist (formerly whitelist) now allows for database arguments to
allow it to be called outside of a manual shell.
2021-02-16 14:49:26 -05:00
Christie Rice
7db147e06a Fix lint-amnesty warnings (#26412) 2021-02-09 10:20:46 -05:00
Olivia Ruiz-Knott
016b1ce3f7 Merge pull request #26227 from edx/ork/MICROBA-905_add-history-to-certificate-invalidation
MICROBA-905 Add django-simple-history  to CertificateInvalidation model
2021-02-04 10:11:05 -05:00
oliviaruizknott
d33d9a66c8 docs: clarify comment 2021-02-03 16:52:34 -05:00
Jawayria
92a13c55c3 Applied pylint-amnesty to certificates 2021-02-02 19:23:48 +05:00
oliviaruizknott
8dc86227b9 MICROBA-905 Add django-simple-history to CertificateInvalidation model 2021-01-29 15:10:08 -05:00
Christie Rice
3638005326 MICROBA-921 Add certificate allowlist (#26129) 2021-01-29 10:22:07 -05:00
Christie Rice
8888f27d29 MICROBA-921 Fix typos (#26132)
* MICROBA-921 fix typos

* Fix quality
2021-01-25 15:05:22 -05:00
Kyle McCormick
151bd13666 Use full names for common.djangoapps imports; warn when using old style (#25477)
* Generate common/djangoapps import shims for LMS
* Generate common/djangoapps import shims for Studio
* Stop appending project root to sys.path
* Stop appending common/djangoapps to sys.path
* Import from common.djangoapps.course_action_state instead of course_action_state
* Import from common.djangoapps.course_modes instead of course_modes
* Import from common.djangoapps.database_fixups instead of database_fixups
* Import from common.djangoapps.edxmako instead of edxmako
* Import from common.djangoapps.entitlements instead of entitlements
* Import from common.djangoapps.pipline_mako instead of pipeline_mako
* Import from common.djangoapps.static_replace instead of static_replace
* Import from common.djangoapps.student instead of student
* Import from common.djangoapps.terrain instead of terrain
* Import from common.djangoapps.third_party_auth instead of third_party_auth
* Import from common.djangoapps.track instead of track
* Import from common.djangoapps.util instead of util
* Import from common.djangoapps.xblock_django instead of xblock_django
* Add empty common/djangoapps/__init__.py to fix pytest collection
* Fix pylint formatting violations
* Exclude import_shims/ directory tree from linting
2020-11-10 07:02:01 -05:00