From 88fef8b2a4fd996072f16e8d7713f645db30b066 Mon Sep 17 00:00:00 2001 From: "J. Cliff Dyer" Date: Mon, 1 Feb 2016 20:36:35 +0000 Subject: [PATCH 1/2] Use renamed edx_oauth2_provider throughout. MA-1998 Install and configure django_oauth_toolkit to coexist with existing oauth libraries. --- .../contentstore/views/tests/test_programs.py | 2 +- cms/envs/common.py | 2 +- common/djangoapps/auth_exchange/forms.py | 2 +- .../test/db_cache/bok_choy_data_default.json | 2 +- .../bok_choy_migrations_data_default.sql | 4 ++-- ...migrations_data_student_module_history.sql | 4 ++-- .../test/db_cache/bok_choy_schema_default.sql | 4 ++-- ...bok_choy_schema_student_module_history.sql | 5 +++-- common/test/db_cache/lettuce.db | Bin 1410048 -> 1396736 bytes .../course_structure_api/v0/tests.py | 2 +- lms/djangoapps/edxnotes/tests.py | 2 +- lms/djangoapps/oauth2_handler/handlers.py | 2 +- lms/djangoapps/oauth2_handler/tests.py | 2 +- lms/envs/common.py | 14 +++++++------- lms/urls.py | 2 +- .../credentials/tests/test_utils.py | 2 +- .../djangoapps/credit/tests/test_views.py | 2 +- .../programs/tasks/v1/tests/test_tasks.py | 2 +- .../djangoapps/programs/tests/test_utils.py | 2 +- openedx/core/lib/tests/test_edx_api_utils.py | 2 +- openedx/core/lib/tests/test_token_utils.py | 2 +- 21 files changed, 31 insertions(+), 30 deletions(-) diff --git a/cms/djangoapps/contentstore/views/tests/test_programs.py b/cms/djangoapps/contentstore/views/tests/test_programs.py index fc5f2df2d2..1f3042170e 100644 --- a/cms/djangoapps/contentstore/views/tests/test_programs.py +++ b/cms/djangoapps/contentstore/views/tests/test_programs.py @@ -5,7 +5,7 @@ from django.conf import settings from django.core.urlresolvers import reverse import httpretty import mock -from oauth2_provider.tests.factories import ClientFactory +from edx_oauth2_provider.tests.factories import ClientFactory from provider.constants import CONFIDENTIAL from openedx.core.djangoapps.programs.models import ProgramsApiConfig diff --git a/cms/envs/common.py b/cms/envs/common.py index dff2231171..954ae13380 100644 --- a/cms/envs/common.py +++ b/cms/envs/common.py @@ -867,7 +867,7 @@ INSTALLED_APPS = ( # OAuth2 Provider 'provider', 'provider.oauth2', - 'oauth2_provider', + 'edx_oauth2_provider', # These are apps that aren't strictly needed by Studio, but are imported by # other apps that are. Django 1.8 wants to have imported models supported diff --git a/common/djangoapps/auth_exchange/forms.py b/common/djangoapps/auth_exchange/forms.py index cad3db1e1b..81cd9da183 100644 --- a/common/djangoapps/auth_exchange/forms.py +++ b/common/djangoapps/auth_exchange/forms.py @@ -3,7 +3,7 @@ Forms to support third-party to first-party OAuth 2.0 access token exchange """ from django.contrib.auth.models import User from django.forms import CharField -from oauth2_provider.constants import SCOPE_NAMES +from edx_oauth2_provider.constants import SCOPE_NAMES import provider.constants from provider.forms import OAuthForm, OAuthValidationError from provider.oauth2.forms import ScopeChoiceField, ScopeMixin diff --git a/common/test/db_cache/bok_choy_data_default.json b/common/test/db_cache/bok_choy_data_default.json index aebe847da7..1eece3c36e 100644 --- a/common/test/db_cache/bok_choy_data_default.json +++ b/common/test/db_cache/bok_choy_data_default.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": "assetbaseurlconfig", "app_label": "static_replace"}, "model": "contenttypes.contenttype", "pk": 17}, {"fields": {"model": "assetexcludedextensionsconfig", "app_label": "static_replace"}, "model": "contenttypes.contenttype", "pk": 18}, {"fields": {"model": "courseassetcachettlconfig", "app_label": "contentserver"}, "model": "contenttypes.contenttype", "pk": 19}, {"fields": {"model": "studentmodule", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 20}, {"fields": {"model": "studentmodulehistory", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 21}, {"fields": {"model": "xmoduleuserstatesummaryfield", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 22}, {"fields": {"model": "xmodulestudentprefsfield", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 23}, {"fields": {"model": "xmodulestudentinfofield", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 24}, {"fields": {"model": "offlinecomputedgrade", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 25}, {"fields": {"model": "offlinecomputedgradelog", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 26}, {"fields": {"model": "studentfieldoverride", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 27}, {"fields": {"model": "anonymoususerid", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 28}, {"fields": {"model": "userstanding", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 29}, {"fields": {"model": "userprofile", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 30}, {"fields": {"model": "usersignupsource", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 31}, {"fields": {"model": "usertestgroup", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 32}, {"fields": {"model": "registration", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 33}, {"fields": {"model": "pendingnamechange", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 34}, {"fields": {"model": "pendingemailchange", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 35}, {"fields": {"model": "passwordhistory", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 36}, {"fields": {"model": "loginfailures", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 37}, {"fields": {"model": "historicalcourseenrollment", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 38}, {"fields": {"model": "courseenrollment", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 39}, {"fields": {"model": "manualenrollmentaudit", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 40}, {"fields": {"model": "courseenrollmentallowed", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 41}, {"fields": {"model": "courseaccessrole", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 42}, {"fields": {"model": "dashboardconfiguration", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 43}, {"fields": {"model": "linkedinaddtoprofileconfiguration", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 44}, {"fields": {"model": "entranceexamconfiguration", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 45}, {"fields": {"model": "languageproficiency", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 46}, {"fields": {"model": "courseenrollmentattribute", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 47}, {"fields": {"model": "enrollmentrefundconfiguration", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 48}, {"fields": {"model": "trackinglog", "app_label": "track"}, "model": "contenttypes.contenttype", "pk": 49}, {"fields": {"model": "ratelimitconfiguration", "app_label": "util"}, "model": "contenttypes.contenttype", "pk": 50}, {"fields": {"model": "certificatewhitelist", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 51}, {"fields": {"model": "generatedcertificate", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 52}, {"fields": {"model": "certificategenerationhistory", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 53}, {"fields": {"model": "certificateinvalidation", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 54}, {"fields": {"model": "examplecertificateset", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 55}, {"fields": {"model": "examplecertificate", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 56}, {"fields": {"model": "certificategenerationcoursesetting", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 57}, {"fields": {"model": "certificategenerationconfiguration", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 58}, {"fields": {"model": "certificatehtmlviewconfiguration", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 59}, {"fields": {"model": "badgeassertion", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 60}, {"fields": {"model": "badgeimageconfiguration", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 61}, {"fields": {"model": "certificatetemplate", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 62}, {"fields": {"model": "certificatetemplateasset", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 63}, {"fields": {"model": "instructortask", "app_label": "instructor_task"}, "model": "contenttypes.contenttype", "pk": 64}, {"fields": {"model": "courseusergroup", "app_label": "course_groups"}, "model": "contenttypes.contenttype", "pk": 65}, {"fields": {"model": "cohortmembership", "app_label": "course_groups"}, "model": "contenttypes.contenttype", "pk": 66}, {"fields": {"model": "courseusergrouppartitiongroup", "app_label": "course_groups"}, "model": "contenttypes.contenttype", "pk": 67}, {"fields": {"model": "coursecohortssettings", "app_label": "course_groups"}, "model": "contenttypes.contenttype", "pk": 68}, {"fields": {"model": "coursecohort", "app_label": "course_groups"}, "model": "contenttypes.contenttype", "pk": 69}, {"fields": {"model": "courseemail", "app_label": "bulk_email"}, "model": "contenttypes.contenttype", "pk": 70}, {"fields": {"model": "optout", "app_label": "bulk_email"}, "model": "contenttypes.contenttype", "pk": 71}, {"fields": {"model": "courseemailtemplate", "app_label": "bulk_email"}, "model": "contenttypes.contenttype", "pk": 72}, {"fields": {"model": "courseauthorization", "app_label": "bulk_email"}, "model": "contenttypes.contenttype", "pk": 73}, {"fields": {"model": "brandinginfoconfig", "app_label": "branding"}, "model": "contenttypes.contenttype", "pk": 74}, {"fields": {"model": "brandingapiconfig", "app_label": "branding"}, "model": "contenttypes.contenttype", "pk": 75}, {"fields": {"model": "externalauthmap", "app_label": "external_auth"}, "model": "contenttypes.contenttype", "pk": 76}, {"fields": {"model": "nonce", "app_label": "django_openid_auth"}, "model": "contenttypes.contenttype", "pk": 77}, {"fields": {"model": "association", "app_label": "django_openid_auth"}, "model": "contenttypes.contenttype", "pk": 78}, {"fields": {"model": "useropenid", "app_label": "django_openid_auth"}, "model": "contenttypes.contenttype", "pk": 79}, {"fields": {"model": "client", "app_label": "oauth2"}, "model": "contenttypes.contenttype", "pk": 80}, {"fields": {"model": "grant", "app_label": "oauth2"}, "model": "contenttypes.contenttype", "pk": 81}, {"fields": {"model": "accesstoken", "app_label": "oauth2"}, "model": "contenttypes.contenttype", "pk": 82}, {"fields": {"model": "refreshtoken", "app_label": "oauth2"}, "model": "contenttypes.contenttype", "pk": 83}, {"fields": {"model": "trustedclient", "app_label": "oauth2_provider"}, "model": "contenttypes.contenttype", "pk": 84}, {"fields": {"model": "oauth2providerconfig", "app_label": "third_party_auth"}, "model": "contenttypes.contenttype", "pk": 85}, {"fields": {"model": "samlproviderconfig", "app_label": "third_party_auth"}, "model": "contenttypes.contenttype", "pk": 86}, {"fields": {"model": "samlconfiguration", "app_label": "third_party_auth"}, "model": "contenttypes.contenttype", "pk": 87}, {"fields": {"model": "samlproviderdata", "app_label": "third_party_auth"}, "model": "contenttypes.contenttype", "pk": 88}, {"fields": {"model": "ltiproviderconfig", "app_label": "third_party_auth"}, "model": "contenttypes.contenttype", "pk": 89}, {"fields": {"model": "providerapipermissions", "app_label": "third_party_auth"}, "model": "contenttypes.contenttype", "pk": 90}, {"fields": {"model": "nonce", "app_label": "oauth_provider"}, "model": "contenttypes.contenttype", "pk": 91}, {"fields": {"model": "scope", "app_label": "oauth_provider"}, "model": "contenttypes.contenttype", "pk": 92}, {"fields": {"model": "consumer", "app_label": "oauth_provider"}, "model": "contenttypes.contenttype", "pk": 93}, {"fields": {"model": "token", "app_label": "oauth_provider"}, "model": "contenttypes.contenttype", "pk": 94}, {"fields": {"model": "resource", "app_label": "oauth_provider"}, "model": "contenttypes.contenttype", "pk": 95}, {"fields": {"model": "article", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 96}, {"fields": {"model": "articleforobject", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 97}, {"fields": {"model": "articlerevision", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 98}, {"fields": {"model": "urlpath", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 99}, {"fields": {"model": "articleplugin", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 100}, {"fields": {"model": "reusableplugin", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 101}, {"fields": {"model": "simpleplugin", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 102}, {"fields": {"model": "revisionplugin", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 103}, {"fields": {"model": "revisionpluginrevision", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 104}, {"fields": {"model": "image", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 105}, {"fields": {"model": "imagerevision", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 106}, {"fields": {"model": "attachment", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 107}, {"fields": {"model": "attachmentrevision", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 108}, {"fields": {"model": "notificationtype", "app_label": "django_notify"}, "model": "contenttypes.contenttype", "pk": 109}, {"fields": {"model": "settings", "app_label": "django_notify"}, "model": "contenttypes.contenttype", "pk": 110}, {"fields": {"model": "subscription", "app_label": "django_notify"}, "model": "contenttypes.contenttype", "pk": 111}, {"fields": {"model": "notification", "app_label": "django_notify"}, "model": "contenttypes.contenttype", "pk": 112}, {"fields": {"model": "logentry", "app_label": "admin"}, "model": "contenttypes.contenttype", "pk": 113}, {"fields": {"model": "role", "app_label": "django_comment_common"}, "model": "contenttypes.contenttype", "pk": 114}, {"fields": {"model": "permission", "app_label": "django_comment_common"}, "model": "contenttypes.contenttype", "pk": 115}, {"fields": {"model": "note", "app_label": "notes"}, "model": "contenttypes.contenttype", "pk": 116}, {"fields": {"model": "splashconfig", "app_label": "splash"}, "model": "contenttypes.contenttype", "pk": 117}, {"fields": {"model": "userpreference", "app_label": "user_api"}, "model": "contenttypes.contenttype", "pk": 118}, {"fields": {"model": "usercoursetag", "app_label": "user_api"}, "model": "contenttypes.contenttype", "pk": 119}, {"fields": {"model": "userorgtag", "app_label": "user_api"}, "model": "contenttypes.contenttype", "pk": 120}, {"fields": {"model": "order", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 121}, {"fields": {"model": "orderitem", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 122}, {"fields": {"model": "invoice", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 123}, {"fields": {"model": "invoicetransaction", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 124}, {"fields": {"model": "invoiceitem", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 125}, {"fields": {"model": "courseregistrationcodeinvoiceitem", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 126}, {"fields": {"model": "invoicehistory", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 127}, {"fields": {"model": "courseregistrationcode", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 128}, {"fields": {"model": "registrationcoderedemption", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 129}, {"fields": {"model": "coupon", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 130}, {"fields": {"model": "couponredemption", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 131}, {"fields": {"model": "paidcourseregistration", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 132}, {"fields": {"model": "courseregcodeitem", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 133}, {"fields": {"model": "courseregcodeitemannotation", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 134}, {"fields": {"model": "paidcourseregistrationannotation", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 135}, {"fields": {"model": "certificateitem", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 136}, {"fields": {"model": "donationconfiguration", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 137}, {"fields": {"model": "donation", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 138}, {"fields": {"model": "coursemode", "app_label": "course_modes"}, "model": "contenttypes.contenttype", "pk": 139}, {"fields": {"model": "coursemodesarchive", "app_label": "course_modes"}, "model": "contenttypes.contenttype", "pk": 140}, {"fields": {"model": "coursemodeexpirationconfig", "app_label": "course_modes"}, "model": "contenttypes.contenttype", "pk": 141}, {"fields": {"model": "softwaresecurephotoverification", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 142}, {"fields": {"model": "historicalverificationdeadline", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 143}, {"fields": {"model": "verificationdeadline", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 144}, {"fields": {"model": "verificationcheckpoint", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 145}, {"fields": {"model": "verificationstatus", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 146}, {"fields": {"model": "incoursereverificationconfiguration", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 147}, {"fields": {"model": "icrvstatusemailsconfiguration", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 148}, {"fields": {"model": "skippedreverification", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 149}, {"fields": {"model": "darklangconfig", "app_label": "dark_lang"}, "model": "contenttypes.contenttype", "pk": 150}, {"fields": {"model": "microsite", "app_label": "microsite_configuration"}, "model": "contenttypes.contenttype", "pk": 151}, {"fields": {"model": "micrositehistory", "app_label": "microsite_configuration"}, "model": "contenttypes.contenttype", "pk": 152}, {"fields": {"model": "historicalmicrositeorganizationmapping", "app_label": "microsite_configuration"}, "model": "contenttypes.contenttype", "pk": 153}, {"fields": {"model": "micrositeorganizationmapping", "app_label": "microsite_configuration"}, "model": "contenttypes.contenttype", "pk": 154}, {"fields": {"model": "historicalmicrositetemplate", "app_label": "microsite_configuration"}, "model": "contenttypes.contenttype", "pk": 155}, {"fields": {"model": "micrositetemplate", "app_label": "microsite_configuration"}, "model": "contenttypes.contenttype", "pk": 156}, {"fields": {"model": "whitelistedrssurl", "app_label": "rss_proxy"}, "model": "contenttypes.contenttype", "pk": 157}, {"fields": {"model": "embargoedcourse", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 158}, {"fields": {"model": "embargoedstate", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 159}, {"fields": {"model": "restrictedcourse", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 160}, {"fields": {"model": "country", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 161}, {"fields": {"model": "countryaccessrule", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 162}, {"fields": {"model": "courseaccessrulehistory", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 163}, {"fields": {"model": "ipfilter", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 164}, {"fields": {"model": "coursererunstate", "app_label": "course_action_state"}, "model": "contenttypes.contenttype", "pk": 165}, {"fields": {"model": "mobileapiconfig", "app_label": "mobile_api"}, "model": "contenttypes.contenttype", "pk": 166}, {"fields": {"model": "usersocialauth", "app_label": "default"}, "model": "contenttypes.contenttype", "pk": 167}, {"fields": {"model": "nonce", "app_label": "default"}, "model": "contenttypes.contenttype", "pk": 168}, {"fields": {"model": "association", "app_label": "default"}, "model": "contenttypes.contenttype", "pk": 169}, {"fields": {"model": "code", "app_label": "default"}, "model": "contenttypes.contenttype", "pk": 170}, {"fields": {"model": "surveyform", "app_label": "survey"}, "model": "contenttypes.contenttype", "pk": 171}, {"fields": {"model": "surveyanswer", "app_label": "survey"}, "model": "contenttypes.contenttype", "pk": 172}, {"fields": {"model": "xblockasidesconfig", "app_label": "lms_xblock"}, "model": "contenttypes.contenttype", "pk": 173}, {"fields": {"model": "courseoverview", "app_label": "course_overviews"}, "model": "contenttypes.contenttype", "pk": 174}, {"fields": {"model": "courseoverviewtab", "app_label": "course_overviews"}, "model": "contenttypes.contenttype", "pk": 175}, {"fields": {"model": "courseoverviewimageset", "app_label": "course_overviews"}, "model": "contenttypes.contenttype", "pk": 176}, {"fields": {"model": "courseoverviewimageconfig", "app_label": "course_overviews"}, "model": "contenttypes.contenttype", "pk": 177}, {"fields": {"model": "coursestructure", "app_label": "course_structures"}, "model": "contenttypes.contenttype", "pk": 178}, {"fields": {"model": "corsmodel", "app_label": "corsheaders"}, "model": "contenttypes.contenttype", "pk": 179}, {"fields": {"model": "xdomainproxyconfiguration", "app_label": "cors_csrf"}, "model": "contenttypes.contenttype", "pk": 180}, {"fields": {"model": "commerceconfiguration", "app_label": "commerce"}, "model": "contenttypes.contenttype", "pk": 181}, {"fields": {"model": "creditprovider", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 182}, {"fields": {"model": "creditcourse", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 183}, {"fields": {"model": "creditrequirement", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 184}, {"fields": {"model": "historicalcreditrequirementstatus", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 185}, {"fields": {"model": "creditrequirementstatus", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 186}, {"fields": {"model": "crediteligibility", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 187}, {"fields": {"model": "historicalcreditrequest", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 188}, {"fields": {"model": "creditrequest", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 189}, {"fields": {"model": "courseteam", "app_label": "teams"}, "model": "contenttypes.contenttype", "pk": 190}, {"fields": {"model": "courseteammembership", "app_label": "teams"}, "model": "contenttypes.contenttype", "pk": 191}, {"fields": {"model": "xblockdisableconfig", "app_label": "xblock_django"}, "model": "contenttypes.contenttype", "pk": 192}, {"fields": {"model": "bookmark", "app_label": "bookmarks"}, "model": "contenttypes.contenttype", "pk": 193}, {"fields": {"model": "xblockcache", "app_label": "bookmarks"}, "model": "contenttypes.contenttype", "pk": 194}, {"fields": {"model": "programsapiconfig", "app_label": "programs"}, "model": "contenttypes.contenttype", "pk": 195}, {"fields": {"model": "selfpacedconfiguration", "app_label": "self_paced"}, "model": "contenttypes.contenttype", "pk": 196}, {"fields": {"model": "kvstore", "app_label": "thumbnail"}, "model": "contenttypes.contenttype", "pk": 197}, {"fields": {"model": "credentialsapiconfig", "app_label": "credentials"}, "model": "contenttypes.contenttype", "pk": 198}, {"fields": {"model": "milestone", "app_label": "milestones"}, "model": "contenttypes.contenttype", "pk": 199}, {"fields": {"model": "milestonerelationshiptype", "app_label": "milestones"}, "model": "contenttypes.contenttype", "pk": 200}, {"fields": {"model": "coursemilestone", "app_label": "milestones"}, "model": "contenttypes.contenttype", "pk": 201}, {"fields": {"model": "coursecontentmilestone", "app_label": "milestones"}, "model": "contenttypes.contenttype", "pk": 202}, {"fields": {"model": "usermilestone", "app_label": "milestones"}, "model": "contenttypes.contenttype", "pk": 203}, {"fields": {"model": "studentitem", "app_label": "submissions"}, "model": "contenttypes.contenttype", "pk": 204}, {"fields": {"model": "submission", "app_label": "submissions"}, "model": "contenttypes.contenttype", "pk": 205}, {"fields": {"model": "score", "app_label": "submissions"}, "model": "contenttypes.contenttype", "pk": 206}, {"fields": {"model": "scoresummary", "app_label": "submissions"}, "model": "contenttypes.contenttype", "pk": 207}, {"fields": {"model": "scoreannotation", "app_label": "submissions"}, "model": "contenttypes.contenttype", "pk": 208}, {"fields": {"model": "rubric", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 209}, {"fields": {"model": "criterion", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 210}, {"fields": {"model": "criterionoption", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 211}, {"fields": {"model": "assessment", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 212}, {"fields": {"model": "assessmentpart", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 213}, {"fields": {"model": "assessmentfeedbackoption", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 214}, {"fields": {"model": "assessmentfeedback", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 215}, {"fields": {"model": "peerworkflow", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 216}, {"fields": {"model": "peerworkflowitem", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 217}, {"fields": {"model": "trainingexample", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 218}, {"fields": {"model": "studenttrainingworkflow", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 219}, {"fields": {"model": "studenttrainingworkflowitem", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 220}, {"fields": {"model": "aiclassifierset", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 221}, {"fields": {"model": "aiclassifier", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 222}, {"fields": {"model": "aitrainingworkflow", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 223}, {"fields": {"model": "aigradingworkflow", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 224}, {"fields": {"model": "staffworkflow", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 225}, {"fields": {"model": "assessmentworkflow", "app_label": "workflow"}, "model": "contenttypes.contenttype", "pk": 226}, {"fields": {"model": "assessmentworkflowstep", "app_label": "workflow"}, "model": "contenttypes.contenttype", "pk": 227}, {"fields": {"model": "assessmentworkflowcancellation", "app_label": "workflow"}, "model": "contenttypes.contenttype", "pk": 228}, {"fields": {"model": "profile", "app_label": "edxval"}, "model": "contenttypes.contenttype", "pk": 229}, {"fields": {"model": "video", "app_label": "edxval"}, "model": "contenttypes.contenttype", "pk": 230}, {"fields": {"model": "coursevideo", "app_label": "edxval"}, "model": "contenttypes.contenttype", "pk": 231}, {"fields": {"model": "encodedvideo", "app_label": "edxval"}, "model": "contenttypes.contenttype", "pk": 232}, {"fields": {"model": "subtitle", "app_label": "edxval"}, "model": "contenttypes.contenttype", "pk": 233}, {"fields": {"model": "proctoredexam", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 234}, {"fields": {"model": "proctoredexamreviewpolicy", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 235}, {"fields": {"model": "proctoredexamreviewpolicyhistory", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 236}, {"fields": {"model": "proctoredexamstudentattempt", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 237}, {"fields": {"model": "proctoredexamstudentattempthistory", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 238}, {"fields": {"model": "proctoredexamstudentallowance", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 239}, {"fields": {"model": "proctoredexamstudentallowancehistory", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 240}, {"fields": {"model": "proctoredexamsoftwaresecurereview", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 241}, {"fields": {"model": "proctoredexamsoftwaresecurereviewhistory", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 242}, {"fields": {"model": "proctoredexamsoftwaresecurecomment", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 243}, {"fields": {"model": "organization", "app_label": "organizations"}, "model": "contenttypes.contenttype", "pk": 244}, {"fields": {"model": "organizationcourse", "app_label": "organizations"}, "model": "contenttypes.contenttype", "pk": 245}, {"fields": {"model": "studentmodulehistoryextended", "app_label": "coursewarehistoryextended"}, "model": "contenttypes.contenttype", "pk": 246}, {"fields": {"model": "videouploadconfig", "app_label": "contentstore"}, "model": "contenttypes.contenttype", "pk": 247}, {"fields": {"model": "pushnotificationconfig", "app_label": "contentstore"}, "model": "contenttypes.contenttype", "pk": 248}, {"fields": {"model": "coursecreator", "app_label": "course_creators"}, "model": "contenttypes.contenttype", "pk": 249}, {"fields": {"model": "studioconfig", "app_label": "xblock_config"}, "model": "contenttypes.contenttype", "pk": 250}, {"fields": {"domain": "example.com", "name": "example.com"}, "model": "sites.site", "pk": 1}, {"fields": {"default": false, "mode": "honor", "icon": "badges/honor.png"}, "model": "certificates.badgeimageconfiguration", "pk": 1}, {"fields": {"default": false, "mode": "verified", "icon": "badges/verified.png"}, "model": "certificates.badgeimageconfiguration", "pk": 2}, {"fields": {"default": false, "mode": "professional", "icon": "badges/professional.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": {"active": true, "description": "Autogenerated milestone relationship type \"fulfills\"", "modified": "2016-02-29T17:58:32.233Z", "name": "fulfills", "created": "2016-02-29T17:58:32.232Z"}, "model": "milestones.milestonerelationshiptype", "pk": 1}, {"fields": {"active": true, "description": "Autogenerated milestone relationship type \"requires\"", "modified": "2016-02-29T17:58:32.234Z", "name": "requires", "created": "2016-02-29T17:58:32.234Z"}, "model": "milestones.milestonerelationshiptype", "pk": 2}, {"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": {"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_assetexcludedextensionsconfig", "name": "Can add asset excluded extensions config", "content_type": 18}, "model": "auth.permission", "pk": 52}, {"fields": {"codename": "change_assetexcludedextensionsconfig", "name": "Can change asset excluded extensions config", "content_type": 18}, "model": "auth.permission", "pk": 53}, {"fields": {"codename": "delete_assetexcludedextensionsconfig", "name": "Can delete asset excluded extensions config", "content_type": 18}, "model": "auth.permission", "pk": 54}, {"fields": {"codename": "add_courseassetcachettlconfig", "name": "Can add course asset cache ttl config", "content_type": 19}, "model": "auth.permission", "pk": 55}, {"fields": {"codename": "change_courseassetcachettlconfig", "name": "Can change course asset cache ttl config", "content_type": 19}, "model": "auth.permission", "pk": 56}, {"fields": {"codename": "delete_courseassetcachettlconfig", "name": "Can delete course asset cache ttl config", "content_type": 19}, "model": "auth.permission", "pk": 57}, {"fields": {"codename": "add_studentmodule", "name": "Can add student module", "content_type": 20}, "model": "auth.permission", "pk": 58}, {"fields": {"codename": "change_studentmodule", "name": "Can change student module", "content_type": 20}, "model": "auth.permission", "pk": 59}, {"fields": {"codename": "delete_studentmodule", "name": "Can delete student module", "content_type": 20}, "model": "auth.permission", "pk": 60}, {"fields": {"codename": "add_studentmodulehistory", "name": "Can add student module history", "content_type": 21}, "model": "auth.permission", "pk": 61}, {"fields": {"codename": "change_studentmodulehistory", "name": "Can change student module history", "content_type": 21}, "model": "auth.permission", "pk": 62}, {"fields": {"codename": "delete_studentmodulehistory", "name": "Can delete student module history", "content_type": 21}, "model": "auth.permission", "pk": 63}, {"fields": {"codename": "add_xmoduleuserstatesummaryfield", "name": "Can add x module user state summary field", "content_type": 22}, "model": "auth.permission", "pk": 64}, {"fields": {"codename": "change_xmoduleuserstatesummaryfield", "name": "Can change x module user state summary field", "content_type": 22}, "model": "auth.permission", "pk": 65}, {"fields": {"codename": "delete_xmoduleuserstatesummaryfield", "name": "Can delete x module user state summary field", "content_type": 22}, "model": "auth.permission", "pk": 66}, {"fields": {"codename": "add_xmodulestudentprefsfield", "name": "Can add x module student prefs field", "content_type": 23}, "model": "auth.permission", "pk": 67}, {"fields": {"codename": "change_xmodulestudentprefsfield", "name": "Can change x module student prefs field", "content_type": 23}, "model": "auth.permission", "pk": 68}, {"fields": {"codename": "delete_xmodulestudentprefsfield", "name": "Can delete x module student prefs field", "content_type": 23}, "model": "auth.permission", "pk": 69}, {"fields": {"codename": "add_xmodulestudentinfofield", "name": "Can add x module student info field", "content_type": 24}, "model": "auth.permission", "pk": 70}, {"fields": {"codename": "change_xmodulestudentinfofield", "name": "Can change x module student info field", "content_type": 24}, "model": "auth.permission", "pk": 71}, {"fields": {"codename": "delete_xmodulestudentinfofield", "name": "Can delete x module student info field", "content_type": 24}, "model": "auth.permission", "pk": 72}, {"fields": {"codename": "add_offlinecomputedgrade", "name": "Can add offline computed grade", "content_type": 25}, "model": "auth.permission", "pk": 73}, {"fields": {"codename": "change_offlinecomputedgrade", "name": "Can change offline computed grade", "content_type": 25}, "model": "auth.permission", "pk": 74}, {"fields": {"codename": "delete_offlinecomputedgrade", "name": "Can delete offline computed grade", "content_type": 25}, "model": "auth.permission", "pk": 75}, {"fields": {"codename": "add_offlinecomputedgradelog", "name": "Can add offline computed grade log", "content_type": 26}, "model": "auth.permission", "pk": 76}, {"fields": {"codename": "change_offlinecomputedgradelog", "name": "Can change offline computed grade log", "content_type": 26}, "model": "auth.permission", "pk": 77}, {"fields": {"codename": "delete_offlinecomputedgradelog", "name": "Can delete offline computed grade log", "content_type": 26}, "model": "auth.permission", "pk": 78}, {"fields": {"codename": "add_studentfieldoverride", "name": "Can add student field override", "content_type": 27}, "model": "auth.permission", "pk": 79}, {"fields": {"codename": "change_studentfieldoverride", "name": "Can change student field override", "content_type": 27}, "model": "auth.permission", "pk": 80}, {"fields": {"codename": "delete_studentfieldoverride", "name": "Can delete student field override", "content_type": 27}, "model": "auth.permission", "pk": 81}, {"fields": {"codename": "add_anonymoususerid", "name": "Can add anonymous user id", "content_type": 28}, "model": "auth.permission", "pk": 82}, {"fields": {"codename": "change_anonymoususerid", "name": "Can change anonymous user id", "content_type": 28}, "model": "auth.permission", "pk": 83}, {"fields": {"codename": "delete_anonymoususerid", "name": "Can delete anonymous user id", "content_type": 28}, "model": "auth.permission", "pk": 84}, {"fields": {"codename": "add_userstanding", "name": "Can add user standing", "content_type": 29}, "model": "auth.permission", "pk": 85}, {"fields": {"codename": "change_userstanding", "name": "Can change user standing", "content_type": 29}, "model": "auth.permission", "pk": 86}, {"fields": {"codename": "delete_userstanding", "name": "Can delete user standing", "content_type": 29}, "model": "auth.permission", "pk": 87}, {"fields": {"codename": "add_userprofile", "name": "Can add user profile", "content_type": 30}, "model": "auth.permission", "pk": 88}, {"fields": {"codename": "change_userprofile", "name": "Can change user profile", "content_type": 30}, "model": "auth.permission", "pk": 89}, {"fields": {"codename": "delete_userprofile", "name": "Can delete user profile", "content_type": 30}, "model": "auth.permission", "pk": 90}, {"fields": {"codename": "add_usersignupsource", "name": "Can add user signup source", "content_type": 31}, "model": "auth.permission", "pk": 91}, {"fields": {"codename": "change_usersignupsource", "name": "Can change user signup source", "content_type": 31}, "model": "auth.permission", "pk": 92}, {"fields": {"codename": "delete_usersignupsource", "name": "Can delete user signup source", "content_type": 31}, "model": "auth.permission", "pk": 93}, {"fields": {"codename": "add_usertestgroup", "name": "Can add user test group", "content_type": 32}, "model": "auth.permission", "pk": 94}, {"fields": {"codename": "change_usertestgroup", "name": "Can change user test group", "content_type": 32}, "model": "auth.permission", "pk": 95}, {"fields": {"codename": "delete_usertestgroup", "name": "Can delete user test group", "content_type": 32}, "model": "auth.permission", "pk": 96}, {"fields": {"codename": "add_registration", "name": "Can add registration", "content_type": 33}, "model": "auth.permission", "pk": 97}, {"fields": {"codename": "change_registration", "name": "Can change registration", "content_type": 33}, "model": "auth.permission", "pk": 98}, {"fields": {"codename": "delete_registration", "name": "Can delete registration", "content_type": 33}, "model": "auth.permission", "pk": 99}, {"fields": {"codename": "add_pendingnamechange", "name": "Can add pending name change", "content_type": 34}, "model": "auth.permission", "pk": 100}, {"fields": {"codename": "change_pendingnamechange", "name": "Can change pending name change", "content_type": 34}, "model": "auth.permission", "pk": 101}, {"fields": {"codename": "delete_pendingnamechange", "name": "Can delete pending name change", "content_type": 34}, "model": "auth.permission", "pk": 102}, {"fields": {"codename": "add_pendingemailchange", "name": "Can add pending email change", "content_type": 35}, "model": "auth.permission", "pk": 103}, {"fields": {"codename": "change_pendingemailchange", "name": "Can change pending email change", "content_type": 35}, "model": "auth.permission", "pk": 104}, {"fields": {"codename": "delete_pendingemailchange", "name": "Can delete pending email change", "content_type": 35}, "model": "auth.permission", "pk": 105}, {"fields": {"codename": "add_passwordhistory", "name": "Can add password history", "content_type": 36}, "model": "auth.permission", "pk": 106}, {"fields": {"codename": "change_passwordhistory", "name": "Can change password history", "content_type": 36}, "model": "auth.permission", "pk": 107}, {"fields": {"codename": "delete_passwordhistory", "name": "Can delete password history", "content_type": 36}, "model": "auth.permission", "pk": 108}, {"fields": {"codename": "add_loginfailures", "name": "Can add login failures", "content_type": 37}, "model": "auth.permission", "pk": 109}, {"fields": {"codename": "change_loginfailures", "name": "Can change login failures", "content_type": 37}, "model": "auth.permission", "pk": 110}, {"fields": {"codename": "delete_loginfailures", "name": "Can delete login failures", "content_type": 37}, "model": "auth.permission", "pk": 111}, {"fields": {"codename": "add_historicalcourseenrollment", "name": "Can add historical course enrollment", "content_type": 38}, "model": "auth.permission", "pk": 112}, {"fields": {"codename": "change_historicalcourseenrollment", "name": "Can change historical course enrollment", "content_type": 38}, "model": "auth.permission", "pk": 113}, {"fields": {"codename": "delete_historicalcourseenrollment", "name": "Can delete historical course enrollment", "content_type": 38}, "model": "auth.permission", "pk": 114}, {"fields": {"codename": "add_courseenrollment", "name": "Can add course enrollment", "content_type": 39}, "model": "auth.permission", "pk": 115}, {"fields": {"codename": "change_courseenrollment", "name": "Can change course enrollment", "content_type": 39}, "model": "auth.permission", "pk": 116}, {"fields": {"codename": "delete_courseenrollment", "name": "Can delete course enrollment", "content_type": 39}, "model": "auth.permission", "pk": 117}, {"fields": {"codename": "add_manualenrollmentaudit", "name": "Can add manual enrollment audit", "content_type": 40}, "model": "auth.permission", "pk": 118}, {"fields": {"codename": "change_manualenrollmentaudit", "name": "Can change manual enrollment audit", "content_type": 40}, "model": "auth.permission", "pk": 119}, {"fields": {"codename": "delete_manualenrollmentaudit", "name": "Can delete manual enrollment audit", "content_type": 40}, "model": "auth.permission", "pk": 120}, {"fields": {"codename": "add_courseenrollmentallowed", "name": "Can add course enrollment allowed", "content_type": 41}, "model": "auth.permission", "pk": 121}, {"fields": {"codename": "change_courseenrollmentallowed", "name": "Can change course enrollment allowed", "content_type": 41}, "model": "auth.permission", "pk": 122}, {"fields": {"codename": "delete_courseenrollmentallowed", "name": "Can delete course enrollment allowed", "content_type": 41}, "model": "auth.permission", "pk": 123}, {"fields": {"codename": "add_courseaccessrole", "name": "Can add course access role", "content_type": 42}, "model": "auth.permission", "pk": 124}, {"fields": {"codename": "change_courseaccessrole", "name": "Can change course access role", "content_type": 42}, "model": "auth.permission", "pk": 125}, {"fields": {"codename": "delete_courseaccessrole", "name": "Can delete course access role", "content_type": 42}, "model": "auth.permission", "pk": 126}, {"fields": {"codename": "add_dashboardconfiguration", "name": "Can add dashboard configuration", "content_type": 43}, "model": "auth.permission", "pk": 127}, {"fields": {"codename": "change_dashboardconfiguration", "name": "Can change dashboard configuration", "content_type": 43}, "model": "auth.permission", "pk": 128}, {"fields": {"codename": "delete_dashboardconfiguration", "name": "Can delete dashboard configuration", "content_type": 43}, "model": "auth.permission", "pk": 129}, {"fields": {"codename": "add_linkedinaddtoprofileconfiguration", "name": "Can add linked in add to profile configuration", "content_type": 44}, "model": "auth.permission", "pk": 130}, {"fields": {"codename": "change_linkedinaddtoprofileconfiguration", "name": "Can change linked in add to profile configuration", "content_type": 44}, "model": "auth.permission", "pk": 131}, {"fields": {"codename": "delete_linkedinaddtoprofileconfiguration", "name": "Can delete linked in add to profile configuration", "content_type": 44}, "model": "auth.permission", "pk": 132}, {"fields": {"codename": "add_entranceexamconfiguration", "name": "Can add entrance exam configuration", "content_type": 45}, "model": "auth.permission", "pk": 133}, {"fields": {"codename": "change_entranceexamconfiguration", "name": "Can change entrance exam configuration", "content_type": 45}, "model": "auth.permission", "pk": 134}, {"fields": {"codename": "delete_entranceexamconfiguration", "name": "Can delete entrance exam configuration", "content_type": 45}, "model": "auth.permission", "pk": 135}, {"fields": {"codename": "add_languageproficiency", "name": "Can add language proficiency", "content_type": 46}, "model": "auth.permission", "pk": 136}, {"fields": {"codename": "change_languageproficiency", "name": "Can change language proficiency", "content_type": 46}, "model": "auth.permission", "pk": 137}, {"fields": {"codename": "delete_languageproficiency", "name": "Can delete language proficiency", "content_type": 46}, "model": "auth.permission", "pk": 138}, {"fields": {"codename": "add_courseenrollmentattribute", "name": "Can add course enrollment attribute", "content_type": 47}, "model": "auth.permission", "pk": 139}, {"fields": {"codename": "change_courseenrollmentattribute", "name": "Can change course enrollment attribute", "content_type": 47}, "model": "auth.permission", "pk": 140}, {"fields": {"codename": "delete_courseenrollmentattribute", "name": "Can delete course enrollment attribute", "content_type": 47}, "model": "auth.permission", "pk": 141}, {"fields": {"codename": "add_enrollmentrefundconfiguration", "name": "Can add enrollment refund configuration", "content_type": 48}, "model": "auth.permission", "pk": 142}, {"fields": {"codename": "change_enrollmentrefundconfiguration", "name": "Can change enrollment refund configuration", "content_type": 48}, "model": "auth.permission", "pk": 143}, {"fields": {"codename": "delete_enrollmentrefundconfiguration", "name": "Can delete enrollment refund configuration", "content_type": 48}, "model": "auth.permission", "pk": 144}, {"fields": {"codename": "add_trackinglog", "name": "Can add tracking log", "content_type": 49}, "model": "auth.permission", "pk": 145}, {"fields": {"codename": "change_trackinglog", "name": "Can change tracking log", "content_type": 49}, "model": "auth.permission", "pk": 146}, {"fields": {"codename": "delete_trackinglog", "name": "Can delete tracking log", "content_type": 49}, "model": "auth.permission", "pk": 147}, {"fields": {"codename": "add_ratelimitconfiguration", "name": "Can add rate limit configuration", "content_type": 50}, "model": "auth.permission", "pk": 148}, {"fields": {"codename": "change_ratelimitconfiguration", "name": "Can change rate limit configuration", "content_type": 50}, "model": "auth.permission", "pk": 149}, {"fields": {"codename": "delete_ratelimitconfiguration", "name": "Can delete rate limit configuration", "content_type": 50}, "model": "auth.permission", "pk": 150}, {"fields": {"codename": "add_certificatewhitelist", "name": "Can add certificate whitelist", "content_type": 51}, "model": "auth.permission", "pk": 151}, {"fields": {"codename": "change_certificatewhitelist", "name": "Can change certificate whitelist", "content_type": 51}, "model": "auth.permission", "pk": 152}, {"fields": {"codename": "delete_certificatewhitelist", "name": "Can delete certificate whitelist", "content_type": 51}, "model": "auth.permission", "pk": 153}, {"fields": {"codename": "add_generatedcertificate", "name": "Can add generated certificate", "content_type": 52}, "model": "auth.permission", "pk": 154}, {"fields": {"codename": "change_generatedcertificate", "name": "Can change generated certificate", "content_type": 52}, "model": "auth.permission", "pk": 155}, {"fields": {"codename": "delete_generatedcertificate", "name": "Can delete generated certificate", "content_type": 52}, "model": "auth.permission", "pk": 156}, {"fields": {"codename": "add_certificategenerationhistory", "name": "Can add certificate generation history", "content_type": 53}, "model": "auth.permission", "pk": 157}, {"fields": {"codename": "change_certificategenerationhistory", "name": "Can change certificate generation history", "content_type": 53}, "model": "auth.permission", "pk": 158}, {"fields": {"codename": "delete_certificategenerationhistory", "name": "Can delete certificate generation history", "content_type": 53}, "model": "auth.permission", "pk": 159}, {"fields": {"codename": "add_certificateinvalidation", "name": "Can add certificate invalidation", "content_type": 54}, "model": "auth.permission", "pk": 160}, {"fields": {"codename": "change_certificateinvalidation", "name": "Can change certificate invalidation", "content_type": 54}, "model": "auth.permission", "pk": 161}, {"fields": {"codename": "delete_certificateinvalidation", "name": "Can delete certificate invalidation", "content_type": 54}, "model": "auth.permission", "pk": 162}, {"fields": {"codename": "add_examplecertificateset", "name": "Can add example certificate set", "content_type": 55}, "model": "auth.permission", "pk": 163}, {"fields": {"codename": "change_examplecertificateset", "name": "Can change example certificate set", "content_type": 55}, "model": "auth.permission", "pk": 164}, {"fields": {"codename": "delete_examplecertificateset", "name": "Can delete example certificate set", "content_type": 55}, "model": "auth.permission", "pk": 165}, {"fields": {"codename": "add_examplecertificate", "name": "Can add example certificate", "content_type": 56}, "model": "auth.permission", "pk": 166}, {"fields": {"codename": "change_examplecertificate", "name": "Can change example certificate", "content_type": 56}, "model": "auth.permission", "pk": 167}, {"fields": {"codename": "delete_examplecertificate", "name": "Can delete example certificate", "content_type": 56}, "model": "auth.permission", "pk": 168}, {"fields": {"codename": "add_certificategenerationcoursesetting", "name": "Can add certificate generation course setting", "content_type": 57}, "model": "auth.permission", "pk": 169}, {"fields": {"codename": "change_certificategenerationcoursesetting", "name": "Can change certificate generation course setting", "content_type": 57}, "model": "auth.permission", "pk": 170}, {"fields": {"codename": "delete_certificategenerationcoursesetting", "name": "Can delete certificate generation course setting", "content_type": 57}, "model": "auth.permission", "pk": 171}, {"fields": {"codename": "add_certificategenerationconfiguration", "name": "Can add certificate generation configuration", "content_type": 58}, "model": "auth.permission", "pk": 172}, {"fields": {"codename": "change_certificategenerationconfiguration", "name": "Can change certificate generation configuration", "content_type": 58}, "model": "auth.permission", "pk": 173}, {"fields": {"codename": "delete_certificategenerationconfiguration", "name": "Can delete certificate generation configuration", "content_type": 58}, "model": "auth.permission", "pk": 174}, {"fields": {"codename": "add_certificatehtmlviewconfiguration", "name": "Can add certificate html view configuration", "content_type": 59}, "model": "auth.permission", "pk": 175}, {"fields": {"codename": "change_certificatehtmlviewconfiguration", "name": "Can change certificate html view configuration", "content_type": 59}, "model": "auth.permission", "pk": 176}, {"fields": {"codename": "delete_certificatehtmlviewconfiguration", "name": "Can delete certificate html view configuration", "content_type": 59}, "model": "auth.permission", "pk": 177}, {"fields": {"codename": "add_badgeassertion", "name": "Can add badge assertion", "content_type": 60}, "model": "auth.permission", "pk": 178}, {"fields": {"codename": "change_badgeassertion", "name": "Can change badge assertion", "content_type": 60}, "model": "auth.permission", "pk": 179}, {"fields": {"codename": "delete_badgeassertion", "name": "Can delete badge assertion", "content_type": 60}, "model": "auth.permission", "pk": 180}, {"fields": {"codename": "add_badgeimageconfiguration", "name": "Can add badge image configuration", "content_type": 61}, "model": "auth.permission", "pk": 181}, {"fields": {"codename": "change_badgeimageconfiguration", "name": "Can change badge image configuration", "content_type": 61}, "model": "auth.permission", "pk": 182}, {"fields": {"codename": "delete_badgeimageconfiguration", "name": "Can delete badge image configuration", "content_type": 61}, "model": "auth.permission", "pk": 183}, {"fields": {"codename": "add_certificatetemplate", "name": "Can add certificate template", "content_type": 62}, "model": "auth.permission", "pk": 184}, {"fields": {"codename": "change_certificatetemplate", "name": "Can change certificate template", "content_type": 62}, "model": "auth.permission", "pk": 185}, {"fields": {"codename": "delete_certificatetemplate", "name": "Can delete certificate template", "content_type": 62}, "model": "auth.permission", "pk": 186}, {"fields": {"codename": "add_certificatetemplateasset", "name": "Can add certificate template asset", "content_type": 63}, "model": "auth.permission", "pk": 187}, {"fields": {"codename": "change_certificatetemplateasset", "name": "Can change certificate template asset", "content_type": 63}, "model": "auth.permission", "pk": 188}, {"fields": {"codename": "delete_certificatetemplateasset", "name": "Can delete certificate template asset", "content_type": 63}, "model": "auth.permission", "pk": 189}, {"fields": {"codename": "add_instructortask", "name": "Can add instructor task", "content_type": 64}, "model": "auth.permission", "pk": 190}, {"fields": {"codename": "change_instructortask", "name": "Can change instructor task", "content_type": 64}, "model": "auth.permission", "pk": 191}, {"fields": {"codename": "delete_instructortask", "name": "Can delete instructor task", "content_type": 64}, "model": "auth.permission", "pk": 192}, {"fields": {"codename": "add_courseusergroup", "name": "Can add course user group", "content_type": 65}, "model": "auth.permission", "pk": 193}, {"fields": {"codename": "change_courseusergroup", "name": "Can change course user group", "content_type": 65}, "model": "auth.permission", "pk": 194}, {"fields": {"codename": "delete_courseusergroup", "name": "Can delete course user group", "content_type": 65}, "model": "auth.permission", "pk": 195}, {"fields": {"codename": "add_cohortmembership", "name": "Can add cohort membership", "content_type": 66}, "model": "auth.permission", "pk": 196}, {"fields": {"codename": "change_cohortmembership", "name": "Can change cohort membership", "content_type": 66}, "model": "auth.permission", "pk": 197}, {"fields": {"codename": "delete_cohortmembership", "name": "Can delete cohort membership", "content_type": 66}, "model": "auth.permission", "pk": 198}, {"fields": {"codename": "add_courseusergrouppartitiongroup", "name": "Can add course user group partition group", "content_type": 67}, "model": "auth.permission", "pk": 199}, {"fields": {"codename": "change_courseusergrouppartitiongroup", "name": "Can change course user group partition group", "content_type": 67}, "model": "auth.permission", "pk": 200}, {"fields": {"codename": "delete_courseusergrouppartitiongroup", "name": "Can delete course user group partition group", "content_type": 67}, "model": "auth.permission", "pk": 201}, {"fields": {"codename": "add_coursecohortssettings", "name": "Can add course cohorts settings", "content_type": 68}, "model": "auth.permission", "pk": 202}, {"fields": {"codename": "change_coursecohortssettings", "name": "Can change course cohorts settings", "content_type": 68}, "model": "auth.permission", "pk": 203}, {"fields": {"codename": "delete_coursecohortssettings", "name": "Can delete course cohorts settings", "content_type": 68}, "model": "auth.permission", "pk": 204}, {"fields": {"codename": "add_coursecohort", "name": "Can add course cohort", "content_type": 69}, "model": "auth.permission", "pk": 205}, {"fields": {"codename": "change_coursecohort", "name": "Can change course cohort", "content_type": 69}, "model": "auth.permission", "pk": 206}, {"fields": {"codename": "delete_coursecohort", "name": "Can delete course cohort", "content_type": 69}, "model": "auth.permission", "pk": 207}, {"fields": {"codename": "add_courseemail", "name": "Can add course email", "content_type": 70}, "model": "auth.permission", "pk": 208}, {"fields": {"codename": "change_courseemail", "name": "Can change course email", "content_type": 70}, "model": "auth.permission", "pk": 209}, {"fields": {"codename": "delete_courseemail", "name": "Can delete course email", "content_type": 70}, "model": "auth.permission", "pk": 210}, {"fields": {"codename": "add_optout", "name": "Can add optout", "content_type": 71}, "model": "auth.permission", "pk": 211}, {"fields": {"codename": "change_optout", "name": "Can change optout", "content_type": 71}, "model": "auth.permission", "pk": 212}, {"fields": {"codename": "delete_optout", "name": "Can delete optout", "content_type": 71}, "model": "auth.permission", "pk": 213}, {"fields": {"codename": "add_courseemailtemplate", "name": "Can add course email template", "content_type": 72}, "model": "auth.permission", "pk": 214}, {"fields": {"codename": "change_courseemailtemplate", "name": "Can change course email template", "content_type": 72}, "model": "auth.permission", "pk": 215}, {"fields": {"codename": "delete_courseemailtemplate", "name": "Can delete course email template", "content_type": 72}, "model": "auth.permission", "pk": 216}, {"fields": {"codename": "add_courseauthorization", "name": "Can add course authorization", "content_type": 73}, "model": "auth.permission", "pk": 217}, {"fields": {"codename": "change_courseauthorization", "name": "Can change course authorization", "content_type": 73}, "model": "auth.permission", "pk": 218}, {"fields": {"codename": "delete_courseauthorization", "name": "Can delete course authorization", "content_type": 73}, "model": "auth.permission", "pk": 219}, {"fields": {"codename": "add_brandinginfoconfig", "name": "Can add branding info config", "content_type": 74}, "model": "auth.permission", "pk": 220}, {"fields": {"codename": "change_brandinginfoconfig", "name": "Can change branding info config", "content_type": 74}, "model": "auth.permission", "pk": 221}, {"fields": {"codename": "delete_brandinginfoconfig", "name": "Can delete branding info config", "content_type": 74}, "model": "auth.permission", "pk": 222}, {"fields": {"codename": "add_brandingapiconfig", "name": "Can add branding api config", "content_type": 75}, "model": "auth.permission", "pk": 223}, {"fields": {"codename": "change_brandingapiconfig", "name": "Can change branding api config", "content_type": 75}, "model": "auth.permission", "pk": 224}, {"fields": {"codename": "delete_brandingapiconfig", "name": "Can delete branding api config", "content_type": 75}, "model": "auth.permission", "pk": 225}, {"fields": {"codename": "add_externalauthmap", "name": "Can add external auth map", "content_type": 76}, "model": "auth.permission", "pk": 226}, {"fields": {"codename": "change_externalauthmap", "name": "Can change external auth map", "content_type": 76}, "model": "auth.permission", "pk": 227}, {"fields": {"codename": "delete_externalauthmap", "name": "Can delete external auth map", "content_type": 76}, "model": "auth.permission", "pk": 228}, {"fields": {"codename": "add_nonce", "name": "Can add nonce", "content_type": 77}, "model": "auth.permission", "pk": 229}, {"fields": {"codename": "change_nonce", "name": "Can change nonce", "content_type": 77}, "model": "auth.permission", "pk": 230}, {"fields": {"codename": "delete_nonce", "name": "Can delete nonce", "content_type": 77}, "model": "auth.permission", "pk": 231}, {"fields": {"codename": "add_association", "name": "Can add association", "content_type": 78}, "model": "auth.permission", "pk": 232}, {"fields": {"codename": "change_association", "name": "Can change association", "content_type": 78}, "model": "auth.permission", "pk": 233}, {"fields": {"codename": "delete_association", "name": "Can delete association", "content_type": 78}, "model": "auth.permission", "pk": 234}, {"fields": {"codename": "add_useropenid", "name": "Can add user open id", "content_type": 79}, "model": "auth.permission", "pk": 235}, {"fields": {"codename": "change_useropenid", "name": "Can change user open id", "content_type": 79}, "model": "auth.permission", "pk": 236}, {"fields": {"codename": "delete_useropenid", "name": "Can delete user open id", "content_type": 79}, "model": "auth.permission", "pk": 237}, {"fields": {"codename": "account_verified", "name": "The OpenID has been verified", "content_type": 79}, "model": "auth.permission", "pk": 238}, {"fields": {"codename": "add_client", "name": "Can add client", "content_type": 80}, "model": "auth.permission", "pk": 239}, {"fields": {"codename": "change_client", "name": "Can change client", "content_type": 80}, "model": "auth.permission", "pk": 240}, {"fields": {"codename": "delete_client", "name": "Can delete client", "content_type": 80}, "model": "auth.permission", "pk": 241}, {"fields": {"codename": "add_grant", "name": "Can add grant", "content_type": 81}, "model": "auth.permission", "pk": 242}, {"fields": {"codename": "change_grant", "name": "Can change grant", "content_type": 81}, "model": "auth.permission", "pk": 243}, {"fields": {"codename": "delete_grant", "name": "Can delete grant", "content_type": 81}, "model": "auth.permission", "pk": 244}, {"fields": {"codename": "add_accesstoken", "name": "Can add access token", "content_type": 82}, "model": "auth.permission", "pk": 245}, {"fields": {"codename": "change_accesstoken", "name": "Can change access token", "content_type": 82}, "model": "auth.permission", "pk": 246}, {"fields": {"codename": "delete_accesstoken", "name": "Can delete access token", "content_type": 82}, "model": "auth.permission", "pk": 247}, {"fields": {"codename": "add_refreshtoken", "name": "Can add refresh token", "content_type": 83}, "model": "auth.permission", "pk": 248}, {"fields": {"codename": "change_refreshtoken", "name": "Can change refresh token", "content_type": 83}, "model": "auth.permission", "pk": 249}, {"fields": {"codename": "delete_refreshtoken", "name": "Can delete refresh token", "content_type": 83}, "model": "auth.permission", "pk": 250}, {"fields": {"codename": "add_trustedclient", "name": "Can add trusted client", "content_type": 84}, "model": "auth.permission", "pk": 251}, {"fields": {"codename": "change_trustedclient", "name": "Can change trusted client", "content_type": 84}, "model": "auth.permission", "pk": 252}, {"fields": {"codename": "delete_trustedclient", "name": "Can delete trusted client", "content_type": 84}, "model": "auth.permission", "pk": 253}, {"fields": {"codename": "add_oauth2providerconfig", "name": "Can add Provider Configuration (OAuth)", "content_type": 85}, "model": "auth.permission", "pk": 254}, {"fields": {"codename": "change_oauth2providerconfig", "name": "Can change Provider Configuration (OAuth)", "content_type": 85}, "model": "auth.permission", "pk": 255}, {"fields": {"codename": "delete_oauth2providerconfig", "name": "Can delete Provider Configuration (OAuth)", "content_type": 85}, "model": "auth.permission", "pk": 256}, {"fields": {"codename": "add_samlproviderconfig", "name": "Can add Provider Configuration (SAML IdP)", "content_type": 86}, "model": "auth.permission", "pk": 257}, {"fields": {"codename": "change_samlproviderconfig", "name": "Can change Provider Configuration (SAML IdP)", "content_type": 86}, "model": "auth.permission", "pk": 258}, {"fields": {"codename": "delete_samlproviderconfig", "name": "Can delete Provider Configuration (SAML IdP)", "content_type": 86}, "model": "auth.permission", "pk": 259}, {"fields": {"codename": "add_samlconfiguration", "name": "Can add SAML Configuration", "content_type": 87}, "model": "auth.permission", "pk": 260}, {"fields": {"codename": "change_samlconfiguration", "name": "Can change SAML Configuration", "content_type": 87}, "model": "auth.permission", "pk": 261}, {"fields": {"codename": "delete_samlconfiguration", "name": "Can delete SAML Configuration", "content_type": 87}, "model": "auth.permission", "pk": 262}, {"fields": {"codename": "add_samlproviderdata", "name": "Can add SAML Provider Data", "content_type": 88}, "model": "auth.permission", "pk": 263}, {"fields": {"codename": "change_samlproviderdata", "name": "Can change SAML Provider Data", "content_type": 88}, "model": "auth.permission", "pk": 264}, {"fields": {"codename": "delete_samlproviderdata", "name": "Can delete SAML Provider Data", "content_type": 88}, "model": "auth.permission", "pk": 265}, {"fields": {"codename": "add_ltiproviderconfig", "name": "Can add Provider Configuration (LTI)", "content_type": 89}, "model": "auth.permission", "pk": 266}, {"fields": {"codename": "change_ltiproviderconfig", "name": "Can change Provider Configuration (LTI)", "content_type": 89}, "model": "auth.permission", "pk": 267}, {"fields": {"codename": "delete_ltiproviderconfig", "name": "Can delete Provider Configuration (LTI)", "content_type": 89}, "model": "auth.permission", "pk": 268}, {"fields": {"codename": "add_providerapipermissions", "name": "Can add Provider API Permission", "content_type": 90}, "model": "auth.permission", "pk": 269}, {"fields": {"codename": "change_providerapipermissions", "name": "Can change Provider API Permission", "content_type": 90}, "model": "auth.permission", "pk": 270}, {"fields": {"codename": "delete_providerapipermissions", "name": "Can delete Provider API Permission", "content_type": 90}, "model": "auth.permission", "pk": 271}, {"fields": {"codename": "add_nonce", "name": "Can add nonce", "content_type": 91}, "model": "auth.permission", "pk": 272}, {"fields": {"codename": "change_nonce", "name": "Can change nonce", "content_type": 91}, "model": "auth.permission", "pk": 273}, {"fields": {"codename": "delete_nonce", "name": "Can delete nonce", "content_type": 91}, "model": "auth.permission", "pk": 274}, {"fields": {"codename": "add_scope", "name": "Can add scope", "content_type": 92}, "model": "auth.permission", "pk": 275}, {"fields": {"codename": "change_scope", "name": "Can change scope", "content_type": 92}, "model": "auth.permission", "pk": 276}, {"fields": {"codename": "delete_scope", "name": "Can delete scope", "content_type": 92}, "model": "auth.permission", "pk": 277}, {"fields": {"codename": "add_resource", "name": "Can add resource", "content_type": 92}, "model": "auth.permission", "pk": 278}, {"fields": {"codename": "change_resource", "name": "Can change resource", "content_type": 92}, "model": "auth.permission", "pk": 279}, {"fields": {"codename": "delete_resource", "name": "Can delete resource", "content_type": 92}, "model": "auth.permission", "pk": 280}, {"fields": {"codename": "add_consumer", "name": "Can add consumer", "content_type": 93}, "model": "auth.permission", "pk": 281}, {"fields": {"codename": "change_consumer", "name": "Can change consumer", "content_type": 93}, "model": "auth.permission", "pk": 282}, {"fields": {"codename": "delete_consumer", "name": "Can delete consumer", "content_type": 93}, "model": "auth.permission", "pk": 283}, {"fields": {"codename": "add_token", "name": "Can add token", "content_type": 94}, "model": "auth.permission", "pk": 284}, {"fields": {"codename": "change_token", "name": "Can change token", "content_type": 94}, "model": "auth.permission", "pk": 285}, {"fields": {"codename": "delete_token", "name": "Can delete token", "content_type": 94}, "model": "auth.permission", "pk": 286}, {"fields": {"codename": "add_article", "name": "Can add article", "content_type": 96}, "model": "auth.permission", "pk": 287}, {"fields": {"codename": "change_article", "name": "Can change article", "content_type": 96}, "model": "auth.permission", "pk": 288}, {"fields": {"codename": "delete_article", "name": "Can delete article", "content_type": 96}, "model": "auth.permission", "pk": 289}, {"fields": {"codename": "moderate", "name": "Can edit all articles and lock/unlock/restore", "content_type": 96}, "model": "auth.permission", "pk": 290}, {"fields": {"codename": "assign", "name": "Can change ownership of any article", "content_type": 96}, "model": "auth.permission", "pk": 291}, {"fields": {"codename": "grant", "name": "Can assign permissions to other users", "content_type": 96}, "model": "auth.permission", "pk": 292}, {"fields": {"codename": "add_articleforobject", "name": "Can add Article for object", "content_type": 97}, "model": "auth.permission", "pk": 293}, {"fields": {"codename": "change_articleforobject", "name": "Can change Article for object", "content_type": 97}, "model": "auth.permission", "pk": 294}, {"fields": {"codename": "delete_articleforobject", "name": "Can delete Article for object", "content_type": 97}, "model": "auth.permission", "pk": 295}, {"fields": {"codename": "add_articlerevision", "name": "Can add article revision", "content_type": 98}, "model": "auth.permission", "pk": 296}, {"fields": {"codename": "change_articlerevision", "name": "Can change article revision", "content_type": 98}, "model": "auth.permission", "pk": 297}, {"fields": {"codename": "delete_articlerevision", "name": "Can delete article revision", "content_type": 98}, "model": "auth.permission", "pk": 298}, {"fields": {"codename": "add_urlpath", "name": "Can add URL path", "content_type": 99}, "model": "auth.permission", "pk": 299}, {"fields": {"codename": "change_urlpath", "name": "Can change URL path", "content_type": 99}, "model": "auth.permission", "pk": 300}, {"fields": {"codename": "delete_urlpath", "name": "Can delete URL path", "content_type": 99}, "model": "auth.permission", "pk": 301}, {"fields": {"codename": "add_articleplugin", "name": "Can add article plugin", "content_type": 100}, "model": "auth.permission", "pk": 302}, {"fields": {"codename": "change_articleplugin", "name": "Can change article plugin", "content_type": 100}, "model": "auth.permission", "pk": 303}, {"fields": {"codename": "delete_articleplugin", "name": "Can delete article plugin", "content_type": 100}, "model": "auth.permission", "pk": 304}, {"fields": {"codename": "add_reusableplugin", "name": "Can add reusable plugin", "content_type": 101}, "model": "auth.permission", "pk": 305}, {"fields": {"codename": "change_reusableplugin", "name": "Can change reusable plugin", "content_type": 101}, "model": "auth.permission", "pk": 306}, {"fields": {"codename": "delete_reusableplugin", "name": "Can delete reusable plugin", "content_type": 101}, "model": "auth.permission", "pk": 307}, {"fields": {"codename": "add_simpleplugin", "name": "Can add simple plugin", "content_type": 102}, "model": "auth.permission", "pk": 308}, {"fields": {"codename": "change_simpleplugin", "name": "Can change simple plugin", "content_type": 102}, "model": "auth.permission", "pk": 309}, {"fields": {"codename": "delete_simpleplugin", "name": "Can delete simple plugin", "content_type": 102}, "model": "auth.permission", "pk": 310}, {"fields": {"codename": "add_revisionplugin", "name": "Can add revision plugin", "content_type": 103}, "model": "auth.permission", "pk": 311}, {"fields": {"codename": "change_revisionplugin", "name": "Can change revision plugin", "content_type": 103}, "model": "auth.permission", "pk": 312}, {"fields": {"codename": "delete_revisionplugin", "name": "Can delete revision plugin", "content_type": 103}, "model": "auth.permission", "pk": 313}, {"fields": {"codename": "add_revisionpluginrevision", "name": "Can add revision plugin revision", "content_type": 104}, "model": "auth.permission", "pk": 314}, {"fields": {"codename": "change_revisionpluginrevision", "name": "Can change revision plugin revision", "content_type": 104}, "model": "auth.permission", "pk": 315}, {"fields": {"codename": "delete_revisionpluginrevision", "name": "Can delete revision plugin revision", "content_type": 104}, "model": "auth.permission", "pk": 316}, {"fields": {"codename": "add_image", "name": "Can add image", "content_type": 105}, "model": "auth.permission", "pk": 317}, {"fields": {"codename": "change_image", "name": "Can change image", "content_type": 105}, "model": "auth.permission", "pk": 318}, {"fields": {"codename": "delete_image", "name": "Can delete image", "content_type": 105}, "model": "auth.permission", "pk": 319}, {"fields": {"codename": "add_imagerevision", "name": "Can add image revision", "content_type": 106}, "model": "auth.permission", "pk": 320}, {"fields": {"codename": "change_imagerevision", "name": "Can change image revision", "content_type": 106}, "model": "auth.permission", "pk": 321}, {"fields": {"codename": "delete_imagerevision", "name": "Can delete image revision", "content_type": 106}, "model": "auth.permission", "pk": 322}, {"fields": {"codename": "add_attachment", "name": "Can add attachment", "content_type": 107}, "model": "auth.permission", "pk": 323}, {"fields": {"codename": "change_attachment", "name": "Can change attachment", "content_type": 107}, "model": "auth.permission", "pk": 324}, {"fields": {"codename": "delete_attachment", "name": "Can delete attachment", "content_type": 107}, "model": "auth.permission", "pk": 325}, {"fields": {"codename": "add_attachmentrevision", "name": "Can add attachment revision", "content_type": 108}, "model": "auth.permission", "pk": 326}, {"fields": {"codename": "change_attachmentrevision", "name": "Can change attachment revision", "content_type": 108}, "model": "auth.permission", "pk": 327}, {"fields": {"codename": "delete_attachmentrevision", "name": "Can delete attachment revision", "content_type": 108}, "model": "auth.permission", "pk": 328}, {"fields": {"codename": "add_notificationtype", "name": "Can add type", "content_type": 109}, "model": "auth.permission", "pk": 329}, {"fields": {"codename": "change_notificationtype", "name": "Can change type", "content_type": 109}, "model": "auth.permission", "pk": 330}, {"fields": {"codename": "delete_notificationtype", "name": "Can delete type", "content_type": 109}, "model": "auth.permission", "pk": 331}, {"fields": {"codename": "add_settings", "name": "Can add settings", "content_type": 110}, "model": "auth.permission", "pk": 332}, {"fields": {"codename": "change_settings", "name": "Can change settings", "content_type": 110}, "model": "auth.permission", "pk": 333}, {"fields": {"codename": "delete_settings", "name": "Can delete settings", "content_type": 110}, "model": "auth.permission", "pk": 334}, {"fields": {"codename": "add_subscription", "name": "Can add subscription", "content_type": 111}, "model": "auth.permission", "pk": 335}, {"fields": {"codename": "change_subscription", "name": "Can change subscription", "content_type": 111}, "model": "auth.permission", "pk": 336}, {"fields": {"codename": "delete_subscription", "name": "Can delete subscription", "content_type": 111}, "model": "auth.permission", "pk": 337}, {"fields": {"codename": "add_notification", "name": "Can add notification", "content_type": 112}, "model": "auth.permission", "pk": 338}, {"fields": {"codename": "change_notification", "name": "Can change notification", "content_type": 112}, "model": "auth.permission", "pk": 339}, {"fields": {"codename": "delete_notification", "name": "Can delete notification", "content_type": 112}, "model": "auth.permission", "pk": 340}, {"fields": {"codename": "add_logentry", "name": "Can add log entry", "content_type": 113}, "model": "auth.permission", "pk": 341}, {"fields": {"codename": "change_logentry", "name": "Can change log entry", "content_type": 113}, "model": "auth.permission", "pk": 342}, {"fields": {"codename": "delete_logentry", "name": "Can delete log entry", "content_type": 113}, "model": "auth.permission", "pk": 343}, {"fields": {"codename": "add_role", "name": "Can add role", "content_type": 114}, "model": "auth.permission", "pk": 344}, {"fields": {"codename": "change_role", "name": "Can change role", "content_type": 114}, "model": "auth.permission", "pk": 345}, {"fields": {"codename": "delete_role", "name": "Can delete role", "content_type": 114}, "model": "auth.permission", "pk": 346}, {"fields": {"codename": "add_permission", "name": "Can add permission", "content_type": 115}, "model": "auth.permission", "pk": 347}, {"fields": {"codename": "change_permission", "name": "Can change permission", "content_type": 115}, "model": "auth.permission", "pk": 348}, {"fields": {"codename": "delete_permission", "name": "Can delete permission", "content_type": 115}, "model": "auth.permission", "pk": 349}, {"fields": {"codename": "add_note", "name": "Can add note", "content_type": 116}, "model": "auth.permission", "pk": 350}, {"fields": {"codename": "change_note", "name": "Can change note", "content_type": 116}, "model": "auth.permission", "pk": 351}, {"fields": {"codename": "delete_note", "name": "Can delete note", "content_type": 116}, "model": "auth.permission", "pk": 352}, {"fields": {"codename": "add_splashconfig", "name": "Can add splash config", "content_type": 117}, "model": "auth.permission", "pk": 353}, {"fields": {"codename": "change_splashconfig", "name": "Can change splash config", "content_type": 117}, "model": "auth.permission", "pk": 354}, {"fields": {"codename": "delete_splashconfig", "name": "Can delete splash config", "content_type": 117}, "model": "auth.permission", "pk": 355}, {"fields": {"codename": "add_userpreference", "name": "Can add user preference", "content_type": 118}, "model": "auth.permission", "pk": 356}, {"fields": {"codename": "change_userpreference", "name": "Can change user preference", "content_type": 118}, "model": "auth.permission", "pk": 357}, {"fields": {"codename": "delete_userpreference", "name": "Can delete user preference", "content_type": 118}, "model": "auth.permission", "pk": 358}, {"fields": {"codename": "add_usercoursetag", "name": "Can add user course tag", "content_type": 119}, "model": "auth.permission", "pk": 359}, {"fields": {"codename": "change_usercoursetag", "name": "Can change user course tag", "content_type": 119}, "model": "auth.permission", "pk": 360}, {"fields": {"codename": "delete_usercoursetag", "name": "Can delete user course tag", "content_type": 119}, "model": "auth.permission", "pk": 361}, {"fields": {"codename": "add_userorgtag", "name": "Can add user org tag", "content_type": 120}, "model": "auth.permission", "pk": 362}, {"fields": {"codename": "change_userorgtag", "name": "Can change user org tag", "content_type": 120}, "model": "auth.permission", "pk": 363}, {"fields": {"codename": "delete_userorgtag", "name": "Can delete user org tag", "content_type": 120}, "model": "auth.permission", "pk": 364}, {"fields": {"codename": "add_order", "name": "Can add order", "content_type": 121}, "model": "auth.permission", "pk": 365}, {"fields": {"codename": "change_order", "name": "Can change order", "content_type": 121}, "model": "auth.permission", "pk": 366}, {"fields": {"codename": "delete_order", "name": "Can delete order", "content_type": 121}, "model": "auth.permission", "pk": 367}, {"fields": {"codename": "add_orderitem", "name": "Can add order item", "content_type": 122}, "model": "auth.permission", "pk": 368}, {"fields": {"codename": "change_orderitem", "name": "Can change order item", "content_type": 122}, "model": "auth.permission", "pk": 369}, {"fields": {"codename": "delete_orderitem", "name": "Can delete order item", "content_type": 122}, "model": "auth.permission", "pk": 370}, {"fields": {"codename": "add_invoice", "name": "Can add invoice", "content_type": 123}, "model": "auth.permission", "pk": 371}, {"fields": {"codename": "change_invoice", "name": "Can change invoice", "content_type": 123}, "model": "auth.permission", "pk": 372}, {"fields": {"codename": "delete_invoice", "name": "Can delete invoice", "content_type": 123}, "model": "auth.permission", "pk": 373}, {"fields": {"codename": "add_invoicetransaction", "name": "Can add invoice transaction", "content_type": 124}, "model": "auth.permission", "pk": 374}, {"fields": {"codename": "change_invoicetransaction", "name": "Can change invoice transaction", "content_type": 124}, "model": "auth.permission", "pk": 375}, {"fields": {"codename": "delete_invoicetransaction", "name": "Can delete invoice transaction", "content_type": 124}, "model": "auth.permission", "pk": 376}, {"fields": {"codename": "add_invoiceitem", "name": "Can add invoice item", "content_type": 125}, "model": "auth.permission", "pk": 377}, {"fields": {"codename": "change_invoiceitem", "name": "Can change invoice item", "content_type": 125}, "model": "auth.permission", "pk": 378}, {"fields": {"codename": "delete_invoiceitem", "name": "Can delete invoice item", "content_type": 125}, "model": "auth.permission", "pk": 379}, {"fields": {"codename": "add_courseregistrationcodeinvoiceitem", "name": "Can add course registration code invoice item", "content_type": 126}, "model": "auth.permission", "pk": 380}, {"fields": {"codename": "change_courseregistrationcodeinvoiceitem", "name": "Can change course registration code invoice item", "content_type": 126}, "model": "auth.permission", "pk": 381}, {"fields": {"codename": "delete_courseregistrationcodeinvoiceitem", "name": "Can delete course registration code invoice item", "content_type": 126}, "model": "auth.permission", "pk": 382}, {"fields": {"codename": "add_invoicehistory", "name": "Can add invoice history", "content_type": 127}, "model": "auth.permission", "pk": 383}, {"fields": {"codename": "change_invoicehistory", "name": "Can change invoice history", "content_type": 127}, "model": "auth.permission", "pk": 384}, {"fields": {"codename": "delete_invoicehistory", "name": "Can delete invoice history", "content_type": 127}, "model": "auth.permission", "pk": 385}, {"fields": {"codename": "add_courseregistrationcode", "name": "Can add course registration code", "content_type": 128}, "model": "auth.permission", "pk": 386}, {"fields": {"codename": "change_courseregistrationcode", "name": "Can change course registration code", "content_type": 128}, "model": "auth.permission", "pk": 387}, {"fields": {"codename": "delete_courseregistrationcode", "name": "Can delete course registration code", "content_type": 128}, "model": "auth.permission", "pk": 388}, {"fields": {"codename": "add_registrationcoderedemption", "name": "Can add registration code redemption", "content_type": 129}, "model": "auth.permission", "pk": 389}, {"fields": {"codename": "change_registrationcoderedemption", "name": "Can change registration code redemption", "content_type": 129}, "model": "auth.permission", "pk": 390}, {"fields": {"codename": "delete_registrationcoderedemption", "name": "Can delete registration code redemption", "content_type": 129}, "model": "auth.permission", "pk": 391}, {"fields": {"codename": "add_coupon", "name": "Can add coupon", "content_type": 130}, "model": "auth.permission", "pk": 392}, {"fields": {"codename": "change_coupon", "name": "Can change coupon", "content_type": 130}, "model": "auth.permission", "pk": 393}, {"fields": {"codename": "delete_coupon", "name": "Can delete coupon", "content_type": 130}, "model": "auth.permission", "pk": 394}, {"fields": {"codename": "add_couponredemption", "name": "Can add coupon redemption", "content_type": 131}, "model": "auth.permission", "pk": 395}, {"fields": {"codename": "change_couponredemption", "name": "Can change coupon redemption", "content_type": 131}, "model": "auth.permission", "pk": 396}, {"fields": {"codename": "delete_couponredemption", "name": "Can delete coupon redemption", "content_type": 131}, "model": "auth.permission", "pk": 397}, {"fields": {"codename": "add_paidcourseregistration", "name": "Can add paid course registration", "content_type": 132}, "model": "auth.permission", "pk": 398}, {"fields": {"codename": "change_paidcourseregistration", "name": "Can change paid course registration", "content_type": 132}, "model": "auth.permission", "pk": 399}, {"fields": {"codename": "delete_paidcourseregistration", "name": "Can delete paid course registration", "content_type": 132}, "model": "auth.permission", "pk": 400}, {"fields": {"codename": "add_courseregcodeitem", "name": "Can add course reg code item", "content_type": 133}, "model": "auth.permission", "pk": 401}, {"fields": {"codename": "change_courseregcodeitem", "name": "Can change course reg code item", "content_type": 133}, "model": "auth.permission", "pk": 402}, {"fields": {"codename": "delete_courseregcodeitem", "name": "Can delete course reg code item", "content_type": 133}, "model": "auth.permission", "pk": 403}, {"fields": {"codename": "add_courseregcodeitemannotation", "name": "Can add course reg code item annotation", "content_type": 134}, "model": "auth.permission", "pk": 404}, {"fields": {"codename": "change_courseregcodeitemannotation", "name": "Can change course reg code item annotation", "content_type": 134}, "model": "auth.permission", "pk": 405}, {"fields": {"codename": "delete_courseregcodeitemannotation", "name": "Can delete course reg code item annotation", "content_type": 134}, "model": "auth.permission", "pk": 406}, {"fields": {"codename": "add_paidcourseregistrationannotation", "name": "Can add paid course registration annotation", "content_type": 135}, "model": "auth.permission", "pk": 407}, {"fields": {"codename": "change_paidcourseregistrationannotation", "name": "Can change paid course registration annotation", "content_type": 135}, "model": "auth.permission", "pk": 408}, {"fields": {"codename": "delete_paidcourseregistrationannotation", "name": "Can delete paid course registration annotation", "content_type": 135}, "model": "auth.permission", "pk": 409}, {"fields": {"codename": "add_certificateitem", "name": "Can add certificate item", "content_type": 136}, "model": "auth.permission", "pk": 410}, {"fields": {"codename": "change_certificateitem", "name": "Can change certificate item", "content_type": 136}, "model": "auth.permission", "pk": 411}, {"fields": {"codename": "delete_certificateitem", "name": "Can delete certificate item", "content_type": 136}, "model": "auth.permission", "pk": 412}, {"fields": {"codename": "add_donationconfiguration", "name": "Can add donation configuration", "content_type": 137}, "model": "auth.permission", "pk": 413}, {"fields": {"codename": "change_donationconfiguration", "name": "Can change donation configuration", "content_type": 137}, "model": "auth.permission", "pk": 414}, {"fields": {"codename": "delete_donationconfiguration", "name": "Can delete donation configuration", "content_type": 137}, "model": "auth.permission", "pk": 415}, {"fields": {"codename": "add_donation", "name": "Can add donation", "content_type": 138}, "model": "auth.permission", "pk": 416}, {"fields": {"codename": "change_donation", "name": "Can change donation", "content_type": 138}, "model": "auth.permission", "pk": 417}, {"fields": {"codename": "delete_donation", "name": "Can delete donation", "content_type": 138}, "model": "auth.permission", "pk": 418}, {"fields": {"codename": "add_coursemode", "name": "Can add course mode", "content_type": 139}, "model": "auth.permission", "pk": 419}, {"fields": {"codename": "change_coursemode", "name": "Can change course mode", "content_type": 139}, "model": "auth.permission", "pk": 420}, {"fields": {"codename": "delete_coursemode", "name": "Can delete course mode", "content_type": 139}, "model": "auth.permission", "pk": 421}, {"fields": {"codename": "add_coursemodesarchive", "name": "Can add course modes archive", "content_type": 140}, "model": "auth.permission", "pk": 422}, {"fields": {"codename": "change_coursemodesarchive", "name": "Can change course modes archive", "content_type": 140}, "model": "auth.permission", "pk": 423}, {"fields": {"codename": "delete_coursemodesarchive", "name": "Can delete course modes archive", "content_type": 140}, "model": "auth.permission", "pk": 424}, {"fields": {"codename": "add_coursemodeexpirationconfig", "name": "Can add course mode expiration config", "content_type": 141}, "model": "auth.permission", "pk": 425}, {"fields": {"codename": "change_coursemodeexpirationconfig", "name": "Can change course mode expiration config", "content_type": 141}, "model": "auth.permission", "pk": 426}, {"fields": {"codename": "delete_coursemodeexpirationconfig", "name": "Can delete course mode expiration config", "content_type": 141}, "model": "auth.permission", "pk": 427}, {"fields": {"codename": "add_softwaresecurephotoverification", "name": "Can add software secure photo verification", "content_type": 142}, "model": "auth.permission", "pk": 428}, {"fields": {"codename": "change_softwaresecurephotoverification", "name": "Can change software secure photo verification", "content_type": 142}, "model": "auth.permission", "pk": 429}, {"fields": {"codename": "delete_softwaresecurephotoverification", "name": "Can delete software secure photo verification", "content_type": 142}, "model": "auth.permission", "pk": 430}, {"fields": {"codename": "add_historicalverificationdeadline", "name": "Can add historical verification deadline", "content_type": 143}, "model": "auth.permission", "pk": 431}, {"fields": {"codename": "change_historicalverificationdeadline", "name": "Can change historical verification deadline", "content_type": 143}, "model": "auth.permission", "pk": 432}, {"fields": {"codename": "delete_historicalverificationdeadline", "name": "Can delete historical verification deadline", "content_type": 143}, "model": "auth.permission", "pk": 433}, {"fields": {"codename": "add_verificationdeadline", "name": "Can add verification deadline", "content_type": 144}, "model": "auth.permission", "pk": 434}, {"fields": {"codename": "change_verificationdeadline", "name": "Can change verification deadline", "content_type": 144}, "model": "auth.permission", "pk": 435}, {"fields": {"codename": "delete_verificationdeadline", "name": "Can delete verification deadline", "content_type": 144}, "model": "auth.permission", "pk": 436}, {"fields": {"codename": "add_verificationcheckpoint", "name": "Can add verification checkpoint", "content_type": 145}, "model": "auth.permission", "pk": 437}, {"fields": {"codename": "change_verificationcheckpoint", "name": "Can change verification checkpoint", "content_type": 145}, "model": "auth.permission", "pk": 438}, {"fields": {"codename": "delete_verificationcheckpoint", "name": "Can delete verification checkpoint", "content_type": 145}, "model": "auth.permission", "pk": 439}, {"fields": {"codename": "add_verificationstatus", "name": "Can add Verification Status", "content_type": 146}, "model": "auth.permission", "pk": 440}, {"fields": {"codename": "change_verificationstatus", "name": "Can change Verification Status", "content_type": 146}, "model": "auth.permission", "pk": 441}, {"fields": {"codename": "delete_verificationstatus", "name": "Can delete Verification Status", "content_type": 146}, "model": "auth.permission", "pk": 442}, {"fields": {"codename": "add_incoursereverificationconfiguration", "name": "Can add in course reverification configuration", "content_type": 147}, "model": "auth.permission", "pk": 443}, {"fields": {"codename": "change_incoursereverificationconfiguration", "name": "Can change in course reverification configuration", "content_type": 147}, "model": "auth.permission", "pk": 444}, {"fields": {"codename": "delete_incoursereverificationconfiguration", "name": "Can delete in course reverification configuration", "content_type": 147}, "model": "auth.permission", "pk": 445}, {"fields": {"codename": "add_icrvstatusemailsconfiguration", "name": "Can add icrv status emails configuration", "content_type": 148}, "model": "auth.permission", "pk": 446}, {"fields": {"codename": "change_icrvstatusemailsconfiguration", "name": "Can change icrv status emails configuration", "content_type": 148}, "model": "auth.permission", "pk": 447}, {"fields": {"codename": "delete_icrvstatusemailsconfiguration", "name": "Can delete icrv status emails configuration", "content_type": 148}, "model": "auth.permission", "pk": 448}, {"fields": {"codename": "add_skippedreverification", "name": "Can add skipped reverification", "content_type": 149}, "model": "auth.permission", "pk": 449}, {"fields": {"codename": "change_skippedreverification", "name": "Can change skipped reverification", "content_type": 149}, "model": "auth.permission", "pk": 450}, {"fields": {"codename": "delete_skippedreverification", "name": "Can delete skipped reverification", "content_type": 149}, "model": "auth.permission", "pk": 451}, {"fields": {"codename": "add_darklangconfig", "name": "Can add dark lang config", "content_type": 150}, "model": "auth.permission", "pk": 452}, {"fields": {"codename": "change_darklangconfig", "name": "Can change dark lang config", "content_type": 150}, "model": "auth.permission", "pk": 453}, {"fields": {"codename": "delete_darklangconfig", "name": "Can delete dark lang config", "content_type": 150}, "model": "auth.permission", "pk": 454}, {"fields": {"codename": "add_microsite", "name": "Can add microsite", "content_type": 151}, "model": "auth.permission", "pk": 455}, {"fields": {"codename": "change_microsite", "name": "Can change microsite", "content_type": 151}, "model": "auth.permission", "pk": 456}, {"fields": {"codename": "delete_microsite", "name": "Can delete microsite", "content_type": 151}, "model": "auth.permission", "pk": 457}, {"fields": {"codename": "add_micrositehistory", "name": "Can add microsite history", "content_type": 152}, "model": "auth.permission", "pk": 458}, {"fields": {"codename": "change_micrositehistory", "name": "Can change microsite history", "content_type": 152}, "model": "auth.permission", "pk": 459}, {"fields": {"codename": "delete_micrositehistory", "name": "Can delete microsite history", "content_type": 152}, "model": "auth.permission", "pk": 460}, {"fields": {"codename": "add_historicalmicrositeorganizationmapping", "name": "Can add historical microsite organization mapping", "content_type": 153}, "model": "auth.permission", "pk": 461}, {"fields": {"codename": "change_historicalmicrositeorganizationmapping", "name": "Can change historical microsite organization mapping", "content_type": 153}, "model": "auth.permission", "pk": 462}, {"fields": {"codename": "delete_historicalmicrositeorganizationmapping", "name": "Can delete historical microsite organization mapping", "content_type": 153}, "model": "auth.permission", "pk": 463}, {"fields": {"codename": "add_micrositeorganizationmapping", "name": "Can add microsite organization mapping", "content_type": 154}, "model": "auth.permission", "pk": 464}, {"fields": {"codename": "change_micrositeorganizationmapping", "name": "Can change microsite organization mapping", "content_type": 154}, "model": "auth.permission", "pk": 465}, {"fields": {"codename": "delete_micrositeorganizationmapping", "name": "Can delete microsite organization mapping", "content_type": 154}, "model": "auth.permission", "pk": 466}, {"fields": {"codename": "add_historicalmicrositetemplate", "name": "Can add historical microsite template", "content_type": 155}, "model": "auth.permission", "pk": 467}, {"fields": {"codename": "change_historicalmicrositetemplate", "name": "Can change historical microsite template", "content_type": 155}, "model": "auth.permission", "pk": 468}, {"fields": {"codename": "delete_historicalmicrositetemplate", "name": "Can delete historical microsite template", "content_type": 155}, "model": "auth.permission", "pk": 469}, {"fields": {"codename": "add_micrositetemplate", "name": "Can add microsite template", "content_type": 156}, "model": "auth.permission", "pk": 470}, {"fields": {"codename": "change_micrositetemplate", "name": "Can change microsite template", "content_type": 156}, "model": "auth.permission", "pk": 471}, {"fields": {"codename": "delete_micrositetemplate", "name": "Can delete microsite template", "content_type": 156}, "model": "auth.permission", "pk": 472}, {"fields": {"codename": "add_whitelistedrssurl", "name": "Can add whitelisted rss url", "content_type": 157}, "model": "auth.permission", "pk": 473}, {"fields": {"codename": "change_whitelistedrssurl", "name": "Can change whitelisted rss url", "content_type": 157}, "model": "auth.permission", "pk": 474}, {"fields": {"codename": "delete_whitelistedrssurl", "name": "Can delete whitelisted rss url", "content_type": 157}, "model": "auth.permission", "pk": 475}, {"fields": {"codename": "add_embargoedcourse", "name": "Can add embargoed course", "content_type": 158}, "model": "auth.permission", "pk": 476}, {"fields": {"codename": "change_embargoedcourse", "name": "Can change embargoed course", "content_type": 158}, "model": "auth.permission", "pk": 477}, {"fields": {"codename": "delete_embargoedcourse", "name": "Can delete embargoed course", "content_type": 158}, "model": "auth.permission", "pk": 478}, {"fields": {"codename": "add_embargoedstate", "name": "Can add embargoed state", "content_type": 159}, "model": "auth.permission", "pk": 479}, {"fields": {"codename": "change_embargoedstate", "name": "Can change embargoed state", "content_type": 159}, "model": "auth.permission", "pk": 480}, {"fields": {"codename": "delete_embargoedstate", "name": "Can delete embargoed state", "content_type": 159}, "model": "auth.permission", "pk": 481}, {"fields": {"codename": "add_restrictedcourse", "name": "Can add restricted course", "content_type": 160}, "model": "auth.permission", "pk": 482}, {"fields": {"codename": "change_restrictedcourse", "name": "Can change restricted course", "content_type": 160}, "model": "auth.permission", "pk": 483}, {"fields": {"codename": "delete_restrictedcourse", "name": "Can delete restricted course", "content_type": 160}, "model": "auth.permission", "pk": 484}, {"fields": {"codename": "add_country", "name": "Can add country", "content_type": 161}, "model": "auth.permission", "pk": 485}, {"fields": {"codename": "change_country", "name": "Can change country", "content_type": 161}, "model": "auth.permission", "pk": 486}, {"fields": {"codename": "delete_country", "name": "Can delete country", "content_type": 161}, "model": "auth.permission", "pk": 487}, {"fields": {"codename": "add_countryaccessrule", "name": "Can add country access rule", "content_type": 162}, "model": "auth.permission", "pk": 488}, {"fields": {"codename": "change_countryaccessrule", "name": "Can change country access rule", "content_type": 162}, "model": "auth.permission", "pk": 489}, {"fields": {"codename": "delete_countryaccessrule", "name": "Can delete country access rule", "content_type": 162}, "model": "auth.permission", "pk": 490}, {"fields": {"codename": "add_courseaccessrulehistory", "name": "Can add course access rule history", "content_type": 163}, "model": "auth.permission", "pk": 491}, {"fields": {"codename": "change_courseaccessrulehistory", "name": "Can change course access rule history", "content_type": 163}, "model": "auth.permission", "pk": 492}, {"fields": {"codename": "delete_courseaccessrulehistory", "name": "Can delete course access rule history", "content_type": 163}, "model": "auth.permission", "pk": 493}, {"fields": {"codename": "add_ipfilter", "name": "Can add ip filter", "content_type": 164}, "model": "auth.permission", "pk": 494}, {"fields": {"codename": "change_ipfilter", "name": "Can change ip filter", "content_type": 164}, "model": "auth.permission", "pk": 495}, {"fields": {"codename": "delete_ipfilter", "name": "Can delete ip filter", "content_type": 164}, "model": "auth.permission", "pk": 496}, {"fields": {"codename": "add_coursererunstate", "name": "Can add course rerun state", "content_type": 165}, "model": "auth.permission", "pk": 497}, {"fields": {"codename": "change_coursererunstate", "name": "Can change course rerun state", "content_type": 165}, "model": "auth.permission", "pk": 498}, {"fields": {"codename": "delete_coursererunstate", "name": "Can delete course rerun state", "content_type": 165}, "model": "auth.permission", "pk": 499}, {"fields": {"codename": "add_mobileapiconfig", "name": "Can add mobile api config", "content_type": 166}, "model": "auth.permission", "pk": 500}, {"fields": {"codename": "change_mobileapiconfig", "name": "Can change mobile api config", "content_type": 166}, "model": "auth.permission", "pk": 501}, {"fields": {"codename": "delete_mobileapiconfig", "name": "Can delete mobile api config", "content_type": 166}, "model": "auth.permission", "pk": 502}, {"fields": {"codename": "add_usersocialauth", "name": "Can add user social auth", "content_type": 167}, "model": "auth.permission", "pk": 503}, {"fields": {"codename": "change_usersocialauth", "name": "Can change user social auth", "content_type": 167}, "model": "auth.permission", "pk": 504}, {"fields": {"codename": "delete_usersocialauth", "name": "Can delete user social auth", "content_type": 167}, "model": "auth.permission", "pk": 505}, {"fields": {"codename": "add_nonce", "name": "Can add nonce", "content_type": 168}, "model": "auth.permission", "pk": 506}, {"fields": {"codename": "change_nonce", "name": "Can change nonce", "content_type": 168}, "model": "auth.permission", "pk": 507}, {"fields": {"codename": "delete_nonce", "name": "Can delete nonce", "content_type": 168}, "model": "auth.permission", "pk": 508}, {"fields": {"codename": "add_association", "name": "Can add association", "content_type": 169}, "model": "auth.permission", "pk": 509}, {"fields": {"codename": "change_association", "name": "Can change association", "content_type": 169}, "model": "auth.permission", "pk": 510}, {"fields": {"codename": "delete_association", "name": "Can delete association", "content_type": 169}, "model": "auth.permission", "pk": 511}, {"fields": {"codename": "add_code", "name": "Can add code", "content_type": 170}, "model": "auth.permission", "pk": 512}, {"fields": {"codename": "change_code", "name": "Can change code", "content_type": 170}, "model": "auth.permission", "pk": 513}, {"fields": {"codename": "delete_code", "name": "Can delete code", "content_type": 170}, "model": "auth.permission", "pk": 514}, {"fields": {"codename": "add_surveyform", "name": "Can add survey form", "content_type": 171}, "model": "auth.permission", "pk": 515}, {"fields": {"codename": "change_surveyform", "name": "Can change survey form", "content_type": 171}, "model": "auth.permission", "pk": 516}, {"fields": {"codename": "delete_surveyform", "name": "Can delete survey form", "content_type": 171}, "model": "auth.permission", "pk": 517}, {"fields": {"codename": "add_surveyanswer", "name": "Can add survey answer", "content_type": 172}, "model": "auth.permission", "pk": 518}, {"fields": {"codename": "change_surveyanswer", "name": "Can change survey answer", "content_type": 172}, "model": "auth.permission", "pk": 519}, {"fields": {"codename": "delete_surveyanswer", "name": "Can delete survey answer", "content_type": 172}, "model": "auth.permission", "pk": 520}, {"fields": {"codename": "add_xblockasidesconfig", "name": "Can add x block asides config", "content_type": 173}, "model": "auth.permission", "pk": 521}, {"fields": {"codename": "change_xblockasidesconfig", "name": "Can change x block asides config", "content_type": 173}, "model": "auth.permission", "pk": 522}, {"fields": {"codename": "delete_xblockasidesconfig", "name": "Can delete x block asides config", "content_type": 173}, "model": "auth.permission", "pk": 523}, {"fields": {"codename": "add_courseoverview", "name": "Can add course overview", "content_type": 174}, "model": "auth.permission", "pk": 524}, {"fields": {"codename": "change_courseoverview", "name": "Can change course overview", "content_type": 174}, "model": "auth.permission", "pk": 525}, {"fields": {"codename": "delete_courseoverview", "name": "Can delete course overview", "content_type": 174}, "model": "auth.permission", "pk": 526}, {"fields": {"codename": "add_courseoverviewtab", "name": "Can add course overview tab", "content_type": 175}, "model": "auth.permission", "pk": 527}, {"fields": {"codename": "change_courseoverviewtab", "name": "Can change course overview tab", "content_type": 175}, "model": "auth.permission", "pk": 528}, {"fields": {"codename": "delete_courseoverviewtab", "name": "Can delete course overview tab", "content_type": 175}, "model": "auth.permission", "pk": 529}, {"fields": {"codename": "add_courseoverviewimageset", "name": "Can add course overview image set", "content_type": 176}, "model": "auth.permission", "pk": 530}, {"fields": {"codename": "change_courseoverviewimageset", "name": "Can change course overview image set", "content_type": 176}, "model": "auth.permission", "pk": 531}, {"fields": {"codename": "delete_courseoverviewimageset", "name": "Can delete course overview image set", "content_type": 176}, "model": "auth.permission", "pk": 532}, {"fields": {"codename": "add_courseoverviewimageconfig", "name": "Can add course overview image config", "content_type": 177}, "model": "auth.permission", "pk": 533}, {"fields": {"codename": "change_courseoverviewimageconfig", "name": "Can change course overview image config", "content_type": 177}, "model": "auth.permission", "pk": 534}, {"fields": {"codename": "delete_courseoverviewimageconfig", "name": "Can delete course overview image config", "content_type": 177}, "model": "auth.permission", "pk": 535}, {"fields": {"codename": "add_coursestructure", "name": "Can add course structure", "content_type": 178}, "model": "auth.permission", "pk": 536}, {"fields": {"codename": "change_coursestructure", "name": "Can change course structure", "content_type": 178}, "model": "auth.permission", "pk": 537}, {"fields": {"codename": "delete_coursestructure", "name": "Can delete course structure", "content_type": 178}, "model": "auth.permission", "pk": 538}, {"fields": {"codename": "add_corsmodel", "name": "Can add cors model", "content_type": 179}, "model": "auth.permission", "pk": 539}, {"fields": {"codename": "change_corsmodel", "name": "Can change cors model", "content_type": 179}, "model": "auth.permission", "pk": 540}, {"fields": {"codename": "delete_corsmodel", "name": "Can delete cors model", "content_type": 179}, "model": "auth.permission", "pk": 541}, {"fields": {"codename": "add_xdomainproxyconfiguration", "name": "Can add x domain proxy configuration", "content_type": 180}, "model": "auth.permission", "pk": 542}, {"fields": {"codename": "change_xdomainproxyconfiguration", "name": "Can change x domain proxy configuration", "content_type": 180}, "model": "auth.permission", "pk": 543}, {"fields": {"codename": "delete_xdomainproxyconfiguration", "name": "Can delete x domain proxy configuration", "content_type": 180}, "model": "auth.permission", "pk": 544}, {"fields": {"codename": "add_commerceconfiguration", "name": "Can add commerce configuration", "content_type": 181}, "model": "auth.permission", "pk": 545}, {"fields": {"codename": "change_commerceconfiguration", "name": "Can change commerce configuration", "content_type": 181}, "model": "auth.permission", "pk": 546}, {"fields": {"codename": "delete_commerceconfiguration", "name": "Can delete commerce configuration", "content_type": 181}, "model": "auth.permission", "pk": 547}, {"fields": {"codename": "add_creditprovider", "name": "Can add credit provider", "content_type": 182}, "model": "auth.permission", "pk": 548}, {"fields": {"codename": "change_creditprovider", "name": "Can change credit provider", "content_type": 182}, "model": "auth.permission", "pk": 549}, {"fields": {"codename": "delete_creditprovider", "name": "Can delete credit provider", "content_type": 182}, "model": "auth.permission", "pk": 550}, {"fields": {"codename": "add_creditcourse", "name": "Can add credit course", "content_type": 183}, "model": "auth.permission", "pk": 551}, {"fields": {"codename": "change_creditcourse", "name": "Can change credit course", "content_type": 183}, "model": "auth.permission", "pk": 552}, {"fields": {"codename": "delete_creditcourse", "name": "Can delete credit course", "content_type": 183}, "model": "auth.permission", "pk": 553}, {"fields": {"codename": "add_creditrequirement", "name": "Can add credit requirement", "content_type": 184}, "model": "auth.permission", "pk": 554}, {"fields": {"codename": "change_creditrequirement", "name": "Can change credit requirement", "content_type": 184}, "model": "auth.permission", "pk": 555}, {"fields": {"codename": "delete_creditrequirement", "name": "Can delete credit requirement", "content_type": 184}, "model": "auth.permission", "pk": 556}, {"fields": {"codename": "add_historicalcreditrequirementstatus", "name": "Can add historical credit requirement status", "content_type": 185}, "model": "auth.permission", "pk": 557}, {"fields": {"codename": "change_historicalcreditrequirementstatus", "name": "Can change historical credit requirement status", "content_type": 185}, "model": "auth.permission", "pk": 558}, {"fields": {"codename": "delete_historicalcreditrequirementstatus", "name": "Can delete historical credit requirement status", "content_type": 185}, "model": "auth.permission", "pk": 559}, {"fields": {"codename": "add_creditrequirementstatus", "name": "Can add credit requirement status", "content_type": 186}, "model": "auth.permission", "pk": 560}, {"fields": {"codename": "change_creditrequirementstatus", "name": "Can change credit requirement status", "content_type": 186}, "model": "auth.permission", "pk": 561}, {"fields": {"codename": "delete_creditrequirementstatus", "name": "Can delete credit requirement status", "content_type": 186}, "model": "auth.permission", "pk": 562}, {"fields": {"codename": "add_crediteligibility", "name": "Can add credit eligibility", "content_type": 187}, "model": "auth.permission", "pk": 563}, {"fields": {"codename": "change_crediteligibility", "name": "Can change credit eligibility", "content_type": 187}, "model": "auth.permission", "pk": 564}, {"fields": {"codename": "delete_crediteligibility", "name": "Can delete credit eligibility", "content_type": 187}, "model": "auth.permission", "pk": 565}, {"fields": {"codename": "add_historicalcreditrequest", "name": "Can add historical credit request", "content_type": 188}, "model": "auth.permission", "pk": 566}, {"fields": {"codename": "change_historicalcreditrequest", "name": "Can change historical credit request", "content_type": 188}, "model": "auth.permission", "pk": 567}, {"fields": {"codename": "delete_historicalcreditrequest", "name": "Can delete historical credit request", "content_type": 188}, "model": "auth.permission", "pk": 568}, {"fields": {"codename": "add_creditrequest", "name": "Can add credit request", "content_type": 189}, "model": "auth.permission", "pk": 569}, {"fields": {"codename": "change_creditrequest", "name": "Can change credit request", "content_type": 189}, "model": "auth.permission", "pk": 570}, {"fields": {"codename": "delete_creditrequest", "name": "Can delete credit request", "content_type": 189}, "model": "auth.permission", "pk": 571}, {"fields": {"codename": "add_courseteam", "name": "Can add course team", "content_type": 190}, "model": "auth.permission", "pk": 572}, {"fields": {"codename": "change_courseteam", "name": "Can change course team", "content_type": 190}, "model": "auth.permission", "pk": 573}, {"fields": {"codename": "delete_courseteam", "name": "Can delete course team", "content_type": 190}, "model": "auth.permission", "pk": 574}, {"fields": {"codename": "add_courseteammembership", "name": "Can add course team membership", "content_type": 191}, "model": "auth.permission", "pk": 575}, {"fields": {"codename": "change_courseteammembership", "name": "Can change course team membership", "content_type": 191}, "model": "auth.permission", "pk": 576}, {"fields": {"codename": "delete_courseteammembership", "name": "Can delete course team membership", "content_type": 191}, "model": "auth.permission", "pk": 577}, {"fields": {"codename": "add_xblockdisableconfig", "name": "Can add x block disable config", "content_type": 192}, "model": "auth.permission", "pk": 578}, {"fields": {"codename": "change_xblockdisableconfig", "name": "Can change x block disable config", "content_type": 192}, "model": "auth.permission", "pk": 579}, {"fields": {"codename": "delete_xblockdisableconfig", "name": "Can delete x block disable config", "content_type": 192}, "model": "auth.permission", "pk": 580}, {"fields": {"codename": "add_bookmark", "name": "Can add bookmark", "content_type": 193}, "model": "auth.permission", "pk": 581}, {"fields": {"codename": "change_bookmark", "name": "Can change bookmark", "content_type": 193}, "model": "auth.permission", "pk": 582}, {"fields": {"codename": "delete_bookmark", "name": "Can delete bookmark", "content_type": 193}, "model": "auth.permission", "pk": 583}, {"fields": {"codename": "add_xblockcache", "name": "Can add x block cache", "content_type": 194}, "model": "auth.permission", "pk": 584}, {"fields": {"codename": "change_xblockcache", "name": "Can change x block cache", "content_type": 194}, "model": "auth.permission", "pk": 585}, {"fields": {"codename": "delete_xblockcache", "name": "Can delete x block cache", "content_type": 194}, "model": "auth.permission", "pk": 586}, {"fields": {"codename": "add_programsapiconfig", "name": "Can add programs api config", "content_type": 195}, "model": "auth.permission", "pk": 587}, {"fields": {"codename": "change_programsapiconfig", "name": "Can change programs api config", "content_type": 195}, "model": "auth.permission", "pk": 588}, {"fields": {"codename": "delete_programsapiconfig", "name": "Can delete programs api config", "content_type": 195}, "model": "auth.permission", "pk": 589}, {"fields": {"codename": "add_selfpacedconfiguration", "name": "Can add self paced configuration", "content_type": 196}, "model": "auth.permission", "pk": 590}, {"fields": {"codename": "change_selfpacedconfiguration", "name": "Can change self paced configuration", "content_type": 196}, "model": "auth.permission", "pk": 591}, {"fields": {"codename": "delete_selfpacedconfiguration", "name": "Can delete self paced configuration", "content_type": 196}, "model": "auth.permission", "pk": 592}, {"fields": {"codename": "add_kvstore", "name": "Can add kv store", "content_type": 197}, "model": "auth.permission", "pk": 593}, {"fields": {"codename": "change_kvstore", "name": "Can change kv store", "content_type": 197}, "model": "auth.permission", "pk": 594}, {"fields": {"codename": "delete_kvstore", "name": "Can delete kv store", "content_type": 197}, "model": "auth.permission", "pk": 595}, {"fields": {"codename": "add_credentialsapiconfig", "name": "Can add credentials api config", "content_type": 198}, "model": "auth.permission", "pk": 596}, {"fields": {"codename": "change_credentialsapiconfig", "name": "Can change credentials api config", "content_type": 198}, "model": "auth.permission", "pk": 597}, {"fields": {"codename": "delete_credentialsapiconfig", "name": "Can delete credentials api config", "content_type": 198}, "model": "auth.permission", "pk": 598}, {"fields": {"codename": "add_milestone", "name": "Can add milestone", "content_type": 199}, "model": "auth.permission", "pk": 599}, {"fields": {"codename": "change_milestone", "name": "Can change milestone", "content_type": 199}, "model": "auth.permission", "pk": 600}, {"fields": {"codename": "delete_milestone", "name": "Can delete milestone", "content_type": 199}, "model": "auth.permission", "pk": 601}, {"fields": {"codename": "add_milestonerelationshiptype", "name": "Can add milestone relationship type", "content_type": 200}, "model": "auth.permission", "pk": 602}, {"fields": {"codename": "change_milestonerelationshiptype", "name": "Can change milestone relationship type", "content_type": 200}, "model": "auth.permission", "pk": 603}, {"fields": {"codename": "delete_milestonerelationshiptype", "name": "Can delete milestone relationship type", "content_type": 200}, "model": "auth.permission", "pk": 604}, {"fields": {"codename": "add_coursemilestone", "name": "Can add course milestone", "content_type": 201}, "model": "auth.permission", "pk": 605}, {"fields": {"codename": "change_coursemilestone", "name": "Can change course milestone", "content_type": 201}, "model": "auth.permission", "pk": 606}, {"fields": {"codename": "delete_coursemilestone", "name": "Can delete course milestone", "content_type": 201}, "model": "auth.permission", "pk": 607}, {"fields": {"codename": "add_coursecontentmilestone", "name": "Can add course content milestone", "content_type": 202}, "model": "auth.permission", "pk": 608}, {"fields": {"codename": "change_coursecontentmilestone", "name": "Can change course content milestone", "content_type": 202}, "model": "auth.permission", "pk": 609}, {"fields": {"codename": "delete_coursecontentmilestone", "name": "Can delete course content milestone", "content_type": 202}, "model": "auth.permission", "pk": 610}, {"fields": {"codename": "add_usermilestone", "name": "Can add user milestone", "content_type": 203}, "model": "auth.permission", "pk": 611}, {"fields": {"codename": "change_usermilestone", "name": "Can change user milestone", "content_type": 203}, "model": "auth.permission", "pk": 612}, {"fields": {"codename": "delete_usermilestone", "name": "Can delete user milestone", "content_type": 203}, "model": "auth.permission", "pk": 613}, {"fields": {"codename": "add_studentitem", "name": "Can add student item", "content_type": 204}, "model": "auth.permission", "pk": 614}, {"fields": {"codename": "change_studentitem", "name": "Can change student item", "content_type": 204}, "model": "auth.permission", "pk": 615}, {"fields": {"codename": "delete_studentitem", "name": "Can delete student item", "content_type": 204}, "model": "auth.permission", "pk": 616}, {"fields": {"codename": "add_submission", "name": "Can add submission", "content_type": 205}, "model": "auth.permission", "pk": 617}, {"fields": {"codename": "change_submission", "name": "Can change submission", "content_type": 205}, "model": "auth.permission", "pk": 618}, {"fields": {"codename": "delete_submission", "name": "Can delete submission", "content_type": 205}, "model": "auth.permission", "pk": 619}, {"fields": {"codename": "add_score", "name": "Can add score", "content_type": 206}, "model": "auth.permission", "pk": 620}, {"fields": {"codename": "change_score", "name": "Can change score", "content_type": 206}, "model": "auth.permission", "pk": 621}, {"fields": {"codename": "delete_score", "name": "Can delete score", "content_type": 206}, "model": "auth.permission", "pk": 622}, {"fields": {"codename": "add_scoresummary", "name": "Can add score summary", "content_type": 207}, "model": "auth.permission", "pk": 623}, {"fields": {"codename": "change_scoresummary", "name": "Can change score summary", "content_type": 207}, "model": "auth.permission", "pk": 624}, {"fields": {"codename": "delete_scoresummary", "name": "Can delete score summary", "content_type": 207}, "model": "auth.permission", "pk": 625}, {"fields": {"codename": "add_scoreannotation", "name": "Can add score annotation", "content_type": 208}, "model": "auth.permission", "pk": 626}, {"fields": {"codename": "change_scoreannotation", "name": "Can change score annotation", "content_type": 208}, "model": "auth.permission", "pk": 627}, {"fields": {"codename": "delete_scoreannotation", "name": "Can delete score annotation", "content_type": 208}, "model": "auth.permission", "pk": 628}, {"fields": {"codename": "add_rubric", "name": "Can add rubric", "content_type": 209}, "model": "auth.permission", "pk": 629}, {"fields": {"codename": "change_rubric", "name": "Can change rubric", "content_type": 209}, "model": "auth.permission", "pk": 630}, {"fields": {"codename": "delete_rubric", "name": "Can delete rubric", "content_type": 209}, "model": "auth.permission", "pk": 631}, {"fields": {"codename": "add_criterion", "name": "Can add criterion", "content_type": 210}, "model": "auth.permission", "pk": 632}, {"fields": {"codename": "change_criterion", "name": "Can change criterion", "content_type": 210}, "model": "auth.permission", "pk": 633}, {"fields": {"codename": "delete_criterion", "name": "Can delete criterion", "content_type": 210}, "model": "auth.permission", "pk": 634}, {"fields": {"codename": "add_criterionoption", "name": "Can add criterion option", "content_type": 211}, "model": "auth.permission", "pk": 635}, {"fields": {"codename": "change_criterionoption", "name": "Can change criterion option", "content_type": 211}, "model": "auth.permission", "pk": 636}, {"fields": {"codename": "delete_criterionoption", "name": "Can delete criterion option", "content_type": 211}, "model": "auth.permission", "pk": 637}, {"fields": {"codename": "add_assessment", "name": "Can add assessment", "content_type": 212}, "model": "auth.permission", "pk": 638}, {"fields": {"codename": "change_assessment", "name": "Can change assessment", "content_type": 212}, "model": "auth.permission", "pk": 639}, {"fields": {"codename": "delete_assessment", "name": "Can delete assessment", "content_type": 212}, "model": "auth.permission", "pk": 640}, {"fields": {"codename": "add_assessmentpart", "name": "Can add assessment part", "content_type": 213}, "model": "auth.permission", "pk": 641}, {"fields": {"codename": "change_assessmentpart", "name": "Can change assessment part", "content_type": 213}, "model": "auth.permission", "pk": 642}, {"fields": {"codename": "delete_assessmentpart", "name": "Can delete assessment part", "content_type": 213}, "model": "auth.permission", "pk": 643}, {"fields": {"codename": "add_assessmentfeedbackoption", "name": "Can add assessment feedback option", "content_type": 214}, "model": "auth.permission", "pk": 644}, {"fields": {"codename": "change_assessmentfeedbackoption", "name": "Can change assessment feedback option", "content_type": 214}, "model": "auth.permission", "pk": 645}, {"fields": {"codename": "delete_assessmentfeedbackoption", "name": "Can delete assessment feedback option", "content_type": 214}, "model": "auth.permission", "pk": 646}, {"fields": {"codename": "add_assessmentfeedback", "name": "Can add assessment feedback", "content_type": 215}, "model": "auth.permission", "pk": 647}, {"fields": {"codename": "change_assessmentfeedback", "name": "Can change assessment feedback", "content_type": 215}, "model": "auth.permission", "pk": 648}, {"fields": {"codename": "delete_assessmentfeedback", "name": "Can delete assessment feedback", "content_type": 215}, "model": "auth.permission", "pk": 649}, {"fields": {"codename": "add_peerworkflow", "name": "Can add peer workflow", "content_type": 216}, "model": "auth.permission", "pk": 650}, {"fields": {"codename": "change_peerworkflow", "name": "Can change peer workflow", "content_type": 216}, "model": "auth.permission", "pk": 651}, {"fields": {"codename": "delete_peerworkflow", "name": "Can delete peer workflow", "content_type": 216}, "model": "auth.permission", "pk": 652}, {"fields": {"codename": "add_peerworkflowitem", "name": "Can add peer workflow item", "content_type": 217}, "model": "auth.permission", "pk": 653}, {"fields": {"codename": "change_peerworkflowitem", "name": "Can change peer workflow item", "content_type": 217}, "model": "auth.permission", "pk": 654}, {"fields": {"codename": "delete_peerworkflowitem", "name": "Can delete peer workflow item", "content_type": 217}, "model": "auth.permission", "pk": 655}, {"fields": {"codename": "add_trainingexample", "name": "Can add training example", "content_type": 218}, "model": "auth.permission", "pk": 656}, {"fields": {"codename": "change_trainingexample", "name": "Can change training example", "content_type": 218}, "model": "auth.permission", "pk": 657}, {"fields": {"codename": "delete_trainingexample", "name": "Can delete training example", "content_type": 218}, "model": "auth.permission", "pk": 658}, {"fields": {"codename": "add_studenttrainingworkflow", "name": "Can add student training workflow", "content_type": 219}, "model": "auth.permission", "pk": 659}, {"fields": {"codename": "change_studenttrainingworkflow", "name": "Can change student training workflow", "content_type": 219}, "model": "auth.permission", "pk": 660}, {"fields": {"codename": "delete_studenttrainingworkflow", "name": "Can delete student training workflow", "content_type": 219}, "model": "auth.permission", "pk": 661}, {"fields": {"codename": "add_studenttrainingworkflowitem", "name": "Can add student training workflow item", "content_type": 220}, "model": "auth.permission", "pk": 662}, {"fields": {"codename": "change_studenttrainingworkflowitem", "name": "Can change student training workflow item", "content_type": 220}, "model": "auth.permission", "pk": 663}, {"fields": {"codename": "delete_studenttrainingworkflowitem", "name": "Can delete student training workflow item", "content_type": 220}, "model": "auth.permission", "pk": 664}, {"fields": {"codename": "add_aiclassifierset", "name": "Can add ai classifier set", "content_type": 221}, "model": "auth.permission", "pk": 665}, {"fields": {"codename": "change_aiclassifierset", "name": "Can change ai classifier set", "content_type": 221}, "model": "auth.permission", "pk": 666}, {"fields": {"codename": "delete_aiclassifierset", "name": "Can delete ai classifier set", "content_type": 221}, "model": "auth.permission", "pk": 667}, {"fields": {"codename": "add_aiclassifier", "name": "Can add ai classifier", "content_type": 222}, "model": "auth.permission", "pk": 668}, {"fields": {"codename": "change_aiclassifier", "name": "Can change ai classifier", "content_type": 222}, "model": "auth.permission", "pk": 669}, {"fields": {"codename": "delete_aiclassifier", "name": "Can delete ai classifier", "content_type": 222}, "model": "auth.permission", "pk": 670}, {"fields": {"codename": "add_aitrainingworkflow", "name": "Can add ai training workflow", "content_type": 223}, "model": "auth.permission", "pk": 671}, {"fields": {"codename": "change_aitrainingworkflow", "name": "Can change ai training workflow", "content_type": 223}, "model": "auth.permission", "pk": 672}, {"fields": {"codename": "delete_aitrainingworkflow", "name": "Can delete ai training workflow", "content_type": 223}, "model": "auth.permission", "pk": 673}, {"fields": {"codename": "add_aigradingworkflow", "name": "Can add ai grading workflow", "content_type": 224}, "model": "auth.permission", "pk": 674}, {"fields": {"codename": "change_aigradingworkflow", "name": "Can change ai grading workflow", "content_type": 224}, "model": "auth.permission", "pk": 675}, {"fields": {"codename": "delete_aigradingworkflow", "name": "Can delete ai grading workflow", "content_type": 224}, "model": "auth.permission", "pk": 676}, {"fields": {"codename": "add_staffworkflow", "name": "Can add staff workflow", "content_type": 225}, "model": "auth.permission", "pk": 677}, {"fields": {"codename": "change_staffworkflow", "name": "Can change staff workflow", "content_type": 225}, "model": "auth.permission", "pk": 678}, {"fields": {"codename": "delete_staffworkflow", "name": "Can delete staff workflow", "content_type": 225}, "model": "auth.permission", "pk": 679}, {"fields": {"codename": "add_assessmentworkflow", "name": "Can add assessment workflow", "content_type": 226}, "model": "auth.permission", "pk": 680}, {"fields": {"codename": "change_assessmentworkflow", "name": "Can change assessment workflow", "content_type": 226}, "model": "auth.permission", "pk": 681}, {"fields": {"codename": "delete_assessmentworkflow", "name": "Can delete assessment workflow", "content_type": 226}, "model": "auth.permission", "pk": 682}, {"fields": {"codename": "add_assessmentworkflowstep", "name": "Can add assessment workflow step", "content_type": 227}, "model": "auth.permission", "pk": 683}, {"fields": {"codename": "change_assessmentworkflowstep", "name": "Can change assessment workflow step", "content_type": 227}, "model": "auth.permission", "pk": 684}, {"fields": {"codename": "delete_assessmentworkflowstep", "name": "Can delete assessment workflow step", "content_type": 227}, "model": "auth.permission", "pk": 685}, {"fields": {"codename": "add_assessmentworkflowcancellation", "name": "Can add assessment workflow cancellation", "content_type": 228}, "model": "auth.permission", "pk": 686}, {"fields": {"codename": "change_assessmentworkflowcancellation", "name": "Can change assessment workflow cancellation", "content_type": 228}, "model": "auth.permission", "pk": 687}, {"fields": {"codename": "delete_assessmentworkflowcancellation", "name": "Can delete assessment workflow cancellation", "content_type": 228}, "model": "auth.permission", "pk": 688}, {"fields": {"codename": "add_profile", "name": "Can add profile", "content_type": 229}, "model": "auth.permission", "pk": 689}, {"fields": {"codename": "change_profile", "name": "Can change profile", "content_type": 229}, "model": "auth.permission", "pk": 690}, {"fields": {"codename": "delete_profile", "name": "Can delete profile", "content_type": 229}, "model": "auth.permission", "pk": 691}, {"fields": {"codename": "add_video", "name": "Can add video", "content_type": 230}, "model": "auth.permission", "pk": 692}, {"fields": {"codename": "change_video", "name": "Can change video", "content_type": 230}, "model": "auth.permission", "pk": 693}, {"fields": {"codename": "delete_video", "name": "Can delete video", "content_type": 230}, "model": "auth.permission", "pk": 694}, {"fields": {"codename": "add_coursevideo", "name": "Can add course video", "content_type": 231}, "model": "auth.permission", "pk": 695}, {"fields": {"codename": "change_coursevideo", "name": "Can change course video", "content_type": 231}, "model": "auth.permission", "pk": 696}, {"fields": {"codename": "delete_coursevideo", "name": "Can delete course video", "content_type": 231}, "model": "auth.permission", "pk": 697}, {"fields": {"codename": "add_encodedvideo", "name": "Can add encoded video", "content_type": 232}, "model": "auth.permission", "pk": 698}, {"fields": {"codename": "change_encodedvideo", "name": "Can change encoded video", "content_type": 232}, "model": "auth.permission", "pk": 699}, {"fields": {"codename": "delete_encodedvideo", "name": "Can delete encoded video", "content_type": 232}, "model": "auth.permission", "pk": 700}, {"fields": {"codename": "add_subtitle", "name": "Can add subtitle", "content_type": 233}, "model": "auth.permission", "pk": 701}, {"fields": {"codename": "change_subtitle", "name": "Can change subtitle", "content_type": 233}, "model": "auth.permission", "pk": 702}, {"fields": {"codename": "delete_subtitle", "name": "Can delete subtitle", "content_type": 233}, "model": "auth.permission", "pk": 703}, {"fields": {"codename": "add_proctoredexam", "name": "Can add proctored exam", "content_type": 234}, "model": "auth.permission", "pk": 704}, {"fields": {"codename": "change_proctoredexam", "name": "Can change proctored exam", "content_type": 234}, "model": "auth.permission", "pk": 705}, {"fields": {"codename": "delete_proctoredexam", "name": "Can delete proctored exam", "content_type": 234}, "model": "auth.permission", "pk": 706}, {"fields": {"codename": "add_proctoredexamreviewpolicy", "name": "Can add Proctored exam review policy", "content_type": 235}, "model": "auth.permission", "pk": 707}, {"fields": {"codename": "change_proctoredexamreviewpolicy", "name": "Can change Proctored exam review policy", "content_type": 235}, "model": "auth.permission", "pk": 708}, {"fields": {"codename": "delete_proctoredexamreviewpolicy", "name": "Can delete Proctored exam review policy", "content_type": 235}, "model": "auth.permission", "pk": 709}, {"fields": {"codename": "add_proctoredexamreviewpolicyhistory", "name": "Can add proctored exam review policy history", "content_type": 236}, "model": "auth.permission", "pk": 710}, {"fields": {"codename": "change_proctoredexamreviewpolicyhistory", "name": "Can change proctored exam review policy history", "content_type": 236}, "model": "auth.permission", "pk": 711}, {"fields": {"codename": "delete_proctoredexamreviewpolicyhistory", "name": "Can delete proctored exam review policy history", "content_type": 236}, "model": "auth.permission", "pk": 712}, {"fields": {"codename": "add_proctoredexamstudentattempt", "name": "Can add proctored exam attempt", "content_type": 237}, "model": "auth.permission", "pk": 713}, {"fields": {"codename": "change_proctoredexamstudentattempt", "name": "Can change proctored exam attempt", "content_type": 237}, "model": "auth.permission", "pk": 714}, {"fields": {"codename": "delete_proctoredexamstudentattempt", "name": "Can delete proctored exam attempt", "content_type": 237}, "model": "auth.permission", "pk": 715}, {"fields": {"codename": "add_proctoredexamstudentattempthistory", "name": "Can add proctored exam attempt history", "content_type": 238}, "model": "auth.permission", "pk": 716}, {"fields": {"codename": "change_proctoredexamstudentattempthistory", "name": "Can change proctored exam attempt history", "content_type": 238}, "model": "auth.permission", "pk": 717}, {"fields": {"codename": "delete_proctoredexamstudentattempthistory", "name": "Can delete proctored exam attempt history", "content_type": 238}, "model": "auth.permission", "pk": 718}, {"fields": {"codename": "add_proctoredexamstudentallowance", "name": "Can add proctored allowance", "content_type": 239}, "model": "auth.permission", "pk": 719}, {"fields": {"codename": "change_proctoredexamstudentallowance", "name": "Can change proctored allowance", "content_type": 239}, "model": "auth.permission", "pk": 720}, {"fields": {"codename": "delete_proctoredexamstudentallowance", "name": "Can delete proctored allowance", "content_type": 239}, "model": "auth.permission", "pk": 721}, {"fields": {"codename": "add_proctoredexamstudentallowancehistory", "name": "Can add proctored allowance history", "content_type": 240}, "model": "auth.permission", "pk": 722}, {"fields": {"codename": "change_proctoredexamstudentallowancehistory", "name": "Can change proctored allowance history", "content_type": 240}, "model": "auth.permission", "pk": 723}, {"fields": {"codename": "delete_proctoredexamstudentallowancehistory", "name": "Can delete proctored allowance history", "content_type": 240}, "model": "auth.permission", "pk": 724}, {"fields": {"codename": "add_proctoredexamsoftwaresecurereview", "name": "Can add Proctored exam software secure review", "content_type": 241}, "model": "auth.permission", "pk": 725}, {"fields": {"codename": "change_proctoredexamsoftwaresecurereview", "name": "Can change Proctored exam software secure review", "content_type": 241}, "model": "auth.permission", "pk": 726}, {"fields": {"codename": "delete_proctoredexamsoftwaresecurereview", "name": "Can delete Proctored exam software secure review", "content_type": 241}, "model": "auth.permission", "pk": 727}, {"fields": {"codename": "add_proctoredexamsoftwaresecurereviewhistory", "name": "Can add Proctored exam review archive", "content_type": 242}, "model": "auth.permission", "pk": 728}, {"fields": {"codename": "change_proctoredexamsoftwaresecurereviewhistory", "name": "Can change Proctored exam review archive", "content_type": 242}, "model": "auth.permission", "pk": 729}, {"fields": {"codename": "delete_proctoredexamsoftwaresecurereviewhistory", "name": "Can delete Proctored exam review archive", "content_type": 242}, "model": "auth.permission", "pk": 730}, {"fields": {"codename": "add_proctoredexamsoftwaresecurecomment", "name": "Can add proctored exam software secure comment", "content_type": 243}, "model": "auth.permission", "pk": 731}, {"fields": {"codename": "change_proctoredexamsoftwaresecurecomment", "name": "Can change proctored exam software secure comment", "content_type": 243}, "model": "auth.permission", "pk": 732}, {"fields": {"codename": "delete_proctoredexamsoftwaresecurecomment", "name": "Can delete proctored exam software secure comment", "content_type": 243}, "model": "auth.permission", "pk": 733}, {"fields": {"codename": "add_organization", "name": "Can add organization", "content_type": 244}, "model": "auth.permission", "pk": 734}, {"fields": {"codename": "change_organization", "name": "Can change organization", "content_type": 244}, "model": "auth.permission", "pk": 735}, {"fields": {"codename": "delete_organization", "name": "Can delete organization", "content_type": 244}, "model": "auth.permission", "pk": 736}, {"fields": {"codename": "add_organizationcourse", "name": "Can add Link Course", "content_type": 245}, "model": "auth.permission", "pk": 737}, {"fields": {"codename": "change_organizationcourse", "name": "Can change Link Course", "content_type": 245}, "model": "auth.permission", "pk": 738}, {"fields": {"codename": "delete_organizationcourse", "name": "Can delete Link Course", "content_type": 245}, "model": "auth.permission", "pk": 739}, {"fields": {"codename": "add_studentmodulehistoryextended", "name": "Can add student module history extended", "content_type": 246}, "model": "auth.permission", "pk": 740}, {"fields": {"codename": "change_studentmodulehistoryextended", "name": "Can change student module history extended", "content_type": 246}, "model": "auth.permission", "pk": 741}, {"fields": {"codename": "delete_studentmodulehistoryextended", "name": "Can delete student module history extended", "content_type": 246}, "model": "auth.permission", "pk": 742}, {"fields": {"codename": "add_videouploadconfig", "name": "Can add video upload config", "content_type": 247}, "model": "auth.permission", "pk": 743}, {"fields": {"codename": "change_videouploadconfig", "name": "Can change video upload config", "content_type": 247}, "model": "auth.permission", "pk": 744}, {"fields": {"codename": "delete_videouploadconfig", "name": "Can delete video upload config", "content_type": 247}, "model": "auth.permission", "pk": 745}, {"fields": {"codename": "add_pushnotificationconfig", "name": "Can add push notification config", "content_type": 248}, "model": "auth.permission", "pk": 746}, {"fields": {"codename": "change_pushnotificationconfig", "name": "Can change push notification config", "content_type": 248}, "model": "auth.permission", "pk": 747}, {"fields": {"codename": "delete_pushnotificationconfig", "name": "Can delete push notification config", "content_type": 248}, "model": "auth.permission", "pk": 748}, {"fields": {"codename": "add_coursecreator", "name": "Can add course creator", "content_type": 249}, "model": "auth.permission", "pk": 749}, {"fields": {"codename": "change_coursecreator", "name": "Can change course creator", "content_type": 249}, "model": "auth.permission", "pk": 750}, {"fields": {"codename": "delete_coursecreator", "name": "Can delete course creator", "content_type": 249}, "model": "auth.permission", "pk": 751}, {"fields": {"codename": "add_studioconfig", "name": "Can add studio config", "content_type": 250}, "model": "auth.permission", "pk": 752}, {"fields": {"codename": "change_studioconfig", "name": "Can change studio config", "content_type": 250}, "model": "auth.permission", "pk": 753}, {"fields": {"codename": "delete_studioconfig", "name": "Can delete studio config", "content_type": 250}, "model": "auth.permission", "pk": 754}, {"fields": {"username": "ecommerce_worker", "first_name": "", "last_name": "", "is_active": true, "is_superuser": false, "is_staff": false, "last_login": null, "groups": [], "user_permissions": [], "password": "!kHqA96LDdPlv3krtpEd7SmmmMgKeHRD9X7bHq5CD", "email": "ecommerce_worker@fake.email", "date_joined": "2016-02-29T17:58:11.176Z"}, "model": "auth.user", "pk": 1}, {"fields": {"change_date": "2016-02-29T17:59:25.006Z", "changed_by": null, "enabled": true}, "model": "util.ratelimitconfiguration", "pk": 1}, {"fields": {"change_date": "2016-02-29T17:58:10.732Z", "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": "2016-02-29T17:58:18.649Z", "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": "assetexcludedextensionsconfig", "app_label": "static_replace"}, "model": "contenttypes.contenttype", "pk": 18}, {"fields": {"model": "courseassetcachettlconfig", "app_label": "contentserver"}, "model": "contenttypes.contenttype", "pk": 19}, {"fields": {"model": "studentmodule", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 20}, {"fields": {"model": "studentmodulehistory", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 21}, {"fields": {"model": "xmoduleuserstatesummaryfield", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 22}, {"fields": {"model": "xmodulestudentprefsfield", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 23}, {"fields": {"model": "xmodulestudentinfofield", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 24}, {"fields": {"model": "offlinecomputedgrade", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 25}, {"fields": {"model": "offlinecomputedgradelog", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 26}, {"fields": {"model": "studentfieldoverride", "app_label": "courseware"}, "model": "contenttypes.contenttype", "pk": 27}, {"fields": {"model": "anonymoususerid", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 28}, {"fields": {"model": "userstanding", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 29}, {"fields": {"model": "userprofile", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 30}, {"fields": {"model": "usersignupsource", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 31}, {"fields": {"model": "usertestgroup", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 32}, {"fields": {"model": "registration", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 33}, {"fields": {"model": "pendingnamechange", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 34}, {"fields": {"model": "pendingemailchange", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 35}, {"fields": {"model": "passwordhistory", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 36}, {"fields": {"model": "loginfailures", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 37}, {"fields": {"model": "historicalcourseenrollment", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 38}, {"fields": {"model": "courseenrollment", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 39}, {"fields": {"model": "manualenrollmentaudit", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 40}, {"fields": {"model": "courseenrollmentallowed", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 41}, {"fields": {"model": "courseaccessrole", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 42}, {"fields": {"model": "dashboardconfiguration", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 43}, {"fields": {"model": "linkedinaddtoprofileconfiguration", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 44}, {"fields": {"model": "entranceexamconfiguration", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 45}, {"fields": {"model": "languageproficiency", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 46}, {"fields": {"model": "courseenrollmentattribute", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 47}, {"fields": {"model": "enrollmentrefundconfiguration", "app_label": "student"}, "model": "contenttypes.contenttype", "pk": 48}, {"fields": {"model": "trackinglog", "app_label": "track"}, "model": "contenttypes.contenttype", "pk": 49}, {"fields": {"model": "ratelimitconfiguration", "app_label": "util"}, "model": "contenttypes.contenttype", "pk": 50}, {"fields": {"model": "certificatewhitelist", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 51}, {"fields": {"model": "generatedcertificate", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 52}, {"fields": {"model": "certificategenerationhistory", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 53}, {"fields": {"model": "certificateinvalidation", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 54}, {"fields": {"model": "examplecertificateset", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 55}, {"fields": {"model": "examplecertificate", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 56}, {"fields": {"model": "certificategenerationcoursesetting", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 57}, {"fields": {"model": "certificategenerationconfiguration", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 58}, {"fields": {"model": "certificatehtmlviewconfiguration", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 59}, {"fields": {"model": "badgeassertion", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 60}, {"fields": {"model": "badgeimageconfiguration", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 61}, {"fields": {"model": "certificatetemplate", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 62}, {"fields": {"model": "certificatetemplateasset", "app_label": "certificates"}, "model": "contenttypes.contenttype", "pk": 63}, {"fields": {"model": "instructortask", "app_label": "instructor_task"}, "model": "contenttypes.contenttype", "pk": 64}, {"fields": {"model": "courseusergroup", "app_label": "course_groups"}, "model": "contenttypes.contenttype", "pk": 65}, {"fields": {"model": "cohortmembership", "app_label": "course_groups"}, "model": "contenttypes.contenttype", "pk": 66}, {"fields": {"model": "courseusergrouppartitiongroup", "app_label": "course_groups"}, "model": "contenttypes.contenttype", "pk": 67}, {"fields": {"model": "coursecohortssettings", "app_label": "course_groups"}, "model": "contenttypes.contenttype", "pk": 68}, {"fields": {"model": "coursecohort", "app_label": "course_groups"}, "model": "contenttypes.contenttype", "pk": 69}, {"fields": {"model": "courseemail", "app_label": "bulk_email"}, "model": "contenttypes.contenttype", "pk": 70}, {"fields": {"model": "optout", "app_label": "bulk_email"}, "model": "contenttypes.contenttype", "pk": 71}, {"fields": {"model": "courseemailtemplate", "app_label": "bulk_email"}, "model": "contenttypes.contenttype", "pk": 72}, {"fields": {"model": "courseauthorization", "app_label": "bulk_email"}, "model": "contenttypes.contenttype", "pk": 73}, {"fields": {"model": "brandinginfoconfig", "app_label": "branding"}, "model": "contenttypes.contenttype", "pk": 74}, {"fields": {"model": "brandingapiconfig", "app_label": "branding"}, "model": "contenttypes.contenttype", "pk": 75}, {"fields": {"model": "externalauthmap", "app_label": "external_auth"}, "model": "contenttypes.contenttype", "pk": 76}, {"fields": {"model": "nonce", "app_label": "django_openid_auth"}, "model": "contenttypes.contenttype", "pk": 77}, {"fields": {"model": "association", "app_label": "django_openid_auth"}, "model": "contenttypes.contenttype", "pk": 78}, {"fields": {"model": "useropenid", "app_label": "django_openid_auth"}, "model": "contenttypes.contenttype", "pk": 79}, {"fields": {"model": "client", "app_label": "oauth2"}, "model": "contenttypes.contenttype", "pk": 80}, {"fields": {"model": "grant", "app_label": "oauth2"}, "model": "contenttypes.contenttype", "pk": 81}, {"fields": {"model": "accesstoken", "app_label": "oauth2"}, "model": "contenttypes.contenttype", "pk": 82}, {"fields": {"model": "refreshtoken", "app_label": "oauth2"}, "model": "contenttypes.contenttype", "pk": 83}, {"fields": {"model": "trustedclient", "app_label": "edx_oauth2_provider"}, "model": "contenttypes.contenttype", "pk": 84}, {"fields": {"model": "oauth2providerconfig", "app_label": "third_party_auth"}, "model": "contenttypes.contenttype", "pk": 85}, {"fields": {"model": "samlproviderconfig", "app_label": "third_party_auth"}, "model": "contenttypes.contenttype", "pk": 86}, {"fields": {"model": "samlconfiguration", "app_label": "third_party_auth"}, "model": "contenttypes.contenttype", "pk": 87}, {"fields": {"model": "samlproviderdata", "app_label": "third_party_auth"}, "model": "contenttypes.contenttype", "pk": 88}, {"fields": {"model": "ltiproviderconfig", "app_label": "third_party_auth"}, "model": "contenttypes.contenttype", "pk": 89}, {"fields": {"model": "providerapipermissions", "app_label": "third_party_auth"}, "model": "contenttypes.contenttype", "pk": 90}, {"fields": {"model": "nonce", "app_label": "oauth_provider"}, "model": "contenttypes.contenttype", "pk": 91}, {"fields": {"model": "scope", "app_label": "oauth_provider"}, "model": "contenttypes.contenttype", "pk": 92}, {"fields": {"model": "consumer", "app_label": "oauth_provider"}, "model": "contenttypes.contenttype", "pk": 93}, {"fields": {"model": "token", "app_label": "oauth_provider"}, "model": "contenttypes.contenttype", "pk": 94}, {"fields": {"model": "resource", "app_label": "oauth_provider"}, "model": "contenttypes.contenttype", "pk": 95}, {"fields": {"model": "article", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 96}, {"fields": {"model": "articleforobject", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 97}, {"fields": {"model": "articlerevision", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 98}, {"fields": {"model": "urlpath", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 99}, {"fields": {"model": "articleplugin", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 100}, {"fields": {"model": "reusableplugin", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 101}, {"fields": {"model": "simpleplugin", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 102}, {"fields": {"model": "revisionplugin", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 103}, {"fields": {"model": "revisionpluginrevision", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 104}, {"fields": {"model": "image", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 105}, {"fields": {"model": "imagerevision", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 106}, {"fields": {"model": "attachment", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 107}, {"fields": {"model": "attachmentrevision", "app_label": "wiki"}, "model": "contenttypes.contenttype", "pk": 108}, {"fields": {"model": "notificationtype", "app_label": "django_notify"}, "model": "contenttypes.contenttype", "pk": 109}, {"fields": {"model": "settings", "app_label": "django_notify"}, "model": "contenttypes.contenttype", "pk": 110}, {"fields": {"model": "subscription", "app_label": "django_notify"}, "model": "contenttypes.contenttype", "pk": 111}, {"fields": {"model": "notification", "app_label": "django_notify"}, "model": "contenttypes.contenttype", "pk": 112}, {"fields": {"model": "logentry", "app_label": "admin"}, "model": "contenttypes.contenttype", "pk": 113}, {"fields": {"model": "role", "app_label": "django_comment_common"}, "model": "contenttypes.contenttype", "pk": 114}, {"fields": {"model": "permission", "app_label": "django_comment_common"}, "model": "contenttypes.contenttype", "pk": 115}, {"fields": {"model": "note", "app_label": "notes"}, "model": "contenttypes.contenttype", "pk": 116}, {"fields": {"model": "splashconfig", "app_label": "splash"}, "model": "contenttypes.contenttype", "pk": 117}, {"fields": {"model": "userpreference", "app_label": "user_api"}, "model": "contenttypes.contenttype", "pk": 118}, {"fields": {"model": "usercoursetag", "app_label": "user_api"}, "model": "contenttypes.contenttype", "pk": 119}, {"fields": {"model": "userorgtag", "app_label": "user_api"}, "model": "contenttypes.contenttype", "pk": 120}, {"fields": {"model": "order", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 121}, {"fields": {"model": "orderitem", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 122}, {"fields": {"model": "invoice", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 123}, {"fields": {"model": "invoicetransaction", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 124}, {"fields": {"model": "invoiceitem", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 125}, {"fields": {"model": "courseregistrationcodeinvoiceitem", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 126}, {"fields": {"model": "invoicehistory", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 127}, {"fields": {"model": "courseregistrationcode", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 128}, {"fields": {"model": "registrationcoderedemption", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 129}, {"fields": {"model": "coupon", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 130}, {"fields": {"model": "couponredemption", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 131}, {"fields": {"model": "paidcourseregistration", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 132}, {"fields": {"model": "courseregcodeitem", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 133}, {"fields": {"model": "courseregcodeitemannotation", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 134}, {"fields": {"model": "paidcourseregistrationannotation", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 135}, {"fields": {"model": "certificateitem", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 136}, {"fields": {"model": "donationconfiguration", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 137}, {"fields": {"model": "donation", "app_label": "shoppingcart"}, "model": "contenttypes.contenttype", "pk": 138}, {"fields": {"model": "coursemode", "app_label": "course_modes"}, "model": "contenttypes.contenttype", "pk": 139}, {"fields": {"model": "coursemodesarchive", "app_label": "course_modes"}, "model": "contenttypes.contenttype", "pk": 140}, {"fields": {"model": "coursemodeexpirationconfig", "app_label": "course_modes"}, "model": "contenttypes.contenttype", "pk": 141}, {"fields": {"model": "softwaresecurephotoverification", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 142}, {"fields": {"model": "historicalverificationdeadline", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 143}, {"fields": {"model": "verificationdeadline", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 144}, {"fields": {"model": "verificationcheckpoint", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 145}, {"fields": {"model": "verificationstatus", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 146}, {"fields": {"model": "incoursereverificationconfiguration", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 147}, {"fields": {"model": "icrvstatusemailsconfiguration", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 148}, {"fields": {"model": "skippedreverification", "app_label": "verify_student"}, "model": "contenttypes.contenttype", "pk": 149}, {"fields": {"model": "darklangconfig", "app_label": "dark_lang"}, "model": "contenttypes.contenttype", "pk": 150}, {"fields": {"model": "microsite", "app_label": "microsite_configuration"}, "model": "contenttypes.contenttype", "pk": 151}, {"fields": {"model": "micrositehistory", "app_label": "microsite_configuration"}, "model": "contenttypes.contenttype", "pk": 152}, {"fields": {"model": "historicalmicrositeorganizationmapping", "app_label": "microsite_configuration"}, "model": "contenttypes.contenttype", "pk": 153}, {"fields": {"model": "micrositeorganizationmapping", "app_label": "microsite_configuration"}, "model": "contenttypes.contenttype", "pk": 154}, {"fields": {"model": "historicalmicrositetemplate", "app_label": "microsite_configuration"}, "model": "contenttypes.contenttype", "pk": 155}, {"fields": {"model": "micrositetemplate", "app_label": "microsite_configuration"}, "model": "contenttypes.contenttype", "pk": 156}, {"fields": {"model": "whitelistedrssurl", "app_label": "rss_proxy"}, "model": "contenttypes.contenttype", "pk": 157}, {"fields": {"model": "embargoedcourse", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 158}, {"fields": {"model": "embargoedstate", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 159}, {"fields": {"model": "restrictedcourse", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 160}, {"fields": {"model": "country", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 161}, {"fields": {"model": "countryaccessrule", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 162}, {"fields": {"model": "courseaccessrulehistory", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 163}, {"fields": {"model": "ipfilter", "app_label": "embargo"}, "model": "contenttypes.contenttype", "pk": 164}, {"fields": {"model": "coursererunstate", "app_label": "course_action_state"}, "model": "contenttypes.contenttype", "pk": 165}, {"fields": {"model": "mobileapiconfig", "app_label": "mobile_api"}, "model": "contenttypes.contenttype", "pk": 166}, {"fields": {"model": "usersocialauth", "app_label": "default"}, "model": "contenttypes.contenttype", "pk": 167}, {"fields": {"model": "nonce", "app_label": "default"}, "model": "contenttypes.contenttype", "pk": 168}, {"fields": {"model": "association", "app_label": "default"}, "model": "contenttypes.contenttype", "pk": 169}, {"fields": {"model": "code", "app_label": "default"}, "model": "contenttypes.contenttype", "pk": 170}, {"fields": {"model": "surveyform", "app_label": "survey"}, "model": "contenttypes.contenttype", "pk": 171}, {"fields": {"model": "surveyanswer", "app_label": "survey"}, "model": "contenttypes.contenttype", "pk": 172}, {"fields": {"model": "xblockasidesconfig", "app_label": "lms_xblock"}, "model": "contenttypes.contenttype", "pk": 173}, {"fields": {"model": "courseoverview", "app_label": "course_overviews"}, "model": "contenttypes.contenttype", "pk": 174}, {"fields": {"model": "courseoverviewtab", "app_label": "course_overviews"}, "model": "contenttypes.contenttype", "pk": 175}, {"fields": {"model": "courseoverviewimageset", "app_label": "course_overviews"}, "model": "contenttypes.contenttype", "pk": 176}, {"fields": {"model": "courseoverviewimageconfig", "app_label": "course_overviews"}, "model": "contenttypes.contenttype", "pk": 177}, {"fields": {"model": "coursestructure", "app_label": "course_structures"}, "model": "contenttypes.contenttype", "pk": 178}, {"fields": {"model": "corsmodel", "app_label": "corsheaders"}, "model": "contenttypes.contenttype", "pk": 179}, {"fields": {"model": "xdomainproxyconfiguration", "app_label": "cors_csrf"}, "model": "contenttypes.contenttype", "pk": 180}, {"fields": {"model": "commerceconfiguration", "app_label": "commerce"}, "model": "contenttypes.contenttype", "pk": 181}, {"fields": {"model": "creditprovider", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 182}, {"fields": {"model": "creditcourse", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 183}, {"fields": {"model": "creditrequirement", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 184}, {"fields": {"model": "historicalcreditrequirementstatus", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 185}, {"fields": {"model": "creditrequirementstatus", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 186}, {"fields": {"model": "crediteligibility", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 187}, {"fields": {"model": "historicalcreditrequest", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 188}, {"fields": {"model": "creditrequest", "app_label": "credit"}, "model": "contenttypes.contenttype", "pk": 189}, {"fields": {"model": "courseteam", "app_label": "teams"}, "model": "contenttypes.contenttype", "pk": 190}, {"fields": {"model": "courseteammembership", "app_label": "teams"}, "model": "contenttypes.contenttype", "pk": 191}, {"fields": {"model": "xblockdisableconfig", "app_label": "xblock_django"}, "model": "contenttypes.contenttype", "pk": 192}, {"fields": {"model": "bookmark", "app_label": "bookmarks"}, "model": "contenttypes.contenttype", "pk": 193}, {"fields": {"model": "xblockcache", "app_label": "bookmarks"}, "model": "contenttypes.contenttype", "pk": 194}, {"fields": {"model": "programsapiconfig", "app_label": "programs"}, "model": "contenttypes.contenttype", "pk": 195}, {"fields": {"model": "selfpacedconfiguration", "app_label": "self_paced"}, "model": "contenttypes.contenttype", "pk": 196}, {"fields": {"model": "kvstore", "app_label": "thumbnail"}, "model": "contenttypes.contenttype", "pk": 197}, {"fields": {"model": "credentialsapiconfig", "app_label": "credentials"}, "model": "contenttypes.contenttype", "pk": 198}, {"fields": {"model": "milestone", "app_label": "milestones"}, "model": "contenttypes.contenttype", "pk": 199}, {"fields": {"model": "milestonerelationshiptype", "app_label": "milestones"}, "model": "contenttypes.contenttype", "pk": 200}, {"fields": {"model": "coursemilestone", "app_label": "milestones"}, "model": "contenttypes.contenttype", "pk": 201}, {"fields": {"model": "coursecontentmilestone", "app_label": "milestones"}, "model": "contenttypes.contenttype", "pk": 202}, {"fields": {"model": "usermilestone", "app_label": "milestones"}, "model": "contenttypes.contenttype", "pk": 203}, {"fields": {"model": "studentitem", "app_label": "submissions"}, "model": "contenttypes.contenttype", "pk": 204}, {"fields": {"model": "submission", "app_label": "submissions"}, "model": "contenttypes.contenttype", "pk": 205}, {"fields": {"model": "score", "app_label": "submissions"}, "model": "contenttypes.contenttype", "pk": 206}, {"fields": {"model": "scoresummary", "app_label": "submissions"}, "model": "contenttypes.contenttype", "pk": 207}, {"fields": {"model": "scoreannotation", "app_label": "submissions"}, "model": "contenttypes.contenttype", "pk": 208}, {"fields": {"model": "rubric", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 209}, {"fields": {"model": "criterion", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 210}, {"fields": {"model": "criterionoption", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 211}, {"fields": {"model": "assessment", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 212}, {"fields": {"model": "assessmentpart", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 213}, {"fields": {"model": "assessmentfeedbackoption", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 214}, {"fields": {"model": "assessmentfeedback", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 215}, {"fields": {"model": "peerworkflow", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 216}, {"fields": {"model": "peerworkflowitem", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 217}, {"fields": {"model": "trainingexample", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 218}, {"fields": {"model": "studenttrainingworkflow", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 219}, {"fields": {"model": "studenttrainingworkflowitem", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 220}, {"fields": {"model": "aiclassifierset", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 221}, {"fields": {"model": "aiclassifier", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 222}, {"fields": {"model": "aitrainingworkflow", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 223}, {"fields": {"model": "aigradingworkflow", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 224}, {"fields": {"model": "staffworkflow", "app_label": "assessment"}, "model": "contenttypes.contenttype", "pk": 225}, {"fields": {"model": "assessmentworkflow", "app_label": "workflow"}, "model": "contenttypes.contenttype", "pk": 226}, {"fields": {"model": "assessmentworkflowstep", "app_label": "workflow"}, "model": "contenttypes.contenttype", "pk": 227}, {"fields": {"model": "assessmentworkflowcancellation", "app_label": "workflow"}, "model": "contenttypes.contenttype", "pk": 228}, {"fields": {"model": "profile", "app_label": "edxval"}, "model": "contenttypes.contenttype", "pk": 229}, {"fields": {"model": "video", "app_label": "edxval"}, "model": "contenttypes.contenttype", "pk": 230}, {"fields": {"model": "coursevideo", "app_label": "edxval"}, "model": "contenttypes.contenttype", "pk": 231}, {"fields": {"model": "encodedvideo", "app_label": "edxval"}, "model": "contenttypes.contenttype", "pk": 232}, {"fields": {"model": "subtitle", "app_label": "edxval"}, "model": "contenttypes.contenttype", "pk": 233}, {"fields": {"model": "proctoredexam", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 234}, {"fields": {"model": "proctoredexamreviewpolicy", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 235}, {"fields": {"model": "proctoredexamreviewpolicyhistory", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 236}, {"fields": {"model": "proctoredexamstudentattempt", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 237}, {"fields": {"model": "proctoredexamstudentattempthistory", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 238}, {"fields": {"model": "proctoredexamstudentallowance", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 239}, {"fields": {"model": "proctoredexamstudentallowancehistory", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 240}, {"fields": {"model": "proctoredexamsoftwaresecurereview", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 241}, {"fields": {"model": "proctoredexamsoftwaresecurereviewhistory", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 242}, {"fields": {"model": "proctoredexamsoftwaresecurecomment", "app_label": "edx_proctoring"}, "model": "contenttypes.contenttype", "pk": 243}, {"fields": {"model": "organization", "app_label": "organizations"}, "model": "contenttypes.contenttype", "pk": 244}, {"fields": {"model": "organizationcourse", "app_label": "organizations"}, "model": "contenttypes.contenttype", "pk": 245}, {"fields": {"model": "studentmodulehistoryextended", "app_label": "coursewarehistoryextended"}, "model": "contenttypes.contenttype", "pk": 246}, {"fields": {"model": "videouploadconfig", "app_label": "contentstore"}, "model": "contenttypes.contenttype", "pk": 247}, {"fields": {"model": "pushnotificationconfig", "app_label": "contentstore"}, "model": "contenttypes.contenttype", "pk": 248}, {"fields": {"model": "coursecreator", "app_label": "course_creators"}, "model": "contenttypes.contenttype", "pk": 249}, {"fields": {"model": "studioconfig", "app_label": "xblock_config"}, "model": "contenttypes.contenttype", "pk": 250}, {"fields": {"domain": "example.com", "name": "example.com"}, "model": "sites.site", "pk": 1}, {"fields": {"default": false, "mode": "honor", "icon": "badges/honor_DoEIP2g.png"}, "model": "certificates.badgeimageconfiguration", "pk": 1}, {"fields": {"default": false, "mode": "verified", "icon": "badges/verified_NhgTSxb.png"}, "model": "certificates.badgeimageconfiguration", "pk": 2}, {"fields": {"default": false, "mode": "professional", "icon": "badges/professional_hbw8JvE.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": {"active": true, "description": "Autogenerated milestone relationship type \"fulfills\"", "modified": "2016-03-07T21:30:43.537Z", "name": "fulfills", "created": "2016-03-07T21:30:43.537Z"}, "model": "milestones.milestonerelationshiptype", "pk": 1}, {"fields": {"active": true, "description": "Autogenerated milestone relationship type \"requires\"", "modified": "2016-03-07T21:30:43.539Z", "name": "requires", "created": "2016-03-07T21:30:43.539Z"}, "model": "milestones.milestonerelationshiptype", "pk": 2}, {"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": {"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_assetexcludedextensionsconfig", "name": "Can add asset excluded extensions config", "content_type": 18}, "model": "auth.permission", "pk": 52}, {"fields": {"codename": "change_assetexcludedextensionsconfig", "name": "Can change asset excluded extensions config", "content_type": 18}, "model": "auth.permission", "pk": 53}, {"fields": {"codename": "delete_assetexcludedextensionsconfig", "name": "Can delete asset excluded extensions config", "content_type": 18}, "model": "auth.permission", "pk": 54}, {"fields": {"codename": "add_courseassetcachettlconfig", "name": "Can add course asset cache ttl config", "content_type": 19}, "model": "auth.permission", "pk": 55}, {"fields": {"codename": "change_courseassetcachettlconfig", "name": "Can change course asset cache ttl config", "content_type": 19}, "model": "auth.permission", "pk": 56}, {"fields": {"codename": "delete_courseassetcachettlconfig", "name": "Can delete course asset cache ttl config", "content_type": 19}, "model": "auth.permission", "pk": 57}, {"fields": {"codename": "add_studentmodule", "name": "Can add student module", "content_type": 20}, "model": "auth.permission", "pk": 58}, {"fields": {"codename": "change_studentmodule", "name": "Can change student module", "content_type": 20}, "model": "auth.permission", "pk": 59}, {"fields": {"codename": "delete_studentmodule", "name": "Can delete student module", "content_type": 20}, "model": "auth.permission", "pk": 60}, {"fields": {"codename": "add_studentmodulehistory", "name": "Can add student module history", "content_type": 21}, "model": "auth.permission", "pk": 61}, {"fields": {"codename": "change_studentmodulehistory", "name": "Can change student module history", "content_type": 21}, "model": "auth.permission", "pk": 62}, {"fields": {"codename": "delete_studentmodulehistory", "name": "Can delete student module history", "content_type": 21}, "model": "auth.permission", "pk": 63}, {"fields": {"codename": "add_xmoduleuserstatesummaryfield", "name": "Can add x module user state summary field", "content_type": 22}, "model": "auth.permission", "pk": 64}, {"fields": {"codename": "change_xmoduleuserstatesummaryfield", "name": "Can change x module user state summary field", "content_type": 22}, "model": "auth.permission", "pk": 65}, {"fields": {"codename": "delete_xmoduleuserstatesummaryfield", "name": "Can delete x module user state summary field", "content_type": 22}, "model": "auth.permission", "pk": 66}, {"fields": {"codename": "add_xmodulestudentprefsfield", "name": "Can add x module student prefs field", "content_type": 23}, "model": "auth.permission", "pk": 67}, {"fields": {"codename": "change_xmodulestudentprefsfield", "name": "Can change x module student prefs field", "content_type": 23}, "model": "auth.permission", "pk": 68}, {"fields": {"codename": "delete_xmodulestudentprefsfield", "name": "Can delete x module student prefs field", "content_type": 23}, "model": "auth.permission", "pk": 69}, {"fields": {"codename": "add_xmodulestudentinfofield", "name": "Can add x module student info field", "content_type": 24}, "model": "auth.permission", "pk": 70}, {"fields": {"codename": "change_xmodulestudentinfofield", "name": "Can change x module student info field", "content_type": 24}, "model": "auth.permission", "pk": 71}, {"fields": {"codename": "delete_xmodulestudentinfofield", "name": "Can delete x module student info field", "content_type": 24}, "model": "auth.permission", "pk": 72}, {"fields": {"codename": "add_offlinecomputedgrade", "name": "Can add offline computed grade", "content_type": 25}, "model": "auth.permission", "pk": 73}, {"fields": {"codename": "change_offlinecomputedgrade", "name": "Can change offline computed grade", "content_type": 25}, "model": "auth.permission", "pk": 74}, {"fields": {"codename": "delete_offlinecomputedgrade", "name": "Can delete offline computed grade", "content_type": 25}, "model": "auth.permission", "pk": 75}, {"fields": {"codename": "add_offlinecomputedgradelog", "name": "Can add offline computed grade log", "content_type": 26}, "model": "auth.permission", "pk": 76}, {"fields": {"codename": "change_offlinecomputedgradelog", "name": "Can change offline computed grade log", "content_type": 26}, "model": "auth.permission", "pk": 77}, {"fields": {"codename": "delete_offlinecomputedgradelog", "name": "Can delete offline computed grade log", "content_type": 26}, "model": "auth.permission", "pk": 78}, {"fields": {"codename": "add_studentfieldoverride", "name": "Can add student field override", "content_type": 27}, "model": "auth.permission", "pk": 79}, {"fields": {"codename": "change_studentfieldoverride", "name": "Can change student field override", "content_type": 27}, "model": "auth.permission", "pk": 80}, {"fields": {"codename": "delete_studentfieldoverride", "name": "Can delete student field override", "content_type": 27}, "model": "auth.permission", "pk": 81}, {"fields": {"codename": "add_anonymoususerid", "name": "Can add anonymous user id", "content_type": 28}, "model": "auth.permission", "pk": 82}, {"fields": {"codename": "change_anonymoususerid", "name": "Can change anonymous user id", "content_type": 28}, "model": "auth.permission", "pk": 83}, {"fields": {"codename": "delete_anonymoususerid", "name": "Can delete anonymous user id", "content_type": 28}, "model": "auth.permission", "pk": 84}, {"fields": {"codename": "add_userstanding", "name": "Can add user standing", "content_type": 29}, "model": "auth.permission", "pk": 85}, {"fields": {"codename": "change_userstanding", "name": "Can change user standing", "content_type": 29}, "model": "auth.permission", "pk": 86}, {"fields": {"codename": "delete_userstanding", "name": "Can delete user standing", "content_type": 29}, "model": "auth.permission", "pk": 87}, {"fields": {"codename": "add_userprofile", "name": "Can add user profile", "content_type": 30}, "model": "auth.permission", "pk": 88}, {"fields": {"codename": "change_userprofile", "name": "Can change user profile", "content_type": 30}, "model": "auth.permission", "pk": 89}, {"fields": {"codename": "delete_userprofile", "name": "Can delete user profile", "content_type": 30}, "model": "auth.permission", "pk": 90}, {"fields": {"codename": "add_usersignupsource", "name": "Can add user signup source", "content_type": 31}, "model": "auth.permission", "pk": 91}, {"fields": {"codename": "change_usersignupsource", "name": "Can change user signup source", "content_type": 31}, "model": "auth.permission", "pk": 92}, {"fields": {"codename": "delete_usersignupsource", "name": "Can delete user signup source", "content_type": 31}, "model": "auth.permission", "pk": 93}, {"fields": {"codename": "add_usertestgroup", "name": "Can add user test group", "content_type": 32}, "model": "auth.permission", "pk": 94}, {"fields": {"codename": "change_usertestgroup", "name": "Can change user test group", "content_type": 32}, "model": "auth.permission", "pk": 95}, {"fields": {"codename": "delete_usertestgroup", "name": "Can delete user test group", "content_type": 32}, "model": "auth.permission", "pk": 96}, {"fields": {"codename": "add_registration", "name": "Can add registration", "content_type": 33}, "model": "auth.permission", "pk": 97}, {"fields": {"codename": "change_registration", "name": "Can change registration", "content_type": 33}, "model": "auth.permission", "pk": 98}, {"fields": {"codename": "delete_registration", "name": "Can delete registration", "content_type": 33}, "model": "auth.permission", "pk": 99}, {"fields": {"codename": "add_pendingnamechange", "name": "Can add pending name change", "content_type": 34}, "model": "auth.permission", "pk": 100}, {"fields": {"codename": "change_pendingnamechange", "name": "Can change pending name change", "content_type": 34}, "model": "auth.permission", "pk": 101}, {"fields": {"codename": "delete_pendingnamechange", "name": "Can delete pending name change", "content_type": 34}, "model": "auth.permission", "pk": 102}, {"fields": {"codename": "add_pendingemailchange", "name": "Can add pending email change", "content_type": 35}, "model": "auth.permission", "pk": 103}, {"fields": {"codename": "change_pendingemailchange", "name": "Can change pending email change", "content_type": 35}, "model": "auth.permission", "pk": 104}, {"fields": {"codename": "delete_pendingemailchange", "name": "Can delete pending email change", "content_type": 35}, "model": "auth.permission", "pk": 105}, {"fields": {"codename": "add_passwordhistory", "name": "Can add password history", "content_type": 36}, "model": "auth.permission", "pk": 106}, {"fields": {"codename": "change_passwordhistory", "name": "Can change password history", "content_type": 36}, "model": "auth.permission", "pk": 107}, {"fields": {"codename": "delete_passwordhistory", "name": "Can delete password history", "content_type": 36}, "model": "auth.permission", "pk": 108}, {"fields": {"codename": "add_loginfailures", "name": "Can add login failures", "content_type": 37}, "model": "auth.permission", "pk": 109}, {"fields": {"codename": "change_loginfailures", "name": "Can change login failures", "content_type": 37}, "model": "auth.permission", "pk": 110}, {"fields": {"codename": "delete_loginfailures", "name": "Can delete login failures", "content_type": 37}, "model": "auth.permission", "pk": 111}, {"fields": {"codename": "add_historicalcourseenrollment", "name": "Can add historical course enrollment", "content_type": 38}, "model": "auth.permission", "pk": 112}, {"fields": {"codename": "change_historicalcourseenrollment", "name": "Can change historical course enrollment", "content_type": 38}, "model": "auth.permission", "pk": 113}, {"fields": {"codename": "delete_historicalcourseenrollment", "name": "Can delete historical course enrollment", "content_type": 38}, "model": "auth.permission", "pk": 114}, {"fields": {"codename": "add_courseenrollment", "name": "Can add course enrollment", "content_type": 39}, "model": "auth.permission", "pk": 115}, {"fields": {"codename": "change_courseenrollment", "name": "Can change course enrollment", "content_type": 39}, "model": "auth.permission", "pk": 116}, {"fields": {"codename": "delete_courseenrollment", "name": "Can delete course enrollment", "content_type": 39}, "model": "auth.permission", "pk": 117}, {"fields": {"codename": "add_manualenrollmentaudit", "name": "Can add manual enrollment audit", "content_type": 40}, "model": "auth.permission", "pk": 118}, {"fields": {"codename": "change_manualenrollmentaudit", "name": "Can change manual enrollment audit", "content_type": 40}, "model": "auth.permission", "pk": 119}, {"fields": {"codename": "delete_manualenrollmentaudit", "name": "Can delete manual enrollment audit", "content_type": 40}, "model": "auth.permission", "pk": 120}, {"fields": {"codename": "add_courseenrollmentallowed", "name": "Can add course enrollment allowed", "content_type": 41}, "model": "auth.permission", "pk": 121}, {"fields": {"codename": "change_courseenrollmentallowed", "name": "Can change course enrollment allowed", "content_type": 41}, "model": "auth.permission", "pk": 122}, {"fields": {"codename": "delete_courseenrollmentallowed", "name": "Can delete course enrollment allowed", "content_type": 41}, "model": "auth.permission", "pk": 123}, {"fields": {"codename": "add_courseaccessrole", "name": "Can add course access role", "content_type": 42}, "model": "auth.permission", "pk": 124}, {"fields": {"codename": "change_courseaccessrole", "name": "Can change course access role", "content_type": 42}, "model": "auth.permission", "pk": 125}, {"fields": {"codename": "delete_courseaccessrole", "name": "Can delete course access role", "content_type": 42}, "model": "auth.permission", "pk": 126}, {"fields": {"codename": "add_dashboardconfiguration", "name": "Can add dashboard configuration", "content_type": 43}, "model": "auth.permission", "pk": 127}, {"fields": {"codename": "change_dashboardconfiguration", "name": "Can change dashboard configuration", "content_type": 43}, "model": "auth.permission", "pk": 128}, {"fields": {"codename": "delete_dashboardconfiguration", "name": "Can delete dashboard configuration", "content_type": 43}, "model": "auth.permission", "pk": 129}, {"fields": {"codename": "add_linkedinaddtoprofileconfiguration", "name": "Can add linked in add to profile configuration", "content_type": 44}, "model": "auth.permission", "pk": 130}, {"fields": {"codename": "change_linkedinaddtoprofileconfiguration", "name": "Can change linked in add to profile configuration", "content_type": 44}, "model": "auth.permission", "pk": 131}, {"fields": {"codename": "delete_linkedinaddtoprofileconfiguration", "name": "Can delete linked in add to profile configuration", "content_type": 44}, "model": "auth.permission", "pk": 132}, {"fields": {"codename": "add_entranceexamconfiguration", "name": "Can add entrance exam configuration", "content_type": 45}, "model": "auth.permission", "pk": 133}, {"fields": {"codename": "change_entranceexamconfiguration", "name": "Can change entrance exam configuration", "content_type": 45}, "model": "auth.permission", "pk": 134}, {"fields": {"codename": "delete_entranceexamconfiguration", "name": "Can delete entrance exam configuration", "content_type": 45}, "model": "auth.permission", "pk": 135}, {"fields": {"codename": "add_languageproficiency", "name": "Can add language proficiency", "content_type": 46}, "model": "auth.permission", "pk": 136}, {"fields": {"codename": "change_languageproficiency", "name": "Can change language proficiency", "content_type": 46}, "model": "auth.permission", "pk": 137}, {"fields": {"codename": "delete_languageproficiency", "name": "Can delete language proficiency", "content_type": 46}, "model": "auth.permission", "pk": 138}, {"fields": {"codename": "add_courseenrollmentattribute", "name": "Can add course enrollment attribute", "content_type": 47}, "model": "auth.permission", "pk": 139}, {"fields": {"codename": "change_courseenrollmentattribute", "name": "Can change course enrollment attribute", "content_type": 47}, "model": "auth.permission", "pk": 140}, {"fields": {"codename": "delete_courseenrollmentattribute", "name": "Can delete course enrollment attribute", "content_type": 47}, "model": "auth.permission", "pk": 141}, {"fields": {"codename": "add_enrollmentrefundconfiguration", "name": "Can add enrollment refund configuration", "content_type": 48}, "model": "auth.permission", "pk": 142}, {"fields": {"codename": "change_enrollmentrefundconfiguration", "name": "Can change enrollment refund configuration", "content_type": 48}, "model": "auth.permission", "pk": 143}, {"fields": {"codename": "delete_enrollmentrefundconfiguration", "name": "Can delete enrollment refund configuration", "content_type": 48}, "model": "auth.permission", "pk": 144}, {"fields": {"codename": "add_trackinglog", "name": "Can add tracking log", "content_type": 49}, "model": "auth.permission", "pk": 145}, {"fields": {"codename": "change_trackinglog", "name": "Can change tracking log", "content_type": 49}, "model": "auth.permission", "pk": 146}, {"fields": {"codename": "delete_trackinglog", "name": "Can delete tracking log", "content_type": 49}, "model": "auth.permission", "pk": 147}, {"fields": {"codename": "add_ratelimitconfiguration", "name": "Can add rate limit configuration", "content_type": 50}, "model": "auth.permission", "pk": 148}, {"fields": {"codename": "change_ratelimitconfiguration", "name": "Can change rate limit configuration", "content_type": 50}, "model": "auth.permission", "pk": 149}, {"fields": {"codename": "delete_ratelimitconfiguration", "name": "Can delete rate limit configuration", "content_type": 50}, "model": "auth.permission", "pk": 150}, {"fields": {"codename": "add_certificatewhitelist", "name": "Can add certificate whitelist", "content_type": 51}, "model": "auth.permission", "pk": 151}, {"fields": {"codename": "change_certificatewhitelist", "name": "Can change certificate whitelist", "content_type": 51}, "model": "auth.permission", "pk": 152}, {"fields": {"codename": "delete_certificatewhitelist", "name": "Can delete certificate whitelist", "content_type": 51}, "model": "auth.permission", "pk": 153}, {"fields": {"codename": "add_generatedcertificate", "name": "Can add generated certificate", "content_type": 52}, "model": "auth.permission", "pk": 154}, {"fields": {"codename": "change_generatedcertificate", "name": "Can change generated certificate", "content_type": 52}, "model": "auth.permission", "pk": 155}, {"fields": {"codename": "delete_generatedcertificate", "name": "Can delete generated certificate", "content_type": 52}, "model": "auth.permission", "pk": 156}, {"fields": {"codename": "add_certificategenerationhistory", "name": "Can add certificate generation history", "content_type": 53}, "model": "auth.permission", "pk": 157}, {"fields": {"codename": "change_certificategenerationhistory", "name": "Can change certificate generation history", "content_type": 53}, "model": "auth.permission", "pk": 158}, {"fields": {"codename": "delete_certificategenerationhistory", "name": "Can delete certificate generation history", "content_type": 53}, "model": "auth.permission", "pk": 159}, {"fields": {"codename": "add_certificateinvalidation", "name": "Can add certificate invalidation", "content_type": 54}, "model": "auth.permission", "pk": 160}, {"fields": {"codename": "change_certificateinvalidation", "name": "Can change certificate invalidation", "content_type": 54}, "model": "auth.permission", "pk": 161}, {"fields": {"codename": "delete_certificateinvalidation", "name": "Can delete certificate invalidation", "content_type": 54}, "model": "auth.permission", "pk": 162}, {"fields": {"codename": "add_examplecertificateset", "name": "Can add example certificate set", "content_type": 55}, "model": "auth.permission", "pk": 163}, {"fields": {"codename": "change_examplecertificateset", "name": "Can change example certificate set", "content_type": 55}, "model": "auth.permission", "pk": 164}, {"fields": {"codename": "delete_examplecertificateset", "name": "Can delete example certificate set", "content_type": 55}, "model": "auth.permission", "pk": 165}, {"fields": {"codename": "add_examplecertificate", "name": "Can add example certificate", "content_type": 56}, "model": "auth.permission", "pk": 166}, {"fields": {"codename": "change_examplecertificate", "name": "Can change example certificate", "content_type": 56}, "model": "auth.permission", "pk": 167}, {"fields": {"codename": "delete_examplecertificate", "name": "Can delete example certificate", "content_type": 56}, "model": "auth.permission", "pk": 168}, {"fields": {"codename": "add_certificategenerationcoursesetting", "name": "Can add certificate generation course setting", "content_type": 57}, "model": "auth.permission", "pk": 169}, {"fields": {"codename": "change_certificategenerationcoursesetting", "name": "Can change certificate generation course setting", "content_type": 57}, "model": "auth.permission", "pk": 170}, {"fields": {"codename": "delete_certificategenerationcoursesetting", "name": "Can delete certificate generation course setting", "content_type": 57}, "model": "auth.permission", "pk": 171}, {"fields": {"codename": "add_certificategenerationconfiguration", "name": "Can add certificate generation configuration", "content_type": 58}, "model": "auth.permission", "pk": 172}, {"fields": {"codename": "change_certificategenerationconfiguration", "name": "Can change certificate generation configuration", "content_type": 58}, "model": "auth.permission", "pk": 173}, {"fields": {"codename": "delete_certificategenerationconfiguration", "name": "Can delete certificate generation configuration", "content_type": 58}, "model": "auth.permission", "pk": 174}, {"fields": {"codename": "add_certificatehtmlviewconfiguration", "name": "Can add certificate html view configuration", "content_type": 59}, "model": "auth.permission", "pk": 175}, {"fields": {"codename": "change_certificatehtmlviewconfiguration", "name": "Can change certificate html view configuration", "content_type": 59}, "model": "auth.permission", "pk": 176}, {"fields": {"codename": "delete_certificatehtmlviewconfiguration", "name": "Can delete certificate html view configuration", "content_type": 59}, "model": "auth.permission", "pk": 177}, {"fields": {"codename": "add_badgeassertion", "name": "Can add badge assertion", "content_type": 60}, "model": "auth.permission", "pk": 178}, {"fields": {"codename": "change_badgeassertion", "name": "Can change badge assertion", "content_type": 60}, "model": "auth.permission", "pk": 179}, {"fields": {"codename": "delete_badgeassertion", "name": "Can delete badge assertion", "content_type": 60}, "model": "auth.permission", "pk": 180}, {"fields": {"codename": "add_badgeimageconfiguration", "name": "Can add badge image configuration", "content_type": 61}, "model": "auth.permission", "pk": 181}, {"fields": {"codename": "change_badgeimageconfiguration", "name": "Can change badge image configuration", "content_type": 61}, "model": "auth.permission", "pk": 182}, {"fields": {"codename": "delete_badgeimageconfiguration", "name": "Can delete badge image configuration", "content_type": 61}, "model": "auth.permission", "pk": 183}, {"fields": {"codename": "add_certificatetemplate", "name": "Can add certificate template", "content_type": 62}, "model": "auth.permission", "pk": 184}, {"fields": {"codename": "change_certificatetemplate", "name": "Can change certificate template", "content_type": 62}, "model": "auth.permission", "pk": 185}, {"fields": {"codename": "delete_certificatetemplate", "name": "Can delete certificate template", "content_type": 62}, "model": "auth.permission", "pk": 186}, {"fields": {"codename": "add_certificatetemplateasset", "name": "Can add certificate template asset", "content_type": 63}, "model": "auth.permission", "pk": 187}, {"fields": {"codename": "change_certificatetemplateasset", "name": "Can change certificate template asset", "content_type": 63}, "model": "auth.permission", "pk": 188}, {"fields": {"codename": "delete_certificatetemplateasset", "name": "Can delete certificate template asset", "content_type": 63}, "model": "auth.permission", "pk": 189}, {"fields": {"codename": "add_instructortask", "name": "Can add instructor task", "content_type": 64}, "model": "auth.permission", "pk": 190}, {"fields": {"codename": "change_instructortask", "name": "Can change instructor task", "content_type": 64}, "model": "auth.permission", "pk": 191}, {"fields": {"codename": "delete_instructortask", "name": "Can delete instructor task", "content_type": 64}, "model": "auth.permission", "pk": 192}, {"fields": {"codename": "add_courseusergroup", "name": "Can add course user group", "content_type": 65}, "model": "auth.permission", "pk": 193}, {"fields": {"codename": "change_courseusergroup", "name": "Can change course user group", "content_type": 65}, "model": "auth.permission", "pk": 194}, {"fields": {"codename": "delete_courseusergroup", "name": "Can delete course user group", "content_type": 65}, "model": "auth.permission", "pk": 195}, {"fields": {"codename": "add_cohortmembership", "name": "Can add cohort membership", "content_type": 66}, "model": "auth.permission", "pk": 196}, {"fields": {"codename": "change_cohortmembership", "name": "Can change cohort membership", "content_type": 66}, "model": "auth.permission", "pk": 197}, {"fields": {"codename": "delete_cohortmembership", "name": "Can delete cohort membership", "content_type": 66}, "model": "auth.permission", "pk": 198}, {"fields": {"codename": "add_courseusergrouppartitiongroup", "name": "Can add course user group partition group", "content_type": 67}, "model": "auth.permission", "pk": 199}, {"fields": {"codename": "change_courseusergrouppartitiongroup", "name": "Can change course user group partition group", "content_type": 67}, "model": "auth.permission", "pk": 200}, {"fields": {"codename": "delete_courseusergrouppartitiongroup", "name": "Can delete course user group partition group", "content_type": 67}, "model": "auth.permission", "pk": 201}, {"fields": {"codename": "add_coursecohortssettings", "name": "Can add course cohorts settings", "content_type": 68}, "model": "auth.permission", "pk": 202}, {"fields": {"codename": "change_coursecohortssettings", "name": "Can change course cohorts settings", "content_type": 68}, "model": "auth.permission", "pk": 203}, {"fields": {"codename": "delete_coursecohortssettings", "name": "Can delete course cohorts settings", "content_type": 68}, "model": "auth.permission", "pk": 204}, {"fields": {"codename": "add_coursecohort", "name": "Can add course cohort", "content_type": 69}, "model": "auth.permission", "pk": 205}, {"fields": {"codename": "change_coursecohort", "name": "Can change course cohort", "content_type": 69}, "model": "auth.permission", "pk": 206}, {"fields": {"codename": "delete_coursecohort", "name": "Can delete course cohort", "content_type": 69}, "model": "auth.permission", "pk": 207}, {"fields": {"codename": "add_courseemail", "name": "Can add course email", "content_type": 70}, "model": "auth.permission", "pk": 208}, {"fields": {"codename": "change_courseemail", "name": "Can change course email", "content_type": 70}, "model": "auth.permission", "pk": 209}, {"fields": {"codename": "delete_courseemail", "name": "Can delete course email", "content_type": 70}, "model": "auth.permission", "pk": 210}, {"fields": {"codename": "add_optout", "name": "Can add optout", "content_type": 71}, "model": "auth.permission", "pk": 211}, {"fields": {"codename": "change_optout", "name": "Can change optout", "content_type": 71}, "model": "auth.permission", "pk": 212}, {"fields": {"codename": "delete_optout", "name": "Can delete optout", "content_type": 71}, "model": "auth.permission", "pk": 213}, {"fields": {"codename": "add_courseemailtemplate", "name": "Can add course email template", "content_type": 72}, "model": "auth.permission", "pk": 214}, {"fields": {"codename": "change_courseemailtemplate", "name": "Can change course email template", "content_type": 72}, "model": "auth.permission", "pk": 215}, {"fields": {"codename": "delete_courseemailtemplate", "name": "Can delete course email template", "content_type": 72}, "model": "auth.permission", "pk": 216}, {"fields": {"codename": "add_courseauthorization", "name": "Can add course authorization", "content_type": 73}, "model": "auth.permission", "pk": 217}, {"fields": {"codename": "change_courseauthorization", "name": "Can change course authorization", "content_type": 73}, "model": "auth.permission", "pk": 218}, {"fields": {"codename": "delete_courseauthorization", "name": "Can delete course authorization", "content_type": 73}, "model": "auth.permission", "pk": 219}, {"fields": {"codename": "add_brandinginfoconfig", "name": "Can add branding info config", "content_type": 74}, "model": "auth.permission", "pk": 220}, {"fields": {"codename": "change_brandinginfoconfig", "name": "Can change branding info config", "content_type": 74}, "model": "auth.permission", "pk": 221}, {"fields": {"codename": "delete_brandinginfoconfig", "name": "Can delete branding info config", "content_type": 74}, "model": "auth.permission", "pk": 222}, {"fields": {"codename": "add_brandingapiconfig", "name": "Can add branding api config", "content_type": 75}, "model": "auth.permission", "pk": 223}, {"fields": {"codename": "change_brandingapiconfig", "name": "Can change branding api config", "content_type": 75}, "model": "auth.permission", "pk": 224}, {"fields": {"codename": "delete_brandingapiconfig", "name": "Can delete branding api config", "content_type": 75}, "model": "auth.permission", "pk": 225}, {"fields": {"codename": "add_externalauthmap", "name": "Can add external auth map", "content_type": 76}, "model": "auth.permission", "pk": 226}, {"fields": {"codename": "change_externalauthmap", "name": "Can change external auth map", "content_type": 76}, "model": "auth.permission", "pk": 227}, {"fields": {"codename": "delete_externalauthmap", "name": "Can delete external auth map", "content_type": 76}, "model": "auth.permission", "pk": 228}, {"fields": {"codename": "add_nonce", "name": "Can add nonce", "content_type": 77}, "model": "auth.permission", "pk": 229}, {"fields": {"codename": "change_nonce", "name": "Can change nonce", "content_type": 77}, "model": "auth.permission", "pk": 230}, {"fields": {"codename": "delete_nonce", "name": "Can delete nonce", "content_type": 77}, "model": "auth.permission", "pk": 231}, {"fields": {"codename": "add_association", "name": "Can add association", "content_type": 78}, "model": "auth.permission", "pk": 232}, {"fields": {"codename": "change_association", "name": "Can change association", "content_type": 78}, "model": "auth.permission", "pk": 233}, {"fields": {"codename": "delete_association", "name": "Can delete association", "content_type": 78}, "model": "auth.permission", "pk": 234}, {"fields": {"codename": "add_useropenid", "name": "Can add user open id", "content_type": 79}, "model": "auth.permission", "pk": 235}, {"fields": {"codename": "change_useropenid", "name": "Can change user open id", "content_type": 79}, "model": "auth.permission", "pk": 236}, {"fields": {"codename": "delete_useropenid", "name": "Can delete user open id", "content_type": 79}, "model": "auth.permission", "pk": 237}, {"fields": {"codename": "account_verified", "name": "The OpenID has been verified", "content_type": 79}, "model": "auth.permission", "pk": 238}, {"fields": {"codename": "add_client", "name": "Can add client", "content_type": 80}, "model": "auth.permission", "pk": 239}, {"fields": {"codename": "change_client", "name": "Can change client", "content_type": 80}, "model": "auth.permission", "pk": 240}, {"fields": {"codename": "delete_client", "name": "Can delete client", "content_type": 80}, "model": "auth.permission", "pk": 241}, {"fields": {"codename": "add_grant", "name": "Can add grant", "content_type": 81}, "model": "auth.permission", "pk": 242}, {"fields": {"codename": "change_grant", "name": "Can change grant", "content_type": 81}, "model": "auth.permission", "pk": 243}, {"fields": {"codename": "delete_grant", "name": "Can delete grant", "content_type": 81}, "model": "auth.permission", "pk": 244}, {"fields": {"codename": "add_accesstoken", "name": "Can add access token", "content_type": 82}, "model": "auth.permission", "pk": 245}, {"fields": {"codename": "change_accesstoken", "name": "Can change access token", "content_type": 82}, "model": "auth.permission", "pk": 246}, {"fields": {"codename": "delete_accesstoken", "name": "Can delete access token", "content_type": 82}, "model": "auth.permission", "pk": 247}, {"fields": {"codename": "add_refreshtoken", "name": "Can add refresh token", "content_type": 83}, "model": "auth.permission", "pk": 248}, {"fields": {"codename": "change_refreshtoken", "name": "Can change refresh token", "content_type": 83}, "model": "auth.permission", "pk": 249}, {"fields": {"codename": "delete_refreshtoken", "name": "Can delete refresh token", "content_type": 83}, "model": "auth.permission", "pk": 250}, {"fields": {"codename": "add_trustedclient", "name": "Can add trusted client", "content_type": 84}, "model": "auth.permission", "pk": 251}, {"fields": {"codename": "change_trustedclient", "name": "Can change trusted client", "content_type": 84}, "model": "auth.permission", "pk": 252}, {"fields": {"codename": "delete_trustedclient", "name": "Can delete trusted client", "content_type": 84}, "model": "auth.permission", "pk": 253}, {"fields": {"codename": "add_oauth2providerconfig", "name": "Can add Provider Configuration (OAuth)", "content_type": 85}, "model": "auth.permission", "pk": 254}, {"fields": {"codename": "change_oauth2providerconfig", "name": "Can change Provider Configuration (OAuth)", "content_type": 85}, "model": "auth.permission", "pk": 255}, {"fields": {"codename": "delete_oauth2providerconfig", "name": "Can delete Provider Configuration (OAuth)", "content_type": 85}, "model": "auth.permission", "pk": 256}, {"fields": {"codename": "add_samlproviderconfig", "name": "Can add Provider Configuration (SAML IdP)", "content_type": 86}, "model": "auth.permission", "pk": 257}, {"fields": {"codename": "change_samlproviderconfig", "name": "Can change Provider Configuration (SAML IdP)", "content_type": 86}, "model": "auth.permission", "pk": 258}, {"fields": {"codename": "delete_samlproviderconfig", "name": "Can delete Provider Configuration (SAML IdP)", "content_type": 86}, "model": "auth.permission", "pk": 259}, {"fields": {"codename": "add_samlconfiguration", "name": "Can add SAML Configuration", "content_type": 87}, "model": "auth.permission", "pk": 260}, {"fields": {"codename": "change_samlconfiguration", "name": "Can change SAML Configuration", "content_type": 87}, "model": "auth.permission", "pk": 261}, {"fields": {"codename": "delete_samlconfiguration", "name": "Can delete SAML Configuration", "content_type": 87}, "model": "auth.permission", "pk": 262}, {"fields": {"codename": "add_samlproviderdata", "name": "Can add SAML Provider Data", "content_type": 88}, "model": "auth.permission", "pk": 263}, {"fields": {"codename": "change_samlproviderdata", "name": "Can change SAML Provider Data", "content_type": 88}, "model": "auth.permission", "pk": 264}, {"fields": {"codename": "delete_samlproviderdata", "name": "Can delete SAML Provider Data", "content_type": 88}, "model": "auth.permission", "pk": 265}, {"fields": {"codename": "add_ltiproviderconfig", "name": "Can add Provider Configuration (LTI)", "content_type": 89}, "model": "auth.permission", "pk": 266}, {"fields": {"codename": "change_ltiproviderconfig", "name": "Can change Provider Configuration (LTI)", "content_type": 89}, "model": "auth.permission", "pk": 267}, {"fields": {"codename": "delete_ltiproviderconfig", "name": "Can delete Provider Configuration (LTI)", "content_type": 89}, "model": "auth.permission", "pk": 268}, {"fields": {"codename": "add_providerapipermissions", "name": "Can add Provider API Permission", "content_type": 90}, "model": "auth.permission", "pk": 269}, {"fields": {"codename": "change_providerapipermissions", "name": "Can change Provider API Permission", "content_type": 90}, "model": "auth.permission", "pk": 270}, {"fields": {"codename": "delete_providerapipermissions", "name": "Can delete Provider API Permission", "content_type": 90}, "model": "auth.permission", "pk": 271}, {"fields": {"codename": "add_nonce", "name": "Can add nonce", "content_type": 91}, "model": "auth.permission", "pk": 272}, {"fields": {"codename": "change_nonce", "name": "Can change nonce", "content_type": 91}, "model": "auth.permission", "pk": 273}, {"fields": {"codename": "delete_nonce", "name": "Can delete nonce", "content_type": 91}, "model": "auth.permission", "pk": 274}, {"fields": {"codename": "add_scope", "name": "Can add scope", "content_type": 92}, "model": "auth.permission", "pk": 275}, {"fields": {"codename": "change_scope", "name": "Can change scope", "content_type": 92}, "model": "auth.permission", "pk": 276}, {"fields": {"codename": "delete_scope", "name": "Can delete scope", "content_type": 92}, "model": "auth.permission", "pk": 277}, {"fields": {"codename": "add_resource", "name": "Can add resource", "content_type": 92}, "model": "auth.permission", "pk": 278}, {"fields": {"codename": "change_resource", "name": "Can change resource", "content_type": 92}, "model": "auth.permission", "pk": 279}, {"fields": {"codename": "delete_resource", "name": "Can delete resource", "content_type": 92}, "model": "auth.permission", "pk": 280}, {"fields": {"codename": "add_consumer", "name": "Can add consumer", "content_type": 93}, "model": "auth.permission", "pk": 281}, {"fields": {"codename": "change_consumer", "name": "Can change consumer", "content_type": 93}, "model": "auth.permission", "pk": 282}, {"fields": {"codename": "delete_consumer", "name": "Can delete consumer", "content_type": 93}, "model": "auth.permission", "pk": 283}, {"fields": {"codename": "add_token", "name": "Can add token", "content_type": 94}, "model": "auth.permission", "pk": 284}, {"fields": {"codename": "change_token", "name": "Can change token", "content_type": 94}, "model": "auth.permission", "pk": 285}, {"fields": {"codename": "delete_token", "name": "Can delete token", "content_type": 94}, "model": "auth.permission", "pk": 286}, {"fields": {"codename": "add_article", "name": "Can add article", "content_type": 96}, "model": "auth.permission", "pk": 287}, {"fields": {"codename": "change_article", "name": "Can change article", "content_type": 96}, "model": "auth.permission", "pk": 288}, {"fields": {"codename": "delete_article", "name": "Can delete article", "content_type": 96}, "model": "auth.permission", "pk": 289}, {"fields": {"codename": "moderate", "name": "Can edit all articles and lock/unlock/restore", "content_type": 96}, "model": "auth.permission", "pk": 290}, {"fields": {"codename": "assign", "name": "Can change ownership of any article", "content_type": 96}, "model": "auth.permission", "pk": 291}, {"fields": {"codename": "grant", "name": "Can assign permissions to other users", "content_type": 96}, "model": "auth.permission", "pk": 292}, {"fields": {"codename": "add_articleforobject", "name": "Can add Article for object", "content_type": 97}, "model": "auth.permission", "pk": 293}, {"fields": {"codename": "change_articleforobject", "name": "Can change Article for object", "content_type": 97}, "model": "auth.permission", "pk": 294}, {"fields": {"codename": "delete_articleforobject", "name": "Can delete Article for object", "content_type": 97}, "model": "auth.permission", "pk": 295}, {"fields": {"codename": "add_articlerevision", "name": "Can add article revision", "content_type": 98}, "model": "auth.permission", "pk": 296}, {"fields": {"codename": "change_articlerevision", "name": "Can change article revision", "content_type": 98}, "model": "auth.permission", "pk": 297}, {"fields": {"codename": "delete_articlerevision", "name": "Can delete article revision", "content_type": 98}, "model": "auth.permission", "pk": 298}, {"fields": {"codename": "add_urlpath", "name": "Can add URL path", "content_type": 99}, "model": "auth.permission", "pk": 299}, {"fields": {"codename": "change_urlpath", "name": "Can change URL path", "content_type": 99}, "model": "auth.permission", "pk": 300}, {"fields": {"codename": "delete_urlpath", "name": "Can delete URL path", "content_type": 99}, "model": "auth.permission", "pk": 301}, {"fields": {"codename": "add_articleplugin", "name": "Can add article plugin", "content_type": 100}, "model": "auth.permission", "pk": 302}, {"fields": {"codename": "change_articleplugin", "name": "Can change article plugin", "content_type": 100}, "model": "auth.permission", "pk": 303}, {"fields": {"codename": "delete_articleplugin", "name": "Can delete article plugin", "content_type": 100}, "model": "auth.permission", "pk": 304}, {"fields": {"codename": "add_reusableplugin", "name": "Can add reusable plugin", "content_type": 101}, "model": "auth.permission", "pk": 305}, {"fields": {"codename": "change_reusableplugin", "name": "Can change reusable plugin", "content_type": 101}, "model": "auth.permission", "pk": 306}, {"fields": {"codename": "delete_reusableplugin", "name": "Can delete reusable plugin", "content_type": 101}, "model": "auth.permission", "pk": 307}, {"fields": {"codename": "add_simpleplugin", "name": "Can add simple plugin", "content_type": 102}, "model": "auth.permission", "pk": 308}, {"fields": {"codename": "change_simpleplugin", "name": "Can change simple plugin", "content_type": 102}, "model": "auth.permission", "pk": 309}, {"fields": {"codename": "delete_simpleplugin", "name": "Can delete simple plugin", "content_type": 102}, "model": "auth.permission", "pk": 310}, {"fields": {"codename": "add_revisionplugin", "name": "Can add revision plugin", "content_type": 103}, "model": "auth.permission", "pk": 311}, {"fields": {"codename": "change_revisionplugin", "name": "Can change revision plugin", "content_type": 103}, "model": "auth.permission", "pk": 312}, {"fields": {"codename": "delete_revisionplugin", "name": "Can delete revision plugin", "content_type": 103}, "model": "auth.permission", "pk": 313}, {"fields": {"codename": "add_revisionpluginrevision", "name": "Can add revision plugin revision", "content_type": 104}, "model": "auth.permission", "pk": 314}, {"fields": {"codename": "change_revisionpluginrevision", "name": "Can change revision plugin revision", "content_type": 104}, "model": "auth.permission", "pk": 315}, {"fields": {"codename": "delete_revisionpluginrevision", "name": "Can delete revision plugin revision", "content_type": 104}, "model": "auth.permission", "pk": 316}, {"fields": {"codename": "add_image", "name": "Can add image", "content_type": 105}, "model": "auth.permission", "pk": 317}, {"fields": {"codename": "change_image", "name": "Can change image", "content_type": 105}, "model": "auth.permission", "pk": 318}, {"fields": {"codename": "delete_image", "name": "Can delete image", "content_type": 105}, "model": "auth.permission", "pk": 319}, {"fields": {"codename": "add_imagerevision", "name": "Can add image revision", "content_type": 106}, "model": "auth.permission", "pk": 320}, {"fields": {"codename": "change_imagerevision", "name": "Can change image revision", "content_type": 106}, "model": "auth.permission", "pk": 321}, {"fields": {"codename": "delete_imagerevision", "name": "Can delete image revision", "content_type": 106}, "model": "auth.permission", "pk": 322}, {"fields": {"codename": "add_attachment", "name": "Can add attachment", "content_type": 107}, "model": "auth.permission", "pk": 323}, {"fields": {"codename": "change_attachment", "name": "Can change attachment", "content_type": 107}, "model": "auth.permission", "pk": 324}, {"fields": {"codename": "delete_attachment", "name": "Can delete attachment", "content_type": 107}, "model": "auth.permission", "pk": 325}, {"fields": {"codename": "add_attachmentrevision", "name": "Can add attachment revision", "content_type": 108}, "model": "auth.permission", "pk": 326}, {"fields": {"codename": "change_attachmentrevision", "name": "Can change attachment revision", "content_type": 108}, "model": "auth.permission", "pk": 327}, {"fields": {"codename": "delete_attachmentrevision", "name": "Can delete attachment revision", "content_type": 108}, "model": "auth.permission", "pk": 328}, {"fields": {"codename": "add_notificationtype", "name": "Can add type", "content_type": 109}, "model": "auth.permission", "pk": 329}, {"fields": {"codename": "change_notificationtype", "name": "Can change type", "content_type": 109}, "model": "auth.permission", "pk": 330}, {"fields": {"codename": "delete_notificationtype", "name": "Can delete type", "content_type": 109}, "model": "auth.permission", "pk": 331}, {"fields": {"codename": "add_settings", "name": "Can add settings", "content_type": 110}, "model": "auth.permission", "pk": 332}, {"fields": {"codename": "change_settings", "name": "Can change settings", "content_type": 110}, "model": "auth.permission", "pk": 333}, {"fields": {"codename": "delete_settings", "name": "Can delete settings", "content_type": 110}, "model": "auth.permission", "pk": 334}, {"fields": {"codename": "add_subscription", "name": "Can add subscription", "content_type": 111}, "model": "auth.permission", "pk": 335}, {"fields": {"codename": "change_subscription", "name": "Can change subscription", "content_type": 111}, "model": "auth.permission", "pk": 336}, {"fields": {"codename": "delete_subscription", "name": "Can delete subscription", "content_type": 111}, "model": "auth.permission", "pk": 337}, {"fields": {"codename": "add_notification", "name": "Can add notification", "content_type": 112}, "model": "auth.permission", "pk": 338}, {"fields": {"codename": "change_notification", "name": "Can change notification", "content_type": 112}, "model": "auth.permission", "pk": 339}, {"fields": {"codename": "delete_notification", "name": "Can delete notification", "content_type": 112}, "model": "auth.permission", "pk": 340}, {"fields": {"codename": "add_logentry", "name": "Can add log entry", "content_type": 113}, "model": "auth.permission", "pk": 341}, {"fields": {"codename": "change_logentry", "name": "Can change log entry", "content_type": 113}, "model": "auth.permission", "pk": 342}, {"fields": {"codename": "delete_logentry", "name": "Can delete log entry", "content_type": 113}, "model": "auth.permission", "pk": 343}, {"fields": {"codename": "add_role", "name": "Can add role", "content_type": 114}, "model": "auth.permission", "pk": 344}, {"fields": {"codename": "change_role", "name": "Can change role", "content_type": 114}, "model": "auth.permission", "pk": 345}, {"fields": {"codename": "delete_role", "name": "Can delete role", "content_type": 114}, "model": "auth.permission", "pk": 346}, {"fields": {"codename": "add_permission", "name": "Can add permission", "content_type": 115}, "model": "auth.permission", "pk": 347}, {"fields": {"codename": "change_permission", "name": "Can change permission", "content_type": 115}, "model": "auth.permission", "pk": 348}, {"fields": {"codename": "delete_permission", "name": "Can delete permission", "content_type": 115}, "model": "auth.permission", "pk": 349}, {"fields": {"codename": "add_note", "name": "Can add note", "content_type": 116}, "model": "auth.permission", "pk": 350}, {"fields": {"codename": "change_note", "name": "Can change note", "content_type": 116}, "model": "auth.permission", "pk": 351}, {"fields": {"codename": "delete_note", "name": "Can delete note", "content_type": 116}, "model": "auth.permission", "pk": 352}, {"fields": {"codename": "add_splashconfig", "name": "Can add splash config", "content_type": 117}, "model": "auth.permission", "pk": 353}, {"fields": {"codename": "change_splashconfig", "name": "Can change splash config", "content_type": 117}, "model": "auth.permission", "pk": 354}, {"fields": {"codename": "delete_splashconfig", "name": "Can delete splash config", "content_type": 117}, "model": "auth.permission", "pk": 355}, {"fields": {"codename": "add_userpreference", "name": "Can add user preference", "content_type": 118}, "model": "auth.permission", "pk": 356}, {"fields": {"codename": "change_userpreference", "name": "Can change user preference", "content_type": 118}, "model": "auth.permission", "pk": 357}, {"fields": {"codename": "delete_userpreference", "name": "Can delete user preference", "content_type": 118}, "model": "auth.permission", "pk": 358}, {"fields": {"codename": "add_usercoursetag", "name": "Can add user course tag", "content_type": 119}, "model": "auth.permission", "pk": 359}, {"fields": {"codename": "change_usercoursetag", "name": "Can change user course tag", "content_type": 119}, "model": "auth.permission", "pk": 360}, {"fields": {"codename": "delete_usercoursetag", "name": "Can delete user course tag", "content_type": 119}, "model": "auth.permission", "pk": 361}, {"fields": {"codename": "add_userorgtag", "name": "Can add user org tag", "content_type": 120}, "model": "auth.permission", "pk": 362}, {"fields": {"codename": "change_userorgtag", "name": "Can change user org tag", "content_type": 120}, "model": "auth.permission", "pk": 363}, {"fields": {"codename": "delete_userorgtag", "name": "Can delete user org tag", "content_type": 120}, "model": "auth.permission", "pk": 364}, {"fields": {"codename": "add_order", "name": "Can add order", "content_type": 121}, "model": "auth.permission", "pk": 365}, {"fields": {"codename": "change_order", "name": "Can change order", "content_type": 121}, "model": "auth.permission", "pk": 366}, {"fields": {"codename": "delete_order", "name": "Can delete order", "content_type": 121}, "model": "auth.permission", "pk": 367}, {"fields": {"codename": "add_orderitem", "name": "Can add order item", "content_type": 122}, "model": "auth.permission", "pk": 368}, {"fields": {"codename": "change_orderitem", "name": "Can change order item", "content_type": 122}, "model": "auth.permission", "pk": 369}, {"fields": {"codename": "delete_orderitem", "name": "Can delete order item", "content_type": 122}, "model": "auth.permission", "pk": 370}, {"fields": {"codename": "add_invoice", "name": "Can add invoice", "content_type": 123}, "model": "auth.permission", "pk": 371}, {"fields": {"codename": "change_invoice", "name": "Can change invoice", "content_type": 123}, "model": "auth.permission", "pk": 372}, {"fields": {"codename": "delete_invoice", "name": "Can delete invoice", "content_type": 123}, "model": "auth.permission", "pk": 373}, {"fields": {"codename": "add_invoicetransaction", "name": "Can add invoice transaction", "content_type": 124}, "model": "auth.permission", "pk": 374}, {"fields": {"codename": "change_invoicetransaction", "name": "Can change invoice transaction", "content_type": 124}, "model": "auth.permission", "pk": 375}, {"fields": {"codename": "delete_invoicetransaction", "name": "Can delete invoice transaction", "content_type": 124}, "model": "auth.permission", "pk": 376}, {"fields": {"codename": "add_invoiceitem", "name": "Can add invoice item", "content_type": 125}, "model": "auth.permission", "pk": 377}, {"fields": {"codename": "change_invoiceitem", "name": "Can change invoice item", "content_type": 125}, "model": "auth.permission", "pk": 378}, {"fields": {"codename": "delete_invoiceitem", "name": "Can delete invoice item", "content_type": 125}, "model": "auth.permission", "pk": 379}, {"fields": {"codename": "add_courseregistrationcodeinvoiceitem", "name": "Can add course registration code invoice item", "content_type": 126}, "model": "auth.permission", "pk": 380}, {"fields": {"codename": "change_courseregistrationcodeinvoiceitem", "name": "Can change course registration code invoice item", "content_type": 126}, "model": "auth.permission", "pk": 381}, {"fields": {"codename": "delete_courseregistrationcodeinvoiceitem", "name": "Can delete course registration code invoice item", "content_type": 126}, "model": "auth.permission", "pk": 382}, {"fields": {"codename": "add_invoicehistory", "name": "Can add invoice history", "content_type": 127}, "model": "auth.permission", "pk": 383}, {"fields": {"codename": "change_invoicehistory", "name": "Can change invoice history", "content_type": 127}, "model": "auth.permission", "pk": 384}, {"fields": {"codename": "delete_invoicehistory", "name": "Can delete invoice history", "content_type": 127}, "model": "auth.permission", "pk": 385}, {"fields": {"codename": "add_courseregistrationcode", "name": "Can add course registration code", "content_type": 128}, "model": "auth.permission", "pk": 386}, {"fields": {"codename": "change_courseregistrationcode", "name": "Can change course registration code", "content_type": 128}, "model": "auth.permission", "pk": 387}, {"fields": {"codename": "delete_courseregistrationcode", "name": "Can delete course registration code", "content_type": 128}, "model": "auth.permission", "pk": 388}, {"fields": {"codename": "add_registrationcoderedemption", "name": "Can add registration code redemption", "content_type": 129}, "model": "auth.permission", "pk": 389}, {"fields": {"codename": "change_registrationcoderedemption", "name": "Can change registration code redemption", "content_type": 129}, "model": "auth.permission", "pk": 390}, {"fields": {"codename": "delete_registrationcoderedemption", "name": "Can delete registration code redemption", "content_type": 129}, "model": "auth.permission", "pk": 391}, {"fields": {"codename": "add_coupon", "name": "Can add coupon", "content_type": 130}, "model": "auth.permission", "pk": 392}, {"fields": {"codename": "change_coupon", "name": "Can change coupon", "content_type": 130}, "model": "auth.permission", "pk": 393}, {"fields": {"codename": "delete_coupon", "name": "Can delete coupon", "content_type": 130}, "model": "auth.permission", "pk": 394}, {"fields": {"codename": "add_couponredemption", "name": "Can add coupon redemption", "content_type": 131}, "model": "auth.permission", "pk": 395}, {"fields": {"codename": "change_couponredemption", "name": "Can change coupon redemption", "content_type": 131}, "model": "auth.permission", "pk": 396}, {"fields": {"codename": "delete_couponredemption", "name": "Can delete coupon redemption", "content_type": 131}, "model": "auth.permission", "pk": 397}, {"fields": {"codename": "add_paidcourseregistration", "name": "Can add paid course registration", "content_type": 132}, "model": "auth.permission", "pk": 398}, {"fields": {"codename": "change_paidcourseregistration", "name": "Can change paid course registration", "content_type": 132}, "model": "auth.permission", "pk": 399}, {"fields": {"codename": "delete_paidcourseregistration", "name": "Can delete paid course registration", "content_type": 132}, "model": "auth.permission", "pk": 400}, {"fields": {"codename": "add_courseregcodeitem", "name": "Can add course reg code item", "content_type": 133}, "model": "auth.permission", "pk": 401}, {"fields": {"codename": "change_courseregcodeitem", "name": "Can change course reg code item", "content_type": 133}, "model": "auth.permission", "pk": 402}, {"fields": {"codename": "delete_courseregcodeitem", "name": "Can delete course reg code item", "content_type": 133}, "model": "auth.permission", "pk": 403}, {"fields": {"codename": "add_courseregcodeitemannotation", "name": "Can add course reg code item annotation", "content_type": 134}, "model": "auth.permission", "pk": 404}, {"fields": {"codename": "change_courseregcodeitemannotation", "name": "Can change course reg code item annotation", "content_type": 134}, "model": "auth.permission", "pk": 405}, {"fields": {"codename": "delete_courseregcodeitemannotation", "name": "Can delete course reg code item annotation", "content_type": 134}, "model": "auth.permission", "pk": 406}, {"fields": {"codename": "add_paidcourseregistrationannotation", "name": "Can add paid course registration annotation", "content_type": 135}, "model": "auth.permission", "pk": 407}, {"fields": {"codename": "change_paidcourseregistrationannotation", "name": "Can change paid course registration annotation", "content_type": 135}, "model": "auth.permission", "pk": 408}, {"fields": {"codename": "delete_paidcourseregistrationannotation", "name": "Can delete paid course registration annotation", "content_type": 135}, "model": "auth.permission", "pk": 409}, {"fields": {"codename": "add_certificateitem", "name": "Can add certificate item", "content_type": 136}, "model": "auth.permission", "pk": 410}, {"fields": {"codename": "change_certificateitem", "name": "Can change certificate item", "content_type": 136}, "model": "auth.permission", "pk": 411}, {"fields": {"codename": "delete_certificateitem", "name": "Can delete certificate item", "content_type": 136}, "model": "auth.permission", "pk": 412}, {"fields": {"codename": "add_donationconfiguration", "name": "Can add donation configuration", "content_type": 137}, "model": "auth.permission", "pk": 413}, {"fields": {"codename": "change_donationconfiguration", "name": "Can change donation configuration", "content_type": 137}, "model": "auth.permission", "pk": 414}, {"fields": {"codename": "delete_donationconfiguration", "name": "Can delete donation configuration", "content_type": 137}, "model": "auth.permission", "pk": 415}, {"fields": {"codename": "add_donation", "name": "Can add donation", "content_type": 138}, "model": "auth.permission", "pk": 416}, {"fields": {"codename": "change_donation", "name": "Can change donation", "content_type": 138}, "model": "auth.permission", "pk": 417}, {"fields": {"codename": "delete_donation", "name": "Can delete donation", "content_type": 138}, "model": "auth.permission", "pk": 418}, {"fields": {"codename": "add_coursemode", "name": "Can add course mode", "content_type": 139}, "model": "auth.permission", "pk": 419}, {"fields": {"codename": "change_coursemode", "name": "Can change course mode", "content_type": 139}, "model": "auth.permission", "pk": 420}, {"fields": {"codename": "delete_coursemode", "name": "Can delete course mode", "content_type": 139}, "model": "auth.permission", "pk": 421}, {"fields": {"codename": "add_coursemodesarchive", "name": "Can add course modes archive", "content_type": 140}, "model": "auth.permission", "pk": 422}, {"fields": {"codename": "change_coursemodesarchive", "name": "Can change course modes archive", "content_type": 140}, "model": "auth.permission", "pk": 423}, {"fields": {"codename": "delete_coursemodesarchive", "name": "Can delete course modes archive", "content_type": 140}, "model": "auth.permission", "pk": 424}, {"fields": {"codename": "add_coursemodeexpirationconfig", "name": "Can add course mode expiration config", "content_type": 141}, "model": "auth.permission", "pk": 425}, {"fields": {"codename": "change_coursemodeexpirationconfig", "name": "Can change course mode expiration config", "content_type": 141}, "model": "auth.permission", "pk": 426}, {"fields": {"codename": "delete_coursemodeexpirationconfig", "name": "Can delete course mode expiration config", "content_type": 141}, "model": "auth.permission", "pk": 427}, {"fields": {"codename": "add_softwaresecurephotoverification", "name": "Can add software secure photo verification", "content_type": 142}, "model": "auth.permission", "pk": 428}, {"fields": {"codename": "change_softwaresecurephotoverification", "name": "Can change software secure photo verification", "content_type": 142}, "model": "auth.permission", "pk": 429}, {"fields": {"codename": "delete_softwaresecurephotoverification", "name": "Can delete software secure photo verification", "content_type": 142}, "model": "auth.permission", "pk": 430}, {"fields": {"codename": "add_historicalverificationdeadline", "name": "Can add historical verification deadline", "content_type": 143}, "model": "auth.permission", "pk": 431}, {"fields": {"codename": "change_historicalverificationdeadline", "name": "Can change historical verification deadline", "content_type": 143}, "model": "auth.permission", "pk": 432}, {"fields": {"codename": "delete_historicalverificationdeadline", "name": "Can delete historical verification deadline", "content_type": 143}, "model": "auth.permission", "pk": 433}, {"fields": {"codename": "add_verificationdeadline", "name": "Can add verification deadline", "content_type": 144}, "model": "auth.permission", "pk": 434}, {"fields": {"codename": "change_verificationdeadline", "name": "Can change verification deadline", "content_type": 144}, "model": "auth.permission", "pk": 435}, {"fields": {"codename": "delete_verificationdeadline", "name": "Can delete verification deadline", "content_type": 144}, "model": "auth.permission", "pk": 436}, {"fields": {"codename": "add_verificationcheckpoint", "name": "Can add verification checkpoint", "content_type": 145}, "model": "auth.permission", "pk": 437}, {"fields": {"codename": "change_verificationcheckpoint", "name": "Can change verification checkpoint", "content_type": 145}, "model": "auth.permission", "pk": 438}, {"fields": {"codename": "delete_verificationcheckpoint", "name": "Can delete verification checkpoint", "content_type": 145}, "model": "auth.permission", "pk": 439}, {"fields": {"codename": "add_verificationstatus", "name": "Can add Verification Status", "content_type": 146}, "model": "auth.permission", "pk": 440}, {"fields": {"codename": "change_verificationstatus", "name": "Can change Verification Status", "content_type": 146}, "model": "auth.permission", "pk": 441}, {"fields": {"codename": "delete_verificationstatus", "name": "Can delete Verification Status", "content_type": 146}, "model": "auth.permission", "pk": 442}, {"fields": {"codename": "add_incoursereverificationconfiguration", "name": "Can add in course reverification configuration", "content_type": 147}, "model": "auth.permission", "pk": 443}, {"fields": {"codename": "change_incoursereverificationconfiguration", "name": "Can change in course reverification configuration", "content_type": 147}, "model": "auth.permission", "pk": 444}, {"fields": {"codename": "delete_incoursereverificationconfiguration", "name": "Can delete in course reverification configuration", "content_type": 147}, "model": "auth.permission", "pk": 445}, {"fields": {"codename": "add_icrvstatusemailsconfiguration", "name": "Can add icrv status emails configuration", "content_type": 148}, "model": "auth.permission", "pk": 446}, {"fields": {"codename": "change_icrvstatusemailsconfiguration", "name": "Can change icrv status emails configuration", "content_type": 148}, "model": "auth.permission", "pk": 447}, {"fields": {"codename": "delete_icrvstatusemailsconfiguration", "name": "Can delete icrv status emails configuration", "content_type": 148}, "model": "auth.permission", "pk": 448}, {"fields": {"codename": "add_skippedreverification", "name": "Can add skipped reverification", "content_type": 149}, "model": "auth.permission", "pk": 449}, {"fields": {"codename": "change_skippedreverification", "name": "Can change skipped reverification", "content_type": 149}, "model": "auth.permission", "pk": 450}, {"fields": {"codename": "delete_skippedreverification", "name": "Can delete skipped reverification", "content_type": 149}, "model": "auth.permission", "pk": 451}, {"fields": {"codename": "add_darklangconfig", "name": "Can add dark lang config", "content_type": 150}, "model": "auth.permission", "pk": 452}, {"fields": {"codename": "change_darklangconfig", "name": "Can change dark lang config", "content_type": 150}, "model": "auth.permission", "pk": 453}, {"fields": {"codename": "delete_darklangconfig", "name": "Can delete dark lang config", "content_type": 150}, "model": "auth.permission", "pk": 454}, {"fields": {"codename": "add_microsite", "name": "Can add microsite", "content_type": 151}, "model": "auth.permission", "pk": 455}, {"fields": {"codename": "change_microsite", "name": "Can change microsite", "content_type": 151}, "model": "auth.permission", "pk": 456}, {"fields": {"codename": "delete_microsite", "name": "Can delete microsite", "content_type": 151}, "model": "auth.permission", "pk": 457}, {"fields": {"codename": "add_micrositehistory", "name": "Can add microsite history", "content_type": 152}, "model": "auth.permission", "pk": 458}, {"fields": {"codename": "change_micrositehistory", "name": "Can change microsite history", "content_type": 152}, "model": "auth.permission", "pk": 459}, {"fields": {"codename": "delete_micrositehistory", "name": "Can delete microsite history", "content_type": 152}, "model": "auth.permission", "pk": 460}, {"fields": {"codename": "add_historicalmicrositeorganizationmapping", "name": "Can add historical microsite organization mapping", "content_type": 153}, "model": "auth.permission", "pk": 461}, {"fields": {"codename": "change_historicalmicrositeorganizationmapping", "name": "Can change historical microsite organization mapping", "content_type": 153}, "model": "auth.permission", "pk": 462}, {"fields": {"codename": "delete_historicalmicrositeorganizationmapping", "name": "Can delete historical microsite organization mapping", "content_type": 153}, "model": "auth.permission", "pk": 463}, {"fields": {"codename": "add_micrositeorganizationmapping", "name": "Can add microsite organization mapping", "content_type": 154}, "model": "auth.permission", "pk": 464}, {"fields": {"codename": "change_micrositeorganizationmapping", "name": "Can change microsite organization mapping", "content_type": 154}, "model": "auth.permission", "pk": 465}, {"fields": {"codename": "delete_micrositeorganizationmapping", "name": "Can delete microsite organization mapping", "content_type": 154}, "model": "auth.permission", "pk": 466}, {"fields": {"codename": "add_historicalmicrositetemplate", "name": "Can add historical microsite template", "content_type": 155}, "model": "auth.permission", "pk": 467}, {"fields": {"codename": "change_historicalmicrositetemplate", "name": "Can change historical microsite template", "content_type": 155}, "model": "auth.permission", "pk": 468}, {"fields": {"codename": "delete_historicalmicrositetemplate", "name": "Can delete historical microsite template", "content_type": 155}, "model": "auth.permission", "pk": 469}, {"fields": {"codename": "add_micrositetemplate", "name": "Can add microsite template", "content_type": 156}, "model": "auth.permission", "pk": 470}, {"fields": {"codename": "change_micrositetemplate", "name": "Can change microsite template", "content_type": 156}, "model": "auth.permission", "pk": 471}, {"fields": {"codename": "delete_micrositetemplate", "name": "Can delete microsite template", "content_type": 156}, "model": "auth.permission", "pk": 472}, {"fields": {"codename": "add_whitelistedrssurl", "name": "Can add whitelisted rss url", "content_type": 157}, "model": "auth.permission", "pk": 473}, {"fields": {"codename": "change_whitelistedrssurl", "name": "Can change whitelisted rss url", "content_type": 157}, "model": "auth.permission", "pk": 474}, {"fields": {"codename": "delete_whitelistedrssurl", "name": "Can delete whitelisted rss url", "content_type": 157}, "model": "auth.permission", "pk": 475}, {"fields": {"codename": "add_embargoedcourse", "name": "Can add embargoed course", "content_type": 158}, "model": "auth.permission", "pk": 476}, {"fields": {"codename": "change_embargoedcourse", "name": "Can change embargoed course", "content_type": 158}, "model": "auth.permission", "pk": 477}, {"fields": {"codename": "delete_embargoedcourse", "name": "Can delete embargoed course", "content_type": 158}, "model": "auth.permission", "pk": 478}, {"fields": {"codename": "add_embargoedstate", "name": "Can add embargoed state", "content_type": 159}, "model": "auth.permission", "pk": 479}, {"fields": {"codename": "change_embargoedstate", "name": "Can change embargoed state", "content_type": 159}, "model": "auth.permission", "pk": 480}, {"fields": {"codename": "delete_embargoedstate", "name": "Can delete embargoed state", "content_type": 159}, "model": "auth.permission", "pk": 481}, {"fields": {"codename": "add_restrictedcourse", "name": "Can add restricted course", "content_type": 160}, "model": "auth.permission", "pk": 482}, {"fields": {"codename": "change_restrictedcourse", "name": "Can change restricted course", "content_type": 160}, "model": "auth.permission", "pk": 483}, {"fields": {"codename": "delete_restrictedcourse", "name": "Can delete restricted course", "content_type": 160}, "model": "auth.permission", "pk": 484}, {"fields": {"codename": "add_country", "name": "Can add country", "content_type": 161}, "model": "auth.permission", "pk": 485}, {"fields": {"codename": "change_country", "name": "Can change country", "content_type": 161}, "model": "auth.permission", "pk": 486}, {"fields": {"codename": "delete_country", "name": "Can delete country", "content_type": 161}, "model": "auth.permission", "pk": 487}, {"fields": {"codename": "add_countryaccessrule", "name": "Can add country access rule", "content_type": 162}, "model": "auth.permission", "pk": 488}, {"fields": {"codename": "change_countryaccessrule", "name": "Can change country access rule", "content_type": 162}, "model": "auth.permission", "pk": 489}, {"fields": {"codename": "delete_countryaccessrule", "name": "Can delete country access rule", "content_type": 162}, "model": "auth.permission", "pk": 490}, {"fields": {"codename": "add_courseaccessrulehistory", "name": "Can add course access rule history", "content_type": 163}, "model": "auth.permission", "pk": 491}, {"fields": {"codename": "change_courseaccessrulehistory", "name": "Can change course access rule history", "content_type": 163}, "model": "auth.permission", "pk": 492}, {"fields": {"codename": "delete_courseaccessrulehistory", "name": "Can delete course access rule history", "content_type": 163}, "model": "auth.permission", "pk": 493}, {"fields": {"codename": "add_ipfilter", "name": "Can add ip filter", "content_type": 164}, "model": "auth.permission", "pk": 494}, {"fields": {"codename": "change_ipfilter", "name": "Can change ip filter", "content_type": 164}, "model": "auth.permission", "pk": 495}, {"fields": {"codename": "delete_ipfilter", "name": "Can delete ip filter", "content_type": 164}, "model": "auth.permission", "pk": 496}, {"fields": {"codename": "add_coursererunstate", "name": "Can add course rerun state", "content_type": 165}, "model": "auth.permission", "pk": 497}, {"fields": {"codename": "change_coursererunstate", "name": "Can change course rerun state", "content_type": 165}, "model": "auth.permission", "pk": 498}, {"fields": {"codename": "delete_coursererunstate", "name": "Can delete course rerun state", "content_type": 165}, "model": "auth.permission", "pk": 499}, {"fields": {"codename": "add_mobileapiconfig", "name": "Can add mobile api config", "content_type": 166}, "model": "auth.permission", "pk": 500}, {"fields": {"codename": "change_mobileapiconfig", "name": "Can change mobile api config", "content_type": 166}, "model": "auth.permission", "pk": 501}, {"fields": {"codename": "delete_mobileapiconfig", "name": "Can delete mobile api config", "content_type": 166}, "model": "auth.permission", "pk": 502}, {"fields": {"codename": "add_usersocialauth", "name": "Can add user social auth", "content_type": 167}, "model": "auth.permission", "pk": 503}, {"fields": {"codename": "change_usersocialauth", "name": "Can change user social auth", "content_type": 167}, "model": "auth.permission", "pk": 504}, {"fields": {"codename": "delete_usersocialauth", "name": "Can delete user social auth", "content_type": 167}, "model": "auth.permission", "pk": 505}, {"fields": {"codename": "add_nonce", "name": "Can add nonce", "content_type": 168}, "model": "auth.permission", "pk": 506}, {"fields": {"codename": "change_nonce", "name": "Can change nonce", "content_type": 168}, "model": "auth.permission", "pk": 507}, {"fields": {"codename": "delete_nonce", "name": "Can delete nonce", "content_type": 168}, "model": "auth.permission", "pk": 508}, {"fields": {"codename": "add_association", "name": "Can add association", "content_type": 169}, "model": "auth.permission", "pk": 509}, {"fields": {"codename": "change_association", "name": "Can change association", "content_type": 169}, "model": "auth.permission", "pk": 510}, {"fields": {"codename": "delete_association", "name": "Can delete association", "content_type": 169}, "model": "auth.permission", "pk": 511}, {"fields": {"codename": "add_code", "name": "Can add code", "content_type": 170}, "model": "auth.permission", "pk": 512}, {"fields": {"codename": "change_code", "name": "Can change code", "content_type": 170}, "model": "auth.permission", "pk": 513}, {"fields": {"codename": "delete_code", "name": "Can delete code", "content_type": 170}, "model": "auth.permission", "pk": 514}, {"fields": {"codename": "add_surveyform", "name": "Can add survey form", "content_type": 171}, "model": "auth.permission", "pk": 515}, {"fields": {"codename": "change_surveyform", "name": "Can change survey form", "content_type": 171}, "model": "auth.permission", "pk": 516}, {"fields": {"codename": "delete_surveyform", "name": "Can delete survey form", "content_type": 171}, "model": "auth.permission", "pk": 517}, {"fields": {"codename": "add_surveyanswer", "name": "Can add survey answer", "content_type": 172}, "model": "auth.permission", "pk": 518}, {"fields": {"codename": "change_surveyanswer", "name": "Can change survey answer", "content_type": 172}, "model": "auth.permission", "pk": 519}, {"fields": {"codename": "delete_surveyanswer", "name": "Can delete survey answer", "content_type": 172}, "model": "auth.permission", "pk": 520}, {"fields": {"codename": "add_xblockasidesconfig", "name": "Can add x block asides config", "content_type": 173}, "model": "auth.permission", "pk": 521}, {"fields": {"codename": "change_xblockasidesconfig", "name": "Can change x block asides config", "content_type": 173}, "model": "auth.permission", "pk": 522}, {"fields": {"codename": "delete_xblockasidesconfig", "name": "Can delete x block asides config", "content_type": 173}, "model": "auth.permission", "pk": 523}, {"fields": {"codename": "add_courseoverview", "name": "Can add course overview", "content_type": 174}, "model": "auth.permission", "pk": 524}, {"fields": {"codename": "change_courseoverview", "name": "Can change course overview", "content_type": 174}, "model": "auth.permission", "pk": 525}, {"fields": {"codename": "delete_courseoverview", "name": "Can delete course overview", "content_type": 174}, "model": "auth.permission", "pk": 526}, {"fields": {"codename": "add_courseoverviewtab", "name": "Can add course overview tab", "content_type": 175}, "model": "auth.permission", "pk": 527}, {"fields": {"codename": "change_courseoverviewtab", "name": "Can change course overview tab", "content_type": 175}, "model": "auth.permission", "pk": 528}, {"fields": {"codename": "delete_courseoverviewtab", "name": "Can delete course overview tab", "content_type": 175}, "model": "auth.permission", "pk": 529}, {"fields": {"codename": "add_courseoverviewimageset", "name": "Can add course overview image set", "content_type": 176}, "model": "auth.permission", "pk": 530}, {"fields": {"codename": "change_courseoverviewimageset", "name": "Can change course overview image set", "content_type": 176}, "model": "auth.permission", "pk": 531}, {"fields": {"codename": "delete_courseoverviewimageset", "name": "Can delete course overview image set", "content_type": 176}, "model": "auth.permission", "pk": 532}, {"fields": {"codename": "add_courseoverviewimageconfig", "name": "Can add course overview image config", "content_type": 177}, "model": "auth.permission", "pk": 533}, {"fields": {"codename": "change_courseoverviewimageconfig", "name": "Can change course overview image config", "content_type": 177}, "model": "auth.permission", "pk": 534}, {"fields": {"codename": "delete_courseoverviewimageconfig", "name": "Can delete course overview image config", "content_type": 177}, "model": "auth.permission", "pk": 535}, {"fields": {"codename": "add_coursestructure", "name": "Can add course structure", "content_type": 178}, "model": "auth.permission", "pk": 536}, {"fields": {"codename": "change_coursestructure", "name": "Can change course structure", "content_type": 178}, "model": "auth.permission", "pk": 537}, {"fields": {"codename": "delete_coursestructure", "name": "Can delete course structure", "content_type": 178}, "model": "auth.permission", "pk": 538}, {"fields": {"codename": "add_corsmodel", "name": "Can add cors model", "content_type": 179}, "model": "auth.permission", "pk": 539}, {"fields": {"codename": "change_corsmodel", "name": "Can change cors model", "content_type": 179}, "model": "auth.permission", "pk": 540}, {"fields": {"codename": "delete_corsmodel", "name": "Can delete cors model", "content_type": 179}, "model": "auth.permission", "pk": 541}, {"fields": {"codename": "add_xdomainproxyconfiguration", "name": "Can add x domain proxy configuration", "content_type": 180}, "model": "auth.permission", "pk": 542}, {"fields": {"codename": "change_xdomainproxyconfiguration", "name": "Can change x domain proxy configuration", "content_type": 180}, "model": "auth.permission", "pk": 543}, {"fields": {"codename": "delete_xdomainproxyconfiguration", "name": "Can delete x domain proxy configuration", "content_type": 180}, "model": "auth.permission", "pk": 544}, {"fields": {"codename": "add_commerceconfiguration", "name": "Can add commerce configuration", "content_type": 181}, "model": "auth.permission", "pk": 545}, {"fields": {"codename": "change_commerceconfiguration", "name": "Can change commerce configuration", "content_type": 181}, "model": "auth.permission", "pk": 546}, {"fields": {"codename": "delete_commerceconfiguration", "name": "Can delete commerce configuration", "content_type": 181}, "model": "auth.permission", "pk": 547}, {"fields": {"codename": "add_creditprovider", "name": "Can add credit provider", "content_type": 182}, "model": "auth.permission", "pk": 548}, {"fields": {"codename": "change_creditprovider", "name": "Can change credit provider", "content_type": 182}, "model": "auth.permission", "pk": 549}, {"fields": {"codename": "delete_creditprovider", "name": "Can delete credit provider", "content_type": 182}, "model": "auth.permission", "pk": 550}, {"fields": {"codename": "add_creditcourse", "name": "Can add credit course", "content_type": 183}, "model": "auth.permission", "pk": 551}, {"fields": {"codename": "change_creditcourse", "name": "Can change credit course", "content_type": 183}, "model": "auth.permission", "pk": 552}, {"fields": {"codename": "delete_creditcourse", "name": "Can delete credit course", "content_type": 183}, "model": "auth.permission", "pk": 553}, {"fields": {"codename": "add_creditrequirement", "name": "Can add credit requirement", "content_type": 184}, "model": "auth.permission", "pk": 554}, {"fields": {"codename": "change_creditrequirement", "name": "Can change credit requirement", "content_type": 184}, "model": "auth.permission", "pk": 555}, {"fields": {"codename": "delete_creditrequirement", "name": "Can delete credit requirement", "content_type": 184}, "model": "auth.permission", "pk": 556}, {"fields": {"codename": "add_historicalcreditrequirementstatus", "name": "Can add historical credit requirement status", "content_type": 185}, "model": "auth.permission", "pk": 557}, {"fields": {"codename": "change_historicalcreditrequirementstatus", "name": "Can change historical credit requirement status", "content_type": 185}, "model": "auth.permission", "pk": 558}, {"fields": {"codename": "delete_historicalcreditrequirementstatus", "name": "Can delete historical credit requirement status", "content_type": 185}, "model": "auth.permission", "pk": 559}, {"fields": {"codename": "add_creditrequirementstatus", "name": "Can add credit requirement status", "content_type": 186}, "model": "auth.permission", "pk": 560}, {"fields": {"codename": "change_creditrequirementstatus", "name": "Can change credit requirement status", "content_type": 186}, "model": "auth.permission", "pk": 561}, {"fields": {"codename": "delete_creditrequirementstatus", "name": "Can delete credit requirement status", "content_type": 186}, "model": "auth.permission", "pk": 562}, {"fields": {"codename": "add_crediteligibility", "name": "Can add credit eligibility", "content_type": 187}, "model": "auth.permission", "pk": 563}, {"fields": {"codename": "change_crediteligibility", "name": "Can change credit eligibility", "content_type": 187}, "model": "auth.permission", "pk": 564}, {"fields": {"codename": "delete_crediteligibility", "name": "Can delete credit eligibility", "content_type": 187}, "model": "auth.permission", "pk": 565}, {"fields": {"codename": "add_historicalcreditrequest", "name": "Can add historical credit request", "content_type": 188}, "model": "auth.permission", "pk": 566}, {"fields": {"codename": "change_historicalcreditrequest", "name": "Can change historical credit request", "content_type": 188}, "model": "auth.permission", "pk": 567}, {"fields": {"codename": "delete_historicalcreditrequest", "name": "Can delete historical credit request", "content_type": 188}, "model": "auth.permission", "pk": 568}, {"fields": {"codename": "add_creditrequest", "name": "Can add credit request", "content_type": 189}, "model": "auth.permission", "pk": 569}, {"fields": {"codename": "change_creditrequest", "name": "Can change credit request", "content_type": 189}, "model": "auth.permission", "pk": 570}, {"fields": {"codename": "delete_creditrequest", "name": "Can delete credit request", "content_type": 189}, "model": "auth.permission", "pk": 571}, {"fields": {"codename": "add_courseteam", "name": "Can add course team", "content_type": 190}, "model": "auth.permission", "pk": 572}, {"fields": {"codename": "change_courseteam", "name": "Can change course team", "content_type": 190}, "model": "auth.permission", "pk": 573}, {"fields": {"codename": "delete_courseteam", "name": "Can delete course team", "content_type": 190}, "model": "auth.permission", "pk": 574}, {"fields": {"codename": "add_courseteammembership", "name": "Can add course team membership", "content_type": 191}, "model": "auth.permission", "pk": 575}, {"fields": {"codename": "change_courseteammembership", "name": "Can change course team membership", "content_type": 191}, "model": "auth.permission", "pk": 576}, {"fields": {"codename": "delete_courseteammembership", "name": "Can delete course team membership", "content_type": 191}, "model": "auth.permission", "pk": 577}, {"fields": {"codename": "add_xblockdisableconfig", "name": "Can add x block disable config", "content_type": 192}, "model": "auth.permission", "pk": 578}, {"fields": {"codename": "change_xblockdisableconfig", "name": "Can change x block disable config", "content_type": 192}, "model": "auth.permission", "pk": 579}, {"fields": {"codename": "delete_xblockdisableconfig", "name": "Can delete x block disable config", "content_type": 192}, "model": "auth.permission", "pk": 580}, {"fields": {"codename": "add_bookmark", "name": "Can add bookmark", "content_type": 193}, "model": "auth.permission", "pk": 581}, {"fields": {"codename": "change_bookmark", "name": "Can change bookmark", "content_type": 193}, "model": "auth.permission", "pk": 582}, {"fields": {"codename": "delete_bookmark", "name": "Can delete bookmark", "content_type": 193}, "model": "auth.permission", "pk": 583}, {"fields": {"codename": "add_xblockcache", "name": "Can add x block cache", "content_type": 194}, "model": "auth.permission", "pk": 584}, {"fields": {"codename": "change_xblockcache", "name": "Can change x block cache", "content_type": 194}, "model": "auth.permission", "pk": 585}, {"fields": {"codename": "delete_xblockcache", "name": "Can delete x block cache", "content_type": 194}, "model": "auth.permission", "pk": 586}, {"fields": {"codename": "add_programsapiconfig", "name": "Can add programs api config", "content_type": 195}, "model": "auth.permission", "pk": 587}, {"fields": {"codename": "change_programsapiconfig", "name": "Can change programs api config", "content_type": 195}, "model": "auth.permission", "pk": 588}, {"fields": {"codename": "delete_programsapiconfig", "name": "Can delete programs api config", "content_type": 195}, "model": "auth.permission", "pk": 589}, {"fields": {"codename": "add_selfpacedconfiguration", "name": "Can add self paced configuration", "content_type": 196}, "model": "auth.permission", "pk": 590}, {"fields": {"codename": "change_selfpacedconfiguration", "name": "Can change self paced configuration", "content_type": 196}, "model": "auth.permission", "pk": 591}, {"fields": {"codename": "delete_selfpacedconfiguration", "name": "Can delete self paced configuration", "content_type": 196}, "model": "auth.permission", "pk": 592}, {"fields": {"codename": "add_kvstore", "name": "Can add kv store", "content_type": 197}, "model": "auth.permission", "pk": 593}, {"fields": {"codename": "change_kvstore", "name": "Can change kv store", "content_type": 197}, "model": "auth.permission", "pk": 594}, {"fields": {"codename": "delete_kvstore", "name": "Can delete kv store", "content_type": 197}, "model": "auth.permission", "pk": 595}, {"fields": {"codename": "add_credentialsapiconfig", "name": "Can add credentials api config", "content_type": 198}, "model": "auth.permission", "pk": 596}, {"fields": {"codename": "change_credentialsapiconfig", "name": "Can change credentials api config", "content_type": 198}, "model": "auth.permission", "pk": 597}, {"fields": {"codename": "delete_credentialsapiconfig", "name": "Can delete credentials api config", "content_type": 198}, "model": "auth.permission", "pk": 598}, {"fields": {"codename": "add_milestone", "name": "Can add milestone", "content_type": 199}, "model": "auth.permission", "pk": 599}, {"fields": {"codename": "change_milestone", "name": "Can change milestone", "content_type": 199}, "model": "auth.permission", "pk": 600}, {"fields": {"codename": "delete_milestone", "name": "Can delete milestone", "content_type": 199}, "model": "auth.permission", "pk": 601}, {"fields": {"codename": "add_milestonerelationshiptype", "name": "Can add milestone relationship type", "content_type": 200}, "model": "auth.permission", "pk": 602}, {"fields": {"codename": "change_milestonerelationshiptype", "name": "Can change milestone relationship type", "content_type": 200}, "model": "auth.permission", "pk": 603}, {"fields": {"codename": "delete_milestonerelationshiptype", "name": "Can delete milestone relationship type", "content_type": 200}, "model": "auth.permission", "pk": 604}, {"fields": {"codename": "add_coursemilestone", "name": "Can add course milestone", "content_type": 201}, "model": "auth.permission", "pk": 605}, {"fields": {"codename": "change_coursemilestone", "name": "Can change course milestone", "content_type": 201}, "model": "auth.permission", "pk": 606}, {"fields": {"codename": "delete_coursemilestone", "name": "Can delete course milestone", "content_type": 201}, "model": "auth.permission", "pk": 607}, {"fields": {"codename": "add_coursecontentmilestone", "name": "Can add course content milestone", "content_type": 202}, "model": "auth.permission", "pk": 608}, {"fields": {"codename": "change_coursecontentmilestone", "name": "Can change course content milestone", "content_type": 202}, "model": "auth.permission", "pk": 609}, {"fields": {"codename": "delete_coursecontentmilestone", "name": "Can delete course content milestone", "content_type": 202}, "model": "auth.permission", "pk": 610}, {"fields": {"codename": "add_usermilestone", "name": "Can add user milestone", "content_type": 203}, "model": "auth.permission", "pk": 611}, {"fields": {"codename": "change_usermilestone", "name": "Can change user milestone", "content_type": 203}, "model": "auth.permission", "pk": 612}, {"fields": {"codename": "delete_usermilestone", "name": "Can delete user milestone", "content_type": 203}, "model": "auth.permission", "pk": 613}, {"fields": {"codename": "add_studentitem", "name": "Can add student item", "content_type": 204}, "model": "auth.permission", "pk": 614}, {"fields": {"codename": "change_studentitem", "name": "Can change student item", "content_type": 204}, "model": "auth.permission", "pk": 615}, {"fields": {"codename": "delete_studentitem", "name": "Can delete student item", "content_type": 204}, "model": "auth.permission", "pk": 616}, {"fields": {"codename": "add_submission", "name": "Can add submission", "content_type": 205}, "model": "auth.permission", "pk": 617}, {"fields": {"codename": "change_submission", "name": "Can change submission", "content_type": 205}, "model": "auth.permission", "pk": 618}, {"fields": {"codename": "delete_submission", "name": "Can delete submission", "content_type": 205}, "model": "auth.permission", "pk": 619}, {"fields": {"codename": "add_score", "name": "Can add score", "content_type": 206}, "model": "auth.permission", "pk": 620}, {"fields": {"codename": "change_score", "name": "Can change score", "content_type": 206}, "model": "auth.permission", "pk": 621}, {"fields": {"codename": "delete_score", "name": "Can delete score", "content_type": 206}, "model": "auth.permission", "pk": 622}, {"fields": {"codename": "add_scoresummary", "name": "Can add score summary", "content_type": 207}, "model": "auth.permission", "pk": 623}, {"fields": {"codename": "change_scoresummary", "name": "Can change score summary", "content_type": 207}, "model": "auth.permission", "pk": 624}, {"fields": {"codename": "delete_scoresummary", "name": "Can delete score summary", "content_type": 207}, "model": "auth.permission", "pk": 625}, {"fields": {"codename": "add_scoreannotation", "name": "Can add score annotation", "content_type": 208}, "model": "auth.permission", "pk": 626}, {"fields": {"codename": "change_scoreannotation", "name": "Can change score annotation", "content_type": 208}, "model": "auth.permission", "pk": 627}, {"fields": {"codename": "delete_scoreannotation", "name": "Can delete score annotation", "content_type": 208}, "model": "auth.permission", "pk": 628}, {"fields": {"codename": "add_rubric", "name": "Can add rubric", "content_type": 209}, "model": "auth.permission", "pk": 629}, {"fields": {"codename": "change_rubric", "name": "Can change rubric", "content_type": 209}, "model": "auth.permission", "pk": 630}, {"fields": {"codename": "delete_rubric", "name": "Can delete rubric", "content_type": 209}, "model": "auth.permission", "pk": 631}, {"fields": {"codename": "add_criterion", "name": "Can add criterion", "content_type": 210}, "model": "auth.permission", "pk": 632}, {"fields": {"codename": "change_criterion", "name": "Can change criterion", "content_type": 210}, "model": "auth.permission", "pk": 633}, {"fields": {"codename": "delete_criterion", "name": "Can delete criterion", "content_type": 210}, "model": "auth.permission", "pk": 634}, {"fields": {"codename": "add_criterionoption", "name": "Can add criterion option", "content_type": 211}, "model": "auth.permission", "pk": 635}, {"fields": {"codename": "change_criterionoption", "name": "Can change criterion option", "content_type": 211}, "model": "auth.permission", "pk": 636}, {"fields": {"codename": "delete_criterionoption", "name": "Can delete criterion option", "content_type": 211}, "model": "auth.permission", "pk": 637}, {"fields": {"codename": "add_assessment", "name": "Can add assessment", "content_type": 212}, "model": "auth.permission", "pk": 638}, {"fields": {"codename": "change_assessment", "name": "Can change assessment", "content_type": 212}, "model": "auth.permission", "pk": 639}, {"fields": {"codename": "delete_assessment", "name": "Can delete assessment", "content_type": 212}, "model": "auth.permission", "pk": 640}, {"fields": {"codename": "add_assessmentpart", "name": "Can add assessment part", "content_type": 213}, "model": "auth.permission", "pk": 641}, {"fields": {"codename": "change_assessmentpart", "name": "Can change assessment part", "content_type": 213}, "model": "auth.permission", "pk": 642}, {"fields": {"codename": "delete_assessmentpart", "name": "Can delete assessment part", "content_type": 213}, "model": "auth.permission", "pk": 643}, {"fields": {"codename": "add_assessmentfeedbackoption", "name": "Can add assessment feedback option", "content_type": 214}, "model": "auth.permission", "pk": 644}, {"fields": {"codename": "change_assessmentfeedbackoption", "name": "Can change assessment feedback option", "content_type": 214}, "model": "auth.permission", "pk": 645}, {"fields": {"codename": "delete_assessmentfeedbackoption", "name": "Can delete assessment feedback option", "content_type": 214}, "model": "auth.permission", "pk": 646}, {"fields": {"codename": "add_assessmentfeedback", "name": "Can add assessment feedback", "content_type": 215}, "model": "auth.permission", "pk": 647}, {"fields": {"codename": "change_assessmentfeedback", "name": "Can change assessment feedback", "content_type": 215}, "model": "auth.permission", "pk": 648}, {"fields": {"codename": "delete_assessmentfeedback", "name": "Can delete assessment feedback", "content_type": 215}, "model": "auth.permission", "pk": 649}, {"fields": {"codename": "add_peerworkflow", "name": "Can add peer workflow", "content_type": 216}, "model": "auth.permission", "pk": 650}, {"fields": {"codename": "change_peerworkflow", "name": "Can change peer workflow", "content_type": 216}, "model": "auth.permission", "pk": 651}, {"fields": {"codename": "delete_peerworkflow", "name": "Can delete peer workflow", "content_type": 216}, "model": "auth.permission", "pk": 652}, {"fields": {"codename": "add_peerworkflowitem", "name": "Can add peer workflow item", "content_type": 217}, "model": "auth.permission", "pk": 653}, {"fields": {"codename": "change_peerworkflowitem", "name": "Can change peer workflow item", "content_type": 217}, "model": "auth.permission", "pk": 654}, {"fields": {"codename": "delete_peerworkflowitem", "name": "Can delete peer workflow item", "content_type": 217}, "model": "auth.permission", "pk": 655}, {"fields": {"codename": "add_trainingexample", "name": "Can add training example", "content_type": 218}, "model": "auth.permission", "pk": 656}, {"fields": {"codename": "change_trainingexample", "name": "Can change training example", "content_type": 218}, "model": "auth.permission", "pk": 657}, {"fields": {"codename": "delete_trainingexample", "name": "Can delete training example", "content_type": 218}, "model": "auth.permission", "pk": 658}, {"fields": {"codename": "add_studenttrainingworkflow", "name": "Can add student training workflow", "content_type": 219}, "model": "auth.permission", "pk": 659}, {"fields": {"codename": "change_studenttrainingworkflow", "name": "Can change student training workflow", "content_type": 219}, "model": "auth.permission", "pk": 660}, {"fields": {"codename": "delete_studenttrainingworkflow", "name": "Can delete student training workflow", "content_type": 219}, "model": "auth.permission", "pk": 661}, {"fields": {"codename": "add_studenttrainingworkflowitem", "name": "Can add student training workflow item", "content_type": 220}, "model": "auth.permission", "pk": 662}, {"fields": {"codename": "change_studenttrainingworkflowitem", "name": "Can change student training workflow item", "content_type": 220}, "model": "auth.permission", "pk": 663}, {"fields": {"codename": "delete_studenttrainingworkflowitem", "name": "Can delete student training workflow item", "content_type": 220}, "model": "auth.permission", "pk": 664}, {"fields": {"codename": "add_aiclassifierset", "name": "Can add ai classifier set", "content_type": 221}, "model": "auth.permission", "pk": 665}, {"fields": {"codename": "change_aiclassifierset", "name": "Can change ai classifier set", "content_type": 221}, "model": "auth.permission", "pk": 666}, {"fields": {"codename": "delete_aiclassifierset", "name": "Can delete ai classifier set", "content_type": 221}, "model": "auth.permission", "pk": 667}, {"fields": {"codename": "add_aiclassifier", "name": "Can add ai classifier", "content_type": 222}, "model": "auth.permission", "pk": 668}, {"fields": {"codename": "change_aiclassifier", "name": "Can change ai classifier", "content_type": 222}, "model": "auth.permission", "pk": 669}, {"fields": {"codename": "delete_aiclassifier", "name": "Can delete ai classifier", "content_type": 222}, "model": "auth.permission", "pk": 670}, {"fields": {"codename": "add_aitrainingworkflow", "name": "Can add ai training workflow", "content_type": 223}, "model": "auth.permission", "pk": 671}, {"fields": {"codename": "change_aitrainingworkflow", "name": "Can change ai training workflow", "content_type": 223}, "model": "auth.permission", "pk": 672}, {"fields": {"codename": "delete_aitrainingworkflow", "name": "Can delete ai training workflow", "content_type": 223}, "model": "auth.permission", "pk": 673}, {"fields": {"codename": "add_aigradingworkflow", "name": "Can add ai grading workflow", "content_type": 224}, "model": "auth.permission", "pk": 674}, {"fields": {"codename": "change_aigradingworkflow", "name": "Can change ai grading workflow", "content_type": 224}, "model": "auth.permission", "pk": 675}, {"fields": {"codename": "delete_aigradingworkflow", "name": "Can delete ai grading workflow", "content_type": 224}, "model": "auth.permission", "pk": 676}, {"fields": {"codename": "add_staffworkflow", "name": "Can add staff workflow", "content_type": 225}, "model": "auth.permission", "pk": 677}, {"fields": {"codename": "change_staffworkflow", "name": "Can change staff workflow", "content_type": 225}, "model": "auth.permission", "pk": 678}, {"fields": {"codename": "delete_staffworkflow", "name": "Can delete staff workflow", "content_type": 225}, "model": "auth.permission", "pk": 679}, {"fields": {"codename": "add_assessmentworkflow", "name": "Can add assessment workflow", "content_type": 226}, "model": "auth.permission", "pk": 680}, {"fields": {"codename": "change_assessmentworkflow", "name": "Can change assessment workflow", "content_type": 226}, "model": "auth.permission", "pk": 681}, {"fields": {"codename": "delete_assessmentworkflow", "name": "Can delete assessment workflow", "content_type": 226}, "model": "auth.permission", "pk": 682}, {"fields": {"codename": "add_assessmentworkflowstep", "name": "Can add assessment workflow step", "content_type": 227}, "model": "auth.permission", "pk": 683}, {"fields": {"codename": "change_assessmentworkflowstep", "name": "Can change assessment workflow step", "content_type": 227}, "model": "auth.permission", "pk": 684}, {"fields": {"codename": "delete_assessmentworkflowstep", "name": "Can delete assessment workflow step", "content_type": 227}, "model": "auth.permission", "pk": 685}, {"fields": {"codename": "add_assessmentworkflowcancellation", "name": "Can add assessment workflow cancellation", "content_type": 228}, "model": "auth.permission", "pk": 686}, {"fields": {"codename": "change_assessmentworkflowcancellation", "name": "Can change assessment workflow cancellation", "content_type": 228}, "model": "auth.permission", "pk": 687}, {"fields": {"codename": "delete_assessmentworkflowcancellation", "name": "Can delete assessment workflow cancellation", "content_type": 228}, "model": "auth.permission", "pk": 688}, {"fields": {"codename": "add_profile", "name": "Can add profile", "content_type": 229}, "model": "auth.permission", "pk": 689}, {"fields": {"codename": "change_profile", "name": "Can change profile", "content_type": 229}, "model": "auth.permission", "pk": 690}, {"fields": {"codename": "delete_profile", "name": "Can delete profile", "content_type": 229}, "model": "auth.permission", "pk": 691}, {"fields": {"codename": "add_video", "name": "Can add video", "content_type": 230}, "model": "auth.permission", "pk": 692}, {"fields": {"codename": "change_video", "name": "Can change video", "content_type": 230}, "model": "auth.permission", "pk": 693}, {"fields": {"codename": "delete_video", "name": "Can delete video", "content_type": 230}, "model": "auth.permission", "pk": 694}, {"fields": {"codename": "add_coursevideo", "name": "Can add course video", "content_type": 231}, "model": "auth.permission", "pk": 695}, {"fields": {"codename": "change_coursevideo", "name": "Can change course video", "content_type": 231}, "model": "auth.permission", "pk": 696}, {"fields": {"codename": "delete_coursevideo", "name": "Can delete course video", "content_type": 231}, "model": "auth.permission", "pk": 697}, {"fields": {"codename": "add_encodedvideo", "name": "Can add encoded video", "content_type": 232}, "model": "auth.permission", "pk": 698}, {"fields": {"codename": "change_encodedvideo", "name": "Can change encoded video", "content_type": 232}, "model": "auth.permission", "pk": 699}, {"fields": {"codename": "delete_encodedvideo", "name": "Can delete encoded video", "content_type": 232}, "model": "auth.permission", "pk": 700}, {"fields": {"codename": "add_subtitle", "name": "Can add subtitle", "content_type": 233}, "model": "auth.permission", "pk": 701}, {"fields": {"codename": "change_subtitle", "name": "Can change subtitle", "content_type": 233}, "model": "auth.permission", "pk": 702}, {"fields": {"codename": "delete_subtitle", "name": "Can delete subtitle", "content_type": 233}, "model": "auth.permission", "pk": 703}, {"fields": {"codename": "add_proctoredexam", "name": "Can add proctored exam", "content_type": 234}, "model": "auth.permission", "pk": 704}, {"fields": {"codename": "change_proctoredexam", "name": "Can change proctored exam", "content_type": 234}, "model": "auth.permission", "pk": 705}, {"fields": {"codename": "delete_proctoredexam", "name": "Can delete proctored exam", "content_type": 234}, "model": "auth.permission", "pk": 706}, {"fields": {"codename": "add_proctoredexamreviewpolicy", "name": "Can add Proctored exam review policy", "content_type": 235}, "model": "auth.permission", "pk": 707}, {"fields": {"codename": "change_proctoredexamreviewpolicy", "name": "Can change Proctored exam review policy", "content_type": 235}, "model": "auth.permission", "pk": 708}, {"fields": {"codename": "delete_proctoredexamreviewpolicy", "name": "Can delete Proctored exam review policy", "content_type": 235}, "model": "auth.permission", "pk": 709}, {"fields": {"codename": "add_proctoredexamreviewpolicyhistory", "name": "Can add proctored exam review policy history", "content_type": 236}, "model": "auth.permission", "pk": 710}, {"fields": {"codename": "change_proctoredexamreviewpolicyhistory", "name": "Can change proctored exam review policy history", "content_type": 236}, "model": "auth.permission", "pk": 711}, {"fields": {"codename": "delete_proctoredexamreviewpolicyhistory", "name": "Can delete proctored exam review policy history", "content_type": 236}, "model": "auth.permission", "pk": 712}, {"fields": {"codename": "add_proctoredexamstudentattempt", "name": "Can add proctored exam attempt", "content_type": 237}, "model": "auth.permission", "pk": 713}, {"fields": {"codename": "change_proctoredexamstudentattempt", "name": "Can change proctored exam attempt", "content_type": 237}, "model": "auth.permission", "pk": 714}, {"fields": {"codename": "delete_proctoredexamstudentattempt", "name": "Can delete proctored exam attempt", "content_type": 237}, "model": "auth.permission", "pk": 715}, {"fields": {"codename": "add_proctoredexamstudentattempthistory", "name": "Can add proctored exam attempt history", "content_type": 238}, "model": "auth.permission", "pk": 716}, {"fields": {"codename": "change_proctoredexamstudentattempthistory", "name": "Can change proctored exam attempt history", "content_type": 238}, "model": "auth.permission", "pk": 717}, {"fields": {"codename": "delete_proctoredexamstudentattempthistory", "name": "Can delete proctored exam attempt history", "content_type": 238}, "model": "auth.permission", "pk": 718}, {"fields": {"codename": "add_proctoredexamstudentallowance", "name": "Can add proctored allowance", "content_type": 239}, "model": "auth.permission", "pk": 719}, {"fields": {"codename": "change_proctoredexamstudentallowance", "name": "Can change proctored allowance", "content_type": 239}, "model": "auth.permission", "pk": 720}, {"fields": {"codename": "delete_proctoredexamstudentallowance", "name": "Can delete proctored allowance", "content_type": 239}, "model": "auth.permission", "pk": 721}, {"fields": {"codename": "add_proctoredexamstudentallowancehistory", "name": "Can add proctored allowance history", "content_type": 240}, "model": "auth.permission", "pk": 722}, {"fields": {"codename": "change_proctoredexamstudentallowancehistory", "name": "Can change proctored allowance history", "content_type": 240}, "model": "auth.permission", "pk": 723}, {"fields": {"codename": "delete_proctoredexamstudentallowancehistory", "name": "Can delete proctored allowance history", "content_type": 240}, "model": "auth.permission", "pk": 724}, {"fields": {"codename": "add_proctoredexamsoftwaresecurereview", "name": "Can add Proctored exam software secure review", "content_type": 241}, "model": "auth.permission", "pk": 725}, {"fields": {"codename": "change_proctoredexamsoftwaresecurereview", "name": "Can change Proctored exam software secure review", "content_type": 241}, "model": "auth.permission", "pk": 726}, {"fields": {"codename": "delete_proctoredexamsoftwaresecurereview", "name": "Can delete Proctored exam software secure review", "content_type": 241}, "model": "auth.permission", "pk": 727}, {"fields": {"codename": "add_proctoredexamsoftwaresecurereviewhistory", "name": "Can add Proctored exam review archive", "content_type": 242}, "model": "auth.permission", "pk": 728}, {"fields": {"codename": "change_proctoredexamsoftwaresecurereviewhistory", "name": "Can change Proctored exam review archive", "content_type": 242}, "model": "auth.permission", "pk": 729}, {"fields": {"codename": "delete_proctoredexamsoftwaresecurereviewhistory", "name": "Can delete Proctored exam review archive", "content_type": 242}, "model": "auth.permission", "pk": 730}, {"fields": {"codename": "add_proctoredexamsoftwaresecurecomment", "name": "Can add proctored exam software secure comment", "content_type": 243}, "model": "auth.permission", "pk": 731}, {"fields": {"codename": "change_proctoredexamsoftwaresecurecomment", "name": "Can change proctored exam software secure comment", "content_type": 243}, "model": "auth.permission", "pk": 732}, {"fields": {"codename": "delete_proctoredexamsoftwaresecurecomment", "name": "Can delete proctored exam software secure comment", "content_type": 243}, "model": "auth.permission", "pk": 733}, {"fields": {"codename": "add_organization", "name": "Can add organization", "content_type": 244}, "model": "auth.permission", "pk": 734}, {"fields": {"codename": "change_organization", "name": "Can change organization", "content_type": 244}, "model": "auth.permission", "pk": 735}, {"fields": {"codename": "delete_organization", "name": "Can delete organization", "content_type": 244}, "model": "auth.permission", "pk": 736}, {"fields": {"codename": "add_organizationcourse", "name": "Can add Link Course", "content_type": 245}, "model": "auth.permission", "pk": 737}, {"fields": {"codename": "change_organizationcourse", "name": "Can change Link Course", "content_type": 245}, "model": "auth.permission", "pk": 738}, {"fields": {"codename": "delete_organizationcourse", "name": "Can delete Link Course", "content_type": 245}, "model": "auth.permission", "pk": 739}, {"fields": {"codename": "add_studentmodulehistoryextended", "name": "Can add student module history extended", "content_type": 246}, "model": "auth.permission", "pk": 740}, {"fields": {"codename": "change_studentmodulehistoryextended", "name": "Can change student module history extended", "content_type": 246}, "model": "auth.permission", "pk": 741}, {"fields": {"codename": "delete_studentmodulehistoryextended", "name": "Can delete student module history extended", "content_type": 246}, "model": "auth.permission", "pk": 742}, {"fields": {"codename": "add_videouploadconfig", "name": "Can add video upload config", "content_type": 247}, "model": "auth.permission", "pk": 743}, {"fields": {"codename": "change_videouploadconfig", "name": "Can change video upload config", "content_type": 247}, "model": "auth.permission", "pk": 744}, {"fields": {"codename": "delete_videouploadconfig", "name": "Can delete video upload config", "content_type": 247}, "model": "auth.permission", "pk": 745}, {"fields": {"codename": "add_pushnotificationconfig", "name": "Can add push notification config", "content_type": 248}, "model": "auth.permission", "pk": 746}, {"fields": {"codename": "change_pushnotificationconfig", "name": "Can change push notification config", "content_type": 248}, "model": "auth.permission", "pk": 747}, {"fields": {"codename": "delete_pushnotificationconfig", "name": "Can delete push notification config", "content_type": 248}, "model": "auth.permission", "pk": 748}, {"fields": {"codename": "add_coursecreator", "name": "Can add course creator", "content_type": 249}, "model": "auth.permission", "pk": 749}, {"fields": {"codename": "change_coursecreator", "name": "Can change course creator", "content_type": 249}, "model": "auth.permission", "pk": 750}, {"fields": {"codename": "delete_coursecreator", "name": "Can delete course creator", "content_type": 249}, "model": "auth.permission", "pk": 751}, {"fields": {"codename": "add_studioconfig", "name": "Can add studio config", "content_type": 250}, "model": "auth.permission", "pk": 752}, {"fields": {"codename": "change_studioconfig", "name": "Can change studio config", "content_type": 250}, "model": "auth.permission", "pk": 753}, {"fields": {"codename": "delete_studioconfig", "name": "Can delete studio config", "content_type": 250}, "model": "auth.permission", "pk": 754}, {"fields": {"username": "ecommerce_worker", "first_name": "", "last_name": "", "is_active": true, "is_superuser": false, "is_staff": false, "last_login": null, "groups": [], "user_permissions": [], "password": "!Anc3rzqyOJmEUcl35V2GO5w2WOmdYzVGDy1E3GBB", "email": "ecommerce_worker@fake.email", "date_joined": "2016-03-07T21:30:20.660Z"}, "model": "auth.user", "pk": 1}, {"fields": {"change_date": "2016-03-07T21:31:28.058Z", "changed_by": null, "enabled": true}, "model": "util.ratelimitconfiguration", "pk": 1}, {"fields": {"change_date": "2016-03-07T21:30:20.215Z", "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": "2016-03-07T21:30:27.820Z", "changed_by": null, "enabled": true, "released_languages": ""}, "model": "dark_lang.darklangconfig", "pk": 1}] \ No newline at end of file diff --git a/common/test/db_cache/bok_choy_migrations_data_default.sql b/common/test/db_cache/bok_choy_migrations_data_default.sql index ab80457f1d..00f5715897 100644 --- a/common/test/db_cache/bok_choy_migrations_data_default.sql +++ b/common/test/db_cache/bok_choy_migrations_data_default.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','2016-02-29 17:58:04.910265'),(2,'auth','0001_initial','2016-02-29 17:58:05.155297'),(3,'admin','0001_initial','2016-02-29 17:58:05.261098'),(4,'assessment','0001_initial','2016-02-29 17:58:08.458980'),(5,'assessment','0002_staffworkflow','2016-02-29 17:58:08.659081'),(6,'contenttypes','0002_remove_content_type_name','2016-02-29 17:58:08.818265'),(7,'auth','0002_alter_permission_name_max_length','2016-02-29 17:58:08.855835'),(8,'auth','0003_alter_user_email_max_length','2016-02-29 17:58:08.894682'),(9,'auth','0004_alter_user_username_opts','2016-02-29 17:58:08.918567'),(10,'auth','0005_alter_user_last_login_null','2016-02-29 17:58:08.971615'),(11,'auth','0006_require_contenttypes_0002','2016-02-29 17:58:08.976069'),(12,'bookmarks','0001_initial','2016-02-29 17:58:09.243246'),(13,'branding','0001_initial','2016-02-29 17:58:09.364920'),(14,'bulk_email','0001_initial','2016-02-29 17:58:09.630882'),(15,'bulk_email','0002_data__load_course_email_template','2016-02-29 17:58:09.715512'),(16,'instructor_task','0001_initial','2016-02-29 17:58:09.872596'),(17,'certificates','0001_initial','2016-02-29 17:58:10.722743'),(18,'certificates','0002_data__certificatehtmlviewconfiguration_data','2016-02-29 17:58:10.736641'),(19,'certificates','0003_data__default_modes','2016-02-29 17:58:10.775334'),(20,'certificates','0004_certificategenerationhistory','2016-02-29 17:58:10.911498'),(21,'certificates','0005_auto_20151208_0801','2016-02-29 17:58:11.002303'),(22,'certificates','0006_certificatetemplateasset_asset_slug','2016-02-29 17:58:11.050549'),(23,'certificates','0007_certificateinvalidation','2016-02-29 17:58:11.166297'),(24,'commerce','0001_data__add_ecommerce_service_user','2016-02-29 17:58:11.198023'),(25,'commerce','0002_commerceconfiguration','2016-02-29 17:58:11.291907'),(26,'contentserver','0001_initial','2016-02-29 17:58:11.375676'),(27,'cors_csrf','0001_initial','2016-02-29 17:58:11.462189'),(28,'course_action_state','0001_initial','2016-02-29 17:58:11.783744'),(29,'course_groups','0001_initial','2016-02-29 17:58:12.790006'),(30,'course_modes','0001_initial','2016-02-29 17:58:12.902796'),(31,'course_modes','0002_coursemode_expiration_datetime_is_explicit','2016-02-29 17:58:12.957209'),(32,'course_modes','0003_auto_20151113_1443','2016-02-29 17:58:12.979234'),(33,'course_modes','0004_auto_20151113_1457','2016-02-29 17:58:13.095320'),(34,'course_modes','0005_auto_20151217_0958','2016-02-29 17:58:13.116644'),(35,'course_modes','0006_auto_20160208_1407','2016-02-29 17:58:13.208193'),(36,'course_overviews','0001_initial','2016-02-29 17:58:13.283088'),(37,'course_overviews','0002_add_course_catalog_fields','2016-02-29 17:58:13.499090'),(38,'course_overviews','0003_courseoverviewgeneratedhistory','2016-02-29 17:58:13.525866'),(39,'course_overviews','0004_courseoverview_org','2016-02-29 17:58:13.567577'),(40,'course_overviews','0005_delete_courseoverviewgeneratedhistory','2016-02-29 17:58:13.585458'),(41,'course_overviews','0006_courseoverviewimageset','2016-02-29 17:58:13.636894'),(42,'course_overviews','0007_courseoverviewimageconfig','2016-02-29 17:58:13.764616'),(43,'course_overviews','0008_remove_courseoverview_facebook_url','2016-02-29 17:58:13.815867'),(44,'course_overviews','0009_readd_facebook_url','2016-02-29 17:58:13.872971'),(45,'course_structures','0001_initial','2016-02-29 17:58:13.899706'),(46,'courseware','0001_initial','2016-02-29 17:58:16.765503'),(47,'coursewarehistoryextended','0001_initial','2016-02-29 17:58:16.912454'),(48,'credentials','0001_initial','2016-02-29 17:58:17.072454'),(49,'credit','0001_initial','2016-02-29 17:58:18.478297'),(50,'dark_lang','0001_initial','2016-02-29 17:58:18.635638'),(51,'dark_lang','0002_data__enable_on_install','2016-02-29 17:58:18.654315'),(52,'default','0001_initial','2016-02-29 17:58:19.121037'),(53,'default','0002_add_related_name','2016-02-29 17:58:19.287646'),(54,'default','0003_alter_email_max_length','2016-02-29 17:58:19.355367'),(55,'django_comment_common','0001_initial','2016-02-29 17:58:19.826406'),(56,'django_notify','0001_initial','2016-02-29 17:58:20.691115'),(57,'django_openid_auth','0001_initial','2016-02-29 17:58:20.948196'),(58,'edx_proctoring','0001_initial','2016-02-29 17:58:25.028310'),(59,'edx_proctoring','0002_proctoredexamstudentattempt_is_status_acknowledged','2016-02-29 17:58:25.270722'),(60,'edx_proctoring','0003_auto_20160101_0525','2016-02-29 17:58:25.651659'),(61,'edx_proctoring','0004_auto_20160201_0523','2016-02-29 17:58:25.881209'),(62,'edxval','0001_initial','2016-02-29 17:58:26.490038'),(63,'edxval','0002_data__default_profiles','2016-02-29 17:58:26.519947'),(64,'embargo','0001_initial','2016-02-29 17:58:27.388295'),(65,'embargo','0002_data__add_countries','2016-02-29 17:58:27.716022'),(66,'external_auth','0001_initial','2016-02-29 17:58:28.339793'),(67,'lms_xblock','0001_initial','2016-02-29 17:58:28.600358'),(68,'sites','0001_initial','2016-02-29 17:58:28.639305'),(69,'microsite_configuration','0001_initial','2016-02-29 17:58:30.470563'),(70,'microsite_configuration','0002_auto_20160202_0228','2016-02-29 17:58:31.089884'),(71,'milestones','0001_initial','2016-02-29 17:58:32.206321'),(72,'milestones','0002_data__seed_relationship_types','2016-02-29 17:58:32.242905'),(73,'milestones','0003_coursecontentmilestone_requirements','2016-02-29 17:58:33.317573'),(74,'milestones','0004_auto_20151221_1445','2016-02-29 17:58:33.593210'),(75,'mobile_api','0001_initial','2016-02-29 17:58:33.849089'),(76,'notes','0001_initial','2016-02-29 17:58:34.185220'),(77,'oauth2','0001_initial','2016-02-29 17:58:35.892898'),(78,'oauth2_provider','0001_initial','2016-02-29 17:58:36.227236'),(79,'oauth_provider','0001_initial','2016-02-29 17:58:37.052991'),(80,'organizations','0001_initial','2016-02-29 17:58:37.290331'),(81,'programs','0001_initial','2016-02-29 17:58:37.667708'),(82,'programs','0002_programsapiconfig_cache_ttl','2016-02-29 17:58:38.067119'),(83,'programs','0003_auto_20151120_1613','2016-02-29 17:58:39.752602'),(84,'programs','0004_programsapiconfig_enable_certification','2016-02-29 17:58:40.179508'),(85,'programs','0005_programsapiconfig_max_retries','2016-02-29 17:58:40.596412'),(86,'rss_proxy','0001_initial','2016-02-29 17:58:40.641620'),(87,'self_paced','0001_initial','2016-02-29 17:58:41.078194'),(88,'sessions','0001_initial','2016-02-29 17:58:41.133704'),(89,'student','0001_initial','2016-02-29 17:58:53.980867'),(90,'shoppingcart','0001_initial','2016-02-29 17:59:06.233175'),(91,'shoppingcart','0002_auto_20151208_1034','2016-02-29 17:59:07.059000'),(92,'shoppingcart','0003_auto_20151217_0958','2016-02-29 17:59:07.907660'),(93,'splash','0001_initial','2016-02-29 17:59:08.351083'),(94,'static_replace','0001_initial','2016-02-29 17:59:08.818049'),(95,'static_replace','0002_assetexcludedextensionsconfig','2016-02-29 17:59:09.319193'),(96,'status','0001_initial','2016-02-29 17:59:10.500113'),(97,'student','0002_auto_20151208_1034','2016-02-29 17:59:11.650009'),(98,'submissions','0001_initial','2016-02-29 17:59:12.491480'),(99,'submissions','0002_auto_20151119_0913','2016-02-29 17:59:12.683289'),(100,'submissions','0003_submission_status','2016-02-29 17:59:12.811034'),(101,'survey','0001_initial','2016-02-29 17:59:13.767659'),(102,'teams','0001_initial','2016-02-29 17:59:16.603866'),(103,'third_party_auth','0001_initial','2016-02-29 17:59:19.924001'),(104,'track','0001_initial','2016-02-29 17:59:19.974203'),(105,'user_api','0001_initial','2016-02-29 17:59:24.197607'),(106,'util','0001_initial','2016-02-29 17:59:24.978364'),(107,'util','0002_data__default_rate_limit_config','2016-02-29 17:59:25.017205'),(108,'verify_student','0001_initial','2016-02-29 17:59:33.329519'),(109,'verify_student','0002_auto_20151124_1024','2016-02-29 17:59:34.238392'),(110,'verify_student','0003_auto_20151113_1443','2016-02-29 17:59:35.001393'),(111,'wiki','0001_initial','2016-02-29 17:59:56.418517'),(112,'wiki','0002_remove_article_subscription','2016-02-29 17:59:56.476734'),(113,'workflow','0001_initial','2016-02-29 17:59:56.760505'),(114,'xblock_django','0001_initial','2016-02-29 17:59:57.572216'),(115,'xblock_django','0002_auto_20160204_0809','2016-02-29 17:59:58.380438'),(116,'contentstore','0001_initial','2016-02-29 18:00:19.534458'),(117,'course_creators','0001_initial','2016-02-29 18:00:19.597219'),(118,'xblock_config','0001_initial','2016-02-29 18:00:19.855097'); +INSERT INTO `django_migrations` VALUES (1,'contenttypes','0001_initial','2016-03-07 21:30:14.182305'),(2,'auth','0001_initial','2016-03-07 21:30:14.485815'),(3,'admin','0001_initial','2016-03-07 21:30:14.565850'),(4,'assessment','0001_initial','2016-03-07 21:30:17.817617'),(5,'assessment','0002_staffworkflow','2016-03-07 21:30:18.084033'),(6,'contenttypes','0002_remove_content_type_name','2016-03-07 21:30:18.233041'),(7,'auth','0002_alter_permission_name_max_length','2016-03-07 21:30:18.276671'),(8,'auth','0003_alter_user_email_max_length','2016-03-07 21:30:18.326002'),(9,'auth','0004_alter_user_username_opts','2016-03-07 21:30:18.353157'),(10,'auth','0005_alter_user_last_login_null','2016-03-07 21:30:18.414606'),(11,'auth','0006_require_contenttypes_0002','2016-03-07 21:30:18.418705'),(12,'bookmarks','0001_initial','2016-03-07 21:30:18.701043'),(13,'branding','0001_initial','2016-03-07 21:30:18.829558'),(14,'bulk_email','0001_initial','2016-03-07 21:30:19.115081'),(15,'bulk_email','0002_data__load_course_email_template','2016-03-07 21:30:19.155468'),(16,'instructor_task','0001_initial','2016-03-07 21:30:19.341905'),(17,'certificates','0001_initial','2016-03-07 21:30:20.197566'),(18,'certificates','0002_data__certificatehtmlviewconfiguration_data','2016-03-07 21:30:20.220202'),(19,'certificates','0003_data__default_modes','2016-03-07 21:30:20.258243'),(20,'certificates','0004_certificategenerationhistory','2016-03-07 21:30:20.390214'),(21,'certificates','0005_auto_20151208_0801','2016-03-07 21:30:20.497751'),(22,'certificates','0006_certificatetemplateasset_asset_slug','2016-03-07 21:30:20.541391'),(23,'certificates','0007_certificateinvalidation','2016-03-07 21:30:20.642449'),(24,'commerce','0001_data__add_ecommerce_service_user','2016-03-07 21:30:20.668836'),(25,'commerce','0002_commerceconfiguration','2016-03-07 21:30:20.764499'),(26,'contentserver','0001_initial','2016-03-07 21:30:20.858120'),(27,'cors_csrf','0001_initial','2016-03-07 21:30:20.948472'),(28,'course_action_state','0001_initial','2016-03-07 21:30:22.206899'),(29,'course_groups','0001_initial','2016-03-07 21:30:23.049803'),(30,'course_modes','0001_initial','2016-03-07 21:30:23.168870'),(31,'course_modes','0002_coursemode_expiration_datetime_is_explicit','2016-03-07 21:30:23.216519'),(32,'course_modes','0003_auto_20151113_1443','2016-03-07 21:30:23.240339'),(33,'course_modes','0004_auto_20151113_1457','2016-03-07 21:30:23.342111'),(34,'course_modes','0005_auto_20151217_0958','2016-03-07 21:30:23.361769'),(35,'course_modes','0006_auto_20160208_1407','2016-03-07 21:30:23.436155'),(36,'course_overviews','0001_initial','2016-03-07 21:30:23.508236'),(37,'course_overviews','0002_add_course_catalog_fields','2016-03-07 21:30:23.733762'),(38,'course_overviews','0003_courseoverviewgeneratedhistory','2016-03-07 21:30:23.761257'),(39,'course_overviews','0004_courseoverview_org','2016-03-07 21:30:23.810614'),(40,'course_overviews','0005_delete_courseoverviewgeneratedhistory','2016-03-07 21:30:23.835739'),(41,'course_overviews','0006_courseoverviewimageset','2016-03-07 21:30:23.888381'),(42,'course_overviews','0007_courseoverviewimageconfig','2016-03-07 21:30:23.983401'),(43,'course_overviews','0008_remove_courseoverview_facebook_url','2016-03-07 21:30:23.999461'),(44,'course_overviews','0009_readd_facebook_url','2016-03-07 21:30:24.004728'),(45,'course_structures','0001_initial','2016-03-07 21:30:24.040777'),(46,'courseware','0001_initial','2016-03-07 21:30:25.940851'),(47,'coursewarehistoryextended','0001_initial','2016-03-07 21:30:26.040072'),(48,'coursewarehistoryextended','0002_force_studentmodule_index','2016-03-07 21:30:26.130654'),(49,'credentials','0001_initial','2016-03-07 21:30:26.264799'),(50,'credit','0001_initial','2016-03-07 21:30:27.649602'),(51,'dark_lang','0001_initial','2016-03-07 21:30:27.805328'),(52,'dark_lang','0002_data__enable_on_install','2016-03-07 21:30:27.826148'),(53,'default','0001_initial','2016-03-07 21:30:28.315042'),(54,'default','0002_add_related_name','2016-03-07 21:30:28.498168'),(55,'default','0003_alter_email_max_length','2016-03-07 21:30:28.548248'),(56,'django_comment_common','0001_initial','2016-03-07 21:30:29.000655'),(57,'django_notify','0001_initial','2016-03-07 21:30:29.868315'),(58,'django_openid_auth','0001_initial','2016-03-07 21:30:30.132929'),(59,'oauth2','0001_initial','2016-03-07 21:30:32.085445'),(60,'edx_oauth2_provider','0001_initial','2016-03-07 21:30:32.271384'),(61,'edx_proctoring','0001_initial','2016-03-07 21:30:35.489095'),(62,'edx_proctoring','0002_proctoredexamstudentattempt_is_status_acknowledged','2016-03-07 21:30:35.811830'),(63,'edx_proctoring','0003_auto_20160101_0525','2016-03-07 21:30:36.318967'),(64,'edx_proctoring','0004_auto_20160201_0523','2016-03-07 21:30:36.594639'),(65,'edxval','0001_initial','2016-03-07 21:30:37.250149'),(66,'edxval','0002_data__default_profiles','2016-03-07 21:30:37.292234'),(67,'embargo','0001_initial','2016-03-07 21:30:38.318664'),(68,'embargo','0002_data__add_countries','2016-03-07 21:30:38.670470'),(69,'external_auth','0001_initial','2016-03-07 21:30:40.309901'),(70,'lms_xblock','0001_initial','2016-03-07 21:30:40.530640'),(71,'sites','0001_initial','2016-03-07 21:30:40.570456'),(72,'microsite_configuration','0001_initial','2016-03-07 21:30:42.065940'),(73,'microsite_configuration','0002_auto_20160202_0228','2016-03-07 21:30:42.510084'),(74,'milestones','0001_initial','2016-03-07 21:30:43.515278'),(75,'milestones','0002_data__seed_relationship_types','2016-03-07 21:30:43.549236'),(76,'milestones','0003_coursecontentmilestone_requirements','2016-03-07 21:30:43.637530'),(77,'milestones','0004_auto_20151221_1445','2016-03-07 21:30:43.934637'),(78,'mobile_api','0001_initial','2016-03-07 21:30:44.232529'),(79,'notes','0001_initial','2016-03-07 21:30:44.623792'),(80,'oauth_provider','0001_initial','2016-03-07 21:30:45.424401'),(81,'organizations','0001_initial','2016-03-07 21:30:45.647395'),(82,'programs','0001_initial','2016-03-07 21:30:46.009532'),(83,'programs','0002_programsapiconfig_cache_ttl','2016-03-07 21:30:46.380846'),(84,'programs','0003_auto_20151120_1613','2016-03-07 21:30:48.590249'),(85,'programs','0004_programsapiconfig_enable_certification','2016-03-07 21:30:48.865268'),(86,'programs','0005_programsapiconfig_max_retries','2016-03-07 21:30:49.120259'),(87,'rss_proxy','0001_initial','2016-03-07 21:30:49.167846'),(88,'self_paced','0001_initial','2016-03-07 21:30:49.436334'),(89,'sessions','0001_initial','2016-03-07 21:30:49.500776'),(90,'student','0001_initial','2016-03-07 21:31:00.590300'),(91,'shoppingcart','0001_initial','2016-03-07 21:31:11.285831'),(92,'shoppingcart','0002_auto_20151208_1034','2016-03-07 21:31:12.264731'),(93,'shoppingcart','0003_auto_20151217_0958','2016-03-07 21:31:13.226615'),(94,'splash','0001_initial','2016-03-07 21:31:13.813727'),(95,'static_replace','0001_initial','2016-03-07 21:31:14.416875'),(96,'static_replace','0002_assetexcludedextensionsconfig','2016-03-07 21:31:14.985262'),(97,'status','0001_initial','2016-03-07 21:31:16.225967'),(98,'student','0002_auto_20151208_1034','2016-03-07 21:31:18.224130'),(99,'submissions','0001_initial','2016-03-07 21:31:19.010824'),(100,'submissions','0002_auto_20151119_0913','2016-03-07 21:31:19.189219'),(101,'submissions','0003_submission_status','2016-03-07 21:31:19.281079'),(102,'survey','0001_initial','2016-03-07 21:31:19.931263'),(103,'teams','0001_initial','2016-03-07 21:31:21.332348'),(104,'third_party_auth','0001_initial','2016-03-07 21:31:23.645023'),(105,'track','0001_initial','2016-03-07 21:31:23.694019'),(106,'user_api','0001_initial','2016-03-07 21:31:27.559462'),(107,'util','0001_initial','2016-03-07 21:31:28.021488'),(108,'util','0002_data__default_rate_limit_config','2016-03-07 21:31:28.071141'),(109,'verify_student','0001_initial','2016-03-07 21:31:34.927463'),(110,'verify_student','0002_auto_20151124_1024','2016-03-07 21:31:36.838984'),(111,'verify_student','0003_auto_20151113_1443','2016-03-07 21:31:37.274647'),(112,'wiki','0001_initial','2016-03-07 21:31:55.194872'),(113,'wiki','0002_remove_article_subscription','2016-03-07 21:31:55.245251'),(114,'workflow','0001_initial','2016-03-07 21:31:55.566223'),(115,'xblock_django','0001_initial','2016-03-07 21:31:56.357737'),(116,'xblock_django','0002_auto_20160204_0809','2016-03-07 21:31:58.039094'),(117,'contentstore','0001_initial','2016-03-07 21:32:17.147931'),(118,'course_creators','0001_initial','2016-03-07 21:32:17.219370'),(119,'xblock_config','0001_initial','2016-03-07 21:32:17.426982'); /*!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 2016-02-29 18:00:23 +-- Dump completed on 2016-03-07 21:32:22 diff --git a/common/test/db_cache/bok_choy_migrations_data_student_module_history.sql b/common/test/db_cache/bok_choy_migrations_data_student_module_history.sql index be9faad011..fdbb557fe1 100644 --- a/common/test/db_cache/bok_choy_migrations_data_student_module_history.sql +++ b/common/test/db_cache/bok_choy_migrations_data_student_module_history.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','2016-02-29 18:01:39.511327'),(2,'auth','0001_initial','2016-02-29 18:01:39.547129'),(3,'admin','0001_initial','2016-02-29 18:01:39.568351'),(4,'assessment','0001_initial','2016-02-29 18:01:40.149754'),(5,'assessment','0002_staffworkflow','2016-02-29 18:01:40.160082'),(6,'contenttypes','0002_remove_content_type_name','2016-02-29 18:01:40.231907'),(7,'auth','0002_alter_permission_name_max_length','2016-02-29 18:01:40.251926'),(8,'auth','0003_alter_user_email_max_length','2016-02-29 18:01:40.276419'),(9,'auth','0004_alter_user_username_opts','2016-02-29 18:01:40.297224'),(10,'auth','0005_alter_user_last_login_null','2016-02-29 18:01:40.317098'),(11,'auth','0006_require_contenttypes_0002','2016-02-29 18:01:40.319374'),(12,'bookmarks','0001_initial','2016-02-29 18:01:40.396366'),(13,'branding','0001_initial','2016-02-29 18:01:40.453783'),(14,'bulk_email','0001_initial','2016-02-29 18:01:40.565081'),(15,'bulk_email','0002_data__load_course_email_template','2016-02-29 18:01:40.574000'),(16,'instructor_task','0001_initial','2016-02-29 18:01:40.613011'),(17,'certificates','0001_initial','2016-02-29 18:01:40.980762'),(18,'certificates','0002_data__certificatehtmlviewconfiguration_data','2016-02-29 18:01:40.991190'),(19,'certificates','0003_data__default_modes','2016-02-29 18:01:41.003742'),(20,'certificates','0004_certificategenerationhistory','2016-02-29 18:01:41.061308'),(21,'certificates','0005_auto_20151208_0801','2016-02-29 18:01:41.113837'),(22,'certificates','0006_certificatetemplateasset_asset_slug','2016-02-29 18:01:41.131141'),(23,'certificates','0007_certificateinvalidation','2016-02-29 18:01:41.189247'),(24,'commerce','0001_data__add_ecommerce_service_user','2016-02-29 18:01:41.200385'),(25,'commerce','0002_commerceconfiguration','2016-02-29 18:01:41.260287'),(26,'contentserver','0001_initial','2016-02-29 18:01:41.323580'),(27,'cors_csrf','0001_initial','2016-02-29 18:01:41.388714'),(28,'course_action_state','0001_initial','2016-02-29 18:01:41.514544'),(29,'course_groups','0001_initial','2016-02-29 18:01:42.036647'),(30,'course_modes','0001_initial','2016-02-29 18:01:42.068946'),(31,'course_modes','0002_coursemode_expiration_datetime_is_explicit','2016-02-29 18:01:42.084746'),(32,'course_modes','0003_auto_20151113_1443','2016-02-29 18:01:42.100516'),(33,'course_modes','0004_auto_20151113_1457','2016-02-29 18:01:42.187139'),(34,'course_modes','0005_auto_20151217_0958','2016-02-29 18:01:42.205556'),(35,'course_modes','0006_auto_20160208_1407','2016-02-29 18:01:42.289731'),(36,'course_overviews','0001_initial','2016-02-29 18:01:42.319879'),(37,'course_overviews','0002_add_course_catalog_fields','2016-02-29 18:01:42.402948'),(38,'course_overviews','0003_courseoverviewgeneratedhistory','2016-02-29 18:01:42.417563'),(39,'course_overviews','0004_courseoverview_org','2016-02-29 18:01:42.435373'),(40,'course_overviews','0005_delete_courseoverviewgeneratedhistory','2016-02-29 18:01:42.448847'),(41,'course_overviews','0006_courseoverviewimageset','2016-02-29 18:01:42.472337'),(42,'course_overviews','0007_courseoverviewimageconfig','2016-02-29 18:01:42.561497'),(43,'course_overviews','0008_remove_courseoverview_facebook_url','2016-02-29 18:01:42.582078'),(44,'course_overviews','0009_readd_facebook_url','2016-02-29 18:01:42.608691'),(45,'course_structures','0001_initial','2016-02-29 18:01:42.625296'),(46,'courseware','0001_initial','2016-02-29 18:01:44.499738'),(47,'coursewarehistoryextended','0001_initial','2016-02-29 18:01:44.691094'),(48,'credentials','0001_initial','2016-02-29 18:01:44.788912'),(49,'credit','0001_initial','2016-02-29 18:01:45.621214'),(50,'dark_lang','0001_initial','2016-02-29 18:01:45.752882'),(51,'dark_lang','0002_data__enable_on_install','2016-02-29 18:01:45.765638'),(52,'default','0001_initial','2016-02-29 18:01:46.107319'),(53,'default','0002_add_related_name','2016-02-29 18:01:46.247368'),(54,'default','0003_alter_email_max_length','2016-02-29 18:01:46.265241'),(55,'django_comment_common','0001_initial','2016-02-29 18:01:46.569556'),(56,'django_notify','0001_initial','2016-02-29 18:01:47.200935'),(57,'django_openid_auth','0001_initial','2016-02-29 18:01:47.399851'),(58,'edx_proctoring','0001_initial','2016-02-29 18:01:50.659784'),(59,'edx_proctoring','0002_proctoredexamstudentattempt_is_status_acknowledged','2016-02-29 18:01:50.845795'),(60,'edx_proctoring','0003_auto_20160101_0525','2016-02-29 18:01:51.213992'),(61,'edx_proctoring','0004_auto_20160201_0523','2016-02-29 18:01:51.397904'),(62,'edxval','0001_initial','2016-02-29 18:01:51.631665'),(63,'edxval','0002_data__default_profiles','2016-02-29 18:01:51.651781'),(64,'embargo','0001_initial','2016-02-29 18:01:52.230500'),(65,'embargo','0002_data__add_countries','2016-02-29 18:01:52.401900'),(66,'external_auth','0001_initial','2016-02-29 18:01:52.851531'),(67,'lms_xblock','0001_initial','2016-02-29 18:01:53.081369'),(68,'sites','0001_initial','2016-02-29 18:01:53.104608'),(69,'microsite_configuration','0001_initial','2016-02-29 18:01:54.497782'),(70,'microsite_configuration','0002_auto_20160202_0228','2016-02-29 18:01:55.048275'),(71,'milestones','0001_initial','2016-02-29 18:01:55.459781'),(72,'milestones','0002_data__seed_relationship_types','2016-02-29 18:01:55.481439'),(73,'milestones','0003_coursecontentmilestone_requirements','2016-02-29 18:01:55.522487'),(74,'milestones','0004_auto_20151221_1445','2016-02-29 18:01:55.688330'),(75,'mobile_api','0001_initial','2016-02-29 18:01:56.844055'),(76,'notes','0001_initial','2016-02-29 18:01:57.066857'),(77,'oauth2','0001_initial','2016-02-29 18:01:58.412080'),(78,'oauth2_provider','0001_initial','2016-02-29 18:01:58.699157'),(79,'oauth_provider','0001_initial','2016-02-29 18:01:59.448662'),(80,'organizations','0001_initial','2016-02-29 18:01:59.538595'),(81,'programs','0001_initial','2016-02-29 18:01:59.922304'),(82,'programs','0002_programsapiconfig_cache_ttl','2016-02-29 18:02:00.317781'),(83,'programs','0003_auto_20151120_1613','2016-02-29 18:02:01.977886'),(84,'programs','0004_programsapiconfig_enable_certification','2016-02-29 18:02:02.413721'),(85,'programs','0005_programsapiconfig_max_retries','2016-02-29 18:02:02.799700'),(86,'rss_proxy','0001_initial','2016-02-29 18:02:02.828648'),(87,'self_paced','0001_initial','2016-02-29 18:02:03.260889'),(88,'sessions','0001_initial','2016-02-29 18:02:03.285722'),(89,'student','0001_initial','2016-02-29 18:02:14.964735'),(90,'shoppingcart','0001_initial','2016-02-29 18:02:26.167709'),(91,'shoppingcart','0002_auto_20151208_1034','2016-02-29 18:02:26.959607'),(92,'shoppingcart','0003_auto_20151217_0958','2016-02-29 18:02:27.772373'),(93,'splash','0001_initial','2016-02-29 18:02:28.180056'),(94,'static_replace','0001_initial','2016-02-29 18:02:28.600901'),(95,'static_replace','0002_assetexcludedextensionsconfig','2016-02-29 18:02:29.072670'),(96,'status','0001_initial','2016-02-29 18:02:30.149381'),(97,'student','0002_auto_20151208_1034','2016-02-29 18:02:31.383085'),(98,'submissions','0001_initial','2016-02-29 18:02:31.704655'),(99,'submissions','0002_auto_20151119_0913','2016-02-29 18:02:31.818741'),(100,'submissions','0003_submission_status','2016-02-29 18:02:31.875924'),(101,'survey','0001_initial','2016-02-29 18:02:32.613867'),(102,'teams','0001_initial','2016-02-29 18:02:35.208964'),(103,'third_party_auth','0001_initial','2016-02-29 18:02:38.385039'),(104,'track','0001_initial','2016-02-29 18:02:38.420093'),(105,'user_api','0001_initial','2016-02-29 18:02:42.631297'),(106,'util','0001_initial','2016-02-29 18:02:43.444988'),(107,'util','0002_data__default_rate_limit_config','2016-02-29 18:02:43.472520'),(108,'verify_student','0001_initial','2016-02-29 18:02:51.517974'),(109,'verify_student','0002_auto_20151124_1024','2016-02-29 18:02:52.305832'),(110,'verify_student','0003_auto_20151113_1443','2016-02-29 18:02:53.133517'),(111,'wiki','0001_initial','2016-02-29 18:03:14.972792'),(112,'wiki','0002_remove_article_subscription','2016-02-29 18:03:15.007100'),(113,'workflow','0001_initial','2016-02-29 18:03:15.147297'),(114,'xblock_django','0001_initial','2016-02-29 18:03:15.981916'),(115,'xblock_django','0002_auto_20160204_0809','2016-02-29 18:03:16.844433'),(116,'contentstore','0001_initial','2016-02-29 18:03:37.119213'),(117,'course_creators','0001_initial','2016-02-29 18:03:37.149132'),(118,'xblock_config','0001_initial','2016-02-29 18:03:37.381904'); +INSERT INTO `django_migrations` VALUES (1,'contenttypes','0001_initial','2016-03-07 21:33:26.033148'),(2,'auth','0001_initial','2016-03-07 21:33:26.071794'),(3,'admin','0001_initial','2016-03-07 21:33:26.094726'),(4,'assessment','0001_initial','2016-03-07 21:33:26.734334'),(5,'assessment','0002_staffworkflow','2016-03-07 21:33:26.748174'),(6,'contenttypes','0002_remove_content_type_name','2016-03-07 21:33:26.822178'),(7,'auth','0002_alter_permission_name_max_length','2016-03-07 21:33:26.846501'),(8,'auth','0003_alter_user_email_max_length','2016-03-07 21:33:26.870855'),(9,'auth','0004_alter_user_username_opts','2016-03-07 21:33:26.895281'),(10,'auth','0005_alter_user_last_login_null','2016-03-07 21:33:26.919048'),(11,'auth','0006_require_contenttypes_0002','2016-03-07 21:33:26.922595'),(12,'bookmarks','0001_initial','2016-03-07 21:33:27.008343'),(13,'branding','0001_initial','2016-03-07 21:33:27.065792'),(14,'bulk_email','0001_initial','2016-03-07 21:33:27.189432'),(15,'bulk_email','0002_data__load_course_email_template','2016-03-07 21:33:27.197917'),(16,'instructor_task','0001_initial','2016-03-07 21:33:27.245184'),(17,'certificates','0001_initial','2016-03-07 21:33:27.641690'),(18,'certificates','0002_data__certificatehtmlviewconfiguration_data','2016-03-07 21:33:27.656293'),(19,'certificates','0003_data__default_modes','2016-03-07 21:33:27.667624'),(20,'certificates','0004_certificategenerationhistory','2016-03-07 21:33:27.737402'),(21,'certificates','0005_auto_20151208_0801','2016-03-07 21:33:27.794978'),(22,'certificates','0006_certificatetemplateasset_asset_slug','2016-03-07 21:33:27.808778'),(23,'certificates','0007_certificateinvalidation','2016-03-07 21:33:27.865273'),(24,'commerce','0001_data__add_ecommerce_service_user','2016-03-07 21:33:27.875925'),(25,'commerce','0002_commerceconfiguration','2016-03-07 21:33:27.937252'),(26,'contentserver','0001_initial','2016-03-07 21:33:28.010793'),(27,'cors_csrf','0001_initial','2016-03-07 21:33:28.072393'),(28,'course_action_state','0001_initial','2016-03-07 21:33:29.150991'),(29,'course_groups','0001_initial','2016-03-07 21:33:29.653738'),(30,'course_modes','0001_initial','2016-03-07 21:33:29.692413'),(31,'course_modes','0002_coursemode_expiration_datetime_is_explicit','2016-03-07 21:33:29.707909'),(32,'course_modes','0003_auto_20151113_1443','2016-03-07 21:33:29.723139'),(33,'course_modes','0004_auto_20151113_1457','2016-03-07 21:33:29.802913'),(34,'course_modes','0005_auto_20151217_0958','2016-03-07 21:33:29.819395'),(35,'course_modes','0006_auto_20160208_1407','2016-03-07 21:33:29.901786'),(36,'course_overviews','0001_initial','2016-03-07 21:33:29.932173'),(37,'course_overviews','0002_add_course_catalog_fields','2016-03-07 21:33:30.019436'),(38,'course_overviews','0003_courseoverviewgeneratedhistory','2016-03-07 21:33:30.035991'),(39,'course_overviews','0004_courseoverview_org','2016-03-07 21:33:30.055999'),(40,'course_overviews','0005_delete_courseoverviewgeneratedhistory','2016-03-07 21:33:30.069417'),(41,'course_overviews','0006_courseoverviewimageset','2016-03-07 21:33:30.092113'),(42,'course_overviews','0007_courseoverviewimageconfig','2016-03-07 21:33:30.174080'),(43,'course_overviews','0008_remove_courseoverview_facebook_url','2016-03-07 21:33:30.176656'),(44,'course_overviews','0009_readd_facebook_url','2016-03-07 21:33:30.178836'),(45,'course_structures','0001_initial','2016-03-07 21:33:30.194595'),(46,'courseware','0001_initial','2016-03-07 21:33:31.078692'),(47,'coursewarehistoryextended','0001_initial','2016-03-07 21:33:31.241565'),(48,'coursewarehistoryextended','0002_force_studentmodule_index','2016-03-07 21:33:31.349328'),(49,'credentials','0001_initial','2016-03-07 21:33:31.439568'),(50,'credit','0001_initial','2016-03-07 21:33:32.158562'),(51,'dark_lang','0001_initial','2016-03-07 21:33:32.272553'),(52,'dark_lang','0002_data__enable_on_install','2016-03-07 21:33:32.292147'),(53,'default','0001_initial','2016-03-07 21:33:32.618496'),(54,'default','0002_add_related_name','2016-03-07 21:33:32.747109'),(55,'default','0003_alter_email_max_length','2016-03-07 21:33:32.764118'),(56,'django_comment_common','0001_initial','2016-03-07 21:33:33.045633'),(57,'django_notify','0001_initial','2016-03-07 21:33:33.683870'),(58,'django_openid_auth','0001_initial','2016-03-07 21:33:33.887994'),(59,'oauth2','0001_initial','2016-03-07 21:33:35.518104'),(60,'edx_oauth2_provider','0001_initial','2016-03-07 21:33:35.661195'),(61,'edx_proctoring','0001_initial','2016-03-07 21:33:37.901502'),(62,'edx_proctoring','0002_proctoredexamstudentattempt_is_status_acknowledged','2016-03-07 21:33:38.137829'),(63,'edx_proctoring','0003_auto_20160101_0525','2016-03-07 21:33:38.644618'),(64,'edx_proctoring','0004_auto_20160201_0523','2016-03-07 21:33:38.906016'),(65,'edxval','0001_initial','2016-03-07 21:33:39.155791'),(66,'edxval','0002_data__default_profiles','2016-03-07 21:33:39.181773'),(67,'embargo','0001_initial','2016-03-07 21:33:39.959843'),(68,'embargo','0002_data__add_countries','2016-03-07 21:33:40.149397'),(69,'external_auth','0001_initial','2016-03-07 21:33:40.725785'),(70,'lms_xblock','0001_initial','2016-03-07 21:33:41.882266'),(71,'sites','0001_initial','2016-03-07 21:33:41.904159'),(72,'microsite_configuration','0001_initial','2016-03-07 21:33:42.952132'),(73,'microsite_configuration','0002_auto_20160202_0228','2016-03-07 21:33:43.359419'),(74,'milestones','0001_initial','2016-03-07 21:33:43.716203'),(75,'milestones','0002_data__seed_relationship_types','2016-03-07 21:33:43.739942'),(76,'milestones','0003_coursecontentmilestone_requirements','2016-03-07 21:33:43.772194'),(77,'milestones','0004_auto_20151221_1445','2016-03-07 21:33:43.907278'),(78,'mobile_api','0001_initial','2016-03-07 21:33:44.150482'),(79,'notes','0001_initial','2016-03-07 21:33:44.414752'),(80,'oauth_provider','0001_initial','2016-03-07 21:33:45.032852'),(81,'organizations','0001_initial','2016-03-07 21:33:45.111393'),(82,'programs','0001_initial','2016-03-07 21:33:45.427919'),(83,'programs','0002_programsapiconfig_cache_ttl','2016-03-07 21:33:45.727136'),(84,'programs','0003_auto_20151120_1613','2016-03-07 21:33:47.072788'),(85,'programs','0004_programsapiconfig_enable_certification','2016-03-07 21:33:48.327058'),(86,'programs','0005_programsapiconfig_max_retries','2016-03-07 21:33:48.536151'),(87,'rss_proxy','0001_initial','2016-03-07 21:33:48.571928'),(88,'self_paced','0001_initial','2016-03-07 21:33:48.799690'),(89,'sessions','0001_initial','2016-03-07 21:33:48.831344'),(90,'student','0001_initial','2016-03-07 21:33:58.200378'),(91,'shoppingcart','0001_initial','2016-03-07 21:34:07.068222'),(92,'shoppingcart','0002_auto_20151208_1034','2016-03-07 21:34:07.860305'),(93,'shoppingcart','0003_auto_20151217_0958','2016-03-07 21:34:08.746587'),(94,'splash','0001_initial','2016-03-07 21:34:09.212391'),(95,'static_replace','0001_initial','2016-03-07 21:34:09.728084'),(96,'static_replace','0002_assetexcludedextensionsconfig','2016-03-07 21:34:10.232762'),(97,'status','0001_initial','2016-03-07 21:34:11.353387'),(98,'student','0002_auto_20151208_1034','2016-03-07 21:34:12.427561'),(99,'submissions','0001_initial','2016-03-07 21:34:13.762704'),(100,'submissions','0002_auto_20151119_0913','2016-03-07 21:34:13.860261'),(101,'submissions','0003_submission_status','2016-03-07 21:34:13.899844'),(102,'survey','0001_initial','2016-03-07 21:34:14.322540'),(103,'teams','0001_initial','2016-03-07 21:34:15.395533'),(104,'third_party_auth','0001_initial','2016-03-07 21:34:17.484168'),(105,'track','0001_initial','2016-03-07 21:34:17.515995'),(106,'user_api','0001_initial','2016-03-07 21:34:21.513361'),(107,'util','0001_initial','2016-03-07 21:34:21.885445'),(108,'util','0002_data__default_rate_limit_config','2016-03-07 21:34:21.920632'),(109,'verify_student','0001_initial','2016-03-07 21:34:27.215973'),(110,'verify_student','0002_auto_20151124_1024','2016-03-07 21:34:27.909387'),(111,'verify_student','0003_auto_20151113_1443','2016-03-07 21:34:28.606460'),(112,'wiki','0001_initial','2016-03-07 21:34:45.492292'),(113,'wiki','0002_remove_article_subscription','2016-03-07 21:34:45.529216'),(114,'workflow','0001_initial','2016-03-07 21:34:45.651613'),(115,'xblock_django','0001_initial','2016-03-07 21:34:46.297434'),(116,'xblock_django','0002_auto_20160204_0809','2016-03-07 21:34:46.988209'),(117,'contentstore','0001_initial','2016-03-07 21:35:04.702755'),(118,'course_creators','0001_initial','2016-03-07 21:35:04.729239'),(119,'xblock_config','0001_initial','2016-03-07 21:35:04.908173'); /*!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 2016-02-29 18:03:40 +-- Dump completed on 2016-03-07 21:35:08 diff --git a/common/test/db_cache/bok_choy_schema_default.sql b/common/test/db_cache/bok_choy_schema_default.sql index 2a09404f56..f4b333e32a 100644 --- a/common/test/db_cache/bok_choy_schema_default.sql +++ b/common/test/db_cache/bok_choy_schema_default.sql @@ -1143,6 +1143,7 @@ CREATE TABLE `course_overviews_courseoverview` ( `end` datetime(6) DEFAULT NULL, `advertised_start` longtext, `course_image_url` longtext NOT NULL, + `facebook_url` longtext, `social_sharing_url` longtext, `end_of_course_survey_url` longtext, `certificates_display_behavior` longtext, @@ -1167,7 +1168,6 @@ CREATE TABLE `course_overviews_courseoverview` ( `effort` longtext, `short_description` longtext, `org` longtext NOT NULL, - `facebook_url` longtext, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; @@ -1658,7 +1658,7 @@ CREATE TABLE `django_migrations` ( `name` varchar(255) NOT NULL, `applied` datetime(6) NOT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=119 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=120 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 */; diff --git a/common/test/db_cache/bok_choy_schema_student_module_history.sql b/common/test/db_cache/bok_choy_schema_student_module_history.sql index 5a30d5a35c..ca0d7226ec 100644 --- a/common/test/db_cache/bok_choy_schema_student_module_history.sql +++ b/common/test/db_cache/bok_choy_schema_student_module_history.sql @@ -22,7 +22,8 @@ CREATE TABLE `coursewarehistoryextended_studentmodulehistoryextended` ( `student_module_id` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `coursewarehistoryextended_studentmodulehistoryextended_2af72f10` (`version`), - KEY `coursewarehistoryextended_studentmodulehistoryextended_e2fa5388` (`created`) + KEY `coursewarehistoryextended_studentmodulehistoryextended_e2fa5388` (`created`), + KEY `coursewarehistoryextended_student_module_id_61b23a7a1dd27fe4_idx` (`student_module_id`) ) ENGINE=InnoDB AUTO_INCREMENT=10000 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; DROP TABLE IF EXISTS `django_migrations`; @@ -34,7 +35,7 @@ CREATE TABLE `django_migrations` ( `name` varchar(255) NOT NULL, `applied` datetime(6) NOT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=119 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=120 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; diff --git a/common/test/db_cache/lettuce.db b/common/test/db_cache/lettuce.db index 7b1e65071360743f8aee5bebda52f3dbda556521..9a9cf041058658e49a9c0102fee21f7b73347ac9 100644 GIT binary patch delta 27226 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

Fh&4I7 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 cn_Amu=Fh Date: Mon, 1 Feb 2016 20:36:35 +0000 Subject: [PATCH 2/2] Configure LMS to select oauth2 providing library. Available backends: * django-oauth-toolkit (DOT) * django-oauth2-provider (DOP) * Use provided client ID to select backend for * AccessToken requests * third party auth-token exchange * Create adapters to isolate library-dependent functionality * Handle django-oauth-toolkit tokens in edX DRF authenticator class MA-1998 MA-2000 --- cms/envs/common.py | 5 +- common/djangoapps/auth_exchange/forms.py | 10 +- .../djangoapps/auth_exchange/tests/mixins.py | 111 ++++++++ .../auth_exchange/tests/test_forms.py | 60 ++++- .../auth_exchange/tests/test_views.py | 86 ++++-- .../djangoapps/auth_exchange/tests/utils.py | 15 +- common/djangoapps/auth_exchange/views.py | 110 +++++++- .../third_party_auth/tests/utils.py | 23 +- common/test/db_cache/lettuce.db | Bin 1396736 -> 1420288 bytes lms/djangoapps/oauth_dispatch/__init__.py | 0 .../oauth_dispatch/adapters/__init__.py | 7 + lms/djangoapps/oauth_dispatch/adapters/dop.py | 70 +++++ lms/djangoapps/oauth_dispatch/adapters/dot.py | 73 +++++ .../oauth_dispatch/tests/__init__.py | 0 .../oauth_dispatch/tests/constants.py | 5 + lms/djangoapps/oauth_dispatch/tests/mixins.py | 3 + .../oauth_dispatch/tests/test_dop_adapter.py | 77 ++++++ .../oauth_dispatch/tests/test_dot_adapter.py | 76 ++++++ .../oauth_dispatch/tests/test_views.py | 251 ++++++++++++++++++ lms/djangoapps/oauth_dispatch/urls.py | 25 ++ lms/djangoapps/oauth_dispatch/views.py | 89 +++++++ lms/djangoapps/support/tests/test_programs.py | 2 +- lms/envs/common.py | 5 +- lms/urls.py | 19 +- .../programs/tasks/v1/tests/test_tasks.py | 2 +- openedx/core/lib/api/authentication.py | 40 ++- .../core/lib/api/tests/test_authentication.py | 35 ++- pavelib/prereqs.py | 2 +- requirements/edx/base.txt | 5 +- 29 files changed, 1114 insertions(+), 92 deletions(-) create mode 100644 common/djangoapps/auth_exchange/tests/mixins.py create mode 100644 lms/djangoapps/oauth_dispatch/__init__.py create mode 100644 lms/djangoapps/oauth_dispatch/adapters/__init__.py create mode 100644 lms/djangoapps/oauth_dispatch/adapters/dop.py create mode 100644 lms/djangoapps/oauth_dispatch/adapters/dot.py create mode 100644 lms/djangoapps/oauth_dispatch/tests/__init__.py create mode 100644 lms/djangoapps/oauth_dispatch/tests/constants.py create mode 100644 lms/djangoapps/oauth_dispatch/tests/mixins.py create mode 100644 lms/djangoapps/oauth_dispatch/tests/test_dop_adapter.py create mode 100644 lms/djangoapps/oauth_dispatch/tests/test_dot_adapter.py create mode 100644 lms/djangoapps/oauth_dispatch/tests/test_views.py create mode 100644 lms/djangoapps/oauth_dispatch/urls.py create mode 100644 lms/djangoapps/oauth_dispatch/views.py diff --git a/cms/envs/common.py b/cms/envs/common.py index 954ae13380..2beb6e6925 100644 --- a/cms/envs/common.py +++ b/cms/envs/common.py @@ -864,11 +864,14 @@ INSTALLED_APPS = ( # Self-paced course configuration 'openedx.core.djangoapps.self_paced', - # OAuth2 Provider + # django-oauth2-provider (deprecated) 'provider', 'provider.oauth2', 'edx_oauth2_provider', + # django-oauth-toolkit + 'oauth2_provider', + # These are apps that aren't strictly needed by Studio, but are imported by # other apps that are. Django 1.8 wants to have imported models supported # by installed apps. diff --git a/common/djangoapps/auth_exchange/forms.py b/common/djangoapps/auth_exchange/forms.py index 81cd9da183..8caf61799d 100644 --- a/common/djangoapps/auth_exchange/forms.py +++ b/common/djangoapps/auth_exchange/forms.py @@ -8,6 +8,7 @@ import provider.constants from provider.forms import OAuthForm, OAuthValidationError from provider.oauth2.forms import ScopeChoiceField, ScopeMixin from provider.oauth2.models import Client +from oauth2_provider.models import Application from requests import HTTPError from social.backends import oauth as social_oauth from social.exceptions import AuthException @@ -21,9 +22,10 @@ class AccessTokenExchangeForm(ScopeMixin, OAuthForm): scope = ScopeChoiceField(choices=SCOPE_NAMES, required=False) client_id = CharField(required=False) - def __init__(self, request, *args, **kwargs): + def __init__(self, request, oauth2_adapter, *args, **kwargs): super(AccessTokenExchangeForm, self).__init__(*args, **kwargs) self.request = request + self.oauth2_adapter = oauth2_adapter def _require_oauth_field(self, field_name): """ @@ -68,15 +70,15 @@ class AccessTokenExchangeForm(ScopeMixin, OAuthForm): client_id = self.cleaned_data["client_id"] try: - client = Client.objects.get(client_id=client_id) - except Client.DoesNotExist: + client = self.oauth2_adapter.get_client(client_id=client_id) + except (Client.DoesNotExist, Application.DoesNotExist): raise OAuthValidationError( { "error": "invalid_client", "error_description": "{} is not a valid client_id".format(client_id), } ) - if client.client_type != provider.constants.PUBLIC: + if client.client_type not in [provider.constants.PUBLIC, Application.CLIENT_PUBLIC]: raise OAuthValidationError( { # invalid_client isn't really the right code, but this mirrors diff --git a/common/djangoapps/auth_exchange/tests/mixins.py b/common/djangoapps/auth_exchange/tests/mixins.py new file mode 100644 index 0000000000..450f789657 --- /dev/null +++ b/common/djangoapps/auth_exchange/tests/mixins.py @@ -0,0 +1,111 @@ +""" +Mixins to facilitate testing OAuth connections to Django-OAuth-Toolkit or +Django-OAuth2-Provider. +""" + +# pylint: disable=protected-access + +from unittest import skip, expectedFailure +from django.test.client import RequestFactory + +from lms.djangoapps.oauth_dispatch import adapters +from lms.djangoapps.oauth_dispatch.tests.constants import DUMMY_REDIRECT_URL + +from ..views import DOTAccessTokenExchangeView + + +class DOPAdapterMixin(object): + """ + Mixin to rewire existing tests to use django-oauth2-provider (DOP) backend + + Overwrites self.client_id, self.access_token, self.oauth2_adapter + """ + client_id = 'dop_test_client_id' + access_token = 'dop_test_access_token' + oauth2_adapter = adapters.DOPAdapter() + + def create_public_client(self, user, client_id=None): + """ + Create an oauth client application that is public. + """ + return self.oauth2_adapter.create_public_client( + name='Test Public Client', + user=user, + client_id=client_id, + redirect_uri=DUMMY_REDIRECT_URL, + ) + + def create_confidential_client(self, user, client_id=None): + """ + Create an oauth client application that is confidential. + """ + return self.oauth2_adapter.create_confidential_client( + name='Test Confidential Client', + user=user, + client_id=client_id, + redirect_uri=DUMMY_REDIRECT_URL, + ) + + def get_token_response_keys(self): + """ + Return the set of keys provided when requesting an access token + """ + return {'access_token', 'token_type', 'expires_in', 'scope'} + + +class DOTAdapterMixin(object): + """ + Mixin to rewire existing tests to use django-oauth-toolkit (DOT) backend + + Overwrites self.client_id, self.access_token, self.oauth2_adapter + """ + + client_id = 'dot_test_client_id' + access_token = 'dot_test_access_token' + oauth2_adapter = adapters.DOTAdapter() + + def create_public_client(self, user, client_id=None): + """ + Create an oauth client application that is public. + """ + return self.oauth2_adapter.create_public_client( + name='Test Public Application', + user=user, + client_id=client_id, + redirect_uri=DUMMY_REDIRECT_URL, + ) + + def create_confidential_client(self, user, client_id=None): + """ + Create an oauth client application that is confidential. + """ + return self.oauth2_adapter.create_confidential_client( + name='Test Confidential Application', + user=user, + client_id=client_id, + redirect_uri=DUMMY_REDIRECT_URL, + ) + + def get_token_response_keys(self): + """ + Return the set of keys provided when requesting an access token + """ + return {'access_token', 'refresh_token', 'token_type', 'expires_in', 'scope'} + + def test_get_method(self): + # Dispatch routes all get methods to DOP, so we test this on the view + request_factory = RequestFactory() + request = request_factory.get('/oauth2/exchange_access_token/') + request.session = {} + view = DOTAccessTokenExchangeView.as_view() + response = view(request, backend='facebook') + self.assertEqual(response.status_code, 400) + + @expectedFailure + def test_single_access_token(self): + # TODO: Single access tokens not supported yet for DOT (See MA-2122) + super(DOTAdapterMixin, self).test_single_access_token() + + @skip("Not supported yet (See MA-2123)") + def test_scopes(self): + super(DOTAdapterMixin, self).test_scopes() diff --git a/common/djangoapps/auth_exchange/tests/test_forms.py b/common/djangoapps/auth_exchange/tests/test_forms.py index ffeffb4e22..490628f868 100644 --- a/common/djangoapps/auth_exchange/tests/test_forms.py +++ b/common/djangoapps/auth_exchange/tests/test_forms.py @@ -12,10 +12,12 @@ import httpretty from provider import scope import social.apps.django_app.utils as social_utils -from auth_exchange.forms import AccessTokenExchangeForm -from auth_exchange.tests.utils import AccessTokenExchangeTestMixin from third_party_auth.tests.utils import ThirdPartyOAuthTestMixinFacebook, ThirdPartyOAuthTestMixinGoogle +from ..forms import AccessTokenExchangeForm +from .utils import AccessTokenExchangeTestMixin +from .mixins import DOPAdapterMixin, DOTAdapterMixin + class AccessTokenExchangeFormTest(AccessTokenExchangeTestMixin): """ @@ -31,7 +33,7 @@ class AccessTokenExchangeFormTest(AccessTokenExchangeTestMixin): self.request.backend = social_utils.load_backend(self.request.social_strategy, self.BACKEND, redirect_uri) def _assert_error(self, data, expected_error, expected_error_description): - form = AccessTokenExchangeForm(request=self.request, data=data) + form = AccessTokenExchangeForm(request=self.request, oauth2_adapter=self.oauth2_adapter, data=data) self.assertEqual( form.errors, {"error": expected_error, "error_description": expected_error_description} @@ -39,7 +41,7 @@ class AccessTokenExchangeFormTest(AccessTokenExchangeTestMixin): self.assertNotIn("partial_pipeline", self.request.session) def _assert_success(self, data, expected_scopes): - form = AccessTokenExchangeForm(request=self.request, data=data) + form = AccessTokenExchangeForm(request=self.request, oauth2_adapter=self.oauth2_adapter, data=data) self.assertTrue(form.is_valid()) self.assertEqual(form.cleaned_data["user"], self.user) self.assertEqual(form.cleaned_data["client"], self.oauth_client) @@ -49,13 +51,15 @@ class AccessTokenExchangeFormTest(AccessTokenExchangeTestMixin): # This is necessary because cms does not implement third party auth @unittest.skipUnless(settings.FEATURES.get("ENABLE_THIRD_PARTY_AUTH"), "third party auth not enabled") @httpretty.activate -class AccessTokenExchangeFormTestFacebook( +class DOPAccessTokenExchangeFormTestFacebook( + DOPAdapterMixin, AccessTokenExchangeFormTest, ThirdPartyOAuthTestMixinFacebook, - TestCase + TestCase, ): """ - Tests for AccessTokenExchangeForm used with Facebook + Tests for AccessTokenExchangeForm used with Facebook, tested against + django-oauth2-provider (DOP). """ pass @@ -63,12 +67,46 @@ class AccessTokenExchangeFormTestFacebook( # This is necessary because cms does not implement third party auth @unittest.skipUnless(settings.FEATURES.get("ENABLE_THIRD_PARTY_AUTH"), "third party auth not enabled") @httpretty.activate -class AccessTokenExchangeFormTestGoogle( +class DOTAccessTokenExchangeFormTestFacebook( + DOTAdapterMixin, AccessTokenExchangeFormTest, - ThirdPartyOAuthTestMixinGoogle, - TestCase + ThirdPartyOAuthTestMixinFacebook, + TestCase, ): """ - Tests for AccessTokenExchangeForm used with Google + Tests for AccessTokenExchangeForm used with Facebook, tested against + django-oauth-toolkit (DOT). + """ + pass + + +# This is necessary because cms does not implement third party auth +@unittest.skipUnless(settings.FEATURES.get("ENABLE_THIRD_PARTY_AUTH"), "third party auth not enabled") +@httpretty.activate +class DOPAccessTokenExchangeFormTestGoogle( + DOPAdapterMixin, + AccessTokenExchangeFormTest, + ThirdPartyOAuthTestMixinGoogle, + TestCase, +): + """ + Tests for AccessTokenExchangeForm used with Google, tested against + django-oauth2-provider (DOP). + """ + pass + + +# This is necessary because cms does not implement third party auth +@unittest.skipUnless(settings.FEATURES.get("ENABLE_THIRD_PARTY_AUTH"), "third party auth not enabled") +@httpretty.activate +class DOTAccessTokenExchangeFormTestGoogle( + DOTAdapterMixin, + AccessTokenExchangeFormTest, + ThirdPartyOAuthTestMixinGoogle, + TestCase, +): + """ + Tests for AccessTokenExchangeForm used with Google, tested against + django-oauth-toolkit (DOT). """ pass diff --git a/common/djangoapps/auth_exchange/tests/test_views.py b/common/djangoapps/auth_exchange/tests/test_views.py index 5c0b7503f9..60c687960c 100644 --- a/common/djangoapps/auth_exchange/tests/test_views.py +++ b/common/djangoapps/auth_exchange/tests/test_views.py @@ -1,25 +1,30 @@ -# pylint: disable=no-member """ Tests for OAuth token exchange views """ + +# pylint: disable=no-member + from datetime import timedelta import json import mock import unittest +import ddt from django.conf import settings from django.core.urlresolvers import reverse from django.test import TestCase import httpretty import provider.constants -from provider import scope from provider.oauth2.models import AccessToken, Client +from rest_framework.test import APIClient -from auth_exchange.tests.utils import AccessTokenExchangeTestMixin from student.tests.factories import UserFactory from third_party_auth.tests.utils import ThirdPartyOAuthTestMixinFacebook, ThirdPartyOAuthTestMixinGoogle +from .mixins import DOPAdapterMixin, DOTAdapterMixin +from .utils import AccessTokenExchangeTestMixin +@ddt.ddt class AccessTokenExchangeViewTest(AccessTokenExchangeTestMixin): """ Mixin that defines test cases for AccessTokenExchangeView @@ -27,33 +32,34 @@ class AccessTokenExchangeViewTest(AccessTokenExchangeTestMixin): def setUp(self): super(AccessTokenExchangeViewTest, self).setUp() self.url = reverse("exchange_access_token", kwargs={"backend": self.BACKEND}) + self.csrf_client = APIClient(enforce_csrf_checks=True) def _assert_error(self, data, expected_error, expected_error_description): - response = self.client.post(self.url, data) + response = self.csrf_client.post(self.url, data) self.assertEqual(response.status_code, 400) self.assertEqual(response["Content-Type"], "application/json") self.assertEqual( json.loads(response.content), - {"error": expected_error, "error_description": expected_error_description} + {u"error": expected_error, u"error_description": expected_error_description} ) self.assertNotIn("partial_pipeline", self.client.session) def _assert_success(self, data, expected_scopes): - response = self.client.post(self.url, data) + response = self.csrf_client.post(self.url, data) self.assertEqual(response.status_code, 200) self.assertEqual(response["Content-Type"], "application/json") content = json.loads(response.content) - self.assertEqual(set(content.keys()), {"access_token", "token_type", "expires_in", "scope"}) + self.assertEqual(set(content.keys()), self.get_token_response_keys()) self.assertEqual(content["token_type"], "Bearer") self.assertLessEqual( timedelta(seconds=int(content["expires_in"])), provider.constants.EXPIRE_DELTA_PUBLIC ) - self.assertEqual(content["scope"], " ".join(expected_scopes)) - token = AccessToken.objects.get(token=content["access_token"]) + self.assertEqual(content["scope"], self.oauth2_adapter.normalize_scopes(expected_scopes)) + token = self.oauth2_adapter.get_access_token(token_string=content["access_token"]) self.assertEqual(token.user, self.user) - self.assertEqual(token.client, self.oauth_client) - self.assertEqual(scope.to_names(token.scope), expected_scopes) + self.assertEqual(self.oauth2_adapter.get_client_for_token(token), self.oauth_client) + self.assertEqual(self.oauth2_adapter.get_token_scope_names(token), expected_scopes) def test_single_access_token(self): def extract_token(response): @@ -64,16 +70,15 @@ class AccessTokenExchangeViewTest(AccessTokenExchangeTestMixin): self._setup_provider_response(success=True) for single_access_token in [True, False]: - with mock.patch( - "auth_exchange.views.constants.SINGLE_ACCESS_TOKEN", - single_access_token - ): + with mock.patch("auth_exchange.views.constants.SINGLE_ACCESS_TOKEN", single_access_token): first_response = self.client.post(self.url, self.data) second_response = self.client.post(self.url, self.data) - self.assertEqual( - extract_token(first_response) == extract_token(second_response), - single_access_token - ) + self.assertEqual(first_response.status_code, 200) + self.assertEqual(second_response.status_code, 200) + self.assertEqual( + extract_token(first_response) == extract_token(second_response), + single_access_token + ) def test_get_method(self): response = self.client.get(self.url, self.data) @@ -95,10 +100,11 @@ class AccessTokenExchangeViewTest(AccessTokenExchangeTestMixin): # This is necessary because cms does not implement third party auth @unittest.skipUnless(settings.FEATURES.get("ENABLE_THIRD_PARTY_AUTH"), "third party auth not enabled") @httpretty.activate -class AccessTokenExchangeViewTestFacebook( +class DOPAccessTokenExchangeViewTestFacebook( + DOPAdapterMixin, AccessTokenExchangeViewTest, ThirdPartyOAuthTestMixinFacebook, - TestCase + TestCase, ): """ Tests for AccessTokenExchangeView used with Facebook @@ -106,16 +112,48 @@ class AccessTokenExchangeViewTestFacebook( pass +@unittest.skipUnless(settings.FEATURES.get("ENABLE_THIRD_PARTY_AUTH"), "third party auth not enabled") +@httpretty.activate +class DOTAccessTokenExchangeViewTestFacebook( + DOTAdapterMixin, + AccessTokenExchangeViewTest, + ThirdPartyOAuthTestMixinFacebook, + TestCase, +): + """ + Rerun AccessTokenExchangeViewTestFacebook tests against DOT backend + """ + pass + + # This is necessary because cms does not implement third party auth @unittest.skipUnless(settings.FEATURES.get("ENABLE_THIRD_PARTY_AUTH"), "third party auth not enabled") @httpretty.activate -class AccessTokenExchangeViewTestGoogle( +class DOPAccessTokenExchangeViewTestGoogle( + DOPAdapterMixin, AccessTokenExchangeViewTest, ThirdPartyOAuthTestMixinGoogle, - TestCase + TestCase, ): """ - Tests for AccessTokenExchangeView used with Google + Tests for AccessTokenExchangeView used with Google using + django-oauth2-provider backend. + """ + pass + + +# This is necessary because cms does not implement third party auth +@unittest.skipUnless(settings.FEATURES.get("ENABLE_THIRD_PARTY_AUTH"), "third party auth not enabled") +@httpretty.activate +class DOTAccessTokenExchangeViewTestGoogle( + DOTAdapterMixin, + AccessTokenExchangeViewTest, + ThirdPartyOAuthTestMixinGoogle, + TestCase, +): + """ + Tests for AccessTokenExchangeView used with Google using + django-oauth-toolkit backend. """ pass diff --git a/common/djangoapps/auth_exchange/tests/utils.py b/common/djangoapps/auth_exchange/tests/utils.py index 60608f292f..2629557c08 100644 --- a/common/djangoapps/auth_exchange/tests/utils.py +++ b/common/djangoapps/auth_exchange/tests/utils.py @@ -1,9 +1,8 @@ """ Test utilities for OAuth access token exchange """ -import provider.constants -from social.apps.django_app.default.models import UserSocialAuth +from social.apps.django_app.default.models import UserSocialAuth from third_party_auth.tests.utils import ThirdPartyOAuthTestMixin @@ -37,6 +36,12 @@ class AccessTokenExchangeTestMixin(ThirdPartyOAuthTestMixin): """ raise NotImplementedError() + def _create_client(self): + """ + Create an oauth2 client application using class defaults. + """ + return self.create_public_client(self.user, self.client_id) + def test_minimal(self): self._setup_provider_response(success=True) self._assert_success(self.data, expected_scopes=[]) @@ -61,12 +66,12 @@ class AccessTokenExchangeTestMixin(ThirdPartyOAuthTestMixin): ) def test_confidential_client(self): - self.oauth_client.client_type = provider.constants.CONFIDENTIAL - self.oauth_client.save() + self.data['client_id'] += '_confidential' + self.oauth_client = self.create_confidential_client(self.user, self.data['client_id']) self._assert_error( self.data, "invalid_client", - "test_client_id is not a public client" + "{}_confidential is not a public client".format(self.client_id), ) def test_inactive_user(self): diff --git a/common/djangoapps/auth_exchange/views.py b/common/djangoapps/auth_exchange/views.py index abd31de9ec..6669e489c5 100644 --- a/common/djangoapps/auth_exchange/views.py +++ b/common/djangoapps/auth_exchange/views.py @@ -1,4 +1,3 @@ -# pylint: disable=abstract-method """ Views to support exchange of authentication credentials. The following are currently implemented: @@ -7,36 +6,52 @@ The following are currently implemented: 2. LoginWithAccessTokenView: 1st party (open-edx) OAuth 2.0 access token -> session cookie """ + +# pylint: disable=abstract-method + from django.conf import settings from django.contrib.auth import login import django.contrib.auth as auth from django.http import HttpResponse from django.utils.decorators import method_decorator from django.views.decorators.csrf import csrf_exempt +from edx_oauth2_provider.constants import SCOPE_VALUE_DICT +from oauth2_provider.settings import oauth2_settings +from oauth2_provider.views.base import TokenView as DOTAccessTokenView +from oauthlib.oauth2.rfc6749.tokens import BearerToken from provider import constants -from provider.oauth2.views import AccessTokenView as AccessTokenView +from provider.oauth2.views import AccessTokenView as DOPAccessTokenView from rest_framework import permissions +from rest_framework.response import Response from rest_framework.views import APIView import social.apps.django_app.utils as social_utils from auth_exchange.forms import AccessTokenExchangeForm +from lms.djangoapps.oauth_dispatch import adapters from openedx.core.lib.api.authentication import OAuth2AuthenticationAllowInactiveUser -class AccessTokenExchangeView(AccessTokenView): +class AccessTokenExchangeBase(APIView): """ - View for token exchange from 3rd party OAuth access token to 1st party OAuth access token + View for token exchange from 3rd party OAuth access token to 1st party + OAuth access token. """ @method_decorator(csrf_exempt) @method_decorator(social_utils.strategy("social:complete")) def dispatch(self, *args, **kwargs): - return super(AccessTokenExchangeView, self).dispatch(*args, **kwargs) + return super(AccessTokenExchangeBase, self).dispatch(*args, **kwargs) def get(self, request, _backend): # pylint: disable=arguments-differ - return super(AccessTokenExchangeView, self).get(request) + """ + Pass through GET requests without the _backend + """ + return super(AccessTokenExchangeBase, self).get(request) def post(self, request, _backend): # pylint: disable=arguments-differ - form = AccessTokenExchangeForm(request=request, data=request.POST) + """ + Handle POST requests to get a first-party access token. + """ + form = AccessTokenExchangeForm(request=request, oauth2_adapter=self.oauth2_adapter, data=request.POST) # pylint: disable=no-member if not form.is_valid(): return self.error_response(form.errors) @@ -44,12 +59,89 @@ class AccessTokenExchangeView(AccessTokenView): scope = form.cleaned_data["scope"] client = form.cleaned_data["client"] + return self.exchange_access_token(request, user, scope, client) + + def exchange_access_token(self, request, user, scope, client): + """ + Exchange third party credentials for an edx access token, and return a + serialized access token response. + """ if constants.SINGLE_ACCESS_TOKEN: - edx_access_token = self.get_access_token(request, user, scope, client) + edx_access_token = self.get_access_token(request, user, scope, client) # pylint: disable=no-member else: edx_access_token = self.create_access_token(request, user, scope, client) + return self.access_token_response(edx_access_token) # pylint: disable=no-member - return self.access_token_response(edx_access_token) + +class DOPAccessTokenExchangeView(AccessTokenExchangeBase, DOPAccessTokenView): + """ + View for token exchange from 3rd party OAuth access token to 1st party + OAuth access token. Uses django-oauth2-provider (DOP) to manage access + tokens. + """ + + oauth2_adapter = adapters.DOPAdapter() + + +class DOTAccessTokenExchangeView(AccessTokenExchangeBase, DOTAccessTokenView): + """ + View for token exchange from 3rd party OAuth access token to 1st party + OAuth access token. Uses django-oauth-toolkit (DOT) to manage access + tokens. + """ + + oauth2_adapter = adapters.DOTAdapter() + + def get(self, request, _backend): + return Response(status=400, data={ + 'error': 'invalid_request', + 'error_description': 'Only POST requests allowed.', + }) + + def get_access_token(self, request, user, scope, client): + """ + TODO: MA-2122: Reusing access tokens is not yet supported for DOT. + Just return a new access token. + """ + return self.create_access_token(request, user, scope, client) + + def create_access_token(self, request, user, scope, client): + """ + Create and return a new access token. + """ + _days = 24 * 60 * 60 + token_generator = BearerToken( + expires_in=settings.OAUTH_EXPIRE_PUBLIC_CLIENT_DAYS * _days, + request_validator=oauth2_settings.OAUTH2_VALIDATOR_CLASS(), + ) + self._populate_create_access_token_request(request, user, scope, client) + return token_generator.create_token(request, refresh_token=True) + + def access_token_response(self, token): + """ + Wrap an access token in an appropriate response + """ + return Response(data=token) + + def _populate_create_access_token_request(self, request, user, scope, client): + """ + django-oauth-toolkit expects certain non-standard attributes to + be present on the request object. This function modifies the + request object to match these expectations + """ + request.user = user + request.scopes = [SCOPE_VALUE_DICT[scope]] + request.client = client + request.state = None + request.refresh_token = None + request.extra_credentials = None + request.grant_type = client.authorization_grant_type + + def error_response(self, form_errors): + """ + Return an error response consisting of the errors in the form + """ + return Response(status=400, data=form_errors) class LoginWithAccessTokenView(APIView): diff --git a/common/djangoapps/third_party_auth/tests/utils.py b/common/djangoapps/third_party_auth/tests/utils.py index cce2edd59b..588d23dce9 100644 --- a/common/djangoapps/third_party_auth/tests/utils.py +++ b/common/djangoapps/third_party_auth/tests/utils.py @@ -22,23 +22,30 @@ class ThirdPartyOAuthTestMixin(ThirdPartyAuthTestMixin): USER_URL: The URL of the endpoint that the backend retrieves user data from UID_FIELD: The field in the user data that the backend uses as the user id """ + social_uid = "test_social_uid" + access_token = "test_access_token" + client_id = "test_client_id" + def setUp(self, create_user=True): super(ThirdPartyOAuthTestMixin, self).setUp() - self.social_uid = "test_social_uid" - self.access_token = "test_access_token" - self.client_id = "test_client_id" - self.oauth_client = Client.objects.create( - client_id=self.client_id, - client_type=PUBLIC - ) if create_user: self.user = UserFactory() UserSocialAuth.objects.create(user=self.user, provider=self.BACKEND, uid=self.social_uid) + self.oauth_client = self._create_client() if self.BACKEND == 'google-oauth2': self.configure_google_provider(enabled=True) elif self.BACKEND == 'facebook': self.configure_facebook_provider(enabled=True) + def _create_client(self): + """ + Create an OAuth2 client application + """ + return Client.objects.create( + client_id=self.client_id, + client_type=PUBLIC, + ) + def _setup_provider_response(self, success=False, email=''): """ Register a mock response for the third party user information endpoint; @@ -65,7 +72,7 @@ class ThirdPartyOAuthTestMixin(ThirdPartyAuthTestMixin): self.USER_URL, body=body, status=status, - content_type="application/json" + content_type="application/json", ) diff --git a/common/test/db_cache/lettuce.db b/common/test/db_cache/lettuce.db index 9a9cf041058658e49a9c0102fee21f7b73347ac9..c90f206e8615a6d655cfb7187591eaab8875e7d7 100644 GIT binary patch delta 47636 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

9;mMttObHz6)@8$e-8ze~ zc6|3F1{TtF*l?nSHQX-U1RTawcj>aohQNkhy4e&*@Qf67%%0OnHSo<1x+uj)e^d8V zFzwOhlg;qN&Z0exl89JTVz6CrCtjj-e`xgKj_|K9q4;iuqBQA zb;*jY{z=`Xkh>qNbsLM3yth&>1Yp1JO)V*dhR1b9#2-Msfsh%jpUqWt`s2H2LG%F> zb0wHQ)`dglL7fT49nh)Zx&v6w*>HprcSytl5+By6m#VClWlZA~ex!?obC)e@C_Svx zz%S40lE@8=Gi?w%kyOAy=34TnF{jn?!Km37Hf>aS#?q`>C$ zIyGdS*Cmka8B-2yIj_s7Jrtfjj}dn>+$!3`!tL5c@4}w?oI*c?+%4lX zmHKkh06Ub3x<^KR!BCA*tU}bi5-RYpN`F?MJqq}pRzHnwm-#Mf^>b*C5+>^OW#ow5 z3m?|$QwZ%*!S4%{QiB&Oj`~Y_)ZjBU!sU|f_wlKcnD<> zG9fM%$L^SDeOTc8X#E=~pdMZtpj8dTP*nbh9^iJAIzNMHqf zF-4zDZX4u`Vc2oB*9cLWdK-MjSZ+y0mfMH1Aa*S6H9<}q=JI=q5Wrm43$)kF;w>b1 z4&%NrQ(r)m;gd{#KJmhp8;tQ__{yLPOwH1V5i$ZQv-M@#T>psP6qU6spZZJSiS5R4 zi3i@z)+dn^IDWS=8pdVmLm??gKboY%k{m2PYWD$r;KdyMYa(fb+b3X0dt^`I8y46+ z5y$s86RRz+r8NHZoNmJNEWlWI7aS6#E19j?X*W^ zLotf6WRmV-)b01`y|f3tZ}(yw^$ZeFfrhg|K9Tee;z9$j+^4^hsC%p`tJ6t$z}Fgs z1;&mxD53KKy-0os9~{xg!84-`A%UY0=nLtga+N}h2Tk;wslF!?mG%&1ZZvi>Ah$EvI|XVR_$I3gNQJEa+P zz@NYY|92KE8oqp09|l+M5gs^nQvbey8}q0Bp?8y)Wa6dI_4+{GoBB`{iHDL?`Xchm zAVCGqIj9ORs*i!N&seIe zL8h@di(mg4>axQ_We9xrnSPZHb=krn^|jJIV*b2Y?s9&c7-U;Tt)({ui7Gm&(pcxzx4PJ6aCSa?n!5n6I5Z5P%!whxgG|aqUu*1ndtm~?9 z!~F&{qqV7qG2|a|!KB`nk!sLDYpNj?&Es1c@xx)nA5#svXad{Q3=7F8GG6K%6=@hL z_J~ducsb2*rvfeF`Ygj(a)GfV!7EvYT(wJOEpb!78@4SqL_%t|Ar5YM2urvu8}o3( z9odFyFNke=&$R22SJ{sx<031Ji_*+U-8R$kNr5YmO@iT@{XwAdo{)I)2W<$;xcrMSd zIssjO_Qi&3@(n!EZt%d%iw(2T{TIK)Fq(WV^J4!}K>iXed)E@fNVMM{USgO-E-~Ud zH10PnMd&LAWy3E^4dZa;%darZfj{iWa^tYUfw9z}4IHa5{6oZZedtwY9XT9~y#@mq z+OZOjyoYW6Serpl`5)vgm-QNqj5Y?XeU#1x+u98_@;wu=2bTw<*BYwfwzDk#wK$R+ z)}m~u*BU0M$Ed6gi>SW?3fCI4;P5(3eCaxr`Cn4u0*J^psc|{LJlj)Q)mWGqF7o4G zwk7I9nY?62(fA&{&yY(6wcLHNay4-70-D>m?=z%Pb*Vfe(ap<7WafS>!B>Ak4e=ox zC(=kqoD;3`W%~_r2@7G zP&;_u4rzk%4;ucZMqhu;Z0g4$`>i1zRy<_LpaLhSZ2KNFf9@f}r)bkY`mkX!d0|*_ zPd|(m|3U@UB9=Z1S{^Z&)vM*STEYG)ruF0_hD`GDuqc*C4aMqunWstS>3x*try0id z$)koMw1P7pGc2NlZiophg&)H&;#>LM{G+)2dG?^GJcLY$U(FYh|8PA?dwPL+iW|`Y_C=v7 zLK|O5fPABkQgX>_`Kbgho!7Lt?eNkuv+B1h2g{BG{`FuPOagRPi$wh7EeFSEP z8N!uZ%oc`UQ(+L{>{kYbGSN@?5(4(ohFBGs=BNB@0yw`VCvg#e9?w*?wpF&Zw^qmp z-x}~3S!Hbv7vmRLDwuDCic9q?_?eh|rano96cwW!&(=r8b76iBpF>*Pmp9b4wxSca zwW77EsilUC_J{C!7-Ox`s^X&jp-j3Dx{cuihuRyi`_f>I75#cXi?r2LHVov=zH@PY z11tQRkBw1*D`%A|bP&B`s3*F1+>)A1yApppKi~1L0p}G3>+qRy;a$UBXub8nhkEAy z!KT&7GkM7Sh61$qro4~DpMOIP{QZ5y^Ar~?yU!SAkdI_4(_^4JYskkXz|^ybGAe`& zBRqfB;5(otY9ODY5~zbwpJE4oelXo|c(ub0BfN10W>}qQKMVm%b@@@bbGAa0vIh5UZln>5{Zc>!8s!?-PouP+{GJX zb+nhjF{81OM6m?>XfF@Xn2d!a7JfAuKc&3_d}21bNn9Y-VjQ8<_u>Z6>_Y0FE6enO z$ruH73C0m52ChpmuAse2_&&inmL$L{iN<6oPc*t{FM0zK5tqnt4YXGcW0H*dxI~g1 zMJInSnBcQ{=2>v%0$PB-SxOGdYdGw91f-+| z{@iOs_nwcP-^z9P@YrkJ^IGbTipAp@U$cG2F@Z1yrYl1a>#t{tX za%Fq)be_YW*9iOjj5$G^+v&~4Q)mrv4*4RH&xx+fTs+d{wAU-R$dp3)?5uPal0|Xi zITNqT=gl3r8jAakE(zzvvnS}+bQi9I?tbhpjL(^kry%j9ho=r+>^F`I;_N6xt}}ln zEIOsNOE?D}XYx6Gc6%+{dPeu zy6#$QoQ59*OJV_<*BL`0Vx4ic+A**?lNQ#9&p~tXDn?7-^>rv0nmv6RjN^%&QB&ZN z4MsKmw87{?>mp|(#>#+-jm8&IZgkAWz{E|)6h$E}1KBZ_U57qZFh|dJ<9;+PAKZ>I zWev-N?l5}PnJQ~x4zmMM4lB&xVT?k1c1VuhJ1|lPyvROQ4Z|nxG&hy7Ys|*-S&U|2+&u_oL*+fjrDz5oW6(%OOM#L18trHXF1*+1Lx(KO zIq=xM#xFIvIr96*jZQL=Rc;Yo}tUh3jLCgE`gQ%?@JbnfqH9KcqZc+i-MDXch-{Cf@}|AYV%pVXmG6>(!Qip2Zeag<>i{BRt*()2*e zpN(bA_F^tnc;OSH5$<}+Xc0=s^_C99eZ+8OTYJmk=eLX=G6^322wgZc-$tc71Gc=4 zsL2v4@W$K5{aQ7yw3yQ*8J_sb7zQtYggy86kBlbt)MC6+G7EnF2&2rDQ<;6<=*9IE zrVm(-7|FJQFpz|Jm&640=I!97_Mi729 zCacS(C2da)j0-n~!>=hO6P(pxz`jvoKAcvY;w2#P;E%>D1pWRG{$!j&=CQov;MmXD z+;Kl+C!ELdX|VNYV=|d45d%m(ro}A)zuL42KQN_}xIOTw#x$Rl%jsUym_(LtG=YRT zQ%Yb%sOe}3Sp>dt(@gx3@;(-05@46lq=VQDT~lC`)ihUuzJ+ZurrBi4Ad6W}CV)s(MZf@`ZXx*dI!;U;tjOgCxaY^o^`AnlxP?T^X+7Sapsl?&%*D_PIT=wa|YQ>O> z-sRHrq?5pF)3CKFMw?2|Y>^`2_jouz+Ek#fR9Wlh(*Yh<#jv;xCB$!GCt@Wp8+=0TQHWrcuQ(@o=1w#rgdHpG=;#FwUHG3$qM#Fmq9Q z%@B}G%P$E4faXd0ntM}2w+>eE{Ue`Iev{H@V60hcR}?~(aKz}94PsMq4| zXddMc^`LkTLK|lc~alW@DD$AO4>(Y`cAB! zt+0Ei=^wO@gW7Ja&b4yxU+yx622OUHj;hgfxN8>@S_cW^Fiy^HL^ThhLI8G~Y*@w@ zcAI>}FINqwp@GyJOus0$D6JKE=$&~@u#R%Hoqk;}uFQ&^)Sm@kcVf@qvj@f97(j80 zv}{(E3=Nyz;UPE$yNo=}zK@#%YT75j;ipVBWG6g6&m0>V_q3@>r|CocZOt0mRRKnY zS%hPMGtEOc9%EqNlV#7>3#L^VT?O?gO?9MCrY0ns>id?x{Ubqbt*iS`xsb>ll)u!DgK}Qr~J2c8{J6TXd_)o zm-9c-#dIE>L362tX3|ueK*!PvG>VG+mvjo%Q#GaJ7xF!>YR8fe;c~x-2WC??ensdZ%GH zt#<~7GkRGi&+RS8a6#`v3>WtsOu9pe7 zsTb={Sl@?N2ZbGdOt_vtyg(-O_u*Ye;j_MVti6BN$HH6svJPbuB_47S%xP%(W(($J zxbG(Qb{tK3FiSAw1R$96(fZUV%yV(?M$!QK)#fnR@`gzTIuNqqTs5D}_V*GXZ@xJc zR$esqz=;#M%WIgZ(()_&a6d|Eu2mfJ&+f~DER}gF?#W7-uyg`PROa#Oz0=f6P&S+G z>Rgp|LoMx$mWE~78dN4N&1Mho3Sf*eaK71Gs`kk&DFZBX$;~pgaSh6QVU2mJdNi&+ zXVdNJvi6$MV$Q|=BS|52v>;Ey8q_^UTFmb&@`jf0lFmU^5#DVzr;?`+jS&Pb2npsZ zn!X5m$RW3-zS;i)9^6ir|F zRYN}+dF~uc2X#cUSsi#5v8aEeho@$$?sf~nX?11AjhdBwZTW!{acJh6AK!@d? zCFP#wK>m9MQ%;0zhgk&=I?U5)UnKn7VQ#^#WvL06ZVEi$G)J1$@v;}8N~+c&ZF*^f zIfFbTb626n8%UNw}%`nl$CbOl^L7b86S+X&Cj#Rv)W%wEMvbimGs<4<9C#kk?nI}h9L zkF2fFE7FzLE%S#@D6CVzGaozqlZR$dq79Ih<_iQ@C7;(}r+iG#MC#m|SD7cPb5z#a zx#*z53JC+lYU~)_uQF$o$A|a=^H-a1Cb(?9RBx^&yX4VMBJ#V z@|%B$D~zxGW;^*CBzKz6;NpUInRC#?>gY1RdT6^K$V+NmSF6j{a|(Ge@Y%cO(*zegXIdnzxJ9*5fN3}p#?ao#+IM?=bc z!8`%ox(o-`Uog*Aw+xtRV=v(N4*kp=hdUAjWLz8lfM)soMV4^b@R?bQR?^PTunT?; zzmBuS!imq!-=Lv*y@rp0GoNGSd?B5tIEE+BfC`qMadGmR(h><)g(VDkoG?{9uAs1_ z>*nLFj}+?H$quQ2LHq$r^D{Kz(H@S0lpjp#rhodg`l^DSl3_*I_=710x7CJ<@b@3kl0nmQ zjKHH!P5%`N!Hz2~F%r0`WmPp{j{Udn09J8{et*)xRrn$Zydp;NG zPvN~7WtAlijW;xDF_V!4nFLt_S1K(3QtR;01iPP=Ec>Nd3=r!q;kbz?weXSE7EPeE z&N7OyMbHwwV9gdms0);PTP;fXbrp8;2Up<}7hn4$`nJOJt1RQlQ^Q&VL)}~O_(>)_*N+6%UTlcPofZ@A*FjUK zWh!pAGMNJ(by{|rX}<;5-ej4LH}>T?cid#b4ZppXT-tAjyuFrca)lAL(tZ;p0D`|V z&=YtDER(hO34gQ*0pWhjpRjmVIQD>LK2;Eie9+QH`@`Y-2Q8&kAq37oh%LQem?PXL zJY|WQkib=P+;!Yt+!5{!;Yc#>B36<<@&Ne@`H*t>@I@}JytdK@>5I6Jc#-~$JBiu+ zbiM(vyFP@k%e3(yah1CZBQ0hjGLlwRt*>foltb=Uc=jDjr2QAOV2vfx;{^3hwRqE` zWkY+6kcdx2w6@~jT?1k&aU3C3x1z45h5IL5`iCVR6}9nAOQQ0lBq7mGVbs6H7$x^% zl#rMR$KJGrQSKdRe$$eqcz>jjm@lDV#!sSJ-PFvkW^nJpvu|Q=e;3|=(-Mi(}|`wJzH-L zpAjus>{11_Z}x+S-MNUEhji<2 z=+Y&axVhJgIkb^HVvfK$)3B%&SH%uIs}?8m*YP$ zqL1Jv){lGw>XRPax_+KNkL7+0j_br2Jf3<+CuX8r3e}4v&^oo@hw?yKvNCoO)?jXFU7gNb0AO`V@B11?lCUD1TOR6$F zPbes+VDcy<@i1jr4CQ`;-BZF+qF#&;B2%t+A2%23r6RW>Hb*o0xXShD>ca)jV}EyGAG zf{Yy=VWfX6M#yj`&t(s@{DvJ-!+8TIY@(Z=lFYr#;ooOOO(IDaDa20MLjH%`P5y*e ztG^(ZsRcWy58tw>r0eMo^kMo}dKNEPTdKMTWMktzRKFN8A+B%aP=#gY0TA=1M$^MZ-UI4a|U(Q8{gc=?&| zk`VKyiWoY}Km_@LngJn(Q51)AMK$kRLc-ZATT6&l{)k{7OG%{s5hZ^_vyTcABY(t7 zA5fSlF2qws84Ri>nbHS5h{%bF+%k?oi!UGjj$gr#<0DbU{)0Y4@1#5FD!jK|fX=Qk zav9%0I!T@)HVw~8H#MrBpaBLgoAqAHo3-KeNMc~q6gN7K!uUoMJhe=yqV{L2V8YE>wLB1Hd zxNSpoO;oeMh1r?$RN2;sT8?S(mYTJ7>^OzF32BK})501Nm&R~)4R}&xfK}IkXzL(4 zt{!w_#dvhNXN?uD9jlO-!icSP4b1~aR(Ks^(;2pk33Up;ByT)4N6ZRS(kyWK#Yj1VBA-;G~!HIGis^8W%+=t6;o--61c8FOjRsK zR2FPrD<;sCMeu%sn4(Nwh&VgL#X$2~QAtNGfGuiq&{p~5DPQg?cCYCz@XpbQGcTPJ&Q;+K`@M`jsh6Nx`s*JCdv6@UNSD5_M%F znU9yg{zk6g3t%hIZUXucJw{*0HIS0e;3x6b(kkdrJbSbuLy;(?r%_mw7KUq%FSCSn zoVXB3Q*mFpg!Jh$0EW35m5RIM5z=SMynBqd>fua57-D~L3+ZKpSdnty?YVTz80GhN zA-zOK!==2S4L`Db6c(oK?zo_9Zh(cs+5QnF(+UnX6dC??9T7yVA zh0jDG8lyHWuWYGp!lap%$lU|0&Y*(27kba2BD)VBJ%f|}AK;}kVzhOCm=KNW$`R_C zF|RhX9q)%<&xo<)ZiqfB))qg(S|^Tsio?H?+~-6|Qt?TadNi#bA}^B*R72Cz$f%}W zbRV|SIiB)qXl5+o*YG>|Tlfe0t@s^wd@24=5*mEk!C$QfH#f1oxGSajJwM@G=A95r|J)249zo5vn+e zg1ez*NQn&swj*N9$e7L;iE*fY2QrZ=vA8oD$t5$F0=7jg>@5>VsG@=xY^wrIL1!d_ zg;S-5%u_`mkiTdNYhyfH90V>fARGbjT&b_*>B11mD_Ja88C=5d1J@Oc(JE2Kv)<=X zSrBj+E{2Q6qD^H+fK6D~VO$-c913;PCGS?ksnS2qc1J5FaVSnr|{i za*F&w!|;^yMBLkL!E?&@(ZA5sxPGuoi`*K%gTI}BntvblZ;iZaKvPqC7<0h1BB|17 zs|*gSL3Ellf`9jhSQm}GKri=}yHGs|13dBmQ<#mY7AdpyE-GC45wBYkyBwNy`HN#qL(BLF?Nu|~d z%S1#s;}G2;(^=<=P&uV}M(TE!4uY?E;)JncSX7KTVB`|FOubspL8?b8eJv9yXf6}4 zRIu7$as$|085>My0PBkoI!F#(Ijl&saZW}{WnFo-P(fOrOuJg7AZ?7a9;;&sUTyA^ zd}&sx3#K?o1j9^Gkx$0T)L@!}RLMTwnBxrySKLKz6Aa24Np zNvPGbQ1Y55C~lFI?P_SAhwh~bK>%Mx#hJBOn#tvFnnW*>1AmA=o33W5Y993QrxRU{+5yy;`;ebycV&J%pz&rFWd?4 zcCHQ?hy5GXxfGMia<_qMshFx-f`Bux6JN8BlEfK-ZN*r4*o zb#{IyzT`&=CO5;mWnv`!6VuY&Wuc(=|h+oND;L&oNsAeKE z$J+$2mtz()f&f{7Kp6t*_9n0`z-gou0e3+oELebbJ3RM++6KSwi7%huA!+pnHt?kU$Ye>YHw2Y{ zjGH3khRaE&;-kPhv~e)vpu(Fb>7K^n2@KMv%d}w$EgsUNrIG?{Vkr)JKuDRCPt$;! z8+47388RW5*02~eC4D^5aH49KWUn^^Hf@w@b`Zd}k5bK%#F6?)m};)1|JUG!8PTdH z^Ma7nyUHp>MaO)p5?Yve11=m=E=`p!LE#3`3uJUqv_bSjNlCU!DYP$dt!k;0yy|3; zq!(KUQW;KKER!%Lc%xD@#V?VPXk$r8-lV!J=|&M*D)F^3;Vo)X5rmlV9b}m#csq+T zuv0)PB?;SuSq`F?%jlrsgXk)0nqA9MXlbgiA=T2Hwl)}BLehp403WPCP23m+!fFv{Kp@Mz0VdaqX`|{9NX{7k zw)e2%&E!t#TrIP}t+iszh*b#0rVJKzKx;A1%+5L_=6Kh^d$nS!CbM&85L~$!l}{}K z>GpMSE?`N}By_GoFgar_99t~Ll+?(;u*PEP%3uO(sHo0rWQk1~Y~O)=88N-H3W*u+ zc1T`=liTtjP{x2t1X6O^Vbc<{#Fru9%xh!nI8#*-1Xy>3PnL+*Ln}o=$c^F}IXr~; zGXDfR0y_CxT%V=$q4aHfi2jZ)qa}0%`I)?pn`CRr9Fj>)xOh0h{ef%5mU8fR+@k(h zz35b!1P9-3Bp{gu>4aqJxA$cB7a@G_bf)OvYPW+Zx4@3Kd4nf~G<-h7b2E;pIj#LZLuh zA@mpF43+8^5b(jWMx4GgnnbKRCYh!ZcM=<C69Y-{Hr|^%tr}5Q3Fd5Y<p_s1xM|9oF8H~is=ZW*H4B^89b^B{eCpVjr46B z#pIB&UFi9v1(UgL@bE^_i!eU`e}S+rw+p?0)K|o9!%+;om*Q>C@tedLbr*93rrSGU z#U?RP-Ngl=>o?&f%C=&XGdkcYWK^+jmMrg9cz=_aqRHso5(MW|i)lHV5lFLdW%^;T zwg&pJgh*iZm(;ll`BJjBz=PG;Q8osF69}YkKp;MC%U}vu#m??rkK~-Z&0wiP6|pV| zOkluT1k&A`p}hvplXe8$g_~es4X!`ig23A~V)jHfi^roo82|o?E4QDBh!5(Ql3LP5 z?nKALtK<{%Bi=1dpl;mvslk1p>+nY!{zA|5Dn1^~*13Ea|3_(yZiP>p05&j5Tbprr zcV*CP)gY<-4Z%@<6{%4sF=b^bAWf2`y^$rrUgB&<9~w@<=rSkGl5xE;n8a_0Yh)r* zjA8ktMN-w91`?5-mTi@_q*a=kAEx{zD_9q)%mJ z><;mtp}!sXzWxFawTr3BCFw#IdpTY$j=&>$zqE@P%B88eT}|L@0nP`DplmJ94hv!3 zS}`SJakvm4P1{zsH!N?gtgBzWmi=N!4fl8W<66-cxydTTCKBl-+sfv;q29O|eqD=- zcOyiu6K5Iru!^ygEYw`+pt(MvejJ5?->(z#Koh*RPE04a?6KeKRNgR3NXMP@=6Z1i z>qYxG?oskOqLaL$cfEXE36E1|M4adtX=asPS zfEW?B!Xktv%G5#Ixd|RQAV#M(>xD3@M3T(>hQV|saKLD9gs%>W*2p@m5SA`64-n*R zRzv(jELJ@f92CRCR}IP-bYRpb2(fnPKPX01?qldaC}t`?9U;W}B$TqXt)`j#1l~O; zrn>&hOgKH4&hdBSYk%kPghCt5BR`NwNENYi&*A?5OeC^@DP8Esq-i-kgsM(4U5!3W8FjitOoS&96>37%0iF`*F&Re)gM+>K8G#pNN z&8rJnkDe|aBE5xN7c5yX<{*qaax#1qgKb^7CC4VzE_h`^ z$n^st${QEDD^;MA=}>)Y$nJE3mLUeP(v#FT3_#c_NgaFS-~QRjv8&_zp2#eMf>o^C{O0XLpE^ z>faAQGy53pooND{O1VBr+=(4^pZxPkeT+3idQnJ2?i#>hgd`35L#9CI;_nDCX;Ret zgTE>y2_rpzlS=NE$4NfNzr){!8=q2UvPW5d^|c9GOr7_HR#+b zIk6FNtQWg;LLZKYB*f3GM5!>(QZ;U6$dDw}(LT|m#tjWRb&)J~JjC>49NgBR`BSl& ztYA>nkKG-0lMG&N@Q~?VrAWftRC_zPv6bmAP@V{qf_U3|Lo;=x{GrP01Q_h?@ z@0m05!MB(Nh(k2*h`UfV4jp^au0;)Au)||IjRo4lLu-6>MbdyV_(Z@QlFy&m&I^cx zN0Mp`IzI+I2QY^y?x>opsTVkhqVDtCO}zj*MAH(az3R6My+AsYRM_daQ|ody)i6p7 zR8l)D3Rp2=9K>M9{u@|c+-#;9XN->wzfm%^G(Nm!ET9EZ(#4oUsZ(JTikyUR0k$Ao zb_DC{6f8BmOtMqGMPL=SG$zyVNvIM)42pV#DIg3YuQAegPqMSTfEYx6V`CCsnFJ)f zz@_R<1_h8oh)90PaWMXou0s z$#xv{Yk&=`Z%?Fdd3FJ=MLD?`hDAB~YUAnt|UB zjXlO6W}I0J)9NT381bgL&fIIB6EVQrgi3;^IfL9`?4&;SY^r&H|+yP2}$>-4PuZZN8K30RU}G4AdM( z`9jU(T23inWP3!8Feb4888CE+vZ1`Iw5my3a0K{^HDAl10DnoG2S~RuSxX_D7RES) z`JOs&Y;v{yaZ{G+lmUtIj50UU3O}?=eU|KN@!sX?lVoR1@~&{HWfSehNb`LqX{Yk{ zZt#ZI_I{v5Dhc3B(f}Ig*uFUtK=8YHm_FdSu<1<$^@W2Jic##&*fF;3P z?UJ{Gj5OCMdGr$BZ(<)+jJZ}Ri!Z4Ul1!huPBUrai*MP0o&*&0&(Zxe{ zN;16Ha*_q$?11+V{%2jwG->}KJ3ZuTdrxssDh+oMsP8N2-ff3Q#D*HPT6l`v2e`?h z#_T$tVuU~ocQQha83mr=0{K52eeJMNV`fWFaYw~?${!IcjMu4kxYNL#LxaPeIyu|Z zJQ?{Sa1I@yYd#e&KpWcJk67zWnSl96yymD0PPIrM%Z*Y6U_e?(T2A#62m89(~O&hz3p} zSwTIH^N66@XJRAhFrJDi#w|U18-Z@h8P@Xx#t=OpLf1xLzSG;%rO?rDkGf+l@Mm#* zzv`ht|2F}?P5`1s_uj@-!g%T81rn_&45ls-O+j_O+i=HPGL8Duj-hjtFp=Ig(XNGg z1NgL>H!wI`G~;TDH|}67!6%zv~1$*;GzhbuxNddcOfUU+?SiZkD*abmZU?BNIlEF-?W?ISqB@_j!GrC3AvRK)$`m^MBD_Q! zVqeO}!FIzB=fjX#JCf^oE%ewz*s>M@`N%W3V2Nem_)4zLCeVF=t+4Jho&G!5&Q_jw zS+Cof5diqOfv2;4n>)+Sq%mP=&Bu}C1>7h44K;}7yl(gQ0`F7Q={a^io|ipp{%tke zt{Va9kEcT7Tz>t$X0}R~S-pyM?~O>u?EDJ-5&}Hw=xjR`Q#Qar#cVJgQ#LR_o|<2w zq0{ZgUf_SCQxB~E=DdWZMU7YSwyo3c^yqe)uZKd>L2N}tYIX#`KvCMon8qb=xgNUr zRk-m08dQU?{8hVHuMZX&#sYX9pEVuK&G(wmz*k^9kfSEze)tHi!m*%Nt!#jMy{)IQ zDqm=QY8^p64hwV7xkOIMk>*CFDhJ*fV}7jE<7q*~^O>J$CVxw+_fs{s$?uHwnV+fI z>=i;KB>K!vE{TdtiuhdVyMb!;nO`*Wz8(0PGa;cq*Y^U7(TCH1V@N_1|t+=R6|!6OQUF+ zP{KDlL8}T^l2&+cKWG0zTbwvVMzjFE4^U;IHUP3(vE^@wOF zyymy&yU@;B7?-eA$d_{a;jutn#Y3ZvS+w;XyT7+5C=7*JR5A~pzwbiyP=K$jdCOB! z<7xRqG%X-l#k%?i{7%n;6#)#EHF7R6&0UB!K*1u&_&dQZXll%$TNXiE0RF0|rJ}MU$!VEITa%7%UIHK-<$}v+y#2u}VgugLJ=vt1F6KnxoX$P0sMc#g(FtyF5j1M55&Mko`X!V|5CmINg@0J zuyeft=w%|U3&GZW$^U(!U6W=mu@X;1lGMG_6Pr%Q z)}mPoj z)4boQ)p>QD`J%s9>hEm*u3hg#o*vOWepOaPl^W@DxQ9>u0C4M3rToqzv?Z4OKe!|s zIw8{hQQbb5Z~qmyNByMI=gK$GxesjHdrY(F)CYEA`Oj)W^ahW4J;9f`#}OY_!t@PQ zyniL1(8*ekT>tb*CC%ntlQU1eW#%bW%z6DErm-KQNWW;BW`AhMm7i8(Xg)s(AINKu zNIs*)(0pB{f2E)0fmPFJ$p?8%0hW;|PKc$@h;A^ing`8g=5uCO9O$?W*b@%DzUJrV zu|Qs+fC=MmK%3Zkv}`qcDF7JJz6Y~b+a+EgFgya^qTDqYbE919A*O)A@Cba1-d=+d z2%uNw6~XdK0?g8GKJ{E{H;n=W zEGgBD_pgPCpzC5RyH~BXV#i5n1AzN-}>{i{LkPZ0uy8c|k3HWp_yP{^e3rL#(t%E~-WS0&YXsb=~}1E#4RC z@&)*pG+!4mz`v||`a8NKV6iu%Y{aM`YLNV+dip!meU%*_WnR%F=Rs9tLhSZe)zDqY zPd_^J0eI>I9#Hy%Fx1#ws7rEvvZ<3Pb%Pz3Erc4Xi#R7<^FB7T|G<8O`2Z}q_IUVA z@kO+BJyZ?h(WL&8>uv^G4)Dczm-CTJIT5O=>0Mn8#e@#b29bAlCW`4*b+nkDg{LN$ zfOmlkpDNp8&Y>Jfst2cq>olEFa8g7Kk4O>563&i~L==&#KP}NEkvtq#!hLLseqQpT zRcCsSA5`EEyfz;dF)UZ=)H3cju>E}kT%8(;zp*WTw75w`!n<##`G8s1^a7Gv2OD1c zl#nLjg%xaMFKTHlrn&X)y5V^hY+8qzZZUoLk)7qMV9PozbMLahcJ1)2iZGXk%XUg$ zMJUL$+@Q*IWrVD+<`s;IL*6W+$Jg6Mz6yrKC5eUt$%r_Vmqm1PJ>2;!1W1?{7jlC) z_EnfJc`wMw3LxR4af!h_iTZB9kYBvPj*kQ+E{Z!D?{MwV++iWH^uq=_CA@en;BlG2 zJ+qk?=(uQFYP>@eSJ@4{fX5lBUqG8y!QT3`OZ~!a8_}d`0Sf$di31RVA-?j#;J5B21 z%i;e z7x$A|yy}zJJ-HQ~p3y_hmP={QR=Yr=hmzW} z)y@yEU%}8}L352|}R=mSZd| zlvqpWD$l53gplu{79ZKQ>o7i;l2a`nUD?9-7FI~KkOkK;2(BBXfz`AO(}Fi>M{^+J zd9WAB5%YIg+MB@MJ3>s8v-xjU4AAy&)?kd=xzLol9|;&qOzx6XGPa;Tw~Uc?NzzGWHt3nbE-RyPLzYL3<&fqhlfro3p!MlP4i^ zz%f*AJ|YL;^mGWuW!64)?6PuY}{Y1kyjz9Zb9`>5y${T>@gmyU;rdmUx#SVrjhi9QkMk{A_<*&<#|(#!clC9#G+ zUN++Kfn`sK1f@+ZmxIzL5?vCbFV35!s1>wiCrlp6N>S6}cjHdm6c#QfRg(mq#hFa8pz>g%+jz*!OK9TA2 zXt!nB+s`)jn5jif^5Y+8;l&NN=dTzvH4B`wH zxvH^N26PiQp{`EQ4T325`iVSM@>N{&x&1>>@_MS2tLUSz?Tn`REFxo!dWN+TMz)6H zC-Iu-Z2pCSAmgzB$~Mkp-}%!>#!t5j1_itJGUTJ_%6hqJ56mkJ3U<2F2)u-bypA<~ zjlHN$1_U9gR#LOQkW>r^N~(;hTu`}1NPBrNfK5gKv7-2p@cnVLdoPx_4F5?MDkzSk z_kooS79`<^)Oa7{B16e2&<9EkbB)vZeUN$#B}=|+ouOaic$UNaV2HV?A_FNXYM>?A zc3wv!%izAR@!%y#VF)TmOuAbv_eL`2N@sH)MG#@ zb}k5udZh|4UsYunM6^WO-DSo{+@wWSb{&d43Xp+e1Xyy`QP(2?GWs4xX&6J0tPMXY zmWOgq0{h-}#14yUR>7bG=CE~~Pq(9};O~!OCnkdnsNl79^(ZR1iAy#40Tjd0Xuh>H z@CP&>Bhh$%4Nd<66CQ)mlG^nHJCam11dR!B4R!j)&W~ak8b-0zvVYR>+d|^iuD!Y6 z;FXL@b0U5G4VKP~O2a6&nqqbX^Oij+Z;zc2&GC>g$-#BR{lO=iyCnCRNYO%J zr?OksTo{(=6D^g;T~H^C7OgZ-)yLE-3@TBqR>SN0wNhR6i5t`!cs;)=&D+|g@TOFs zXrqd`fp(p;ooG>_%CSLyE%i8t)plFWqFavHi4mnL|Bc9>mdyx5(c7sEH}ddEi)yc_ zK$+s&LNyQ_)Tk>mtl3si_*#67V+}itaO_U`k69m9=Fg0Y#sdbTnFf9uR4~{ARq7LZ z>IB3HgDp^=KA}Y?;5^X@6wD_d)7}$s>tHNJQc)*CF^GcaKBf*Q?YyWCpy0-}vARGs z1$+soFrPj?X?KWV5T$*0Bk);N_Y~ez3N8li2LAK}8gvTZ$H)n@0u>ZX3&Hm?oQWYP z>#;Dra|L6W$bLPGfDRJDloXmERZ5SwM}RclfSd4EZY-L81Qu#f6<$#cF3X!hiF0Wv zqy*hxWoPGdJ=VZ(G(>lqY<0FQ@tG(Wt>D^o9DWp&fZNo8Df(UbXpgZvLWAy!ydVU> zpyj7w?P3GHq^ACg?+HHx12-G!p-O*2jm|)oX4^a#pr6y=Gq9esO!9Xd`ka4Znu$kcuCFv88Z00)h!U;co4$A%!mKm zF$<^EzydkY8iSY}tE@wiNxjRJ#pmN|M1WpIiW_yJY^^dL>UyMex9_Cv5})vBRC0kG zP{mD31N_9zP)ZY-(pjgtxyh6$nRK%nho92upJDatqQ>E;gbJzcy~U+aS;;=pRhgY+ zO~%KFZc4!ls&m^Xx@#skOH#SGRhf4-aY^0vwCJJCJDYSl1N_@GUzak#zg_V^=S+fv zafv&Wkp5if6P$FXOe!`$*Lek}-KAvH7n~iW`a>gd08q8H>~2*bUl2NTV%|NP(%Jm` z_MYl{zoa3j?WAaNuhPZ7ltrS9-%zE!G>dBgW~X+$PnnrE^UJkwujs9sbF=;qmwmrx z>vy~CKB`DtI0u@0vt!o~eN{Vc(HTgtPxRAVYIDI(ZZ96-F`i=dM5t+mD42xSv2qX-&ZWIkDkfZQe^2mn zF36tP1Z=oL+#JM`ZzcaFd}()j9S?+bL#{1pc({|EmE!LTB0u1r zbG^4tuKyP5{*|4V+y%F#Ro@o)FUx;3z4R5lzdOSMm3+PPceei~+WD28tvw6d7}h## zgjE+(dOw_%9~HS~mATq{0oqWk@hO~Q+8}&Xc%uq7(?iYMMl;Ssv18jjFto2|=Xqdg z54lwOpP(2%gp1@?H0)2fLNa^^%ycWQ`4bX(fJ+@`is3_GrduiQ0;D3thY+7zxQDfg zVfc`#;9f|xFW6a;3?M?LR(DxCdI63Jbt@P<#O%A7`uu`UywG+&7 z^hha2)^jwm6h^$~X;~>Yiotoe6t=vI#vbhMnpz5F9vi@-_T<3jKd>h((HIlw$%!}r zwdL!-6w@BYMI18Q9y+?V=@Du(%ru3M-eL zwEqfBcZ|g@ABfZj6xhF-Xxs{XKVkkA{}!P_Y3 zJX{_$^tO%qp0|s%y0IF^^cr8orx9lrVP`_Q47zbdgksrqqv((06{d?7aB}?#4mF9e z4z-24F$7KV7KD8jdg>Dh=)gW8TlMe^$R063C+Lc=PAF3|mlO*rKJlQkDttwd8R+_aQ|fjyL#$-)U{#3i)7Cnv z-bY=c%1O-}qLi8){6;qARljejQl54Yn#n20_A++b-=SZ3?XAO=Zn2Xyd2HmU0kE#~ zTqH&)-D0P%t>C1`bduXqgPt0xrtDoZH$91z1GpNcin`0qEik``$90OES#`=23PAf> z=EZ|S{6{HMU%RIRC_X@cMmhOjHfm$^@29+IC)ZcWR%}W3lq92ZkOuqd`DiD@SIJ-;2H!qf z5$!bcRWcYS$up7+1BrQbALYe3^?j9$#bJ8fOZUe(IlfAU-Xu9ek{*zlAotRm7$>b~ zB|~o@_vk8Bsz;DiQ;eKS#^m@u-7MAjDMq?tq*XFlhaE?I=$XqfuU0Zxhmw9nsQJcT z2I(YqfGI}iP;A*^v6TA{CO(Gez}iin|A9vEj7yFF$IfrWjpmqL46_SXdm|8{WV3k` zetIcb1>P;5MuU7N&R900E%n0WHxE+2YDLX^5=~lxeaYDH`z9M8h$$LditnOia2U60IiwCumn4C!KDs z<3y<#d#(JB!^N|=jM9h5d&yQ~|0rr$$7vce68t+QzdFdCjHYK5`X8g&b(|s`Fpu1t zg&=}v9?(F<`QtmI!y5S!Lo=_d4E87E`&s$^q4a33QxGx)3Ayst@>+g`$V^O8@%G%{ zd2#;14529|w!^{*JV3_KbNqvlkoB+Vd@+8+(oBq3e0gV0KjLU6CMyn>C>*G-o*ywZ zQ#wB}bi|+s2M>LMwO^XP!cMX>{SVQczwGRg2a#Sx6Tk~g_9I?q2J8WQW8?K~BlV%r zjYB{pBCxn^i=${qo72qq&@FyM6ytR4b9fX`&-++B{AJa&3eda{0_t&Rn<3bX3dQNV z4lSP5+-rt|7^}E@Sy~}B1p@yu*k7S!*j_y(suL=8g3hEmVVsgt`#7J309&mV#B)kW z?W55aMAmqhngwde^Ga;*=Lf6T2{?MhgQ$UY9pXX_D=Qn}_6qTesnzZR^NvyKR^oLQJ2iN>z!yNqim*Rz0sQysz?}2(Bb5jl(pxBhE>Xs4-;lAvzo96iC!qQrYpK;_w6%;zQIk-pTbcY78s+ zLE=WFx$)=&w#(vXrlavrYIuvvSTIp+*%RXE=}0Fs3_#k z2y(|BxPki{-4^B4lQ6QJQY)gI!fdX|Xh>vh4YbHiu^S>g&-~q734{ABsK=wmTgCv) z#cjh&D%om}9c({PdI}1)({`}g&vC+NLn5k*@uZd=k!YsiMKbY1qLbuhJP99uloFHh z;S3>3svA=pLOM!glTg%Ll|vP6@K|y5WfIgti6eD1s_0CT(?mi@@K~v$ddW@$i5~Un zV;rHmu}&sEn+#omAtYwK66@epNLVFkU$T=IbxS26XmNp%(EZ^cd@0!vTbtqim-?w09i7X3K25)|2ns<&SWQlxYu95^t zs9P-h#2d;7MT+s?%*mxX6i z>WI~9s6E45oGPpimIs4vrYIBj%oFfy8ek@2cl9$EYWGC-sBFbOxwmm#=1;L{6q$*U z%V;4Mm_HLTY$s7dNpT5jZl;qL!6+e?nt@``FPToJ+;If?a*Q8Kq+wYYw{ONfwQ9Nb z)~1qyLV1VG3U{POFj@#<6Q~jO-100ZQ9_4UD*r^gvz&tPCY1~xO1gQ1Q|Rts{fUMo zIBEwgEJ8mL+OCD%!73>$1Sg!vBsw+q+5rb- zzXiCjuDF6&>+d6k$-~%Y?Uga&hMPB-amGm;hA~kdlU*0(>Z;0hhDuvOphwnol0$C+ ztFR^2Y~*0GQ9Vd$Mgf34oTk3@oNQ_Rm(&EN7(jvv;xw(Q2U)}b5=7T8^j$rOE(VY! z6`K!=0VK%tU+AWM2r>qcus}IQPvk==F@Pkgg-o>v1*5|$I-KuhHO#7H;0W(Hse7eV z^MaNQlFq7RAc^my|D>ZNj3L1oa*|$8#}_bigeA@iTAz-#X52_p$3fL^4GR80CwQo6 zebF_oY4Yw$29dBk?zrq7uVgwks80qOuGnRxOWfL)rCe?7<-qS}&=f=AY~RGZ(d-4& z@p$ZDSP$@<9fPvP4dMDoyW{<MJGo7R}3QpRjWa=-RTd=k-K38({7oA;o+9PE{#TPnJ zXIPzxG3)UeAgh`npqJcggEH z@wLA0*4J<3^;fY+U-#mhwDKP>bw z>#zFyo4j5Uzw7HC`g&eoFN;6*^@6_sC9nU8i~9PvzFv~oE8?=e-g`y-qZwD^^{Tk4 zu9l&%*tEf$g5hhk*&1yXAllxuA`>e9(`Ex4JM#h(uKnp*$#`|2K9tcCooiSTI?(gQ zPE9)9$cc2)^`^GlD;dV_+0*z91Bv<-Il0uj5u`mM**&@&zmn|BJJ9jyg+@+RC}Y|^ zx>HFjWQpz=Mf;h{*mjrBfleDmnT?(FP{z1>4We_cp#r0C$5KU+lSF;;oTysv>w8z; zE^jibheRw@7Gu?LZyx4k_qMw$856&=47Xt%Vb^V4sJsk}!)@lQDk2Xz`lBvnHACc* zFDE+5@0bTZgXM5}QX`mN%7cQ-AUWphGn_?1D%Wp>(Ut?^+;7zqpTq4i&RlEuG5$gL zavofnQTJ3bFjRK8@h4Z;uWcM0)727_90NoMCUahuWoL;KO;d7wp%m82X(aI?nTP`2 z8^L%HqRE`+42mZDGU>}!&=VLd>fh7&LuJrswlALQ6+scj2!j8-S~sE>M`4wLx+o-4o_~a~F&v z&9KXHI*gZp10;F~9x2;VQ&YlKlmpqTmK8eLq5F$GqK{C0abuz5gdAW7rI(;vG9B@) z+FcqbhEE(+vNNc_Vd9YFRexHfIIR43+)Ak9{jRYGzyPY!t+IIU_byBJX4Gy%#1S?B z2AaVqs#Hej`MJ72anvQ{Gj5ZHMf}jj12r|!0qS{wZ0>=_gYl<)j&_drh55u!F0cCG z^g+I;NO4Tn%LU!~I2^OY@p^xjm1A7sEHWi4>p1tuD5EL+__Ps65am6=JZXN2C|}*7 z+8s6~7)_^^#)jWf$xsb;+5b($KgFSJ+e}*v@|Z# z)NW9H)7wE`V%$cu+P1?DkAiC17&qM74PzEJc<7~ePE85gG%f~|hX-S6Lp!LwgK(>4 z9cky(m&gsw!GDq69>a(cgLlnF}cW}eW22hE2wREyOaJNl0#v5=}$%5-# zFKn5Z2@UOM9Q#y)&Ddka8)5?ve7cHlk#(&$*lIBx?(}cN(E9`Q=Pd}ZGTRuB4&4F4 z+Yx=lG_?w$Lt|KBnyobsmmMmVHxuW@AqcFBqG4g%KNNJ+&^f>X12#|C&=8TGcQ;rb zovyRGF1=)=Who`|fpbW-U_f9WT$Njs&}WYhV?FKTHgTR7f(TCL+Q zB4Q^m>(00&nmNgPR;e@99mwkw=hUXo>dxkk7Qbqq{4T2M=A=dZrrvUidwGw(9vtxb zyUO~KDxzlop_!^iB(q$cS9;fF{z@Fdhr{#+4`6rc5jdko{Hbhcm-UzaEB%5_*LD1_ z^uJUftbcUo*eWJ2Dl_aqD$85)}N6Tse(R+Mg|1xn^83C@6zpLZqT81WdF8XeLvt`OUGY#t7 z(Xl&Pf@O!?0s0P3O5%W3i(s}c6ros{EP%dnlj*>e^^P&@UpqjXjAKZqX^G0Jfo~im zFEEc?CF15=E=AnghbWr~p(toE+Z z8#h81ei~G6YaFk*<3>!NPr1|;rWo$dXpXdkPELk|yJ2a(Om}s1nn}1@QZF;ba5t=t zm+9+HPJ z7#L^yDs$xSol5zoPQ6-O$062m!#WM`!6i8SWcZ4j_w=z+;-AHlCppPz=Riys{Lk=f z`m+X2&UP|G%5g&;9X=#62#!FDbJ-8s@i{g8h&h{>sCuCKtKJe}V5jytz=X}L2)yN@ z2(LSi@wvRlh|M#ogOlkS$M~EiUy&r^b6EvQ{kVfu+c%E!x#Es!)ngr;Ccbfu&q*?? Iqtp2R0bIWiv;Y7A delta 44290 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 NP~;ybbJVf8@PDS9I!pin diff --git a/lms/djangoapps/oauth_dispatch/__init__.py b/lms/djangoapps/oauth_dispatch/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/lms/djangoapps/oauth_dispatch/adapters/__init__.py b/lms/djangoapps/oauth_dispatch/adapters/__init__.py new file mode 100644 index 0000000000..1f6227b50a --- /dev/null +++ b/lms/djangoapps/oauth_dispatch/adapters/__init__.py @@ -0,0 +1,7 @@ +""" +Adapters to provide a common interface to django-oauth2-provider (DOP) and +django-oauth-toolkit (DOT). +""" + +from .dop import DOPAdapter +from .dot import DOTAdapter diff --git a/lms/djangoapps/oauth_dispatch/adapters/dop.py b/lms/djangoapps/oauth_dispatch/adapters/dop.py new file mode 100644 index 0000000000..b12994b96f --- /dev/null +++ b/lms/djangoapps/oauth_dispatch/adapters/dop.py @@ -0,0 +1,70 @@ +""" +Adapter to isolate django-oauth2-provider dependencies +""" + +from provider.oauth2 import models +from provider import constants, scope + + +class DOPAdapter(object): + """ + Standard interface for working with django-oauth2-provider + """ + + backend = object() + + def create_confidential_client(self, name, user, redirect_uri, client_id=None): + """ + Create an oauth client application that is confidential. + """ + return models.Client.objects.create( + name=name, + user=user, + client_id=client_id, + redirect_uri=redirect_uri, + client_type=constants.CONFIDENTIAL, + ) + + def create_public_client(self, name, user, redirect_uri, client_id=None): + """ + Create an oauth client application that is public. + """ + return models.Client.objects.create( + name=name, + user=user, + client_id=client_id, + redirect_uri=redirect_uri, + client_type=constants.PUBLIC, + ) + + def get_client(self, **filters): + """ + Get the oauth client application with the specified filters. + + Wraps django's queryset.get() method. + """ + return models.Client.objects.get(**filters) + + def get_client_for_token(self, token): + """ + Given an AccessToken object, return the associated client application. + """ + return token.client + + def get_access_token(self, token_string): + """ + Given a token string, return the matching AccessToken object. + """ + return models.AccessToken.objects.get(token=token_string) + + def normalize_scopes(self, scopes): + """ + Given a list of scopes, return a space-separated list of those scopes. + """ + return ' '.join(scopes) + + def get_token_scope_names(self, token): + """ + Given an access token object, return its scopes. + """ + return scope.to_names(token.scope) diff --git a/lms/djangoapps/oauth_dispatch/adapters/dot.py b/lms/djangoapps/oauth_dispatch/adapters/dot.py new file mode 100644 index 0000000000..84dcb7ece4 --- /dev/null +++ b/lms/djangoapps/oauth_dispatch/adapters/dot.py @@ -0,0 +1,73 @@ +""" +Adapter to isolate django-oauth-toolkit dependencies +""" + +from oauth2_provider import models + + +class DOTAdapter(object): + """ + Standard interface for working with django-oauth-toolkit + """ + + backend = object() + + def create_confidential_client(self, name, user, redirect_uri, client_id=None): + """ + Create an oauth client application that is confidential. + """ + return models.Application.objects.create( + name=name, + user=user, + client_id=client_id, + client_type=models.Application.CLIENT_CONFIDENTIAL, + authorization_grant_type=models.Application.GRANT_AUTHORIZATION_CODE, + redirect_uris=redirect_uri, + ) + + def create_public_client(self, name, user, redirect_uri, client_id=None): + """ + Create an oauth client application that is public. + """ + return models.Application.objects.create( + name=name, + user=user, + client_id=client_id, + client_type=models.Application.CLIENT_PUBLIC, + authorization_grant_type=models.Application.GRANT_PASSWORD, + redirect_uris=redirect_uri, + ) + + def get_client(self, **filters): + """ + Get the oauth client application with the specified filters. + + Wraps django's queryset.get() method. + """ + return models.Application.objects.get(**filters) + + def get_client_for_token(self, token): + """ + Given an AccessToken object, return the associated client application. + """ + return token.application + + def get_access_token(self, token_string): + """ + Given a token string, return the matching AccessToken object. + """ + return models.AccessToken.objects.get(token=token_string) + + def normalize_scopes(self, scopes): + """ + Given a list of scopes, return a space-separated list of those scopes. + """ + if not scopes: + scopes = ['default'] + return ' '.join(scopes) + + def get_token_scope_names(self, token): + """ + Given an access token object, return its scopes. + """ + return list(token.scopes) diff --git a/lms/djangoapps/oauth_dispatch/tests/__init__.py b/lms/djangoapps/oauth_dispatch/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/lms/djangoapps/oauth_dispatch/tests/constants.py b/lms/djangoapps/oauth_dispatch/tests/constants.py new file mode 100644 index 0000000000..b38868bcfb --- /dev/null +++ b/lms/djangoapps/oauth_dispatch/tests/constants.py @@ -0,0 +1,5 @@ +""" +Constants for testing purposes +""" + +DUMMY_REDIRECT_URL = u'https://example.edx/redirect' diff --git a/lms/djangoapps/oauth_dispatch/tests/mixins.py b/lms/djangoapps/oauth_dispatch/tests/mixins.py new file mode 100644 index 0000000000..8b16c53fc2 --- /dev/null +++ b/lms/djangoapps/oauth_dispatch/tests/mixins.py @@ -0,0 +1,3 @@ +""" +OAuth Dispatch test mixins +""" diff --git a/lms/djangoapps/oauth_dispatch/tests/test_dop_adapter.py b/lms/djangoapps/oauth_dispatch/tests/test_dop_adapter.py new file mode 100644 index 0000000000..6dfe9ac9d4 --- /dev/null +++ b/lms/djangoapps/oauth_dispatch/tests/test_dop_adapter.py @@ -0,0 +1,77 @@ +""" +Tests for DOP Adapter +""" + +from datetime import timedelta + +import ddt +from django.test import TestCase +from django.utils.timezone import now +from provider.oauth2 import models +from provider import constants + +from student.tests.factories import UserFactory + +from ..adapters import DOPAdapter +from .constants import DUMMY_REDIRECT_URL + + +@ddt.ddt +class DOPAdapterTestCase(TestCase): + """ + Test class for DOPAdapter. + """ + + adapter = DOPAdapter() + + def setUp(self): + super(DOPAdapterTestCase, self).setUp() + self.user = UserFactory() + self.public_client = self.adapter.create_public_client( + name='public client', + user=self.user, + redirect_uri=DUMMY_REDIRECT_URL, + client_id='public-client-id', + ) + self.confidential_client = self.adapter.create_confidential_client( + name='confidential client', + user=self.user, + redirect_uri=DUMMY_REDIRECT_URL, + client_id='confidential-client-id', + ) + + @ddt.data( + ('confidential', constants.CONFIDENTIAL), + ('public', constants.PUBLIC), + ) + @ddt.unpack + def test_create_client(self, client_name, client_type): + client = getattr(self, '{}_client'.format(client_name)) + self.assertIsInstance(client, models.Client) + self.assertEqual(client.client_id, '{}-client-id'.format(client_name)) + self.assertEqual(client.client_type, client_type) + + def test_get_client(self): + client = self.adapter.get_client(client_type=constants.CONFIDENTIAL) + self.assertIsInstance(client, models.Client) + self.assertEqual(client.client_type, constants.CONFIDENTIAL) + + def test_get_client_not_found(self): + with self.assertRaises(models.Client.DoesNotExist): + self.adapter.get_client(client_id='not-found') + + def test_get_client_for_token(self): + token = models.AccessToken( + user=self.user, + client=self.public_client, + ) + self.assertEqual(self.adapter.get_client_for_token(token), self.public_client) + + def test_get_access_token(self): + token = models.AccessToken.objects.create( + token='token-id', + client=self.public_client, + user=self.user, + expires=now() + timedelta(days=30), + ) + self.assertEqual(self.adapter.get_access_token(token_string='token-id'), token) diff --git a/lms/djangoapps/oauth_dispatch/tests/test_dot_adapter.py b/lms/djangoapps/oauth_dispatch/tests/test_dot_adapter.py new file mode 100644 index 0000000000..a623e8cc6d --- /dev/null +++ b/lms/djangoapps/oauth_dispatch/tests/test_dot_adapter.py @@ -0,0 +1,76 @@ +""" +Tests for DOT Adapter +""" + +from datetime import timedelta + +import ddt +from django.test import TestCase +from django.utils.timezone import now +from oauth2_provider import models + +from student.tests.factories import UserFactory + +from ..adapters import DOTAdapter +from .constants import DUMMY_REDIRECT_URL + + +@ddt.ddt +class DOTAdapterTestCase(TestCase): + """ + Test class for DOTAdapter. + """ + + adapter = DOTAdapter() + + def setUp(self): + super(DOTAdapterTestCase, self).setUp() + self.user = UserFactory() + self.public_client = self.adapter.create_public_client( + name='public app', + user=self.user, + redirect_uri=DUMMY_REDIRECT_URL, + client_id='public-client-id', + ) + self.confidential_client = self.adapter.create_confidential_client( + name='confidential app', + user=self.user, + redirect_uri=DUMMY_REDIRECT_URL, + client_id='confidential-client-id', + ) + + @ddt.data( + ('confidential', models.Application.CLIENT_CONFIDENTIAL), + ('public', models.Application.CLIENT_PUBLIC), + ) + @ddt.unpack + def test_create_client(self, client_name, client_type): + client = getattr(self, '{}_client'.format(client_name)) + self.assertIsInstance(client, models.Application) + self.assertEqual(client.client_id, '{}-client-id'.format(client_name)) + self.assertEqual(client.client_type, client_type) + + def test_get_client(self): + client = self.adapter.get_client(client_type=models.Application.CLIENT_CONFIDENTIAL) + self.assertIsInstance(client, models.Application) + self.assertEqual(client.client_type, models.Application.CLIENT_CONFIDENTIAL) + + def test_get_client_not_found(self): + with self.assertRaises(models.Application.DoesNotExist): + self.adapter.get_client(client_id='not-found') + + def test_get_client_for_token(self): + token = models.AccessToken( + user=self.user, + application=self.public_client, + ) + self.assertEqual(self.adapter.get_client_for_token(token), self.public_client) + + def test_get_access_token(self): + token = models.AccessToken.objects.create( + token='token-id', + application=self.public_client, + user=self.user, + expires=now() + timedelta(days=30), + ) + self.assertEqual(self.adapter.get_access_token(token_string='token-id'), token) diff --git a/lms/djangoapps/oauth_dispatch/tests/test_views.py b/lms/djangoapps/oauth_dispatch/tests/test_views.py new file mode 100644 index 0000000000..b8fb7435ff --- /dev/null +++ b/lms/djangoapps/oauth_dispatch/tests/test_views.py @@ -0,0 +1,251 @@ +""" +Tests for Blocks Views +""" + +import json + +import ddt +from django.test import RequestFactory, TestCase +from django.core.urlresolvers import reverse +import httpretty + +from student.tests.factories import UserFactory +from third_party_auth.tests.utils import ThirdPartyOAuthTestMixin, ThirdPartyOAuthTestMixinGoogle + +from .. import adapters +from .. import views +from .constants import DUMMY_REDIRECT_URL + + +class _DispatchingViewTestCase(TestCase): + """ + Base class for tests that exercise DispatchingViews. + """ + dop_adapter = adapters.DOPAdapter() + dot_adapter = adapters.DOTAdapter() + + view_class = None + url = None + + def setUp(self): + super(_DispatchingViewTestCase, self).setUp() + self.user = UserFactory() + self.dot_app = self.dot_adapter.create_public_client( + name='test dot application', + user=self.user, + redirect_uri=DUMMY_REDIRECT_URL, + client_id='dot-app-client-id', + ) + self.dop_client = self.dop_adapter.create_public_client( + name='test dop client', + user=self.user, + redirect_uri=DUMMY_REDIRECT_URL, + client_id='dop-app-client-id', + ) + + def _post_request(self, user, client): + """ + Call the view with a POST request objectwith the appropriate format, + returning the response object. + """ + return self.client.post(self.url, self._post_body(user, client)) + + def _post_body(self, user, client): + """ + Return a dictionary to be used as the body of the POST request + """ + raise NotImplementedError() + + +@ddt.ddt +class TestAccessTokenView(_DispatchingViewTestCase): + """ + Test class for AccessTokenView + """ + + view_class = views.AccessTokenView + url = reverse('access_token') + + def _post_body(self, user, client): + """ + Return a dictionary to be used as the body of the POST request + """ + return { + 'client_id': client.client_id, + 'grant_type': 'password', + 'username': user.username, + 'password': 'test', + } + + @ddt.data('dop_client', 'dot_app') + def test_access_token_fields(self, client_attr): + client = getattr(self, client_attr) + response = self._post_request(self.user, client) + self.assertEqual(response.status_code, 200) + data = json.loads(response.content) + self.assertIn('access_token', data) + self.assertIn('expires_in', data) + self.assertIn('scope', data) + self.assertIn('token_type', data) + + def test_dot_access_token_provides_refresh_token(self): + response = self._post_request(self.user, self.dot_app) + self.assertEqual(response.status_code, 200) + data = json.loads(response.content) + self.assertIn('refresh_token', data) + + def test_dop_public_client_access_token(self): + response = self._post_request(self.user, self.dop_client) + self.assertEqual(response.status_code, 200) + data = json.loads(response.content) + self.assertNotIn('refresh_token', data) + + +@ddt.ddt +@httpretty.activate +class TestAccessTokenExchangeView(ThirdPartyOAuthTestMixinGoogle, ThirdPartyOAuthTestMixin, _DispatchingViewTestCase): + """ + Test class for AccessTokenExchangeView + """ + + view_class = views.AccessTokenExchangeView + url = reverse('exchange_access_token', kwargs={'backend': 'google-oauth2'}) + + def _post_body(self, user, client): + return { + 'client_id': client.client_id, + 'access_token': self.access_token, + } + + @ddt.data('dop_client', 'dot_app') + def test_access_token_exchange_calls_dispatched_view(self, client_attr): + client = getattr(self, client_attr) + self.oauth_client = client + self._setup_provider_response(success=True) + response = self._post_request(self.user, client) + self.assertEqual(response.status_code, 200) + + +@ddt.ddt +class TestAuthorizationView(TestCase): + """ + Test class for AuthorizationView + """ + + dop_adapter = adapters.DOPAdapter() + + def setUp(self): + super(TestAuthorizationView, self).setUp() + self.user = UserFactory() + self.dop_client = self._create_confidential_client(user=self.user, client_id='dop-app-client-id') + + def _create_confidential_client(self, user, client_id): + """ + Create a confidential client suitable for testing purposes. + """ + return self.dop_adapter.create_confidential_client( + name='test_app', + user=user, + client_id=client_id, + redirect_uri=DUMMY_REDIRECT_URL + ) + + def test_authorization_view(self): + self.client.login(username=self.user.username, password='test') + response = self.client.post( + '/oauth2/authorize/', + { + 'client_id': self.dop_client.client_id, # TODO: DOT is not yet supported (MA-2124) + 'response_type': 'code', + 'state': 'random_state_string', + 'redirect_uri': DUMMY_REDIRECT_URL, + }, + follow=True, + ) + + self.assertEqual(response.status_code, 200) + + # check form is in context and form params are valid + context = response.context # pylint: disable=no-member + self.assertIn('form', context) + self.assertIsNone(context['form']['authorize'].value()) + + self.assertIn('oauth_data', context) + oauth_data = context['oauth_data'] + self.assertEqual(oauth_data['redirect_uri'], DUMMY_REDIRECT_URL) + self.assertEqual(oauth_data['state'], 'random_state_string') + + +class TestViewDispatch(TestCase): + """ + Test that the DispatchingView dispatches the right way. + """ + + dop_adapter = adapters.DOPAdapter() + dot_adapter = adapters.DOTAdapter() + + def setUp(self): + super(TestViewDispatch, self).setUp() + self.user = UserFactory() + self.view = views._DispatchingView() # pylint: disable=protected-access + self.dop_adapter.create_public_client( + name='', + user=self.user, + client_id='dop-id', + redirect_uri=DUMMY_REDIRECT_URL + ) + self.dot_adapter.create_public_client( + name='', + user=self.user, + client_id='dot-id', + redirect_uri=DUMMY_REDIRECT_URL + ) + + def assert_is_view(self, view_candidate): + """ + Assert that a given object is a view. That is, it is callable, and + takes a request argument. Note: while technically, the request argument + could take any name, this assertion requires the argument to be named + `request`. This is good practice. You should do it anyway. + """ + _msg_base = u'{view} is not a view: {reason}' + msg_not_callable = _msg_base.format(view=view_candidate, reason=u'it is not callable') + msg_no_request = _msg_base.format(view=view_candidate, reason=u'it has no request argument') + self.assertTrue(hasattr(view_candidate, '__call__'), msg_not_callable) + args = view_candidate.func_code.co_varnames + self.assertTrue(args, msg_no_request) + self.assertEqual(args[0], 'request') + + def _get_request(self, client_id): + """ + Return a request with the specified client_id in the body + """ + return RequestFactory().post('/', {'client_id': client_id}) + + def test_dispatching_to_dot(self): + request = self._get_request('dot-id') + self.assertEqual(self.view.select_backend(request), self.dot_adapter.backend) + + def test_dispatching_to_dop(self): + request = self._get_request('dop-id') + self.assertEqual(self.view.select_backend(request), self.dop_adapter.backend) + + def test_dispatching_with_no_client(self): + request = self._get_request(None) + self.assertEqual(self.view.select_backend(request), self.dop_adapter.backend) + + def test_dispatching_with_invalid_client(self): + request = self._get_request('abcesdfljh') + self.assertEqual(self.view.select_backend(request), self.dop_adapter.backend) + + def test_get_view_for_dot(self): + view_object = views.AccessTokenView() + self.assert_is_view(view_object.get_view_for_backend(self.dot_adapter.backend)) + + def test_get_view_for_dop(self): + view_object = views.AccessTokenView() + self.assert_is_view(view_object.get_view_for_backend(self.dop_adapter.backend)) + + def test_get_view_for_no_backend(self): + view_object = views.AccessTokenView() + self.assertRaises(KeyError, view_object.get_view_for_backend, None) diff --git a/lms/djangoapps/oauth_dispatch/urls.py b/lms/djangoapps/oauth_dispatch/urls.py new file mode 100644 index 0000000000..59e9068bdb --- /dev/null +++ b/lms/djangoapps/oauth_dispatch/urls.py @@ -0,0 +1,25 @@ +""" +OAuth2 wrapper urls +""" + +from django.conf import settings +from django.conf.urls import patterns, url +from django.views.decorators.csrf import csrf_exempt + +from . import views + + +urlpatterns = patterns( + '', + # TODO: authorize/ URL not yet supported for DOT (MA-2124) + url(r'^access_token/?$', csrf_exempt(views.AccessTokenView.as_view()), name='access_token'), +) + +if settings.FEATURES.get('ENABLE_THIRD_PARTY_AUTH'): + urlpatterns += ( + url( + r'^exchange_access_token/(?P[^/]+)/$', + csrf_exempt(views.AccessTokenExchangeView.as_view()), + name='exchange_access_token', + ), + ) diff --git a/lms/djangoapps/oauth_dispatch/views.py b/lms/djangoapps/oauth_dispatch/views.py new file mode 100644 index 0000000000..22652f127b --- /dev/null +++ b/lms/djangoapps/oauth_dispatch/views.py @@ -0,0 +1,89 @@ +""" +Views that dispatch processing of OAuth requests to django-oauth2-provider or +django-oauth-toolkit as appropriate. +""" + +from __future__ import unicode_literals + +from django.views.generic import View +from edx_oauth2_provider import views as dop_views # django-oauth2-provider views +from oauth2_provider import models as dot_models, views as dot_views # django-oauth-toolkit + +from auth_exchange import views as auth_exchange_views + +from . import adapters + + +class _DispatchingView(View): + """ + Base class that route views to the appropriate provider view. The default + behavior routes based on client_id, but this can be overridden by redefining + `select_backend()` if particular views need different behavior. + """ + # pylint: disable=no-member + + dot_adapter = adapters.DOTAdapter() + dop_adapter = adapters.DOPAdapter() + + def dispatch(self, request, *args, **kwargs): + """ + Dispatch the request to the selected backend's view. + """ + backend = self.select_backend(request) + view = self.get_view_for_backend(backend) + return view(request, *args, **kwargs) + + def select_backend(self, request): + """ + Given a request that specifies an oauth `client_id`, return the adapter + for the appropriate OAuth handling library. If the client_id is found + in a django-oauth-toolkit (DOT) Application, use the DOT adapter, + otherwise use the django-oauth2-provider (DOP) adapter, and allow the + calls to fail normally if the client does not exist. + """ + + if dot_models.Application.objects.filter(client_id=self._get_client_id(request)).exists(): + return self.dot_adapter.backend + else: + return self.dop_adapter.backend + + def get_view_for_backend(self, backend): + """ + Return the appropriate view from the requested backend. + """ + if backend == self.dot_adapter.backend: + return self.dot_view.as_view() + elif backend == self.dop_adapter.backend: + return self.dop_view.as_view() + else: + raise KeyError('Failed to dispatch view. Invalid backend {}'.format(backend)) + + def _get_client_id(self, request): + """ + Return the client_id from the provided request + """ + return request.POST.get('client_id') + + +class AccessTokenView(_DispatchingView): + """ + Handle access token requests. + """ + dot_view = dot_views.TokenView + dop_view = dop_views.AccessTokenView + + +class AuthorizationView(_DispatchingView): + """ + Part of the authorization flow. + """ + dop_view = dop_views.Capture + dot_view = dot_views.AuthorizationView + + +class AccessTokenExchangeView(_DispatchingView): + """ + Exchange a third party auth token. + """ + dop_view = auth_exchange_views.DOPAccessTokenExchangeView + dot_view = auth_exchange_views.DOTAccessTokenExchangeView diff --git a/lms/djangoapps/support/tests/test_programs.py b/lms/djangoapps/support/tests/test_programs.py index 9d2356e40f..2bad288ddf 100644 --- a/lms/djangoapps/support/tests/test_programs.py +++ b/lms/djangoapps/support/tests/test_programs.py @@ -2,7 +2,7 @@ from django.core.urlresolvers import reverse from django.test import TestCase import mock -from oauth2_provider.tests.factories import AccessTokenFactory, ClientFactory +from edx_oauth2_provider.tests.factories import AccessTokenFactory, ClientFactory from openedx.core.djangoapps.programs.tests.mixins import ProgramsApiConfigMixin from student.tests.factories import UserFactory diff --git a/lms/envs/common.py b/lms/envs/common.py index bcb6bb156a..9b1c85f206 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -1834,11 +1834,14 @@ INSTALLED_APPS = ( 'external_auth', 'django_openid_auth', - # OAuth2 Provider + # django-oauth2-provider (deprecated) 'provider', 'provider.oauth2', 'edx_oauth2_provider', + # django-oauth-toolkit + 'oauth2_provider', + 'third_party_auth', # We don't use this directly (since we use OAuth2), but we need to install it anyway. diff --git a/lms/urls.py b/lms/urls.py index 964f7a495c..18c5cb80c4 100644 --- a/lms/urls.py +++ b/lms/urls.py @@ -820,10 +820,19 @@ if settings.FEATURES.get('AUTH_USE_OPENID_PROVIDER'): if settings.FEATURES.get('ENABLE_OAUTH2_PROVIDER'): urlpatterns += ( + # These URLs dispatch to django-oauth-toolkit or django-oauth2-provider as appropriate. + # Developers should use these routes, to maintain compatibility for existing client code + url(r'^oauth2/', include('lms.djangoapps.oauth_dispatch.urls')), + # These URLs contain the django-oauth2-provider default behavior. It exists to provide + # URLs for django-oauth2-provider to call using reverse() with the oauth2 namespace, and + # also to maintain support for views that have not yet been wrapped in dispatch views. url(r'^oauth2/', include('edx_oauth2_provider.urls', namespace='oauth2')), + # The /_o/ prefix exists to provide a target for code in django-oauth-toolkit that + # uses reverse() with the 'oauth2_provider' namespace. Developers should not access these + # views directly, but should rather use the wrapped views at /oauth2/ + url(r'^_o/', include('oauth2_provider.urls', namespace='oauth2_provider')), ) - if settings.FEATURES.get('ENABLE_LMS_MIGRATION'): urlpatterns += ( url(r'^migrate/modules$', 'lms_migration.migrate.manage_modulestores'), @@ -888,14 +897,6 @@ if settings.FEATURES.get('ENABLE_THIRD_PARTY_AUTH'): # OAuth token exchange if settings.FEATURES.get('ENABLE_OAUTH2_PROVIDER'): - if settings.FEATURES.get('ENABLE_THIRD_PARTY_AUTH'): - urlpatterns += ( - url( - r'^oauth2/exchange_access_token/(?P[^/]+)/$', - auth_exchange.views.AccessTokenExchangeView.as_view(), - name="exchange_access_token" - ), - ) urlpatterns += ( url( r'^oauth2/login/$', diff --git a/openedx/core/djangoapps/programs/tasks/v1/tests/test_tasks.py b/openedx/core/djangoapps/programs/tasks/v1/tests/test_tasks.py index 93cf9a5370..397bd593c1 100644 --- a/openedx/core/djangoapps/programs/tasks/v1/tests/test_tasks.py +++ b/openedx/core/djangoapps/programs/tasks/v1/tests/test_tasks.py @@ -12,8 +12,8 @@ from celery.exceptions import MaxRetriesExceededError from django.conf import settings from django.test import override_settings, TestCase from edx_rest_api_client.client import EdxRestApiClient - from edx_oauth2_provider.tests.factories import ClientFactory + from openedx.core.djangoapps.credentials.tests.mixins import CredentialsApiConfigMixin from openedx.core.djangoapps.programs.tests.mixins import ProgramsApiConfigMixin from openedx.core.djangoapps.programs.tasks.v1 import tasks diff --git a/openedx/core/lib/api/authentication.py b/openedx/core/lib/api/authentication.py index 8e773e2f84..95a296d5b4 100644 --- a/openedx/core/lib/api/authentication.py +++ b/openedx/core/lib/api/authentication.py @@ -2,10 +2,13 @@ import logging +import django.utils.timezone from rest_framework.authentication import SessionAuthentication from rest_framework import exceptions as drf_exceptions from rest_framework_oauth.authentication import OAuth2Authentication -from rest_framework_oauth.compat import oauth2_provider, provider_now + +from provider.oauth2 import models as dop_models +from oauth2_provider import models as dot_models from openedx.core.lib.api.exceptions import AuthenticationFailed @@ -114,21 +117,44 @@ class OAuth2AuthenticationAllowInactiveUser(OAuth2Authentication): def authenticate_credentials(self, request, access_token): """ Authenticate the request, given the access token. - Overrides base class implementation to discard failure if user is inactive. + + Overrides base class implementation to discard failure if user is + inactive. """ - token_query = oauth2_provider.oauth2.models.AccessToken.objects.select_related('user') - token = token_query.filter(token=access_token).first() + + token = self.get_access_token(access_token) if not token: raise AuthenticationFailed({ u'error_code': OAUTH2_TOKEN_ERROR_NONEXISTENT, u'developer_message': u'The provided access token does not match any valid tokens.' }) - # provider_now switches to timezone aware datetime when - # the oauth2_provider version supports it. - elif token.expires < provider_now(): + elif token.expires < django.utils.timezone.now(): raise AuthenticationFailed({ u'error_code': OAUTH2_TOKEN_ERROR_EXPIRED, u'developer_message': u'The provided access token has expired and is no longer valid.', }) else: return token.user, token + + def get_access_token(self, access_token): + """ + Return a valid access token that exists in one of our OAuth2 libraries, + or None if no matching token is found. + """ + return self._get_dot_token(access_token) or self._get_dop_token(access_token) + + def _get_dop_token(self, access_token): + """ + Return a valid access token stored by django-oauth2-provider (DOP), or + None if no matching token is found. + """ + token_query = dop_models.AccessToken.objects.select_related('user') + return token_query.filter(token=access_token).first() + + def _get_dot_token(self, access_token): + """ + Return a valid access token stored by django-oauth-toolkit (DOT), or + None if no matching token is found. + """ + token_query = dot_models.AccessToken.objects.select_related('user') + return token_query.filter(token=access_token).first() diff --git a/openedx/core/lib/api/tests/test_authentication.py b/openedx/core/lib/api/tests/test_authentication.py index ea572b841b..ab3f077a27 100644 --- a/openedx/core/lib/api/tests/test_authentication.py +++ b/openedx/core/lib/api/tests/test_authentication.py @@ -19,6 +19,7 @@ from django.utils import unittest from django.utils.http import urlencode from mock import patch from nose.plugins.attrib import attr +from oauth2_provider import models as dot_models from rest_framework import exceptions from rest_framework import status from rest_framework.permissions import IsAuthenticated @@ -28,6 +29,7 @@ from rest_framework.test import APIRequestFactory, APIClient from rest_framework.views import APIView from rest_framework_jwt.settings import api_settings +from lms.djangoapps.oauth_dispatch import adapters from openedx.core.lib.api import authentication from openedx.core.lib.api.tests.mixins import JwtMixin from provider import constants, scope @@ -84,6 +86,8 @@ class OAuth2Tests(TestCase): def setUp(self): super(OAuth2Tests, self).setUp() + self.dop_adapter = adapters.DOPAdapter() + self.dot_adapter = adapters.DOTAdapter() self.csrf_client = APIClient(enforce_csrf_checks=True) self.username = 'john' self.email = 'lennon@thebeatles.com' @@ -95,24 +99,35 @@ class OAuth2Tests(TestCase): self.ACCESS_TOKEN = 'access_token' # pylint: disable=invalid-name self.REFRESH_TOKEN = 'refresh_token' # pylint: disable=invalid-name - self.oauth2_client = oauth2_provider.oauth2.models.Client.objects.create( - client_id=self.CLIENT_ID, - client_secret=self.CLIENT_SECRET, - redirect_uri='', - client_type=0, + self.dop_oauth2_client = self.dop_adapter.create_public_client( name='example', - user=None, + user=self.user, + client_id=self.CLIENT_ID, + redirect_uri='https://example.edx/redirect', ) self.access_token = oauth2_provider.oauth2.models.AccessToken.objects.create( token=self.ACCESS_TOKEN, - client=self.oauth2_client, + client=self.dop_oauth2_client, user=self.user, ) self.refresh_token = oauth2_provider.oauth2.models.RefreshToken.objects.create( user=self.user, access_token=self.access_token, - client=self.oauth2_client + client=self.dop_oauth2_client, + ) + + self.dot_oauth2_client = self.dot_adapter.create_public_client( + name='example', + user=self.user, + client_id='dot-client-id', + redirect_uri='https://example.edx/redirect', + ) + self.dot_access_token = dot_models.AccessToken.objects.create( + user=self.user, + token='dot-access-token', + application=self.dot_oauth2_client, + expires=datetime.now() + timedelta(days=30), ) # This is the a change we've made from the django-rest-framework-oauth version @@ -182,6 +197,10 @@ class OAuth2Tests(TestCase): response = self.get_with_bearer_token('/oauth2-test/') self.assertEqual(response.status_code, status.HTTP_200_OK) + def test_get_form_passing_auth_with_dot(self): + response = self.get_with_bearer_token('/oauth2-test/', token=self.dot_access_token.token) + self.assertEqual(response.status_code, status.HTTP_200_OK) + @unittest.skipUnless(oauth2_provider, 'django-oauth2-provider not installed') def test_post_form_passing_auth_url_transport(self): """Ensure GETing form over OAuth with correct client credentials in form data succeed""" diff --git a/pavelib/prereqs.py b/pavelib/prereqs.py index da314158dd..6df3eb31f3 100644 --- a/pavelib/prereqs.py +++ b/pavelib/prereqs.py @@ -163,6 +163,7 @@ PACKAGES_TO_UNINSTALL = [ "edxval", # Because it was bork-installed somehow. "django-storages", "django-oauth2-provider", # Because now it's called edx-django-oauth2-provider. + "edx-oauth2-provider", # Because it moved from github to pypi ] @@ -203,7 +204,6 @@ def uninstall_python_packages(): # Uninstall the pacakge sh("pip uninstall --disable-pip-version-check -y {}".format(package_name)) uninstalled = True - if not uninstalled: break else: diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index eb3d248b0a..d3a60a81aa 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -23,6 +23,7 @@ django-mako==0.1.5pre django-model-utils==2.3.1 django-mptt==0.7.4 django-oauth-plus==2.2.8 +django-oauth-toolkit==0.10.0 django-sekizai==0.8.2 django-ses==0.7.0 django-simple-history==1.6.3 @@ -35,9 +36,9 @@ git+https://github.com/edx/django-rest-framework.git@3c72cb5ee5baebc432894737119 django==1.8.11 djangorestframework-jwt==1.7.2 djangorestframework-oauth==1.1.0 -edx-django-oauth2-provider==0.5.0 edx-lint==0.4.3 -edx-oauth2-provider==0.5.9 +edx-django-oauth2-provider==1.0.1 +edx-oauth2-provider==1.0.0 edx-opaque-keys==0.2.1 edx-organizations==0.4.0 edx-rest-api-client==1.2.1