From 60860e3aa802ff9e89d617a2c40d59793103c7c6 Mon Sep 17 00:00:00 2001 From: Peter Fogg Date: Wed, 6 Jan 2016 12:46:58 -0500 Subject: [PATCH] Disable audit certificates for new audit enrollments. An `eligible_for_certificate` field is added to the GeneratedCertificate model. This way we can retain existing grading logic, as well as maintaining correctness in analytics and reporting. Ineligible certificates are hidden by using the `eligible_certificates` manager on GeneratedCertificate. Some places in the coe (largely reporting, analytics, and management commands) use the default `objects` manager, since they need access to all certificates. This commit also updates the DB cache for acceptance tests. --- common/djangoapps/course_modes/models.py | 12 + .../course_modes/tests/test_models.py | 13 + .../student/management/commands/get_grades.py | 4 +- common/test/db_cache/bok_choy_data.json | 2 +- .../db_cache/bok_choy_migrations_data.sql | 4 +- common/test/db_cache/bok_choy_schema.sql | 91 +++-- lms/djangoapps/certificates/api.py | 19 +- .../management/commands/create_fake_cert.py | 2 +- .../management/commands/fix_ungraded_certs.py | 5 +- .../management/commands/gen_cert_report.py | 19 +- .../commands/resubmit_error_certificates.py | 2 +- ...tedcertificate_eligible_for_certificate.py | 19 ++ lms/djangoapps/certificates/models.py | 46 ++- lms/djangoapps/certificates/queue.py | 311 +++++++++--------- lms/djangoapps/certificates/tests/test_api.py | 6 +- .../tests/test_cert_management.py | 19 +- .../tests/test_create_fake_cert.py | 4 +- .../certificates/tests/test_models.py | 50 ++- .../certificates/tests/test_queue.py | 75 ++++- .../certificates/tests/test_support_views.py | 12 +- .../certificates/tests/test_views.py | 2 +- .../certificates/tests/test_webview_views.py | 34 +- lms/djangoapps/certificates/views/webview.py | 4 +- lms/djangoapps/certificates/views/xqueue.py | 2 +- .../instructor/tests/test_certificates.py | 4 +- lms/djangoapps/instructor/views/api.py | 7 +- lms/djangoapps/instructor_analytics/basic.py | 2 +- .../instructor_task/tasks_helper.py | 2 +- .../tests/test_tasks_helper.py | 4 +- 29 files changed, 530 insertions(+), 246 deletions(-) create mode 100644 lms/djangoapps/certificates/migrations/0008_generatedcertificate_eligible_for_certificate.py diff --git a/common/djangoapps/course_modes/models.py b/common/djangoapps/course_modes/models.py index c8c07eae0a..7e80d40095 100644 --- a/common/djangoapps/course_modes/models.py +++ b/common/djangoapps/course_modes/models.py @@ -592,6 +592,18 @@ class CourseMode(models.Model): modes = cls.modes_for_course(course_id) return min(mode.min_price for mode in modes if mode.currency.lower() == currency.lower()) + @classmethod + def is_eligible_for_certificate(cls, mode_slug): + """ + Returns whether or not the given mode_slug is eligible for a + certificate. Currently all modes other than 'audit' grant a + certificate. Note that audit enrollments which existed prior + to December 2015 *were* given certificates, so there will be + GeneratedCertificate records with mode='audit' and + eligible_for_certificate=True. + """ + return mode_slug != cls.AUDIT + def to_tuple(self): """ Takes a mode model and turns it into a model named tuple. diff --git a/common/djangoapps/course_modes/tests/test_models.py b/common/djangoapps/course_modes/tests/test_models.py index c6406e75ed..0d525128dc 100644 --- a/common/djangoapps/course_modes/tests/test_models.py +++ b/common/djangoapps/course_modes/tests/test_models.py @@ -430,3 +430,16 @@ class CourseModeModelTest(TestCase): verified_mode.expiration_datetime = None self.assertFalse(verified_mode.expiration_datetime_is_explicit) self.assertIsNone(verified_mode.expiration_datetime) + + @ddt.data( + (CourseMode.AUDIT, False), + (CourseMode.HONOR, True), + (CourseMode.VERIFIED, True), + (CourseMode.CREDIT_MODE, True), + (CourseMode.PROFESSIONAL, True), + (CourseMode.NO_ID_PROFESSIONAL_MODE, True), + ) + @ddt.unpack + def test_eligible_for_cert(self, mode_slug, expected_eligibility): + """Verify that non-audit modes are eligible for a cert.""" + self.assertEqual(CourseMode.is_eligible_for_certificate(mode_slug), expected_eligibility) diff --git a/common/djangoapps/student/management/commands/get_grades.py b/common/djangoapps/student/management/commands/get_grades.py index 2d9dc859b5..25aff6a322 100644 --- a/common/djangoapps/student/management/commands/get_grades.py +++ b/common/djangoapps/student/management/commands/get_grades.py @@ -97,7 +97,9 @@ class Command(BaseCommand): cert_grades = { cert.user.username: cert.grade for cert in list( - GeneratedCertificate.objects.filter(course_id=course_key).prefetch_related('user') + GeneratedCertificate.objects.filter( # pylint: disable=no-member + course_id=course_key + ).prefetch_related('user') ) } print "Grading students" diff --git a/common/test/db_cache/bok_choy_data.json b/common/test/db_cache/bok_choy_data.json index 947404b232..2c84125477 100644 --- a/common/test/db_cache/bok_choy_data.json +++ b/common/test/db_cache/bok_choy_data.json @@ -1 +1 @@ -[{"fields": {"model": "permission", "app_label": "auth"}, "model": "contenttypes.contenttype", "pk": 1}, {"fields": {"model": "group", "app_label": "auth"}, "model": "contenttypes.contenttype", "pk": 2}, {"fields": {"model": "user", "app_label": "auth"}, "model": "contenttypes.contenttype", "pk": 3}, {"fields": {"model": "contenttype", "app_label": "contenttypes"}, "model": "contenttypes.contenttype", "pk": 4}, {"fields": {"model": "session", "app_label": "sessions"}, "model": "contenttypes.contenttype", "pk": 5}, {"fields": {"model": "site", "app_label": "sites"}, "model": "contenttypes.contenttype", "pk": 6}, {"fields": {"model": "taskmeta", "app_label": "djcelery"}, "model": "contenttypes.contenttype", "pk": 7}, {"fields": {"model": "tasksetmeta", "app_label": "djcelery"}, "model": "contenttypes.contenttype", "pk": 8}, {"fields": {"model": "intervalschedule", "app_label": "djcelery"}, "model": "contenttypes.contenttype", "pk": 9}, {"fields": {"model": "crontabschedule", "app_label": "djcelery"}, "model": "contenttypes.contenttype", "pk": 10}, {"fields": {"model": "periodictasks", "app_label": "djcelery"}, "model": "contenttypes.contenttype", "pk": 11}, {"fields": {"model": "periodictask", "app_label": "djcelery"}, "model": "contenttypes.contenttype", "pk": 12}, {"fields": {"model": "workerstate", "app_label": "djcelery"}, "model": "contenttypes.contenttype", "pk": 13}, {"fields": {"model": "taskstate", "app_label": "djcelery"}, "model": "contenttypes.contenttype", "pk": 14}, {"fields": {"model": "globalstatusmessage", "app_label": "status"}, "model": "contenttypes.contenttype", "pk": 15}, {"fields": {"model": "coursemessage", "app_label": "status"}, "model": "contenttypes.contenttype", "pk": 16}, {"fields": {"model": "studentmodule", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 17}, {"fields": {"model": "studentmodulehistory", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 18}, {"fields": {"model": "xmoduleuserstatesummaryfield", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 19}, {"fields": {"model": "xmodulestudentprefsfield", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 20}, {"fields": {"model": "xmodulestudentinfofield", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 21}, {"fields": {"model": "offlinecomputedgrade", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 22}, {"fields": {"model": "offlinecomputedgradelog", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 23}, {"fields": {"model": "studentfieldoverride", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 24}, {"fields": {"model": "anonymoususerid", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 25}, {"fields": {"model": "userstanding", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 26}, {"fields": {"model": "userprofile", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 27}, {"fields": {"model": "usersignupsource", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 28}, {"fields": {"model": "usertestgroup", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 29}, {"fields": {"model": "registration", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 30}, {"fields": {"model": "pendingnamechange", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 31}, {"fields": {"model": "pendingemailchange", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 32}, {"fields": {"model": "passwordhistory", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 33}, {"fields": {"model": "loginfailures", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 34}, {"fields": {"model": "historicalcourseenrollment", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 35}, {"fields": {"model": "courseenrollment", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 36}, {"fields": {"model": "manualenrollmentaudit", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 37}, {"fields": {"model": "courseenrollmentallowed", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 38}, {"fields": {"model": "courseaccessrole", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 39}, {"fields": {"model": "dashboardconfiguration", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 40}, {"fields": {"model": "linkedinaddtoprofileconfiguration", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 41}, {"fields": {"model": "entranceexamconfiguration", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 42}, {"fields": {"model": "languageproficiency", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 43}, {"fields": {"model": "courseenrollmentattribute", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 44}, {"fields": {"model": "enrollmentrefundconfiguration", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 45}, {"fields": {"model": "trackinglog", "app_label": "track"}, "model": "contenttypes.contenttype", "pk": 46}, {"fields": {"model": "ratelimitconfiguration", "app_label": "util"}, "model": "contenttypes.contenttype", "pk": 47}, {"fields": {"model": "certificatewhitelist", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 48}, {"fields": {"model": "generatedcertificate", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 49}, {"fields": {"model": "certificategenerationhistory", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 50}, {"fields": {"model": "examplecertificateset", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 51}, {"fields": {"model": "examplecertificate", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 52}, {"fields": {"model": "certificategenerationcoursesetting", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 53}, {"fields": {"model": "certificategenerationconfiguration", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 54}, {"fields": {"model": "certificatehtmlviewconfiguration", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 55}, {"fields": {"model": "badgeassertion", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 56}, {"fields": {"model": "badgeimageconfiguration", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 57}, {"fields": {"model": "certificatetemplate", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 58}, {"fields": {"model": "certificatetemplateasset", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 59}, {"fields": {"model": "instructortask", "app_label": "instructor_task"}, "model": "contenttypes.contenttype", "pk": 60}, {"fields": {"model": "courseusergroup", "app_label": "course_groups"}, "model": "contenttypes.contenttype", "pk": 61}, {"fields": {"model": "cohortmembership", "app_label": "course_groups"}, "model": "contenttypes.contenttype", "pk": 62}, {"fields": {"model": "courseusergrouppartitiongroup", "app_label": "course_groups"}, "model": "contenttypes.contenttype", "pk": 63}, {"fields": {"model": "coursecohortssettings", "app_label": "course_groups"}, "model": "contenttypes.contenttype", "pk": 64}, {"fields": {"model": "coursecohort", "app_label": "course_groups"}, "model": "contenttypes.contenttype", "pk": 65}, {"fields": {"model": "courseemail", "app_label": "bulk_email"}, "model": "contenttypes.contenttype", "pk": 66}, {"fields": {"model": "optout", "app_label": "bulk_email"}, "model": "contenttypes.contenttype", "pk": 67}, {"fields": {"model": "courseemailtemplate", "app_label": "bulk_email"}, "model": "contenttypes.contenttype", "pk": 68}, {"fields": {"model": "courseauthorization", "app_label": "bulk_email"}, "model": "contenttypes.contenttype", "pk": 69}, {"fields": {"model": "brandinginfoconfig", "app_label": "branding"}, "model": "contenttypes.contenttype", "pk": 70}, {"fields": {"model": "brandingapiconfig", "app_label": "branding"}, "model": "contenttypes.contenttype", "pk": 71}, {"fields": {"model": "externalauthmap", "app_label": "external_auth"}, "model": "contenttypes.contenttype", "pk": 72}, {"fields": {"model": "nonce", "app_label": "django_openid_auth"}, "model": "contenttypes.contenttype", "pk": 73}, {"fields": {"model": "association", "app_label": "django_openid_auth"}, "model": "contenttypes.contenttype", "pk": 74}, {"fields": {"model": "useropenid", "app_label": "django_openid_auth"}, "model": "contenttypes.contenttype", "pk": 75}, {"fields": {"model": "client", "app_label": "oauth2"}, "model": "contenttypes.contenttype", "pk": 76}, {"fields": {"model": "grant", "app_label": "oauth2"}, "model": "contenttypes.contenttype", "pk": 77}, {"fields": {"model": "accesstoken", "app_label": "oauth2"}, "model": "contenttypes.contenttype", "pk": 78}, {"fields": {"model": "refreshtoken", "app_label": "oauth2"}, "model": "contenttypes.contenttype", "pk": 79}, {"fields": {"model": "trustedclient", "app_label": "oauth2_provider"}, "model": "contenttypes.contenttype", "pk": 80}, {"fields": {"model": "oauth2providerconfig", "app_label": "third_party_auth"}, "model": "contenttypes.contenttype", "pk": 81}, {"fields": {"model": "samlproviderconfig", "app_label": "third_party_auth"}, "model": "contenttypes.contenttype", "pk": 82}, {"fields": {"model": "samlconfiguration", "app_label": "third_party_auth"}, "model": "contenttypes.contenttype", "pk": 83}, {"fields": {"model": "samlproviderdata", "app_label": "third_party_auth"}, "model": "contenttypes.contenttype", "pk": 84}, {"fields": {"model": "ltiproviderconfig", "app_label": "third_party_auth"}, "model": "contenttypes.contenttype", "pk": 85}, {"fields": {"model": "providerapipermissions", "app_label": "third_party_auth"}, "model": "contenttypes.contenttype", "pk": 86}, {"fields": {"model": "nonce", "app_label": "oauth_provider"}, "model": "contenttypes.contenttype", "pk": 87}, {"fields": {"model": "scope", "app_label": "oauth_provider"}, "model": "contenttypes.contenttype", "pk": 88}, {"fields": {"model": "consumer", "app_label": "oauth_provider"}, "model": "contenttypes.contenttype", "pk": 89}, {"fields": {"model": "token", "app_label": "oauth_provider"}, "model": "contenttypes.contenttype", "pk": 90}, {"fields": {"model": "resource", "app_label": "oauth_provider"}, "model": "contenttypes.contenttype", "pk": 91}, {"fields": {"model": "article", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 92}, {"fields": {"model": "articleforobject", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 93}, {"fields": {"model": "articlerevision", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 94}, {"fields": {"model": "urlpath", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 95}, {"fields": {"model": "articleplugin", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 96}, {"fields": {"model": "reusableplugin", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 97}, {"fields": {"model": "simpleplugin", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 98}, {"fields": {"model": "revisionplugin", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 99}, {"fields": {"model": "revisionpluginrevision", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 100}, {"fields": {"model": "image", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 101}, {"fields": {"model": "imagerevision", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 102}, {"fields": {"model": "attachment", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 103}, {"fields": {"model": "attachmentrevision", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 104}, {"fields": {"model": "notificationtype", "app_label": "django_notify"}, "model": "contenttypes.contenttype", "pk": 105}, {"fields": {"model": "settings", "app_label": "django_notify"}, "model": "contenttypes.contenttype", "pk": 106}, {"fields": {"model": "subscription", "app_label": "django_notify"}, "model": "contenttypes.contenttype", "pk": 107}, {"fields": {"model": "notification", "app_label": "django_notify"}, "model": "contenttypes.contenttype", "pk": 108}, {"fields": {"model": "logentry", "app_label": "admin"}, "model": "contenttypes.contenttype", "pk": 109}, {"fields": {"model": "role", "app_label": "django_comment_common"}, "model": "contenttypes.contenttype", "pk": 110}, {"fields": {"model": "permission", "app_label": "django_comment_common"}, "model": "contenttypes.contenttype", "pk": 111}, {"fields": {"model": "note", "app_label": "notes"}, "model": "contenttypes.contenttype", "pk": 112}, {"fields": {"model": "splashconfig", "app_label": "splash"}, "model": "contenttypes.contenttype", "pk": 113}, {"fields": {"model": "userpreference", "app_label": "user_api"}, "model": "contenttypes.contenttype", "pk": 114}, {"fields": {"model": "usercoursetag", "app_label": "user_api"}, "model": "contenttypes.contenttype", "pk": 115}, {"fields": {"model": "userorgtag", "app_label": "user_api"}, "model": "contenttypes.contenttype", "pk": 116}, {"fields": {"model": "order", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 117}, {"fields": {"model": "orderitem", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 118}, {"fields": {"model": "invoice", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 119}, {"fields": {"model": "invoicetransaction", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 120}, {"fields": {"model": "invoiceitem", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 121}, {"fields": {"model": "courseregistrationcodeinvoiceitem", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 122}, {"fields": {"model": "invoicehistory", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 123}, {"fields": {"model": "courseregistrationcode", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 124}, {"fields": {"model": "registrationcoderedemption", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 125}, {"fields": {"model": "coupon", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 126}, {"fields": {"model": "couponredemption", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 127}, {"fields": {"model": "paidcourseregistration", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 128}, {"fields": {"model": "courseregcodeitem", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 129}, {"fields": {"model": "courseregcodeitemannotation", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 130}, {"fields": {"model": "paidcourseregistrationannotation", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 131}, {"fields": {"model": "certificateitem", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 132}, {"fields": {"model": "donationconfiguration", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 133}, {"fields": {"model": "donation", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 134}, {"fields": {"model": "coursemode", "app_label": "course_modes"}, "model": "contenttypes.contenttype", "pk": 135}, {"fields": {"model": "coursemodesarchive", "app_label": "course_modes"}, "model": "contenttypes.contenttype", "pk": 136}, {"fields": {"model": "coursemodeexpirationconfig", "app_label": "course_modes"}, "model": "contenttypes.contenttype", "pk": 137}, {"fields": {"model": "softwaresecurephotoverification", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 138}, {"fields": {"model": "historicalverificationdeadline", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 139}, {"fields": {"model": "verificationdeadline", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 140}, {"fields": {"model": "verificationcheckpoint", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 141}, {"fields": {"model": "verificationstatus", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 142}, {"fields": {"model": "incoursereverificationconfiguration", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 143}, {"fields": {"model": "icrvstatusemailsconfiguration", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 144}, {"fields": {"model": "skippedreverification", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 145}, {"fields": {"model": "darklangconfig", "app_label": "dark_lang"}, "model": "contenttypes.contenttype", "pk": 146}, {"fields": {"model": "embargoedcourse", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 147}, {"fields": {"model": "embargoedstate", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 148}, {"fields": {"model": "restrictedcourse", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 149}, {"fields": {"model": "country", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 150}, {"fields": {"model": "countryaccessrule", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 151}, {"fields": {"model": "courseaccessrulehistory", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 152}, {"fields": {"model": "ipfilter", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 153}, {"fields": {"model": "coursererunstate", "app_label": "course_action_state"}, "model": "contenttypes.contenttype", "pk": 154}, {"fields": {"model": "mobileapiconfig", "app_label": "mobile_api"}, "model": "contenttypes.contenttype", "pk": 155}, {"fields": {"model": "usersocialauth", "app_label": "default"}, "model": "contenttypes.contenttype", "pk": 156}, {"fields": {"model": "nonce", "app_label": "default"}, "model": "contenttypes.contenttype", "pk": 157}, {"fields": {"model": "association", "app_label": "default"}, "model": "contenttypes.contenttype", "pk": 158}, {"fields": {"model": "code", "app_label": "default"}, "model": "contenttypes.contenttype", "pk": 159}, {"fields": {"model": "surveyform", "app_label": "survey"}, "model": "contenttypes.contenttype", "pk": 160}, {"fields": {"model": "surveyanswer", "app_label": "survey"}, "model": "contenttypes.contenttype", "pk": 161}, {"fields": {"model": "xblockasidesconfig", "app_label": "lms_xblock"}, "model": "contenttypes.contenttype", "pk": 162}, {"fields": {"model": "courseoverview", "app_label": "course_overviews"}, "model": "contenttypes.contenttype", "pk": 163}, {"fields": {"model": "courseoverviewtab", "app_label": "course_overviews"}, "model": "contenttypes.contenttype", "pk": 164}, {"fields": {"model": "courseoverviewimageset", "app_label": "course_overviews"}, "model": "contenttypes.contenttype", "pk": 165}, {"fields": {"model": "courseoverviewimageconfig", "app_label": "course_overviews"}, "model": "contenttypes.contenttype", "pk": 166}, {"fields": {"model": "coursestructure", "app_label": "course_structures"}, "model": "contenttypes.contenttype", "pk": 167}, {"fields": {"model": "corsmodel", "app_label": "corsheaders"}, "model": "contenttypes.contenttype", "pk": 168}, {"fields": {"model": "xdomainproxyconfiguration", "app_label": "cors_csrf"}, "model": "contenttypes.contenttype", "pk": 169}, {"fields": {"model": "creditprovider", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 170}, {"fields": {"model": "creditcourse", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 171}, {"fields": {"model": "creditrequirement", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 172}, {"fields": {"model": "historicalcreditrequirementstatus", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 173}, {"fields": {"model": "creditrequirementstatus", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 174}, {"fields": {"model": "crediteligibility", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 175}, {"fields": {"model": "historicalcreditrequest", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 176}, {"fields": {"model": "creditrequest", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 177}, {"fields": {"model": "courseteam", "app_label": "teams"}, "model": "contenttypes.contenttype", "pk": 178}, {"fields": {"model": "courseteammembership", "app_label": "teams"}, "model": "contenttypes.contenttype", "pk": 179}, {"fields": {"model": "xblockdisableconfig", "app_label": "xblock_django"}, "model": "contenttypes.contenttype", "pk": 180}, {"fields": {"model": "bookmark", "app_label": "bookmarks"}, "model": "contenttypes.contenttype", "pk": 181}, {"fields": {"model": "xblockcache", "app_label": "bookmarks"}, "model": "contenttypes.contenttype", "pk": 182}, {"fields": {"model": "programsapiconfig", "app_label": "programs"}, "model": "contenttypes.contenttype", "pk": 183}, {"fields": {"model": "selfpacedconfiguration", "app_label": "self_paced"}, "model": "contenttypes.contenttype", "pk": 184}, {"fields": {"model": "kvstore", "app_label": "thumbnail"}, "model": "contenttypes.contenttype", "pk": 185}, {"fields": {"model": "studentitem", "app_label": "submissions"}, "model": "contenttypes.contenttype", "pk": 186}, {"fields": {"model": "submission", "app_label": "submissions"}, "model": "contenttypes.contenttype", "pk": 187}, {"fields": {"model": "score", "app_label": "submissions"}, "model": "contenttypes.contenttype", "pk": 188}, {"fields": {"model": "scoresummary", "app_label": "submissions"}, "model": "contenttypes.contenttype", "pk": 189}, {"fields": {"model": "scoreannotation", "app_label": "submissions"}, "model": "contenttypes.contenttype", "pk": 190}, {"fields": {"model": "rubric", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 191}, {"fields": {"model": "criterion", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 192}, {"fields": {"model": "criterionoption", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 193}, {"fields": {"model": "assessment", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 194}, {"fields": {"model": "assessmentpart", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 195}, {"fields": {"model": "assessmentfeedbackoption", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 196}, {"fields": {"model": "assessmentfeedback", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 197}, {"fields": {"model": "peerworkflow", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 198}, {"fields": {"model": "peerworkflowitem", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 199}, {"fields": {"model": "trainingexample", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 200}, {"fields": {"model": "studenttrainingworkflow", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 201}, {"fields": {"model": "studenttrainingworkflowitem", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 202}, {"fields": {"model": "aiclassifierset", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 203}, {"fields": {"model": "aiclassifier", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 204}, {"fields": {"model": "aitrainingworkflow", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 205}, {"fields": {"model": "aigradingworkflow", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 206}, {"fields": {"model": "assessmentworkflow", "app_label": "workflow"}, "model": "contenttypes.contenttype", "pk": 207}, {"fields": {"model": "assessmentworkflowstep", "app_label": "workflow"}, "model": "contenttypes.contenttype", "pk": 208}, {"fields": {"model": "assessmentworkflowcancellation", "app_label": "workflow"}, "model": "contenttypes.contenttype", "pk": 209}, {"fields": {"model": "profile", "app_label": "edxval"}, "model": "contenttypes.contenttype", "pk": 210}, {"fields": {"model": "video", "app_label": "edxval"}, "model": "contenttypes.contenttype", "pk": 211}, {"fields": {"model": "coursevideo", "app_label": "edxval"}, "model": "contenttypes.contenttype", "pk": 212}, {"fields": {"model": "encodedvideo", "app_label": "edxval"}, "model": "contenttypes.contenttype", "pk": 213}, {"fields": {"model": "subtitle", "app_label": "edxval"}, "model": "contenttypes.contenttype", "pk": 214}, {"fields": {"model": "milestone", "app_label": "milestones"}, "model": "contenttypes.contenttype", "pk": 215}, {"fields": {"model": "milestonerelationshiptype", "app_label": "milestones"}, "model": "contenttypes.contenttype", "pk": 216}, {"fields": {"model": "coursemilestone", "app_label": "milestones"}, "model": "contenttypes.contenttype", "pk": 217}, {"fields": {"model": "coursecontentmilestone", "app_label": "milestones"}, "model": "contenttypes.contenttype", "pk": 218}, {"fields": {"model": "usermilestone", "app_label": "milestones"}, "model": "contenttypes.contenttype", "pk": 219}, {"fields": {"model": "proctoredexam", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 220}, {"fields": {"model": "proctoredexamreviewpolicy", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 221}, {"fields": {"model": "proctoredexamreviewpolicyhistory", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 222}, {"fields": {"model": "proctoredexamstudentattempt", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 223}, {"fields": {"model": "proctoredexamstudentattempthistory", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 224}, {"fields": {"model": "proctoredexamstudentallowance", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 225}, {"fields": {"model": "proctoredexamstudentallowancehistory", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 226}, {"fields": {"model": "proctoredexamsoftwaresecurereview", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 227}, {"fields": {"model": "proctoredexamsoftwaresecurereviewhistory", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 228}, {"fields": {"model": "proctoredexamsoftwaresecurecomment", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 229}, {"fields": {"model": "organization", "app_label": "organizations"}, "model": "contenttypes.contenttype", "pk": 230}, {"fields": {"model": "organizationcourse", "app_label": "organizations"}, "model": "contenttypes.contenttype", "pk": 231}, {"fields": {"model": "videouploadconfig", "app_label": "contentstore"}, "model": "contenttypes.contenttype", "pk": 232}, {"fields": {"model": "pushnotificationconfig", "app_label": "contentstore"}, "model": "contenttypes.contenttype", "pk": 233}, {"fields": {"model": "coursecreator", "app_label": "course_creators"}, "model": "contenttypes.contenttype", "pk": 234}, {"fields": {"model": "studioconfig", "app_label": "xblock_config"}, "model": "contenttypes.contenttype", "pk": 235}, {"fields": {"domain": "example.com", "name": "example.com"}, "model": "sites.site", "pk": 1}, {"fields": {"default": false, "mode": "honor", "icon": "badges/honor_jHFWziu.png"}, "model": "certificates.badgeimageconfiguration", "pk": 1}, {"fields": {"default": false, "mode": "verified", "icon": "badges/verified_6NmkerB.png"}, "model": "certificates.badgeimageconfiguration", "pk": 2}, {"fields": {"default": false, "mode": "professional", "icon": "badges/professional_dz1wOKm.png"}, "model": "certificates.badgeimageconfiguration", "pk": 3}, {"fields": {"plain_template": "{course_title}\n\n{{message_body}}\r\n----\r\nCopyright 2013 edX, All rights reserved.\r\n----\r\nConnect with edX:\r\nFacebook (http://facebook.com/edxonline)\r\nTwitter (http://twitter.com/edxonline)\r\nGoogle+ (https://plus.google.com/108235383044095082735)\r\nMeetup (http://www.meetup.com/edX-Communities/)\r\n----\r\nThis email was automatically sent from {platform_name}.\r\nYou are receiving this email at address {email} because you are enrolled in {course_title}\r\n(URL: {course_url} ).\r\nTo stop receiving email like this, update your course email settings at {email_settings_url}.\r\n", "html_template": " Update from {course_title}

edX
Connect with edX:        

{course_title}


{{message_body}}
       
Copyright \u00a9 2013 edX, All rights reserved.


Our mailing address is:
edX
11 Cambridge Center, Suite 101
Cambridge, MA, USA 02142


This email was automatically sent from {platform_name}.
You are receiving this email at address {email} because you are enrolled in {course_title}.
To stop receiving email like this, update your course email settings here.
", "name": null}, "model": "bulk_email.courseemailtemplate", "pk": 1}, {"fields": {"plain_template": "THIS IS A BRANDED TEXT TEMPLATE. {course_title}\n\n{{message_body}}\r\n----\r\nCopyright 2013 edX, All rights reserved.\r\n----\r\nConnect with edX:\r\nFacebook (http://facebook.com/edxonline)\r\nTwitter (http://twitter.com/edxonline)\r\nGoogle+ (https://plus.google.com/108235383044095082735)\r\nMeetup (http://www.meetup.com/edX-Communities/)\r\n----\r\nThis email was automatically sent from {platform_name}.\r\nYou are receiving this email at address {email} because you are enrolled in {course_title}\r\n(URL: {course_url} ).\r\nTo stop receiving email like this, update your course email settings at {email_settings_url}.\r\n", "html_template": " THIS IS A BRANDED HTML TEMPLATE Update from {course_title}

edX
Connect with edX:        

{course_title}


{{message_body}}
       
Copyright \u00a9 2013 edX, All rights reserved.


Our mailing address is:
edX
11 Cambridge Center, Suite 101
Cambridge, MA, USA 02142


This email was automatically sent from {platform_name}.
You are receiving this email at address {email} because you are enrolled in {course_title}.
To stop receiving email like this, update your course email settings here.
", "name": "branded.template"}, "model": "bulk_email.courseemailtemplate", "pk": 2}, {"fields": {"country": "AF"}, "model": "embargo.country", "pk": 1}, {"fields": {"country": "AX"}, "model": "embargo.country", "pk": 2}, {"fields": {"country": "AL"}, "model": "embargo.country", "pk": 3}, {"fields": {"country": "DZ"}, "model": "embargo.country", "pk": 4}, {"fields": {"country": "AS"}, "model": "embargo.country", "pk": 5}, {"fields": {"country": "AD"}, "model": "embargo.country", "pk": 6}, {"fields": {"country": "AO"}, "model": "embargo.country", "pk": 7}, {"fields": {"country": "AI"}, "model": "embargo.country", "pk": 8}, {"fields": {"country": "AQ"}, "model": "embargo.country", "pk": 9}, {"fields": {"country": "AG"}, "model": "embargo.country", "pk": 10}, {"fields": {"country": "AR"}, "model": "embargo.country", "pk": 11}, {"fields": {"country": "AM"}, "model": "embargo.country", "pk": 12}, {"fields": {"country": "AW"}, "model": "embargo.country", "pk": 13}, {"fields": {"country": "AU"}, "model": "embargo.country", "pk": 14}, {"fields": {"country": "AT"}, "model": "embargo.country", "pk": 15}, {"fields": {"country": "AZ"}, "model": "embargo.country", "pk": 16}, {"fields": {"country": "BS"}, "model": "embargo.country", "pk": 17}, {"fields": {"country": "BH"}, "model": "embargo.country", "pk": 18}, {"fields": {"country": "BD"}, "model": "embargo.country", "pk": 19}, {"fields": {"country": "BB"}, "model": "embargo.country", "pk": 20}, {"fields": {"country": "BY"}, "model": "embargo.country", "pk": 21}, {"fields": {"country": "BE"}, "model": "embargo.country", "pk": 22}, {"fields": {"country": "BZ"}, "model": "embargo.country", "pk": 23}, {"fields": {"country": "BJ"}, "model": "embargo.country", "pk": 24}, {"fields": {"country": "BM"}, "model": "embargo.country", "pk": 25}, {"fields": {"country": "BT"}, "model": "embargo.country", "pk": 26}, {"fields": {"country": "BO"}, "model": "embargo.country", "pk": 27}, {"fields": {"country": "BQ"}, "model": "embargo.country", "pk": 28}, {"fields": {"country": "BA"}, "model": "embargo.country", "pk": 29}, {"fields": {"country": "BW"}, "model": "embargo.country", "pk": 30}, {"fields": {"country": "BV"}, "model": "embargo.country", "pk": 31}, {"fields": {"country": "BR"}, "model": "embargo.country", "pk": 32}, {"fields": {"country": "IO"}, "model": "embargo.country", "pk": 33}, {"fields": {"country": "BN"}, "model": "embargo.country", "pk": 34}, {"fields": {"country": "BG"}, "model": "embargo.country", "pk": 35}, {"fields": {"country": "BF"}, "model": "embargo.country", "pk": 36}, {"fields": {"country": "BI"}, "model": "embargo.country", "pk": 37}, {"fields": {"country": "CV"}, "model": "embargo.country", "pk": 38}, {"fields": {"country": "KH"}, "model": "embargo.country", "pk": 39}, {"fields": {"country": "CM"}, "model": "embargo.country", "pk": 40}, {"fields": {"country": "CA"}, "model": "embargo.country", "pk": 41}, {"fields": {"country": "KY"}, "model": "embargo.country", "pk": 42}, {"fields": {"country": "CF"}, "model": "embargo.country", "pk": 43}, {"fields": {"country": "TD"}, "model": "embargo.country", "pk": 44}, {"fields": {"country": "CL"}, "model": "embargo.country", "pk": 45}, {"fields": {"country": "CN"}, "model": "embargo.country", "pk": 46}, {"fields": {"country": "CX"}, "model": "embargo.country", "pk": 47}, {"fields": {"country": "CC"}, "model": "embargo.country", "pk": 48}, {"fields": {"country": "CO"}, "model": "embargo.country", "pk": 49}, {"fields": {"country": "KM"}, "model": "embargo.country", "pk": 50}, {"fields": {"country": "CG"}, "model": "embargo.country", "pk": 51}, {"fields": {"country": "CD"}, "model": "embargo.country", "pk": 52}, {"fields": {"country": "CK"}, "model": "embargo.country", "pk": 53}, {"fields": {"country": "CR"}, "model": "embargo.country", "pk": 54}, {"fields": {"country": "CI"}, "model": "embargo.country", "pk": 55}, {"fields": {"country": "HR"}, "model": "embargo.country", "pk": 56}, {"fields": {"country": "CU"}, "model": "embargo.country", "pk": 57}, {"fields": {"country": "CW"}, "model": "embargo.country", "pk": 58}, {"fields": {"country": "CY"}, "model": "embargo.country", "pk": 59}, {"fields": {"country": "CZ"}, "model": "embargo.country", "pk": 60}, {"fields": {"country": "DK"}, "model": "embargo.country", "pk": 61}, {"fields": {"country": "DJ"}, "model": "embargo.country", "pk": 62}, {"fields": {"country": "DM"}, "model": "embargo.country", "pk": 63}, {"fields": {"country": "DO"}, "model": "embargo.country", "pk": 64}, {"fields": {"country": "EC"}, "model": "embargo.country", "pk": 65}, {"fields": {"country": "EG"}, "model": "embargo.country", "pk": 66}, {"fields": {"country": "SV"}, "model": "embargo.country", "pk": 67}, {"fields": {"country": "GQ"}, "model": "embargo.country", "pk": 68}, {"fields": {"country": "ER"}, "model": "embargo.country", "pk": 69}, {"fields": {"country": "EE"}, "model": "embargo.country", "pk": 70}, {"fields": {"country": "ET"}, "model": "embargo.country", "pk": 71}, {"fields": {"country": "FK"}, "model": "embargo.country", "pk": 72}, {"fields": {"country": "FO"}, "model": "embargo.country", "pk": 73}, {"fields": {"country": "FJ"}, "model": "embargo.country", "pk": 74}, {"fields": {"country": "FI"}, "model": "embargo.country", "pk": 75}, {"fields": {"country": "FR"}, "model": "embargo.country", "pk": 76}, {"fields": {"country": "GF"}, "model": "embargo.country", "pk": 77}, {"fields": {"country": "PF"}, "model": "embargo.country", "pk": 78}, {"fields": {"country": "TF"}, "model": "embargo.country", "pk": 79}, {"fields": {"country": "GA"}, "model": "embargo.country", "pk": 80}, {"fields": {"country": "GM"}, "model": "embargo.country", "pk": 81}, {"fields": {"country": "GE"}, "model": "embargo.country", "pk": 82}, {"fields": {"country": "DE"}, "model": "embargo.country", "pk": 83}, {"fields": {"country": "GH"}, "model": "embargo.country", "pk": 84}, {"fields": {"country": "GI"}, "model": "embargo.country", "pk": 85}, {"fields": {"country": "GR"}, "model": "embargo.country", "pk": 86}, {"fields": {"country": "GL"}, "model": "embargo.country", "pk": 87}, {"fields": {"country": "GD"}, "model": "embargo.country", "pk": 88}, {"fields": {"country": "GP"}, "model": "embargo.country", "pk": 89}, {"fields": {"country": "GU"}, "model": "embargo.country", "pk": 90}, {"fields": {"country": "GT"}, "model": "embargo.country", "pk": 91}, {"fields": {"country": "GG"}, "model": "embargo.country", "pk": 92}, {"fields": {"country": "GN"}, "model": "embargo.country", "pk": 93}, {"fields": {"country": "GW"}, "model": "embargo.country", "pk": 94}, {"fields": {"country": "GY"}, "model": "embargo.country", "pk": 95}, {"fields": {"country": "HT"}, "model": "embargo.country", "pk": 96}, {"fields": {"country": "HM"}, "model": "embargo.country", "pk": 97}, {"fields": {"country": "VA"}, "model": "embargo.country", "pk": 98}, {"fields": {"country": "HN"}, "model": "embargo.country", "pk": 99}, {"fields": {"country": "HK"}, "model": "embargo.country", "pk": 100}, {"fields": {"country": "HU"}, "model": "embargo.country", "pk": 101}, {"fields": {"country": "IS"}, "model": "embargo.country", "pk": 102}, {"fields": {"country": "IN"}, "model": "embargo.country", "pk": 103}, {"fields": {"country": "ID"}, "model": "embargo.country", "pk": 104}, {"fields": {"country": "IR"}, "model": "embargo.country", "pk": 105}, {"fields": {"country": "IQ"}, "model": "embargo.country", "pk": 106}, {"fields": {"country": "IE"}, "model": "embargo.country", "pk": 107}, {"fields": {"country": "IM"}, "model": "embargo.country", "pk": 108}, {"fields": {"country": "IL"}, "model": "embargo.country", "pk": 109}, {"fields": {"country": "IT"}, "model": "embargo.country", "pk": 110}, {"fields": {"country": "JM"}, "model": "embargo.country", "pk": 111}, {"fields": {"country": "JP"}, "model": "embargo.country", "pk": 112}, {"fields": {"country": "JE"}, "model": "embargo.country", "pk": 113}, {"fields": {"country": "JO"}, "model": "embargo.country", "pk": 114}, {"fields": {"country": "KZ"}, "model": "embargo.country", "pk": 115}, {"fields": {"country": "KE"}, "model": "embargo.country", "pk": 116}, {"fields": {"country": "KI"}, "model": "embargo.country", "pk": 117}, {"fields": {"country": "KW"}, "model": "embargo.country", "pk": 118}, {"fields": {"country": "KG"}, "model": "embargo.country", "pk": 119}, {"fields": {"country": "LA"}, "model": "embargo.country", "pk": 120}, {"fields": {"country": "LV"}, "model": "embargo.country", "pk": 121}, {"fields": {"country": "LB"}, "model": "embargo.country", "pk": 122}, {"fields": {"country": "LS"}, "model": "embargo.country", "pk": 123}, {"fields": {"country": "LR"}, "model": "embargo.country", "pk": 124}, {"fields": {"country": "LY"}, "model": "embargo.country", "pk": 125}, {"fields": {"country": "LI"}, "model": "embargo.country", "pk": 126}, {"fields": {"country": "LT"}, "model": "embargo.country", "pk": 127}, {"fields": {"country": "LU"}, "model": "embargo.country", "pk": 128}, {"fields": {"country": "MO"}, "model": "embargo.country", "pk": 129}, {"fields": {"country": "MK"}, "model": "embargo.country", "pk": 130}, {"fields": {"country": "MG"}, "model": "embargo.country", "pk": 131}, {"fields": {"country": "MW"}, "model": "embargo.country", "pk": 132}, {"fields": {"country": "MY"}, "model": "embargo.country", "pk": 133}, {"fields": {"country": "MV"}, "model": "embargo.country", "pk": 134}, {"fields": {"country": "ML"}, "model": "embargo.country", "pk": 135}, {"fields": {"country": "MT"}, "model": "embargo.country", "pk": 136}, {"fields": {"country": "MH"}, "model": "embargo.country", "pk": 137}, {"fields": {"country": "MQ"}, "model": "embargo.country", "pk": 138}, {"fields": {"country": "MR"}, "model": "embargo.country", "pk": 139}, {"fields": {"country": "MU"}, "model": "embargo.country", "pk": 140}, {"fields": {"country": "YT"}, "model": "embargo.country", "pk": 141}, {"fields": {"country": "MX"}, "model": "embargo.country", "pk": 142}, {"fields": {"country": "FM"}, "model": "embargo.country", "pk": 143}, {"fields": {"country": "MD"}, "model": "embargo.country", "pk": 144}, {"fields": {"country": "MC"}, "model": "embargo.country", "pk": 145}, {"fields": {"country": "MN"}, "model": "embargo.country", "pk": 146}, {"fields": {"country": "ME"}, "model": "embargo.country", "pk": 147}, {"fields": {"country": "MS"}, "model": "embargo.country", "pk": 148}, {"fields": {"country": "MA"}, "model": "embargo.country", "pk": 149}, {"fields": {"country": "MZ"}, "model": "embargo.country", "pk": 150}, {"fields": {"country": "MM"}, "model": "embargo.country", "pk": 151}, {"fields": {"country": "NA"}, "model": "embargo.country", "pk": 152}, {"fields": {"country": "NR"}, "model": "embargo.country", "pk": 153}, {"fields": {"country": "NP"}, "model": "embargo.country", "pk": 154}, {"fields": {"country": "NL"}, "model": "embargo.country", "pk": 155}, {"fields": {"country": "NC"}, "model": "embargo.country", "pk": 156}, {"fields": {"country": "NZ"}, "model": "embargo.country", "pk": 157}, {"fields": {"country": "NI"}, "model": "embargo.country", "pk": 158}, {"fields": {"country": "NE"}, "model": "embargo.country", "pk": 159}, {"fields": {"country": "NG"}, "model": "embargo.country", "pk": 160}, {"fields": {"country": "NU"}, "model": "embargo.country", "pk": 161}, {"fields": {"country": "NF"}, "model": "embargo.country", "pk": 162}, {"fields": {"country": "KP"}, "model": "embargo.country", "pk": 163}, {"fields": {"country": "MP"}, "model": "embargo.country", "pk": 164}, {"fields": {"country": "NO"}, "model": "embargo.country", "pk": 165}, {"fields": {"country": "OM"}, "model": "embargo.country", "pk": 166}, {"fields": {"country": "PK"}, "model": "embargo.country", "pk": 167}, {"fields": {"country": "PW"}, "model": "embargo.country", "pk": 168}, {"fields": {"country": "PS"}, "model": "embargo.country", "pk": 169}, {"fields": {"country": "PA"}, "model": "embargo.country", "pk": 170}, {"fields": {"country": "PG"}, "model": "embargo.country", "pk": 171}, {"fields": {"country": "PY"}, "model": "embargo.country", "pk": 172}, {"fields": {"country": "PE"}, "model": "embargo.country", "pk": 173}, {"fields": {"country": "PH"}, "model": "embargo.country", "pk": 174}, {"fields": {"country": "PN"}, "model": "embargo.country", "pk": 175}, {"fields": {"country": "PL"}, "model": "embargo.country", "pk": 176}, {"fields": {"country": "PT"}, "model": "embargo.country", "pk": 177}, {"fields": {"country": "PR"}, "model": "embargo.country", "pk": 178}, {"fields": {"country": "QA"}, "model": "embargo.country", "pk": 179}, {"fields": {"country": "RE"}, "model": "embargo.country", "pk": 180}, {"fields": {"country": "RO"}, "model": "embargo.country", "pk": 181}, {"fields": {"country": "RU"}, "model": "embargo.country", "pk": 182}, {"fields": {"country": "RW"}, "model": "embargo.country", "pk": 183}, {"fields": {"country": "BL"}, "model": "embargo.country", "pk": 184}, {"fields": {"country": "SH"}, "model": "embargo.country", "pk": 185}, {"fields": {"country": "KN"}, "model": "embargo.country", "pk": 186}, {"fields": {"country": "LC"}, "model": "embargo.country", "pk": 187}, {"fields": {"country": "MF"}, "model": "embargo.country", "pk": 188}, {"fields": {"country": "PM"}, "model": "embargo.country", "pk": 189}, {"fields": {"country": "VC"}, "model": "embargo.country", "pk": 190}, {"fields": {"country": "WS"}, "model": "embargo.country", "pk": 191}, {"fields": {"country": "SM"}, "model": "embargo.country", "pk": 192}, {"fields": {"country": "ST"}, "model": "embargo.country", "pk": 193}, {"fields": {"country": "SA"}, "model": "embargo.country", "pk": 194}, {"fields": {"country": "SN"}, "model": "embargo.country", "pk": 195}, {"fields": {"country": "RS"}, "model": "embargo.country", "pk": 196}, {"fields": {"country": "SC"}, "model": "embargo.country", "pk": 197}, {"fields": {"country": "SL"}, "model": "embargo.country", "pk": 198}, {"fields": {"country": "SG"}, "model": "embargo.country", "pk": 199}, {"fields": {"country": "SX"}, "model": "embargo.country", "pk": 200}, {"fields": {"country": "SK"}, "model": "embargo.country", "pk": 201}, {"fields": {"country": "SI"}, "model": "embargo.country", "pk": 202}, {"fields": {"country": "SB"}, "model": "embargo.country", "pk": 203}, {"fields": {"country": "SO"}, "model": "embargo.country", "pk": 204}, {"fields": {"country": "ZA"}, "model": "embargo.country", "pk": 205}, {"fields": {"country": "GS"}, "model": "embargo.country", "pk": 206}, {"fields": {"country": "KR"}, "model": "embargo.country", "pk": 207}, {"fields": {"country": "SS"}, "model": "embargo.country", "pk": 208}, {"fields": {"country": "ES"}, "model": "embargo.country", "pk": 209}, {"fields": {"country": "LK"}, "model": "embargo.country", "pk": 210}, {"fields": {"country": "SD"}, "model": "embargo.country", "pk": 211}, {"fields": {"country": "SR"}, "model": "embargo.country", "pk": 212}, {"fields": {"country": "SJ"}, "model": "embargo.country", "pk": 213}, {"fields": {"country": "SZ"}, "model": "embargo.country", "pk": 214}, {"fields": {"country": "SE"}, "model": "embargo.country", "pk": 215}, {"fields": {"country": "CH"}, "model": "embargo.country", "pk": 216}, {"fields": {"country": "SY"}, "model": "embargo.country", "pk": 217}, {"fields": {"country": "TW"}, "model": "embargo.country", "pk": 218}, {"fields": {"country": "TJ"}, "model": "embargo.country", "pk": 219}, {"fields": {"country": "TZ"}, "model": "embargo.country", "pk": 220}, {"fields": {"country": "TH"}, "model": "embargo.country", "pk": 221}, {"fields": {"country": "TL"}, "model": "embargo.country", "pk": 222}, {"fields": {"country": "TG"}, "model": "embargo.country", "pk": 223}, {"fields": {"country": "TK"}, "model": "embargo.country", "pk": 224}, {"fields": {"country": "TO"}, "model": "embargo.country", "pk": 225}, {"fields": {"country": "TT"}, "model": "embargo.country", "pk": 226}, {"fields": {"country": "TN"}, "model": "embargo.country", "pk": 227}, {"fields": {"country": "TR"}, "model": "embargo.country", "pk": 228}, {"fields": {"country": "TM"}, "model": "embargo.country", "pk": 229}, {"fields": {"country": "TC"}, "model": "embargo.country", "pk": 230}, {"fields": {"country": "TV"}, "model": "embargo.country", "pk": 231}, {"fields": {"country": "UG"}, "model": "embargo.country", "pk": 232}, {"fields": {"country": "UA"}, "model": "embargo.country", "pk": 233}, {"fields": {"country": "AE"}, "model": "embargo.country", "pk": 234}, {"fields": {"country": "GB"}, "model": "embargo.country", "pk": 235}, {"fields": {"country": "UM"}, "model": "embargo.country", "pk": 236}, {"fields": {"country": "US"}, "model": "embargo.country", "pk": 237}, {"fields": {"country": "UY"}, "model": "embargo.country", "pk": 238}, {"fields": {"country": "UZ"}, "model": "embargo.country", "pk": 239}, {"fields": {"country": "VU"}, "model": "embargo.country", "pk": 240}, {"fields": {"country": "VE"}, "model": "embargo.country", "pk": 241}, {"fields": {"country": "VN"}, "model": "embargo.country", "pk": 242}, {"fields": {"country": "VG"}, "model": "embargo.country", "pk": 243}, {"fields": {"country": "VI"}, "model": "embargo.country", "pk": 244}, {"fields": {"country": "WF"}, "model": "embargo.country", "pk": 245}, {"fields": {"country": "EH"}, "model": "embargo.country", "pk": 246}, {"fields": {"country": "YE"}, "model": "embargo.country", "pk": 247}, {"fields": {"country": "ZM"}, "model": "embargo.country", "pk": 248}, {"fields": {"country": "ZW"}, "model": "embargo.country", "pk": 249}, {"fields": {"profile_name": "desktop_mp4"}, "model": "edxval.profile", "pk": 1}, {"fields": {"profile_name": "desktop_webm"}, "model": "edxval.profile", "pk": 2}, {"fields": {"profile_name": "mobile_high"}, "model": "edxval.profile", "pk": 3}, {"fields": {"profile_name": "mobile_low"}, "model": "edxval.profile", "pk": 4}, {"fields": {"profile_name": "youtube"}, "model": "edxval.profile", "pk": 5}, {"fields": {"active": true, "description": "Autogenerated milestone relationship type \"fulfills\"", "modified": "2015-12-31T14:56:37.754Z", "name": "fulfills", "created": "2015-12-31T14:56:37.753Z"}, "model": "milestones.milestonerelationshiptype", "pk": 1}, {"fields": {"active": true, "description": "Autogenerated milestone relationship type \"requires\"", "modified": "2015-12-31T14:56:37.757Z", "name": "requires", "created": "2015-12-31T14:56:37.756Z"}, "model": "milestones.milestonerelationshiptype", "pk": 2}, {"fields": {"codename": "add_permission", "name": "Can add permission", "content_type": 1}, "model": "auth.permission", "pk": 1}, {"fields": {"codename": "change_permission", "name": "Can change permission", "content_type": 1}, "model": "auth.permission", "pk": 2}, {"fields": {"codename": "delete_permission", "name": "Can delete permission", "content_type": 1}, "model": "auth.permission", "pk": 3}, {"fields": {"codename": "add_group", "name": "Can add group", "content_type": 2}, "model": "auth.permission", "pk": 4}, {"fields": {"codename": "change_group", "name": "Can change group", "content_type": 2}, "model": "auth.permission", "pk": 5}, {"fields": {"codename": "delete_group", "name": "Can delete group", "content_type": 2}, "model": "auth.permission", "pk": 6}, {"fields": {"codename": "add_user", "name": "Can add user", "content_type": 3}, "model": "auth.permission", "pk": 7}, {"fields": {"codename": "change_user", "name": "Can change user", "content_type": 3}, "model": "auth.permission", "pk": 8}, {"fields": {"codename": "delete_user", "name": "Can delete user", "content_type": 3}, "model": "auth.permission", "pk": 9}, {"fields": {"codename": "add_contenttype", "name": "Can add content type", "content_type": 4}, "model": "auth.permission", "pk": 10}, {"fields": {"codename": "change_contenttype", "name": "Can change content type", "content_type": 4}, "model": "auth.permission", "pk": 11}, {"fields": {"codename": "delete_contenttype", "name": "Can delete content type", "content_type": 4}, "model": "auth.permission", "pk": 12}, {"fields": {"codename": "add_session", "name": "Can add session", "content_type": 5}, "model": "auth.permission", "pk": 13}, {"fields": {"codename": "change_session", "name": "Can change session", "content_type": 5}, "model": "auth.permission", "pk": 14}, {"fields": {"codename": "delete_session", "name": "Can delete session", "content_type": 5}, "model": "auth.permission", "pk": 15}, {"fields": {"codename": "add_site", "name": "Can add site", "content_type": 6}, "model": "auth.permission", "pk": 16}, {"fields": {"codename": "change_site", "name": "Can change site", "content_type": 6}, "model": "auth.permission", "pk": 17}, {"fields": {"codename": "delete_site", "name": "Can delete site", "content_type": 6}, "model": "auth.permission", "pk": 18}, {"fields": {"codename": "add_taskmeta", "name": "Can add task state", "content_type": 7}, "model": "auth.permission", "pk": 19}, {"fields": {"codename": "change_taskmeta", "name": "Can change task state", "content_type": 7}, "model": "auth.permission", "pk": 20}, {"fields": {"codename": "delete_taskmeta", "name": "Can delete task state", "content_type": 7}, "model": "auth.permission", "pk": 21}, {"fields": {"codename": "add_tasksetmeta", "name": "Can add saved group result", "content_type": 8}, "model": "auth.permission", "pk": 22}, {"fields": {"codename": "change_tasksetmeta", "name": "Can change saved group result", "content_type": 8}, "model": "auth.permission", "pk": 23}, {"fields": {"codename": "delete_tasksetmeta", "name": "Can delete saved group result", "content_type": 8}, "model": "auth.permission", "pk": 24}, {"fields": {"codename": "add_intervalschedule", "name": "Can add interval", "content_type": 9}, "model": "auth.permission", "pk": 25}, {"fields": {"codename": "change_intervalschedule", "name": "Can change interval", "content_type": 9}, "model": "auth.permission", "pk": 26}, {"fields": {"codename": "delete_intervalschedule", "name": "Can delete interval", "content_type": 9}, "model": "auth.permission", "pk": 27}, {"fields": {"codename": "add_crontabschedule", "name": "Can add crontab", "content_type": 10}, "model": "auth.permission", "pk": 28}, {"fields": {"codename": "change_crontabschedule", "name": "Can change crontab", "content_type": 10}, "model": "auth.permission", "pk": 29}, {"fields": {"codename": "delete_crontabschedule", "name": "Can delete crontab", "content_type": 10}, "model": "auth.permission", "pk": 30}, {"fields": {"codename": "add_periodictasks", "name": "Can add periodic tasks", "content_type": 11}, "model": "auth.permission", "pk": 31}, {"fields": {"codename": "change_periodictasks", "name": "Can change periodic tasks", "content_type": 11}, "model": "auth.permission", "pk": 32}, {"fields": {"codename": "delete_periodictasks", "name": "Can delete periodic tasks", "content_type": 11}, "model": "auth.permission", "pk": 33}, {"fields": {"codename": "add_periodictask", "name": "Can add periodic task", "content_type": 12}, "model": "auth.permission", "pk": 34}, {"fields": {"codename": "change_periodictask", "name": "Can change periodic task", "content_type": 12}, "model": "auth.permission", "pk": 35}, {"fields": {"codename": "delete_periodictask", "name": "Can delete periodic task", "content_type": 12}, "model": "auth.permission", "pk": 36}, {"fields": {"codename": "add_workerstate", "name": "Can add worker", "content_type": 13}, "model": "auth.permission", "pk": 37}, {"fields": {"codename": "change_workerstate", "name": "Can change worker", "content_type": 13}, "model": "auth.permission", "pk": 38}, {"fields": {"codename": "delete_workerstate", "name": "Can delete worker", "content_type": 13}, "model": "auth.permission", "pk": 39}, {"fields": {"codename": "add_taskstate", "name": "Can add task", "content_type": 14}, "model": "auth.permission", "pk": 40}, {"fields": {"codename": "change_taskstate", "name": "Can change task", "content_type": 14}, "model": "auth.permission", "pk": 41}, {"fields": {"codename": "delete_taskstate", "name": "Can delete task", "content_type": 14}, "model": "auth.permission", "pk": 42}, {"fields": {"codename": "add_globalstatusmessage", "name": "Can add global status message", "content_type": 15}, "model": "auth.permission", "pk": 43}, {"fields": {"codename": "change_globalstatusmessage", "name": "Can change global status message", "content_type": 15}, "model": "auth.permission", "pk": 44}, {"fields": {"codename": "delete_globalstatusmessage", "name": "Can delete global status message", "content_type": 15}, "model": "auth.permission", "pk": 45}, {"fields": {"codename": "add_coursemessage", "name": "Can add course message", "content_type": 16}, "model": "auth.permission", "pk": 46}, {"fields": {"codename": "change_coursemessage", "name": "Can change course message", "content_type": 16}, "model": "auth.permission", "pk": 47}, {"fields": {"codename": "delete_coursemessage", "name": "Can delete course message", "content_type": 16}, "model": "auth.permission", "pk": 48}, {"fields": {"codename": "add_studentmodule", "name": "Can add student module", "content_type": 17}, "model": "auth.permission", "pk": 49}, {"fields": {"codename": "change_studentmodule", "name": "Can change student module", "content_type": 17}, "model": "auth.permission", "pk": 50}, {"fields": {"codename": "delete_studentmodule", "name": "Can delete student module", "content_type": 17}, "model": "auth.permission", "pk": 51}, {"fields": {"codename": "add_studentmodulehistory", "name": "Can add student module history", "content_type": 18}, "model": "auth.permission", "pk": 52}, {"fields": {"codename": "change_studentmodulehistory", "name": "Can change student module history", "content_type": 18}, "model": "auth.permission", "pk": 53}, {"fields": {"codename": "delete_studentmodulehistory", "name": "Can delete student module history", "content_type": 18}, "model": "auth.permission", "pk": 54}, {"fields": {"codename": "add_xmoduleuserstatesummaryfield", "name": "Can add x module user state summary field", "content_type": 19}, "model": "auth.permission", "pk": 55}, {"fields": {"codename": "change_xmoduleuserstatesummaryfield", "name": "Can change x module user state summary field", "content_type": 19}, "model": "auth.permission", "pk": 56}, {"fields": {"codename": "delete_xmoduleuserstatesummaryfield", "name": "Can delete x module user state summary field", "content_type": 19}, "model": "auth.permission", "pk": 57}, {"fields": {"codename": "add_xmodulestudentprefsfield", "name": "Can add x module student prefs field", "content_type": 20}, "model": "auth.permission", "pk": 58}, {"fields": {"codename": "change_xmodulestudentprefsfield", "name": "Can change x module student prefs field", "content_type": 20}, "model": "auth.permission", "pk": 59}, {"fields": {"codename": "delete_xmodulestudentprefsfield", "name": "Can delete x module student prefs field", "content_type": 20}, "model": "auth.permission", "pk": 60}, {"fields": {"codename": "add_xmodulestudentinfofield", "name": "Can add x module student info field", "content_type": 21}, "model": "auth.permission", "pk": 61}, {"fields": {"codename": "change_xmodulestudentinfofield", "name": "Can change x module student info field", "content_type": 21}, "model": "auth.permission", "pk": 62}, {"fields": {"codename": "delete_xmodulestudentinfofield", "name": "Can delete x module student info field", "content_type": 21}, "model": "auth.permission", "pk": 63}, {"fields": {"codename": "add_offlinecomputedgrade", "name": "Can add offline computed grade", "content_type": 22}, "model": "auth.permission", "pk": 64}, {"fields": {"codename": "change_offlinecomputedgrade", "name": "Can change offline computed grade", "content_type": 22}, "model": "auth.permission", "pk": 65}, {"fields": {"codename": "delete_offlinecomputedgrade", "name": "Can delete offline computed grade", "content_type": 22}, "model": "auth.permission", "pk": 66}, {"fields": {"codename": "add_offlinecomputedgradelog", "name": "Can add offline computed grade log", "content_type": 23}, "model": "auth.permission", "pk": 67}, {"fields": {"codename": "change_offlinecomputedgradelog", "name": "Can change offline computed grade log", "content_type": 23}, "model": "auth.permission", "pk": 68}, {"fields": {"codename": "delete_offlinecomputedgradelog", "name": "Can delete offline computed grade log", "content_type": 23}, "model": "auth.permission", "pk": 69}, {"fields": {"codename": "add_studentfieldoverride", "name": "Can add student field override", "content_type": 24}, "model": "auth.permission", "pk": 70}, {"fields": {"codename": "change_studentfieldoverride", "name": "Can change student field override", "content_type": 24}, "model": "auth.permission", "pk": 71}, {"fields": {"codename": "delete_studentfieldoverride", "name": "Can delete student field override", "content_type": 24}, "model": "auth.permission", "pk": 72}, {"fields": {"codename": "add_anonymoususerid", "name": "Can add anonymous user id", "content_type": 25}, "model": "auth.permission", "pk": 73}, {"fields": {"codename": "change_anonymoususerid", "name": "Can change anonymous user id", "content_type": 25}, "model": "auth.permission", "pk": 74}, {"fields": {"codename": "delete_anonymoususerid", "name": "Can delete anonymous user id", "content_type": 25}, "model": "auth.permission", "pk": 75}, {"fields": {"codename": "add_userstanding", "name": "Can add user standing", "content_type": 26}, "model": "auth.permission", "pk": 76}, {"fields": {"codename": "change_userstanding", "name": "Can change user standing", "content_type": 26}, "model": "auth.permission", "pk": 77}, {"fields": {"codename": "delete_userstanding", "name": "Can delete user standing", "content_type": 26}, "model": "auth.permission", "pk": 78}, {"fields": {"codename": "add_userprofile", "name": "Can add user profile", "content_type": 27}, "model": "auth.permission", "pk": 79}, {"fields": {"codename": "change_userprofile", "name": "Can change user profile", "content_type": 27}, "model": "auth.permission", "pk": 80}, {"fields": {"codename": "delete_userprofile", "name": "Can delete user profile", "content_type": 27}, "model": "auth.permission", "pk": 81}, {"fields": {"codename": "add_usersignupsource", "name": "Can add user signup source", "content_type": 28}, "model": "auth.permission", "pk": 82}, {"fields": {"codename": "change_usersignupsource", "name": "Can change user signup source", "content_type": 28}, "model": "auth.permission", "pk": 83}, {"fields": {"codename": "delete_usersignupsource", "name": "Can delete user signup source", "content_type": 28}, "model": "auth.permission", "pk": 84}, {"fields": {"codename": "add_usertestgroup", "name": "Can add user test group", "content_type": 29}, "model": "auth.permission", "pk": 85}, {"fields": {"codename": "change_usertestgroup", "name": "Can change user test group", "content_type": 29}, "model": "auth.permission", "pk": 86}, {"fields": {"codename": "delete_usertestgroup", "name": "Can delete user test group", "content_type": 29}, "model": "auth.permission", "pk": 87}, {"fields": {"codename": "add_registration", "name": "Can add registration", "content_type": 30}, "model": "auth.permission", "pk": 88}, {"fields": {"codename": "change_registration", "name": "Can change registration", "content_type": 30}, "model": "auth.permission", "pk": 89}, {"fields": {"codename": "delete_registration", "name": "Can delete registration", "content_type": 30}, "model": "auth.permission", "pk": 90}, {"fields": {"codename": "add_pendingnamechange", "name": "Can add pending name change", "content_type": 31}, "model": "auth.permission", "pk": 91}, {"fields": {"codename": "change_pendingnamechange", "name": "Can change pending name change", "content_type": 31}, "model": "auth.permission", "pk": 92}, {"fields": {"codename": "delete_pendingnamechange", "name": "Can delete pending name change", "content_type": 31}, "model": "auth.permission", "pk": 93}, {"fields": {"codename": "add_pendingemailchange", "name": "Can add pending email change", "content_type": 32}, "model": "auth.permission", "pk": 94}, {"fields": {"codename": "change_pendingemailchange", "name": "Can change pending email change", "content_type": 32}, "model": "auth.permission", "pk": 95}, {"fields": {"codename": "delete_pendingemailchange", "name": "Can delete pending email change", "content_type": 32}, "model": "auth.permission", "pk": 96}, {"fields": {"codename": "add_passwordhistory", "name": "Can add password history", "content_type": 33}, "model": "auth.permission", "pk": 97}, {"fields": {"codename": "change_passwordhistory", "name": "Can change password history", "content_type": 33}, "model": "auth.permission", "pk": 98}, {"fields": {"codename": "delete_passwordhistory", "name": "Can delete password history", "content_type": 33}, "model": "auth.permission", "pk": 99}, {"fields": {"codename": "add_loginfailures", "name": "Can add login failures", "content_type": 34}, "model": "auth.permission", "pk": 100}, {"fields": {"codename": "change_loginfailures", "name": "Can change login failures", "content_type": 34}, "model": "auth.permission", "pk": 101}, {"fields": {"codename": "delete_loginfailures", "name": "Can delete login failures", "content_type": 34}, "model": "auth.permission", "pk": 102}, {"fields": {"codename": "add_historicalcourseenrollment", "name": "Can add historical course enrollment", "content_type": 35}, "model": "auth.permission", "pk": 103}, {"fields": {"codename": "change_historicalcourseenrollment", "name": "Can change historical course enrollment", "content_type": 35}, "model": "auth.permission", "pk": 104}, {"fields": {"codename": "delete_historicalcourseenrollment", "name": "Can delete historical course enrollment", "content_type": 35}, "model": "auth.permission", "pk": 105}, {"fields": {"codename": "add_courseenrollment", "name": "Can add course enrollment", "content_type": 36}, "model": "auth.permission", "pk": 106}, {"fields": {"codename": "change_courseenrollment", "name": "Can change course enrollment", "content_type": 36}, "model": "auth.permission", "pk": 107}, {"fields": {"codename": "delete_courseenrollment", "name": "Can delete course enrollment", "content_type": 36}, "model": "auth.permission", "pk": 108}, {"fields": {"codename": "add_manualenrollmentaudit", "name": "Can add manual enrollment audit", "content_type": 37}, "model": "auth.permission", "pk": 109}, {"fields": {"codename": "change_manualenrollmentaudit", "name": "Can change manual enrollment audit", "content_type": 37}, "model": "auth.permission", "pk": 110}, {"fields": {"codename": "delete_manualenrollmentaudit", "name": "Can delete manual enrollment audit", "content_type": 37}, "model": "auth.permission", "pk": 111}, {"fields": {"codename": "add_courseenrollmentallowed", "name": "Can add course enrollment allowed", "content_type": 38}, "model": "auth.permission", "pk": 112}, {"fields": {"codename": "change_courseenrollmentallowed", "name": "Can change course enrollment allowed", "content_type": 38}, "model": "auth.permission", "pk": 113}, {"fields": {"codename": "delete_courseenrollmentallowed", "name": "Can delete course enrollment allowed", "content_type": 38}, "model": "auth.permission", "pk": 114}, {"fields": {"codename": "add_courseaccessrole", "name": "Can add course access role", "content_type": 39}, "model": "auth.permission", "pk": 115}, {"fields": {"codename": "change_courseaccessrole", "name": "Can change course access role", "content_type": 39}, "model": "auth.permission", "pk": 116}, {"fields": {"codename": "delete_courseaccessrole", "name": "Can delete course access role", "content_type": 39}, "model": "auth.permission", "pk": 117}, {"fields": {"codename": "add_dashboardconfiguration", "name": "Can add dashboard configuration", "content_type": 40}, "model": "auth.permission", "pk": 118}, {"fields": {"codename": "change_dashboardconfiguration", "name": "Can change dashboard configuration", "content_type": 40}, "model": "auth.permission", "pk": 119}, {"fields": {"codename": "delete_dashboardconfiguration", "name": "Can delete dashboard configuration", "content_type": 40}, "model": "auth.permission", "pk": 120}, {"fields": {"codename": "add_linkedinaddtoprofileconfiguration", "name": "Can add linked in add to profile configuration", "content_type": 41}, "model": "auth.permission", "pk": 121}, {"fields": {"codename": "change_linkedinaddtoprofileconfiguration", "name": "Can change linked in add to profile configuration", "content_type": 41}, "model": "auth.permission", "pk": 122}, {"fields": {"codename": "delete_linkedinaddtoprofileconfiguration", "name": "Can delete linked in add to profile configuration", "content_type": 41}, "model": "auth.permission", "pk": 123}, {"fields": {"codename": "add_entranceexamconfiguration", "name": "Can add entrance exam configuration", "content_type": 42}, "model": "auth.permission", "pk": 124}, {"fields": {"codename": "change_entranceexamconfiguration", "name": "Can change entrance exam configuration", "content_type": 42}, "model": "auth.permission", "pk": 125}, {"fields": {"codename": "delete_entranceexamconfiguration", "name": "Can delete entrance exam configuration", "content_type": 42}, "model": "auth.permission", "pk": 126}, {"fields": {"codename": "add_languageproficiency", "name": "Can add language proficiency", "content_type": 43}, "model": "auth.permission", "pk": 127}, {"fields": {"codename": "change_languageproficiency", "name": "Can change language proficiency", "content_type": 43}, "model": "auth.permission", "pk": 128}, {"fields": {"codename": "delete_languageproficiency", "name": "Can delete language proficiency", "content_type": 43}, "model": "auth.permission", "pk": 129}, {"fields": {"codename": "add_courseenrollmentattribute", "name": "Can add course enrollment attribute", "content_type": 44}, "model": "auth.permission", "pk": 130}, {"fields": {"codename": "change_courseenrollmentattribute", "name": "Can change course enrollment attribute", "content_type": 44}, "model": "auth.permission", "pk": 131}, {"fields": {"codename": "delete_courseenrollmentattribute", "name": "Can delete course enrollment attribute", "content_type": 44}, "model": "auth.permission", "pk": 132}, {"fields": {"codename": "add_enrollmentrefundconfiguration", "name": "Can add enrollment refund configuration", "content_type": 45}, "model": "auth.permission", "pk": 133}, {"fields": {"codename": "change_enrollmentrefundconfiguration", "name": "Can change enrollment refund configuration", "content_type": 45}, "model": "auth.permission", "pk": 134}, {"fields": {"codename": "delete_enrollmentrefundconfiguration", "name": "Can delete enrollment refund configuration", "content_type": 45}, "model": "auth.permission", "pk": 135}, {"fields": {"codename": "add_trackinglog", "name": "Can add tracking log", "content_type": 46}, "model": "auth.permission", "pk": 136}, {"fields": {"codename": "change_trackinglog", "name": "Can change tracking log", "content_type": 46}, "model": "auth.permission", "pk": 137}, {"fields": {"codename": "delete_trackinglog", "name": "Can delete tracking log", "content_type": 46}, "model": "auth.permission", "pk": 138}, {"fields": {"codename": "add_ratelimitconfiguration", "name": "Can add rate limit configuration", "content_type": 47}, "model": "auth.permission", "pk": 139}, {"fields": {"codename": "change_ratelimitconfiguration", "name": "Can change rate limit configuration", "content_type": 47}, "model": "auth.permission", "pk": 140}, {"fields": {"codename": "delete_ratelimitconfiguration", "name": "Can delete rate limit configuration", "content_type": 47}, "model": "auth.permission", "pk": 141}, {"fields": {"codename": "add_certificatewhitelist", "name": "Can add certificate whitelist", "content_type": 48}, "model": "auth.permission", "pk": 142}, {"fields": {"codename": "change_certificatewhitelist", "name": "Can change certificate whitelist", "content_type": 48}, "model": "auth.permission", "pk": 143}, {"fields": {"codename": "delete_certificatewhitelist", "name": "Can delete certificate whitelist", "content_type": 48}, "model": "auth.permission", "pk": 144}, {"fields": {"codename": "add_generatedcertificate", "name": "Can add generated certificate", "content_type": 49}, "model": "auth.permission", "pk": 145}, {"fields": {"codename": "change_generatedcertificate", "name": "Can change generated certificate", "content_type": 49}, "model": "auth.permission", "pk": 146}, {"fields": {"codename": "delete_generatedcertificate", "name": "Can delete generated certificate", "content_type": 49}, "model": "auth.permission", "pk": 147}, {"fields": {"codename": "add_certificategenerationhistory", "name": "Can add certificate generation history", "content_type": 50}, "model": "auth.permission", "pk": 148}, {"fields": {"codename": "change_certificategenerationhistory", "name": "Can change certificate generation history", "content_type": 50}, "model": "auth.permission", "pk": 149}, {"fields": {"codename": "delete_certificategenerationhistory", "name": "Can delete certificate generation history", "content_type": 50}, "model": "auth.permission", "pk": 150}, {"fields": {"codename": "add_examplecertificateset", "name": "Can add example certificate set", "content_type": 51}, "model": "auth.permission", "pk": 151}, {"fields": {"codename": "change_examplecertificateset", "name": "Can change example certificate set", "content_type": 51}, "model": "auth.permission", "pk": 152}, {"fields": {"codename": "delete_examplecertificateset", "name": "Can delete example certificate set", "content_type": 51}, "model": "auth.permission", "pk": 153}, {"fields": {"codename": "add_examplecertificate", "name": "Can add example certificate", "content_type": 52}, "model": "auth.permission", "pk": 154}, {"fields": {"codename": "change_examplecertificate", "name": "Can change example certificate", "content_type": 52}, "model": "auth.permission", "pk": 155}, {"fields": {"codename": "delete_examplecertificate", "name": "Can delete example certificate", "content_type": 52}, "model": "auth.permission", "pk": 156}, {"fields": {"codename": "add_certificategenerationcoursesetting", "name": "Can add certificate generation course setting", "content_type": 53}, "model": "auth.permission", "pk": 157}, {"fields": {"codename": "change_certificategenerationcoursesetting", "name": "Can change certificate generation course setting", "content_type": 53}, "model": "auth.permission", "pk": 158}, {"fields": {"codename": "delete_certificategenerationcoursesetting", "name": "Can delete certificate generation course setting", "content_type": 53}, "model": "auth.permission", "pk": 159}, {"fields": {"codename": "add_certificategenerationconfiguration", "name": "Can add certificate generation configuration", "content_type": 54}, "model": "auth.permission", "pk": 160}, {"fields": {"codename": "change_certificategenerationconfiguration", "name": "Can change certificate generation configuration", "content_type": 54}, "model": "auth.permission", "pk": 161}, {"fields": {"codename": "delete_certificategenerationconfiguration", "name": "Can delete certificate generation configuration", "content_type": 54}, "model": "auth.permission", "pk": 162}, {"fields": {"codename": "add_certificatehtmlviewconfiguration", "name": "Can add certificate html view configuration", "content_type": 55}, "model": "auth.permission", "pk": 163}, {"fields": {"codename": "change_certificatehtmlviewconfiguration", "name": "Can change certificate html view configuration", "content_type": 55}, "model": "auth.permission", "pk": 164}, {"fields": {"codename": "delete_certificatehtmlviewconfiguration", "name": "Can delete certificate html view configuration", "content_type": 55}, "model": "auth.permission", "pk": 165}, {"fields": {"codename": "add_badgeassertion", "name": "Can add badge assertion", "content_type": 56}, "model": "auth.permission", "pk": 166}, {"fields": {"codename": "change_badgeassertion", "name": "Can change badge assertion", "content_type": 56}, "model": "auth.permission", "pk": 167}, {"fields": {"codename": "delete_badgeassertion", "name": "Can delete badge assertion", "content_type": 56}, "model": "auth.permission", "pk": 168}, {"fields": {"codename": "add_badgeimageconfiguration", "name": "Can add badge image configuration", "content_type": 57}, "model": "auth.permission", "pk": 169}, {"fields": {"codename": "change_badgeimageconfiguration", "name": "Can change badge image configuration", "content_type": 57}, "model": "auth.permission", "pk": 170}, {"fields": {"codename": "delete_badgeimageconfiguration", "name": "Can delete badge image configuration", "content_type": 57}, "model": "auth.permission", "pk": 171}, {"fields": {"codename": "add_certificatetemplate", "name": "Can add certificate template", "content_type": 58}, "model": "auth.permission", "pk": 172}, {"fields": {"codename": "change_certificatetemplate", "name": "Can change certificate template", "content_type": 58}, "model": "auth.permission", "pk": 173}, {"fields": {"codename": "delete_certificatetemplate", "name": "Can delete certificate template", "content_type": 58}, "model": "auth.permission", "pk": 174}, {"fields": {"codename": "add_certificatetemplateasset", "name": "Can add certificate template asset", "content_type": 59}, "model": "auth.permission", "pk": 175}, {"fields": {"codename": "change_certificatetemplateasset", "name": "Can change certificate template asset", "content_type": 59}, "model": "auth.permission", "pk": 176}, {"fields": {"codename": "delete_certificatetemplateasset", "name": "Can delete certificate template asset", "content_type": 59}, "model": "auth.permission", "pk": 177}, {"fields": {"codename": "add_instructortask", "name": "Can add instructor task", "content_type": 60}, "model": "auth.permission", "pk": 178}, {"fields": {"codename": "change_instructortask", "name": "Can change instructor task", "content_type": 60}, "model": "auth.permission", "pk": 179}, {"fields": {"codename": "delete_instructortask", "name": "Can delete instructor task", "content_type": 60}, "model": "auth.permission", "pk": 180}, {"fields": {"codename": "add_courseusergroup", "name": "Can add course user group", "content_type": 61}, "model": "auth.permission", "pk": 181}, {"fields": {"codename": "change_courseusergroup", "name": "Can change course user group", "content_type": 61}, "model": "auth.permission", "pk": 182}, {"fields": {"codename": "delete_courseusergroup", "name": "Can delete course user group", "content_type": 61}, "model": "auth.permission", "pk": 183}, {"fields": {"codename": "add_cohortmembership", "name": "Can add cohort membership", "content_type": 62}, "model": "auth.permission", "pk": 184}, {"fields": {"codename": "change_cohortmembership", "name": "Can change cohort membership", "content_type": 62}, "model": "auth.permission", "pk": 185}, {"fields": {"codename": "delete_cohortmembership", "name": "Can delete cohort membership", "content_type": 62}, "model": "auth.permission", "pk": 186}, {"fields": {"codename": "add_courseusergrouppartitiongroup", "name": "Can add course user group partition group", "content_type": 63}, "model": "auth.permission", "pk": 187}, {"fields": {"codename": "change_courseusergrouppartitiongroup", "name": "Can change course user group partition group", "content_type": 63}, "model": "auth.permission", "pk": 188}, {"fields": {"codename": "delete_courseusergrouppartitiongroup", "name": "Can delete course user group partition group", "content_type": 63}, "model": "auth.permission", "pk": 189}, {"fields": {"codename": "add_coursecohortssettings", "name": "Can add course cohorts settings", "content_type": 64}, "model": "auth.permission", "pk": 190}, {"fields": {"codename": "change_coursecohortssettings", "name": "Can change course cohorts settings", "content_type": 64}, "model": "auth.permission", "pk": 191}, {"fields": {"codename": "delete_coursecohortssettings", "name": "Can delete course cohorts settings", "content_type": 64}, "model": "auth.permission", "pk": 192}, {"fields": {"codename": "add_coursecohort", "name": "Can add course cohort", "content_type": 65}, "model": "auth.permission", "pk": 193}, {"fields": {"codename": "change_coursecohort", "name": "Can change course cohort", "content_type": 65}, "model": "auth.permission", "pk": 194}, {"fields": {"codename": "delete_coursecohort", "name": "Can delete course cohort", "content_type": 65}, "model": "auth.permission", "pk": 195}, {"fields": {"codename": "add_courseemail", "name": "Can add course email", "content_type": 66}, "model": "auth.permission", "pk": 196}, {"fields": {"codename": "change_courseemail", "name": "Can change course email", "content_type": 66}, "model": "auth.permission", "pk": 197}, {"fields": {"codename": "delete_courseemail", "name": "Can delete course email", "content_type": 66}, "model": "auth.permission", "pk": 198}, {"fields": {"codename": "add_optout", "name": "Can add optout", "content_type": 67}, "model": "auth.permission", "pk": 199}, {"fields": {"codename": "change_optout", "name": "Can change optout", "content_type": 67}, "model": "auth.permission", "pk": 200}, {"fields": {"codename": "delete_optout", "name": "Can delete optout", "content_type": 67}, "model": "auth.permission", "pk": 201}, {"fields": {"codename": "add_courseemailtemplate", "name": "Can add course email template", "content_type": 68}, "model": "auth.permission", "pk": 202}, {"fields": {"codename": "change_courseemailtemplate", "name": "Can change course email template", "content_type": 68}, "model": "auth.permission", "pk": 203}, {"fields": {"codename": "delete_courseemailtemplate", "name": "Can delete course email template", "content_type": 68}, "model": "auth.permission", "pk": 204}, {"fields": {"codename": "add_courseauthorization", "name": "Can add course authorization", "content_type": 69}, "model": "auth.permission", "pk": 205}, {"fields": {"codename": "change_courseauthorization", "name": "Can change course authorization", "content_type": 69}, "model": "auth.permission", "pk": 206}, {"fields": {"codename": "delete_courseauthorization", "name": "Can delete course authorization", "content_type": 69}, "model": "auth.permission", "pk": 207}, {"fields": {"codename": "add_brandinginfoconfig", "name": "Can add branding info config", "content_type": 70}, "model": "auth.permission", "pk": 208}, {"fields": {"codename": "change_brandinginfoconfig", "name": "Can change branding info config", "content_type": 70}, "model": "auth.permission", "pk": 209}, {"fields": {"codename": "delete_brandinginfoconfig", "name": "Can delete branding info config", "content_type": 70}, "model": "auth.permission", "pk": 210}, {"fields": {"codename": "add_brandingapiconfig", "name": "Can add branding api config", "content_type": 71}, "model": "auth.permission", "pk": 211}, {"fields": {"codename": "change_brandingapiconfig", "name": "Can change branding api config", "content_type": 71}, "model": "auth.permission", "pk": 212}, {"fields": {"codename": "delete_brandingapiconfig", "name": "Can delete branding api config", "content_type": 71}, "model": "auth.permission", "pk": 213}, {"fields": {"codename": "add_externalauthmap", "name": "Can add external auth map", "content_type": 72}, "model": "auth.permission", "pk": 214}, {"fields": {"codename": "change_externalauthmap", "name": "Can change external auth map", "content_type": 72}, "model": "auth.permission", "pk": 215}, {"fields": {"codename": "delete_externalauthmap", "name": "Can delete external auth map", "content_type": 72}, "model": "auth.permission", "pk": 216}, {"fields": {"codename": "add_nonce", "name": "Can add nonce", "content_type": 73}, "model": "auth.permission", "pk": 217}, {"fields": {"codename": "change_nonce", "name": "Can change nonce", "content_type": 73}, "model": "auth.permission", "pk": 218}, {"fields": {"codename": "delete_nonce", "name": "Can delete nonce", "content_type": 73}, "model": "auth.permission", "pk": 219}, {"fields": {"codename": "add_association", "name": "Can add association", "content_type": 74}, "model": "auth.permission", "pk": 220}, {"fields": {"codename": "change_association", "name": "Can change association", "content_type": 74}, "model": "auth.permission", "pk": 221}, {"fields": {"codename": "delete_association", "name": "Can delete association", "content_type": 74}, "model": "auth.permission", "pk": 222}, {"fields": {"codename": "add_useropenid", "name": "Can add user open id", "content_type": 75}, "model": "auth.permission", "pk": 223}, {"fields": {"codename": "change_useropenid", "name": "Can change user open id", "content_type": 75}, "model": "auth.permission", "pk": 224}, {"fields": {"codename": "delete_useropenid", "name": "Can delete user open id", "content_type": 75}, "model": "auth.permission", "pk": 225}, {"fields": {"codename": "account_verified", "name": "The OpenID has been verified", "content_type": 75}, "model": "auth.permission", "pk": 226}, {"fields": {"codename": "add_client", "name": "Can add client", "content_type": 76}, "model": "auth.permission", "pk": 227}, {"fields": {"codename": "change_client", "name": "Can change client", "content_type": 76}, "model": "auth.permission", "pk": 228}, {"fields": {"codename": "delete_client", "name": "Can delete client", "content_type": 76}, "model": "auth.permission", "pk": 229}, {"fields": {"codename": "add_grant", "name": "Can add grant", "content_type": 77}, "model": "auth.permission", "pk": 230}, {"fields": {"codename": "change_grant", "name": "Can change grant", "content_type": 77}, "model": "auth.permission", "pk": 231}, {"fields": {"codename": "delete_grant", "name": "Can delete grant", "content_type": 77}, "model": "auth.permission", "pk": 232}, {"fields": {"codename": "add_accesstoken", "name": "Can add access token", "content_type": 78}, "model": "auth.permission", "pk": 233}, {"fields": {"codename": "change_accesstoken", "name": "Can change access token", "content_type": 78}, "model": "auth.permission", "pk": 234}, {"fields": {"codename": "delete_accesstoken", "name": "Can delete access token", "content_type": 78}, "model": "auth.permission", "pk": 235}, {"fields": {"codename": "add_refreshtoken", "name": "Can add refresh token", "content_type": 79}, "model": "auth.permission", "pk": 236}, {"fields": {"codename": "change_refreshtoken", "name": "Can change refresh token", "content_type": 79}, "model": "auth.permission", "pk": 237}, {"fields": {"codename": "delete_refreshtoken", "name": "Can delete refresh token", "content_type": 79}, "model": "auth.permission", "pk": 238}, {"fields": {"codename": "add_trustedclient", "name": "Can add trusted client", "content_type": 80}, "model": "auth.permission", "pk": 239}, {"fields": {"codename": "change_trustedclient", "name": "Can change trusted client", "content_type": 80}, "model": "auth.permission", "pk": 240}, {"fields": {"codename": "delete_trustedclient", "name": "Can delete trusted client", "content_type": 80}, "model": "auth.permission", "pk": 241}, {"fields": {"codename": "add_oauth2providerconfig", "name": "Can add Provider Configuration (OAuth)", "content_type": 81}, "model": "auth.permission", "pk": 242}, {"fields": {"codename": "change_oauth2providerconfig", "name": "Can change Provider Configuration (OAuth)", "content_type": 81}, "model": "auth.permission", "pk": 243}, {"fields": {"codename": "delete_oauth2providerconfig", "name": "Can delete Provider Configuration (OAuth)", "content_type": 81}, "model": "auth.permission", "pk": 244}, {"fields": {"codename": "add_samlproviderconfig", "name": "Can add Provider Configuration (SAML IdP)", "content_type": 82}, "model": "auth.permission", "pk": 245}, {"fields": {"codename": "change_samlproviderconfig", "name": "Can change Provider Configuration (SAML IdP)", "content_type": 82}, "model": "auth.permission", "pk": 246}, {"fields": {"codename": "delete_samlproviderconfig", "name": "Can delete Provider Configuration (SAML IdP)", "content_type": 82}, "model": "auth.permission", "pk": 247}, {"fields": {"codename": "add_samlconfiguration", "name": "Can add SAML Configuration", "content_type": 83}, "model": "auth.permission", "pk": 248}, {"fields": {"codename": "change_samlconfiguration", "name": "Can change SAML Configuration", "content_type": 83}, "model": "auth.permission", "pk": 249}, {"fields": {"codename": "delete_samlconfiguration", "name": "Can delete SAML Configuration", "content_type": 83}, "model": "auth.permission", "pk": 250}, {"fields": {"codename": "add_samlproviderdata", "name": "Can add SAML Provider Data", "content_type": 84}, "model": "auth.permission", "pk": 251}, {"fields": {"codename": "change_samlproviderdata", "name": "Can change SAML Provider Data", "content_type": 84}, "model": "auth.permission", "pk": 252}, {"fields": {"codename": "delete_samlproviderdata", "name": "Can delete SAML Provider Data", "content_type": 84}, "model": "auth.permission", "pk": 253}, {"fields": {"codename": "add_ltiproviderconfig", "name": "Can add Provider Configuration (LTI)", "content_type": 85}, "model": "auth.permission", "pk": 254}, {"fields": {"codename": "change_ltiproviderconfig", "name": "Can change Provider Configuration (LTI)", "content_type": 85}, "model": "auth.permission", "pk": 255}, {"fields": {"codename": "delete_ltiproviderconfig", "name": "Can delete Provider Configuration (LTI)", "content_type": 85}, "model": "auth.permission", "pk": 256}, {"fields": {"codename": "add_providerapipermissions", "name": "Can add Provider API Permission", "content_type": 86}, "model": "auth.permission", "pk": 257}, {"fields": {"codename": "change_providerapipermissions", "name": "Can change Provider API Permission", "content_type": 86}, "model": "auth.permission", "pk": 258}, {"fields": {"codename": "delete_providerapipermissions", "name": "Can delete Provider API Permission", "content_type": 86}, "model": "auth.permission", "pk": 259}, {"fields": {"codename": "add_nonce", "name": "Can add nonce", "content_type": 87}, "model": "auth.permission", "pk": 260}, {"fields": {"codename": "change_nonce", "name": "Can change nonce", "content_type": 87}, "model": "auth.permission", "pk": 261}, {"fields": {"codename": "delete_nonce", "name": "Can delete nonce", "content_type": 87}, "model": "auth.permission", "pk": 262}, {"fields": {"codename": "add_scope", "name": "Can add scope", "content_type": 88}, "model": "auth.permission", "pk": 263}, {"fields": {"codename": "change_scope", "name": "Can change scope", "content_type": 88}, "model": "auth.permission", "pk": 264}, {"fields": {"codename": "delete_scope", "name": "Can delete scope", "content_type": 88}, "model": "auth.permission", "pk": 265}, {"fields": {"codename": "add_resource", "name": "Can add resource", "content_type": 88}, "model": "auth.permission", "pk": 266}, {"fields": {"codename": "change_resource", "name": "Can change resource", "content_type": 88}, "model": "auth.permission", "pk": 267}, {"fields": {"codename": "delete_resource", "name": "Can delete resource", "content_type": 88}, "model": "auth.permission", "pk": 268}, {"fields": {"codename": "add_consumer", "name": "Can add consumer", "content_type": 89}, "model": "auth.permission", "pk": 269}, {"fields": {"codename": "change_consumer", "name": "Can change consumer", "content_type": 89}, "model": "auth.permission", "pk": 270}, {"fields": {"codename": "delete_consumer", "name": "Can delete consumer", "content_type": 89}, "model": "auth.permission", "pk": 271}, {"fields": {"codename": "add_token", "name": "Can add token", "content_type": 90}, "model": "auth.permission", "pk": 272}, {"fields": {"codename": "change_token", "name": "Can change token", "content_type": 90}, "model": "auth.permission", "pk": 273}, {"fields": {"codename": "delete_token", "name": "Can delete token", "content_type": 90}, "model": "auth.permission", "pk": 274}, {"fields": {"codename": "add_article", "name": "Can add article", "content_type": 92}, "model": "auth.permission", "pk": 275}, {"fields": {"codename": "change_article", "name": "Can change article", "content_type": 92}, "model": "auth.permission", "pk": 276}, {"fields": {"codename": "delete_article", "name": "Can delete article", "content_type": 92}, "model": "auth.permission", "pk": 277}, {"fields": {"codename": "moderate", "name": "Can edit all articles and lock/unlock/restore", "content_type": 92}, "model": "auth.permission", "pk": 278}, {"fields": {"codename": "assign", "name": "Can change ownership of any article", "content_type": 92}, "model": "auth.permission", "pk": 279}, {"fields": {"codename": "grant", "name": "Can assign permissions to other users", "content_type": 92}, "model": "auth.permission", "pk": 280}, {"fields": {"codename": "add_articleforobject", "name": "Can add Article for object", "content_type": 93}, "model": "auth.permission", "pk": 281}, {"fields": {"codename": "change_articleforobject", "name": "Can change Article for object", "content_type": 93}, "model": "auth.permission", "pk": 282}, {"fields": {"codename": "delete_articleforobject", "name": "Can delete Article for object", "content_type": 93}, "model": "auth.permission", "pk": 283}, {"fields": {"codename": "add_articlerevision", "name": "Can add article revision", "content_type": 94}, "model": "auth.permission", "pk": 284}, {"fields": {"codename": "change_articlerevision", "name": "Can change article revision", "content_type": 94}, "model": "auth.permission", "pk": 285}, {"fields": {"codename": "delete_articlerevision", "name": "Can delete article revision", "content_type": 94}, "model": "auth.permission", "pk": 286}, {"fields": {"codename": "add_urlpath", "name": "Can add URL path", "content_type": 95}, "model": "auth.permission", "pk": 287}, {"fields": {"codename": "change_urlpath", "name": "Can change URL path", "content_type": 95}, "model": "auth.permission", "pk": 288}, {"fields": {"codename": "delete_urlpath", "name": "Can delete URL path", "content_type": 95}, "model": "auth.permission", "pk": 289}, {"fields": {"codename": "add_articleplugin", "name": "Can add article plugin", "content_type": 96}, "model": "auth.permission", "pk": 290}, {"fields": {"codename": "change_articleplugin", "name": "Can change article plugin", "content_type": 96}, "model": "auth.permission", "pk": 291}, {"fields": {"codename": "delete_articleplugin", "name": "Can delete article plugin", "content_type": 96}, "model": "auth.permission", "pk": 292}, {"fields": {"codename": "add_reusableplugin", "name": "Can add reusable plugin", "content_type": 97}, "model": "auth.permission", "pk": 293}, {"fields": {"codename": "change_reusableplugin", "name": "Can change reusable plugin", "content_type": 97}, "model": "auth.permission", "pk": 294}, {"fields": {"codename": "delete_reusableplugin", "name": "Can delete reusable plugin", "content_type": 97}, "model": "auth.permission", "pk": 295}, {"fields": {"codename": "add_simpleplugin", "name": "Can add simple plugin", "content_type": 98}, "model": "auth.permission", "pk": 296}, {"fields": {"codename": "change_simpleplugin", "name": "Can change simple plugin", "content_type": 98}, "model": "auth.permission", "pk": 297}, {"fields": {"codename": "delete_simpleplugin", "name": "Can delete simple plugin", "content_type": 98}, "model": "auth.permission", "pk": 298}, {"fields": {"codename": "add_revisionplugin", "name": "Can add revision plugin", "content_type": 99}, "model": "auth.permission", "pk": 299}, {"fields": {"codename": "change_revisionplugin", "name": "Can change revision plugin", "content_type": 99}, "model": "auth.permission", "pk": 300}, {"fields": {"codename": "delete_revisionplugin", "name": "Can delete revision plugin", "content_type": 99}, "model": "auth.permission", "pk": 301}, {"fields": {"codename": "add_revisionpluginrevision", "name": "Can add revision plugin revision", "content_type": 100}, "model": "auth.permission", "pk": 302}, {"fields": {"codename": "change_revisionpluginrevision", "name": "Can change revision plugin revision", "content_type": 100}, "model": "auth.permission", "pk": 303}, {"fields": {"codename": "delete_revisionpluginrevision", "name": "Can delete revision plugin revision", "content_type": 100}, "model": "auth.permission", "pk": 304}, {"fields": {"codename": "add_image", "name": "Can add image", "content_type": 101}, "model": "auth.permission", "pk": 305}, {"fields": {"codename": "change_image", "name": "Can change image", "content_type": 101}, "model": "auth.permission", "pk": 306}, {"fields": {"codename": "delete_image", "name": "Can delete image", "content_type": 101}, "model": "auth.permission", "pk": 307}, {"fields": {"codename": "add_imagerevision", "name": "Can add image revision", "content_type": 102}, "model": "auth.permission", "pk": 308}, {"fields": {"codename": "change_imagerevision", "name": "Can change image revision", "content_type": 102}, "model": "auth.permission", "pk": 309}, {"fields": {"codename": "delete_imagerevision", "name": "Can delete image revision", "content_type": 102}, "model": "auth.permission", "pk": 310}, {"fields": {"codename": "add_attachment", "name": "Can add attachment", "content_type": 103}, "model": "auth.permission", "pk": 311}, {"fields": {"codename": "change_attachment", "name": "Can change attachment", "content_type": 103}, "model": "auth.permission", "pk": 312}, {"fields": {"codename": "delete_attachment", "name": "Can delete attachment", "content_type": 103}, "model": "auth.permission", "pk": 313}, {"fields": {"codename": "add_attachmentrevision", "name": "Can add attachment revision", "content_type": 104}, "model": "auth.permission", "pk": 314}, {"fields": {"codename": "change_attachmentrevision", "name": "Can change attachment revision", "content_type": 104}, "model": "auth.permission", "pk": 315}, {"fields": {"codename": "delete_attachmentrevision", "name": "Can delete attachment revision", "content_type": 104}, "model": "auth.permission", "pk": 316}, {"fields": {"codename": "add_notificationtype", "name": "Can add type", "content_type": 105}, "model": "auth.permission", "pk": 317}, {"fields": {"codename": "change_notificationtype", "name": "Can change type", "content_type": 105}, "model": "auth.permission", "pk": 318}, {"fields": {"codename": "delete_notificationtype", "name": "Can delete type", "content_type": 105}, "model": "auth.permission", "pk": 319}, {"fields": {"codename": "add_settings", "name": "Can add settings", "content_type": 106}, "model": "auth.permission", "pk": 320}, {"fields": {"codename": "change_settings", "name": "Can change settings", "content_type": 106}, "model": "auth.permission", "pk": 321}, {"fields": {"codename": "delete_settings", "name": "Can delete settings", "content_type": 106}, "model": "auth.permission", "pk": 322}, {"fields": {"codename": "add_subscription", "name": "Can add subscription", "content_type": 107}, "model": "auth.permission", "pk": 323}, {"fields": {"codename": "change_subscription", "name": "Can change subscription", "content_type": 107}, "model": "auth.permission", "pk": 324}, {"fields": {"codename": "delete_subscription", "name": "Can delete subscription", "content_type": 107}, "model": "auth.permission", "pk": 325}, {"fields": {"codename": "add_notification", "name": "Can add notification", "content_type": 108}, "model": "auth.permission", "pk": 326}, {"fields": {"codename": "change_notification", "name": "Can change notification", "content_type": 108}, "model": "auth.permission", "pk": 327}, {"fields": {"codename": "delete_notification", "name": "Can delete notification", "content_type": 108}, "model": "auth.permission", "pk": 328}, {"fields": {"codename": "add_logentry", "name": "Can add log entry", "content_type": 109}, "model": "auth.permission", "pk": 329}, {"fields": {"codename": "change_logentry", "name": "Can change log entry", "content_type": 109}, "model": "auth.permission", "pk": 330}, {"fields": {"codename": "delete_logentry", "name": "Can delete log entry", "content_type": 109}, "model": "auth.permission", "pk": 331}, {"fields": {"codename": "add_role", "name": "Can add role", "content_type": 110}, "model": "auth.permission", "pk": 332}, {"fields": {"codename": "change_role", "name": "Can change role", "content_type": 110}, "model": "auth.permission", "pk": 333}, {"fields": {"codename": "delete_role", "name": "Can delete role", "content_type": 110}, "model": "auth.permission", "pk": 334}, {"fields": {"codename": "add_permission", "name": "Can add permission", "content_type": 111}, "model": "auth.permission", "pk": 335}, {"fields": {"codename": "change_permission", "name": "Can change permission", "content_type": 111}, "model": "auth.permission", "pk": 336}, {"fields": {"codename": "delete_permission", "name": "Can delete permission", "content_type": 111}, "model": "auth.permission", "pk": 337}, {"fields": {"codename": "add_note", "name": "Can add note", "content_type": 112}, "model": "auth.permission", "pk": 338}, {"fields": {"codename": "change_note", "name": "Can change note", "content_type": 112}, "model": "auth.permission", "pk": 339}, {"fields": {"codename": "delete_note", "name": "Can delete note", "content_type": 112}, "model": "auth.permission", "pk": 340}, {"fields": {"codename": "add_splashconfig", "name": "Can add splash config", "content_type": 113}, "model": "auth.permission", "pk": 341}, {"fields": {"codename": "change_splashconfig", "name": "Can change splash config", "content_type": 113}, "model": "auth.permission", "pk": 342}, {"fields": {"codename": "delete_splashconfig", "name": "Can delete splash config", "content_type": 113}, "model": "auth.permission", "pk": 343}, {"fields": {"codename": "add_userpreference", "name": "Can add user preference", "content_type": 114}, "model": "auth.permission", "pk": 344}, {"fields": {"codename": "change_userpreference", "name": "Can change user preference", "content_type": 114}, "model": "auth.permission", "pk": 345}, {"fields": {"codename": "delete_userpreference", "name": "Can delete user preference", "content_type": 114}, "model": "auth.permission", "pk": 346}, {"fields": {"codename": "add_usercoursetag", "name": "Can add user course tag", "content_type": 115}, "model": "auth.permission", "pk": 347}, {"fields": {"codename": "change_usercoursetag", "name": "Can change user course tag", "content_type": 115}, "model": "auth.permission", "pk": 348}, {"fields": {"codename": "delete_usercoursetag", "name": "Can delete user course tag", "content_type": 115}, "model": "auth.permission", "pk": 349}, {"fields": {"codename": "add_userorgtag", "name": "Can add user org tag", "content_type": 116}, "model": "auth.permission", "pk": 350}, {"fields": {"codename": "change_userorgtag", "name": "Can change user org tag", "content_type": 116}, "model": "auth.permission", "pk": 351}, {"fields": {"codename": "delete_userorgtag", "name": "Can delete user org tag", "content_type": 116}, "model": "auth.permission", "pk": 352}, {"fields": {"codename": "add_order", "name": "Can add order", "content_type": 117}, "model": "auth.permission", "pk": 353}, {"fields": {"codename": "change_order", "name": "Can change order", "content_type": 117}, "model": "auth.permission", "pk": 354}, {"fields": {"codename": "delete_order", "name": "Can delete order", "content_type": 117}, "model": "auth.permission", "pk": 355}, {"fields": {"codename": "add_orderitem", "name": "Can add order item", "content_type": 118}, "model": "auth.permission", "pk": 356}, {"fields": {"codename": "change_orderitem", "name": "Can change order item", "content_type": 118}, "model": "auth.permission", "pk": 357}, {"fields": {"codename": "delete_orderitem", "name": "Can delete order item", "content_type": 118}, "model": "auth.permission", "pk": 358}, {"fields": {"codename": "add_invoice", "name": "Can add invoice", "content_type": 119}, "model": "auth.permission", "pk": 359}, {"fields": {"codename": "change_invoice", "name": "Can change invoice", "content_type": 119}, "model": "auth.permission", "pk": 360}, {"fields": {"codename": "delete_invoice", "name": "Can delete invoice", "content_type": 119}, "model": "auth.permission", "pk": 361}, {"fields": {"codename": "add_invoicetransaction", "name": "Can add invoice transaction", "content_type": 120}, "model": "auth.permission", "pk": 362}, {"fields": {"codename": "change_invoicetransaction", "name": "Can change invoice transaction", "content_type": 120}, "model": "auth.permission", "pk": 363}, {"fields": {"codename": "delete_invoicetransaction", "name": "Can delete invoice transaction", "content_type": 120}, "model": "auth.permission", "pk": 364}, {"fields": {"codename": "add_invoiceitem", "name": "Can add invoice item", "content_type": 121}, "model": "auth.permission", "pk": 365}, {"fields": {"codename": "change_invoiceitem", "name": "Can change invoice item", "content_type": 121}, "model": "auth.permission", "pk": 366}, {"fields": {"codename": "delete_invoiceitem", "name": "Can delete invoice item", "content_type": 121}, "model": "auth.permission", "pk": 367}, {"fields": {"codename": "add_courseregistrationcodeinvoiceitem", "name": "Can add course registration code invoice item", "content_type": 122}, "model": "auth.permission", "pk": 368}, {"fields": {"codename": "change_courseregistrationcodeinvoiceitem", "name": "Can change course registration code invoice item", "content_type": 122}, "model": "auth.permission", "pk": 369}, {"fields": {"codename": "delete_courseregistrationcodeinvoiceitem", "name": "Can delete course registration code invoice item", "content_type": 122}, "model": "auth.permission", "pk": 370}, {"fields": {"codename": "add_invoicehistory", "name": "Can add invoice history", "content_type": 123}, "model": "auth.permission", "pk": 371}, {"fields": {"codename": "change_invoicehistory", "name": "Can change invoice history", "content_type": 123}, "model": "auth.permission", "pk": 372}, {"fields": {"codename": "delete_invoicehistory", "name": "Can delete invoice history", "content_type": 123}, "model": "auth.permission", "pk": 373}, {"fields": {"codename": "add_courseregistrationcode", "name": "Can add course registration code", "content_type": 124}, "model": "auth.permission", "pk": 374}, {"fields": {"codename": "change_courseregistrationcode", "name": "Can change course registration code", "content_type": 124}, "model": "auth.permission", "pk": 375}, {"fields": {"codename": "delete_courseregistrationcode", "name": "Can delete course registration code", "content_type": 124}, "model": "auth.permission", "pk": 376}, {"fields": {"codename": "add_registrationcoderedemption", "name": "Can add registration code redemption", "content_type": 125}, "model": "auth.permission", "pk": 377}, {"fields": {"codename": "change_registrationcoderedemption", "name": "Can change registration code redemption", "content_type": 125}, "model": "auth.permission", "pk": 378}, {"fields": {"codename": "delete_registrationcoderedemption", "name": "Can delete registration code redemption", "content_type": 125}, "model": "auth.permission", "pk": 379}, {"fields": {"codename": "add_coupon", "name": "Can add coupon", "content_type": 126}, "model": "auth.permission", "pk": 380}, {"fields": {"codename": "change_coupon", "name": "Can change coupon", "content_type": 126}, "model": "auth.permission", "pk": 381}, {"fields": {"codename": "delete_coupon", "name": "Can delete coupon", "content_type": 126}, "model": "auth.permission", "pk": 382}, {"fields": {"codename": "add_couponredemption", "name": "Can add coupon redemption", "content_type": 127}, "model": "auth.permission", "pk": 383}, {"fields": {"codename": "change_couponredemption", "name": "Can change coupon redemption", "content_type": 127}, "model": "auth.permission", "pk": 384}, {"fields": {"codename": "delete_couponredemption", "name": "Can delete coupon redemption", "content_type": 127}, "model": "auth.permission", "pk": 385}, {"fields": {"codename": "add_paidcourseregistration", "name": "Can add paid course registration", "content_type": 128}, "model": "auth.permission", "pk": 386}, {"fields": {"codename": "change_paidcourseregistration", "name": "Can change paid course registration", "content_type": 128}, "model": "auth.permission", "pk": 387}, {"fields": {"codename": "delete_paidcourseregistration", "name": "Can delete paid course registration", "content_type": 128}, "model": "auth.permission", "pk": 388}, {"fields": {"codename": "add_courseregcodeitem", "name": "Can add course reg code item", "content_type": 129}, "model": "auth.permission", "pk": 389}, {"fields": {"codename": "change_courseregcodeitem", "name": "Can change course reg code item", "content_type": 129}, "model": "auth.permission", "pk": 390}, {"fields": {"codename": "delete_courseregcodeitem", "name": "Can delete course reg code item", "content_type": 129}, "model": "auth.permission", "pk": 391}, {"fields": {"codename": "add_courseregcodeitemannotation", "name": "Can add course reg code item annotation", "content_type": 130}, "model": "auth.permission", "pk": 392}, {"fields": {"codename": "change_courseregcodeitemannotation", "name": "Can change course reg code item annotation", "content_type": 130}, "model": "auth.permission", "pk": 393}, {"fields": {"codename": "delete_courseregcodeitemannotation", "name": "Can delete course reg code item annotation", "content_type": 130}, "model": "auth.permission", "pk": 394}, {"fields": {"codename": "add_paidcourseregistrationannotation", "name": "Can add paid course registration annotation", "content_type": 131}, "model": "auth.permission", "pk": 395}, {"fields": {"codename": "change_paidcourseregistrationannotation", "name": "Can change paid course registration annotation", "content_type": 131}, "model": "auth.permission", "pk": 396}, {"fields": {"codename": "delete_paidcourseregistrationannotation", "name": "Can delete paid course registration annotation", "content_type": 131}, "model": "auth.permission", "pk": 397}, {"fields": {"codename": "add_certificateitem", "name": "Can add certificate item", "content_type": 132}, "model": "auth.permission", "pk": 398}, {"fields": {"codename": "change_certificateitem", "name": "Can change certificate item", "content_type": 132}, "model": "auth.permission", "pk": 399}, {"fields": {"codename": "delete_certificateitem", "name": "Can delete certificate item", "content_type": 132}, "model": "auth.permission", "pk": 400}, {"fields": {"codename": "add_donationconfiguration", "name": "Can add donation configuration", "content_type": 133}, "model": "auth.permission", "pk": 401}, {"fields": {"codename": "change_donationconfiguration", "name": "Can change donation configuration", "content_type": 133}, "model": "auth.permission", "pk": 402}, {"fields": {"codename": "delete_donationconfiguration", "name": "Can delete donation configuration", "content_type": 133}, "model": "auth.permission", "pk": 403}, {"fields": {"codename": "add_donation", "name": "Can add donation", "content_type": 134}, "model": "auth.permission", "pk": 404}, {"fields": {"codename": "change_donation", "name": "Can change donation", "content_type": 134}, "model": "auth.permission", "pk": 405}, {"fields": {"codename": "delete_donation", "name": "Can delete donation", "content_type": 134}, "model": "auth.permission", "pk": 406}, {"fields": {"codename": "add_coursemode", "name": "Can add course mode", "content_type": 135}, "model": "auth.permission", "pk": 407}, {"fields": {"codename": "change_coursemode", "name": "Can change course mode", "content_type": 135}, "model": "auth.permission", "pk": 408}, {"fields": {"codename": "delete_coursemode", "name": "Can delete course mode", "content_type": 135}, "model": "auth.permission", "pk": 409}, {"fields": {"codename": "add_coursemodesarchive", "name": "Can add course modes archive", "content_type": 136}, "model": "auth.permission", "pk": 410}, {"fields": {"codename": "change_coursemodesarchive", "name": "Can change course modes archive", "content_type": 136}, "model": "auth.permission", "pk": 411}, {"fields": {"codename": "delete_coursemodesarchive", "name": "Can delete course modes archive", "content_type": 136}, "model": "auth.permission", "pk": 412}, {"fields": {"codename": "add_coursemodeexpirationconfig", "name": "Can add course mode expiration config", "content_type": 137}, "model": "auth.permission", "pk": 413}, {"fields": {"codename": "change_coursemodeexpirationconfig", "name": "Can change course mode expiration config", "content_type": 137}, "model": "auth.permission", "pk": 414}, {"fields": {"codename": "delete_coursemodeexpirationconfig", "name": "Can delete course mode expiration config", "content_type": 137}, "model": "auth.permission", "pk": 415}, {"fields": {"codename": "add_softwaresecurephotoverification", "name": "Can add software secure photo verification", "content_type": 138}, "model": "auth.permission", "pk": 416}, {"fields": {"codename": "change_softwaresecurephotoverification", "name": "Can change software secure photo verification", "content_type": 138}, "model": "auth.permission", "pk": 417}, {"fields": {"codename": "delete_softwaresecurephotoverification", "name": "Can delete software secure photo verification", "content_type": 138}, "model": "auth.permission", "pk": 418}, {"fields": {"codename": "add_historicalverificationdeadline", "name": "Can add historical verification deadline", "content_type": 139}, "model": "auth.permission", "pk": 419}, {"fields": {"codename": "change_historicalverificationdeadline", "name": "Can change historical verification deadline", "content_type": 139}, "model": "auth.permission", "pk": 420}, {"fields": {"codename": "delete_historicalverificationdeadline", "name": "Can delete historical verification deadline", "content_type": 139}, "model": "auth.permission", "pk": 421}, {"fields": {"codename": "add_verificationdeadline", "name": "Can add verification deadline", "content_type": 140}, "model": "auth.permission", "pk": 422}, {"fields": {"codename": "change_verificationdeadline", "name": "Can change verification deadline", "content_type": 140}, "model": "auth.permission", "pk": 423}, {"fields": {"codename": "delete_verificationdeadline", "name": "Can delete verification deadline", "content_type": 140}, "model": "auth.permission", "pk": 424}, {"fields": {"codename": "add_verificationcheckpoint", "name": "Can add verification checkpoint", "content_type": 141}, "model": "auth.permission", "pk": 425}, {"fields": {"codename": "change_verificationcheckpoint", "name": "Can change verification checkpoint", "content_type": 141}, "model": "auth.permission", "pk": 426}, {"fields": {"codename": "delete_verificationcheckpoint", "name": "Can delete verification checkpoint", "content_type": 141}, "model": "auth.permission", "pk": 427}, {"fields": {"codename": "add_verificationstatus", "name": "Can add Verification Status", "content_type": 142}, "model": "auth.permission", "pk": 428}, {"fields": {"codename": "change_verificationstatus", "name": "Can change Verification Status", "content_type": 142}, "model": "auth.permission", "pk": 429}, {"fields": {"codename": "delete_verificationstatus", "name": "Can delete Verification Status", "content_type": 142}, "model": "auth.permission", "pk": 430}, {"fields": {"codename": "add_incoursereverificationconfiguration", "name": "Can add in course reverification configuration", "content_type": 143}, "model": "auth.permission", "pk": 431}, {"fields": {"codename": "change_incoursereverificationconfiguration", "name": "Can change in course reverification configuration", "content_type": 143}, "model": "auth.permission", "pk": 432}, {"fields": {"codename": "delete_incoursereverificationconfiguration", "name": "Can delete in course reverification configuration", "content_type": 143}, "model": "auth.permission", "pk": 433}, {"fields": {"codename": "add_icrvstatusemailsconfiguration", "name": "Can add icrv status emails configuration", "content_type": 144}, "model": "auth.permission", "pk": 434}, {"fields": {"codename": "change_icrvstatusemailsconfiguration", "name": "Can change icrv status emails configuration", "content_type": 144}, "model": "auth.permission", "pk": 435}, {"fields": {"codename": "delete_icrvstatusemailsconfiguration", "name": "Can delete icrv status emails configuration", "content_type": 144}, "model": "auth.permission", "pk": 436}, {"fields": {"codename": "add_skippedreverification", "name": "Can add skipped reverification", "content_type": 145}, "model": "auth.permission", "pk": 437}, {"fields": {"codename": "change_skippedreverification", "name": "Can change skipped reverification", "content_type": 145}, "model": "auth.permission", "pk": 438}, {"fields": {"codename": "delete_skippedreverification", "name": "Can delete skipped reverification", "content_type": 145}, "model": "auth.permission", "pk": 439}, {"fields": {"codename": "add_darklangconfig", "name": "Can add dark lang config", "content_type": 146}, "model": "auth.permission", "pk": 440}, {"fields": {"codename": "change_darklangconfig", "name": "Can change dark lang config", "content_type": 146}, "model": "auth.permission", "pk": 441}, {"fields": {"codename": "delete_darklangconfig", "name": "Can delete dark lang config", "content_type": 146}, "model": "auth.permission", "pk": 442}, {"fields": {"codename": "add_embargoedcourse", "name": "Can add embargoed course", "content_type": 147}, "model": "auth.permission", "pk": 443}, {"fields": {"codename": "change_embargoedcourse", "name": "Can change embargoed course", "content_type": 147}, "model": "auth.permission", "pk": 444}, {"fields": {"codename": "delete_embargoedcourse", "name": "Can delete embargoed course", "content_type": 147}, "model": "auth.permission", "pk": 445}, {"fields": {"codename": "add_embargoedstate", "name": "Can add embargoed state", "content_type": 148}, "model": "auth.permission", "pk": 446}, {"fields": {"codename": "change_embargoedstate", "name": "Can change embargoed state", "content_type": 148}, "model": "auth.permission", "pk": 447}, {"fields": {"codename": "delete_embargoedstate", "name": "Can delete embargoed state", "content_type": 148}, "model": "auth.permission", "pk": 448}, {"fields": {"codename": "add_restrictedcourse", "name": "Can add restricted course", "content_type": 149}, "model": "auth.permission", "pk": 449}, {"fields": {"codename": "change_restrictedcourse", "name": "Can change restricted course", "content_type": 149}, "model": "auth.permission", "pk": 450}, {"fields": {"codename": "delete_restrictedcourse", "name": "Can delete restricted course", "content_type": 149}, "model": "auth.permission", "pk": 451}, {"fields": {"codename": "add_country", "name": "Can add country", "content_type": 150}, "model": "auth.permission", "pk": 452}, {"fields": {"codename": "change_country", "name": "Can change country", "content_type": 150}, "model": "auth.permission", "pk": 453}, {"fields": {"codename": "delete_country", "name": "Can delete country", "content_type": 150}, "model": "auth.permission", "pk": 454}, {"fields": {"codename": "add_countryaccessrule", "name": "Can add country access rule", "content_type": 151}, "model": "auth.permission", "pk": 455}, {"fields": {"codename": "change_countryaccessrule", "name": "Can change country access rule", "content_type": 151}, "model": "auth.permission", "pk": 456}, {"fields": {"codename": "delete_countryaccessrule", "name": "Can delete country access rule", "content_type": 151}, "model": "auth.permission", "pk": 457}, {"fields": {"codename": "add_courseaccessrulehistory", "name": "Can add course access rule history", "content_type": 152}, "model": "auth.permission", "pk": 458}, {"fields": {"codename": "change_courseaccessrulehistory", "name": "Can change course access rule history", "content_type": 152}, "model": "auth.permission", "pk": 459}, {"fields": {"codename": "delete_courseaccessrulehistory", "name": "Can delete course access rule history", "content_type": 152}, "model": "auth.permission", "pk": 460}, {"fields": {"codename": "add_ipfilter", "name": "Can add ip filter", "content_type": 153}, "model": "auth.permission", "pk": 461}, {"fields": {"codename": "change_ipfilter", "name": "Can change ip filter", "content_type": 153}, "model": "auth.permission", "pk": 462}, {"fields": {"codename": "delete_ipfilter", "name": "Can delete ip filter", "content_type": 153}, "model": "auth.permission", "pk": 463}, {"fields": {"codename": "add_coursererunstate", "name": "Can add course rerun state", "content_type": 154}, "model": "auth.permission", "pk": 464}, {"fields": {"codename": "change_coursererunstate", "name": "Can change course rerun state", "content_type": 154}, "model": "auth.permission", "pk": 465}, {"fields": {"codename": "delete_coursererunstate", "name": "Can delete course rerun state", "content_type": 154}, "model": "auth.permission", "pk": 466}, {"fields": {"codename": "add_mobileapiconfig", "name": "Can add mobile api config", "content_type": 155}, "model": "auth.permission", "pk": 467}, {"fields": {"codename": "change_mobileapiconfig", "name": "Can change mobile api config", "content_type": 155}, "model": "auth.permission", "pk": 468}, {"fields": {"codename": "delete_mobileapiconfig", "name": "Can delete mobile api config", "content_type": 155}, "model": "auth.permission", "pk": 469}, {"fields": {"codename": "add_usersocialauth", "name": "Can add user social auth", "content_type": 156}, "model": "auth.permission", "pk": 470}, {"fields": {"codename": "change_usersocialauth", "name": "Can change user social auth", "content_type": 156}, "model": "auth.permission", "pk": 471}, {"fields": {"codename": "delete_usersocialauth", "name": "Can delete user social auth", "content_type": 156}, "model": "auth.permission", "pk": 472}, {"fields": {"codename": "add_nonce", "name": "Can add nonce", "content_type": 157}, "model": "auth.permission", "pk": 473}, {"fields": {"codename": "change_nonce", "name": "Can change nonce", "content_type": 157}, "model": "auth.permission", "pk": 474}, {"fields": {"codename": "delete_nonce", "name": "Can delete nonce", "content_type": 157}, "model": "auth.permission", "pk": 475}, {"fields": {"codename": "add_association", "name": "Can add association", "content_type": 158}, "model": "auth.permission", "pk": 476}, {"fields": {"codename": "change_association", "name": "Can change association", "content_type": 158}, "model": "auth.permission", "pk": 477}, {"fields": {"codename": "delete_association", "name": "Can delete association", "content_type": 158}, "model": "auth.permission", "pk": 478}, {"fields": {"codename": "add_code", "name": "Can add code", "content_type": 159}, "model": "auth.permission", "pk": 479}, {"fields": {"codename": "change_code", "name": "Can change code", "content_type": 159}, "model": "auth.permission", "pk": 480}, {"fields": {"codename": "delete_code", "name": "Can delete code", "content_type": 159}, "model": "auth.permission", "pk": 481}, {"fields": {"codename": "add_surveyform", "name": "Can add survey form", "content_type": 160}, "model": "auth.permission", "pk": 482}, {"fields": {"codename": "change_surveyform", "name": "Can change survey form", "content_type": 160}, "model": "auth.permission", "pk": 483}, {"fields": {"codename": "delete_surveyform", "name": "Can delete survey form", "content_type": 160}, "model": "auth.permission", "pk": 484}, {"fields": {"codename": "add_surveyanswer", "name": "Can add survey answer", "content_type": 161}, "model": "auth.permission", "pk": 485}, {"fields": {"codename": "change_surveyanswer", "name": "Can change survey answer", "content_type": 161}, "model": "auth.permission", "pk": 486}, {"fields": {"codename": "delete_surveyanswer", "name": "Can delete survey answer", "content_type": 161}, "model": "auth.permission", "pk": 487}, {"fields": {"codename": "add_xblockasidesconfig", "name": "Can add x block asides config", "content_type": 162}, "model": "auth.permission", "pk": 488}, {"fields": {"codename": "change_xblockasidesconfig", "name": "Can change x block asides config", "content_type": 162}, "model": "auth.permission", "pk": 489}, {"fields": {"codename": "delete_xblockasidesconfig", "name": "Can delete x block asides config", "content_type": 162}, "model": "auth.permission", "pk": 490}, {"fields": {"codename": "add_courseoverview", "name": "Can add course overview", "content_type": 163}, "model": "auth.permission", "pk": 491}, {"fields": {"codename": "change_courseoverview", "name": "Can change course overview", "content_type": 163}, "model": "auth.permission", "pk": 492}, {"fields": {"codename": "delete_courseoverview", "name": "Can delete course overview", "content_type": 163}, "model": "auth.permission", "pk": 493}, {"fields": {"codename": "add_courseoverviewtab", "name": "Can add course overview tab", "content_type": 164}, "model": "auth.permission", "pk": 494}, {"fields": {"codename": "change_courseoverviewtab", "name": "Can change course overview tab", "content_type": 164}, "model": "auth.permission", "pk": 495}, {"fields": {"codename": "delete_courseoverviewtab", "name": "Can delete course overview tab", "content_type": 164}, "model": "auth.permission", "pk": 496}, {"fields": {"codename": "add_courseoverviewimageset", "name": "Can add course overview image set", "content_type": 165}, "model": "auth.permission", "pk": 497}, {"fields": {"codename": "change_courseoverviewimageset", "name": "Can change course overview image set", "content_type": 165}, "model": "auth.permission", "pk": 498}, {"fields": {"codename": "delete_courseoverviewimageset", "name": "Can delete course overview image set", "content_type": 165}, "model": "auth.permission", "pk": 499}, {"fields": {"codename": "add_courseoverviewimageconfig", "name": "Can add course overview image config", "content_type": 166}, "model": "auth.permission", "pk": 500}, {"fields": {"codename": "change_courseoverviewimageconfig", "name": "Can change course overview image config", "content_type": 166}, "model": "auth.permission", "pk": 501}, {"fields": {"codename": "delete_courseoverviewimageconfig", "name": "Can delete course overview image config", "content_type": 166}, "model": "auth.permission", "pk": 502}, {"fields": {"codename": "add_coursestructure", "name": "Can add course structure", "content_type": 167}, "model": "auth.permission", "pk": 503}, {"fields": {"codename": "change_coursestructure", "name": "Can change course structure", "content_type": 167}, "model": "auth.permission", "pk": 504}, {"fields": {"codename": "delete_coursestructure", "name": "Can delete course structure", "content_type": 167}, "model": "auth.permission", "pk": 505}, {"fields": {"codename": "add_corsmodel", "name": "Can add cors model", "content_type": 168}, "model": "auth.permission", "pk": 506}, {"fields": {"codename": "change_corsmodel", "name": "Can change cors model", "content_type": 168}, "model": "auth.permission", "pk": 507}, {"fields": {"codename": "delete_corsmodel", "name": "Can delete cors model", "content_type": 168}, "model": "auth.permission", "pk": 508}, {"fields": {"codename": "add_xdomainproxyconfiguration", "name": "Can add x domain proxy configuration", "content_type": 169}, "model": "auth.permission", "pk": 509}, {"fields": {"codename": "change_xdomainproxyconfiguration", "name": "Can change x domain proxy configuration", "content_type": 169}, "model": "auth.permission", "pk": 510}, {"fields": {"codename": "delete_xdomainproxyconfiguration", "name": "Can delete x domain proxy configuration", "content_type": 169}, "model": "auth.permission", "pk": 511}, {"fields": {"codename": "add_creditprovider", "name": "Can add credit provider", "content_type": 170}, "model": "auth.permission", "pk": 512}, {"fields": {"codename": "change_creditprovider", "name": "Can change credit provider", "content_type": 170}, "model": "auth.permission", "pk": 513}, {"fields": {"codename": "delete_creditprovider", "name": "Can delete credit provider", "content_type": 170}, "model": "auth.permission", "pk": 514}, {"fields": {"codename": "add_creditcourse", "name": "Can add credit course", "content_type": 171}, "model": "auth.permission", "pk": 515}, {"fields": {"codename": "change_creditcourse", "name": "Can change credit course", "content_type": 171}, "model": "auth.permission", "pk": 516}, {"fields": {"codename": "delete_creditcourse", "name": "Can delete credit course", "content_type": 171}, "model": "auth.permission", "pk": 517}, {"fields": {"codename": "add_creditrequirement", "name": "Can add credit requirement", "content_type": 172}, "model": "auth.permission", "pk": 518}, {"fields": {"codename": "change_creditrequirement", "name": "Can change credit requirement", "content_type": 172}, "model": "auth.permission", "pk": 519}, {"fields": {"codename": "delete_creditrequirement", "name": "Can delete credit requirement", "content_type": 172}, "model": "auth.permission", "pk": 520}, {"fields": {"codename": "add_historicalcreditrequirementstatus", "name": "Can add historical credit requirement status", "content_type": 173}, "model": "auth.permission", "pk": 521}, {"fields": {"codename": "change_historicalcreditrequirementstatus", "name": "Can change historical credit requirement status", "content_type": 173}, "model": "auth.permission", "pk": 522}, {"fields": {"codename": "delete_historicalcreditrequirementstatus", "name": "Can delete historical credit requirement status", "content_type": 173}, "model": "auth.permission", "pk": 523}, {"fields": {"codename": "add_creditrequirementstatus", "name": "Can add credit requirement status", "content_type": 174}, "model": "auth.permission", "pk": 524}, {"fields": {"codename": "change_creditrequirementstatus", "name": "Can change credit requirement status", "content_type": 174}, "model": "auth.permission", "pk": 525}, {"fields": {"codename": "delete_creditrequirementstatus", "name": "Can delete credit requirement status", "content_type": 174}, "model": "auth.permission", "pk": 526}, {"fields": {"codename": "add_crediteligibility", "name": "Can add credit eligibility", "content_type": 175}, "model": "auth.permission", "pk": 527}, {"fields": {"codename": "change_crediteligibility", "name": "Can change credit eligibility", "content_type": 175}, "model": "auth.permission", "pk": 528}, {"fields": {"codename": "delete_crediteligibility", "name": "Can delete credit eligibility", "content_type": 175}, "model": "auth.permission", "pk": 529}, {"fields": {"codename": "add_historicalcreditrequest", "name": "Can add historical credit request", "content_type": 176}, "model": "auth.permission", "pk": 530}, {"fields": {"codename": "change_historicalcreditrequest", "name": "Can change historical credit request", "content_type": 176}, "model": "auth.permission", "pk": 531}, {"fields": {"codename": "delete_historicalcreditrequest", "name": "Can delete historical credit request", "content_type": 176}, "model": "auth.permission", "pk": 532}, {"fields": {"codename": "add_creditrequest", "name": "Can add credit request", "content_type": 177}, "model": "auth.permission", "pk": 533}, {"fields": {"codename": "change_creditrequest", "name": "Can change credit request", "content_type": 177}, "model": "auth.permission", "pk": 534}, {"fields": {"codename": "delete_creditrequest", "name": "Can delete credit request", "content_type": 177}, "model": "auth.permission", "pk": 535}, {"fields": {"codename": "add_courseteam", "name": "Can add course team", "content_type": 178}, "model": "auth.permission", "pk": 536}, {"fields": {"codename": "change_courseteam", "name": "Can change course team", "content_type": 178}, "model": "auth.permission", "pk": 537}, {"fields": {"codename": "delete_courseteam", "name": "Can delete course team", "content_type": 178}, "model": "auth.permission", "pk": 538}, {"fields": {"codename": "add_courseteammembership", "name": "Can add course team membership", "content_type": 179}, "model": "auth.permission", "pk": 539}, {"fields": {"codename": "change_courseteammembership", "name": "Can change course team membership", "content_type": 179}, "model": "auth.permission", "pk": 540}, {"fields": {"codename": "delete_courseteammembership", "name": "Can delete course team membership", "content_type": 179}, "model": "auth.permission", "pk": 541}, {"fields": {"codename": "add_xblockdisableconfig", "name": "Can add x block disable config", "content_type": 180}, "model": "auth.permission", "pk": 542}, {"fields": {"codename": "change_xblockdisableconfig", "name": "Can change x block disable config", "content_type": 180}, "model": "auth.permission", "pk": 543}, {"fields": {"codename": "delete_xblockdisableconfig", "name": "Can delete x block disable config", "content_type": 180}, "model": "auth.permission", "pk": 544}, {"fields": {"codename": "add_bookmark", "name": "Can add bookmark", "content_type": 181}, "model": "auth.permission", "pk": 545}, {"fields": {"codename": "change_bookmark", "name": "Can change bookmark", "content_type": 181}, "model": "auth.permission", "pk": 546}, {"fields": {"codename": "delete_bookmark", "name": "Can delete bookmark", "content_type": 181}, "model": "auth.permission", "pk": 547}, {"fields": {"codename": "add_xblockcache", "name": "Can add x block cache", "content_type": 182}, "model": "auth.permission", "pk": 548}, {"fields": {"codename": "change_xblockcache", "name": "Can change x block cache", "content_type": 182}, "model": "auth.permission", "pk": 549}, {"fields": {"codename": "delete_xblockcache", "name": "Can delete x block cache", "content_type": 182}, "model": "auth.permission", "pk": 550}, {"fields": {"codename": "add_programsapiconfig", "name": "Can add programs api config", "content_type": 183}, "model": "auth.permission", "pk": 551}, {"fields": {"codename": "change_programsapiconfig", "name": "Can change programs api config", "content_type": 183}, "model": "auth.permission", "pk": 552}, {"fields": {"codename": "delete_programsapiconfig", "name": "Can delete programs api config", "content_type": 183}, "model": "auth.permission", "pk": 553}, {"fields": {"codename": "add_selfpacedconfiguration", "name": "Can add self paced configuration", "content_type": 184}, "model": "auth.permission", "pk": 554}, {"fields": {"codename": "change_selfpacedconfiguration", "name": "Can change self paced configuration", "content_type": 184}, "model": "auth.permission", "pk": 555}, {"fields": {"codename": "delete_selfpacedconfiguration", "name": "Can delete self paced configuration", "content_type": 184}, "model": "auth.permission", "pk": 556}, {"fields": {"codename": "add_kvstore", "name": "Can add kv store", "content_type": 185}, "model": "auth.permission", "pk": 557}, {"fields": {"codename": "change_kvstore", "name": "Can change kv store", "content_type": 185}, "model": "auth.permission", "pk": 558}, {"fields": {"codename": "delete_kvstore", "name": "Can delete kv store", "content_type": 185}, "model": "auth.permission", "pk": 559}, {"fields": {"codename": "add_studentitem", "name": "Can add student item", "content_type": 186}, "model": "auth.permission", "pk": 560}, {"fields": {"codename": "change_studentitem", "name": "Can change student item", "content_type": 186}, "model": "auth.permission", "pk": 561}, {"fields": {"codename": "delete_studentitem", "name": "Can delete student item", "content_type": 186}, "model": "auth.permission", "pk": 562}, {"fields": {"codename": "add_submission", "name": "Can add submission", "content_type": 187}, "model": "auth.permission", "pk": 563}, {"fields": {"codename": "change_submission", "name": "Can change submission", "content_type": 187}, "model": "auth.permission", "pk": 564}, {"fields": {"codename": "delete_submission", "name": "Can delete submission", "content_type": 187}, "model": "auth.permission", "pk": 565}, {"fields": {"codename": "add_score", "name": "Can add score", "content_type": 188}, "model": "auth.permission", "pk": 566}, {"fields": {"codename": "change_score", "name": "Can change score", "content_type": 188}, "model": "auth.permission", "pk": 567}, {"fields": {"codename": "delete_score", "name": "Can delete score", "content_type": 188}, "model": "auth.permission", "pk": 568}, {"fields": {"codename": "add_scoresummary", "name": "Can add score summary", "content_type": 189}, "model": "auth.permission", "pk": 569}, {"fields": {"codename": "change_scoresummary", "name": "Can change score summary", "content_type": 189}, "model": "auth.permission", "pk": 570}, {"fields": {"codename": "delete_scoresummary", "name": "Can delete score summary", "content_type": 189}, "model": "auth.permission", "pk": 571}, {"fields": {"codename": "add_scoreannotation", "name": "Can add score annotation", "content_type": 190}, "model": "auth.permission", "pk": 572}, {"fields": {"codename": "change_scoreannotation", "name": "Can change score annotation", "content_type": 190}, "model": "auth.permission", "pk": 573}, {"fields": {"codename": "delete_scoreannotation", "name": "Can delete score annotation", "content_type": 190}, "model": "auth.permission", "pk": 574}, {"fields": {"codename": "add_rubric", "name": "Can add rubric", "content_type": 191}, "model": "auth.permission", "pk": 575}, {"fields": {"codename": "change_rubric", "name": "Can change rubric", "content_type": 191}, "model": "auth.permission", "pk": 576}, {"fields": {"codename": "delete_rubric", "name": "Can delete rubric", "content_type": 191}, "model": "auth.permission", "pk": 577}, {"fields": {"codename": "add_criterion", "name": "Can add criterion", "content_type": 192}, "model": "auth.permission", "pk": 578}, {"fields": {"codename": "change_criterion", "name": "Can change criterion", "content_type": 192}, "model": "auth.permission", "pk": 579}, {"fields": {"codename": "delete_criterion", "name": "Can delete criterion", "content_type": 192}, "model": "auth.permission", "pk": 580}, {"fields": {"codename": "add_criterionoption", "name": "Can add criterion option", "content_type": 193}, "model": "auth.permission", "pk": 581}, {"fields": {"codename": "change_criterionoption", "name": "Can change criterion option", "content_type": 193}, "model": "auth.permission", "pk": 582}, {"fields": {"codename": "delete_criterionoption", "name": "Can delete criterion option", "content_type": 193}, "model": "auth.permission", "pk": 583}, {"fields": {"codename": "add_assessment", "name": "Can add assessment", "content_type": 194}, "model": "auth.permission", "pk": 584}, {"fields": {"codename": "change_assessment", "name": "Can change assessment", "content_type": 194}, "model": "auth.permission", "pk": 585}, {"fields": {"codename": "delete_assessment", "name": "Can delete assessment", "content_type": 194}, "model": "auth.permission", "pk": 586}, {"fields": {"codename": "add_assessmentpart", "name": "Can add assessment part", "content_type": 195}, "model": "auth.permission", "pk": 587}, {"fields": {"codename": "change_assessmentpart", "name": "Can change assessment part", "content_type": 195}, "model": "auth.permission", "pk": 588}, {"fields": {"codename": "delete_assessmentpart", "name": "Can delete assessment part", "content_type": 195}, "model": "auth.permission", "pk": 589}, {"fields": {"codename": "add_assessmentfeedbackoption", "name": "Can add assessment feedback option", "content_type": 196}, "model": "auth.permission", "pk": 590}, {"fields": {"codename": "change_assessmentfeedbackoption", "name": "Can change assessment feedback option", "content_type": 196}, "model": "auth.permission", "pk": 591}, {"fields": {"codename": "delete_assessmentfeedbackoption", "name": "Can delete assessment feedback option", "content_type": 196}, "model": "auth.permission", "pk": 592}, {"fields": {"codename": "add_assessmentfeedback", "name": "Can add assessment feedback", "content_type": 197}, "model": "auth.permission", "pk": 593}, {"fields": {"codename": "change_assessmentfeedback", "name": "Can change assessment feedback", "content_type": 197}, "model": "auth.permission", "pk": 594}, {"fields": {"codename": "delete_assessmentfeedback", "name": "Can delete assessment feedback", "content_type": 197}, "model": "auth.permission", "pk": 595}, {"fields": {"codename": "add_peerworkflow", "name": "Can add peer workflow", "content_type": 198}, "model": "auth.permission", "pk": 596}, {"fields": {"codename": "change_peerworkflow", "name": "Can change peer workflow", "content_type": 198}, "model": "auth.permission", "pk": 597}, {"fields": {"codename": "delete_peerworkflow", "name": "Can delete peer workflow", "content_type": 198}, "model": "auth.permission", "pk": 598}, {"fields": {"codename": "add_peerworkflowitem", "name": "Can add peer workflow item", "content_type": 199}, "model": "auth.permission", "pk": 599}, {"fields": {"codename": "change_peerworkflowitem", "name": "Can change peer workflow item", "content_type": 199}, "model": "auth.permission", "pk": 600}, {"fields": {"codename": "delete_peerworkflowitem", "name": "Can delete peer workflow item", "content_type": 199}, "model": "auth.permission", "pk": 601}, {"fields": {"codename": "add_trainingexample", "name": "Can add training example", "content_type": 200}, "model": "auth.permission", "pk": 602}, {"fields": {"codename": "change_trainingexample", "name": "Can change training example", "content_type": 200}, "model": "auth.permission", "pk": 603}, {"fields": {"codename": "delete_trainingexample", "name": "Can delete training example", "content_type": 200}, "model": "auth.permission", "pk": 604}, {"fields": {"codename": "add_studenttrainingworkflow", "name": "Can add student training workflow", "content_type": 201}, "model": "auth.permission", "pk": 605}, {"fields": {"codename": "change_studenttrainingworkflow", "name": "Can change student training workflow", "content_type": 201}, "model": "auth.permission", "pk": 606}, {"fields": {"codename": "delete_studenttrainingworkflow", "name": "Can delete student training workflow", "content_type": 201}, "model": "auth.permission", "pk": 607}, {"fields": {"codename": "add_studenttrainingworkflowitem", "name": "Can add student training workflow item", "content_type": 202}, "model": "auth.permission", "pk": 608}, {"fields": {"codename": "change_studenttrainingworkflowitem", "name": "Can change student training workflow item", "content_type": 202}, "model": "auth.permission", "pk": 609}, {"fields": {"codename": "delete_studenttrainingworkflowitem", "name": "Can delete student training workflow item", "content_type": 202}, "model": "auth.permission", "pk": 610}, {"fields": {"codename": "add_aiclassifierset", "name": "Can add ai classifier set", "content_type": 203}, "model": "auth.permission", "pk": 611}, {"fields": {"codename": "change_aiclassifierset", "name": "Can change ai classifier set", "content_type": 203}, "model": "auth.permission", "pk": 612}, {"fields": {"codename": "delete_aiclassifierset", "name": "Can delete ai classifier set", "content_type": 203}, "model": "auth.permission", "pk": 613}, {"fields": {"codename": "add_aiclassifier", "name": "Can add ai classifier", "content_type": 204}, "model": "auth.permission", "pk": 614}, {"fields": {"codename": "change_aiclassifier", "name": "Can change ai classifier", "content_type": 204}, "model": "auth.permission", "pk": 615}, {"fields": {"codename": "delete_aiclassifier", "name": "Can delete ai classifier", "content_type": 204}, "model": "auth.permission", "pk": 616}, {"fields": {"codename": "add_aitrainingworkflow", "name": "Can add ai training workflow", "content_type": 205}, "model": "auth.permission", "pk": 617}, {"fields": {"codename": "change_aitrainingworkflow", "name": "Can change ai training workflow", "content_type": 205}, "model": "auth.permission", "pk": 618}, {"fields": {"codename": "delete_aitrainingworkflow", "name": "Can delete ai training workflow", "content_type": 205}, "model": "auth.permission", "pk": 619}, {"fields": {"codename": "add_aigradingworkflow", "name": "Can add ai grading workflow", "content_type": 206}, "model": "auth.permission", "pk": 620}, {"fields": {"codename": "change_aigradingworkflow", "name": "Can change ai grading workflow", "content_type": 206}, "model": "auth.permission", "pk": 621}, {"fields": {"codename": "delete_aigradingworkflow", "name": "Can delete ai grading workflow", "content_type": 206}, "model": "auth.permission", "pk": 622}, {"fields": {"codename": "add_assessmentworkflow", "name": "Can add assessment workflow", "content_type": 207}, "model": "auth.permission", "pk": 623}, {"fields": {"codename": "change_assessmentworkflow", "name": "Can change assessment workflow", "content_type": 207}, "model": "auth.permission", "pk": 624}, {"fields": {"codename": "delete_assessmentworkflow", "name": "Can delete assessment workflow", "content_type": 207}, "model": "auth.permission", "pk": 625}, {"fields": {"codename": "add_assessmentworkflowstep", "name": "Can add assessment workflow step", "content_type": 208}, "model": "auth.permission", "pk": 626}, {"fields": {"codename": "change_assessmentworkflowstep", "name": "Can change assessment workflow step", "content_type": 208}, "model": "auth.permission", "pk": 627}, {"fields": {"codename": "delete_assessmentworkflowstep", "name": "Can delete assessment workflow step", "content_type": 208}, "model": "auth.permission", "pk": 628}, {"fields": {"codename": "add_assessmentworkflowcancellation", "name": "Can add assessment workflow cancellation", "content_type": 209}, "model": "auth.permission", "pk": 629}, {"fields": {"codename": "change_assessmentworkflowcancellation", "name": "Can change assessment workflow cancellation", "content_type": 209}, "model": "auth.permission", "pk": 630}, {"fields": {"codename": "delete_assessmentworkflowcancellation", "name": "Can delete assessment workflow cancellation", "content_type": 209}, "model": "auth.permission", "pk": 631}, {"fields": {"codename": "add_profile", "name": "Can add profile", "content_type": 210}, "model": "auth.permission", "pk": 632}, {"fields": {"codename": "change_profile", "name": "Can change profile", "content_type": 210}, "model": "auth.permission", "pk": 633}, {"fields": {"codename": "delete_profile", "name": "Can delete profile", "content_type": 210}, "model": "auth.permission", "pk": 634}, {"fields": {"codename": "add_video", "name": "Can add video", "content_type": 211}, "model": "auth.permission", "pk": 635}, {"fields": {"codename": "change_video", "name": "Can change video", "content_type": 211}, "model": "auth.permission", "pk": 636}, {"fields": {"codename": "delete_video", "name": "Can delete video", "content_type": 211}, "model": "auth.permission", "pk": 637}, {"fields": {"codename": "add_coursevideo", "name": "Can add course video", "content_type": 212}, "model": "auth.permission", "pk": 638}, {"fields": {"codename": "change_coursevideo", "name": "Can change course video", "content_type": 212}, "model": "auth.permission", "pk": 639}, {"fields": {"codename": "delete_coursevideo", "name": "Can delete course video", "content_type": 212}, "model": "auth.permission", "pk": 640}, {"fields": {"codename": "add_encodedvideo", "name": "Can add encoded video", "content_type": 213}, "model": "auth.permission", "pk": 641}, {"fields": {"codename": "change_encodedvideo", "name": "Can change encoded video", "content_type": 213}, "model": "auth.permission", "pk": 642}, {"fields": {"codename": "delete_encodedvideo", "name": "Can delete encoded video", "content_type": 213}, "model": "auth.permission", "pk": 643}, {"fields": {"codename": "add_subtitle", "name": "Can add subtitle", "content_type": 214}, "model": "auth.permission", "pk": 644}, {"fields": {"codename": "change_subtitle", "name": "Can change subtitle", "content_type": 214}, "model": "auth.permission", "pk": 645}, {"fields": {"codename": "delete_subtitle", "name": "Can delete subtitle", "content_type": 214}, "model": "auth.permission", "pk": 646}, {"fields": {"codename": "add_milestone", "name": "Can add milestone", "content_type": 215}, "model": "auth.permission", "pk": 647}, {"fields": {"codename": "change_milestone", "name": "Can change milestone", "content_type": 215}, "model": "auth.permission", "pk": 648}, {"fields": {"codename": "delete_milestone", "name": "Can delete milestone", "content_type": 215}, "model": "auth.permission", "pk": 649}, {"fields": {"codename": "add_milestonerelationshiptype", "name": "Can add milestone relationship type", "content_type": 216}, "model": "auth.permission", "pk": 650}, {"fields": {"codename": "change_milestonerelationshiptype", "name": "Can change milestone relationship type", "content_type": 216}, "model": "auth.permission", "pk": 651}, {"fields": {"codename": "delete_milestonerelationshiptype", "name": "Can delete milestone relationship type", "content_type": 216}, "model": "auth.permission", "pk": 652}, {"fields": {"codename": "add_coursemilestone", "name": "Can add course milestone", "content_type": 217}, "model": "auth.permission", "pk": 653}, {"fields": {"codename": "change_coursemilestone", "name": "Can change course milestone", "content_type": 217}, "model": "auth.permission", "pk": 654}, {"fields": {"codename": "delete_coursemilestone", "name": "Can delete course milestone", "content_type": 217}, "model": "auth.permission", "pk": 655}, {"fields": {"codename": "add_coursecontentmilestone", "name": "Can add course content milestone", "content_type": 218}, "model": "auth.permission", "pk": 656}, {"fields": {"codename": "change_coursecontentmilestone", "name": "Can change course content milestone", "content_type": 218}, "model": "auth.permission", "pk": 657}, {"fields": {"codename": "delete_coursecontentmilestone", "name": "Can delete course content milestone", "content_type": 218}, "model": "auth.permission", "pk": 658}, {"fields": {"codename": "add_usermilestone", "name": "Can add user milestone", "content_type": 219}, "model": "auth.permission", "pk": 659}, {"fields": {"codename": "change_usermilestone", "name": "Can change user milestone", "content_type": 219}, "model": "auth.permission", "pk": 660}, {"fields": {"codename": "delete_usermilestone", "name": "Can delete user milestone", "content_type": 219}, "model": "auth.permission", "pk": 661}, {"fields": {"codename": "add_proctoredexam", "name": "Can add proctored exam", "content_type": 220}, "model": "auth.permission", "pk": 662}, {"fields": {"codename": "change_proctoredexam", "name": "Can change proctored exam", "content_type": 220}, "model": "auth.permission", "pk": 663}, {"fields": {"codename": "delete_proctoredexam", "name": "Can delete proctored exam", "content_type": 220}, "model": "auth.permission", "pk": 664}, {"fields": {"codename": "add_proctoredexamreviewpolicy", "name": "Can add Proctored exam review policy", "content_type": 221}, "model": "auth.permission", "pk": 665}, {"fields": {"codename": "change_proctoredexamreviewpolicy", "name": "Can change Proctored exam review policy", "content_type": 221}, "model": "auth.permission", "pk": 666}, {"fields": {"codename": "delete_proctoredexamreviewpolicy", "name": "Can delete Proctored exam review policy", "content_type": 221}, "model": "auth.permission", "pk": 667}, {"fields": {"codename": "add_proctoredexamreviewpolicyhistory", "name": "Can add proctored exam review policy history", "content_type": 222}, "model": "auth.permission", "pk": 668}, {"fields": {"codename": "change_proctoredexamreviewpolicyhistory", "name": "Can change proctored exam review policy history", "content_type": 222}, "model": "auth.permission", "pk": 669}, {"fields": {"codename": "delete_proctoredexamreviewpolicyhistory", "name": "Can delete proctored exam review policy history", "content_type": 222}, "model": "auth.permission", "pk": 670}, {"fields": {"codename": "add_proctoredexamstudentattempt", "name": "Can add proctored exam attempt", "content_type": 223}, "model": "auth.permission", "pk": 671}, {"fields": {"codename": "change_proctoredexamstudentattempt", "name": "Can change proctored exam attempt", "content_type": 223}, "model": "auth.permission", "pk": 672}, {"fields": {"codename": "delete_proctoredexamstudentattempt", "name": "Can delete proctored exam attempt", "content_type": 223}, "model": "auth.permission", "pk": 673}, {"fields": {"codename": "add_proctoredexamstudentattempthistory", "name": "Can add proctored exam attempt history", "content_type": 224}, "model": "auth.permission", "pk": 674}, {"fields": {"codename": "change_proctoredexamstudentattempthistory", "name": "Can change proctored exam attempt history", "content_type": 224}, "model": "auth.permission", "pk": 675}, {"fields": {"codename": "delete_proctoredexamstudentattempthistory", "name": "Can delete proctored exam attempt history", "content_type": 224}, "model": "auth.permission", "pk": 676}, {"fields": {"codename": "add_proctoredexamstudentallowance", "name": "Can add proctored allowance", "content_type": 225}, "model": "auth.permission", "pk": 677}, {"fields": {"codename": "change_proctoredexamstudentallowance", "name": "Can change proctored allowance", "content_type": 225}, "model": "auth.permission", "pk": 678}, {"fields": {"codename": "delete_proctoredexamstudentallowance", "name": "Can delete proctored allowance", "content_type": 225}, "model": "auth.permission", "pk": 679}, {"fields": {"codename": "add_proctoredexamstudentallowancehistory", "name": "Can add proctored allowance history", "content_type": 226}, "model": "auth.permission", "pk": 680}, {"fields": {"codename": "change_proctoredexamstudentallowancehistory", "name": "Can change proctored allowance history", "content_type": 226}, "model": "auth.permission", "pk": 681}, {"fields": {"codename": "delete_proctoredexamstudentallowancehistory", "name": "Can delete proctored allowance history", "content_type": 226}, "model": "auth.permission", "pk": 682}, {"fields": {"codename": "add_proctoredexamsoftwaresecurereview", "name": "Can add Proctored exam software secure review", "content_type": 227}, "model": "auth.permission", "pk": 683}, {"fields": {"codename": "change_proctoredexamsoftwaresecurereview", "name": "Can change Proctored exam software secure review", "content_type": 227}, "model": "auth.permission", "pk": 684}, {"fields": {"codename": "delete_proctoredexamsoftwaresecurereview", "name": "Can delete Proctored exam software secure review", "content_type": 227}, "model": "auth.permission", "pk": 685}, {"fields": {"codename": "add_proctoredexamsoftwaresecurereviewhistory", "name": "Can add Proctored exam review archive", "content_type": 228}, "model": "auth.permission", "pk": 686}, {"fields": {"codename": "change_proctoredexamsoftwaresecurereviewhistory", "name": "Can change Proctored exam review archive", "content_type": 228}, "model": "auth.permission", "pk": 687}, {"fields": {"codename": "delete_proctoredexamsoftwaresecurereviewhistory", "name": "Can delete Proctored exam review archive", "content_type": 228}, "model": "auth.permission", "pk": 688}, {"fields": {"codename": "add_proctoredexamsoftwaresecurecomment", "name": "Can add proctored exam software secure comment", "content_type": 229}, "model": "auth.permission", "pk": 689}, {"fields": {"codename": "change_proctoredexamsoftwaresecurecomment", "name": "Can change proctored exam software secure comment", "content_type": 229}, "model": "auth.permission", "pk": 690}, {"fields": {"codename": "delete_proctoredexamsoftwaresecurecomment", "name": "Can delete proctored exam software secure comment", "content_type": 229}, "model": "auth.permission", "pk": 691}, {"fields": {"codename": "add_organization", "name": "Can add organization", "content_type": 230}, "model": "auth.permission", "pk": 692}, {"fields": {"codename": "change_organization", "name": "Can change organization", "content_type": 230}, "model": "auth.permission", "pk": 693}, {"fields": {"codename": "delete_organization", "name": "Can delete organization", "content_type": 230}, "model": "auth.permission", "pk": 694}, {"fields": {"codename": "add_organizationcourse", "name": "Can add Link Course", "content_type": 231}, "model": "auth.permission", "pk": 695}, {"fields": {"codename": "change_organizationcourse", "name": "Can change Link Course", "content_type": 231}, "model": "auth.permission", "pk": 696}, {"fields": {"codename": "delete_organizationcourse", "name": "Can delete Link Course", "content_type": 231}, "model": "auth.permission", "pk": 697}, {"fields": {"codename": "add_videouploadconfig", "name": "Can add video upload config", "content_type": 232}, "model": "auth.permission", "pk": 698}, {"fields": {"codename": "change_videouploadconfig", "name": "Can change video upload config", "content_type": 232}, "model": "auth.permission", "pk": 699}, {"fields": {"codename": "delete_videouploadconfig", "name": "Can delete video upload config", "content_type": 232}, "model": "auth.permission", "pk": 700}, {"fields": {"codename": "add_pushnotificationconfig", "name": "Can add push notification config", "content_type": 233}, "model": "auth.permission", "pk": 701}, {"fields": {"codename": "change_pushnotificationconfig", "name": "Can change push notification config", "content_type": 233}, "model": "auth.permission", "pk": 702}, {"fields": {"codename": "delete_pushnotificationconfig", "name": "Can delete push notification config", "content_type": 233}, "model": "auth.permission", "pk": 703}, {"fields": {"codename": "add_coursecreator", "name": "Can add course creator", "content_type": 234}, "model": "auth.permission", "pk": 704}, {"fields": {"codename": "change_coursecreator", "name": "Can change course creator", "content_type": 234}, "model": "auth.permission", "pk": 705}, {"fields": {"codename": "delete_coursecreator", "name": "Can delete course creator", "content_type": 234}, "model": "auth.permission", "pk": 706}, {"fields": {"codename": "add_studioconfig", "name": "Can add studio config", "content_type": 235}, "model": "auth.permission", "pk": 707}, {"fields": {"codename": "change_studioconfig", "name": "Can change studio config", "content_type": 235}, "model": "auth.permission", "pk": 708}, {"fields": {"codename": "delete_studioconfig", "name": "Can delete studio config", "content_type": 235}, "model": "auth.permission", "pk": 709}, {"fields": {"username": "ecommerce_worker", "first_name": "", "last_name": "", "is_active": true, "is_superuser": false, "is_staff": false, "last_login": null, "groups": [], "user_permissions": [], "password": "!iNc5kc8X000KOGPuU54kf9CLZNrAQDQkYEcVHY8y", "email": "ecommerce_worker@fake.email", "date_joined": "2015-12-31T14:56:11.738Z"}, "model": "auth.user", "pk": 1}, {"fields": {"change_date": "2015-12-31T14:57:36.727Z", "changed_by": null, "enabled": true}, "model": "util.ratelimitconfiguration", "pk": 1}, {"fields": {"change_date": "2015-12-31T14:56:11.235Z", "changed_by": null, "configuration": "{\"default\": {\"accomplishment_class_append\": \"accomplishment-certificate\", \"platform_name\": \"Your Platform Name Here\", \"logo_src\": \"/static/certificates/images/logo.png\", \"logo_url\": \"http://www.example.com\", \"company_verified_certificate_url\": \"http://www.example.com/verified-certificate\", \"company_privacy_url\": \"http://www.example.com/privacy-policy\", \"company_tos_url\": \"http://www.example.com/terms-service\", \"company_about_url\": \"http://www.example.com/about-us\"}, \"verified\": {\"certificate_type\": \"Verified\", \"certificate_title\": \"Verified Certificate of Achievement\"}, \"honor\": {\"certificate_type\": \"Honor Code\", \"certificate_title\": \"Certificate of Achievement\"}}", "enabled": false}, "model": "certificates.certificatehtmlviewconfiguration", "pk": 1}, {"fields": {"change_date": "2015-12-31T14:56:20.712Z", "changed_by": null, "enabled": true, "released_languages": ""}, "model": "dark_lang.darklangconfig", "pk": 1}] \ No newline at end of file +[{"fields": {"model": "permission", "app_label": "auth"}, "model": "contenttypes.contenttype", "pk": 1}, {"fields": {"model": "group", "app_label": "auth"}, "model": "contenttypes.contenttype", "pk": 2}, {"fields": {"model": "user", "app_label": "auth"}, "model": "contenttypes.contenttype", "pk": 3}, {"fields": {"model": "contenttype", "app_label": "contenttypes"}, "model": "contenttypes.contenttype", "pk": 4}, {"fields": {"model": "session", "app_label": "sessions"}, "model": "contenttypes.contenttype", "pk": 5}, {"fields": {"model": "site", "app_label": "sites"}, "model": "contenttypes.contenttype", "pk": 6}, {"fields": {"model": "taskmeta", "app_label": "djcelery"}, "model": "contenttypes.contenttype", "pk": 7}, {"fields": {"model": "tasksetmeta", "app_label": "djcelery"}, "model": "contenttypes.contenttype", "pk": 8}, {"fields": {"model": "intervalschedule", "app_label": "djcelery"}, "model": "contenttypes.contenttype", "pk": 9}, {"fields": {"model": "crontabschedule", "app_label": "djcelery"}, "model": "contenttypes.contenttype", "pk": 10}, {"fields": {"model": "periodictasks", "app_label": "djcelery"}, "model": "contenttypes.contenttype", "pk": 11}, {"fields": {"model": "periodictask", "app_label": "djcelery"}, "model": "contenttypes.contenttype", "pk": 12}, {"fields": {"model": "workerstate", "app_label": "djcelery"}, "model": "contenttypes.contenttype", "pk": 13}, {"fields": {"model": "taskstate", "app_label": "djcelery"}, "model": "contenttypes.contenttype", "pk": 14}, {"fields": {"model": "globalstatusmessage", "app_label": "status"}, "model": "contenttypes.contenttype", "pk": 15}, {"fields": {"model": "coursemessage", "app_label": "status"}, "model": "contenttypes.contenttype", "pk": 16}, {"fields": {"model": "assetbaseurlconfig", "app_label": "static_replace"}, "model": "contenttypes.contenttype", "pk": 17}, {"fields": {"model": "studentmodule", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 18}, {"fields": {"model": "studentmodulehistory", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 19}, {"fields": {"model": "xmoduleuserstatesummaryfield", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 20}, {"fields": {"model": "xmodulestudentprefsfield", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 21}, {"fields": {"model": "xmodulestudentinfofield", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 22}, {"fields": {"model": "offlinecomputedgrade", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 23}, {"fields": {"model": "offlinecomputedgradelog", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 24}, {"fields": {"model": "studentfieldoverride", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 25}, {"fields": {"model": "anonymoususerid", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 26}, {"fields": {"model": "userstanding", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 27}, {"fields": {"model": "userprofile", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 28}, {"fields": {"model": "usersignupsource", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 29}, {"fields": {"model": "usertestgroup", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 30}, {"fields": {"model": "registration", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 31}, {"fields": {"model": "pendingnamechange", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 32}, {"fields": {"model": "pendingemailchange", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 33}, {"fields": {"model": "passwordhistory", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 34}, {"fields": {"model": "loginfailures", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 35}, {"fields": {"model": "historicalcourseenrollment", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 36}, {"fields": {"model": "courseenrollment", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 37}, {"fields": {"model": "manualenrollmentaudit", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 38}, {"fields": {"model": "courseenrollmentallowed", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 39}, {"fields": {"model": "courseaccessrole", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 40}, {"fields": {"model": "dashboardconfiguration", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 41}, {"fields": {"model": "linkedinaddtoprofileconfiguration", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 42}, {"fields": {"model": "entranceexamconfiguration", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 43}, {"fields": {"model": "languageproficiency", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 44}, {"fields": {"model": "courseenrollmentattribute", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 45}, {"fields": {"model": "enrollmentrefundconfiguration", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 46}, {"fields": {"model": "trackinglog", "app_label": "track"}, "model": "contenttypes.contenttype", "pk": 47}, {"fields": {"model": "ratelimitconfiguration", "app_label": "util"}, "model": "contenttypes.contenttype", "pk": 48}, {"fields": {"model": "certificatewhitelist", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 49}, {"fields": {"model": "generatedcertificate", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 50}, {"fields": {"model": "certificategenerationhistory", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 51}, {"fields": {"model": "certificateinvalidation", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 52}, {"fields": {"model": "examplecertificateset", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 53}, {"fields": {"model": "examplecertificate", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 54}, {"fields": {"model": "certificategenerationcoursesetting", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 55}, {"fields": {"model": "certificategenerationconfiguration", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 56}, {"fields": {"model": "certificatehtmlviewconfiguration", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 57}, {"fields": {"model": "badgeassertion", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 58}, {"fields": {"model": "badgeimageconfiguration", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 59}, {"fields": {"model": "certificatetemplate", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 60}, {"fields": {"model": "certificatetemplateasset", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 61}, {"fields": {"model": "instructortask", "app_label": "instructor_task"}, "model": "contenttypes.contenttype", "pk": 62}, {"fields": {"model": "courseusergroup", "app_label": "course_groups"}, "model": "contenttypes.contenttype", "pk": 63}, {"fields": {"model": "cohortmembership", "app_label": "course_groups"}, "model": "contenttypes.contenttype", "pk": 64}, {"fields": {"model": "courseusergrouppartitiongroup", "app_label": "course_groups"}, "model": "contenttypes.contenttype", "pk": 65}, {"fields": {"model": "coursecohortssettings", "app_label": "course_groups"}, "model": "contenttypes.contenttype", "pk": 66}, {"fields": {"model": "coursecohort", "app_label": "course_groups"}, "model": "contenttypes.contenttype", "pk": 67}, {"fields": {"model": "courseemail", "app_label": "bulk_email"}, "model": "contenttypes.contenttype", "pk": 68}, {"fields": {"model": "optout", "app_label": "bulk_email"}, "model": "contenttypes.contenttype", "pk": 69}, {"fields": {"model": "courseemailtemplate", "app_label": "bulk_email"}, "model": "contenttypes.contenttype", "pk": 70}, {"fields": {"model": "courseauthorization", "app_label": "bulk_email"}, "model": "contenttypes.contenttype", "pk": 71}, {"fields": {"model": "brandinginfoconfig", "app_label": "branding"}, "model": "contenttypes.contenttype", "pk": 72}, {"fields": {"model": "brandingapiconfig", "app_label": "branding"}, "model": "contenttypes.contenttype", "pk": 73}, {"fields": {"model": "externalauthmap", "app_label": "external_auth"}, "model": "contenttypes.contenttype", "pk": 74}, {"fields": {"model": "nonce", "app_label": "django_openid_auth"}, "model": "contenttypes.contenttype", "pk": 75}, {"fields": {"model": "association", "app_label": "django_openid_auth"}, "model": "contenttypes.contenttype", "pk": 76}, {"fields": {"model": "useropenid", "app_label": "django_openid_auth"}, "model": "contenttypes.contenttype", "pk": 77}, {"fields": {"model": "client", "app_label": "oauth2"}, "model": "contenttypes.contenttype", "pk": 78}, {"fields": {"model": "grant", "app_label": "oauth2"}, "model": "contenttypes.contenttype", "pk": 79}, {"fields": {"model": "accesstoken", "app_label": "oauth2"}, "model": "contenttypes.contenttype", "pk": 80}, {"fields": {"model": "refreshtoken", "app_label": "oauth2"}, "model": "contenttypes.contenttype", "pk": 81}, {"fields": {"model": "trustedclient", "app_label": "oauth2_provider"}, "model": "contenttypes.contenttype", "pk": 82}, {"fields": {"model": "oauth2providerconfig", "app_label": "third_party_auth"}, "model": "contenttypes.contenttype", "pk": 83}, {"fields": {"model": "samlproviderconfig", "app_label": "third_party_auth"}, "model": "contenttypes.contenttype", "pk": 84}, {"fields": {"model": "samlconfiguration", "app_label": "third_party_auth"}, "model": "contenttypes.contenttype", "pk": 85}, {"fields": {"model": "samlproviderdata", "app_label": "third_party_auth"}, "model": "contenttypes.contenttype", "pk": 86}, {"fields": {"model": "ltiproviderconfig", "app_label": "third_party_auth"}, "model": "contenttypes.contenttype", "pk": 87}, {"fields": {"model": "providerapipermissions", "app_label": "third_party_auth"}, "model": "contenttypes.contenttype", "pk": 88}, {"fields": {"model": "nonce", "app_label": "oauth_provider"}, "model": "contenttypes.contenttype", "pk": 89}, {"fields": {"model": "scope", "app_label": "oauth_provider"}, "model": "contenttypes.contenttype", "pk": 90}, {"fields": {"model": "consumer", "app_label": "oauth_provider"}, "model": "contenttypes.contenttype", "pk": 91}, {"fields": {"model": "token", "app_label": "oauth_provider"}, "model": "contenttypes.contenttype", "pk": 92}, {"fields": {"model": "resource", "app_label": "oauth_provider"}, "model": "contenttypes.contenttype", "pk": 93}, {"fields": {"model": "article", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 94}, {"fields": {"model": "articleforobject", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 95}, {"fields": {"model": "articlerevision", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 96}, {"fields": {"model": "urlpath", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 97}, {"fields": {"model": "notificationtype", "app_label": "django_notify"}, "model": "contenttypes.contenttype", "pk": 98}, {"fields": {"model": "settings", "app_label": "django_notify"}, "model": "contenttypes.contenttype", "pk": 99}, {"fields": {"model": "subscription", "app_label": "django_notify"}, "model": "contenttypes.contenttype", "pk": 100}, {"fields": {"model": "notification", "app_label": "django_notify"}, "model": "contenttypes.contenttype", "pk": 101}, {"fields": {"model": "logentry", "app_label": "admin"}, "model": "contenttypes.contenttype", "pk": 102}, {"fields": {"model": "role", "app_label": "django_comment_common"}, "model": "contenttypes.contenttype", "pk": 103}, {"fields": {"model": "permission", "app_label": "django_comment_common"}, "model": "contenttypes.contenttype", "pk": 104}, {"fields": {"model": "note", "app_label": "notes"}, "model": "contenttypes.contenttype", "pk": 105}, {"fields": {"model": "splashconfig", "app_label": "splash"}, "model": "contenttypes.contenttype", "pk": 106}, {"fields": {"model": "userpreference", "app_label": "user_api"}, "model": "contenttypes.contenttype", "pk": 107}, {"fields": {"model": "usercoursetag", "app_label": "user_api"}, "model": "contenttypes.contenttype", "pk": 108}, {"fields": {"model": "userorgtag", "app_label": "user_api"}, "model": "contenttypes.contenttype", "pk": 109}, {"fields": {"model": "order", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 110}, {"fields": {"model": "orderitem", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 111}, {"fields": {"model": "invoice", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 112}, {"fields": {"model": "invoicetransaction", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 113}, {"fields": {"model": "invoiceitem", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 114}, {"fields": {"model": "courseregistrationcodeinvoiceitem", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 115}, {"fields": {"model": "invoicehistory", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 116}, {"fields": {"model": "courseregistrationcode", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 117}, {"fields": {"model": "registrationcoderedemption", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 118}, {"fields": {"model": "coupon", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 119}, {"fields": {"model": "couponredemption", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 120}, {"fields": {"model": "paidcourseregistration", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 121}, {"fields": {"model": "courseregcodeitem", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 122}, {"fields": {"model": "courseregcodeitemannotation", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 123}, {"fields": {"model": "paidcourseregistrationannotation", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 124}, {"fields": {"model": "certificateitem", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 125}, {"fields": {"model": "donationconfiguration", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 126}, {"fields": {"model": "donation", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 127}, {"fields": {"model": "coursemode", "app_label": "course_modes"}, "model": "contenttypes.contenttype", "pk": 128}, {"fields": {"model": "coursemodesarchive", "app_label": "course_modes"}, "model": "contenttypes.contenttype", "pk": 129}, {"fields": {"model": "coursemodeexpirationconfig", "app_label": "course_modes"}, "model": "contenttypes.contenttype", "pk": 130}, {"fields": {"model": "softwaresecurephotoverification", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 131}, {"fields": {"model": "historicalverificationdeadline", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 132}, {"fields": {"model": "verificationdeadline", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 133}, {"fields": {"model": "verificationcheckpoint", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 134}, {"fields": {"model": "verificationstatus", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 135}, {"fields": {"model": "incoursereverificationconfiguration", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 136}, {"fields": {"model": "icrvstatusemailsconfiguration", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 137}, {"fields": {"model": "skippedreverification", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 138}, {"fields": {"model": "darklangconfig", "app_label": "dark_lang"}, "model": "contenttypes.contenttype", "pk": 139}, {"fields": {"model": "embargoedcourse", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 140}, {"fields": {"model": "embargoedstate", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 141}, {"fields": {"model": "restrictedcourse", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 142}, {"fields": {"model": "country", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 143}, {"fields": {"model": "countryaccessrule", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 144}, {"fields": {"model": "courseaccessrulehistory", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 145}, {"fields": {"model": "ipfilter", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 146}, {"fields": {"model": "coursererunstate", "app_label": "course_action_state"}, "model": "contenttypes.contenttype", "pk": 147}, {"fields": {"model": "mobileapiconfig", "app_label": "mobile_api"}, "model": "contenttypes.contenttype", "pk": 148}, {"fields": {"model": "usersocialauth", "app_label": "default"}, "model": "contenttypes.contenttype", "pk": 149}, {"fields": {"model": "nonce", "app_label": "default"}, "model": "contenttypes.contenttype", "pk": 150}, {"fields": {"model": "association", "app_label": "default"}, "model": "contenttypes.contenttype", "pk": 151}, {"fields": {"model": "code", "app_label": "default"}, "model": "contenttypes.contenttype", "pk": 152}, {"fields": {"model": "surveyform", "app_label": "survey"}, "model": "contenttypes.contenttype", "pk": 153}, {"fields": {"model": "surveyanswer", "app_label": "survey"}, "model": "contenttypes.contenttype", "pk": 154}, {"fields": {"model": "xblockasidesconfig", "app_label": "lms_xblock"}, "model": "contenttypes.contenttype", "pk": 155}, {"fields": {"model": "courseoverview", "app_label": "course_overviews"}, "model": "contenttypes.contenttype", "pk": 156}, {"fields": {"model": "courseoverviewtab", "app_label": "course_overviews"}, "model": "contenttypes.contenttype", "pk": 157}, {"fields": {"model": "courseoverviewimageset", "app_label": "course_overviews"}, "model": "contenttypes.contenttype", "pk": 158}, {"fields": {"model": "courseoverviewimageconfig", "app_label": "course_overviews"}, "model": "contenttypes.contenttype", "pk": 159}, {"fields": {"model": "coursestructure", "app_label": "course_structures"}, "model": "contenttypes.contenttype", "pk": 160}, {"fields": {"model": "corsmodel", "app_label": "corsheaders"}, "model": "contenttypes.contenttype", "pk": 161}, {"fields": {"model": "xdomainproxyconfiguration", "app_label": "cors_csrf"}, "model": "contenttypes.contenttype", "pk": 162}, {"fields": {"model": "creditprovider", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 163}, {"fields": {"model": "creditcourse", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 164}, {"fields": {"model": "creditrequirement", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 165}, {"fields": {"model": "historicalcreditrequirementstatus", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 166}, {"fields": {"model": "creditrequirementstatus", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 167}, {"fields": {"model": "crediteligibility", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 168}, {"fields": {"model": "historicalcreditrequest", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 169}, {"fields": {"model": "creditrequest", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 170}, {"fields": {"model": "courseteam", "app_label": "teams"}, "model": "contenttypes.contenttype", "pk": 171}, {"fields": {"model": "courseteammembership", "app_label": "teams"}, "model": "contenttypes.contenttype", "pk": 172}, {"fields": {"model": "xblockdisableconfig", "app_label": "xblock_django"}, "model": "contenttypes.contenttype", "pk": 173}, {"fields": {"model": "bookmark", "app_label": "bookmarks"}, "model": "contenttypes.contenttype", "pk": 174}, {"fields": {"model": "xblockcache", "app_label": "bookmarks"}, "model": "contenttypes.contenttype", "pk": 175}, {"fields": {"model": "programsapiconfig", "app_label": "programs"}, "model": "contenttypes.contenttype", "pk": 176}, {"fields": {"model": "selfpacedconfiguration", "app_label": "self_paced"}, "model": "contenttypes.contenttype", "pk": 177}, {"fields": {"model": "kvstore", "app_label": "thumbnail"}, "model": "contenttypes.contenttype", "pk": 178}, {"fields": {"model": "studentitem", "app_label": "submissions"}, "model": "contenttypes.contenttype", "pk": 179}, {"fields": {"model": "submission", "app_label": "submissions"}, "model": "contenttypes.contenttype", "pk": 180}, {"fields": {"model": "score", "app_label": "submissions"}, "model": "contenttypes.contenttype", "pk": 181}, {"fields": {"model": "scoresummary", "app_label": "submissions"}, "model": "contenttypes.contenttype", "pk": 182}, {"fields": {"model": "scoreannotation", "app_label": "submissions"}, "model": "contenttypes.contenttype", "pk": 183}, {"fields": {"model": "rubric", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 184}, {"fields": {"model": "criterion", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 185}, {"fields": {"model": "criterionoption", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 186}, {"fields": {"model": "assessment", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 187}, {"fields": {"model": "assessmentpart", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 188}, {"fields": {"model": "assessmentfeedbackoption", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 189}, {"fields": {"model": "assessmentfeedback", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 190}, {"fields": {"model": "peerworkflow", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 191}, {"fields": {"model": "peerworkflowitem", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 192}, {"fields": {"model": "trainingexample", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 193}, {"fields": {"model": "studenttrainingworkflow", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 194}, {"fields": {"model": "studenttrainingworkflowitem", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 195}, {"fields": {"model": "aiclassifierset", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 196}, {"fields": {"model": "aiclassifier", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 197}, {"fields": {"model": "aitrainingworkflow", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 198}, {"fields": {"model": "aigradingworkflow", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 199}, {"fields": {"model": "assessmentworkflow", "app_label": "workflow"}, "model": "contenttypes.contenttype", "pk": 200}, {"fields": {"model": "assessmentworkflowstep", "app_label": "workflow"}, "model": "contenttypes.contenttype", "pk": 201}, {"fields": {"model": "assessmentworkflowcancellation", "app_label": "workflow"}, "model": "contenttypes.contenttype", "pk": 202}, {"fields": {"model": "profile", "app_label": "edxval"}, "model": "contenttypes.contenttype", "pk": 203}, {"fields": {"model": "video", "app_label": "edxval"}, "model": "contenttypes.contenttype", "pk": 204}, {"fields": {"model": "coursevideo", "app_label": "edxval"}, "model": "contenttypes.contenttype", "pk": 205}, {"fields": {"model": "encodedvideo", "app_label": "edxval"}, "model": "contenttypes.contenttype", "pk": 206}, {"fields": {"model": "subtitle", "app_label": "edxval"}, "model": "contenttypes.contenttype", "pk": 207}, {"fields": {"model": "milestone", "app_label": "milestones"}, "model": "contenttypes.contenttype", "pk": 208}, {"fields": {"model": "milestonerelationshiptype", "app_label": "milestones"}, "model": "contenttypes.contenttype", "pk": 209}, {"fields": {"model": "coursemilestone", "app_label": "milestones"}, "model": "contenttypes.contenttype", "pk": 210}, {"fields": {"model": "coursecontentmilestone", "app_label": "milestones"}, "model": "contenttypes.contenttype", "pk": 211}, {"fields": {"model": "usermilestone", "app_label": "milestones"}, "model": "contenttypes.contenttype", "pk": 212}, {"fields": {"model": "proctoredexam", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 213}, {"fields": {"model": "proctoredexamreviewpolicy", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 214}, {"fields": {"model": "proctoredexamreviewpolicyhistory", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 215}, {"fields": {"model": "proctoredexamstudentattempt", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 216}, {"fields": {"model": "proctoredexamstudentattempthistory", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 217}, {"fields": {"model": "proctoredexamstudentallowance", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 218}, {"fields": {"model": "proctoredexamstudentallowancehistory", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 219}, {"fields": {"model": "proctoredexamsoftwaresecurereview", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 220}, {"fields": {"model": "proctoredexamsoftwaresecurereviewhistory", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 221}, {"fields": {"model": "proctoredexamsoftwaresecurecomment", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 222}, {"fields": {"model": "organization", "app_label": "organizations"}, "model": "contenttypes.contenttype", "pk": 223}, {"fields": {"model": "organizationcourse", "app_label": "organizations"}, "model": "contenttypes.contenttype", "pk": 224}, {"fields": {"model": "articleplugin", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 225}, {"fields": {"model": "reusableplugin", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 226}, {"fields": {"model": "simpleplugin", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 227}, {"fields": {"model": "revisionplugin", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 228}, {"fields": {"model": "revisionpluginrevision", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 229}, {"fields": {"model": "image", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 230}, {"fields": {"model": "imagerevision", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 231}, {"fields": {"model": "attachment", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 232}, {"fields": {"model": "attachmentrevision", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 233}, {"fields": {"model": "videouploadconfig", "app_label": "contentstore"}, "model": "contenttypes.contenttype", "pk": 234}, {"fields": {"model": "pushnotificationconfig", "app_label": "contentstore"}, "model": "contenttypes.contenttype", "pk": 235}, {"fields": {"model": "coursecreator", "app_label": "course_creators"}, "model": "contenttypes.contenttype", "pk": 236}, {"fields": {"model": "studioconfig", "app_label": "xblock_config"}, "model": "contenttypes.contenttype", "pk": 237}, {"fields": {"domain": "example.com", "name": "example.com"}, "model": "sites.site", "pk": 1}, {"fields": {"codename": "add_permission", "name": "Can add permission", "content_type": 1}, "model": "auth.permission", "pk": 1}, {"fields": {"codename": "change_permission", "name": "Can change permission", "content_type": 1}, "model": "auth.permission", "pk": 2}, {"fields": {"codename": "delete_permission", "name": "Can delete permission", "content_type": 1}, "model": "auth.permission", "pk": 3}, {"fields": {"codename": "add_group", "name": "Can add group", "content_type": 2}, "model": "auth.permission", "pk": 4}, {"fields": {"codename": "change_group", "name": "Can change group", "content_type": 2}, "model": "auth.permission", "pk": 5}, {"fields": {"codename": "delete_group", "name": "Can delete group", "content_type": 2}, "model": "auth.permission", "pk": 6}, {"fields": {"codename": "add_user", "name": "Can add user", "content_type": 3}, "model": "auth.permission", "pk": 7}, {"fields": {"codename": "change_user", "name": "Can change user", "content_type": 3}, "model": "auth.permission", "pk": 8}, {"fields": {"codename": "delete_user", "name": "Can delete user", "content_type": 3}, "model": "auth.permission", "pk": 9}, {"fields": {"codename": "add_contenttype", "name": "Can add content type", "content_type": 4}, "model": "auth.permission", "pk": 10}, {"fields": {"codename": "change_contenttype", "name": "Can change content type", "content_type": 4}, "model": "auth.permission", "pk": 11}, {"fields": {"codename": "delete_contenttype", "name": "Can delete content type", "content_type": 4}, "model": "auth.permission", "pk": 12}, {"fields": {"codename": "add_session", "name": "Can add session", "content_type": 5}, "model": "auth.permission", "pk": 13}, {"fields": {"codename": "change_session", "name": "Can change session", "content_type": 5}, "model": "auth.permission", "pk": 14}, {"fields": {"codename": "delete_session", "name": "Can delete session", "content_type": 5}, "model": "auth.permission", "pk": 15}, {"fields": {"codename": "add_site", "name": "Can add site", "content_type": 6}, "model": "auth.permission", "pk": 16}, {"fields": {"codename": "change_site", "name": "Can change site", "content_type": 6}, "model": "auth.permission", "pk": 17}, {"fields": {"codename": "delete_site", "name": "Can delete site", "content_type": 6}, "model": "auth.permission", "pk": 18}, {"fields": {"codename": "add_taskmeta", "name": "Can add task state", "content_type": 7}, "model": "auth.permission", "pk": 19}, {"fields": {"codename": "change_taskmeta", "name": "Can change task state", "content_type": 7}, "model": "auth.permission", "pk": 20}, {"fields": {"codename": "delete_taskmeta", "name": "Can delete task state", "content_type": 7}, "model": "auth.permission", "pk": 21}, {"fields": {"codename": "add_tasksetmeta", "name": "Can add saved group result", "content_type": 8}, "model": "auth.permission", "pk": 22}, {"fields": {"codename": "change_tasksetmeta", "name": "Can change saved group result", "content_type": 8}, "model": "auth.permission", "pk": 23}, {"fields": {"codename": "delete_tasksetmeta", "name": "Can delete saved group result", "content_type": 8}, "model": "auth.permission", "pk": 24}, {"fields": {"codename": "add_intervalschedule", "name": "Can add interval", "content_type": 9}, "model": "auth.permission", "pk": 25}, {"fields": {"codename": "change_intervalschedule", "name": "Can change interval", "content_type": 9}, "model": "auth.permission", "pk": 26}, {"fields": {"codename": "delete_intervalschedule", "name": "Can delete interval", "content_type": 9}, "model": "auth.permission", "pk": 27}, {"fields": {"codename": "add_crontabschedule", "name": "Can add crontab", "content_type": 10}, "model": "auth.permission", "pk": 28}, {"fields": {"codename": "change_crontabschedule", "name": "Can change crontab", "content_type": 10}, "model": "auth.permission", "pk": 29}, {"fields": {"codename": "delete_crontabschedule", "name": "Can delete crontab", "content_type": 10}, "model": "auth.permission", "pk": 30}, {"fields": {"codename": "add_periodictasks", "name": "Can add periodic tasks", "content_type": 11}, "model": "auth.permission", "pk": 31}, {"fields": {"codename": "change_periodictasks", "name": "Can change periodic tasks", "content_type": 11}, "model": "auth.permission", "pk": 32}, {"fields": {"codename": "delete_periodictasks", "name": "Can delete periodic tasks", "content_type": 11}, "model": "auth.permission", "pk": 33}, {"fields": {"codename": "add_periodictask", "name": "Can add periodic task", "content_type": 12}, "model": "auth.permission", "pk": 34}, {"fields": {"codename": "change_periodictask", "name": "Can change periodic task", "content_type": 12}, "model": "auth.permission", "pk": 35}, {"fields": {"codename": "delete_periodictask", "name": "Can delete periodic task", "content_type": 12}, "model": "auth.permission", "pk": 36}, {"fields": {"codename": "add_workerstate", "name": "Can add worker", "content_type": 13}, "model": "auth.permission", "pk": 37}, {"fields": {"codename": "change_workerstate", "name": "Can change worker", "content_type": 13}, "model": "auth.permission", "pk": 38}, {"fields": {"codename": "delete_workerstate", "name": "Can delete worker", "content_type": 13}, "model": "auth.permission", "pk": 39}, {"fields": {"codename": "add_taskstate", "name": "Can add task", "content_type": 14}, "model": "auth.permission", "pk": 40}, {"fields": {"codename": "change_taskstate", "name": "Can change task", "content_type": 14}, "model": "auth.permission", "pk": 41}, {"fields": {"codename": "delete_taskstate", "name": "Can delete task", "content_type": 14}, "model": "auth.permission", "pk": 42}, {"fields": {"codename": "add_globalstatusmessage", "name": "Can add global status message", "content_type": 15}, "model": "auth.permission", "pk": 43}, {"fields": {"codename": "change_globalstatusmessage", "name": "Can change global status message", "content_type": 15}, "model": "auth.permission", "pk": 44}, {"fields": {"codename": "delete_globalstatusmessage", "name": "Can delete global status message", "content_type": 15}, "model": "auth.permission", "pk": 45}, {"fields": {"codename": "add_coursemessage", "name": "Can add course message", "content_type": 16}, "model": "auth.permission", "pk": 46}, {"fields": {"codename": "change_coursemessage", "name": "Can change course message", "content_type": 16}, "model": "auth.permission", "pk": 47}, {"fields": {"codename": "delete_coursemessage", "name": "Can delete course message", "content_type": 16}, "model": "auth.permission", "pk": 48}, {"fields": {"codename": "add_assetbaseurlconfig", "name": "Can add asset base url config", "content_type": 17}, "model": "auth.permission", "pk": 49}, {"fields": {"codename": "change_assetbaseurlconfig", "name": "Can change asset base url config", "content_type": 17}, "model": "auth.permission", "pk": 50}, {"fields": {"codename": "delete_assetbaseurlconfig", "name": "Can delete asset base url config", "content_type": 17}, "model": "auth.permission", "pk": 51}, {"fields": {"codename": "add_studentmodule", "name": "Can add student module", "content_type": 18}, "model": "auth.permission", "pk": 52}, {"fields": {"codename": "change_studentmodule", "name": "Can change student module", "content_type": 18}, "model": "auth.permission", "pk": 53}, {"fields": {"codename": "delete_studentmodule", "name": "Can delete student module", "content_type": 18}, "model": "auth.permission", "pk": 54}, {"fields": {"codename": "add_studentmodulehistory", "name": "Can add student module history", "content_type": 19}, "model": "auth.permission", "pk": 55}, {"fields": {"codename": "change_studentmodulehistory", "name": "Can change student module history", "content_type": 19}, "model": "auth.permission", "pk": 56}, {"fields": {"codename": "delete_studentmodulehistory", "name": "Can delete student module history", "content_type": 19}, "model": "auth.permission", "pk": 57}, {"fields": {"codename": "add_xmoduleuserstatesummaryfield", "name": "Can add x module user state summary field", "content_type": 20}, "model": "auth.permission", "pk": 58}, {"fields": {"codename": "change_xmoduleuserstatesummaryfield", "name": "Can change x module user state summary field", "content_type": 20}, "model": "auth.permission", "pk": 59}, {"fields": {"codename": "delete_xmoduleuserstatesummaryfield", "name": "Can delete x module user state summary field", "content_type": 20}, "model": "auth.permission", "pk": 60}, {"fields": {"codename": "add_xmodulestudentprefsfield", "name": "Can add x module student prefs field", "content_type": 21}, "model": "auth.permission", "pk": 61}, {"fields": {"codename": "change_xmodulestudentprefsfield", "name": "Can change x module student prefs field", "content_type": 21}, "model": "auth.permission", "pk": 62}, {"fields": {"codename": "delete_xmodulestudentprefsfield", "name": "Can delete x module student prefs field", "content_type": 21}, "model": "auth.permission", "pk": 63}, {"fields": {"codename": "add_xmodulestudentinfofield", "name": "Can add x module student info field", "content_type": 22}, "model": "auth.permission", "pk": 64}, {"fields": {"codename": "change_xmodulestudentinfofield", "name": "Can change x module student info field", "content_type": 22}, "model": "auth.permission", "pk": 65}, {"fields": {"codename": "delete_xmodulestudentinfofield", "name": "Can delete x module student info field", "content_type": 22}, "model": "auth.permission", "pk": 66}, {"fields": {"codename": "add_offlinecomputedgrade", "name": "Can add offline computed grade", "content_type": 23}, "model": "auth.permission", "pk": 67}, {"fields": {"codename": "change_offlinecomputedgrade", "name": "Can change offline computed grade", "content_type": 23}, "model": "auth.permission", "pk": 68}, {"fields": {"codename": "delete_offlinecomputedgrade", "name": "Can delete offline computed grade", "content_type": 23}, "model": "auth.permission", "pk": 69}, {"fields": {"codename": "add_offlinecomputedgradelog", "name": "Can add offline computed grade log", "content_type": 24}, "model": "auth.permission", "pk": 70}, {"fields": {"codename": "change_offlinecomputedgradelog", "name": "Can change offline computed grade log", "content_type": 24}, "model": "auth.permission", "pk": 71}, {"fields": {"codename": "delete_offlinecomputedgradelog", "name": "Can delete offline computed grade log", "content_type": 24}, "model": "auth.permission", "pk": 72}, {"fields": {"codename": "add_studentfieldoverride", "name": "Can add student field override", "content_type": 25}, "model": "auth.permission", "pk": 73}, {"fields": {"codename": "change_studentfieldoverride", "name": "Can change student field override", "content_type": 25}, "model": "auth.permission", "pk": 74}, {"fields": {"codename": "delete_studentfieldoverride", "name": "Can delete student field override", "content_type": 25}, "model": "auth.permission", "pk": 75}, {"fields": {"codename": "add_anonymoususerid", "name": "Can add anonymous user id", "content_type": 26}, "model": "auth.permission", "pk": 76}, {"fields": {"codename": "change_anonymoususerid", "name": "Can change anonymous user id", "content_type": 26}, "model": "auth.permission", "pk": 77}, {"fields": {"codename": "delete_anonymoususerid", "name": "Can delete anonymous user id", "content_type": 26}, "model": "auth.permission", "pk": 78}, {"fields": {"codename": "add_userstanding", "name": "Can add user standing", "content_type": 27}, "model": "auth.permission", "pk": 79}, {"fields": {"codename": "change_userstanding", "name": "Can change user standing", "content_type": 27}, "model": "auth.permission", "pk": 80}, {"fields": {"codename": "delete_userstanding", "name": "Can delete user standing", "content_type": 27}, "model": "auth.permission", "pk": 81}, {"fields": {"codename": "add_userprofile", "name": "Can add user profile", "content_type": 28}, "model": "auth.permission", "pk": 82}, {"fields": {"codename": "change_userprofile", "name": "Can change user profile", "content_type": 28}, "model": "auth.permission", "pk": 83}, {"fields": {"codename": "delete_userprofile", "name": "Can delete user profile", "content_type": 28}, "model": "auth.permission", "pk": 84}, {"fields": {"codename": "add_usersignupsource", "name": "Can add user signup source", "content_type": 29}, "model": "auth.permission", "pk": 85}, {"fields": {"codename": "change_usersignupsource", "name": "Can change user signup source", "content_type": 29}, "model": "auth.permission", "pk": 86}, {"fields": {"codename": "delete_usersignupsource", "name": "Can delete user signup source", "content_type": 29}, "model": "auth.permission", "pk": 87}, {"fields": {"codename": "add_usertestgroup", "name": "Can add user test group", "content_type": 30}, "model": "auth.permission", "pk": 88}, {"fields": {"codename": "change_usertestgroup", "name": "Can change user test group", "content_type": 30}, "model": "auth.permission", "pk": 89}, {"fields": {"codename": "delete_usertestgroup", "name": "Can delete user test group", "content_type": 30}, "model": "auth.permission", "pk": 90}, {"fields": {"codename": "add_registration", "name": "Can add registration", "content_type": 31}, "model": "auth.permission", "pk": 91}, {"fields": {"codename": "change_registration", "name": "Can change registration", "content_type": 31}, "model": "auth.permission", "pk": 92}, {"fields": {"codename": "delete_registration", "name": "Can delete registration", "content_type": 31}, "model": "auth.permission", "pk": 93}, {"fields": {"codename": "add_pendingnamechange", "name": "Can add pending name change", "content_type": 32}, "model": "auth.permission", "pk": 94}, {"fields": {"codename": "change_pendingnamechange", "name": "Can change pending name change", "content_type": 32}, "model": "auth.permission", "pk": 95}, {"fields": {"codename": "delete_pendingnamechange", "name": "Can delete pending name change", "content_type": 32}, "model": "auth.permission", "pk": 96}, {"fields": {"codename": "add_pendingemailchange", "name": "Can add pending email change", "content_type": 33}, "model": "auth.permission", "pk": 97}, {"fields": {"codename": "change_pendingemailchange", "name": "Can change pending email change", "content_type": 33}, "model": "auth.permission", "pk": 98}, {"fields": {"codename": "delete_pendingemailchange", "name": "Can delete pending email change", "content_type": 33}, "model": "auth.permission", "pk": 99}, {"fields": {"codename": "add_passwordhistory", "name": "Can add password history", "content_type": 34}, "model": "auth.permission", "pk": 100}, {"fields": {"codename": "change_passwordhistory", "name": "Can change password history", "content_type": 34}, "model": "auth.permission", "pk": 101}, {"fields": {"codename": "delete_passwordhistory", "name": "Can delete password history", "content_type": 34}, "model": "auth.permission", "pk": 102}, {"fields": {"codename": "add_loginfailures", "name": "Can add login failures", "content_type": 35}, "model": "auth.permission", "pk": 103}, {"fields": {"codename": "change_loginfailures", "name": "Can change login failures", "content_type": 35}, "model": "auth.permission", "pk": 104}, {"fields": {"codename": "delete_loginfailures", "name": "Can delete login failures", "content_type": 35}, "model": "auth.permission", "pk": 105}, {"fields": {"codename": "add_historicalcourseenrollment", "name": "Can add historical course enrollment", "content_type": 36}, "model": "auth.permission", "pk": 106}, {"fields": {"codename": "change_historicalcourseenrollment", "name": "Can change historical course enrollment", "content_type": 36}, "model": "auth.permission", "pk": 107}, {"fields": {"codename": "delete_historicalcourseenrollment", "name": "Can delete historical course enrollment", "content_type": 36}, "model": "auth.permission", "pk": 108}, {"fields": {"codename": "add_courseenrollment", "name": "Can add course enrollment", "content_type": 37}, "model": "auth.permission", "pk": 109}, {"fields": {"codename": "change_courseenrollment", "name": "Can change course enrollment", "content_type": 37}, "model": "auth.permission", "pk": 110}, {"fields": {"codename": "delete_courseenrollment", "name": "Can delete course enrollment", "content_type": 37}, "model": "auth.permission", "pk": 111}, {"fields": {"codename": "add_manualenrollmentaudit", "name": "Can add manual enrollment audit", "content_type": 38}, "model": "auth.permission", "pk": 112}, {"fields": {"codename": "change_manualenrollmentaudit", "name": "Can change manual enrollment audit", "content_type": 38}, "model": "auth.permission", "pk": 113}, {"fields": {"codename": "delete_manualenrollmentaudit", "name": "Can delete manual enrollment audit", "content_type": 38}, "model": "auth.permission", "pk": 114}, {"fields": {"codename": "add_courseenrollmentallowed", "name": "Can add course enrollment allowed", "content_type": 39}, "model": "auth.permission", "pk": 115}, {"fields": {"codename": "change_courseenrollmentallowed", "name": "Can change course enrollment allowed", "content_type": 39}, "model": "auth.permission", "pk": 116}, {"fields": {"codename": "delete_courseenrollmentallowed", "name": "Can delete course enrollment allowed", "content_type": 39}, "model": "auth.permission", "pk": 117}, {"fields": {"codename": "add_courseaccessrole", "name": "Can add course access role", "content_type": 40}, "model": "auth.permission", "pk": 118}, {"fields": {"codename": "change_courseaccessrole", "name": "Can change course access role", "content_type": 40}, "model": "auth.permission", "pk": 119}, {"fields": {"codename": "delete_courseaccessrole", "name": "Can delete course access role", "content_type": 40}, "model": "auth.permission", "pk": 120}, {"fields": {"codename": "add_dashboardconfiguration", "name": "Can add dashboard configuration", "content_type": 41}, "model": "auth.permission", "pk": 121}, {"fields": {"codename": "change_dashboardconfiguration", "name": "Can change dashboard configuration", "content_type": 41}, "model": "auth.permission", "pk": 122}, {"fields": {"codename": "delete_dashboardconfiguration", "name": "Can delete dashboard configuration", "content_type": 41}, "model": "auth.permission", "pk": 123}, {"fields": {"codename": "add_linkedinaddtoprofileconfiguration", "name": "Can add linked in add to profile configuration", "content_type": 42}, "model": "auth.permission", "pk": 124}, {"fields": {"codename": "change_linkedinaddtoprofileconfiguration", "name": "Can change linked in add to profile configuration", "content_type": 42}, "model": "auth.permission", "pk": 125}, {"fields": {"codename": "delete_linkedinaddtoprofileconfiguration", "name": "Can delete linked in add to profile configuration", "content_type": 42}, "model": "auth.permission", "pk": 126}, {"fields": {"codename": "add_entranceexamconfiguration", "name": "Can add entrance exam configuration", "content_type": 43}, "model": "auth.permission", "pk": 127}, {"fields": {"codename": "change_entranceexamconfiguration", "name": "Can change entrance exam configuration", "content_type": 43}, "model": "auth.permission", "pk": 128}, {"fields": {"codename": "delete_entranceexamconfiguration", "name": "Can delete entrance exam configuration", "content_type": 43}, "model": "auth.permission", "pk": 129}, {"fields": {"codename": "add_languageproficiency", "name": "Can add language proficiency", "content_type": 44}, "model": "auth.permission", "pk": 130}, {"fields": {"codename": "change_languageproficiency", "name": "Can change language proficiency", "content_type": 44}, "model": "auth.permission", "pk": 131}, {"fields": {"codename": "delete_languageproficiency", "name": "Can delete language proficiency", "content_type": 44}, "model": "auth.permission", "pk": 132}, {"fields": {"codename": "add_courseenrollmentattribute", "name": "Can add course enrollment attribute", "content_type": 45}, "model": "auth.permission", "pk": 133}, {"fields": {"codename": "change_courseenrollmentattribute", "name": "Can change course enrollment attribute", "content_type": 45}, "model": "auth.permission", "pk": 134}, {"fields": {"codename": "delete_courseenrollmentattribute", "name": "Can delete course enrollment attribute", "content_type": 45}, "model": "auth.permission", "pk": 135}, {"fields": {"codename": "add_enrollmentrefundconfiguration", "name": "Can add enrollment refund configuration", "content_type": 46}, "model": "auth.permission", "pk": 136}, {"fields": {"codename": "change_enrollmentrefundconfiguration", "name": "Can change enrollment refund configuration", "content_type": 46}, "model": "auth.permission", "pk": 137}, {"fields": {"codename": "delete_enrollmentrefundconfiguration", "name": "Can delete enrollment refund configuration", "content_type": 46}, "model": "auth.permission", "pk": 138}, {"fields": {"codename": "add_trackinglog", "name": "Can add tracking log", "content_type": 47}, "model": "auth.permission", "pk": 139}, {"fields": {"codename": "change_trackinglog", "name": "Can change tracking log", "content_type": 47}, "model": "auth.permission", "pk": 140}, {"fields": {"codename": "delete_trackinglog", "name": "Can delete tracking log", "content_type": 47}, "model": "auth.permission", "pk": 141}, {"fields": {"codename": "add_ratelimitconfiguration", "name": "Can add rate limit configuration", "content_type": 48}, "model": "auth.permission", "pk": 142}, {"fields": {"codename": "change_ratelimitconfiguration", "name": "Can change rate limit configuration", "content_type": 48}, "model": "auth.permission", "pk": 143}, {"fields": {"codename": "delete_ratelimitconfiguration", "name": "Can delete rate limit configuration", "content_type": 48}, "model": "auth.permission", "pk": 144}, {"fields": {"codename": "add_certificatewhitelist", "name": "Can add certificate whitelist", "content_type": 49}, "model": "auth.permission", "pk": 145}, {"fields": {"codename": "change_certificatewhitelist", "name": "Can change certificate whitelist", "content_type": 49}, "model": "auth.permission", "pk": 146}, {"fields": {"codename": "delete_certificatewhitelist", "name": "Can delete certificate whitelist", "content_type": 49}, "model": "auth.permission", "pk": 147}, {"fields": {"codename": "add_generatedcertificate", "name": "Can add generated certificate", "content_type": 50}, "model": "auth.permission", "pk": 148}, {"fields": {"codename": "change_generatedcertificate", "name": "Can change generated certificate", "content_type": 50}, "model": "auth.permission", "pk": 149}, {"fields": {"codename": "delete_generatedcertificate", "name": "Can delete generated certificate", "content_type": 50}, "model": "auth.permission", "pk": 150}, {"fields": {"codename": "add_certificategenerationhistory", "name": "Can add certificate generation history", "content_type": 51}, "model": "auth.permission", "pk": 151}, {"fields": {"codename": "change_certificategenerationhistory", "name": "Can change certificate generation history", "content_type": 51}, "model": "auth.permission", "pk": 152}, {"fields": {"codename": "delete_certificategenerationhistory", "name": "Can delete certificate generation history", "content_type": 51}, "model": "auth.permission", "pk": 153}, {"fields": {"codename": "add_certificateinvalidation", "name": "Can add certificate invalidation", "content_type": 52}, "model": "auth.permission", "pk": 154}, {"fields": {"codename": "change_certificateinvalidation", "name": "Can change certificate invalidation", "content_type": 52}, "model": "auth.permission", "pk": 155}, {"fields": {"codename": "delete_certificateinvalidation", "name": "Can delete certificate invalidation", "content_type": 52}, "model": "auth.permission", "pk": 156}, {"fields": {"codename": "add_examplecertificateset", "name": "Can add example certificate set", "content_type": 53}, "model": "auth.permission", "pk": 157}, {"fields": {"codename": "change_examplecertificateset", "name": "Can change example certificate set", "content_type": 53}, "model": "auth.permission", "pk": 158}, {"fields": {"codename": "delete_examplecertificateset", "name": "Can delete example certificate set", "content_type": 53}, "model": "auth.permission", "pk": 159}, {"fields": {"codename": "add_examplecertificate", "name": "Can add example certificate", "content_type": 54}, "model": "auth.permission", "pk": 160}, {"fields": {"codename": "change_examplecertificate", "name": "Can change example certificate", "content_type": 54}, "model": "auth.permission", "pk": 161}, {"fields": {"codename": "delete_examplecertificate", "name": "Can delete example certificate", "content_type": 54}, "model": "auth.permission", "pk": 162}, {"fields": {"codename": "add_certificategenerationcoursesetting", "name": "Can add certificate generation course setting", "content_type": 55}, "model": "auth.permission", "pk": 163}, {"fields": {"codename": "change_certificategenerationcoursesetting", "name": "Can change certificate generation course setting", "content_type": 55}, "model": "auth.permission", "pk": 164}, {"fields": {"codename": "delete_certificategenerationcoursesetting", "name": "Can delete certificate generation course setting", "content_type": 55}, "model": "auth.permission", "pk": 165}, {"fields": {"codename": "add_certificategenerationconfiguration", "name": "Can add certificate generation configuration", "content_type": 56}, "model": "auth.permission", "pk": 166}, {"fields": {"codename": "change_certificategenerationconfiguration", "name": "Can change certificate generation configuration", "content_type": 56}, "model": "auth.permission", "pk": 167}, {"fields": {"codename": "delete_certificategenerationconfiguration", "name": "Can delete certificate generation configuration", "content_type": 56}, "model": "auth.permission", "pk": 168}, {"fields": {"codename": "add_certificatehtmlviewconfiguration", "name": "Can add certificate html view configuration", "content_type": 57}, "model": "auth.permission", "pk": 169}, {"fields": {"codename": "change_certificatehtmlviewconfiguration", "name": "Can change certificate html view configuration", "content_type": 57}, "model": "auth.permission", "pk": 170}, {"fields": {"codename": "delete_certificatehtmlviewconfiguration", "name": "Can delete certificate html view configuration", "content_type": 57}, "model": "auth.permission", "pk": 171}, {"fields": {"codename": "add_badgeassertion", "name": "Can add badge assertion", "content_type": 58}, "model": "auth.permission", "pk": 172}, {"fields": {"codename": "change_badgeassertion", "name": "Can change badge assertion", "content_type": 58}, "model": "auth.permission", "pk": 173}, {"fields": {"codename": "delete_badgeassertion", "name": "Can delete badge assertion", "content_type": 58}, "model": "auth.permission", "pk": 174}, {"fields": {"codename": "add_badgeimageconfiguration", "name": "Can add badge image configuration", "content_type": 59}, "model": "auth.permission", "pk": 175}, {"fields": {"codename": "change_badgeimageconfiguration", "name": "Can change badge image configuration", "content_type": 59}, "model": "auth.permission", "pk": 176}, {"fields": {"codename": "delete_badgeimageconfiguration", "name": "Can delete badge image configuration", "content_type": 59}, "model": "auth.permission", "pk": 177}, {"fields": {"codename": "add_certificatetemplate", "name": "Can add certificate template", "content_type": 60}, "model": "auth.permission", "pk": 178}, {"fields": {"codename": "change_certificatetemplate", "name": "Can change certificate template", "content_type": 60}, "model": "auth.permission", "pk": 179}, {"fields": {"codename": "delete_certificatetemplate", "name": "Can delete certificate template", "content_type": 60}, "model": "auth.permission", "pk": 180}, {"fields": {"codename": "add_certificatetemplateasset", "name": "Can add certificate template asset", "content_type": 61}, "model": "auth.permission", "pk": 181}, {"fields": {"codename": "change_certificatetemplateasset", "name": "Can change certificate template asset", "content_type": 61}, "model": "auth.permission", "pk": 182}, {"fields": {"codename": "delete_certificatetemplateasset", "name": "Can delete certificate template asset", "content_type": 61}, "model": "auth.permission", "pk": 183}, {"fields": {"codename": "add_instructortask", "name": "Can add instructor task", "content_type": 62}, "model": "auth.permission", "pk": 184}, {"fields": {"codename": "change_instructortask", "name": "Can change instructor task", "content_type": 62}, "model": "auth.permission", "pk": 185}, {"fields": {"codename": "delete_instructortask", "name": "Can delete instructor task", "content_type": 62}, "model": "auth.permission", "pk": 186}, {"fields": {"codename": "add_courseusergroup", "name": "Can add course user group", "content_type": 63}, "model": "auth.permission", "pk": 187}, {"fields": {"codename": "change_courseusergroup", "name": "Can change course user group", "content_type": 63}, "model": "auth.permission", "pk": 188}, {"fields": {"codename": "delete_courseusergroup", "name": "Can delete course user group", "content_type": 63}, "model": "auth.permission", "pk": 189}, {"fields": {"codename": "add_cohortmembership", "name": "Can add cohort membership", "content_type": 64}, "model": "auth.permission", "pk": 190}, {"fields": {"codename": "change_cohortmembership", "name": "Can change cohort membership", "content_type": 64}, "model": "auth.permission", "pk": 191}, {"fields": {"codename": "delete_cohortmembership", "name": "Can delete cohort membership", "content_type": 64}, "model": "auth.permission", "pk": 192}, {"fields": {"codename": "add_courseusergrouppartitiongroup", "name": "Can add course user group partition group", "content_type": 65}, "model": "auth.permission", "pk": 193}, {"fields": {"codename": "change_courseusergrouppartitiongroup", "name": "Can change course user group partition group", "content_type": 65}, "model": "auth.permission", "pk": 194}, {"fields": {"codename": "delete_courseusergrouppartitiongroup", "name": "Can delete course user group partition group", "content_type": 65}, "model": "auth.permission", "pk": 195}, {"fields": {"codename": "add_coursecohortssettings", "name": "Can add course cohorts settings", "content_type": 66}, "model": "auth.permission", "pk": 196}, {"fields": {"codename": "change_coursecohortssettings", "name": "Can change course cohorts settings", "content_type": 66}, "model": "auth.permission", "pk": 197}, {"fields": {"codename": "delete_coursecohortssettings", "name": "Can delete course cohorts settings", "content_type": 66}, "model": "auth.permission", "pk": 198}, {"fields": {"codename": "add_coursecohort", "name": "Can add course cohort", "content_type": 67}, "model": "auth.permission", "pk": 199}, {"fields": {"codename": "change_coursecohort", "name": "Can change course cohort", "content_type": 67}, "model": "auth.permission", "pk": 200}, {"fields": {"codename": "delete_coursecohort", "name": "Can delete course cohort", "content_type": 67}, "model": "auth.permission", "pk": 201}, {"fields": {"codename": "add_courseemail", "name": "Can add course email", "content_type": 68}, "model": "auth.permission", "pk": 202}, {"fields": {"codename": "change_courseemail", "name": "Can change course email", "content_type": 68}, "model": "auth.permission", "pk": 203}, {"fields": {"codename": "delete_courseemail", "name": "Can delete course email", "content_type": 68}, "model": "auth.permission", "pk": 204}, {"fields": {"codename": "add_optout", "name": "Can add optout", "content_type": 69}, "model": "auth.permission", "pk": 205}, {"fields": {"codename": "change_optout", "name": "Can change optout", "content_type": 69}, "model": "auth.permission", "pk": 206}, {"fields": {"codename": "delete_optout", "name": "Can delete optout", "content_type": 69}, "model": "auth.permission", "pk": 207}, {"fields": {"codename": "add_courseemailtemplate", "name": "Can add course email template", "content_type": 70}, "model": "auth.permission", "pk": 208}, {"fields": {"codename": "change_courseemailtemplate", "name": "Can change course email template", "content_type": 70}, "model": "auth.permission", "pk": 209}, {"fields": {"codename": "delete_courseemailtemplate", "name": "Can delete course email template", "content_type": 70}, "model": "auth.permission", "pk": 210}, {"fields": {"codename": "add_courseauthorization", "name": "Can add course authorization", "content_type": 71}, "model": "auth.permission", "pk": 211}, {"fields": {"codename": "change_courseauthorization", "name": "Can change course authorization", "content_type": 71}, "model": "auth.permission", "pk": 212}, {"fields": {"codename": "delete_courseauthorization", "name": "Can delete course authorization", "content_type": 71}, "model": "auth.permission", "pk": 213}, {"fields": {"codename": "add_brandinginfoconfig", "name": "Can add branding info config", "content_type": 72}, "model": "auth.permission", "pk": 214}, {"fields": {"codename": "change_brandinginfoconfig", "name": "Can change branding info config", "content_type": 72}, "model": "auth.permission", "pk": 215}, {"fields": {"codename": "delete_brandinginfoconfig", "name": "Can delete branding info config", "content_type": 72}, "model": "auth.permission", "pk": 216}, {"fields": {"codename": "add_brandingapiconfig", "name": "Can add branding api config", "content_type": 73}, "model": "auth.permission", "pk": 217}, {"fields": {"codename": "change_brandingapiconfig", "name": "Can change branding api config", "content_type": 73}, "model": "auth.permission", "pk": 218}, {"fields": {"codename": "delete_brandingapiconfig", "name": "Can delete branding api config", "content_type": 73}, "model": "auth.permission", "pk": 219}, {"fields": {"codename": "add_externalauthmap", "name": "Can add external auth map", "content_type": 74}, "model": "auth.permission", "pk": 220}, {"fields": {"codename": "change_externalauthmap", "name": "Can change external auth map", "content_type": 74}, "model": "auth.permission", "pk": 221}, {"fields": {"codename": "delete_externalauthmap", "name": "Can delete external auth map", "content_type": 74}, "model": "auth.permission", "pk": 222}, {"fields": {"codename": "add_nonce", "name": "Can add nonce", "content_type": 75}, "model": "auth.permission", "pk": 223}, {"fields": {"codename": "change_nonce", "name": "Can change nonce", "content_type": 75}, "model": "auth.permission", "pk": 224}, {"fields": {"codename": "delete_nonce", "name": "Can delete nonce", "content_type": 75}, "model": "auth.permission", "pk": 225}, {"fields": {"codename": "add_association", "name": "Can add association", "content_type": 76}, "model": "auth.permission", "pk": 226}, {"fields": {"codename": "change_association", "name": "Can change association", "content_type": 76}, "model": "auth.permission", "pk": 227}, {"fields": {"codename": "delete_association", "name": "Can delete association", "content_type": 76}, "model": "auth.permission", "pk": 228}, {"fields": {"codename": "add_useropenid", "name": "Can add user open id", "content_type": 77}, "model": "auth.permission", "pk": 229}, {"fields": {"codename": "change_useropenid", "name": "Can change user open id", "content_type": 77}, "model": "auth.permission", "pk": 230}, {"fields": {"codename": "delete_useropenid", "name": "Can delete user open id", "content_type": 77}, "model": "auth.permission", "pk": 231}, {"fields": {"codename": "account_verified", "name": "The OpenID has been verified", "content_type": 77}, "model": "auth.permission", "pk": 232}, {"fields": {"codename": "add_client", "name": "Can add client", "content_type": 78}, "model": "auth.permission", "pk": 233}, {"fields": {"codename": "change_client", "name": "Can change client", "content_type": 78}, "model": "auth.permission", "pk": 234}, {"fields": {"codename": "delete_client", "name": "Can delete client", "content_type": 78}, "model": "auth.permission", "pk": 235}, {"fields": {"codename": "add_grant", "name": "Can add grant", "content_type": 79}, "model": "auth.permission", "pk": 236}, {"fields": {"codename": "change_grant", "name": "Can change grant", "content_type": 79}, "model": "auth.permission", "pk": 237}, {"fields": {"codename": "delete_grant", "name": "Can delete grant", "content_type": 79}, "model": "auth.permission", "pk": 238}, {"fields": {"codename": "add_accesstoken", "name": "Can add access token", "content_type": 80}, "model": "auth.permission", "pk": 239}, {"fields": {"codename": "change_accesstoken", "name": "Can change access token", "content_type": 80}, "model": "auth.permission", "pk": 240}, {"fields": {"codename": "delete_accesstoken", "name": "Can delete access token", "content_type": 80}, "model": "auth.permission", "pk": 241}, {"fields": {"codename": "add_refreshtoken", "name": "Can add refresh token", "content_type": 81}, "model": "auth.permission", "pk": 242}, {"fields": {"codename": "change_refreshtoken", "name": "Can change refresh token", "content_type": 81}, "model": "auth.permission", "pk": 243}, {"fields": {"codename": "delete_refreshtoken", "name": "Can delete refresh token", "content_type": 81}, "model": "auth.permission", "pk": 244}, {"fields": {"codename": "add_trustedclient", "name": "Can add trusted client", "content_type": 82}, "model": "auth.permission", "pk": 245}, {"fields": {"codename": "change_trustedclient", "name": "Can change trusted client", "content_type": 82}, "model": "auth.permission", "pk": 246}, {"fields": {"codename": "delete_trustedclient", "name": "Can delete trusted client", "content_type": 82}, "model": "auth.permission", "pk": 247}, {"fields": {"codename": "add_oauth2providerconfig", "name": "Can add Provider Configuration (OAuth)", "content_type": 83}, "model": "auth.permission", "pk": 248}, {"fields": {"codename": "change_oauth2providerconfig", "name": "Can change Provider Configuration (OAuth)", "content_type": 83}, "model": "auth.permission", "pk": 249}, {"fields": {"codename": "delete_oauth2providerconfig", "name": "Can delete Provider Configuration (OAuth)", "content_type": 83}, "model": "auth.permission", "pk": 250}, {"fields": {"codename": "add_samlproviderconfig", "name": "Can add Provider Configuration (SAML IdP)", "content_type": 84}, "model": "auth.permission", "pk": 251}, {"fields": {"codename": "change_samlproviderconfig", "name": "Can change Provider Configuration (SAML IdP)", "content_type": 84}, "model": "auth.permission", "pk": 252}, {"fields": {"codename": "delete_samlproviderconfig", "name": "Can delete Provider Configuration (SAML IdP)", "content_type": 84}, "model": "auth.permission", "pk": 253}, {"fields": {"codename": "add_samlconfiguration", "name": "Can add SAML Configuration", "content_type": 85}, "model": "auth.permission", "pk": 254}, {"fields": {"codename": "change_samlconfiguration", "name": "Can change SAML Configuration", "content_type": 85}, "model": "auth.permission", "pk": 255}, {"fields": {"codename": "delete_samlconfiguration", "name": "Can delete SAML Configuration", "content_type": 85}, "model": "auth.permission", "pk": 256}, {"fields": {"codename": "add_samlproviderdata", "name": "Can add SAML Provider Data", "content_type": 86}, "model": "auth.permission", "pk": 257}, {"fields": {"codename": "change_samlproviderdata", "name": "Can change SAML Provider Data", "content_type": 86}, "model": "auth.permission", "pk": 258}, {"fields": {"codename": "delete_samlproviderdata", "name": "Can delete SAML Provider Data", "content_type": 86}, "model": "auth.permission", "pk": 259}, {"fields": {"codename": "add_ltiproviderconfig", "name": "Can add Provider Configuration (LTI)", "content_type": 87}, "model": "auth.permission", "pk": 260}, {"fields": {"codename": "change_ltiproviderconfig", "name": "Can change Provider Configuration (LTI)", "content_type": 87}, "model": "auth.permission", "pk": 261}, {"fields": {"codename": "delete_ltiproviderconfig", "name": "Can delete Provider Configuration (LTI)", "content_type": 87}, "model": "auth.permission", "pk": 262}, {"fields": {"codename": "add_providerapipermissions", "name": "Can add Provider API Permission", "content_type": 88}, "model": "auth.permission", "pk": 263}, {"fields": {"codename": "change_providerapipermissions", "name": "Can change Provider API Permission", "content_type": 88}, "model": "auth.permission", "pk": 264}, {"fields": {"codename": "delete_providerapipermissions", "name": "Can delete Provider API Permission", "content_type": 88}, "model": "auth.permission", "pk": 265}, {"fields": {"codename": "add_nonce", "name": "Can add nonce", "content_type": 89}, "model": "auth.permission", "pk": 266}, {"fields": {"codename": "change_nonce", "name": "Can change nonce", "content_type": 89}, "model": "auth.permission", "pk": 267}, {"fields": {"codename": "delete_nonce", "name": "Can delete nonce", "content_type": 89}, "model": "auth.permission", "pk": 268}, {"fields": {"codename": "add_scope", "name": "Can add scope", "content_type": 90}, "model": "auth.permission", "pk": 269}, {"fields": {"codename": "change_scope", "name": "Can change scope", "content_type": 90}, "model": "auth.permission", "pk": 270}, {"fields": {"codename": "delete_scope", "name": "Can delete scope", "content_type": 90}, "model": "auth.permission", "pk": 271}, {"fields": {"codename": "add_resource", "name": "Can add resource", "content_type": 90}, "model": "auth.permission", "pk": 272}, {"fields": {"codename": "change_resource", "name": "Can change resource", "content_type": 90}, "model": "auth.permission", "pk": 273}, {"fields": {"codename": "delete_resource", "name": "Can delete resource", "content_type": 90}, "model": "auth.permission", "pk": 274}, {"fields": {"codename": "add_consumer", "name": "Can add consumer", "content_type": 91}, "model": "auth.permission", "pk": 275}, {"fields": {"codename": "change_consumer", "name": "Can change consumer", "content_type": 91}, "model": "auth.permission", "pk": 276}, {"fields": {"codename": "delete_consumer", "name": "Can delete consumer", "content_type": 91}, "model": "auth.permission", "pk": 277}, {"fields": {"codename": "add_token", "name": "Can add token", "content_type": 92}, "model": "auth.permission", "pk": 278}, {"fields": {"codename": "change_token", "name": "Can change token", "content_type": 92}, "model": "auth.permission", "pk": 279}, {"fields": {"codename": "delete_token", "name": "Can delete token", "content_type": 92}, "model": "auth.permission", "pk": 280}, {"fields": {"codename": "add_article", "name": "Can add article", "content_type": 94}, "model": "auth.permission", "pk": 281}, {"fields": {"codename": "change_article", "name": "Can change article", "content_type": 94}, "model": "auth.permission", "pk": 282}, {"fields": {"codename": "delete_article", "name": "Can delete article", "content_type": 94}, "model": "auth.permission", "pk": 283}, {"fields": {"codename": "moderate", "name": "Can edit all articles and lock/unlock/restore", "content_type": 94}, "model": "auth.permission", "pk": 284}, {"fields": {"codename": "assign", "name": "Can change ownership of any article", "content_type": 94}, "model": "auth.permission", "pk": 285}, {"fields": {"codename": "grant", "name": "Can assign permissions to other users", "content_type": 94}, "model": "auth.permission", "pk": 286}, {"fields": {"codename": "add_articleforobject", "name": "Can add Article for object", "content_type": 95}, "model": "auth.permission", "pk": 287}, {"fields": {"codename": "change_articleforobject", "name": "Can change Article for object", "content_type": 95}, "model": "auth.permission", "pk": 288}, {"fields": {"codename": "delete_articleforobject", "name": "Can delete Article for object", "content_type": 95}, "model": "auth.permission", "pk": 289}, {"fields": {"codename": "add_articlerevision", "name": "Can add article revision", "content_type": 96}, "model": "auth.permission", "pk": 290}, {"fields": {"codename": "change_articlerevision", "name": "Can change article revision", "content_type": 96}, "model": "auth.permission", "pk": 291}, {"fields": {"codename": "delete_articlerevision", "name": "Can delete article revision", "content_type": 96}, "model": "auth.permission", "pk": 292}, {"fields": {"codename": "add_urlpath", "name": "Can add URL path", "content_type": 97}, "model": "auth.permission", "pk": 293}, {"fields": {"codename": "change_urlpath", "name": "Can change URL path", "content_type": 97}, "model": "auth.permission", "pk": 294}, {"fields": {"codename": "delete_urlpath", "name": "Can delete URL path", "content_type": 97}, "model": "auth.permission", "pk": 295}, {"fields": {"codename": "add_notificationtype", "name": "Can add type", "content_type": 98}, "model": "auth.permission", "pk": 296}, {"fields": {"codename": "change_notificationtype", "name": "Can change type", "content_type": 98}, "model": "auth.permission", "pk": 297}, {"fields": {"codename": "delete_notificationtype", "name": "Can delete type", "content_type": 98}, "model": "auth.permission", "pk": 298}, {"fields": {"codename": "add_settings", "name": "Can add settings", "content_type": 99}, "model": "auth.permission", "pk": 299}, {"fields": {"codename": "change_settings", "name": "Can change settings", "content_type": 99}, "model": "auth.permission", "pk": 300}, {"fields": {"codename": "delete_settings", "name": "Can delete settings", "content_type": 99}, "model": "auth.permission", "pk": 301}, {"fields": {"codename": "add_subscription", "name": "Can add subscription", "content_type": 100}, "model": "auth.permission", "pk": 302}, {"fields": {"codename": "change_subscription", "name": "Can change subscription", "content_type": 100}, "model": "auth.permission", "pk": 303}, {"fields": {"codename": "delete_subscription", "name": "Can delete subscription", "content_type": 100}, "model": "auth.permission", "pk": 304}, {"fields": {"codename": "add_notification", "name": "Can add notification", "content_type": 101}, "model": "auth.permission", "pk": 305}, {"fields": {"codename": "change_notification", "name": "Can change notification", "content_type": 101}, "model": "auth.permission", "pk": 306}, {"fields": {"codename": "delete_notification", "name": "Can delete notification", "content_type": 101}, "model": "auth.permission", "pk": 307}, {"fields": {"codename": "add_logentry", "name": "Can add log entry", "content_type": 102}, "model": "auth.permission", "pk": 308}, {"fields": {"codename": "change_logentry", "name": "Can change log entry", "content_type": 102}, "model": "auth.permission", "pk": 309}, {"fields": {"codename": "delete_logentry", "name": "Can delete log entry", "content_type": 102}, "model": "auth.permission", "pk": 310}, {"fields": {"codename": "add_role", "name": "Can add role", "content_type": 103}, "model": "auth.permission", "pk": 311}, {"fields": {"codename": "change_role", "name": "Can change role", "content_type": 103}, "model": "auth.permission", "pk": 312}, {"fields": {"codename": "delete_role", "name": "Can delete role", "content_type": 103}, "model": "auth.permission", "pk": 313}, {"fields": {"codename": "add_permission", "name": "Can add permission", "content_type": 104}, "model": "auth.permission", "pk": 314}, {"fields": {"codename": "change_permission", "name": "Can change permission", "content_type": 104}, "model": "auth.permission", "pk": 315}, {"fields": {"codename": "delete_permission", "name": "Can delete permission", "content_type": 104}, "model": "auth.permission", "pk": 316}, {"fields": {"codename": "add_note", "name": "Can add note", "content_type": 105}, "model": "auth.permission", "pk": 317}, {"fields": {"codename": "change_note", "name": "Can change note", "content_type": 105}, "model": "auth.permission", "pk": 318}, {"fields": {"codename": "delete_note", "name": "Can delete note", "content_type": 105}, "model": "auth.permission", "pk": 319}, {"fields": {"codename": "add_splashconfig", "name": "Can add splash config", "content_type": 106}, "model": "auth.permission", "pk": 320}, {"fields": {"codename": "change_splashconfig", "name": "Can change splash config", "content_type": 106}, "model": "auth.permission", "pk": 321}, {"fields": {"codename": "delete_splashconfig", "name": "Can delete splash config", "content_type": 106}, "model": "auth.permission", "pk": 322}, {"fields": {"codename": "add_userpreference", "name": "Can add user preference", "content_type": 107}, "model": "auth.permission", "pk": 323}, {"fields": {"codename": "change_userpreference", "name": "Can change user preference", "content_type": 107}, "model": "auth.permission", "pk": 324}, {"fields": {"codename": "delete_userpreference", "name": "Can delete user preference", "content_type": 107}, "model": "auth.permission", "pk": 325}, {"fields": {"codename": "add_usercoursetag", "name": "Can add user course tag", "content_type": 108}, "model": "auth.permission", "pk": 326}, {"fields": {"codename": "change_usercoursetag", "name": "Can change user course tag", "content_type": 108}, "model": "auth.permission", "pk": 327}, {"fields": {"codename": "delete_usercoursetag", "name": "Can delete user course tag", "content_type": 108}, "model": "auth.permission", "pk": 328}, {"fields": {"codename": "add_userorgtag", "name": "Can add user org tag", "content_type": 109}, "model": "auth.permission", "pk": 329}, {"fields": {"codename": "change_userorgtag", "name": "Can change user org tag", "content_type": 109}, "model": "auth.permission", "pk": 330}, {"fields": {"codename": "delete_userorgtag", "name": "Can delete user org tag", "content_type": 109}, "model": "auth.permission", "pk": 331}, {"fields": {"codename": "add_order", "name": "Can add order", "content_type": 110}, "model": "auth.permission", "pk": 332}, {"fields": {"codename": "change_order", "name": "Can change order", "content_type": 110}, "model": "auth.permission", "pk": 333}, {"fields": {"codename": "delete_order", "name": "Can delete order", "content_type": 110}, "model": "auth.permission", "pk": 334}, {"fields": {"codename": "add_orderitem", "name": "Can add order item", "content_type": 111}, "model": "auth.permission", "pk": 335}, {"fields": {"codename": "change_orderitem", "name": "Can change order item", "content_type": 111}, "model": "auth.permission", "pk": 336}, {"fields": {"codename": "delete_orderitem", "name": "Can delete order item", "content_type": 111}, "model": "auth.permission", "pk": 337}, {"fields": {"codename": "add_invoice", "name": "Can add invoice", "content_type": 112}, "model": "auth.permission", "pk": 338}, {"fields": {"codename": "change_invoice", "name": "Can change invoice", "content_type": 112}, "model": "auth.permission", "pk": 339}, {"fields": {"codename": "delete_invoice", "name": "Can delete invoice", "content_type": 112}, "model": "auth.permission", "pk": 340}, {"fields": {"codename": "add_invoicetransaction", "name": "Can add invoice transaction", "content_type": 113}, "model": "auth.permission", "pk": 341}, {"fields": {"codename": "change_invoicetransaction", "name": "Can change invoice transaction", "content_type": 113}, "model": "auth.permission", "pk": 342}, {"fields": {"codename": "delete_invoicetransaction", "name": "Can delete invoice transaction", "content_type": 113}, "model": "auth.permission", "pk": 343}, {"fields": {"codename": "add_invoiceitem", "name": "Can add invoice item", "content_type": 114}, "model": "auth.permission", "pk": 344}, {"fields": {"codename": "change_invoiceitem", "name": "Can change invoice item", "content_type": 114}, "model": "auth.permission", "pk": 345}, {"fields": {"codename": "delete_invoiceitem", "name": "Can delete invoice item", "content_type": 114}, "model": "auth.permission", "pk": 346}, {"fields": {"codename": "add_courseregistrationcodeinvoiceitem", "name": "Can add course registration code invoice item", "content_type": 115}, "model": "auth.permission", "pk": 347}, {"fields": {"codename": "change_courseregistrationcodeinvoiceitem", "name": "Can change course registration code invoice item", "content_type": 115}, "model": "auth.permission", "pk": 348}, {"fields": {"codename": "delete_courseregistrationcodeinvoiceitem", "name": "Can delete course registration code invoice item", "content_type": 115}, "model": "auth.permission", "pk": 349}, {"fields": {"codename": "add_invoicehistory", "name": "Can add invoice history", "content_type": 116}, "model": "auth.permission", "pk": 350}, {"fields": {"codename": "change_invoicehistory", "name": "Can change invoice history", "content_type": 116}, "model": "auth.permission", "pk": 351}, {"fields": {"codename": "delete_invoicehistory", "name": "Can delete invoice history", "content_type": 116}, "model": "auth.permission", "pk": 352}, {"fields": {"codename": "add_courseregistrationcode", "name": "Can add course registration code", "content_type": 117}, "model": "auth.permission", "pk": 353}, {"fields": {"codename": "change_courseregistrationcode", "name": "Can change course registration code", "content_type": 117}, "model": "auth.permission", "pk": 354}, {"fields": {"codename": "delete_courseregistrationcode", "name": "Can delete course registration code", "content_type": 117}, "model": "auth.permission", "pk": 355}, {"fields": {"codename": "add_registrationcoderedemption", "name": "Can add registration code redemption", "content_type": 118}, "model": "auth.permission", "pk": 356}, {"fields": {"codename": "change_registrationcoderedemption", "name": "Can change registration code redemption", "content_type": 118}, "model": "auth.permission", "pk": 357}, {"fields": {"codename": "delete_registrationcoderedemption", "name": "Can delete registration code redemption", "content_type": 118}, "model": "auth.permission", "pk": 358}, {"fields": {"codename": "add_coupon", "name": "Can add coupon", "content_type": 119}, "model": "auth.permission", "pk": 359}, {"fields": {"codename": "change_coupon", "name": "Can change coupon", "content_type": 119}, "model": "auth.permission", "pk": 360}, {"fields": {"codename": "delete_coupon", "name": "Can delete coupon", "content_type": 119}, "model": "auth.permission", "pk": 361}, {"fields": {"codename": "add_couponredemption", "name": "Can add coupon redemption", "content_type": 120}, "model": "auth.permission", "pk": 362}, {"fields": {"codename": "change_couponredemption", "name": "Can change coupon redemption", "content_type": 120}, "model": "auth.permission", "pk": 363}, {"fields": {"codename": "delete_couponredemption", "name": "Can delete coupon redemption", "content_type": 120}, "model": "auth.permission", "pk": 364}, {"fields": {"codename": "add_paidcourseregistration", "name": "Can add paid course registration", "content_type": 121}, "model": "auth.permission", "pk": 365}, {"fields": {"codename": "change_paidcourseregistration", "name": "Can change paid course registration", "content_type": 121}, "model": "auth.permission", "pk": 366}, {"fields": {"codename": "delete_paidcourseregistration", "name": "Can delete paid course registration", "content_type": 121}, "model": "auth.permission", "pk": 367}, {"fields": {"codename": "add_courseregcodeitem", "name": "Can add course reg code item", "content_type": 122}, "model": "auth.permission", "pk": 368}, {"fields": {"codename": "change_courseregcodeitem", "name": "Can change course reg code item", "content_type": 122}, "model": "auth.permission", "pk": 369}, {"fields": {"codename": "delete_courseregcodeitem", "name": "Can delete course reg code item", "content_type": 122}, "model": "auth.permission", "pk": 370}, {"fields": {"codename": "add_courseregcodeitemannotation", "name": "Can add course reg code item annotation", "content_type": 123}, "model": "auth.permission", "pk": 371}, {"fields": {"codename": "change_courseregcodeitemannotation", "name": "Can change course reg code item annotation", "content_type": 123}, "model": "auth.permission", "pk": 372}, {"fields": {"codename": "delete_courseregcodeitemannotation", "name": "Can delete course reg code item annotation", "content_type": 123}, "model": "auth.permission", "pk": 373}, {"fields": {"codename": "add_paidcourseregistrationannotation", "name": "Can add paid course registration annotation", "content_type": 124}, "model": "auth.permission", "pk": 374}, {"fields": {"codename": "change_paidcourseregistrationannotation", "name": "Can change paid course registration annotation", "content_type": 124}, "model": "auth.permission", "pk": 375}, {"fields": {"codename": "delete_paidcourseregistrationannotation", "name": "Can delete paid course registration annotation", "content_type": 124}, "model": "auth.permission", "pk": 376}, {"fields": {"codename": "add_certificateitem", "name": "Can add certificate item", "content_type": 125}, "model": "auth.permission", "pk": 377}, {"fields": {"codename": "change_certificateitem", "name": "Can change certificate item", "content_type": 125}, "model": "auth.permission", "pk": 378}, {"fields": {"codename": "delete_certificateitem", "name": "Can delete certificate item", "content_type": 125}, "model": "auth.permission", "pk": 379}, {"fields": {"codename": "add_donationconfiguration", "name": "Can add donation configuration", "content_type": 126}, "model": "auth.permission", "pk": 380}, {"fields": {"codename": "change_donationconfiguration", "name": "Can change donation configuration", "content_type": 126}, "model": "auth.permission", "pk": 381}, {"fields": {"codename": "delete_donationconfiguration", "name": "Can delete donation configuration", "content_type": 126}, "model": "auth.permission", "pk": 382}, {"fields": {"codename": "add_donation", "name": "Can add donation", "content_type": 127}, "model": "auth.permission", "pk": 383}, {"fields": {"codename": "change_donation", "name": "Can change donation", "content_type": 127}, "model": "auth.permission", "pk": 384}, {"fields": {"codename": "delete_donation", "name": "Can delete donation", "content_type": 127}, "model": "auth.permission", "pk": 385}, {"fields": {"codename": "add_coursemode", "name": "Can add course mode", "content_type": 128}, "model": "auth.permission", "pk": 386}, {"fields": {"codename": "change_coursemode", "name": "Can change course mode", "content_type": 128}, "model": "auth.permission", "pk": 387}, {"fields": {"codename": "delete_coursemode", "name": "Can delete course mode", "content_type": 128}, "model": "auth.permission", "pk": 388}, {"fields": {"codename": "add_coursemodesarchive", "name": "Can add course modes archive", "content_type": 129}, "model": "auth.permission", "pk": 389}, {"fields": {"codename": "change_coursemodesarchive", "name": "Can change course modes archive", "content_type": 129}, "model": "auth.permission", "pk": 390}, {"fields": {"codename": "delete_coursemodesarchive", "name": "Can delete course modes archive", "content_type": 129}, "model": "auth.permission", "pk": 391}, {"fields": {"codename": "add_coursemodeexpirationconfig", "name": "Can add course mode expiration config", "content_type": 130}, "model": "auth.permission", "pk": 392}, {"fields": {"codename": "change_coursemodeexpirationconfig", "name": "Can change course mode expiration config", "content_type": 130}, "model": "auth.permission", "pk": 393}, {"fields": {"codename": "delete_coursemodeexpirationconfig", "name": "Can delete course mode expiration config", "content_type": 130}, "model": "auth.permission", "pk": 394}, {"fields": {"codename": "add_softwaresecurephotoverification", "name": "Can add software secure photo verification", "content_type": 131}, "model": "auth.permission", "pk": 395}, {"fields": {"codename": "change_softwaresecurephotoverification", "name": "Can change software secure photo verification", "content_type": 131}, "model": "auth.permission", "pk": 396}, {"fields": {"codename": "delete_softwaresecurephotoverification", "name": "Can delete software secure photo verification", "content_type": 131}, "model": "auth.permission", "pk": 397}, {"fields": {"codename": "add_historicalverificationdeadline", "name": "Can add historical verification deadline", "content_type": 132}, "model": "auth.permission", "pk": 398}, {"fields": {"codename": "change_historicalverificationdeadline", "name": "Can change historical verification deadline", "content_type": 132}, "model": "auth.permission", "pk": 399}, {"fields": {"codename": "delete_historicalverificationdeadline", "name": "Can delete historical verification deadline", "content_type": 132}, "model": "auth.permission", "pk": 400}, {"fields": {"codename": "add_verificationdeadline", "name": "Can add verification deadline", "content_type": 133}, "model": "auth.permission", "pk": 401}, {"fields": {"codename": "change_verificationdeadline", "name": "Can change verification deadline", "content_type": 133}, "model": "auth.permission", "pk": 402}, {"fields": {"codename": "delete_verificationdeadline", "name": "Can delete verification deadline", "content_type": 133}, "model": "auth.permission", "pk": 403}, {"fields": {"codename": "add_verificationcheckpoint", "name": "Can add verification checkpoint", "content_type": 134}, "model": "auth.permission", "pk": 404}, {"fields": {"codename": "change_verificationcheckpoint", "name": "Can change verification checkpoint", "content_type": 134}, "model": "auth.permission", "pk": 405}, {"fields": {"codename": "delete_verificationcheckpoint", "name": "Can delete verification checkpoint", "content_type": 134}, "model": "auth.permission", "pk": 406}, {"fields": {"codename": "add_verificationstatus", "name": "Can add Verification Status", "content_type": 135}, "model": "auth.permission", "pk": 407}, {"fields": {"codename": "change_verificationstatus", "name": "Can change Verification Status", "content_type": 135}, "model": "auth.permission", "pk": 408}, {"fields": {"codename": "delete_verificationstatus", "name": "Can delete Verification Status", "content_type": 135}, "model": "auth.permission", "pk": 409}, {"fields": {"codename": "add_incoursereverificationconfiguration", "name": "Can add in course reverification configuration", "content_type": 136}, "model": "auth.permission", "pk": 410}, {"fields": {"codename": "change_incoursereverificationconfiguration", "name": "Can change in course reverification configuration", "content_type": 136}, "model": "auth.permission", "pk": 411}, {"fields": {"codename": "delete_incoursereverificationconfiguration", "name": "Can delete in course reverification configuration", "content_type": 136}, "model": "auth.permission", "pk": 412}, {"fields": {"codename": "add_icrvstatusemailsconfiguration", "name": "Can add icrv status emails configuration", "content_type": 137}, "model": "auth.permission", "pk": 413}, {"fields": {"codename": "change_icrvstatusemailsconfiguration", "name": "Can change icrv status emails configuration", "content_type": 137}, "model": "auth.permission", "pk": 414}, {"fields": {"codename": "delete_icrvstatusemailsconfiguration", "name": "Can delete icrv status emails configuration", "content_type": 137}, "model": "auth.permission", "pk": 415}, {"fields": {"codename": "add_skippedreverification", "name": "Can add skipped reverification", "content_type": 138}, "model": "auth.permission", "pk": 416}, {"fields": {"codename": "change_skippedreverification", "name": "Can change skipped reverification", "content_type": 138}, "model": "auth.permission", "pk": 417}, {"fields": {"codename": "delete_skippedreverification", "name": "Can delete skipped reverification", "content_type": 138}, "model": "auth.permission", "pk": 418}, {"fields": {"codename": "add_darklangconfig", "name": "Can add dark lang config", "content_type": 139}, "model": "auth.permission", "pk": 419}, {"fields": {"codename": "change_darklangconfig", "name": "Can change dark lang config", "content_type": 139}, "model": "auth.permission", "pk": 420}, {"fields": {"codename": "delete_darklangconfig", "name": "Can delete dark lang config", "content_type": 139}, "model": "auth.permission", "pk": 421}, {"fields": {"codename": "add_embargoedcourse", "name": "Can add embargoed course", "content_type": 140}, "model": "auth.permission", "pk": 422}, {"fields": {"codename": "change_embargoedcourse", "name": "Can change embargoed course", "content_type": 140}, "model": "auth.permission", "pk": 423}, {"fields": {"codename": "delete_embargoedcourse", "name": "Can delete embargoed course", "content_type": 140}, "model": "auth.permission", "pk": 424}, {"fields": {"codename": "add_embargoedstate", "name": "Can add embargoed state", "content_type": 141}, "model": "auth.permission", "pk": 425}, {"fields": {"codename": "change_embargoedstate", "name": "Can change embargoed state", "content_type": 141}, "model": "auth.permission", "pk": 426}, {"fields": {"codename": "delete_embargoedstate", "name": "Can delete embargoed state", "content_type": 141}, "model": "auth.permission", "pk": 427}, {"fields": {"codename": "add_restrictedcourse", "name": "Can add restricted course", "content_type": 142}, "model": "auth.permission", "pk": 428}, {"fields": {"codename": "change_restrictedcourse", "name": "Can change restricted course", "content_type": 142}, "model": "auth.permission", "pk": 429}, {"fields": {"codename": "delete_restrictedcourse", "name": "Can delete restricted course", "content_type": 142}, "model": "auth.permission", "pk": 430}, {"fields": {"codename": "add_country", "name": "Can add country", "content_type": 143}, "model": "auth.permission", "pk": 431}, {"fields": {"codename": "change_country", "name": "Can change country", "content_type": 143}, "model": "auth.permission", "pk": 432}, {"fields": {"codename": "delete_country", "name": "Can delete country", "content_type": 143}, "model": "auth.permission", "pk": 433}, {"fields": {"codename": "add_countryaccessrule", "name": "Can add country access rule", "content_type": 144}, "model": "auth.permission", "pk": 434}, {"fields": {"codename": "change_countryaccessrule", "name": "Can change country access rule", "content_type": 144}, "model": "auth.permission", "pk": 435}, {"fields": {"codename": "delete_countryaccessrule", "name": "Can delete country access rule", "content_type": 144}, "model": "auth.permission", "pk": 436}, {"fields": {"codename": "add_courseaccessrulehistory", "name": "Can add course access rule history", "content_type": 145}, "model": "auth.permission", "pk": 437}, {"fields": {"codename": "change_courseaccessrulehistory", "name": "Can change course access rule history", "content_type": 145}, "model": "auth.permission", "pk": 438}, {"fields": {"codename": "delete_courseaccessrulehistory", "name": "Can delete course access rule history", "content_type": 145}, "model": "auth.permission", "pk": 439}, {"fields": {"codename": "add_ipfilter", "name": "Can add ip filter", "content_type": 146}, "model": "auth.permission", "pk": 440}, {"fields": {"codename": "change_ipfilter", "name": "Can change ip filter", "content_type": 146}, "model": "auth.permission", "pk": 441}, {"fields": {"codename": "delete_ipfilter", "name": "Can delete ip filter", "content_type": 146}, "model": "auth.permission", "pk": 442}, {"fields": {"codename": "add_coursererunstate", "name": "Can add course rerun state", "content_type": 147}, "model": "auth.permission", "pk": 443}, {"fields": {"codename": "change_coursererunstate", "name": "Can change course rerun state", "content_type": 147}, "model": "auth.permission", "pk": 444}, {"fields": {"codename": "delete_coursererunstate", "name": "Can delete course rerun state", "content_type": 147}, "model": "auth.permission", "pk": 445}, {"fields": {"codename": "add_mobileapiconfig", "name": "Can add mobile api config", "content_type": 148}, "model": "auth.permission", "pk": 446}, {"fields": {"codename": "change_mobileapiconfig", "name": "Can change mobile api config", "content_type": 148}, "model": "auth.permission", "pk": 447}, {"fields": {"codename": "delete_mobileapiconfig", "name": "Can delete mobile api config", "content_type": 148}, "model": "auth.permission", "pk": 448}, {"fields": {"codename": "add_usersocialauth", "name": "Can add user social auth", "content_type": 149}, "model": "auth.permission", "pk": 449}, {"fields": {"codename": "change_usersocialauth", "name": "Can change user social auth", "content_type": 149}, "model": "auth.permission", "pk": 450}, {"fields": {"codename": "delete_usersocialauth", "name": "Can delete user social auth", "content_type": 149}, "model": "auth.permission", "pk": 451}, {"fields": {"codename": "add_nonce", "name": "Can add nonce", "content_type": 150}, "model": "auth.permission", "pk": 452}, {"fields": {"codename": "change_nonce", "name": "Can change nonce", "content_type": 150}, "model": "auth.permission", "pk": 453}, {"fields": {"codename": "delete_nonce", "name": "Can delete nonce", "content_type": 150}, "model": "auth.permission", "pk": 454}, {"fields": {"codename": "add_association", "name": "Can add association", "content_type": 151}, "model": "auth.permission", "pk": 455}, {"fields": {"codename": "change_association", "name": "Can change association", "content_type": 151}, "model": "auth.permission", "pk": 456}, {"fields": {"codename": "delete_association", "name": "Can delete association", "content_type": 151}, "model": "auth.permission", "pk": 457}, {"fields": {"codename": "add_code", "name": "Can add code", "content_type": 152}, "model": "auth.permission", "pk": 458}, {"fields": {"codename": "change_code", "name": "Can change code", "content_type": 152}, "model": "auth.permission", "pk": 459}, {"fields": {"codename": "delete_code", "name": "Can delete code", "content_type": 152}, "model": "auth.permission", "pk": 460}, {"fields": {"codename": "add_surveyform", "name": "Can add survey form", "content_type": 153}, "model": "auth.permission", "pk": 461}, {"fields": {"codename": "change_surveyform", "name": "Can change survey form", "content_type": 153}, "model": "auth.permission", "pk": 462}, {"fields": {"codename": "delete_surveyform", "name": "Can delete survey form", "content_type": 153}, "model": "auth.permission", "pk": 463}, {"fields": {"codename": "add_surveyanswer", "name": "Can add survey answer", "content_type": 154}, "model": "auth.permission", "pk": 464}, {"fields": {"codename": "change_surveyanswer", "name": "Can change survey answer", "content_type": 154}, "model": "auth.permission", "pk": 465}, {"fields": {"codename": "delete_surveyanswer", "name": "Can delete survey answer", "content_type": 154}, "model": "auth.permission", "pk": 466}, {"fields": {"codename": "add_xblockasidesconfig", "name": "Can add x block asides config", "content_type": 155}, "model": "auth.permission", "pk": 467}, {"fields": {"codename": "change_xblockasidesconfig", "name": "Can change x block asides config", "content_type": 155}, "model": "auth.permission", "pk": 468}, {"fields": {"codename": "delete_xblockasidesconfig", "name": "Can delete x block asides config", "content_type": 155}, "model": "auth.permission", "pk": 469}, {"fields": {"codename": "add_courseoverview", "name": "Can add course overview", "content_type": 156}, "model": "auth.permission", "pk": 470}, {"fields": {"codename": "change_courseoverview", "name": "Can change course overview", "content_type": 156}, "model": "auth.permission", "pk": 471}, {"fields": {"codename": "delete_courseoverview", "name": "Can delete course overview", "content_type": 156}, "model": "auth.permission", "pk": 472}, {"fields": {"codename": "add_courseoverviewtab", "name": "Can add course overview tab", "content_type": 157}, "model": "auth.permission", "pk": 473}, {"fields": {"codename": "change_courseoverviewtab", "name": "Can change course overview tab", "content_type": 157}, "model": "auth.permission", "pk": 474}, {"fields": {"codename": "delete_courseoverviewtab", "name": "Can delete course overview tab", "content_type": 157}, "model": "auth.permission", "pk": 475}, {"fields": {"codename": "add_courseoverviewimageset", "name": "Can add course overview image set", "content_type": 158}, "model": "auth.permission", "pk": 476}, {"fields": {"codename": "change_courseoverviewimageset", "name": "Can change course overview image set", "content_type": 158}, "model": "auth.permission", "pk": 477}, {"fields": {"codename": "delete_courseoverviewimageset", "name": "Can delete course overview image set", "content_type": 158}, "model": "auth.permission", "pk": 478}, {"fields": {"codename": "add_courseoverviewimageconfig", "name": "Can add course overview image config", "content_type": 159}, "model": "auth.permission", "pk": 479}, {"fields": {"codename": "change_courseoverviewimageconfig", "name": "Can change course overview image config", "content_type": 159}, "model": "auth.permission", "pk": 480}, {"fields": {"codename": "delete_courseoverviewimageconfig", "name": "Can delete course overview image config", "content_type": 159}, "model": "auth.permission", "pk": 481}, {"fields": {"codename": "add_coursestructure", "name": "Can add course structure", "content_type": 160}, "model": "auth.permission", "pk": 482}, {"fields": {"codename": "change_coursestructure", "name": "Can change course structure", "content_type": 160}, "model": "auth.permission", "pk": 483}, {"fields": {"codename": "delete_coursestructure", "name": "Can delete course structure", "content_type": 160}, "model": "auth.permission", "pk": 484}, {"fields": {"codename": "add_corsmodel", "name": "Can add cors model", "content_type": 161}, "model": "auth.permission", "pk": 485}, {"fields": {"codename": "change_corsmodel", "name": "Can change cors model", "content_type": 161}, "model": "auth.permission", "pk": 486}, {"fields": {"codename": "delete_corsmodel", "name": "Can delete cors model", "content_type": 161}, "model": "auth.permission", "pk": 487}, {"fields": {"codename": "add_xdomainproxyconfiguration", "name": "Can add x domain proxy configuration", "content_type": 162}, "model": "auth.permission", "pk": 488}, {"fields": {"codename": "change_xdomainproxyconfiguration", "name": "Can change x domain proxy configuration", "content_type": 162}, "model": "auth.permission", "pk": 489}, {"fields": {"codename": "delete_xdomainproxyconfiguration", "name": "Can delete x domain proxy configuration", "content_type": 162}, "model": "auth.permission", "pk": 490}, {"fields": {"codename": "add_creditprovider", "name": "Can add credit provider", "content_type": 163}, "model": "auth.permission", "pk": 491}, {"fields": {"codename": "change_creditprovider", "name": "Can change credit provider", "content_type": 163}, "model": "auth.permission", "pk": 492}, {"fields": {"codename": "delete_creditprovider", "name": "Can delete credit provider", "content_type": 163}, "model": "auth.permission", "pk": 493}, {"fields": {"codename": "add_creditcourse", "name": "Can add credit course", "content_type": 164}, "model": "auth.permission", "pk": 494}, {"fields": {"codename": "change_creditcourse", "name": "Can change credit course", "content_type": 164}, "model": "auth.permission", "pk": 495}, {"fields": {"codename": "delete_creditcourse", "name": "Can delete credit course", "content_type": 164}, "model": "auth.permission", "pk": 496}, {"fields": {"codename": "add_creditrequirement", "name": "Can add credit requirement", "content_type": 165}, "model": "auth.permission", "pk": 497}, {"fields": {"codename": "change_creditrequirement", "name": "Can change credit requirement", "content_type": 165}, "model": "auth.permission", "pk": 498}, {"fields": {"codename": "delete_creditrequirement", "name": "Can delete credit requirement", "content_type": 165}, "model": "auth.permission", "pk": 499}, {"fields": {"codename": "add_historicalcreditrequirementstatus", "name": "Can add historical credit requirement status", "content_type": 166}, "model": "auth.permission", "pk": 500}, {"fields": {"codename": "change_historicalcreditrequirementstatus", "name": "Can change historical credit requirement status", "content_type": 166}, "model": "auth.permission", "pk": 501}, {"fields": {"codename": "delete_historicalcreditrequirementstatus", "name": "Can delete historical credit requirement status", "content_type": 166}, "model": "auth.permission", "pk": 502}, {"fields": {"codename": "add_creditrequirementstatus", "name": "Can add credit requirement status", "content_type": 167}, "model": "auth.permission", "pk": 503}, {"fields": {"codename": "change_creditrequirementstatus", "name": "Can change credit requirement status", "content_type": 167}, "model": "auth.permission", "pk": 504}, {"fields": {"codename": "delete_creditrequirementstatus", "name": "Can delete credit requirement status", "content_type": 167}, "model": "auth.permission", "pk": 505}, {"fields": {"codename": "add_crediteligibility", "name": "Can add credit eligibility", "content_type": 168}, "model": "auth.permission", "pk": 506}, {"fields": {"codename": "change_crediteligibility", "name": "Can change credit eligibility", "content_type": 168}, "model": "auth.permission", "pk": 507}, {"fields": {"codename": "delete_crediteligibility", "name": "Can delete credit eligibility", "content_type": 168}, "model": "auth.permission", "pk": 508}, {"fields": {"codename": "add_historicalcreditrequest", "name": "Can add historical credit request", "content_type": 169}, "model": "auth.permission", "pk": 509}, {"fields": {"codename": "change_historicalcreditrequest", "name": "Can change historical credit request", "content_type": 169}, "model": "auth.permission", "pk": 510}, {"fields": {"codename": "delete_historicalcreditrequest", "name": "Can delete historical credit request", "content_type": 169}, "model": "auth.permission", "pk": 511}, {"fields": {"codename": "add_creditrequest", "name": "Can add credit request", "content_type": 170}, "model": "auth.permission", "pk": 512}, {"fields": {"codename": "change_creditrequest", "name": "Can change credit request", "content_type": 170}, "model": "auth.permission", "pk": 513}, {"fields": {"codename": "delete_creditrequest", "name": "Can delete credit request", "content_type": 170}, "model": "auth.permission", "pk": 514}, {"fields": {"codename": "add_courseteam", "name": "Can add course team", "content_type": 171}, "model": "auth.permission", "pk": 515}, {"fields": {"codename": "change_courseteam", "name": "Can change course team", "content_type": 171}, "model": "auth.permission", "pk": 516}, {"fields": {"codename": "delete_courseteam", "name": "Can delete course team", "content_type": 171}, "model": "auth.permission", "pk": 517}, {"fields": {"codename": "add_courseteammembership", "name": "Can add course team membership", "content_type": 172}, "model": "auth.permission", "pk": 518}, {"fields": {"codename": "change_courseteammembership", "name": "Can change course team membership", "content_type": 172}, "model": "auth.permission", "pk": 519}, {"fields": {"codename": "delete_courseteammembership", "name": "Can delete course team membership", "content_type": 172}, "model": "auth.permission", "pk": 520}, {"fields": {"codename": "add_xblockdisableconfig", "name": "Can add x block disable config", "content_type": 173}, "model": "auth.permission", "pk": 521}, {"fields": {"codename": "change_xblockdisableconfig", "name": "Can change x block disable config", "content_type": 173}, "model": "auth.permission", "pk": 522}, {"fields": {"codename": "delete_xblockdisableconfig", "name": "Can delete x block disable config", "content_type": 173}, "model": "auth.permission", "pk": 523}, {"fields": {"codename": "add_bookmark", "name": "Can add bookmark", "content_type": 174}, "model": "auth.permission", "pk": 524}, {"fields": {"codename": "change_bookmark", "name": "Can change bookmark", "content_type": 174}, "model": "auth.permission", "pk": 525}, {"fields": {"codename": "delete_bookmark", "name": "Can delete bookmark", "content_type": 174}, "model": "auth.permission", "pk": 526}, {"fields": {"codename": "add_xblockcache", "name": "Can add x block cache", "content_type": 175}, "model": "auth.permission", "pk": 527}, {"fields": {"codename": "change_xblockcache", "name": "Can change x block cache", "content_type": 175}, "model": "auth.permission", "pk": 528}, {"fields": {"codename": "delete_xblockcache", "name": "Can delete x block cache", "content_type": 175}, "model": "auth.permission", "pk": 529}, {"fields": {"codename": "add_programsapiconfig", "name": "Can add programs api config", "content_type": 176}, "model": "auth.permission", "pk": 530}, {"fields": {"codename": "change_programsapiconfig", "name": "Can change programs api config", "content_type": 176}, "model": "auth.permission", "pk": 531}, {"fields": {"codename": "delete_programsapiconfig", "name": "Can delete programs api config", "content_type": 176}, "model": "auth.permission", "pk": 532}, {"fields": {"codename": "add_selfpacedconfiguration", "name": "Can add self paced configuration", "content_type": 177}, "model": "auth.permission", "pk": 533}, {"fields": {"codename": "change_selfpacedconfiguration", "name": "Can change self paced configuration", "content_type": 177}, "model": "auth.permission", "pk": 534}, {"fields": {"codename": "delete_selfpacedconfiguration", "name": "Can delete self paced configuration", "content_type": 177}, "model": "auth.permission", "pk": 535}, {"fields": {"codename": "add_kvstore", "name": "Can add kv store", "content_type": 178}, "model": "auth.permission", "pk": 536}, {"fields": {"codename": "change_kvstore", "name": "Can change kv store", "content_type": 178}, "model": "auth.permission", "pk": 537}, {"fields": {"codename": "delete_kvstore", "name": "Can delete kv store", "content_type": 178}, "model": "auth.permission", "pk": 538}, {"fields": {"codename": "add_studentitem", "name": "Can add student item", "content_type": 179}, "model": "auth.permission", "pk": 539}, {"fields": {"codename": "change_studentitem", "name": "Can change student item", "content_type": 179}, "model": "auth.permission", "pk": 540}, {"fields": {"codename": "delete_studentitem", "name": "Can delete student item", "content_type": 179}, "model": "auth.permission", "pk": 541}, {"fields": {"codename": "add_submission", "name": "Can add submission", "content_type": 180}, "model": "auth.permission", "pk": 542}, {"fields": {"codename": "change_submission", "name": "Can change submission", "content_type": 180}, "model": "auth.permission", "pk": 543}, {"fields": {"codename": "delete_submission", "name": "Can delete submission", "content_type": 180}, "model": "auth.permission", "pk": 544}, {"fields": {"codename": "add_score", "name": "Can add score", "content_type": 181}, "model": "auth.permission", "pk": 545}, {"fields": {"codename": "change_score", "name": "Can change score", "content_type": 181}, "model": "auth.permission", "pk": 546}, {"fields": {"codename": "delete_score", "name": "Can delete score", "content_type": 181}, "model": "auth.permission", "pk": 547}, {"fields": {"codename": "add_scoresummary", "name": "Can add score summary", "content_type": 182}, "model": "auth.permission", "pk": 548}, {"fields": {"codename": "change_scoresummary", "name": "Can change score summary", "content_type": 182}, "model": "auth.permission", "pk": 549}, {"fields": {"codename": "delete_scoresummary", "name": "Can delete score summary", "content_type": 182}, "model": "auth.permission", "pk": 550}, {"fields": {"codename": "add_scoreannotation", "name": "Can add score annotation", "content_type": 183}, "model": "auth.permission", "pk": 551}, {"fields": {"codename": "change_scoreannotation", "name": "Can change score annotation", "content_type": 183}, "model": "auth.permission", "pk": 552}, {"fields": {"codename": "delete_scoreannotation", "name": "Can delete score annotation", "content_type": 183}, "model": "auth.permission", "pk": 553}, {"fields": {"codename": "add_rubric", "name": "Can add rubric", "content_type": 184}, "model": "auth.permission", "pk": 554}, {"fields": {"codename": "change_rubric", "name": "Can change rubric", "content_type": 184}, "model": "auth.permission", "pk": 555}, {"fields": {"codename": "delete_rubric", "name": "Can delete rubric", "content_type": 184}, "model": "auth.permission", "pk": 556}, {"fields": {"codename": "add_criterion", "name": "Can add criterion", "content_type": 185}, "model": "auth.permission", "pk": 557}, {"fields": {"codename": "change_criterion", "name": "Can change criterion", "content_type": 185}, "model": "auth.permission", "pk": 558}, {"fields": {"codename": "delete_criterion", "name": "Can delete criterion", "content_type": 185}, "model": "auth.permission", "pk": 559}, {"fields": {"codename": "add_criterionoption", "name": "Can add criterion option", "content_type": 186}, "model": "auth.permission", "pk": 560}, {"fields": {"codename": "change_criterionoption", "name": "Can change criterion option", "content_type": 186}, "model": "auth.permission", "pk": 561}, {"fields": {"codename": "delete_criterionoption", "name": "Can delete criterion option", "content_type": 186}, "model": "auth.permission", "pk": 562}, {"fields": {"codename": "add_assessment", "name": "Can add assessment", "content_type": 187}, "model": "auth.permission", "pk": 563}, {"fields": {"codename": "change_assessment", "name": "Can change assessment", "content_type": 187}, "model": "auth.permission", "pk": 564}, {"fields": {"codename": "delete_assessment", "name": "Can delete assessment", "content_type": 187}, "model": "auth.permission", "pk": 565}, {"fields": {"codename": "add_assessmentpart", "name": "Can add assessment part", "content_type": 188}, "model": "auth.permission", "pk": 566}, {"fields": {"codename": "change_assessmentpart", "name": "Can change assessment part", "content_type": 188}, "model": "auth.permission", "pk": 567}, {"fields": {"codename": "delete_assessmentpart", "name": "Can delete assessment part", "content_type": 188}, "model": "auth.permission", "pk": 568}, {"fields": {"codename": "add_assessmentfeedbackoption", "name": "Can add assessment feedback option", "content_type": 189}, "model": "auth.permission", "pk": 569}, {"fields": {"codename": "change_assessmentfeedbackoption", "name": "Can change assessment feedback option", "content_type": 189}, "model": "auth.permission", "pk": 570}, {"fields": {"codename": "delete_assessmentfeedbackoption", "name": "Can delete assessment feedback option", "content_type": 189}, "model": "auth.permission", "pk": 571}, {"fields": {"codename": "add_assessmentfeedback", "name": "Can add assessment feedback", "content_type": 190}, "model": "auth.permission", "pk": 572}, {"fields": {"codename": "change_assessmentfeedback", "name": "Can change assessment feedback", "content_type": 190}, "model": "auth.permission", "pk": 573}, {"fields": {"codename": "delete_assessmentfeedback", "name": "Can delete assessment feedback", "content_type": 190}, "model": "auth.permission", "pk": 574}, {"fields": {"codename": "add_peerworkflow", "name": "Can add peer workflow", "content_type": 191}, "model": "auth.permission", "pk": 575}, {"fields": {"codename": "change_peerworkflow", "name": "Can change peer workflow", "content_type": 191}, "model": "auth.permission", "pk": 576}, {"fields": {"codename": "delete_peerworkflow", "name": "Can delete peer workflow", "content_type": 191}, "model": "auth.permission", "pk": 577}, {"fields": {"codename": "add_peerworkflowitem", "name": "Can add peer workflow item", "content_type": 192}, "model": "auth.permission", "pk": 578}, {"fields": {"codename": "change_peerworkflowitem", "name": "Can change peer workflow item", "content_type": 192}, "model": "auth.permission", "pk": 579}, {"fields": {"codename": "delete_peerworkflowitem", "name": "Can delete peer workflow item", "content_type": 192}, "model": "auth.permission", "pk": 580}, {"fields": {"codename": "add_trainingexample", "name": "Can add training example", "content_type": 193}, "model": "auth.permission", "pk": 581}, {"fields": {"codename": "change_trainingexample", "name": "Can change training example", "content_type": 193}, "model": "auth.permission", "pk": 582}, {"fields": {"codename": "delete_trainingexample", "name": "Can delete training example", "content_type": 193}, "model": "auth.permission", "pk": 583}, {"fields": {"codename": "add_studenttrainingworkflow", "name": "Can add student training workflow", "content_type": 194}, "model": "auth.permission", "pk": 584}, {"fields": {"codename": "change_studenttrainingworkflow", "name": "Can change student training workflow", "content_type": 194}, "model": "auth.permission", "pk": 585}, {"fields": {"codename": "delete_studenttrainingworkflow", "name": "Can delete student training workflow", "content_type": 194}, "model": "auth.permission", "pk": 586}, {"fields": {"codename": "add_studenttrainingworkflowitem", "name": "Can add student training workflow item", "content_type": 195}, "model": "auth.permission", "pk": 587}, {"fields": {"codename": "change_studenttrainingworkflowitem", "name": "Can change student training workflow item", "content_type": 195}, "model": "auth.permission", "pk": 588}, {"fields": {"codename": "delete_studenttrainingworkflowitem", "name": "Can delete student training workflow item", "content_type": 195}, "model": "auth.permission", "pk": 589}, {"fields": {"codename": "add_aiclassifierset", "name": "Can add ai classifier set", "content_type": 196}, "model": "auth.permission", "pk": 590}, {"fields": {"codename": "change_aiclassifierset", "name": "Can change ai classifier set", "content_type": 196}, "model": "auth.permission", "pk": 591}, {"fields": {"codename": "delete_aiclassifierset", "name": "Can delete ai classifier set", "content_type": 196}, "model": "auth.permission", "pk": 592}, {"fields": {"codename": "add_aiclassifier", "name": "Can add ai classifier", "content_type": 197}, "model": "auth.permission", "pk": 593}, {"fields": {"codename": "change_aiclassifier", "name": "Can change ai classifier", "content_type": 197}, "model": "auth.permission", "pk": 594}, {"fields": {"codename": "delete_aiclassifier", "name": "Can delete ai classifier", "content_type": 197}, "model": "auth.permission", "pk": 595}, {"fields": {"codename": "add_aitrainingworkflow", "name": "Can add ai training workflow", "content_type": 198}, "model": "auth.permission", "pk": 596}, {"fields": {"codename": "change_aitrainingworkflow", "name": "Can change ai training workflow", "content_type": 198}, "model": "auth.permission", "pk": 597}, {"fields": {"codename": "delete_aitrainingworkflow", "name": "Can delete ai training workflow", "content_type": 198}, "model": "auth.permission", "pk": 598}, {"fields": {"codename": "add_aigradingworkflow", "name": "Can add ai grading workflow", "content_type": 199}, "model": "auth.permission", "pk": 599}, {"fields": {"codename": "change_aigradingworkflow", "name": "Can change ai grading workflow", "content_type": 199}, "model": "auth.permission", "pk": 600}, {"fields": {"codename": "delete_aigradingworkflow", "name": "Can delete ai grading workflow", "content_type": 199}, "model": "auth.permission", "pk": 601}, {"fields": {"codename": "add_assessmentworkflow", "name": "Can add assessment workflow", "content_type": 200}, "model": "auth.permission", "pk": 602}, {"fields": {"codename": "change_assessmentworkflow", "name": "Can change assessment workflow", "content_type": 200}, "model": "auth.permission", "pk": 603}, {"fields": {"codename": "delete_assessmentworkflow", "name": "Can delete assessment workflow", "content_type": 200}, "model": "auth.permission", "pk": 604}, {"fields": {"codename": "add_assessmentworkflowstep", "name": "Can add assessment workflow step", "content_type": 201}, "model": "auth.permission", "pk": 605}, {"fields": {"codename": "change_assessmentworkflowstep", "name": "Can change assessment workflow step", "content_type": 201}, "model": "auth.permission", "pk": 606}, {"fields": {"codename": "delete_assessmentworkflowstep", "name": "Can delete assessment workflow step", "content_type": 201}, "model": "auth.permission", "pk": 607}, {"fields": {"codename": "add_assessmentworkflowcancellation", "name": "Can add assessment workflow cancellation", "content_type": 202}, "model": "auth.permission", "pk": 608}, {"fields": {"codename": "change_assessmentworkflowcancellation", "name": "Can change assessment workflow cancellation", "content_type": 202}, "model": "auth.permission", "pk": 609}, {"fields": {"codename": "delete_assessmentworkflowcancellation", "name": "Can delete assessment workflow cancellation", "content_type": 202}, "model": "auth.permission", "pk": 610}, {"fields": {"codename": "add_profile", "name": "Can add profile", "content_type": 203}, "model": "auth.permission", "pk": 611}, {"fields": {"codename": "change_profile", "name": "Can change profile", "content_type": 203}, "model": "auth.permission", "pk": 612}, {"fields": {"codename": "delete_profile", "name": "Can delete profile", "content_type": 203}, "model": "auth.permission", "pk": 613}, {"fields": {"codename": "add_video", "name": "Can add video", "content_type": 204}, "model": "auth.permission", "pk": 614}, {"fields": {"codename": "change_video", "name": "Can change video", "content_type": 204}, "model": "auth.permission", "pk": 615}, {"fields": {"codename": "delete_video", "name": "Can delete video", "content_type": 204}, "model": "auth.permission", "pk": 616}, {"fields": {"codename": "add_coursevideo", "name": "Can add course video", "content_type": 205}, "model": "auth.permission", "pk": 617}, {"fields": {"codename": "change_coursevideo", "name": "Can change course video", "content_type": 205}, "model": "auth.permission", "pk": 618}, {"fields": {"codename": "delete_coursevideo", "name": "Can delete course video", "content_type": 205}, "model": "auth.permission", "pk": 619}, {"fields": {"codename": "add_encodedvideo", "name": "Can add encoded video", "content_type": 206}, "model": "auth.permission", "pk": 620}, {"fields": {"codename": "change_encodedvideo", "name": "Can change encoded video", "content_type": 206}, "model": "auth.permission", "pk": 621}, {"fields": {"codename": "delete_encodedvideo", "name": "Can delete encoded video", "content_type": 206}, "model": "auth.permission", "pk": 622}, {"fields": {"codename": "add_subtitle", "name": "Can add subtitle", "content_type": 207}, "model": "auth.permission", "pk": 623}, {"fields": {"codename": "change_subtitle", "name": "Can change subtitle", "content_type": 207}, "model": "auth.permission", "pk": 624}, {"fields": {"codename": "delete_subtitle", "name": "Can delete subtitle", "content_type": 207}, "model": "auth.permission", "pk": 625}, {"fields": {"codename": "add_milestone", "name": "Can add milestone", "content_type": 208}, "model": "auth.permission", "pk": 626}, {"fields": {"codename": "change_milestone", "name": "Can change milestone", "content_type": 208}, "model": "auth.permission", "pk": 627}, {"fields": {"codename": "delete_milestone", "name": "Can delete milestone", "content_type": 208}, "model": "auth.permission", "pk": 628}, {"fields": {"codename": "add_milestonerelationshiptype", "name": "Can add milestone relationship type", "content_type": 209}, "model": "auth.permission", "pk": 629}, {"fields": {"codename": "change_milestonerelationshiptype", "name": "Can change milestone relationship type", "content_type": 209}, "model": "auth.permission", "pk": 630}, {"fields": {"codename": "delete_milestonerelationshiptype", "name": "Can delete milestone relationship type", "content_type": 209}, "model": "auth.permission", "pk": 631}, {"fields": {"codename": "add_coursemilestone", "name": "Can add course milestone", "content_type": 210}, "model": "auth.permission", "pk": 632}, {"fields": {"codename": "change_coursemilestone", "name": "Can change course milestone", "content_type": 210}, "model": "auth.permission", "pk": 633}, {"fields": {"codename": "delete_coursemilestone", "name": "Can delete course milestone", "content_type": 210}, "model": "auth.permission", "pk": 634}, {"fields": {"codename": "add_coursecontentmilestone", "name": "Can add course content milestone", "content_type": 211}, "model": "auth.permission", "pk": 635}, {"fields": {"codename": "change_coursecontentmilestone", "name": "Can change course content milestone", "content_type": 211}, "model": "auth.permission", "pk": 636}, {"fields": {"codename": "delete_coursecontentmilestone", "name": "Can delete course content milestone", "content_type": 211}, "model": "auth.permission", "pk": 637}, {"fields": {"codename": "add_usermilestone", "name": "Can add user milestone", "content_type": 212}, "model": "auth.permission", "pk": 638}, {"fields": {"codename": "change_usermilestone", "name": "Can change user milestone", "content_type": 212}, "model": "auth.permission", "pk": 639}, {"fields": {"codename": "delete_usermilestone", "name": "Can delete user milestone", "content_type": 212}, "model": "auth.permission", "pk": 640}, {"fields": {"codename": "add_proctoredexam", "name": "Can add proctored exam", "content_type": 213}, "model": "auth.permission", "pk": 641}, {"fields": {"codename": "change_proctoredexam", "name": "Can change proctored exam", "content_type": 213}, "model": "auth.permission", "pk": 642}, {"fields": {"codename": "delete_proctoredexam", "name": "Can delete proctored exam", "content_type": 213}, "model": "auth.permission", "pk": 643}, {"fields": {"codename": "add_proctoredexamreviewpolicy", "name": "Can add Proctored exam review policy", "content_type": 214}, "model": "auth.permission", "pk": 644}, {"fields": {"codename": "change_proctoredexamreviewpolicy", "name": "Can change Proctored exam review policy", "content_type": 214}, "model": "auth.permission", "pk": 645}, {"fields": {"codename": "delete_proctoredexamreviewpolicy", "name": "Can delete Proctored exam review policy", "content_type": 214}, "model": "auth.permission", "pk": 646}, {"fields": {"codename": "add_proctoredexamreviewpolicyhistory", "name": "Can add proctored exam review policy history", "content_type": 215}, "model": "auth.permission", "pk": 647}, {"fields": {"codename": "change_proctoredexamreviewpolicyhistory", "name": "Can change proctored exam review policy history", "content_type": 215}, "model": "auth.permission", "pk": 648}, {"fields": {"codename": "delete_proctoredexamreviewpolicyhistory", "name": "Can delete proctored exam review policy history", "content_type": 215}, "model": "auth.permission", "pk": 649}, {"fields": {"codename": "add_proctoredexamstudentattempt", "name": "Can add proctored exam attempt", "content_type": 216}, "model": "auth.permission", "pk": 650}, {"fields": {"codename": "change_proctoredexamstudentattempt", "name": "Can change proctored exam attempt", "content_type": 216}, "model": "auth.permission", "pk": 651}, {"fields": {"codename": "delete_proctoredexamstudentattempt", "name": "Can delete proctored exam attempt", "content_type": 216}, "model": "auth.permission", "pk": 652}, {"fields": {"codename": "add_proctoredexamstudentattempthistory", "name": "Can add proctored exam attempt history", "content_type": 217}, "model": "auth.permission", "pk": 653}, {"fields": {"codename": "change_proctoredexamstudentattempthistory", "name": "Can change proctored exam attempt history", "content_type": 217}, "model": "auth.permission", "pk": 654}, {"fields": {"codename": "delete_proctoredexamstudentattempthistory", "name": "Can delete proctored exam attempt history", "content_type": 217}, "model": "auth.permission", "pk": 655}, {"fields": {"codename": "add_proctoredexamstudentallowance", "name": "Can add proctored allowance", "content_type": 218}, "model": "auth.permission", "pk": 656}, {"fields": {"codename": "change_proctoredexamstudentallowance", "name": "Can change proctored allowance", "content_type": 218}, "model": "auth.permission", "pk": 657}, {"fields": {"codename": "delete_proctoredexamstudentallowance", "name": "Can delete proctored allowance", "content_type": 218}, "model": "auth.permission", "pk": 658}, {"fields": {"codename": "add_proctoredexamstudentallowancehistory", "name": "Can add proctored allowance history", "content_type": 219}, "model": "auth.permission", "pk": 659}, {"fields": {"codename": "change_proctoredexamstudentallowancehistory", "name": "Can change proctored allowance history", "content_type": 219}, "model": "auth.permission", "pk": 660}, {"fields": {"codename": "delete_proctoredexamstudentallowancehistory", "name": "Can delete proctored allowance history", "content_type": 219}, "model": "auth.permission", "pk": 661}, {"fields": {"codename": "add_proctoredexamsoftwaresecurereview", "name": "Can add Proctored exam software secure review", "content_type": 220}, "model": "auth.permission", "pk": 662}, {"fields": {"codename": "change_proctoredexamsoftwaresecurereview", "name": "Can change Proctored exam software secure review", "content_type": 220}, "model": "auth.permission", "pk": 663}, {"fields": {"codename": "delete_proctoredexamsoftwaresecurereview", "name": "Can delete Proctored exam software secure review", "content_type": 220}, "model": "auth.permission", "pk": 664}, {"fields": {"codename": "add_proctoredexamsoftwaresecurereviewhistory", "name": "Can add Proctored exam review archive", "content_type": 221}, "model": "auth.permission", "pk": 665}, {"fields": {"codename": "change_proctoredexamsoftwaresecurereviewhistory", "name": "Can change Proctored exam review archive", "content_type": 221}, "model": "auth.permission", "pk": 666}, {"fields": {"codename": "delete_proctoredexamsoftwaresecurereviewhistory", "name": "Can delete Proctored exam review archive", "content_type": 221}, "model": "auth.permission", "pk": 667}, {"fields": {"codename": "add_proctoredexamsoftwaresecurecomment", "name": "Can add proctored exam software secure comment", "content_type": 222}, "model": "auth.permission", "pk": 668}, {"fields": {"codename": "change_proctoredexamsoftwaresecurecomment", "name": "Can change proctored exam software secure comment", "content_type": 222}, "model": "auth.permission", "pk": 669}, {"fields": {"codename": "delete_proctoredexamsoftwaresecurecomment", "name": "Can delete proctored exam software secure comment", "content_type": 222}, "model": "auth.permission", "pk": 670}, {"fields": {"codename": "add_organization", "name": "Can add organization", "content_type": 223}, "model": "auth.permission", "pk": 671}, {"fields": {"codename": "change_organization", "name": "Can change organization", "content_type": 223}, "model": "auth.permission", "pk": 672}, {"fields": {"codename": "delete_organization", "name": "Can delete organization", "content_type": 223}, "model": "auth.permission", "pk": 673}, {"fields": {"codename": "add_organizationcourse", "name": "Can add Link Course", "content_type": 224}, "model": "auth.permission", "pk": 674}, {"fields": {"codename": "change_organizationcourse", "name": "Can change Link Course", "content_type": 224}, "model": "auth.permission", "pk": 675}, {"fields": {"codename": "delete_organizationcourse", "name": "Can delete Link Course", "content_type": 224}, "model": "auth.permission", "pk": 676}, {"fields": {"codename": "add_articleplugin", "name": "Can add article plugin", "content_type": 225}, "model": "auth.permission", "pk": 677}, {"fields": {"codename": "change_articleplugin", "name": "Can change article plugin", "content_type": 225}, "model": "auth.permission", "pk": 678}, {"fields": {"codename": "delete_articleplugin", "name": "Can delete article plugin", "content_type": 225}, "model": "auth.permission", "pk": 679}, {"fields": {"codename": "add_reusableplugin", "name": "Can add reusable plugin", "content_type": 226}, "model": "auth.permission", "pk": 680}, {"fields": {"codename": "change_reusableplugin", "name": "Can change reusable plugin", "content_type": 226}, "model": "auth.permission", "pk": 681}, {"fields": {"codename": "delete_reusableplugin", "name": "Can delete reusable plugin", "content_type": 226}, "model": "auth.permission", "pk": 682}, {"fields": {"codename": "add_simpleplugin", "name": "Can add simple plugin", "content_type": 227}, "model": "auth.permission", "pk": 683}, {"fields": {"codename": "change_simpleplugin", "name": "Can change simple plugin", "content_type": 227}, "model": "auth.permission", "pk": 684}, {"fields": {"codename": "delete_simpleplugin", "name": "Can delete simple plugin", "content_type": 227}, "model": "auth.permission", "pk": 685}, {"fields": {"codename": "add_revisionplugin", "name": "Can add revision plugin", "content_type": 228}, "model": "auth.permission", "pk": 686}, {"fields": {"codename": "change_revisionplugin", "name": "Can change revision plugin", "content_type": 228}, "model": "auth.permission", "pk": 687}, {"fields": {"codename": "delete_revisionplugin", "name": "Can delete revision plugin", "content_type": 228}, "model": "auth.permission", "pk": 688}, {"fields": {"codename": "add_revisionpluginrevision", "name": "Can add revision plugin revision", "content_type": 229}, "model": "auth.permission", "pk": 689}, {"fields": {"codename": "change_revisionpluginrevision", "name": "Can change revision plugin revision", "content_type": 229}, "model": "auth.permission", "pk": 690}, {"fields": {"codename": "delete_revisionpluginrevision", "name": "Can delete revision plugin revision", "content_type": 229}, "model": "auth.permission", "pk": 691}, {"fields": {"codename": "add_image", "name": "Can add image", "content_type": 230}, "model": "auth.permission", "pk": 692}, {"fields": {"codename": "change_image", "name": "Can change image", "content_type": 230}, "model": "auth.permission", "pk": 693}, {"fields": {"codename": "delete_image", "name": "Can delete image", "content_type": 230}, "model": "auth.permission", "pk": 694}, {"fields": {"codename": "add_imagerevision", "name": "Can add image revision", "content_type": 231}, "model": "auth.permission", "pk": 695}, {"fields": {"codename": "change_imagerevision", "name": "Can change image revision", "content_type": 231}, "model": "auth.permission", "pk": 696}, {"fields": {"codename": "delete_imagerevision", "name": "Can delete image revision", "content_type": 231}, "model": "auth.permission", "pk": 697}, {"fields": {"codename": "add_attachment", "name": "Can add attachment", "content_type": 232}, "model": "auth.permission", "pk": 698}, {"fields": {"codename": "change_attachment", "name": "Can change attachment", "content_type": 232}, "model": "auth.permission", "pk": 699}, {"fields": {"codename": "delete_attachment", "name": "Can delete attachment", "content_type": 232}, "model": "auth.permission", "pk": 700}, {"fields": {"codename": "add_attachmentrevision", "name": "Can add attachment revision", "content_type": 233}, "model": "auth.permission", "pk": 701}, {"fields": {"codename": "change_attachmentrevision", "name": "Can change attachment revision", "content_type": 233}, "model": "auth.permission", "pk": 702}, {"fields": {"codename": "delete_attachmentrevision", "name": "Can delete attachment revision", "content_type": 233}, "model": "auth.permission", "pk": 703}, {"fields": {"codename": "add_videouploadconfig", "name": "Can add video upload config", "content_type": 234}, "model": "auth.permission", "pk": 704}, {"fields": {"codename": "change_videouploadconfig", "name": "Can change video upload config", "content_type": 234}, "model": "auth.permission", "pk": 705}, {"fields": {"codename": "delete_videouploadconfig", "name": "Can delete video upload config", "content_type": 234}, "model": "auth.permission", "pk": 706}, {"fields": {"codename": "add_pushnotificationconfig", "name": "Can add push notification config", "content_type": 235}, "model": "auth.permission", "pk": 707}, {"fields": {"codename": "change_pushnotificationconfig", "name": "Can change push notification config", "content_type": 235}, "model": "auth.permission", "pk": 708}, {"fields": {"codename": "delete_pushnotificationconfig", "name": "Can delete push notification config", "content_type": 235}, "model": "auth.permission", "pk": 709}, {"fields": {"codename": "add_coursecreator", "name": "Can add course creator", "content_type": 236}, "model": "auth.permission", "pk": 710}, {"fields": {"codename": "change_coursecreator", "name": "Can change course creator", "content_type": 236}, "model": "auth.permission", "pk": 711}, {"fields": {"codename": "delete_coursecreator", "name": "Can delete course creator", "content_type": 236}, "model": "auth.permission", "pk": 712}, {"fields": {"codename": "add_studioconfig", "name": "Can add studio config", "content_type": 237}, "model": "auth.permission", "pk": 713}, {"fields": {"codename": "change_studioconfig", "name": "Can change studio config", "content_type": 237}, "model": "auth.permission", "pk": 714}, {"fields": {"codename": "delete_studioconfig", "name": "Can delete studio config", "content_type": 237}, "model": "auth.permission", "pk": 715}] \ No newline at end of file diff --git a/common/test/db_cache/bok_choy_migrations_data.sql b/common/test/db_cache/bok_choy_migrations_data.sql index d007c51f3a..0330279c85 100644 --- a/common/test/db_cache/bok_choy_migrations_data.sql +++ b/common/test/db_cache/bok_choy_migrations_data.sql @@ -21,7 +21,7 @@ LOCK TABLES `django_migrations` WRITE; /*!40000 ALTER TABLE `django_migrations` DISABLE KEYS */; -INSERT INTO `django_migrations` VALUES (1,'contenttypes','0001_initial','2015-12-31 14:56:00.696699'),(2,'auth','0001_initial','2015-12-31 14:56:01.170600'),(3,'admin','0001_initial','2015-12-31 14:56:01.299892'),(4,'assessment','0001_initial','2015-12-31 14:56:06.155369'),(5,'contenttypes','0002_remove_content_type_name','2015-12-31 14:56:06.409538'),(6,'auth','0002_alter_permission_name_max_length','2015-12-31 14:56:06.515068'),(7,'auth','0003_alter_user_email_max_length','2015-12-31 14:56:06.610329'),(8,'auth','0004_alter_user_username_opts','2015-12-31 14:56:06.687373'),(9,'auth','0005_alter_user_last_login_null','2015-12-31 14:56:06.813648'),(10,'auth','0006_require_contenttypes_0002','2015-12-31 14:56:06.826022'),(11,'bookmarks','0001_initial','2015-12-31 14:56:07.366960'),(12,'branding','0001_initial','2015-12-31 14:56:07.712825'),(13,'bulk_email','0001_initial','2015-12-31 14:56:08.342193'),(14,'bulk_email','0002_data__load_course_email_template','2015-12-31 14:56:08.505805'),(15,'instructor_task','0001_initial','2015-12-31 14:56:08.912332'),(16,'certificates','0001_initial','2015-12-31 14:56:11.217554'),(17,'certificates','0002_data__certificatehtmlviewconfiguration_data','2015-12-31 14:56:11.244003'),(18,'certificates','0003_data__default_modes','2015-12-31 14:56:11.290756'),(19,'certificates','0004_certificategenerationhistory','2015-12-31 14:56:11.491562'),(20,'certificates','0005_auto_20151208_0801','2015-12-31 14:56:11.626958'),(21,'certificates','0006_certificatetemplateasset_asset_slug','2015-12-31 14:56:11.720518'),(22,'commerce','0001_data__add_ecommerce_service_user','2015-12-31 14:56:11.757252'),(23,'cors_csrf','0001_initial','2015-12-31 14:56:11.926018'),(24,'course_action_state','0001_initial','2015-12-31 14:56:12.330811'),(25,'course_groups','0001_initial','2015-12-31 14:56:13.807718'),(26,'course_modes','0001_initial','2015-12-31 14:56:13.997693'),(27,'course_modes','0002_coursemode_expiration_datetime_is_explicit','2015-12-31 14:56:14.093722'),(28,'course_modes','0003_auto_20151113_1443','2015-12-31 14:56:14.131388'),(29,'course_modes','0004_auto_20151113_1457','2015-12-31 14:56:14.335292'),(30,'course_modes','0005_auto_20151217_0958','2015-12-31 14:56:14.495286'),(31,'course_overviews','0001_initial','2015-12-31 14:56:14.630819'),(32,'course_overviews','0002_add_course_catalog_fields','2015-12-31 14:56:14.982549'),(33,'course_overviews','0003_courseoverviewgeneratedhistory','2015-12-31 14:56:15.030490'),(34,'course_overviews','0004_courseoverview_org','2015-12-31 14:56:15.113722'),(35,'course_overviews','0005_delete_courseoverviewgeneratedhistory','2015-12-31 14:56:15.143943'),(36,'course_overviews','0006_courseoverviewimageset','2015-12-31 14:56:15.254940'),(37,'course_overviews','0007_courseoverviewimageconfig','2015-12-31 14:56:15.450756'),(38,'course_structures','0001_initial','2015-12-31 14:56:15.506341'),(39,'courseware','0001_initial','2015-12-31 14:56:18.346538'),(40,'credit','0001_initial','2015-12-31 14:56:20.423456'),(41,'dark_lang','0001_initial','2015-12-31 14:56:20.691321'),(42,'dark_lang','0002_data__enable_on_install','2015-12-31 14:56:20.722202'),(43,'default','0001_initial','2015-12-31 14:56:21.476817'),(44,'default','0002_add_related_name','2015-12-31 14:56:21.732324'),(45,'default','0003_alter_email_max_length','2015-12-31 14:56:21.814437'),(46,'django_comment_common','0001_initial','2015-12-31 14:56:22.536942'),(47,'django_notify','0001_initial','2015-12-31 14:56:24.596629'),(48,'django_openid_auth','0001_initial','2015-12-31 14:56:24.972976'),(49,'edx_proctoring','0001_initial','2015-12-31 14:56:30.301516'),(50,'edx_proctoring','0002_proctoredexamstudentattempt_is_status_acknowledged','2015-12-31 14:56:30.658999'),(51,'edxval','0001_initial','2015-12-31 14:56:31.901318'),(52,'edxval','0002_data__default_profiles','2015-12-31 14:56:31.985614'),(53,'embargo','0001_initial','2015-12-31 14:56:33.476417'),(54,'embargo','0002_data__add_countries','2015-12-31 14:56:34.169435'),(55,'external_auth','0001_initial','2015-12-31 14:56:34.976587'),(56,'lms_xblock','0001_initial','2015-12-31 14:56:35.342783'),(57,'milestones','0001_initial','2015-12-31 14:56:37.717602'),(58,'milestones','0002_data__seed_relationship_types','2015-12-31 14:56:37.771111'),(59,'mobile_api','0001_initial','2015-12-31 14:56:38.159420'),(60,'notes','0001_initial','2015-12-31 14:56:38.666731'),(61,'oauth2','0001_initial','2015-12-31 14:56:40.986260'),(62,'oauth2_provider','0001_initial','2015-12-31 14:56:41.385485'),(63,'oauth_provider','0001_initial','2015-12-31 14:56:42.439047'),(64,'organizations','0001_initial','2015-12-31 14:56:42.776842'),(65,'programs','0001_initial','2015-12-31 14:56:43.190769'),(66,'programs','0002_programsapiconfig_cache_ttl','2015-12-31 14:56:43.616792'),(67,'programs','0003_auto_20151120_1613','2015-12-31 14:56:45.292878'),(68,'self_paced','0001_initial','2015-12-31 14:56:45.742961'),(69,'sessions','0001_initial','2015-12-31 14:56:45.834774'),(70,'student','0001_initial','2015-12-31 14:57:00.707670'),(71,'shoppingcart','0001_initial','2015-12-31 14:57:15.041286'),(72,'shoppingcart','0002_auto_20151208_1034','2015-12-31 14:57:16.163983'),(73,'shoppingcart','0003_auto_20151217_0958','2015-12-31 14:57:17.314819'),(74,'sites','0001_initial','2015-12-31 14:57:17.389091'),(75,'splash','0001_initial','2015-12-31 14:57:18.037349'),(76,'status','0001_initial','2015-12-31 14:57:19.826410'),(77,'student','0002_auto_20151208_1034','2015-12-31 14:57:21.147521'),(78,'submissions','0001_initial','2015-12-31 14:57:23.354858'),(79,'submissions','0002_auto_20151119_0913','2015-12-31 14:57:23.620278'),(80,'survey','0001_initial','2015-12-31 14:57:24.698404'),(81,'teams','0001_initial','2015-12-31 14:57:26.825637'),(82,'third_party_auth','0001_initial','2015-12-31 14:57:30.487810'),(83,'track','0001_initial','2015-12-31 14:57:30.566408'),(84,'user_api','0001_initial','2015-12-31 14:57:35.956967'),(85,'util','0001_initial','2015-12-31 14:57:36.691350'),(86,'util','0002_data__default_rate_limit_config','2015-12-31 14:57:36.747714'),(87,'verify_student','0001_initial','2015-12-31 14:57:46.279873'),(88,'verify_student','0002_auto_20151124_1024','2015-12-31 14:57:47.187739'),(89,'verify_student','0003_auto_20151113_1443','2015-12-31 14:57:47.983638'),(90,'wiki','0001_initial','2015-12-31 14:58:12.991851'),(91,'wiki','0002_remove_article_subscription','2015-12-31 14:58:13.055035'),(92,'workflow','0001_initial','2015-12-31 14:58:13.504017'),(93,'xblock_django','0001_initial','2015-12-31 14:58:14.361722'),(94,'contentstore','0001_initial','2015-12-31 14:58:40.752928'),(95,'course_creators','0001_initial','2015-12-31 14:58:40.919957'),(96,'xblock_config','0001_initial','2015-12-31 14:58:41.443731'); +INSERT INTO `django_migrations` VALUES (1,'contenttypes','0001_initial','2015-12-31 14:56:00.696699'),(2,'auth','0001_initial','2015-12-31 14:56:01.170600'),(3,'admin','0001_initial','2015-12-31 14:56:01.299892'),(4,'assessment','0001_initial','2015-12-31 14:56:06.155369'),(5,'contenttypes','0002_remove_content_type_name','2015-12-31 14:56:06.409538'),(6,'auth','0002_alter_permission_name_max_length','2015-12-31 14:56:06.515068'),(7,'auth','0003_alter_user_email_max_length','2015-12-31 14:56:06.610329'),(8,'auth','0004_alter_user_username_opts','2015-12-31 14:56:06.687373'),(9,'auth','0005_alter_user_last_login_null','2015-12-31 14:56:06.813648'),(10,'auth','0006_require_contenttypes_0002','2015-12-31 14:56:06.826022'),(11,'bookmarks','0001_initial','2015-12-31 14:56:07.366960'),(12,'branding','0001_initial','2015-12-31 14:56:07.712825'),(13,'bulk_email','0001_initial','2015-12-31 14:56:08.342193'),(14,'bulk_email','0002_data__load_course_email_template','2015-12-31 14:56:08.505805'),(15,'instructor_task','0001_initial','2015-12-31 14:56:08.912332'),(16,'certificates','0001_initial','2015-12-31 14:56:11.217554'),(17,'certificates','0002_data__certificatehtmlviewconfiguration_data','2015-12-31 14:56:11.244003'),(18,'certificates','0003_data__default_modes','2015-12-31 14:56:11.290756'),(19,'certificates','0004_certificategenerationhistory','2015-12-31 14:56:11.491562'),(20,'certificates','0005_auto_20151208_0801','2015-12-31 14:56:11.626958'),(21,'certificates','0006_certificatetemplateasset_asset_slug','2015-12-31 14:56:11.720518'),(22,'commerce','0001_data__add_ecommerce_service_user','2015-12-31 14:56:11.757252'),(23,'cors_csrf','0001_initial','2015-12-31 14:56:11.926018'),(24,'course_action_state','0001_initial','2015-12-31 14:56:12.330811'),(25,'course_groups','0001_initial','2015-12-31 14:56:13.807718'),(26,'course_modes','0001_initial','2015-12-31 14:56:13.997693'),(27,'course_modes','0002_coursemode_expiration_datetime_is_explicit','2015-12-31 14:56:14.093722'),(28,'course_modes','0003_auto_20151113_1443','2015-12-31 14:56:14.131388'),(29,'course_modes','0004_auto_20151113_1457','2015-12-31 14:56:14.335292'),(30,'course_modes','0005_auto_20151217_0958','2015-12-31 14:56:14.495286'),(31,'course_overviews','0001_initial','2015-12-31 14:56:14.630819'),(32,'course_overviews','0002_add_course_catalog_fields','2015-12-31 14:56:14.982549'),(33,'course_overviews','0003_courseoverviewgeneratedhistory','2015-12-31 14:56:15.030490'),(34,'course_overviews','0004_courseoverview_org','2015-12-31 14:56:15.113722'),(35,'course_overviews','0005_delete_courseoverviewgeneratedhistory','2015-12-31 14:56:15.143943'),(36,'course_overviews','0006_courseoverviewimageset','2015-12-31 14:56:15.254940'),(37,'course_overviews','0007_courseoverviewimageconfig','2015-12-31 14:56:15.450756'),(38,'course_structures','0001_initial','2015-12-31 14:56:15.506341'),(39,'courseware','0001_initial','2015-12-31 14:56:18.346538'),(40,'credit','0001_initial','2015-12-31 14:56:20.423456'),(41,'dark_lang','0001_initial','2015-12-31 14:56:20.691321'),(42,'dark_lang','0002_data__enable_on_install','2015-12-31 14:56:20.722202'),(43,'default','0001_initial','2015-12-31 14:56:21.476817'),(44,'default','0002_add_related_name','2015-12-31 14:56:21.732324'),(45,'default','0003_alter_email_max_length','2015-12-31 14:56:21.814437'),(46,'django_comment_common','0001_initial','2015-12-31 14:56:22.536942'),(47,'django_notify','0001_initial','2015-12-31 14:56:24.596629'),(48,'django_openid_auth','0001_initial','2015-12-31 14:56:24.972976'),(49,'edx_proctoring','0001_initial','2015-12-31 14:56:30.301516'),(50,'edx_proctoring','0002_proctoredexamstudentattempt_is_status_acknowledged','2015-12-31 14:56:30.658999'),(51,'edxval','0001_initial','2015-12-31 14:56:31.901318'),(52,'edxval','0002_data__default_profiles','2015-12-31 14:56:31.985614'),(53,'embargo','0001_initial','2015-12-31 14:56:33.476417'),(54,'embargo','0002_data__add_countries','2015-12-31 14:56:34.169435'),(55,'external_auth','0001_initial','2015-12-31 14:56:34.976587'),(56,'lms_xblock','0001_initial','2015-12-31 14:56:35.342783'),(57,'milestones','0001_initial','2015-12-31 14:56:37.717602'),(58,'milestones','0002_data__seed_relationship_types','2015-12-31 14:56:37.771111'),(59,'mobile_api','0001_initial','2015-12-31 14:56:38.159420'),(60,'notes','0001_initial','2015-12-31 14:56:38.666731'),(61,'oauth2','0001_initial','2015-12-31 14:56:40.986260'),(62,'oauth2_provider','0001_initial','2015-12-31 14:56:41.385485'),(63,'oauth_provider','0001_initial','2015-12-31 14:56:42.439047'),(64,'organizations','0001_initial','2015-12-31 14:56:42.776842'),(65,'programs','0001_initial','2015-12-31 14:56:43.190769'),(66,'programs','0002_programsapiconfig_cache_ttl','2015-12-31 14:56:43.616792'),(67,'programs','0003_auto_20151120_1613','2015-12-31 14:56:45.292878'),(68,'self_paced','0001_initial','2015-12-31 14:56:45.742961'),(69,'sessions','0001_initial','2015-12-31 14:56:45.834774'),(70,'student','0001_initial','2015-12-31 14:57:00.707670'),(71,'shoppingcart','0001_initial','2015-12-31 14:57:15.041286'),(72,'shoppingcart','0002_auto_20151208_1034','2015-12-31 14:57:16.163983'),(73,'shoppingcart','0003_auto_20151217_0958','2015-12-31 14:57:17.314819'),(74,'sites','0001_initial','2015-12-31 14:57:17.389091'),(75,'splash','0001_initial','2015-12-31 14:57:18.037349'),(76,'status','0001_initial','2015-12-31 14:57:19.826410'),(77,'student','0002_auto_20151208_1034','2015-12-31 14:57:21.147521'),(78,'submissions','0001_initial','2015-12-31 14:57:23.354858'),(79,'submissions','0002_auto_20151119_0913','2015-12-31 14:57:23.620278'),(80,'survey','0001_initial','2015-12-31 14:57:24.698404'),(81,'teams','0001_initial','2015-12-31 14:57:26.825637'),(82,'third_party_auth','0001_initial','2015-12-31 14:57:30.487810'),(83,'track','0001_initial','2015-12-31 14:57:30.566408'),(84,'user_api','0001_initial','2015-12-31 14:57:35.956967'),(85,'util','0001_initial','2015-12-31 14:57:36.691350'),(86,'util','0002_data__default_rate_limit_config','2015-12-31 14:57:36.747714'),(87,'verify_student','0001_initial','2015-12-31 14:57:46.279873'),(88,'verify_student','0002_auto_20151124_1024','2015-12-31 14:57:47.187739'),(89,'verify_student','0003_auto_20151113_1443','2015-12-31 14:57:47.983638'),(90,'wiki','0001_initial','2015-12-31 14:58:12.991851'),(91,'wiki','0002_remove_article_subscription','2015-12-31 14:58:13.055035'),(92,'workflow','0001_initial','2015-12-31 14:58:13.504017'),(93,'xblock_django','0001_initial','2015-12-31 14:58:14.361722'),(94,'contentstore','0001_initial','2015-12-31 14:58:40.752928'),(95,'course_creators','0001_initial','2015-12-31 14:58:40.919957'),(96,'xblock_config','0001_initial','2015-12-31 14:58:41.443731'),(97,'edx_proctoring','0003_auto_20160101_0525','2016-01-07 20:15:02.045764'),(98,'certificates','0007_certificateinvalidation','2016-01-07 20:27:19.565490'),(99,'certificates','0008_generatedcertificate_eligible_for_certificate','2016-01-07 20:27:19.728890'); /*!40000 ALTER TABLE `django_migrations` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; @@ -34,4 +34,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2015-12-31 14:58:46 +-- Dump completed on 2016-01-07 20:27:41 diff --git a/common/test/db_cache/bok_choy_schema.sql b/common/test/db_cache/bok_choy_schema.sql index 6db3502c70..525baa1c74 100644 --- a/common/test/db_cache/bok_choy_schema.sql +++ b/common/test/db_cache/bok_choy_schema.sql @@ -190,7 +190,7 @@ CREATE TABLE `assessment_assessmentpart` ( `feedback` longtext NOT NULL, `assessment_id` int(11) NOT NULL, `criterion_id` int(11) NOT NULL, - `option_id` int(11), + `option_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `asses_assessment_id_1d752290138ce479_fk_assessment_assessment_id` (`assessment_id`), KEY `assessment_assessmentpart_385b00a3` (`criterion_id`), @@ -386,7 +386,7 @@ CREATE TABLE `auth_permission` ( PRIMARY KEY (`id`), UNIQUE KEY `content_type_id` (`content_type_id`,`codename`), CONSTRAINT `auth__content_type_id_508cf46651277a81_fk_django_content_type_id` FOREIGN KEY (`content_type_id`) REFERENCES `django_content_type` (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=710 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=716 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; DROP TABLE IF EXISTS `auth_registration`; /*!40101 SET @saved_cs_client = @@character_set_client */; @@ -418,7 +418,7 @@ CREATE TABLE `auth_user` ( `date_joined` datetime(6) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `username` (`username`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; DROP TABLE IF EXISTS `auth_user_groups`; /*!40101 SET @saved_cs_client = @@character_set_client */; @@ -588,7 +588,7 @@ CREATE TABLE `bulk_email_courseemailtemplate` ( `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`) -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; DROP TABLE IF EXISTS `bulk_email_optout`; /*!40101 SET @saved_cs_client = @@character_set_client */; @@ -659,7 +659,7 @@ CREATE TABLE `certificates_badgeimageconfiguration` ( `default` tinyint(1) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `mode` (`mode`) -) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; DROP TABLE IF EXISTS `certificates_certificategenerationconfiguration`; /*!40101 SET @saved_cs_client = @@character_set_client */; @@ -717,7 +717,25 @@ CREATE TABLE `certificates_certificatehtmlviewconfiguration` ( PRIMARY KEY (`id`), KEY `certificates_cert_changed_by_id_1de6cf549bca749b_fk_auth_user_id` (`changed_by_id`), CONSTRAINT `certificates_cert_changed_by_id_1de6cf549bca749b_fk_auth_user_id` FOREIGN KEY (`changed_by_id`) REFERENCES `auth_user` (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `certificates_certificateinvalidation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `certificates_certificateinvalidation` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `created` datetime(6) NOT NULL, + `modified` datetime(6) NOT NULL, + `notes` longtext, + `active` tinyint(1) NOT NULL, + `generated_certificate_id` int(11) NOT NULL, + `invalidated_by_id` int(11) NOT NULL, + PRIMARY KEY (`id`), + KEY `fa0dc816ca8028cd93e5f2289d405d87` (`generated_certificate_id`), + KEY `certificates__invalidated_by_id_5198db337fb56b7b_fk_auth_user_id` (`invalidated_by_id`), + CONSTRAINT `certificates__invalidated_by_id_5198db337fb56b7b_fk_auth_user_id` FOREIGN KEY (`invalidated_by_id`) REFERENCES `auth_user` (`id`), + CONSTRAINT `fa0dc816ca8028cd93e5f2289d405d87` FOREIGN KEY (`generated_certificate_id`) REFERENCES `certificates_generatedcertificate` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; DROP TABLE IF EXISTS `certificates_certificatetemplate`; /*!40101 SET @saved_cs_client = @@character_set_client */; @@ -748,7 +766,7 @@ CREATE TABLE `certificates_certificatetemplateasset` ( `modified` datetime(6) NOT NULL, `description` varchar(255) DEFAULT NULL, `asset` varchar(255) NOT NULL, - `asset_slug` varchar(255), + `asset_slug` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `asset_slug` (`asset_slug`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; @@ -822,6 +840,7 @@ CREATE TABLE `certificates_generatedcertificate` ( `modified_date` datetime(6) NOT NULL, `error_reason` varchar(512) NOT NULL, `user_id` int(11) NOT NULL, + `eligible_for_certificate` tinyint(1) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `certificates_generatedcertificate_user_id_552a0fa6f7d3f7e8_uniq` (`user_id`,`course_id`), KEY `certificates_generatedcertific_verify_uuid_1b5a14bb83c471ff_uniq` (`verify_uuid`), @@ -1089,7 +1108,7 @@ CREATE TABLE `course_overviews_courseoverview` ( `enrollment_domain` longtext, `invitation_only` tinyint(1) NOT NULL, `max_student_enrollments_allowed` int(11) DEFAULT NULL, - `announcement` datetime(6), + `announcement` datetime(6) DEFAULT NULL, `catalog_visibility` longtext, `course_video_url` longtext, `effort` longtext, @@ -1479,7 +1498,7 @@ CREATE TABLE `dark_lang_darklangconfig` ( PRIMARY KEY (`id`), KEY `dark_lang_darklan_changed_by_id_7e1defb1121d58b8_fk_auth_user_id` (`changed_by_id`), CONSTRAINT `dark_lang_darklan_changed_by_id_7e1defb1121d58b8_fk_auth_user_id` FOREIGN KEY (`changed_by_id`) REFERENCES `auth_user` (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; DROP TABLE IF EXISTS `django_admin_log`; /*!40101 SET @saved_cs_client = @@character_set_client */; @@ -1556,7 +1575,7 @@ CREATE TABLE `django_content_type` ( `model` varchar(100) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `django_content_type_app_label_45f3b1d93ec8c61c_uniq` (`app_label`,`model`) -) ENGINE=InnoDB AUTO_INCREMENT=236 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=238 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; DROP TABLE IF EXISTS `django_migrations`; /*!40101 SET @saved_cs_client = @@character_set_client */; @@ -1567,7 +1586,7 @@ CREATE TABLE `django_migrations` ( `name` varchar(255) NOT NULL, `applied` datetime(6) NOT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=97 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; DROP TABLE IF EXISTS `django_openid_auth_association`; /*!40101 SET @saved_cs_client = @@character_set_client */; @@ -1769,7 +1788,7 @@ CREATE TABLE `edxval_profile` ( `profile_name` varchar(50) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `profile_name` (`profile_name`) -) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; DROP TABLE IF EXISTS `edxval_subtitle`; /*!40101 SET @saved_cs_client = @@character_set_client */; @@ -1813,7 +1832,7 @@ CREATE TABLE `embargo_country` ( `country` varchar(2) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `country` (`country`) -) ENGINE=InnoDB AUTO_INCREMENT=250 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; DROP TABLE IF EXISTS `embargo_countryaccessrule`; /*!40101 SET @saved_cs_client = @@character_set_client */; @@ -2033,7 +2052,7 @@ CREATE TABLE `milestones_milestonerelationshiptype` ( `active` tinyint(1) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`) -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; DROP TABLE IF EXISTS `milestones_usermilestone`; /*!40101 SET @saved_cs_client = @@character_set_client */; @@ -2104,7 +2123,7 @@ CREATE TABLE `notify_notification` ( `is_viewed` tinyint(1) NOT NULL, `is_emailed` tinyint(1) NOT NULL, `created` datetime(6) NOT NULL, - `subscription_id` int(11), + `subscription_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `notify_notification_ef42673f` (`subscription_id`), CONSTRAINT `D48032390695e0699e92b8d7ccdbff7e` FOREIGN KEY (`subscription_id`) REFERENCES `notify_subscription` (`subscription_id`) @@ -2679,9 +2698,9 @@ CREATE TABLE `shoppingcart_courseregistrationcode` ( `mode_slug` varchar(100) DEFAULT NULL, `is_valid` tinyint(1) NOT NULL, `created_by_id` int(11) NOT NULL, - `invoice_id` int(11), - `order_id` int(11), - `invoice_item_id` int(11), + `invoice_id` int(11) DEFAULT NULL, + `order_id` int(11) DEFAULT NULL, + `invoice_item_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `code` (`code`), KEY `shoppingcart_cour_created_by_id_11125a9667aa01c9_fk_auth_user_id` (`created_by_id`), @@ -2995,6 +3014,20 @@ CREATE TABLE `splash_splashconfig` ( CONSTRAINT `splash_splashconf_changed_by_id_735b38ad8ed19270_fk_auth_user_id` FOREIGN KEY (`changed_by_id`) REFERENCES `auth_user` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `static_replace_assetbaseurlconfig`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `static_replace_assetbaseurlconfig` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `change_date` datetime(6) NOT NULL, + `changed_by_id` int(11) DEFAULT NULL, + `enabled` tinyint(1) NOT NULL, + `base_url` longtext NOT NULL, + PRIMARY KEY (`id`), + KEY `static_replace_as_changed_by_id_796c2e5b1bee7027_fk_auth_user_id` (`changed_by_id`), + CONSTRAINT `static_replace_as_changed_by_id_796c2e5b1bee7027_fk_auth_user_id` FOREIGN KEY (`changed_by_id`) REFERENCES `auth_user` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; DROP TABLE IF EXISTS `status_coursemessage`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; @@ -3336,7 +3369,7 @@ CREATE TABLE `submissions_score` ( `created_at` datetime(6) NOT NULL, `reset` tinyint(1) NOT NULL, `student_item_id` int(11) NOT NULL, - `submission_id` int(11), + `submission_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `submissions_score_fde81f11` (`created_at`), KEY `submissions_score_02d5e83e` (`student_item_id`), @@ -3697,7 +3730,7 @@ CREATE TABLE `util_ratelimitconfiguration` ( PRIMARY KEY (`id`), KEY `util_ratelimitcon_changed_by_id_2c8891cb4854f3b5_fk_auth_user_id` (`changed_by_id`), CONSTRAINT `util_ratelimitcon_changed_by_id_2c8891cb4854f3b5_fk_auth_user_id` FOREIGN KEY (`changed_by_id`) REFERENCES `auth_user` (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; DROP TABLE IF EXISTS `verify_student_historicalverificationdeadline`; /*!40101 SET @saved_cs_client = @@character_set_client */; @@ -3870,9 +3903,9 @@ CREATE TABLE `wiki_article` ( `group_write` tinyint(1) NOT NULL, `other_read` tinyint(1) NOT NULL, `other_write` tinyint(1) NOT NULL, - `current_revision_id` int(11), - `group_id` int(11), - `owner_id` int(11), + `current_revision_id` int(11) DEFAULT NULL, + `group_id` int(11) DEFAULT NULL, + `owner_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `current_revision_id` (`current_revision_id`), KEY `wiki_article_0e939a4f` (`group_id`), @@ -3944,7 +3977,7 @@ DROP TABLE IF EXISTS `wiki_attachment`; CREATE TABLE `wiki_attachment` ( `reusableplugin_ptr_id` int(11) NOT NULL, `original_filename` varchar(256) DEFAULT NULL, - `current_revision_id` int(11), + `current_revision_id` int(11) DEFAULT NULL, PRIMARY KEY (`reusableplugin_ptr_id`), UNIQUE KEY `current_revision_id` (`current_revision_id`), CONSTRAINT `D32d32ecb0471dc863a4e19562842024` FOREIGN KEY (`current_revision_id`) REFERENCES `wiki_attachmentrevision` (`id`), @@ -3967,8 +4000,8 @@ CREATE TABLE `wiki_attachmentrevision` ( `file` varchar(100) NOT NULL, `description` longtext NOT NULL, `attachment_id` int(11) NOT NULL, - `previous_revision_id` int(11), - `user_id` int(11), + `previous_revision_id` int(11) DEFAULT NULL, + `user_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `wiki_attachmentrevision_07ba63f5` (`attachment_id`), KEY `wiki_attachmentrevision_e8680b8a` (`previous_revision_id`), @@ -4027,7 +4060,7 @@ DROP TABLE IF EXISTS `wiki_revisionplugin`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `wiki_revisionplugin` ( `articleplugin_ptr_id` int(11) NOT NULL, - `current_revision_id` int(11), + `current_revision_id` int(11) DEFAULT NULL, PRIMARY KEY (`articleplugin_ptr_id`), UNIQUE KEY `current_revision_id` (`current_revision_id`), CONSTRAINT `D03d76148e98b4bc99e3137189894366` FOREIGN KEY (`current_revision_id`) REFERENCES `wiki_revisionpluginrevision` (`id`), @@ -4048,8 +4081,8 @@ CREATE TABLE `wiki_revisionpluginrevision` ( `deleted` tinyint(1) NOT NULL, `locked` tinyint(1) NOT NULL, `plugin_id` int(11) NOT NULL, - `previous_revision_id` int(11), - `user_id` int(11), + `previous_revision_id` int(11) DEFAULT NULL, + `user_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `wiki_revisionpluginrevision_b25eaab4` (`plugin_id`), KEY `wiki_revisionpluginrevision_e8680b8a` (`previous_revision_id`), diff --git a/lms/djangoapps/certificates/api.py b/lms/djangoapps/certificates/api.py index 1a54ac2f44..f09ea73003 100644 --- a/lms/djangoapps/certificates/api.py +++ b/lms/djangoapps/certificates/api.py @@ -78,7 +78,7 @@ def get_certificates_for_user(username): else None ), } - for cert in GeneratedCertificate.objects.filter(user__username=username).order_by("course_id") + for cert in GeneratedCertificate.eligible_certificates.filter(user__username=username).order_by("course_id") ] @@ -109,11 +109,14 @@ def generate_user_certificates(student, course_key, course=None, insecure=False, if insecure: xqueue.use_https = False generate_pdf = not has_html_certificates_enabled(course_key, course) - status, cert = xqueue.add_cert(student, course_key, - course=course, - generate_pdf=generate_pdf, - forced_grade=forced_grade) - if status in [CertificateStatuses.generating, CertificateStatuses.downloadable]: + cert = xqueue.add_cert( + student, + course_key, + course=course, + generate_pdf=generate_pdf, + forced_grade=forced_grade + ) + if cert.status in [CertificateStatuses.generating, CertificateStatuses.downloadable]: emit_certificate_event('created', student, course_key, course, { 'user_id': student.id, 'course_id': unicode(course_key), @@ -121,7 +124,7 @@ def generate_user_certificates(student, course_key, course=None, insecure=False, 'enrollment_mode': cert.mode, 'generation_mode': generation_mode }) - return status + return cert.status def regenerate_user_certificates(student, course_key, course=None, @@ -385,7 +388,7 @@ def get_certificate_url(user_id=None, course_id=None, uuid=None): ) return url try: - user_certificate = GeneratedCertificate.objects.get( + user_certificate = GeneratedCertificate.eligible_certificates.get( user=user_id, course_id=course_id ) diff --git a/lms/djangoapps/certificates/management/commands/create_fake_cert.py b/lms/djangoapps/certificates/management/commands/create_fake_cert.py index 7c063ed1b3..ed2c0a3c4f 100644 --- a/lms/djangoapps/certificates/management/commands/create_fake_cert.py +++ b/lms/djangoapps/certificates/management/commands/create_fake_cert.py @@ -76,7 +76,7 @@ class Command(BaseCommand): status = options.get('status', CertificateStatuses.downloadable) grade = options.get('grade', '') - cert, created = GeneratedCertificate.objects.get_or_create( + cert, created = GeneratedCertificate.eligible_certificates.get_or_create( user=user, course_id=course_key ) diff --git a/lms/djangoapps/certificates/management/commands/fix_ungraded_certs.py b/lms/djangoapps/certificates/management/commands/fix_ungraded_certs.py index 3c26d16447..9e7553650b 100644 --- a/lms/djangoapps/certificates/management/commands/fix_ungraded_certs.py +++ b/lms/djangoapps/certificates/management/commands/fix_ungraded_certs.py @@ -42,8 +42,9 @@ class Command(BaseCommand): def handle(self, *args, **options): course_id = options['course'] print "Fetching ungraded students for {0}".format(course_id) - ungraded = GeneratedCertificate.objects.filter( - course_id__exact=course_id).filter(grade__exact='') + ungraded = GeneratedCertificate.objects.filter( # pylint: disable=no-member + course_id__exact=course_id + ).filter(grade__exact='') course = courses.get_course_by_id(course_id) factory = RequestFactory() request = factory.get('/') diff --git a/lms/djangoapps/certificates/management/commands/gen_cert_report.py b/lms/djangoapps/certificates/management/commands/gen_cert_report.py index d0e6ef335d..38f42876d8 100644 --- a/lms/djangoapps/certificates/management/commands/gen_cert_report.py +++ b/lms/djangoapps/certificates/management/commands/gen_cert_report.py @@ -70,14 +70,17 @@ class Command(BaseCommand): enrolled_total = User.objects.filter( courseenrollment__course_id=course_id ) - verified_enrolled = GeneratedCertificate.objects.filter( - course_id__exact=course_id, mode__exact='verified' + verified_enrolled = GeneratedCertificate.objects.filter( # pylint: disable=no-member + course_id__exact=course_id, + mode__exact='verified' ) - honor_enrolled = GeneratedCertificate.objects.filter( - course_id__exact=course_id, mode__exact='honor' + honor_enrolled = GeneratedCertificate.objects.filter( # pylint: disable=no-member + course_id__exact=course_id, + mode__exact='honor' ) - audit_enrolled = GeneratedCertificate.objects.filter( - course_id__exact=course_id, mode__exact='audit' + audit_enrolled = GeneratedCertificate.objects.filter( # pylint: disable=no-member + course_id__exact=course_id, + mode__exact='audit' ) cert_data[course_id] = { @@ -88,7 +91,7 @@ class Command(BaseCommand): 'audit_enrolled': audit_enrolled.count() } - status_tally = GeneratedCertificate.objects.filter( + status_tally = GeneratedCertificate.objects.filter( # pylint: disable=no-member course_id__exact=course_id ).values('status').annotate( dcount=Count('status') @@ -100,7 +103,7 @@ class Command(BaseCommand): } ) - mode_tally = GeneratedCertificate.objects.filter( + mode_tally = GeneratedCertificate.objects.filter( # pylint: disable=no-member course_id__exact=course_id, status__exact='downloadable' ).values('mode').annotate( diff --git a/lms/djangoapps/certificates/management/commands/resubmit_error_certificates.py b/lms/djangoapps/certificates/management/commands/resubmit_error_certificates.py index b17bba7242..6a183effa7 100644 --- a/lms/djangoapps/certificates/management/commands/resubmit_error_certificates.py +++ b/lms/djangoapps/certificates/management/commands/resubmit_error_certificates.py @@ -81,7 +81,7 @@ class Command(BaseCommand): # Retrieve the IDs of generated certificates with # error status in the set of courses we're considering. queryset = ( - GeneratedCertificate.objects.select_related('user') + GeneratedCertificate.objects.select_related('user') # pylint: disable=no-member ).filter(status=CertificateStatuses.error) if only_course_keys: queryset = queryset.filter(course_id__in=only_course_keys) diff --git a/lms/djangoapps/certificates/migrations/0008_generatedcertificate_eligible_for_certificate.py b/lms/djangoapps/certificates/migrations/0008_generatedcertificate_eligible_for_certificate.py new file mode 100644 index 0000000000..95381b1346 --- /dev/null +++ b/lms/djangoapps/certificates/migrations/0008_generatedcertificate_eligible_for_certificate.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('certificates', '0007_certificateinvalidation'), + ] + + operations = [ + migrations.AddField( + model_name='generatedcertificate', + name='eligible_for_certificate', + field=models.BooleanField(default=True), + ), + ] diff --git a/lms/djangoapps/certificates/models.py b/lms/djangoapps/certificates/models.py index 273f8438cb..820a6c23cd 100644 --- a/lms/djangoapps/certificates/models.py +++ b/lms/djangoapps/certificates/models.py @@ -143,7 +143,7 @@ class CertificateWhitelist(models.Model): if student: white_list = white_list.filter(user=student) result = [] - generated_certificates = GeneratedCertificate.objects.filter( + generated_certificates = GeneratedCertificate.eligible_certificates.filter( course_id=course_id, user__in=[exception.user for exception in white_list], status=CertificateStatuses.downloadable @@ -168,11 +168,40 @@ class CertificateWhitelist(models.Model): return result +class EligibleCertificateManager(models.Manager): + """ + A manager for `GeneratedCertificate` models that automatically + filters out ineligible certs. + + The idea is to prevent accidentally granting certificates to + students who have not enrolled in a cert-granting mode. The + alternative is to filter by eligible_for_certificate=True every + time certs are searched for, which is verbose and likely to be + forgotten. + """ + + def get_queryset(self): + """ + Return a queryset for `GeneratedCertificate` models, filtering out + ineligible certificates. + """ + return super(EligibleCertificateManager, self).get_queryset().filter(eligible_for_certificate=True) + + class GeneratedCertificate(models.Model): """ Base model for generated certificates """ + # Only returns eligible certificates. This should be used in + # preference to the default `objects` manager in most cases. + eligible_certificates = EligibleCertificateManager() + + # Normal object manager, which should only be used when ineligible + # certificates (i.e. new audit certs) should be included in the + # results. Django requires us to explicitly declare this. + objects = models.Manager() + MODES = Choices('verified', 'honor', 'audit', 'professional', 'no-id-professional') VERIFIED_CERTS_MODES = [CourseMode.VERIFIED, CourseMode.CREDIT_MODE] @@ -191,6 +220,19 @@ class GeneratedCertificate(models.Model): created_date = models.DateTimeField(auto_now_add=True) modified_date = models.DateTimeField(auto_now=True) error_reason = models.CharField(max_length=512, blank=True, default='') + # Whether or not this GeneratedCertificate represents a + # certificate which can be shown to the user. Grading and + # certificate logic is intertwined here, so even enrollments + # without certificates (as of Jan 2016, this is only audit mode) + # create a GeneratedCertificate record to record the learner's + # final grade. Since audit enrollments used to have certificates + # and now do not, we need to be able to distinguish between old + # records and new in our analytics and reporting. The way we'll do + # this is by checking this field. By default it is True in order + # to make sure old records are counted correctly, and in + # `GeneratedCertificate.add_cert` we set it to False for new audit + # enrollments. + eligible_for_certificate = models.BooleanField(default=True) class Meta(object): unique_together = (('user', 'course_id'),) @@ -410,7 +452,7 @@ def certificate_status_for_student(student, course_id): ''' try: - generated_certificate = GeneratedCertificate.objects.get( + generated_certificate = GeneratedCertificate.objects.get( # pylint: disable=no-member user=student, course_id=course_id) cert_status = { 'status': generated_certificate.status, diff --git a/lms/djangoapps/certificates/queue.py b/lms/djangoapps/certificates/queue.py index 966572c2be..ad6433e096 100644 --- a/lms/djangoapps/certificates/queue.py +++ b/lms/djangoapps/certificates/queue.py @@ -20,6 +20,7 @@ from student.models import UserProfile, CourseEnrollment from lms.djangoapps.verify_student.models import SoftwareSecurePhotoVerification from certificates.models import ( + CertificateStatuses, GeneratedCertificate, certificate_status_for_student, CertificateStatuses as status, @@ -120,14 +121,14 @@ class XQueueCertInterface(object): Change the certificate status to unavailable (if it exists) and request grading. Passing grades will put a certificate request on the queue. - Return the status object. + Return the certificate. """ # TODO: when del_cert is implemented and plumbed through certificates # repo also, do a deletion followed by a creation r/t a simple # recreation. XXX: this leaves orphan cert files laying around in # AWS. See note in the docstring too. try: - certificate = GeneratedCertificate.objects.get(user=student, course_id=course_id) + certificate = GeneratedCertificate.eligible_certificates.get(user=student, course_id=course_id) LOGGER.info( ( @@ -183,8 +184,7 @@ class XQueueCertInterface(object): raise NotImplementedError # pylint: disable=too-many-statements - def add_cert(self, student, course_id, course=None, forced_grade=None, template_file=None, - title='None', generate_pdf=True): + def add_cert(self, student, course_id, course=None, forced_grade=None, template_file=None, generate_pdf=True): """ Request a new certificate for a student. @@ -211,7 +211,7 @@ class XQueueCertInterface(object): If a student does not have a passing grade the status will change to status.notpassing - Returns the student's status and newly created certificate instance + Returns the newly created certificate instance """ valid_statuses = [ @@ -224,7 +224,6 @@ class XQueueCertInterface(object): ] cert_status = certificate_status_for_student(student, course_id)['status'] - new_status = cert_status cert = None if cert_status not in valid_statuses: @@ -239,155 +238,98 @@ class XQueueCertInterface(object): cert_status, unicode(valid_statuses) ) + return None + + # The caller can optionally pass a course in to avoid + # re-fetching it from Mongo. If they have not provided one, + # get it from the modulestore. + if course is None: + course = modulestore().get_course(course_id, depth=0) + + profile = UserProfile.objects.get(user=student) + profile_name = profile.name + + # Needed for access control in grading. + self.request.user = student + self.request.session = {} + + is_whitelisted = self.whitelist.filter(user=student, course_id=course_id, whitelist=True).exists() + grade = grades.grade(student, self.request, course) + enrollment_mode, __ = CourseEnrollment.enrollment_mode_for_user(student, course_id) + mode_is_verified = enrollment_mode in GeneratedCertificate.VERIFIED_CERTS_MODES + user_is_verified = SoftwareSecurePhotoVerification.user_is_verified(student) + cert_mode = enrollment_mode + is_eligible_for_certificate = is_whitelisted or CourseMode.is_eligible_for_certificate(enrollment_mode) + + # For credit mode generate verified certificate + if cert_mode == CourseMode.CREDIT_MODE: + cert_mode = CourseMode.VERIFIED + + if template_file is not None: + template_pdf = template_file + elif mode_is_verified and user_is_verified: + template_pdf = "certificate-template-{id.org}-{id.course}-verified.pdf".format(id=course_id) + elif mode_is_verified and not user_is_verified: + template_pdf = "certificate-template-{id.org}-{id.course}.pdf".format(id=course_id) + cert_mode = GeneratedCertificate.MODES.honor else: - # grade the student + # honor code and audit students + template_pdf = "certificate-template-{id.org}-{id.course}.pdf".format(id=course_id) + if forced_grade: + grade['grade'] = forced_grade - # re-use the course passed in optionally so we don't have to re-fetch everything - # for every student - if course is None: - course = modulestore().get_course(course_id, depth=0) - profile = UserProfile.objects.get(user=student) - profile_name = profile.name + cert, __ = GeneratedCertificate.eligible_certificates.get_or_create(user=student, course_id=course_id) - # Needed - self.request.user = student - self.request.session = {} + cert.mode = cert_mode + cert.user = student + cert.grade = grade['percent'] + cert.course_id = course_id + cert.name = profile_name + cert.download_url = '' - course_name = course.display_name or unicode(course_id) - is_whitelisted = self.whitelist.filter(user=student, course_id=course_id, whitelist=True).exists() - grade = grades.grade(student, self.request, course) - enrollment_mode, __ = CourseEnrollment.enrollment_mode_for_user(student, course_id) - mode_is_verified = enrollment_mode in GeneratedCertificate.VERIFIED_CERTS_MODES - user_is_verified = SoftwareSecurePhotoVerification.user_is_verified(student) - cert_mode = enrollment_mode + # If this user's enrollment is not eligible to receive a + # certificate, mark it as such for reporting and + # analytics. + if not is_eligible_for_certificate: + cert.eligible_for_certificate = False + cert.status = CertificateStatuses.auditing + cert.save() + LOGGER.info( + u"Student %s with enrollment mode %s is not eligible for a certificate.", + student.id, + enrollment_mode + ) + return cert - # For credit mode generate verified certificate - if cert_mode == CourseMode.CREDIT_MODE: - cert_mode = CourseMode.VERIFIED + # Strip HTML from grade range label + grade_contents = grade.get('grade', None) + try: + grade_contents = lxml.html.fromstring(grade_contents).text_content() + except (TypeError, XMLSyntaxError, ParserError) as exc: + LOGGER.info( + ( + u"Could not retrieve grade for student %s " + u"in the course '%s' " + u"because an exception occurred while parsing the " + u"grade contents '%s' as HTML. " + u"The exception was: '%s'" + ), + student.id, + unicode(course_id), + grade_contents, + unicode(exc) + ) - if mode_is_verified and user_is_verified: - template_pdf = "certificate-template-{id.org}-{id.course}-verified.pdf".format(id=course_id) - elif mode_is_verified and not user_is_verified: - template_pdf = "certificate-template-{id.org}-{id.course}.pdf".format(id=course_id) - cert_mode = GeneratedCertificate.MODES.honor - else: - # honor code and audit students - template_pdf = "certificate-template-{id.org}-{id.course}.pdf".format(id=course_id) - if forced_grade: - grade['grade'] = forced_grade - - cert, __ = GeneratedCertificate.objects.get_or_create(user=student, course_id=course_id) - - cert.mode = cert_mode - cert.user = student - cert.grade = grade['percent'] - cert.course_id = course_id - cert.name = profile_name - cert.download_url = '' - # Strip HTML from grade range label - grade_contents = grade.get('grade', None) - try: - grade_contents = lxml.html.fromstring(grade_contents).text_content() - except (TypeError, XMLSyntaxError, ParserError) as exc: + # Log if the student is whitelisted + if is_whitelisted: LOGGER.info( - ( - u"Could not retrieve grade for student %s " - u"in the course '%s' " - u"because an exception occurred while parsing the " - u"grade contents '%s' as HTML. " - u"The exception was: '%s'" - ), + u"Student %s is whitelisted in '%s'", student.id, - unicode(course_id), - grade_contents, - unicode(exc) + unicode(course_id) ) - - # Despite blowing up the xml parser, bad values here are fine - grade_contents = None - - if is_whitelisted or grade_contents is not None: - - if is_whitelisted: - LOGGER.info( - u"Student %s is whitelisted in '%s'", - student.id, - unicode(course_id) - ) - - # check to see whether the student is on the - # the embargoed country restricted list - # otherwise, put a new certificate request - # on the queue - - if self.restricted.filter(user=student).exists(): - new_status = status.restricted - cert.status = new_status - cert.save() - - LOGGER.info( - ( - u"Student %s is in the embargoed country restricted " - u"list, so their certificate status has been set to '%s' " - u"for the course '%s'. " - u"No certificate generation task was sent to the XQueue." - ), - student.id, - new_status, - unicode(course_id) - ) - else: - key = make_hashkey(random.random()) - cert.key = key - contents = { - 'action': 'create', - 'username': student.username, - 'course_id': unicode(course_id), - 'course_name': course_name, - 'name': profile_name, - 'grade': grade_contents, - 'template_pdf': template_pdf, - } - if template_file: - contents['template_pdf'] = template_file - if generate_pdf: - new_status = status.generating - else: - new_status = status.downloadable - cert.verify_uuid = uuid4().hex - - cert.status = new_status - cert.save() - - if generate_pdf: - try: - self._send_to_xqueue(contents, key) - except XQueueAddToQueueError as exc: - new_status = ExampleCertificate.STATUS_ERROR - cert.status = new_status - cert.error_reason = unicode(exc) - cert.save() - LOGGER.critical( - ( - u"Could not add certificate task to XQueue. " - u"The course was '%s' and the student was '%s'." - u"The certificate task status has been marked as 'error' " - u"and can be re-submitted with a management command." - ), course_id, student.id - ) - else: - LOGGER.info( - ( - u"The certificate status has been set to '%s'. " - u"Sent a certificate grading task to the XQueue " - u"with the key '%s'. " - ), - new_status, - key - ) + # If they are not, short-circuit and don't generate cert else: - new_status = status.notpassing - cert.status = new_status + cert.status = status.notpassing cert.save() LOGGER.info( @@ -398,10 +340,85 @@ class XQueueCertInterface(object): ), student.id, unicode(course_id), - new_status + cert.status ) + return cert - return new_status, cert + # Check to see whether the student is on the the embargoed + # country restricted list. If so, they should not receive a + # certificate -- set their status to restricted and log it. + if self.restricted.filter(user=student).exists(): + cert.status = status.restricted + cert.save() + + LOGGER.info( + ( + u"Student %s is in the embargoed country restricted " + u"list, so their certificate status has been set to '%s' " + u"for the course '%s'. " + u"No certificate generation task was sent to the XQueue." + ), + student.id, + cert.status, + unicode(course_id) + ) + return cert + + # Finally, generate the certificate and send it off. + return self._generate_cert(cert, course, student, grade_contents, template_pdf, generate_pdf) + + def _generate_cert(self, cert, course, student, grade_contents, template_pdf, generate_pdf): + """ + Generate a certificate for the student. If `generate_pdf` is True, + sends a request to XQueue. + """ + course_id = unicode(course.id) + + key = make_hashkey(random.random()) + cert.key = key + contents = { + 'action': 'create', + 'username': student.username, + 'course_id': course_id, + 'course_name': course.display_name or course_id, + 'name': cert.name, + 'grade': grade_contents, + 'template_pdf': template_pdf, + } + if generate_pdf: + cert.status = status.generating + else: + cert.status = status.downloadable + cert.verify_uuid = uuid4().hex + + cert.save() + + if generate_pdf: + try: + self._send_to_xqueue(contents, key) + except XQueueAddToQueueError as exc: + cert.status = ExampleCertificate.STATUS_ERROR + cert.error_reason = unicode(exc) + cert.save() + LOGGER.critical( + ( + u"Could not add certificate task to XQueue. " + u"The course was '%s' and the student was '%s'." + u"The certificate task status has been marked as 'error' " + u"and can be re-submitted with a management command." + ), course_id, student.id + ) + else: + LOGGER.info( + ( + u"The certificate status has been set to '%s'. " + u"Sent a certificate grading task to the XQueue " + u"with the key '%s'. " + ), + cert.status, + key + ) + return cert def add_example_cert(self, example_cert): """Add a task to create an example certificate. diff --git a/lms/djangoapps/certificates/tests/test_api.py b/lms/djangoapps/certificates/tests/test_api.py index 640ab68578..357dae3659 100644 --- a/lms/djangoapps/certificates/tests/test_api.py +++ b/lms/djangoapps/certificates/tests/test_api.py @@ -231,7 +231,7 @@ class GenerateUserCertificatesTest(EventTestMixin, WebCertificateTestMixin, Modu certs_api.generate_user_certificates(self.student, self.course.id) # Verify that the certificate has status 'generating' - cert = GeneratedCertificate.objects.get(user=self.student, course_id=self.course.id) + cert = GeneratedCertificate.eligible_certificates.get(user=self.student, course_id=self.course.id) self.assertEqual(cert.status, CertificateStatuses.generating) self.assert_event_emitted( 'edx.certificate.created', @@ -249,7 +249,7 @@ class GenerateUserCertificatesTest(EventTestMixin, WebCertificateTestMixin, Modu certs_api.generate_user_certificates(self.student, self.course.id) # Verify that the certificate has been marked with status error - cert = GeneratedCertificate.objects.get(user=self.student, course_id=self.course.id) + cert = GeneratedCertificate.eligible_certificates.get(user=self.student, course_id=self.course.id) self.assertEqual(cert.status, 'error') self.assertIn(self.ERROR_REASON, cert.error_reason) @@ -263,7 +263,7 @@ class GenerateUserCertificatesTest(EventTestMixin, WebCertificateTestMixin, Modu certs_api.generate_user_certificates(self.student, self.course.id) # Verify that the certificate has status 'downloadable' - cert = GeneratedCertificate.objects.get(user=self.student, course_id=self.course.id) + cert = GeneratedCertificate.eligible_certificates.get(user=self.student, course_id=self.course.id) self.assertEqual(cert.status, CertificateStatuses.downloadable) @patch.dict(settings.FEATURES, {'CERTIFICATES_HTML_VIEW': False}) diff --git a/lms/djangoapps/certificates/tests/test_cert_management.py b/lms/djangoapps/certificates/tests/test_cert_management.py index 4e025266f5..71d0870a83 100644 --- a/lms/djangoapps/certificates/tests/test_cert_management.py +++ b/lms/djangoapps/certificates/tests/test_cert_management.py @@ -6,6 +6,7 @@ from nose.plugins.attrib import attr from django.test.utils import override_settings from mock import patch +from course_modes.models import CourseMode from opaque_keys.edx.locator import CourseLocator from certificates.tests.factories import BadgeAssertionFactory from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase @@ -30,16 +31,17 @@ class CertificateManagementTest(ModuleStoreTestCase): for __ in range(3) ] - def _create_cert(self, course_key, user, status): + def _create_cert(self, course_key, user, status, mode=CourseMode.HONOR): """Create a certificate entry. """ # Enroll the user in the course CourseEnrollmentFactory.create( user=user, - course_id=course_key + course_id=course_key, + mode=mode ) # Create the certificate - GeneratedCertificate.objects.create( + GeneratedCertificate.eligible_certificates.create( user=user, course_id=course_key, status=status @@ -52,7 +54,7 @@ class CertificateManagementTest(ModuleStoreTestCase): def _assert_cert_status(self, course_key, user, expected_status): """Check the status of a certificate. """ - cert = GeneratedCertificate.objects.get(user=user, course_id=course_key) + cert = GeneratedCertificate.eligible_certificates.get(user=user, course_id=course_key) self.assertEqual(cert.status, expected_status) @@ -61,9 +63,10 @@ class CertificateManagementTest(ModuleStoreTestCase): class ResubmitErrorCertificatesTest(CertificateManagementTest): """Tests for the resubmit_error_certificates management command. """ - def test_resubmit_error_certificate(self): + @ddt.data(CourseMode.HONOR, CourseMode.VERIFIED) + def test_resubmit_error_certificate(self, mode): # Create a certificate with status 'error' - self._create_cert(self.courses[0].id, self.user, CertificateStatuses.error) + self._create_cert(self.courses[0].id, self.user, CertificateStatuses.error, mode) # Re-submit all certificates with status 'error' with check_mongo_calls(1): @@ -198,7 +201,7 @@ class RegenerateCertificatesTest(CertificateManagementTest): username=self.user.email, course=unicode(key), noop=False, insecure=True, template_file=None, grade_value=None ) - certificate = GeneratedCertificate.objects.get( + certificate = GeneratedCertificate.eligible_certificates.get( user=self.user, course_id=key ) @@ -236,7 +239,7 @@ class UngenerateCertificatesTest(CertificateManagementTest): course=unicode(key), noop=False, insecure=True, force=False ) self.assertTrue(mock_send_to_queue.called) - certificate = GeneratedCertificate.objects.get( + certificate = GeneratedCertificate.eligible_certificates.get( user=self.user, course_id=key ) diff --git a/lms/djangoapps/certificates/tests/test_create_fake_cert.py b/lms/djangoapps/certificates/tests/test_create_fake_cert.py index 1d2f95917e..a35715e254 100644 --- a/lms/djangoapps/certificates/tests/test_create_fake_cert.py +++ b/lms/djangoapps/certificates/tests/test_create_fake_cert.py @@ -28,7 +28,7 @@ class CreateFakeCertTest(TestCase): cert_mode='verified', grade='0.89' ) - cert = GeneratedCertificate.objects.get(user=self.user, course_id=self.COURSE_KEY) + cert = GeneratedCertificate.eligible_certificates.get(user=self.user, course_id=self.COURSE_KEY) self.assertEqual(cert.status, 'downloadable') self.assertEqual(cert.mode, 'verified') self.assertEqual(cert.grade, '0.89') @@ -41,7 +41,7 @@ class CreateFakeCertTest(TestCase): unicode(self.COURSE_KEY), cert_mode='honor' ) - cert = GeneratedCertificate.objects.get(user=self.user, course_id=self.COURSE_KEY) + cert = GeneratedCertificate.eligible_certificates.get(user=self.user, course_id=self.COURSE_KEY) self.assertEqual(cert.mode, 'honor') def test_too_few_args(self): diff --git a/lms/djangoapps/certificates/tests/test_models.py b/lms/djangoapps/certificates/tests/test_models.py index 41d38d26e2..b66fdf3001 100644 --- a/lms/djangoapps/certificates/tests/test_models.py +++ b/lms/djangoapps/certificates/tests/test_models.py @@ -8,13 +8,20 @@ from django.test.utils import override_settings from nose.plugins.attrib import attr from path import Path as path -from opaque_keys.edx.locator import CourseLocator from certificates.models import ( ExampleCertificate, ExampleCertificateSet, CertificateHtmlViewConfiguration, CertificateTemplateAsset, - BadgeImageConfiguration) + BadgeImageConfiguration, + EligibleCertificateManager, + GeneratedCertificate, +) +from certificates.tests.factories import GeneratedCertificateFactory +from opaque_keys.edx.locator import CourseLocator +from student.tests.factories import UserFactory +from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase +from xmodule.modulestore.tests.factories import CourseFactory FEATURES_INVALID_FILE_PATH = settings.FEATURES.copy() FEATURES_INVALID_FILE_PATH['CERTS_HTML_VIEW_CONFIG_PATH'] = 'invalid/path/to/config.json' @@ -234,3 +241,42 @@ class CertificateTemplateAssetTest(TestCase): certificate_template_asset = CertificateTemplateAsset.objects.get(id=1) self.assertEqual(certificate_template_asset.asset, 'certificate_template_assets/1/picture2.jpg') + + +@attr('shard_1') +class EligibleCertificateManagerTest(SharedModuleStoreTestCase): + """ + Test the GeneratedCertificate model's object manager for filtering + out ineligible certs. + """ + + @classmethod + def setUpClass(cls): + super(EligibleCertificateManagerTest, cls).setUpClass() + cls.courses = (CourseFactory(), CourseFactory()) + + def setUp(self): + super(EligibleCertificateManagerTest, self).setUp() + self.user = UserFactory() + self.eligible_cert = GeneratedCertificateFactory.create( + eligible_for_certificate=True, + user=self.user, + course_id=self.courses[0].id # pylint: disable=no-member + ) + self.ineligible_cert = GeneratedCertificateFactory.create( + eligible_for_certificate=False, + user=self.user, + course_id=self.courses[1].id # pylint: disable=no-member + ) + + def test_filter_ineligible_certificates(self): + """ + Verify that the EligibleCertificateManager filters out + certificates marked as ineligible, and that the default object + manager for GeneratedCertificate does not filter them out. + """ + self.assertEqual(list(GeneratedCertificate.eligible_certificates.filter(user=self.user)), [self.eligible_cert]) + self.assertEqual( + list(GeneratedCertificate.objects.filter(user=self.user)), # pylint: disable=no-member + [self.eligible_cert, self.ineligible_cert] + ) diff --git a/lms/djangoapps/certificates/tests/test_queue.py b/lms/djangoapps/certificates/tests/test_queue.py index 9dede744c5..e50e85246f 100644 --- a/lms/djangoapps/certificates/tests/test_queue.py +++ b/lms/djangoapps/certificates/tests/test_queue.py @@ -9,6 +9,7 @@ from nose.plugins.attrib import attr from django.test import TestCase from django.test.utils import override_settings +from course_modes.models import CourseMode from opaque_keys.edx.locator import CourseLocator from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from student.tests.factories import UserFactory, CourseEnrollmentFactory @@ -22,13 +23,14 @@ from xmodule.modulestore.tests.factories import CourseFactory # in our `XQueueCertInterface` implementation. from capa.xqueue_interface import XQueueInterface -from certificates.queue import XQueueCertInterface from certificates.models import ( ExampleCertificateSet, ExampleCertificate, GeneratedCertificate, CertificateStatuses, ) +from certificates.queue import XQueueCertInterface +from certificates.tests.factories import CertificateWhitelistFactory from lms.djangoapps.verify_student.tests.factories import SoftwareSecurePhotoVerificationFactory @@ -74,7 +76,7 @@ class XQueueCertInterfaceAddCertificateTest(ModuleStoreTestCase): # Verify that add_cert method does not add message to queue self.assertFalse(mock_send.called) - certificate = GeneratedCertificate.objects.get(user=self.user, course_id=self.course.id) + certificate = GeneratedCertificate.eligible_certificates.get(user=self.user, course_id=self.course.id) self.assertEqual(certificate.status, CertificateStatuses.downloadable) self.assertIsNotNone(certificate.verify_uuid) @@ -84,7 +86,11 @@ class XQueueCertInterfaceAddCertificateTest(ModuleStoreTestCase): template_name = 'certificate-template-{id.org}-{id.course}.pdf'.format( id=self.course.id ) - self.assert_queue_response(mode, mode, template_name) + mock_send = self.add_cert_to_queue(mode) + if CourseMode.is_eligible_for_certificate(mode): + self.assert_certificate_generated(mock_send, mode, template_name) + else: + self.assert_ineligible_certificate_generated(mock_send, mode) @ddt.data('credit', 'verified') def test_add_cert_with_verified_certificates(self, mode): @@ -95,10 +101,40 @@ class XQueueCertInterfaceAddCertificateTest(ModuleStoreTestCase): id=self.course.id ) - self.assert_queue_response(mode, 'verified', template_name) + mock_send = self.add_cert_to_queue(mode) + self.assert_certificate_generated(mock_send, 'verified', template_name) - def assert_queue_response(self, mode, expected_mode, expected_template_name): - """Dry method for course enrollment and adding request to queue.""" + def test_ineligible_cert_whitelisted(self): + """Test that audit mode students can receive a certificate if they are whitelisted.""" + # Enroll as audit + CourseEnrollmentFactory( + user=self.user_2, + course_id=self.course.id, + is_active=True, + mode='audit' + ) + # Whitelist student + CertificateWhitelistFactory(course_id=self.course.id, user=self.user_2) + + # Generate certs + with patch('courseware.grades.grade', Mock(return_value={'grade': 'Pass', 'percent': 0.75})): + with patch.object(XQueueInterface, 'send_to_queue') as mock_send: + mock_send.return_value = (0, None) + self.xqueue.add_cert(self.user_2, self.course.id) + + # Assert cert generated correctly + self.assertTrue(mock_send.called) + certificate = GeneratedCertificate.certificate_for_student(self.user_2, self.course.id) + self.assertIsNotNone(certificate) + self.assertEqual(certificate.mode, 'audit') + + def add_cert_to_queue(self, mode): + """ + Dry method for course enrollment and adding request to + queue. Returns a mock object containing information about the + `XQueueInterface.send_to_queue` method, which can be used in other + assertions. + """ CourseEnrollmentFactory( user=self.user_2, course_id=self.course.id, @@ -109,19 +145,42 @@ class XQueueCertInterfaceAddCertificateTest(ModuleStoreTestCase): with patch.object(XQueueInterface, 'send_to_queue') as mock_send: mock_send.return_value = (0, None) self.xqueue.add_cert(self.user_2, self.course.id) + return mock_send + def assert_certificate_generated(self, mock_send, expected_mode, expected_template_name): + """ + Assert that a certificate was generated with the correct mode and + template type. + """ # Verify that the task was sent to the queue with the correct callback URL self.assertTrue(mock_send.called) __, kwargs = mock_send.call_args_list[0] actual_header = json.loads(kwargs['header']) self.assertIn('https://edx.org/update_certificate?key=', actual_header['lms_callback_url']) - certificate = GeneratedCertificate.objects.get(user=self.user_2, course_id=self.course.id) - self.assertEqual(certificate.mode, expected_mode) body = json.loads(kwargs['body']) self.assertIn(expected_template_name, body['template_pdf']) + certificate = GeneratedCertificate.eligible_certificates.get(user=self.user_2, course_id=self.course.id) + self.assertEqual(certificate.mode, expected_mode) + + def assert_ineligible_certificate_generated(self, mock_send, expected_mode): + """ + Assert that an ineligible certificate was generated with the + correct mode. + """ + # Ensure the certificate was not generated + self.assertFalse(mock_send.called) + + certificate = GeneratedCertificate.objects.get( # pylint: disable=no-member + user=self.user_2, + course_id=self.course.id + ) + + self.assertFalse(certificate.eligible_for_certificate) + self.assertEqual(certificate.mode, expected_mode) + @attr('shard_1') @override_settings(CERT_QUEUE='certificates') diff --git a/lms/djangoapps/certificates/tests/test_support_views.py b/lms/djangoapps/certificates/tests/test_support_views.py index db3cd2d6d4..1b2f1e5590 100644 --- a/lms/djangoapps/certificates/tests/test_support_views.py +++ b/lms/djangoapps/certificates/tests/test_support_views.py @@ -71,7 +71,7 @@ class CertificateSupportTestCase(ModuleStoreTestCase): ) # Create certificates for the student - self.cert = GeneratedCertificate.objects.create( + self.cert = GeneratedCertificate.eligible_certificates.create( user=self.student, course_id=self.CERT_COURSE_KEY, grade=self.CERT_GRADE, @@ -259,7 +259,7 @@ class CertificateRegenerateTests(CertificateSupportTestCase): # Check that the user's certificate was updated # Since the student hasn't actually passed the course, # we'd expect that the certificate status will be "notpassing" - cert = GeneratedCertificate.objects.get(user=self.student) + cert = GeneratedCertificate.eligible_certificates.get(user=self.student) self.assertEqual(cert.status, CertificateStatuses.notpassing) def test_regenerate_certificate_missing_params(self): @@ -298,7 +298,7 @@ class CertificateRegenerateTests(CertificateSupportTestCase): def test_regenerate_user_has_no_certificate(self): # Delete the user's certificate - GeneratedCertificate.objects.all().delete() + GeneratedCertificate.eligible_certificates.all().delete() # Should be able to regenerate response = self._regenerate( @@ -308,7 +308,7 @@ class CertificateRegenerateTests(CertificateSupportTestCase): self.assertEqual(response.status_code, 200) # A new certificate is created - num_certs = GeneratedCertificate.objects.filter(user=self.student).count() + num_certs = GeneratedCertificate.eligible_certificates.filter(user=self.student).count() self.assertEqual(num_certs, 1) def _regenerate(self, course_key=None, username=None): @@ -412,7 +412,7 @@ class CertificateGenerateTests(CertificateSupportTestCase): def test_generate_user_has_no_certificate(self): # Delete the user's certificate - GeneratedCertificate.objects.all().delete() + GeneratedCertificate.eligible_certificates.all().delete() # Should be able to generate response = self._generate( @@ -422,7 +422,7 @@ class CertificateGenerateTests(CertificateSupportTestCase): self.assertEqual(response.status_code, 200) # A new certificate is created - num_certs = GeneratedCertificate.objects.filter(user=self.student).count() + num_certs = GeneratedCertificate.eligible_certificates.filter(user=self.student).count() self.assertEqual(num_certs, 1) def _generate(self, course_key=None, username=None): diff --git a/lms/djangoapps/certificates/tests/test_views.py b/lms/djangoapps/certificates/tests/test_views.py index 19ad99239f..c252c61267 100644 --- a/lms/djangoapps/certificates/tests/test_views.py +++ b/lms/djangoapps/certificates/tests/test_views.py @@ -210,7 +210,7 @@ class MicrositeCertificatesViewsTests(ModuleStoreTestCase): self.user.profile.name = "Joe User" self.user.profile.save() self.client.login(username=self.user.username, password='foo') - self.cert = GeneratedCertificate.objects.create( + self.cert = GeneratedCertificate.eligible_certificates.create( user=self.user, course_id=self.course_id, download_uuid=uuid4(), diff --git a/lms/djangoapps/certificates/tests/test_webview_views.py b/lms/djangoapps/certificates/tests/test_webview_views.py index 624e0e4027..b7aea616a9 100644 --- a/lms/djangoapps/certificates/tests/test_webview_views.py +++ b/lms/djangoapps/certificates/tests/test_webview_views.py @@ -13,6 +13,7 @@ from django.core.urlresolvers import reverse from django.test.client import Client from django.test.utils import override_settings +from course_modes.models import CourseMode from openedx.core.lib.tests.assertions.events import assert_event_matches from student.tests.factories import UserFactory, CourseEnrollmentFactory from student.roles import CourseStaffRole @@ -96,7 +97,8 @@ class CertificatesViewsTests(ModuleStoreTestCase, EventTrackingTestCase): ) CourseEnrollmentFactory.create( user=self.user, - course_id=self.course_id + course_id=self.course_id, + mode=CourseMode.HONOR, ) CertificateHtmlViewConfigurationFactory.create() LinkedInAddToProfileConfigurationFactory.create() @@ -378,6 +380,32 @@ class CertificatesViewsTests(ModuleStoreTestCase, EventTrackingTestCase): self.assertIn("Cannot Find Certificate", response.content) self.assertIn("We cannot find a certificate with this URL or ID number.", response.content) + @ddt.data(True, False) + @override_settings(FEATURES=FEATURES_WITH_CERTS_ENABLED) + def test_audit_certificate_display(self, eligible_for_certificate): + """ + Ensure that audit-mode certs are not shown in the web view. + """ + # Convert the cert to audit, with the specified eligibility + self.cert.mode = 'audit' + self.cert.eligible_for_certificate = eligible_for_certificate + self.cert.save() + + self._add_course_certificates(count=1, signatory_count=2) + test_url = get_certificate_url( + user_id=self.user.id, + course_id=unicode(self.course.id) + ) + response = self.client.get(test_url) + + if eligible_for_certificate: + self.assertIn(str(self.cert.verify_uuid), response.content) + else: + self.assertIn("Invalid Certificate", response.content) + self.assertIn("Cannot Find Certificate", response.content) + self.assertIn("We cannot find a certificate with this URL or ID number.", response.content) + self.assertNotIn(str(self.cert.verify_uuid), response.content) + @override_settings(FEATURES=FEATURES_WITH_CERTS_ENABLED) def test_html_view_for_invalid_certificate(self): """ @@ -533,7 +561,7 @@ class CertificatesViewsTests(ModuleStoreTestCase, EventTrackingTestCase): course_id=unicode(self.course.id) ) self.cert.delete() - self.assertEqual(len(GeneratedCertificate.objects.all()), 0) + self.assertEqual(len(GeneratedCertificate.eligible_certificates.all()), 0) response = self.client.get(test_url) self.assertIn('invalid', response.content) @@ -556,7 +584,7 @@ class CertificatesViewsTests(ModuleStoreTestCase, EventTrackingTestCase): preview mode. Either the certificate is marked active or not. """ self.cert.delete() - self.assertEqual(len(GeneratedCertificate.objects.all()), 0) + self.assertEqual(len(GeneratedCertificate.eligible_certificates.all()), 0) self._add_course_certificates(count=1, signatory_count=2) test_url = get_certificate_url( user_id=self.user.id, diff --git a/lms/djangoapps/certificates/views/webview.py b/lms/djangoapps/certificates/views/webview.py index 8a58d7e54c..a77b41741e 100644 --- a/lms/djangoapps/certificates/views/webview.py +++ b/lms/djangoapps/certificates/views/webview.py @@ -342,7 +342,7 @@ def _get_user_certificate(request, user, course_key, course, preview_mode=None): else: # certificate is being viewed by learner or public try: - user_certificate = GeneratedCertificate.objects.get( + user_certificate = GeneratedCertificate.eligible_certificates.get( user=user, course_id=course_key, status=CertificateStatuses.downloadable @@ -459,7 +459,7 @@ def render_cert_by_uuid(request, certificate_uuid): This public view generates an HTML representation of the specified certificate """ try: - certificate = GeneratedCertificate.objects.get( + certificate = GeneratedCertificate.eligible_certificates.get( verify_uuid=certificate_uuid, status=CertificateStatuses.downloadable ) diff --git a/lms/djangoapps/certificates/views/xqueue.py b/lms/djangoapps/certificates/views/xqueue.py index bd60e5221b..e09fd7997e 100644 --- a/lms/djangoapps/certificates/views/xqueue.py +++ b/lms/djangoapps/certificates/views/xqueue.py @@ -75,7 +75,7 @@ def update_certificate(request): try: course_key = SlashSeparatedCourseKey.from_deprecated_string(xqueue_body['course_id']) - cert = GeneratedCertificate.objects.get( + cert = GeneratedCertificate.eligible_certificates.get( user__username=xqueue_body['username'], course_id=course_key, key=xqueue_header['lms_key']) diff --git a/lms/djangoapps/instructor/tests/test_certificates.py b/lms/djangoapps/instructor/tests/test_certificates.py index 28cb59cc0c..5367e871c7 100644 --- a/lms/djangoapps/instructor/tests/test_certificates.py +++ b/lms/djangoapps/instructor/tests/test_certificates.py @@ -619,7 +619,7 @@ class CertificateExceptionViewInstructorApiTest(SharedModuleStoreTestCase): # Verify that certificate exception successfully removed from CertificateWhitelist and GeneratedCertificate with self.assertRaises(ObjectDoesNotExist): CertificateWhitelist.objects.get(user=self.user2, course_id=self.course.id) - GeneratedCertificate.objects.get( + GeneratedCertificate.eligible_certificates.get( user=self.user2, course_id=self.course.id, status__not=CertificateStatuses.unavailable ) @@ -1010,7 +1010,7 @@ class CertificateInvalidationViewTests(SharedModuleStoreTestCase): self.fail("The certificate is not invalidated.") # Validate generated certificate was invalidated - generated_certificate = GeneratedCertificate.objects.get( + generated_certificate = GeneratedCertificate.eligible_certificates.get( user=self.enrolled_user_1, course_id=self.course.id, ) diff --git a/lms/djangoapps/instructor/views/api.py b/lms/djangoapps/instructor/views/api.py index d52efa6c10..a03c20dc3b 100644 --- a/lms/djangoapps/instructor/views/api.py +++ b/lms/djangoapps/instructor/views/api.py @@ -2785,7 +2785,7 @@ def add_certificate_exception(course_key, student, certificate_exception): } ) - generated_certificate = GeneratedCertificate.objects.filter( + generated_certificate = GeneratedCertificate.eligible_certificates.filter( user=student, course_id=course_key, status=CertificateStatuses.downloadable, @@ -2822,7 +2822,10 @@ def remove_certificate_exception(course_key, student): ) try: - generated_certificate = GeneratedCertificate.objects.get(user=student, course_id=course_key) + generated_certificate = GeneratedCertificate.objects.get( # pylint: disable=no-member + user=student, + course_id=course_key + ) generated_certificate.invalidate() except ObjectDoesNotExist: # Certificate has not been generated yet, so just remove the certificate exception from white list diff --git a/lms/djangoapps/instructor_analytics/basic.py b/lms/djangoapps/instructor_analytics/basic.py index 1173390ee6..7e0fff8806 100644 --- a/lms/djangoapps/instructor_analytics/basic.py +++ b/lms/djangoapps/instructor_analytics/basic.py @@ -185,7 +185,7 @@ def issued_certificates(course_key, features): report_run_date = datetime.date.today().strftime("%B %d, %Y") certificate_features = [x for x in CERTIFICATE_FEATURES if x in features] - generated_certificates = list(GeneratedCertificate.objects.filter( + generated_certificates = list(GeneratedCertificate.eligible_certificates.filter( course_id=course_key, status=CertificateStatuses.downloadable ).values(*certificate_features).annotate(total_issued_certificate=Count('mode'))) diff --git a/lms/djangoapps/instructor_task/tasks_helper.py b/lms/djangoapps/instructor_task/tasks_helper.py index f0ef86eb43..fffd60a52a 100644 --- a/lms/djangoapps/instructor_task/tasks_helper.py +++ b/lms/djangoapps/instructor_task/tasks_helper.py @@ -1584,7 +1584,7 @@ def invalidate_generated_certificates(course_id, enrolled_students, certificate_ :param enrolled_students: (queryset or list) students enrolled in the course :param certificate_statuses: certificates statuses for whom to remove generated certificate """ - certificates = GeneratedCertificate.objects.filter( + certificates = GeneratedCertificate.objects.filter( # pylint: disable=no-member user__in=enrolled_students, course_id=course_id, status__in=certificate_statuses, diff --git a/lms/djangoapps/instructor_task/tests/test_tasks_helper.py b/lms/djangoapps/instructor_task/tests/test_tasks_helper.py index 5d4b5f0627..1d7fbe2ca4 100644 --- a/lms/djangoapps/instructor_task/tests/test_tasks_helper.py +++ b/lms/djangoapps/instructor_task/tests/test_tasks_helper.py @@ -1802,7 +1802,7 @@ class TestCertificateGeneration(InstructorTaskModuleTestCase): }, result ) - generated_certificates = GeneratedCertificate.objects.filter( + generated_certificates = GeneratedCertificate.eligible_certificates.filter( user__in=students, course_id=self.course.id, mode='honor' @@ -1912,7 +1912,7 @@ class TestCertificateGeneration(InstructorTaskModuleTestCase): result ) - generated_certificates = GeneratedCertificate.objects.filter( + generated_certificates = GeneratedCertificate.eligible_certificates.filter( user__in=students, course_id=self.course.id, mode='honor'