From 056225e3ac9269c0aa6cf34246d6a8b36953de13 Mon Sep 17 00:00:00 2001
From: Alison Hodges
Date: Mon, 9 Nov 2015 17:26:28 -0500
Subject: [PATCH 01/87] Updates the example locations to split format
---
.../instructor/instructor_dashboard_2/student_admin.html | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lms/templates/instructor/instructor_dashboard_2/student_admin.html b/lms/templates/instructor/instructor_dashboard_2/student_admin.html
index a7d3b92279c4..3c1571523716 100644
--- a/lms/templates/instructor/instructor_dashboard_2/student_admin.html
+++ b/lms/templates/instructor/instructor_dashboard_2/student_admin.html
@@ -54,7 +54,7 @@ ${_("Student-specific grade adjustment")}
## Translators: A location (string of text) follows this sentence.
${_("You must provide the complete location of the problem. In the Staff Debug viewer, the location looks like this:")}
- i4x://edX/Open_DemoX/problem/78c98390884243b89f6023745231c525
+ block-v1:edX+DemoX+2015+type@problem+block@618c5933b8b544e4a4cc103d3e508378
${_("Next, select an action to perform for the given user and problem:")}
@@ -141,7 +141,7 @@
${_('Course-specific grade adjustment')}
## Translators: A location (string of text) follows this sentence.
${_("You must provide the complete location of the problem. In the Staff Debug viewer, the location looks like this:")}
- i4x://edX/Open_DemoX/problem/78c98390884243b89f6023745231c525
+ block-v1:edX+DemoX+2015+type@problem+block@618c5933b8b544e4a4cc103d3e508378
${_("Then select an action")}:
From 6cb62f2697bcca1380854e139857678b2ddc35e0 Mon Sep 17 00:00:00 2001
From: Usman Khalid <2200617@gmail.com>
Date: Fri, 18 Sep 2015 16:48:18 +0500
Subject: [PATCH 02/87] Rebase upgrade Django to v1.8.5
Please note that this is a squshed commit and the work of:
Symbolist, macdiesel, nedbat, doctoryes, muzaffaryousaf and muhammad-ammar
---
cms/djangoapps/contentstore/__init__.py | 2 -
.../contentstore/context_processors.py | 2 +-
.../contentstore/courseware_index.py | 6 +-
.../management/commands/delete_orphans.py | 13 +-
.../management/commands/export.py | 19 +-
.../management/commands/fix_not_found.py | 10 +-
.../management/commands/import.py | 3 +-
.../commands/tests/test_delete_orphans.py | 13 +-
.../management/commands/tests/test_export.py | 22 +-
.../commands/tests/test_fix_not_found.py | 11 +-
.../commands/tests/test_git_export.py | 60 +-
.../commands/tests/test_reindex_courses.py | 43 +-
.../commands/tests/test_reindex_library.py | 33 +-
.../contentstore/migrations/0001_initial.py | 111 +-
...ield_videouploadconfig_status_whitelist.py | 69 -
.../0003_auto__add_pushnotificationconfig.py | 80 -
cms/djangoapps/contentstore/startup.py | 2 +
.../contentstore/views/entrance_exam.py | 2 +-
cms/djangoapps/contentstore/views/item.py | 2 +-
cms/djangoapps/contentstore/views/preview.py | 2 +-
.../views/tests/test_course_index.py | 6 +-
.../contentstore/views/tests/test_preview.py | 2 +-
.../migrations/0001_initial.py | 97 +-
cms/djangoapps/course_creators/models.py | 2 +-
.../course_creators/tests/test_admin.py | 6 +-
cms/djangoapps/xblock_config/admin.py | 2 +-
.../xblock_config/migrations/0001_initial.py | 102 +-
cms/envs/acceptance.py | 3 +-
cms/envs/aws.py | 19 +-
cms/envs/common.py | 85 +-
cms/envs/dev.py | 1 +
cms/envs/dev_with_worker.py | 10 +-
cms/envs/devstack.py | 2 +-
cms/envs/test.py | 12 +-
cms/envs/test_static_optimized.py | 1 +
cms/envs/yaml_config.py | 5 -
cms/startup.py | 7 +-
cms/templates/base.html | 2 +-
.../auth_exchange/tests/test_views.py | 13 +-
common/djangoapps/cache_toolbox/core.py | 9 +-
common/djangoapps/config_models/admin.py | 10 +-
common/djangoapps/config_models/models.py | 10 +-
common/djangoapps/config_models/views.py | 25 +-
.../cors_csrf/migrations/0001_initial.py | 102 +-
.../course_action_state/managers.py | 2 +-
.../migrations/0001_initial.py | 128 +-
.../migrations/0002_add_rerun_display_name.py | 76 -
.../djangoapps/course_action_state/models.py | 2 +-
common/djangoapps/course_modes/admin.py | 3 +-
.../course_modes/migrations/0001_initial.py | 86 +-
...002_auto__add_field_coursemode_currency.py | 35 -
...coursemode_course_id_currency_mode_slug.py | 33 -
...o__add_field_coursemode_expiration_date.py | 36 -
...dd_field_coursemode_expiration_datetime.py | 37 -
.../0006_expiration_date_to_datetime.py | 40 -
.../migrations/0007_add_description.py | 44 -
...archive__chg_field_coursemode_course_id.py | 66 -
...ive_description__add_field_coursemode_s.py | 49 -
.../course_modes/tests/test_admin.py | 2 +-
common/djangoapps/course_modes/views.py | 11 +-
common/djangoapps/dark_lang/middleware.py | 6 +-
.../dark_lang/migrations/0001_initial.py | 102 +-
.../0002_data__enable_on_install.py | 31 +
.../migrations/0002_enable_on_install.py | 68 -
common/djangoapps/dark_lang/tests.py | 4 +-
.../migrations/0001_initial.py | 122 +-
common/djangoapps/django_locale/__init__.py | 7 -
common/djangoapps/django_locale/middleware.py | 83 -
common/djangoapps/django_locale/tests.py | 157 -
common/djangoapps/django_locale/trans_real.py | 131 -
common/djangoapps/edxmako/makoloader.py | 26 +-
.../management/commands/preprocess_assets.py | 8 +-
common/djangoapps/edxmako/middleware.py | 20 +
common/djangoapps/embargo/forms.py | 2 +
.../embargo/migrations/0001_initial.py | 206 +-
.../0002_add_country_access_models.py | 141 -
.../migrations/0002_data__add_countries.py | 32 +
.../embargo/migrations/0003_add_countries.py | 101 -
.../migrations/0004_migrate_embargo_config.py | 129 -
.../0005_add_courseaccessrulehistory.py | 114 -
...d_restrictedcourse_disable_access_check.py | 111 -
common/djangoapps/embargo/tests/test_api.py | 3 +-
common/djangoapps/enrollment/api.py | 2 +-
.../external_auth/migrations/0001_initial.py | 122 +-
common/djangoapps/external_auth/models.py | 1 +
.../external_auth/tests/test_shib.py | 2 +-
common/djangoapps/external_auth/views.py | 8 +-
.../heartbeat/tests/test_heartbeat.py | 32 +-
common/djangoapps/lang_pref/middleware.py | 4 +-
.../lang_pref/tests/test_middleware.py | 4 +-
common/djangoapps/monkey_patch/__init__.py | 2 +-
.../monkey_patch/django_utils_translation.py | 91 -
.../tests/test_django_utils_translation.py | 337 --
.../monkey_patch/third_party_auth.py | 38 +
.../djangoapps/performance/views/__init__.py | 8 +-
.../templates/static_content.html | 7 +-
.../reverification/migrations/0001_initial.py | 36 -
...auto__del_midcoursereverificationwindow.py | 31 -
common/djangoapps/service_status/views.py | 4 +-
.../commands/clear_collectstatic_cache.py | 4 +-
.../status/migrations/0001_initial.py | 135 +-
common/djangoapps/student/admin.py | 1 +
common/djangoapps/student/forms.py | 28 +-
common/djangoapps/student/helpers.py | 2 +-
.../management/commands/transfer_students.py | 4 +-
.../student/migrations/0001_initial.py | 400 +-
.../0002_text_to_varchar_and_indexes.py | 142 -
.../0003_auto__add_usertestgroup.py | 123 -
.../migrations/0004_add_email_index.py | 105 -
.../student/migrations/0005_name_change.py | 145 -
.../migrations/0006_expand_meta_field.py | 121 -
.../migrations/0007_convert_to_utf8.py | 125 -
.../0008__auto__add_courseregistration.py | 130 -
...ourseregistration__add_courseenrollment.py | 141 -
...o__chg_field_courseenrollment_course_id.py | 127 -
...t_user__del_unique_courseenrollment_use.py | 135 -
...der__add_field_userprofile_date_of_birt.py | 173 -
.../0013_auto__chg_field_userprofile_meta.py | 133 -
.../0014_auto__del_courseenrollment.py | 130 -
..._unique_courseenrollment_user_course_id.py | 142 -
...ent_date__chg_field_userprofile_country.py | 140 -
.../migrations/0017_rename_date_to_created.py | 132 -
.../student/migrations/0018_auto.py | 132 -
...e_approved_demographic_fields_fall_2012.py | 187 -
.../migrations/0020_add_test_center_user.py | 188 -
.../student/migrations/0021_remove_askbot.py | 160 -
...ed__add_unique_courseenrollmentallowed_.py | 155 -
.../0023_add_test_center_registration.py | 241 --
.../migrations/0024_add_allow_certificate.py | 172 -
...eld_courseenrollmentallowed_auto_enroll.py | 173 -
...enterregistration_accommodation_request.py | 180 -
..._flag_and_mode_to_courseware_enrollment.py | 183 -
.../migrations/0028_auto__add_userstanding.py | 188 -
...e_between_user_and_anonymous_student_id.py | 194 -
.../student/migrations/0029_remove_pearson.py | 185 -
...field_anonymoususerid_anonymous_user_id.py | 146 -
...op_student_anonymoususerid_temp_archive.py | 132 -
...file_country_add_field_UserProfile_city.py | 146 -
.../0032_auto__add_loginfailures.py | 149 -
.../0033_auto__add_passwordhistory.py | 156 -
.../0034_auto__add_courseaccessrole.py | 189 -
.../student/migrations/0035_access_roles.py | 312 --
.../migrations/0036_access_roles_orgless.py | 278 --
.../0037_auto__add_courseregistrationcode.py | 179 -
.../0038_auto__add_usersignupsource.py | 180 -
.../0039_auto__del_courseregistrationcode.py | 174 -
...e_user_id__add_field_usersignupsource_u.py | 172 -
.../migrations/0041_add_dashboard_config.py | 177 -
.../0042_grant_sales_admin_roles.py | 184 -
...__add_linkedinaddtoprofileconfiguration.py | 187 -
.../0044_linkedin_add_company_identifier.py | 183 -
...0045_add_trk_partner_to_linkedin_config.py | 184 -
...tion__add_unique_entranceexamconfigurat.py | 205 -
.../student/migrations/0047_add_bio_field.py | 194 -
.../0048_add_profile_image_version.py | 195 -
...add_unique_languageproficiency_code_use.py | 210 -
.../0050_auto__add_manualenrollmentaudit.py | 216 --
...051_auto__add_courseenrollmentattribute.py | 224 --
...52_auto__add_historicalcourseenrollment.py | 242 --
...auto__add_enrollmentrefundconfiguration.py | 245 --
common/djangoapps/student/models.py | 47 +-
common/djangoapps/student/tests/test_email.py | 13 +-
common/djangoapps/student/tests/test_login.py | 5 +-
.../student/tests/test_password_policy.py | 2 +-
.../student/tests/test_reset_password.py | 21 +-
.../student/tests/test_verification_status.py | 2 +-
common/djangoapps/student/tests/tests.py | 2 +-
common/djangoapps/student/views.py | 42 +-
common/djangoapps/third_party_auth/admin.py | 1 +
.../djangoapps/third_party_auth/api/views.py | 4 +-
.../migrations/0001_initial.py | 306 +-
.../migrations/0002_convert_settings.py | 141 -
.../migrations/0003_add_config_options.py | 161 -
.../migrations/0004_lti_tool_consumers.py | 149 -
...dd_field_ltiproviderconfig_lti_hostname.py | 137 -
.../migrations/0006_add_api_permission.py | 156 -
common/djangoapps/third_party_auth/models.py | 10 +
.../djangoapps/third_party_auth/settings.py | 8 +-
.../third_party_auth/tests/test_settings.py | 11 +-
.../track/migrations/0001_initial.py | 78 +-
...t__chg_field_trackinglog_event_type__ch.py | 51 -
common/djangoapps/track/views/__init__.py | 15 +-
common/djangoapps/util/cache.py | 2 +-
common/djangoapps/util/db.py | 221 +-
common/djangoapps/util/json_request.py | 35 +-
.../util/migrations/0001_initial.py | 99 +-
.../0002_data__default_rate_limit_config.py | 23 +
.../0002_default_rate_limit_config.py | 64 -
common/djangoapps/util/model_utils.py | 6 +-
common/djangoapps/util/models.py | 13 +-
common/djangoapps/util/testing.py | 51 +
common/djangoapps/util/tests/test_db.py | 68 +-
common/djangoapps/util/tests/test_file.py | 10 +-
common/djangoapps/util/tests/test_memcache.py | 4 +-
common/djangoapps/util/url.py | 2 +-
.../xblock_django/migrations/0001_initial.py | 102 +-
common/djangoapps/xblock_django/models.py | 3 +
common/djangoapps/xmodule_django/models.py | 13 +-
.../lib/capa/capa/tests/test_responsetypes.py | 30 +-
common/lib/xmodule/xmodule/course_module.py | 4 +-
.../lib/xmodule/xmodule/modulestore/django.py | 8 +-
.../split_mongo/mongo_connection.py | 11 +-
.../tests/test_split_modulestore.py | 4 +-
common/lib/xmodule/xmodule/static_content.py | 3 +
.../tests/test_course_metadata_utils.py | 19 +-
.../pages/lms/instructor_dashboard.py | 4 +-
.../acceptance/tests/discussion/helpers.py | 1 +
.../test/acceptance/tests/lms/test_teams.py | 5 +-
common/test/db_cache/bok_choy_data.json | 1 -
common/test/db_cache/bok_choy_schema.sql | 3433 -----------------
common/test/db_cache/lettuce.db | Bin 654336 -> 0 bytes
conf/locale/ru/LC_MESSAGES/django.po | 4 +-
docs/en_us/enrollment_api/source/conf.py | 4 -
docs/en_us/platform_api/source/conf.py | 4 -
docs/shared/requirements.txt | 1 -
.../branding/migrations/0001_initial.py | 115 +-
.../0002_auto__add_brandingapiconfig.py | 80 -
lms/djangoapps/branding/models.py | 6 +-
lms/djangoapps/bulk_email/forms.py | 1 +
.../bulk_email/migrations/0001_initial.py | 161 +-
.../migrations/0002_change_field_names.py | 88 -
.../0002_data__load_course_email_template.py | 25 +
.../migrations/0003_add_optout_user.py | 91 -
.../migrations/0004_migrate_optout_user.py | 91 -
.../migrations/0005_remove_optout_email.py | 78 -
.../0006_add_course_email_template.py | 87 -
.../0007_load_course_email_template.py | 81 -
.../0008_add_course_authorizations.py | 95 -
.../0009_force_unique_course_ids.py | 90 -
...d__add_field_courseemail_template_name_.py | 125 -
lms/djangoapps/bulk_email/models.py | 34 +-
lms/djangoapps/ccx/migrations/0001_initial.py | 177 +-
.../migrations/0002_convert_memberships.py | 102 -
lms/djangoapps/ccx/models.py | 4 +
lms/djangoapps/ccx/overrides.py | 23 +-
lms/djangoapps/ccx/tasks.py | 2 +-
lms/djangoapps/ccx/tests/factories.py | 2 +-
.../ccx/tests/test_ccx_modulestore.py | 2 +-
.../tests/test_field_override_performance.py | 78 +-
lms/djangoapps/ccx/tests/test_overrides.py | 24 +-
lms/djangoapps/ccx/tests/test_tasks.py | 6 +-
lms/djangoapps/ccx/tests/test_utils.py | 6 +-
lms/djangoapps/ccx/tests/test_views.py | 10 +-
lms/djangoapps/ccx/utils.py | 2 +-
lms/djangoapps/ccx/views.py | 12 +-
lms/djangoapps/certificates/admin.py | 1 +
.../0001_added_generatedcertificates.py | 93 -
.../certificates/migrations/0001_initial.py | 188 +
...field_generatedcertificate_download_url.py | 91 -
...__certificatehtmlviewconfiguration_data.py | 62 +
..._add_field_generatedcertificate_enabled.py | 92 -
.../migrations/0003_data__default_modes.py | 34 +
...icate_graded_certificate_id__add_field_.py | 107 -
...to__add_field_generatedcertificate_name.py | 96 -
...eld_generatedcertificate_certificate_id.py | 96 -
.../0007_auto__add_revokedcertificate.py | 121 -
...el_field_generatedcertificate_name__add.py | 163 -
...icate_graded_download_url__del_field_ge.py | 95 -
...icate_enabled__add_field_generatedcerti.py | 81 -
...icate_certificate_id__add_field_generat.py | 90 -
...icate_name__add_field_generatedcertific.py | 93 -
...field_generatedcertificate_error_reason.py | 78 -
.../migrations/0014_adding_whitelist.py | 89 -
.../0015_adding_mode_for_verified_certs.py | 86 -
.../0016_change_course_key_fields.py | 90 -
..._add_certificategenerationconfiguration.py | 96 -
.../0018_add_example_cert_models.py | 159 -
...o__add_certificatehtmlviewconfiguration.py | 104 -
...0_certificatehtmlviewconfiguration_data.py | 156 -
...nique_badgeassertion_course_id_user__ad.py | 169 -
.../migrations/0022_default_modes.py | 152 -
..._course_id_user__add_unique_badgeassert.py | 150 -
...add_unique_certificatetemplate_organiza.py | 197 -
...elist_created__add_field_certificatewhi.py | 177 -
lms/djangoapps/certificates/models.py | 29 +-
lms/djangoapps/certificates/queue.py | 2 +-
.../certificates/tests/test_queue.py | 2 +-
lms/djangoapps/certificates/views/support.py | 3 +
lms/djangoapps/certificates/views/xqueue.py | 13 +-
lms/djangoapps/class_dashboard/views.py | 6 +-
lms/djangoapps/commerce/api/v1/models.py | 5 +-
.../commerce/api/v1/tests/test_views.py | 2 +-
lms/djangoapps/commerce/http.py | 2 +-
.../0001_add_ecommerce_service_user.py | 26 -
.../0001_data__add_ecommerce_service_user.py | 25 +
lms/djangoapps/commerce/views.py | 2 +-
lms/djangoapps/course_api/blocks/views.py | 4 +-
lms/djangoapps/course_wiki/editors.py | 2 +-
lms/djangoapps/courseware/date_summary.py | 2 +-
lms/djangoapps/courseware/grades.py | 305 +-
.../management/commands/clean_history.py | 28 +-
.../management/commands/dump_course_ids.py | 5 +-
.../management/commands/export_course.py | 2 +-
.../commands/tests/test_clean_history.py | 15 +-
.../courseware/migrations/0001_initial.py | 249 +-
.../courseware/migrations/0002_add_indexes.py | 119 -
.../migrations/0003_done_grade_cache.py | 117 -
.../0004_add_field_studentmodule_course_id.py | 120 -
..._add_unique_offlinecomputedgrade_user_c.py | 117 -
.../0006_create_student_module_history.py | 109 -
.../0007_allow_null_version_in_history.py | 100 -
.../migrations/0008_add_xmodule_storage.py | 185 -
.../migrations/0009_add_field_default.py | 128 -
...ock_field_content_to_user_state_summary.py | 148 -
.../0011_add_model_StudentFieldOverride.py | 145 -
...erride_course_id_location_student__add_.py | 138 -
...rride_created__add_field_studentfieldov.py | 155 -
lms/djangoapps/courseware/models.py | 12 +
lms/djangoapps/courseware/module_render.py | 6 +-
lms/djangoapps/courseware/tests/__init__.py | 4 +-
.../courseware/tests/test_comp_theming.py | 2 +-
.../courseware/tests/test_course_info.py | 4 +-
.../courseware/tests/test_date_summary.py | 4 +-
.../courseware/tests/test_model_data.py | 2 +-
.../courseware/tests/test_video_handlers.py | 12 +-
lms/djangoapps/courseware/tests/test_views.py | 2 +-
lms/djangoapps/courseware/views.py | 29 +-
.../management/commands/git_add_course.py | 25 +-
.../commands/tests/test_git_add_course.py | 22 +-
lms/djangoapps/dashboard/sysadmin.py | 2 +-
.../django_comment_client/base/tests.py | 22 +-
.../django_comment_client/base/urls.py | 5 +-
.../django_comment_client/forum/tests.py | 10 +-
.../django_comment_client/forum/urls.py | 5 +-
.../migrations/0001_initial.py | 132 -
.../django_comment_client/permissions.py | 2 +-
.../django_comment_client/tests/group_id.py | 2 +-
.../django_comment_client/tests/test_utils.py | 2 +-
lms/djangoapps/django_comment_client/urls.py | 5 +-
lms/djangoapps/django_comment_client/utils.py | 4 +-
.../foldit/migrations/0001_initial.py | 156 +-
.../instructor/tests/test_enrollment.py | 2 +-
.../instructor/tests/test_spoc_gradebook.py | 1 -
lms/djangoapps/instructor/tests/test_tools.py | 2 +-
lms/djangoapps/instructor/views/api.py | 55 +-
lms/djangoapps/instructor/views/legacy.py | 5 +-
lms/djangoapps/instructor_analytics/csvs.py | 2 +-
lms/djangoapps/instructor_task/api.py | 57 -
lms/djangoapps/instructor_task/api_helper.py | 26 +-
.../migrations/0001_initial.py | 117 +-
.../migrations/0002_add_subtask_field.py | 76 -
lms/djangoapps/instructor_task/models.py | 16 +-
lms/djangoapps/instructor_task/subtasks.py | 11 +-
.../instructor_task/tasks_helper.py | 21 +-
.../tests/test_tasks_helper.py | 4 +-
.../licenses/migrations/0001_initial.py | 151 +-
lms/djangoapps/licenses/models.py | 2 +-
lms/djangoapps/licenses/views.py | 2 +-
.../lms_xblock/migrations/0001_initial.py | 102 +-
lms/djangoapps/lms_xblock/mixin.py | 7 +-
lms/djangoapps/lms_xblock/models.py | 3 +
lms/djangoapps/lti_provider/__init__.py | 3 -
.../0001_create_lti_consumer_model.py | 37 -
.../lti_provider/migrations/0001_initial.py | 72 +
.../0002_create_lti_outcome_management.py | 122 -
.../migrations/0003_create_lti_user_model.py | 108 -
.../0004_add_version_to_graded_assignment.py | 93 -
lms/djangoapps/lti_provider/models.py | 2 +-
lms/djangoapps/lti_provider/startup.py | 4 +
.../lti_provider/tests/test_outcomes.py | 12 +-
.../lti_provider/tests/test_views.py | 2 +-
lms/djangoapps/lti_provider/users.py | 23 +-
.../mobile_api/migrations/0001_initial.py | 106 +-
.../mobile_api/video_outlines/tests.py | 1 +
.../notes/migrations/0001_initial.py | 122 +-
lms/djangoapps/notes/models.py | 3 +
.../staff_grading_service.py | 9 +-
lms/djangoapps/open_ended_grading/views.py | 6 +-
.../psychometrics/migrations/0001_initial.py | 24 +
.../psychometrics/migrations/__init__.py | 0
lms/djangoapps/psychometrics/models.py | 5 +-
lms/djangoapps/shoppingcart/admin.py | 4 +-
.../management/commands/retire_order.py | 9 +-
.../shoppingcart/migrations/0001_initial.py | 443 ++-
...__add_field_paidcourseregistration_mode.py | 112 -
...003_auto__del_field_orderitem_line_cost.py | 111 -
...uto__add_field_orderitem_fulfilled_time.py | 114 -
...nannotation__add_field_orderitem_report.py | 132 -
...time__add_field_orderitem_refund_reques.py | 131 -
...7_auto__add_field_orderitem_service_fee.py | 142 -
...demption__chg_field_certificateitem_cou.py | 189 -
...gistrationcode__add_coupon__chg_field_c.py | 216 --
...ption__del_field_courseregistrationcode.py | 187 -
...dd_field_courseregistrationcode_invoice.py | 186 -
...ioncode_transaction_group_name__del_fie.py | 252 --
.../0013_auto__add_field_invoice_is_valid.py | 173 -
..._add_field_invoice_address_line_1__add_.py | 244 --
...e_order_number__del_field_invoice_compa.py | 229 --
..._email__del_field_invoice_company_refer.py | 205 -
...ioncode_order__chg_field_registrationco.py | 188 -
.../migrations/0018_auto__add_donation.py | 189 -
.../0019_auto__add_donationconfiguration.py | 197 -
...d_courseregcodeitemannotation__add_fiel.py | 282 --
...m_created__add_field_orderitem_modified.py | 222 --
...eredemption_course_enrollment__add_fiel.py | 226 --
..._auto__add_field_coupon_expiration_date.py | 219 --
..._field_courseregistrationcode_mode_slug.py | 218 --
.../migrations/0025_update_invoice_models.py | 310 --
.../migrations/0026_migrate_invoices.py | 270 --
.../migrations/0027_add_invoice_history.py | 262 --
...d_field_courseregistrationcode_is_valid.py | 259 --
.../0029_better_datetime_now_default.py | 269 --
lms/djangoapps/shoppingcart/models.py | 91 +-
.../shoppingcart/tests/test_microsites.py | 27 +-
.../shoppingcart/tests/test_models.py | 8 +-
.../shoppingcart/tests/test_reports.py | 10 +-
.../shoppingcart/tests/test_views.py | 7 +-
lms/djangoapps/shoppingcart/views.py | 2 +-
.../student_account/test/test_views.py | 4 +-
lms/djangoapps/support/tests/test_refund.py | 2 +-
.../survey/migrations/0001_initial.py | 150 +-
...auto__add_field_surveyanswer_course_key.py | 80 -
.../commands/reindex_course_team.py | 4 +-
.../tests/test_reindex_course_team.py | 25 +-
.../teams/migrations/0001_initial.py | 162 +-
...uto__add_field_courseteam_discussion_id.py | 83 -
.../0003_auto__add_index_courseteam_name.py | 80 -
...ussion_topic_id__add_field_courseteam_l.py | 94 -
..._course_id_and_topic_id_composite_index.py | 82 -
.../teams/migrations/0006_add_team_size.py | 98 -
...07_auto__del_field_courseteam_is_active.py | 85 -
lms/djangoapps/teams/models.py | 23 +-
lms/djangoapps/teams/plugins.py | 2 +-
lms/djangoapps/teams/search_indexes.py | 3 +-
lms/djangoapps/teams/serializers.py | 2 +-
lms/djangoapps/teams/tests/factories.py | 2 +-
lms/djangoapps/teams/tests/test_models.py | 9 +-
lms/djangoapps/teams/tests/test_views.py | 16 +-
lms/djangoapps/teams/views.py | 5 +-
lms/djangoapps/verify_student/admin.py | 2 +-
.../retry_failed_photo_verifications.py | 2 +-
.../commands/set_software_secure_status.py | 4 +-
.../commands/tests/test_verify_student.py | 14 +-
.../verify_student/migrations/0001_initial.py | 241 +-
..._softwaresecurephotoverification_window.py | 88 -
...softwaresecurephotoverification_display.py | 89 -
...t__add_unique_verificationcheckpoint_co.py | 142 -
...add_incoursereverificationconfiguration.py | 117 -
...__add_unique_skippedreverification_user.py | 132 -
...dd_field_verificationstatus_location_id.py | 122 -
...ckpoint_checkpoint_name__add_field_veri.py | 153 -
...hotoverification_window_id_default_none.py | 119 -
..._softwaresecurephotoverification_window.py | 117 -
.../0011_add_verification_deadline.py | 155 -
.../0012_populate_verification_deadlines.py | 180 -
...urephotoverification_copy_id_photo_from.py | 134 -
.../migrations/0014_set_copy_id_photo_from.py | 148 -
...auto__add_icrvstatusemailsconfiguration.py | 145 -
lms/djangoapps/verify_student/models.py | 25 +-
lms/djangoapps/verify_student/services.py | 2 +-
.../verify_student/tests/factories.py | 2 +-
.../tests/fake_software_secure.py | 2 +-
.../tests/test_fake_software_secure.py | 2 +-
.../verify_student/tests/test_models.py | 35 +-
.../verify_student/tests/test_services.py | 4 +-
.../verify_student/tests/test_ssencrypt.py | 2 +-
.../verify_student/tests/test_views.py | 59 +-
lms/djangoapps/verify_student/urls.py | 4 +-
lms/djangoapps/verify_student/views.py | 13 +-
lms/envs/acceptance.py | 1 +
lms/envs/aws.py | 26 +-
lms/envs/common.py | 141 +-
lms/envs/dev.py | 4 +-
lms/envs/dev_with_worker.py | 10 +-
lms/envs/devplus.py | 1 +
lms/envs/devstack.py | 4 +-
lms/envs/load_test.py | 4 +-
lms/envs/static.py | 1 +
lms/envs/test.py | 18 +-
lms/envs/test_static_optimized.py | 1 +
lms/envs/test_with_mysql.py | 15 +
lms/envs/yaml_config.py | 9 +-
lms/startup.py | 18 +-
lms/templates/navigation.html | 2 +-
.../verify_student/missed_deadline.html | 2 +-
.../verify_student/pay_and_verify.html | 2 +-
lms/urls.py | 29 +-
.../djangoapps/call_stack_manager/core.py | 6 +-
.../core/djangoapps/common_views/xblock.py | 2 +-
.../content/course_overviews/__init__.py | 4 -
.../migrations/0001_initial.py | 128 +-
.../0002_add_days_early_for_beta.py | 57 -
.../0003_add_cert_html_view_enabled.py | 58 -
...04_default_lowest_passing_grade_to_None.py | 49 -
.../migrations/0005_add_enrollment_fields.py | 94 -
.../0006_add_version_and_timestamp.py | 75 -
.../0007_auto__add_courseoverviewtab.py | 68 -
.../0008_drop_course_tabs_fk_constraint.py | 63 -
.../content/course_overviews/models.py | 28 +-
.../content/course_overviews/startup.py | 5 +
.../content/course_overviews/tests.py | 30 +-
.../course_structures/api/v0/tests_api.py | 8 +-
.../migrations/0001_initial.py | 64 +-
..._coursestructure_discussion_id_map_json.py | 34 -
.../content/course_structures/models.py | 4 +
.../commands/post_cohort_membership_fix.py | 5 +-
.../tests/test_post_cohort_membership_fix.py | 2 +-
.../course_groups/migrations/0001_initial.py | 177 +-
...add_model_CourseUserGroupPartitionGroup.py | 82 -
...coursecohort__add_coursecohortssettings.py | 108 -
...ttings_cohorted_discussions__add_field_.py | 91 -
.../migrations/0005_cohort_membership.py | 109 -
.../0006_cohort_membership_data_migrate.py | 138 -
.../core/djangoapps/course_groups/models.py | 36 +-
.../course_groups/tests/test_views.py | 3 -
.../core/djangoapps/credit/api/provider.py | 2 +-
openedx/core/djangoapps/credit/email_utils.py | 7 +-
.../credit/migrations/0001_initial.py | 311 +-
...ename_credit_requirement_criteria_field.py | 76 -
...0003_add_creditrequirementstatus_reason.py | 69 -
...dd_field_creditrequirement_display_name.py | 70 -
...provider_url__add_field_creditprovider_.py | 89 -
...ique_creditrequest_username_course_prov.py | 190 -
...enable_integration__chg_field_creditpro.py | 153 -
.../0008_delete_credit_provider_timestamp.py | 145 -
...o__del_field_crediteligibility_provider.py | 138 -
...010_add_creditrequirementstatus_history.py | 169 -
...auto__add_field_creditrequirement_order.py | 153 -
.../0012_remove_m2m_course_and_provider.py | 172 -
.../0013_add_provider_status_url.py | 153 -
...creditprovider_fulfillment_instructions.py | 154 -
...eld_creditprovider_provider_description.py | 155 -
...eligibility_email_message__add_field_cr.py | 165 -
..._add_field_creditprovider_thumbnail_url.py | 158 -
openedx/core/djangoapps/credit/models.py | 17 +-
.../core/djangoapps/credit/tests/test_api.py | 20 +-
.../programs/migrations/0001_initial.py | 111 +-
openedx/core/djangoapps/programs/models.py | 4 +-
.../self_paced/migrations/0001_initial.py | 100 +-
...uration_enable_course_home_improvements.py | 69 -
openedx/core/djangoapps/theming/core.py | 2 +-
.../core/djangoapps/user_api/accounts/api.py | 2 +-
.../user_api/accounts/serializers.py | 6 +-
.../user_api/accounts/tests/test_api.py | 1 -
.../user_api/accounts/tests/test_views.py | 26 +-
.../djangoapps/user_api/accounts/views.py | 2 +-
.../user_api/migrations/0001_initial.py | 138 +-
...nique_usercoursetags_user_course_id_key.py | 87 -
.../migrations/0003_rename_usercoursetags.py | 72 -
...e_userorgtag_user_org_key__chg_field_us.py | 110 -
.../user_api/preferences/tests/test_api.py | 2 +-
.../djangoapps/user_api/preferences/views.py | 2 +-
openedx/core/lib/django_test_client_utils.py | 53 +-
pavelib/assets.py | 4 +-
pavelib/docs.py | 3 +-
pavelib/js_test.py | 4 +-
pavelib/paver_tests/test_servers.py | 2 +-
pavelib/prereqs.py | 91 +-
pavelib/servers.py | 10 +-
pavelib/utils/cmd.py | 2 +-
pavelib/utils/test/suites/acceptance_suite.py | 2 -
pavelib/utils/test/suites/bokchoy_suite.py | 2 +-
pavelib/utils/test/suites/nose_suite.py | 2 +-
requirements/edx/base.txt | 19 +-
requirements/edx/github.txt | 39 +-
scripts/reset-test-db.sh | 6 +-
556 files changed, 5113 insertions(+), 38493 deletions(-)
delete mode 100644 cms/djangoapps/contentstore/migrations/0002_auto__del_field_videouploadconfig_status_whitelist.py
delete mode 100644 cms/djangoapps/contentstore/migrations/0003_auto__add_pushnotificationconfig.py
create mode 100644 cms/djangoapps/contentstore/startup.py
delete mode 100644 common/djangoapps/course_action_state/migrations/0002_add_rerun_display_name.py
delete mode 100644 common/djangoapps/course_modes/migrations/0002_auto__add_field_coursemode_currency.py
delete mode 100644 common/djangoapps/course_modes/migrations/0003_auto__add_unique_coursemode_course_id_currency_mode_slug.py
delete mode 100644 common/djangoapps/course_modes/migrations/0004_auto__add_field_coursemode_expiration_date.py
delete mode 100644 common/djangoapps/course_modes/migrations/0005_auto__add_field_coursemode_expiration_datetime.py
delete mode 100644 common/djangoapps/course_modes/migrations/0006_expiration_date_to_datetime.py
delete mode 100644 common/djangoapps/course_modes/migrations/0007_add_description.py
delete mode 100644 common/djangoapps/course_modes/migrations/0007_auto__add_coursemodesarchive__chg_field_coursemode_course_id.py
delete mode 100644 common/djangoapps/course_modes/migrations/0008_auto__del_field_coursemodesarchive_description__add_field_coursemode_s.py
create mode 100644 common/djangoapps/dark_lang/migrations/0002_data__enable_on_install.py
delete mode 100644 common/djangoapps/dark_lang/migrations/0002_enable_on_install.py
delete mode 100644 common/djangoapps/django_locale/__init__.py
delete mode 100644 common/djangoapps/django_locale/middleware.py
delete mode 100644 common/djangoapps/django_locale/tests.py
delete mode 100644 common/djangoapps/django_locale/trans_real.py
delete mode 100644 common/djangoapps/embargo/migrations/0002_add_country_access_models.py
create mode 100644 common/djangoapps/embargo/migrations/0002_data__add_countries.py
delete mode 100644 common/djangoapps/embargo/migrations/0003_add_countries.py
delete mode 100644 common/djangoapps/embargo/migrations/0004_migrate_embargo_config.py
delete mode 100644 common/djangoapps/embargo/migrations/0005_add_courseaccessrulehistory.py
delete mode 100644 common/djangoapps/embargo/migrations/0006_auto__add_field_restrictedcourse_disable_access_check.py
delete mode 100644 common/djangoapps/monkey_patch/django_utils_translation.py
delete mode 100644 common/djangoapps/monkey_patch/tests/test_django_utils_translation.py
create mode 100644 common/djangoapps/monkey_patch/third_party_auth.py
delete mode 100644 common/djangoapps/reverification/migrations/0001_initial.py
delete mode 100644 common/djangoapps/reverification/migrations/0002_auto__del_midcoursereverificationwindow.py
delete mode 100644 common/djangoapps/student/migrations/0002_text_to_varchar_and_indexes.py
delete mode 100644 common/djangoapps/student/migrations/0003_auto__add_usertestgroup.py
delete mode 100644 common/djangoapps/student/migrations/0004_add_email_index.py
delete mode 100644 common/djangoapps/student/migrations/0005_name_change.py
delete mode 100644 common/djangoapps/student/migrations/0006_expand_meta_field.py
delete mode 100644 common/djangoapps/student/migrations/0007_convert_to_utf8.py
delete mode 100644 common/djangoapps/student/migrations/0008__auto__add_courseregistration.py
delete mode 100644 common/djangoapps/student/migrations/0009_auto__del_courseregistration__add_courseenrollment.py
delete mode 100644 common/djangoapps/student/migrations/0010_auto__chg_field_courseenrollment_course_id.py
delete mode 100644 common/djangoapps/student/migrations/0011_auto__chg_field_courseenrollment_user__del_unique_courseenrollment_use.py
delete mode 100644 common/djangoapps/student/migrations/0012_auto__add_field_userprofile_gender__add_field_userprofile_date_of_birt.py
delete mode 100644 common/djangoapps/student/migrations/0013_auto__chg_field_userprofile_meta.py
delete mode 100644 common/djangoapps/student/migrations/0014_auto__del_courseenrollment.py
delete mode 100644 common/djangoapps/student/migrations/0015_auto__add_courseenrollment__add_unique_courseenrollment_user_course_id.py
delete mode 100644 common/djangoapps/student/migrations/0016_auto__add_field_courseenrollment_date__chg_field_userprofile_country.py
delete mode 100644 common/djangoapps/student/migrations/0017_rename_date_to_created.py
delete mode 100644 common/djangoapps/student/migrations/0018_auto.py
delete mode 100644 common/djangoapps/student/migrations/0019_create_approved_demographic_fields_fall_2012.py
delete mode 100644 common/djangoapps/student/migrations/0020_add_test_center_user.py
delete mode 100644 common/djangoapps/student/migrations/0021_remove_askbot.py
delete mode 100644 common/djangoapps/student/migrations/0022_auto__add_courseenrollmentallowed__add_unique_courseenrollmentallowed_.py
delete mode 100644 common/djangoapps/student/migrations/0023_add_test_center_registration.py
delete mode 100644 common/djangoapps/student/migrations/0024_add_allow_certificate.py
delete mode 100644 common/djangoapps/student/migrations/0025_auto__add_field_courseenrollmentallowed_auto_enroll.py
delete mode 100644 common/djangoapps/student/migrations/0026_auto__remove_index_student_testcenterregistration_accommodation_request.py
delete mode 100644 common/djangoapps/student/migrations/0027_add_active_flag_and_mode_to_courseware_enrollment.py
delete mode 100644 common/djangoapps/student/migrations/0028_auto__add_userstanding.py
delete mode 100644 common/djangoapps/student/migrations/0029_add_lookup_table_between_user_and_anonymous_student_id.py
delete mode 100644 common/djangoapps/student/migrations/0029_remove_pearson.py
delete mode 100644 common/djangoapps/student/migrations/0030_auto__chg_field_anonymoususerid_anonymous_user_id.py
delete mode 100644 common/djangoapps/student/migrations/0031_drop_student_anonymoususerid_temp_archive.py
delete mode 100644 common/djangoapps/student/migrations/0032_add_field_UserProfile_country_add_field_UserProfile_city.py
delete mode 100644 common/djangoapps/student/migrations/0032_auto__add_loginfailures.py
delete mode 100644 common/djangoapps/student/migrations/0033_auto__add_passwordhistory.py
delete mode 100644 common/djangoapps/student/migrations/0034_auto__add_courseaccessrole.py
delete mode 100644 common/djangoapps/student/migrations/0035_access_roles.py
delete mode 100644 common/djangoapps/student/migrations/0036_access_roles_orgless.py
delete mode 100644 common/djangoapps/student/migrations/0037_auto__add_courseregistrationcode.py
delete mode 100644 common/djangoapps/student/migrations/0038_auto__add_usersignupsource.py
delete mode 100644 common/djangoapps/student/migrations/0039_auto__del_courseregistrationcode.py
delete mode 100644 common/djangoapps/student/migrations/0040_auto__del_field_usersignupsource_user_id__add_field_usersignupsource_u.py
delete mode 100644 common/djangoapps/student/migrations/0041_add_dashboard_config.py
delete mode 100644 common/djangoapps/student/migrations/0042_grant_sales_admin_roles.py
delete mode 100644 common/djangoapps/student/migrations/0043_auto__add_linkedinaddtoprofileconfiguration.py
delete mode 100644 common/djangoapps/student/migrations/0044_linkedin_add_company_identifier.py
delete mode 100644 common/djangoapps/student/migrations/0045_add_trk_partner_to_linkedin_config.py
delete mode 100644 common/djangoapps/student/migrations/0046_auto__add_entranceexamconfiguration__add_unique_entranceexamconfigurat.py
delete mode 100644 common/djangoapps/student/migrations/0047_add_bio_field.py
delete mode 100644 common/djangoapps/student/migrations/0048_add_profile_image_version.py
delete mode 100644 common/djangoapps/student/migrations/0049_auto__add_languageproficiency__add_unique_languageproficiency_code_use.py
delete mode 100644 common/djangoapps/student/migrations/0050_auto__add_manualenrollmentaudit.py
delete mode 100644 common/djangoapps/student/migrations/0051_auto__add_courseenrollmentattribute.py
delete mode 100644 common/djangoapps/student/migrations/0052_auto__add_historicalcourseenrollment.py
delete mode 100644 common/djangoapps/student/migrations/0053_auto__add_enrollmentrefundconfiguration.py
delete mode 100644 common/djangoapps/third_party_auth/migrations/0002_convert_settings.py
delete mode 100644 common/djangoapps/third_party_auth/migrations/0003_add_config_options.py
delete mode 100644 common/djangoapps/third_party_auth/migrations/0004_lti_tool_consumers.py
delete mode 100644 common/djangoapps/third_party_auth/migrations/0005_auto__add_field_ltiproviderconfig_lti_hostname.py
delete mode 100644 common/djangoapps/third_party_auth/migrations/0006_add_api_permission.py
delete mode 100644 common/djangoapps/track/migrations/0002_auto__add_field_trackinglog_host__chg_field_trackinglog_event_type__ch.py
create mode 100644 common/djangoapps/util/migrations/0002_data__default_rate_limit_config.py
delete mode 100644 common/djangoapps/util/migrations/0002_default_rate_limit_config.py
delete mode 100644 common/test/db_cache/bok_choy_data.json
delete mode 100644 common/test/db_cache/bok_choy_schema.sql
delete mode 100644 lms/djangoapps/branding/migrations/0002_auto__add_brandingapiconfig.py
delete mode 100644 lms/djangoapps/bulk_email/migrations/0002_change_field_names.py
create mode 100644 lms/djangoapps/bulk_email/migrations/0002_data__load_course_email_template.py
delete mode 100644 lms/djangoapps/bulk_email/migrations/0003_add_optout_user.py
delete mode 100644 lms/djangoapps/bulk_email/migrations/0004_migrate_optout_user.py
delete mode 100644 lms/djangoapps/bulk_email/migrations/0005_remove_optout_email.py
delete mode 100644 lms/djangoapps/bulk_email/migrations/0006_add_course_email_template.py
delete mode 100644 lms/djangoapps/bulk_email/migrations/0007_load_course_email_template.py
delete mode 100644 lms/djangoapps/bulk_email/migrations/0008_add_course_authorizations.py
delete mode 100644 lms/djangoapps/bulk_email/migrations/0009_force_unique_course_ids.py
delete mode 100644 lms/djangoapps/bulk_email/migrations/0010_auto__chg_field_optout_course_id__add_field_courseemail_template_name_.py
delete mode 100644 lms/djangoapps/ccx/migrations/0002_convert_memberships.py
delete mode 100644 lms/djangoapps/certificates/migrations/0001_added_generatedcertificates.py
create mode 100644 lms/djangoapps/certificates/migrations/0001_initial.py
delete mode 100644 lms/djangoapps/certificates/migrations/0002_auto__add_field_generatedcertificate_download_url.py
create mode 100644 lms/djangoapps/certificates/migrations/0002_data__certificatehtmlviewconfiguration_data.py
delete mode 100644 lms/djangoapps/certificates/migrations/0003_auto__add_field_generatedcertificate_enabled.py
create mode 100644 lms/djangoapps/certificates/migrations/0003_data__default_modes.py
delete mode 100644 lms/djangoapps/certificates/migrations/0004_auto__add_field_generatedcertificate_graded_certificate_id__add_field_.py
delete mode 100644 lms/djangoapps/certificates/migrations/0005_auto__add_field_generatedcertificate_name.py
delete mode 100644 lms/djangoapps/certificates/migrations/0006_auto__chg_field_generatedcertificate_certificate_id.py
delete mode 100644 lms/djangoapps/certificates/migrations/0007_auto__add_revokedcertificate.py
delete mode 100644 lms/djangoapps/certificates/migrations/0008_auto__del_revokedcertificate__del_field_generatedcertificate_name__add.py
delete mode 100644 lms/djangoapps/certificates/migrations/0009_auto__del_field_generatedcertificate_graded_download_url__del_field_ge.py
delete mode 100644 lms/djangoapps/certificates/migrations/0010_auto__del_field_generatedcertificate_enabled__add_field_generatedcerti.py
delete mode 100644 lms/djangoapps/certificates/migrations/0011_auto__del_field_generatedcertificate_certificate_id__add_field_generat.py
delete mode 100644 lms/djangoapps/certificates/migrations/0012_auto__add_field_generatedcertificate_name__add_field_generatedcertific.py
delete mode 100644 lms/djangoapps/certificates/migrations/0013_auto__add_field_generatedcertificate_error_reason.py
delete mode 100644 lms/djangoapps/certificates/migrations/0014_adding_whitelist.py
delete mode 100644 lms/djangoapps/certificates/migrations/0015_adding_mode_for_verified_certs.py
delete mode 100644 lms/djangoapps/certificates/migrations/0016_change_course_key_fields.py
delete mode 100644 lms/djangoapps/certificates/migrations/0017_auto__add_certificategenerationconfiguration.py
delete mode 100644 lms/djangoapps/certificates/migrations/0018_add_example_cert_models.py
delete mode 100644 lms/djangoapps/certificates/migrations/0019_auto__add_certificatehtmlviewconfiguration.py
delete mode 100644 lms/djangoapps/certificates/migrations/0020_certificatehtmlviewconfiguration_data.py
delete mode 100644 lms/djangoapps/certificates/migrations/0021_auto__add_badgeassertion__add_unique_badgeassertion_course_id_user__ad.py
delete mode 100644 lms/djangoapps/certificates/migrations/0022_default_modes.py
delete mode 100644 lms/djangoapps/certificates/migrations/0023_auto__del_unique_badgeassertion_course_id_user__add_unique_badgeassert.py
delete mode 100644 lms/djangoapps/certificates/migrations/0024_auto__add_certificatetemplate__add_unique_certificatetemplate_organiza.py
delete mode 100644 lms/djangoapps/certificates/migrations/0025_auto__add_field_certificatewhitelist_created__add_field_certificatewhi.py
delete mode 100644 lms/djangoapps/commerce/migrations/0001_add_ecommerce_service_user.py
create mode 100644 lms/djangoapps/commerce/migrations/0001_data__add_ecommerce_service_user.py
delete mode 100644 lms/djangoapps/courseware/migrations/0002_add_indexes.py
delete mode 100644 lms/djangoapps/courseware/migrations/0003_done_grade_cache.py
delete mode 100644 lms/djangoapps/courseware/migrations/0004_add_field_studentmodule_course_id.py
delete mode 100644 lms/djangoapps/courseware/migrations/0005_auto__add_offlinecomputedgrade__add_unique_offlinecomputedgrade_user_c.py
delete mode 100644 lms/djangoapps/courseware/migrations/0006_create_student_module_history.py
delete mode 100644 lms/djangoapps/courseware/migrations/0007_allow_null_version_in_history.py
delete mode 100644 lms/djangoapps/courseware/migrations/0008_add_xmodule_storage.py
delete mode 100644 lms/djangoapps/courseware/migrations/0009_add_field_default.py
delete mode 100644 lms/djangoapps/courseware/migrations/0010_rename_xblock_field_content_to_user_state_summary.py
delete mode 100644 lms/djangoapps/courseware/migrations/0011_add_model_StudentFieldOverride.py
delete mode 100644 lms/djangoapps/courseware/migrations/0012_auto__del_unique_studentfieldoverride_course_id_location_student__add_.py
delete mode 100644 lms/djangoapps/courseware/migrations/0013_auto__add_field_studentfieldoverride_created__add_field_studentfieldov.py
delete mode 100644 lms/djangoapps/django_comment_client/migrations/0001_initial.py
delete mode 100644 lms/djangoapps/instructor_task/migrations/0002_add_subtask_field.py
delete mode 100644 lms/djangoapps/lti_provider/migrations/0001_create_lti_consumer_model.py
create mode 100644 lms/djangoapps/lti_provider/migrations/0001_initial.py
delete mode 100644 lms/djangoapps/lti_provider/migrations/0002_create_lti_outcome_management.py
delete mode 100644 lms/djangoapps/lti_provider/migrations/0003_create_lti_user_model.py
delete mode 100644 lms/djangoapps/lti_provider/migrations/0004_add_version_to_graded_assignment.py
create mode 100644 lms/djangoapps/lti_provider/startup.py
create mode 100644 lms/djangoapps/psychometrics/migrations/0001_initial.py
create mode 100644 lms/djangoapps/psychometrics/migrations/__init__.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0002_auto__add_field_paidcourseregistration_mode.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0003_auto__del_field_orderitem_line_cost.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0004_auto__add_field_orderitem_fulfilled_time.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0005_auto__add_paidcourseregistrationannotation__add_field_orderitem_report.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0006_auto__add_field_order_refunded_time__add_field_orderitem_refund_reques.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0007_auto__add_field_orderitem_service_fee.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0008_auto__add_coupons__add_couponredemption__chg_field_certificateitem_cou.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0009_auto__del_coupons__add_courseregistrationcode__add_coupon__chg_field_c.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0010_auto__add_registrationcoderedemption__del_field_courseregistrationcode.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0011_auto__add_invoice__add_field_courseregistrationcode_invoice.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0012_auto__del_field_courseregistrationcode_transaction_group_name__del_fie.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0013_auto__add_field_invoice_is_valid.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0014_auto__del_field_invoice_tax_id__add_field_invoice_address_line_1__add_.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0015_auto__del_field_invoice_purchase_order_number__del_field_invoice_compa.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0016_auto__del_field_invoice_company_email__del_field_invoice_company_refer.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0017_auto__add_field_courseregistrationcode_order__chg_field_registrationco.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0018_auto__add_donation.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0019_auto__add_donationconfiguration.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0020_auto__add_courseregcodeitem__add_courseregcodeitemannotation__add_fiel.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0021_auto__add_field_orderitem_created__add_field_orderitem_modified.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0022_auto__add_field_registrationcoderedemption_course_enrollment__add_fiel.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0023_auto__add_field_coupon_expiration_date.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0024_auto__add_field_courseregistrationcode_mode_slug.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0025_update_invoice_models.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0026_migrate_invoices.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0027_add_invoice_history.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0028_auto__add_field_courseregistrationcode_is_valid.py
delete mode 100644 lms/djangoapps/shoppingcart/migrations/0029_better_datetime_now_default.py
delete mode 100644 lms/djangoapps/survey/migrations/0002_auto__add_field_surveyanswer_course_key.py
delete mode 100644 lms/djangoapps/teams/migrations/0002_auto__add_field_courseteam_discussion_id.py
delete mode 100644 lms/djangoapps/teams/migrations/0003_auto__add_index_courseteam_name.py
delete mode 100644 lms/djangoapps/teams/migrations/0004_auto__add_field_courseteam_discussion_topic_id__add_field_courseteam_l.py
delete mode 100644 lms/djangoapps/teams/migrations/0005_add_course_id_and_topic_id_composite_index.py
delete mode 100644 lms/djangoapps/teams/migrations/0006_add_team_size.py
delete mode 100644 lms/djangoapps/teams/migrations/0007_auto__del_field_courseteam_is_active.py
delete mode 100644 lms/djangoapps/verify_student/migrations/0002_auto__add_field_softwaresecurephotoverification_window.py
delete mode 100644 lms/djangoapps/verify_student/migrations/0003_auto__add_field_softwaresecurephotoverification_display.py
delete mode 100644 lms/djangoapps/verify_student/migrations/0004_auto__add_verificationcheckpoint__add_unique_verificationcheckpoint_co.py
delete mode 100644 lms/djangoapps/verify_student/migrations/0005_auto__add_incoursereverificationconfiguration.py
delete mode 100644 lms/djangoapps/verify_student/migrations/0006_auto__add_skippedreverification__add_unique_skippedreverification_user.py
delete mode 100644 lms/djangoapps/verify_student/migrations/0007_auto__add_field_verificationstatus_location_id.py
delete mode 100644 lms/djangoapps/verify_student/migrations/0008_auto__del_field_verificationcheckpoint_checkpoint_name__add_field_veri.py
delete mode 100644 lms/djangoapps/verify_student/migrations/0009_auto__change_softwaresecurephotoverification_window_id_default_none.py
delete mode 100644 lms/djangoapps/verify_student/migrations/0010_auto__del_field_softwaresecurephotoverification_window.py
delete mode 100644 lms/djangoapps/verify_student/migrations/0011_add_verification_deadline.py
delete mode 100644 lms/djangoapps/verify_student/migrations/0012_populate_verification_deadlines.py
delete mode 100644 lms/djangoapps/verify_student/migrations/0013_auto__add_field_softwaresecurephotoverification_copy_id_photo_from.py
delete mode 100644 lms/djangoapps/verify_student/migrations/0014_set_copy_id_photo_from.py
delete mode 100644 lms/djangoapps/verify_student/migrations/0015_auto__add_icrvstatusemailsconfiguration.py
create mode 100644 lms/envs/test_with_mysql.py
delete mode 100644 openedx/core/djangoapps/content/course_overviews/migrations/0002_add_days_early_for_beta.py
delete mode 100644 openedx/core/djangoapps/content/course_overviews/migrations/0003_add_cert_html_view_enabled.py
delete mode 100644 openedx/core/djangoapps/content/course_overviews/migrations/0004_default_lowest_passing_grade_to_None.py
delete mode 100644 openedx/core/djangoapps/content/course_overviews/migrations/0005_add_enrollment_fields.py
delete mode 100644 openedx/core/djangoapps/content/course_overviews/migrations/0006_add_version_and_timestamp.py
delete mode 100644 openedx/core/djangoapps/content/course_overviews/migrations/0007_auto__add_courseoverviewtab.py
delete mode 100644 openedx/core/djangoapps/content/course_overviews/migrations/0008_drop_course_tabs_fk_constraint.py
create mode 100644 openedx/core/djangoapps/content/course_overviews/startup.py
delete mode 100644 openedx/core/djangoapps/content/course_structures/migrations/0002_auto__add_field_coursestructure_discussion_id_map_json.py
delete mode 100644 openedx/core/djangoapps/course_groups/migrations/0002_add_model_CourseUserGroupPartitionGroup.py
delete mode 100644 openedx/core/djangoapps/course_groups/migrations/0003_auto__add_coursecohort__add_coursecohortssettings.py
delete mode 100644 openedx/core/djangoapps/course_groups/migrations/0004_auto__del_field_coursecohortssettings_cohorted_discussions__add_field_.py
delete mode 100644 openedx/core/djangoapps/course_groups/migrations/0005_cohort_membership.py
delete mode 100644 openedx/core/djangoapps/course_groups/migrations/0006_cohort_membership_data_migrate.py
delete mode 100644 openedx/core/djangoapps/credit/migrations/0002_rename_credit_requirement_criteria_field.py
delete mode 100644 openedx/core/djangoapps/credit/migrations/0003_add_creditrequirementstatus_reason.py
delete mode 100644 openedx/core/djangoapps/credit/migrations/0004_auto__add_field_creditrequirement_display_name.py
delete mode 100644 openedx/core/djangoapps/credit/migrations/0005_auto__add_field_creditprovider_provider_url__add_field_creditprovider_.py
delete mode 100644 openedx/core/djangoapps/credit/migrations/0006_auto__add_creditrequest__add_unique_creditrequest_username_course_prov.py
delete mode 100644 openedx/core/djangoapps/credit/migrations/0007_auto__add_field_creditprovider_enable_integration__chg_field_creditpro.py
delete mode 100644 openedx/core/djangoapps/credit/migrations/0008_delete_credit_provider_timestamp.py
delete mode 100644 openedx/core/djangoapps/credit/migrations/0009_auto__del_field_crediteligibility_provider.py
delete mode 100644 openedx/core/djangoapps/credit/migrations/0010_add_creditrequirementstatus_history.py
delete mode 100644 openedx/core/djangoapps/credit/migrations/0011_auto__add_field_creditrequirement_order.py
delete mode 100644 openedx/core/djangoapps/credit/migrations/0012_remove_m2m_course_and_provider.py
delete mode 100644 openedx/core/djangoapps/credit/migrations/0013_add_provider_status_url.py
delete mode 100644 openedx/core/djangoapps/credit/migrations/0014_auto__add_field_creditprovider_fulfillment_instructions.py
delete mode 100644 openedx/core/djangoapps/credit/migrations/0015_auto__add_field_creditprovider_provider_description.py
delete mode 100644 openedx/core/djangoapps/credit/migrations/0016_auto__add_field_creditprovider_eligibility_email_message__add_field_cr.py
delete mode 100644 openedx/core/djangoapps/credit/migrations/0017_auto__add_field_creditprovider_thumbnail_url.py
delete mode 100644 openedx/core/djangoapps/self_paced/migrations/0002_auto__add_field_selfpacedconfiguration_enable_course_home_improvements.py
delete mode 100644 openedx/core/djangoapps/user_api/migrations/0002_auto__add_usercoursetags__add_unique_usercoursetags_user_course_id_key.py
delete mode 100644 openedx/core/djangoapps/user_api/migrations/0003_rename_usercoursetags.py
delete mode 100644 openedx/core/djangoapps/user_api/migrations/0004_auto__add_userorgtag__add_unique_userorgtag_user_org_key__chg_field_us.py
diff --git a/cms/djangoapps/contentstore/__init__.py b/cms/djangoapps/contentstore/__init__.py
index d3060371e5d8..e69de29bb2d1 100644
--- a/cms/djangoapps/contentstore/__init__.py
+++ b/cms/djangoapps/contentstore/__init__.py
@@ -1,2 +0,0 @@
-""" module init will register signal handlers """
-import contentstore.signals
diff --git a/cms/djangoapps/contentstore/context_processors.py b/cms/djangoapps/contentstore/context_processors.py
index 9d3131dd13f2..e9811c8be3e4 100644
--- a/cms/djangoapps/contentstore/context_processors.py
+++ b/cms/djangoapps/contentstore/context_processors.py
@@ -15,7 +15,7 @@
def doc_url(request=None): # pylint: disable=unused-argument
"""
- This function is added in the list of TEMPLATE_CONTEXT_PROCESSORS, which is a django setting for
+ This function is added in the list of TEMPLATES 'context_processors' OPTION, which is a django setting for
a tuple of callables that take a request object as their argument and return a dictionary of items
to be merged into the RequestContext.
diff --git a/cms/djangoapps/contentstore/courseware_index.py b/cms/djangoapps/contentstore/courseware_index.py
index bcf26f35725a..a3cc37542255 100644
--- a/cms/djangoapps/contentstore/courseware_index.py
+++ b/cms/djangoapps/contentstore/courseware_index.py
@@ -7,7 +7,7 @@
from six import add_metaclass
from django.conf import settings
-from django.utils.translation import ugettext as _
+from django.utils.translation import ugettext_lazy, ugettext as _
from django.core.urlresolvers import resolve
from contentstore.utils import course_image_url
@@ -350,7 +350,7 @@ class CoursewareSearchIndexer(SearchIndexerBase):
'category': 'courseware_index'
}
- UNNAMED_MODULE_NAME = _("(Unnamed)")
+ UNNAMED_MODULE_NAME = ugettext_lazy("(Unnamed)")
@classmethod
def normalize_structure_key(cls, structure_key):
@@ -417,7 +417,7 @@ def supplemental_fields(cls, item):
while parent is not None:
path_component_name = parent.display_name
if not path_component_name:
- path_component_name = cls.UNNAMED_MODULE_NAME
+ path_component_name = unicode(cls.UNNAMED_MODULE_NAME)
location_path.append(path_component_name)
parent = parent.get_parent()
location_path.reverse()
diff --git a/cms/djangoapps/contentstore/management/commands/delete_orphans.py b/cms/djangoapps/contentstore/management/commands/delete_orphans.py
index 202f8c2057a8..c0971bbc0839 100644
--- a/cms/djangoapps/contentstore/management/commands/delete_orphans.py
+++ b/cms/djangoapps/contentstore/management/commands/delete_orphans.py
@@ -14,18 +14,19 @@ class Command(BaseCommand):
|commit|: optional argument. If not provided, will not run task.
'''
- def handle(self, *args, **options):
- if len(args) not in {1, 2}:
- raise CommandError("delete_orphans requires one or more arguments: |commit|")
+ def add_arguments(self, parser):
+ parser.add_argument('course_id')
+ parser.add_argument('--commit', action='store')
+ def handle(self, *args, **options):
try:
- course_key = CourseKey.from_string(args[0])
+ course_key = CourseKey.from_string(options['course_id'])
except InvalidKeyError:
raise CommandError("Invalid course key.")
commit = False
- if len(args) == 2:
- commit = args[1] == 'commit'
+ if options['commit']:
+ commit = options['commit'] == 'commit'
if commit:
print 'Deleting orphans from the course:'
diff --git a/cms/djangoapps/contentstore/management/commands/export.py b/cms/djangoapps/contentstore/management/commands/export.py
index 2aa2b0fdba17..076bf944a2aa 100644
--- a/cms/djangoapps/contentstore/management/commands/export.py
+++ b/cms/djangoapps/contentstore/management/commands/export.py
@@ -18,23 +18,24 @@ class Command(BaseCommand):
"""
help = 'Export the specified data directory into the default ModuleStore'
- def handle(self, *args, **options):
- "Execute the command"
- if len(args) != 2:
- raise CommandError("export requires two arguments: ")
+ def add_arguments(self, parser):
+ parser.add_argument('course_id')
+ parser.add_argument('output_path')
+ def handle(self, *args, **options):
+ """Execute the command"""
try:
- course_key = CourseKey.from_string(args[0])
+ course_key = CourseKey.from_string(options['course_id'])
except InvalidKeyError:
try:
- course_key = SlashSeparatedCourseKey.from_deprecated_string(args[0])
+ course_key = SlashSeparatedCourseKey.from_deprecated_string(options['course_id'])
except InvalidKeyError:
- raise CommandError("Invalid course_key: '%s'. " % args[0])
+ raise CommandError("Invalid course_key: '%s'." % options['course_id'])
if not modulestore().get_course(course_key):
- raise CommandError("Course with %s key not found." % args[0])
+ raise CommandError("Course with %s key not found." % options['course_id'])
- output_path = args[1]
+ output_path = options['output_path']
print "Exporting course id = {0} to {1}".format(course_key, output_path)
diff --git a/cms/djangoapps/contentstore/management/commands/fix_not_found.py b/cms/djangoapps/contentstore/management/commands/fix_not_found.py
index 87e34061837c..c31c4d446c44 100644
--- a/cms/djangoapps/contentstore/management/commands/fix_not_found.py
+++ b/cms/djangoapps/contentstore/management/commands/fix_not_found.py
@@ -13,12 +13,14 @@ class Command(BaseCommand):
"""Fix a course's item not found errors"""
help = "Fix a course's ItemNotFound errors"
+ def add_arguments(self, parser):
+ parser.add_argument('course_id')
+
def handle(self, *args, **options):
- "Execute the command"
- if len(args) != 1:
- raise CommandError("requires 1 argument: ")
+ """Execute the command"""
+ course_id = options.get('course_id', None)
- course_key = CourseKey.from_string(args[0])
+ course_key = CourseKey.from_string(course_id)
# for now only support on split mongo
# pylint: disable=protected-access
owning_store = modulestore()._get_modulestore_for_courselike(course_key)
diff --git a/cms/djangoapps/contentstore/management/commands/import.py b/cms/djangoapps/contentstore/management/commands/import.py
index 870d4eb72224..9a9483cbc1c6 100644
--- a/cms/djangoapps/contentstore/management/commands/import.py
+++ b/cms/djangoapps/contentstore/management/commands/import.py
@@ -1,8 +1,9 @@
"""
Script for importing courseware from XML format
"""
+from optparse import make_option
-from django.core.management.base import BaseCommand, CommandError, make_option
+from django.core.management.base import BaseCommand, CommandError
from django_comment_common.utils import (seed_permissions_roles,
are_permissions_roles_seeded)
from xmodule.modulestore.xml_importer import import_course_from_xml
diff --git a/cms/djangoapps/contentstore/management/commands/tests/test_delete_orphans.py b/cms/djangoapps/contentstore/management/commands/tests/test_delete_orphans.py
index 9f38a8543804..502cd7b49f71 100644
--- a/cms/djangoapps/contentstore/management/commands/tests/test_delete_orphans.py
+++ b/cms/djangoapps/contentstore/management/commands/tests/test_delete_orphans.py
@@ -1,7 +1,7 @@
"""Tests running the delete_orphan command"""
import ddt
-from django.core.management import call_command
+from django.core.management import call_command, CommandError
from contentstore.tests.test_orphan import TestOrphanBase
from xmodule.modulestore.tests.factories import CourseFactory
@@ -14,6 +14,13 @@ class TestDeleteOrphan(TestOrphanBase):
Tests for running the delete_orphan management command.
Inherits from TestOrphan in order to use its setUp method.
"""
+ def test_no_args(self):
+ """
+ Test delete_orphans command with no arguments
+ """
+ with self.assertRaisesRegexp(CommandError, 'Error: too few arguments'):
+ call_command('delete_orphans')
+
@ddt.data(ModuleStoreEnum.Type.split, ModuleStoreEnum.Type.mongo)
def test_delete_orphans_no_commit(self, default_store):
"""
@@ -35,7 +42,7 @@ def test_delete_orphans_commit(self, default_store):
"""
course = self.create_course_with_orphans(default_store)
- call_command('delete_orphans', unicode(course.id), 'commit')
+ call_command('delete_orphans', unicode(course.id), commit='commit')
# make sure this module wasn't deleted
self.assertTrue(self.store.has_item(course.id.make_usage_key('html', 'multi_parent_html')))
@@ -59,7 +66,7 @@ def test_delete_orphans_published_branch_split(self):
# call delete orphans, specifying the published branch
# of the course
- call_command('delete_orphans', unicode(published_branch), 'commit')
+ call_command('delete_orphans', unicode(published_branch), commit='commit')
# now all orphans should be deleted
self.assertOrphanCount(course.id, 0)
diff --git a/cms/djangoapps/contentstore/management/commands/tests/test_export.py b/cms/djangoapps/contentstore/management/commands/tests/test_export.py
index 5ac8fb8d8359..dcb8a208aa50 100644
--- a/cms/djangoapps/contentstore/management/commands/tests/test_export.py
+++ b/cms/djangoapps/contentstore/management/commands/tests/test_export.py
@@ -24,11 +24,9 @@ def test_no_args(self):
"""
Test export command with no arguments
"""
- errstring = "export requires two arguments: "
- with self.assertRaises(SystemExit) as ex:
- with self.assertRaisesRegexp(CommandError, errstring):
- call_command('export')
- self.assertEqual(ex.exception.code, 1)
+ errstring = "Error: too few arguments"
+ with self.assertRaisesRegexp(CommandError, errstring):
+ call_command('export')
@ddt.ddt
@@ -59,11 +57,9 @@ def test_export_course_with_directory_name(self, store):
"Could not find course in {}".format(store)
)
# Test `export` management command with invalid course_id
- errstring = "Invalid course_key 'InvalidCourseID'."
- with self.assertRaises(SystemExit) as ex:
- with self.assertRaisesRegexp(CommandError, errstring):
- call_command('export', "InvalidCourseID", self.temp_dir_1)
- self.assertEqual(ex.exception.code, 1)
+ errstring = "Invalid course_key: 'InvalidCourseID'."
+ with self.assertRaisesRegexp(CommandError, errstring):
+ call_command('export', "InvalidCourseID", self.temp_dir_1)
# Test `export` management command with correct course_id
for output_dir in [self.temp_dir_1, self.temp_dir_2]:
@@ -74,7 +70,5 @@ def test_course_key_not_found(self):
Test export command with a valid course key that doesn't exist
"""
errstring = "Course with x/y/z key not found."
- with self.assertRaises(SystemExit) as ex:
- with self.assertRaisesRegexp(CommandError, errstring):
- call_command('export', "x/y/z", self.temp_dir_1)
- self.assertEqual(ex.exception.code, 1)
+ with self.assertRaisesRegexp(CommandError, errstring):
+ call_command('export', "x/y/z", self.temp_dir_1)
diff --git a/cms/djangoapps/contentstore/management/commands/tests/test_fix_not_found.py b/cms/djangoapps/contentstore/management/commands/tests/test_fix_not_found.py
index ceff802d4637..dac5ad039309 100644
--- a/cms/djangoapps/contentstore/management/commands/tests/test_fix_not_found.py
+++ b/cms/djangoapps/contentstore/management/commands/tests/test_fix_not_found.py
@@ -2,7 +2,7 @@
Tests for the fix_not_found management command
"""
-from django.core.management import call_command
+from django.core.management import CommandError, call_command
from xmodule.modulestore import ModuleStoreEnum
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory
@@ -12,12 +12,19 @@ class TestFixNotFound(ModuleStoreTestCase):
"""
Tests for the fix_not_found management command
"""
+ def test_no_args(self):
+ """
+ Test fix_not_found command with no arguments
+ """
+ with self.assertRaisesRegexp(CommandError, "Error: too few arguments"):
+ call_command('fix_not_found')
+
def test_fix_not_found_non_split(self):
"""
The management command doesn't work on non split courses
"""
course = CourseFactory.create(default_store=ModuleStoreEnum.Type.mongo)
- with self.assertRaises(SystemExit):
+ with self.assertRaisesRegexp(CommandError, "The owning modulestore does not support this command."):
call_command("fix_not_found", unicode(course.id))
def test_fix_not_found(self):
diff --git a/cms/djangoapps/contentstore/management/commands/tests/test_git_export.py b/cms/djangoapps/contentstore/management/commands/tests/test_git_export.py
index 3b98c3db4a5a..a8dfe03cd026 100644
--- a/cms/djangoapps/contentstore/management/commands/tests/test_git_export.py
+++ b/cms/djangoapps/contentstore/management/commands/tests/test_git_export.py
@@ -56,57 +56,33 @@ def test_command(self):
Test that the command interface works. Ignore stderr for clean
test output.
"""
- with self.assertRaises(SystemExit) as ex:
- with self.assertRaisesRegexp(CommandError, 'This script requires.*'):
- call_command('git_export', 'blah', 'blah', 'blah',
- stderr=StringIO.StringIO())
- self.assertEqual(ex.exception.code, 1)
+ with self.assertRaisesRegexp(CommandError, 'This script requires.*'):
+ call_command('git_export', 'blah', 'blah', 'blah', stderr=StringIO.StringIO())
- with self.assertRaises(SystemExit) as ex:
- with self.assertRaisesRegexp(CommandError, 'This script requires.*'):
- call_command('git_export', stderr=StringIO.StringIO())
- self.assertEqual(ex.exception.code, 1)
+ with self.assertRaisesRegexp(CommandError, 'This script requires.*'):
+ call_command('git_export', stderr=StringIO.StringIO())
# Send bad url to get course not exported
- with self.assertRaises(SystemExit) as ex:
- with self.assertRaisesRegexp(CommandError, unicode(GitExportError.URL_BAD)):
- call_command('git_export', 'foo/bar/baz', 'silly',
- stderr=StringIO.StringIO())
- self.assertEqual(ex.exception.code, 1)
+ with self.assertRaisesRegexp(CommandError, unicode(GitExportError.URL_BAD)):
+ call_command('git_export', 'foo/bar/baz', 'silly', stderr=StringIO.StringIO())
+
# Send bad course_id to get course not exported
- with self.assertRaises(SystemExit) as ex:
- with self.assertRaisesRegexp(CommandError, unicode(GitExportError.BAD_COURSE)):
- call_command('git_export', 'foo/bar:baz', 'silly',
- stderr=StringIO.StringIO())
- self.assertEqual(ex.exception.code, 1)
+ with self.assertRaisesRegexp(CommandError, unicode(GitExportError.BAD_COURSE)):
+ call_command('git_export', 'foo/bar:baz', 'silly', stderr=StringIO.StringIO())
def test_error_output(self):
"""
Verify that error output is actually resolved as the correct string
"""
- output = StringIO.StringIO()
- with self.assertRaises(SystemExit):
- with self.assertRaisesRegexp(CommandError, unicode(GitExportError.BAD_COURSE)):
- call_command(
- 'git_export', 'foo/bar:baz', 'silly',
- stdout=output, stderr=output
- )
- self.assertIn('Bad course location provided', output.getvalue())
- output.close()
-
- output = StringIO.StringIO()
- with self.assertRaises(SystemExit):
- with self.assertRaisesRegexp(CommandError, unicode(GitExportError.URL_BAD)):
- call_command(
- 'git_export', 'foo/bar/baz', 'silly',
- stdout=output, stderr=output
- )
- self.assertIn(
- 'Non writable git url provided. Expecting something like:'
- ' git@github.com:mitocw/edx4edx_lite.git',
- output.getvalue()
- )
- output.close()
+ with self.assertRaisesRegexp(CommandError, unicode(GitExportError.BAD_COURSE)):
+ call_command(
+ 'git_export', 'foo/bar:baz', 'silly'
+ )
+
+ with self.assertRaisesRegexp(CommandError, unicode(GitExportError.URL_BAD)):
+ call_command(
+ 'git_export', 'foo/bar/baz', 'silly'
+ )
def test_bad_git_url(self):
"""
diff --git a/cms/djangoapps/contentstore/management/commands/tests/test_reindex_courses.py b/cms/djangoapps/contentstore/management/commands/tests/test_reindex_courses.py
index 6383d046b8b9..71db8f4f07d6 100644
--- a/cms/djangoapps/contentstore/management/commands/tests/test_reindex_courses.py
+++ b/cms/djangoapps/contentstore/management/commands/tests/test_reindex_courses.py
@@ -6,7 +6,6 @@
from xmodule.modulestore import ModuleStoreEnum
from xmodule.modulestore.django import modulestore
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
-from common.test.utils import nostderr
from xmodule.modulestore.tests.factories import CourseFactory, LibraryFactory
from contentstore.management.commands.reindex_course import Command as ReindexCommand
@@ -48,36 +47,30 @@ def _build_calls(self, *courses):
def test_given_no_arguments_raises_command_error(self):
""" Test that raises CommandError for incorrect arguments """
- with self.assertRaises(SystemExit), nostderr():
- with self.assertRaisesRegexp(CommandError, ".* requires one or more arguments .*"):
- call_command('reindex_course')
+ with self.assertRaisesRegexp(CommandError, ".* requires one or more arguments.*"):
+ call_command('reindex_course')
- @ddt.data('qwerty', 'invalid_key', 'xblock-v1:qwe+rty')
+ @ddt.data('qwerty', 'invalid_key', 'xblockv1:qwerty')
def test_given_invalid_course_key_raises_not_found(self, invalid_key):
""" Test that raises InvalidKeyError for invalid keys """
- errstring = "Invalid course_key: '%s'." % invalid_key
- with self.assertRaises(SystemExit) as ex:
- with self.assertRaisesRegexp(CommandError, errstring):
- call_command('reindex_course', invalid_key)
- self.assertEqual(ex.exception.code, 1)
+ err_string = "Invalid course_key: '{0}'".format(invalid_key)
+ with self.assertRaisesRegexp(CommandError, err_string):
+ call_command('reindex_course', invalid_key)
def test_given_library_key_raises_command_error(self):
""" Test that raises CommandError if library key is passed """
- with self.assertRaises(SystemExit), nostderr():
- with self.assertRaisesRegexp(SearchIndexingError, ".* is not a course key"):
- call_command('reindex_course', unicode(self._get_lib_key(self.first_lib)))
-
- with self.assertRaises(SystemExit), nostderr():
- with self.assertRaisesRegexp(SearchIndexingError, ".* is not a course key"):
- call_command('reindex_course', unicode(self._get_lib_key(self.second_lib)))
-
- with self.assertRaises(SystemExit), nostderr():
- with self.assertRaisesRegexp(SearchIndexingError, ".* is not a course key"):
- call_command(
- 'reindex_course',
- unicode(self.second_course.id),
- unicode(self._get_lib_key(self.first_lib))
- )
+ with self.assertRaisesRegexp(CommandError, ".* is not a course key"):
+ call_command('reindex_course', unicode(self._get_lib_key(self.first_lib)))
+
+ with self.assertRaisesRegexp(CommandError, ".* is not a course key"):
+ call_command('reindex_course', unicode(self._get_lib_key(self.second_lib)))
+
+ with self.assertRaisesRegexp(CommandError, ".* is not a course key"):
+ call_command(
+ 'reindex_course',
+ unicode(self.second_course.id),
+ unicode(self._get_lib_key(self.first_lib))
+ )
def test_given_id_list_indexes_courses(self):
""" Test that reindexes courses when given single course key or a list of course keys """
diff --git a/cms/djangoapps/contentstore/management/commands/tests/test_reindex_library.py b/cms/djangoapps/contentstore/management/commands/tests/test_reindex_library.py
index 0fab7f28e1f4..d44b8a38869d 100644
--- a/cms/djangoapps/contentstore/management/commands/tests/test_reindex_library.py
+++ b/cms/djangoapps/contentstore/management/commands/tests/test_reindex_library.py
@@ -6,7 +6,6 @@
from xmodule.modulestore import ModuleStoreEnum
from xmodule.modulestore.django import modulestore
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
-from common.test.utils import nostderr
from xmodule.modulestore.tests.factories import CourseFactory, LibraryFactory
from opaque_keys import InvalidKeyError
@@ -50,9 +49,8 @@ def _build_calls(self, *libraries):
def test_given_no_arguments_raises_command_error(self):
""" Test that raises CommandError for incorrect arguments """
- with self.assertRaises(SystemExit), nostderr():
- with self.assertRaisesRegexp(CommandError, ".* requires one or more arguments .*"):
- call_command('reindex_library')
+ with self.assertRaisesRegexp(CommandError, ".* requires one or more arguments.*"):
+ call_command('reindex_library')
@ddt.data('qwerty', 'invalid_key', 'xblock-v1:qwe+rty')
def test_given_invalid_lib_key_raises_not_found(self, invalid_key):
@@ -62,21 +60,18 @@ def test_given_invalid_lib_key_raises_not_found(self, invalid_key):
def test_given_course_key_raises_command_error(self):
""" Test that raises CommandError if course key is passed """
- with self.assertRaises(SystemExit), nostderr():
- with self.assertRaisesRegexp(CommandError, ".* is not a library key"):
- call_command('reindex_library', unicode(self.first_course.id))
-
- with self.assertRaises(SystemExit), nostderr():
- with self.assertRaisesRegexp(CommandError, ".* is not a library key"):
- call_command('reindex_library', unicode(self.second_course.id))
-
- with self.assertRaises(SystemExit), nostderr():
- with self.assertRaisesRegexp(CommandError, ".* is not a library key"):
- call_command(
- 'reindex_library',
- unicode(self.second_course.id),
- unicode(self._get_lib_key(self.first_lib))
- )
+ with self.assertRaisesRegexp(CommandError, ".* is not a library key"):
+ call_command('reindex_library', unicode(self.first_course.id))
+
+ with self.assertRaisesRegexp(CommandError, ".* is not a library key"):
+ call_command('reindex_library', unicode(self.second_course.id))
+
+ with self.assertRaisesRegexp(CommandError, ".* is not a library key"):
+ call_command(
+ 'reindex_library',
+ unicode(self.second_course.id),
+ unicode(self._get_lib_key(self.first_lib))
+ )
def test_given_id_list_indexes_libraries(self):
""" Test that reindexes libraries when given single library key or a list of library keys """
diff --git a/cms/djangoapps/contentstore/migrations/0001_initial.py b/cms/djangoapps/contentstore/migrations/0001_initial.py
index e824bac7d050..88126406e34b 100644
--- a/cms/djangoapps/contentstore/migrations/0001_initial.py
+++ b/cms/djangoapps/contentstore/migrations/0001_initial.py
@@ -1,80 +1,43 @@
# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
+from __future__ import unicode_literals
+from django.db import migrations, models
+import django.db.models.deletion
+from django.conf import settings
-class Migration(SchemaMigration):
- def forwards(self, orm):
- # Adding model 'VideoUploadConfig'
- db.create_table('contentstore_videouploadconfig', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('change_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
- ('changed_by', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, on_delete=models.PROTECT)),
- ('enabled', self.gf('django.db.models.fields.BooleanField')(default=False)),
- ('profile_whitelist', self.gf('django.db.models.fields.TextField')(blank=True)),
- ('status_whitelist', self.gf('django.db.models.fields.TextField')(blank=True)),
- ))
- db.send_create_signal('contentstore', ['VideoUploadConfig'])
+class Migration(migrations.Migration):
- if not db.dry_run:
- orm.VideoUploadConfig.objects.create(
- profile_whitelist="desktop_mp4,desktop_webm,mobile_low,youtube",
- status_whitelist="Uploading,In Progress,Complete,Failed,Invalid Token,Unknown"
- )
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ]
- def backwards(self, orm):
- # Deleting model 'VideoUploadConfig'
- db.delete_table('contentstore_videouploadconfig')
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contentstore.videouploadconfig': {
- 'Meta': {'object_name': 'VideoUploadConfig'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'profile_whitelist': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'status_whitelist': ('django.db.models.fields.TextField', [], {'blank': 'True'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- }
- }
-
- complete_apps = ['contentstore']
+ operations = [
+ migrations.CreateModel(
+ name='PushNotificationConfig',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('change_date', models.DateTimeField(auto_now_add=True, verbose_name='Change date')),
+ ('enabled', models.BooleanField(default=False, verbose_name='Enabled')),
+ ('changed_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, editable=False, to=settings.AUTH_USER_MODEL, null=True, verbose_name='Changed by')),
+ ],
+ options={
+ 'ordering': ('-change_date',),
+ 'abstract': False,
+ },
+ ),
+ migrations.CreateModel(
+ name='VideoUploadConfig',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('change_date', models.DateTimeField(auto_now_add=True, verbose_name='Change date')),
+ ('enabled', models.BooleanField(default=False, verbose_name='Enabled')),
+ ('profile_whitelist', models.TextField(help_text=b'A comma-separated list of names of profiles to include in video encoding downloads.', blank=True)),
+ ('changed_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, editable=False, to=settings.AUTH_USER_MODEL, null=True, verbose_name='Changed by')),
+ ],
+ options={
+ 'ordering': ('-change_date',),
+ 'abstract': False,
+ },
+ ),
+ ]
diff --git a/cms/djangoapps/contentstore/migrations/0002_auto__del_field_videouploadconfig_status_whitelist.py b/cms/djangoapps/contentstore/migrations/0002_auto__del_field_videouploadconfig_status_whitelist.py
deleted file mode 100644
index e5fce94d8b66..000000000000
--- a/cms/djangoapps/contentstore/migrations/0002_auto__del_field_videouploadconfig_status_whitelist.py
+++ /dev/null
@@ -1,69 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Deleting field 'VideoUploadConfig.status_whitelist'
- db.delete_column('contentstore_videouploadconfig', 'status_whitelist')
-
-
- def backwards(self, orm):
- # Adding field 'VideoUploadConfig.status_whitelist'
- db.add_column('contentstore_videouploadconfig', 'status_whitelist',
- self.gf('django.db.models.fields.TextField')(default='', blank=True),
- keep_default=False)
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contentstore.videouploadconfig': {
- 'Meta': {'object_name': 'VideoUploadConfig'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'profile_whitelist': ('django.db.models.fields.TextField', [], {'blank': 'True'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- }
- }
-
- complete_apps = ['contentstore']
\ No newline at end of file
diff --git a/cms/djangoapps/contentstore/migrations/0003_auto__add_pushnotificationconfig.py b/cms/djangoapps/contentstore/migrations/0003_auto__add_pushnotificationconfig.py
deleted file mode 100644
index 7963916271e3..000000000000
--- a/cms/djangoapps/contentstore/migrations/0003_auto__add_pushnotificationconfig.py
+++ /dev/null
@@ -1,80 +0,0 @@
-# -*- coding: utf-8 -*-
-from south.utils import datetime_utils as datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'PushNotificationConfig'
- db.create_table('contentstore_pushnotificationconfig', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('change_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
- ('changed_by', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, on_delete=models.PROTECT)),
- ('enabled', self.gf('django.db.models.fields.BooleanField')(default=False)),
- ))
- db.send_create_signal('contentstore', ['PushNotificationConfig'])
-
-
- def backwards(self, orm):
- # Deleting model 'PushNotificationConfig'
- db.delete_table('contentstore_pushnotificationconfig')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contentstore.pushnotificationconfig': {
- 'Meta': {'object_name': 'PushNotificationConfig'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'contentstore.videouploadconfig': {
- 'Meta': {'object_name': 'VideoUploadConfig'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'profile_whitelist': ('django.db.models.fields.TextField', [], {'blank': 'True'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- }
- }
-
- complete_apps = ['contentstore']
\ No newline at end of file
diff --git a/cms/djangoapps/contentstore/startup.py b/cms/djangoapps/contentstore/startup.py
new file mode 100644
index 000000000000..a19773bb3791
--- /dev/null
+++ b/cms/djangoapps/contentstore/startup.py
@@ -0,0 +1,2 @@
+""" will register signal handlers, moved out of __init__.py to ensure correct loading order post Django 1.7 """
+from . import signals # pylint: disable=unused-import
diff --git a/cms/djangoapps/contentstore/views/entrance_exam.py b/cms/djangoapps/contentstore/views/entrance_exam.py
index aaf311ba4f1e..400ce362d352 100644
--- a/cms/djangoapps/contentstore/views/entrance_exam.py
+++ b/cms/djangoapps/contentstore/views/entrance_exam.py
@@ -187,7 +187,7 @@ def _get_entrance_exam(request, course_key): # pylint: disable=W0613
exam_descriptor = modulestore().get_item(exam_key)
return HttpResponse(
escape_json_dumps({'locator': unicode(exam_descriptor.location)}),
- status=200, mimetype='application/json')
+ status=200, content_type='application/json')
except ItemNotFoundError:
return HttpResponse(status=404)
diff --git a/cms/djangoapps/contentstore/views/item.py b/cms/djangoapps/contentstore/views/item.py
index 0eddbcb9ebfe..e0f5537bde2e 100644
--- a/cms/djangoapps/contentstore/views/item.py
+++ b/cms/djangoapps/contentstore/views/item.py
@@ -301,7 +301,7 @@ def xblock_view_handler(request, usage_key_string, view_name):
hashed_resources = OrderedDict()
for resource in fragment.resources:
- hashed_resources[hash_resource(resource)] = resource
+ hashed_resources[hash_resource(resource)] = resource._asdict()
return JsonResponse({
'html': fragment.content,
diff --git a/cms/djangoapps/contentstore/views/preview.py b/cms/djangoapps/contentstore/views/preview.py
index 6e5d6dc768e5..0bc31f41c0ac 100644
--- a/cms/djangoapps/contentstore/views/preview.py
+++ b/cms/djangoapps/contentstore/views/preview.py
@@ -38,7 +38,7 @@
from .helpers import render_from_lms
from contentstore.views.access import get_user_role
-from cms.djangoapps.xblock_config.models import StudioConfig
+from xblock_config.models import StudioConfig
__all__ = ['preview_handler']
diff --git a/cms/djangoapps/contentstore/views/tests/test_course_index.py b/cms/djangoapps/contentstore/views/tests/test_course_index.py
index 2cfeeb8e049c..0d3e5932b203 100644
--- a/cms/djangoapps/contentstore/views/tests/test_course_index.py
+++ b/cms/djangoapps/contentstore/views/tests/test_course_index.py
@@ -610,12 +610,12 @@ def test_negative_conditions(self):
response = non_staff_client.get(index_url, {}, HTTP_ACCEPT='application/json')
self.assertEqual(response.status_code, 403)
- def test_content_type_none(self):
+ def test_empty_content_type(self):
"""
- Test json content type is set if none is selected
+ Test json content type is set if '' is selected
"""
index_url = reverse_course_url('course_search_index_handler', self.course.id)
- response = self.client.get(index_url, {}, CONTENT_TYPE=None)
+ response = self.client.get(index_url, {}, CONTENT_TYPE='')
# A course with the default release date should display as "Unscheduled"
self.assertIn(self.SUCCESSFUL_RESPONSE, response.content)
diff --git a/cms/djangoapps/contentstore/views/tests/test_preview.py b/cms/djangoapps/contentstore/views/tests/test_preview.py
index 107e5dc955f2..e7a34c0957f7 100644
--- a/cms/djangoapps/contentstore/views/tests/test_preview.py
+++ b/cms/djangoapps/contentstore/views/tests/test_preview.py
@@ -17,7 +17,7 @@
from contentstore.views.preview import get_preview_fragment, _preview_module_system
from xmodule.modulestore import ModuleStoreEnum
from xmodule.modulestore.tests.test_asides import AsideTestType
-from cms.djangoapps.xblock_config.models import StudioConfig
+from xblock_config.models import StudioConfig
from xmodule.modulestore.django import modulestore
diff --git a/cms/djangoapps/course_creators/migrations/0001_initial.py b/cms/djangoapps/course_creators/migrations/0001_initial.py
index a1d2c8d08a27..14b68306c763 100644
--- a/cms/djangoapps/course_creators/migrations/0001_initial.py
+++ b/cms/djangoapps/course_creators/migrations/0001_initial.py
@@ -1,74 +1,25 @@
# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'CourseCreator'
- db.create_table('course_creators_coursecreator', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], unique=True)),
- ('state_changed', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
- ('state', self.gf('django.db.models.fields.CharField')(default='unrequested', max_length=24)),
- ('note', self.gf('django.db.models.fields.CharField')(max_length=512, blank=True)),
- ))
- db.send_create_signal('course_creators', ['CourseCreator'])
-
-
- def backwards(self, orm):
- # Deleting model 'CourseCreator'
- db.delete_table('course_creators_coursecreator')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'course_creators.coursecreator': {
- 'Meta': {'object_name': 'CourseCreator'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'note': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
- 'state': ('django.db.models.fields.CharField', [], {'default': "'unrequested'", 'max_length': '24'}),
- 'state_changed': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- }
- }
-
- complete_apps = ['course_creators']
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+from django.conf import settings
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='CourseCreator',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('state_changed', models.DateTimeField(help_text='The date when state was last updated', verbose_name=b'state last updated', auto_now_add=True)),
+ ('state', models.CharField(default=b'unrequested', help_text='Current course creator state', max_length=24, choices=[(b'unrequested', 'unrequested'), (b'pending', 'pending'), (b'granted', 'granted'), (b'denied', 'denied')])),
+ ('note', models.CharField(help_text='Optional notes about this user (for example, why course creation access was denied)', max_length=512, blank=True)),
+ ('user', models.OneToOneField(to=settings.AUTH_USER_MODEL, help_text='Studio user')),
+ ],
+ ),
+ ]
diff --git a/cms/djangoapps/course_creators/models.py b/cms/djangoapps/course_creators/models.py
index 5138916c8894..59d28b63e1a8 100644
--- a/cms/djangoapps/course_creators/models.py
+++ b/cms/djangoapps/course_creators/models.py
@@ -36,7 +36,7 @@ class CourseCreator(models.Model):
(DENIED, _(u'denied')),
)
- user = models.ForeignKey(User, help_text=_("Studio user"), unique=True)
+ user = models.OneToOneField(User, help_text=_("Studio user"))
state_changed = models.DateTimeField('state last updated', auto_now_add=True,
help_text=_("The date when state was last updated"))
state = models.CharField(max_length=24, blank=False, choices=STATES, default=UNREQUESTED,
diff --git a/cms/djangoapps/course_creators/tests/test_admin.py b/cms/djangoapps/course_creators/tests/test_admin.py
index 059dbc3cb6b5..45d84eed6290 100644
--- a/cms/djangoapps/course_creators/tests/test_admin.py
+++ b/cms/djangoapps/course_creators/tests/test_admin.py
@@ -105,7 +105,7 @@ def check_admin_message_state(state, expect_sent_to_admin, expect_sent_to_user):
# message sent. Admin message will follow.
base_num_emails = 1 if expect_sent_to_user else 0
if expect_sent_to_admin:
- context = {'user_name': "test_user", 'user_email': 'test_user+courses@edx.org'}
+ context = {'user_name': "test_user", 'user_email': u'test_user+courses@edx.org'}
self.assertEquals(base_num_emails + 1, len(mail.outbox), 'Expected admin message to be sent')
sent_mail = mail.outbox[base_num_emails]
self.assertEquals(
@@ -166,10 +166,10 @@ def test_rate_limit_login(self):
# try logging in 30 times, the default limit in the number of failed
# login attempts in one 5 minute period before the rate gets limited
for _ in xrange(30):
- response = self.client.post('/admin/', post_params)
+ response = self.client.post('/admin/login/', post_params)
self.assertEquals(response.status_code, 200)
- response = self.client.post('/admin/', post_params)
+ response = self.client.post('/admin/login/', post_params)
# Since we are using the default rate limit behavior, we are
# expecting this to return a 403 error to indicate that there have
# been too many attempts
diff --git a/cms/djangoapps/xblock_config/admin.py b/cms/djangoapps/xblock_config/admin.py
index daad91a062ed..dc837814276e 100644
--- a/cms/djangoapps/xblock_config/admin.py
+++ b/cms/djangoapps/xblock_config/admin.py
@@ -4,6 +4,6 @@
from django.contrib import admin
from config_models.admin import ConfigurationModelAdmin
-from cms.djangoapps.xblock_config.models import StudioConfig
+from xblock_config.models import StudioConfig
admin.site.register(StudioConfig, ConfigurationModelAdmin)
diff --git a/cms/djangoapps/xblock_config/migrations/0001_initial.py b/cms/djangoapps/xblock_config/migrations/0001_initial.py
index c48d02bd5710..8d3f9883cd74 100644
--- a/cms/djangoapps/xblock_config/migrations/0001_initial.py
+++ b/cms/djangoapps/xblock_config/migrations/0001_initial.py
@@ -1,74 +1,30 @@
# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'StudioConfig'
- db.create_table('xblock_config_studioconfig', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('change_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
- ('changed_by', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, on_delete=models.PROTECT)),
- ('enabled', self.gf('django.db.models.fields.BooleanField')(default=False)),
- ('disabled_blocks', self.gf('django.db.models.fields.TextField')(default='about course_info static_tab')),
- ))
- db.send_create_signal('xblock_config', ['StudioConfig'])
-
-
- def backwards(self, orm):
- # Deleting model 'StudioConfig'
- db.delete_table('xblock_config_studioconfig')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'xblock_config.studioconfig': {
- 'Meta': {'object_name': 'StudioConfig'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'disabled_blocks': ('django.db.models.fields.TextField', [], {'default': "'about course_info static_tab'"}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- }
- }
-
- complete_apps = ['xblock_config']
\ No newline at end of file
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+from django.conf import settings
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='StudioConfig',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('change_date', models.DateTimeField(auto_now_add=True, verbose_name='Change date')),
+ ('enabled', models.BooleanField(default=False, verbose_name='Enabled')),
+ ('disabled_blocks', models.TextField(default=b'about course_info static_tab', help_text=b'Space-separated list of XBlocks on which XBlockAsides should never render in studio')),
+ ('changed_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, editable=False, to=settings.AUTH_USER_MODEL, null=True, verbose_name='Changed by')),
+ ],
+ options={
+ 'ordering': ('-change_date',),
+ 'abstract': False,
+ },
+ ),
+ ]
diff --git a/cms/envs/acceptance.py b/cms/envs/acceptance.py
index 92e5deca3e24..20bdeb0270d4 100644
--- a/cms/envs/acceptance.py
+++ b/cms/envs/acceptance.py
@@ -79,6 +79,7 @@ def seed():
'OPTIONS': {
'timeout': 30,
},
+ 'ATOMIC_REQUESTS': True,
}
}
@@ -100,7 +101,7 @@ def seed():
# Include the lettuce app for acceptance testing, including the 'harvest' django-admin command
# django.contrib.staticfiles used to be loaded by lettuce, now we must add it ourselves
# django.contrib.staticfiles is not added to lms as there is a ^/static$ route built in to the app
-INSTALLED_APPS += ('lettuce.django', 'django.contrib.staticfiles')
+INSTALLED_APPS += ('lettuce.django',)
LETTUCE_APPS = ('contentstore',)
LETTUCE_BROWSER = os.environ.get('LETTUCE_BROWSER', 'chrome')
diff --git a/cms/envs/aws.py b/cms/envs/aws.py
index e68d120d1de0..3656569a9811 100644
--- a/cms/envs/aws.py
+++ b/cms/envs/aws.py
@@ -39,7 +39,6 @@
############### ALWAYS THE SAME ################################
DEBUG = False
-TEMPLATE_DEBUG = False
EMAIL_BACKEND = 'django_ses.SESBackend'
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
@@ -69,11 +68,6 @@
# Each worker should only fetch one message at a time
CELERYD_PREFETCH_MULTIPLIER = 1
-# Skip djcelery migrations, since we don't use the database as the broker
-SOUTH_MIGRATION_MODULES = {
- 'djcelery': 'ignore',
-}
-
# Rename the exchange and queues for each variant
QUEUE_VARIANT = CONFIG_PREFIX.lower()
@@ -130,6 +124,12 @@
SITE_NAME = ENV_TOKENS['SITE_NAME']
+ALLOWED_HOSTS = [
+ # TODO: bbeggs remove this before prod, temp fix to get load testing running
+ "*",
+ ENV_TOKENS.get('CMS_BASE')
+]
+
LOG_DIR = ENV_TOKENS['LOG_DIR']
CACHES = ENV_TOKENS['CACHES']
@@ -249,6 +249,8 @@
# Note that this is the Studio key for Segment. There is a separate key for the LMS.
CMS_SEGMENT_KEY = AUTH_TOKENS.get('SEGMENT_KEY')
+# SECRET_KEY = AUTH_TOKENS['SECRET_KEY']
+
AWS_ACCESS_KEY_ID = AUTH_TOKENS["AWS_ACCESS_KEY_ID"]
if AWS_ACCESS_KEY_ID == "":
AWS_ACCESS_KEY_ID = None
@@ -265,6 +267,11 @@
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DATABASES = AUTH_TOKENS['DATABASES']
+
+# Enable automatic transaction management on all databases
+for database_name in DATABASES:
+ DATABASES[database_name]['ATOMIC_REQUESTS'] = True
+
MODULESTORE = convert_module_store_setting_if_needed(AUTH_TOKENS.get('MODULESTORE', MODULESTORE))
CONTENTSTORE = AUTH_TOKENS['CONTENTSTORE']
DOC_STORE_CONFIG = AUTH_TOKENS['DOC_STORE_CONFIG']
diff --git a/cms/envs/common.py b/cms/envs/common.py
index a96f8c23670a..63ae7caaa023 100644
--- a/cms/envs/common.py
+++ b/cms/envs/common.py
@@ -59,6 +59,11 @@
from xmodule.mixin import LicenseMixin
############################ FEATURE CONFIGURATION #############################
+
+
+# Dummy secret key for dev/test
+SECRET_KEY = '85920908f28904ed733fe576320db18cabd7b6cd'
+
STUDIO_NAME = "Studio"
STUDIO_SHORT_NAME = "Studio"
FEATURES = {
@@ -206,8 +211,9 @@
GEOIP_PATH = REPO_ROOT / "common/static/data/geoip/GeoIP.dat"
GEOIPV6_PATH = REPO_ROOT / "common/static/data/geoip/GeoIPv6.dat"
-############################# WEB CONFIGURATION #############################
-# This is where we stick our compiled template files.
+############################# TEMPLATE CONFIGURATION #############################
+# Mako templating
+# TODO: Move the Mako templating into a different engine in TEMPLATES below.
import tempfile
MAKO_MODULE_DIR = os.path.join(tempfile.gettempdir(), 'mako_cms')
MAKO_TEMPLATES = {}
@@ -222,25 +228,44 @@
for namespace, template_dirs in lms.envs.common.MAKO_TEMPLATES.iteritems():
MAKO_TEMPLATES['lms.' + namespace] = template_dirs
-TEMPLATE_DIRS = MAKO_TEMPLATES['main']
+# Django templating
+TEMPLATES = [
+ {
+ 'BACKEND': 'django.template.backends.django.DjangoTemplates',
+ # Don't look for template source files inside installed applications.
+ 'APP_DIRS': False,
+ # Instead, look for template source files in these dirs.
+ 'DIRS': MAKO_TEMPLATES['main'],
+ # Options specific to this backend.
+ 'OPTIONS': {
+ 'loaders': (
+ 'django.template.loaders.filesystem.Loader',
+ 'django.template.loaders.app_directories.Loader',
+ ),
+ 'context_processors': (
+ 'django.template.context_processors.request',
+ 'django.template.context_processors.static',
+ 'django.contrib.messages.context_processors.messages',
+ 'django.template.context_processors.i18n',
+ 'django.contrib.auth.context_processors.auth', # this is required for admin
+ 'django.template.context_processors.csrf',
+ 'dealer.contrib.django.staff.context_processor', # access git revision
+ 'contentstore.context_processors.doc_url',
+ ),
+ # Change 'debug' in your environment settings files - not here.
+ 'debug': False
+ }
+ }
+]
+DEFAULT_TEMPLATE_ENGINE = TEMPLATES[0]
+
+##############################################################################
EDX_ROOT_URL = ''
LOGIN_REDIRECT_URL = EDX_ROOT_URL + '/signin'
LOGIN_URL = EDX_ROOT_URL + '/signin'
-
-TEMPLATE_CONTEXT_PROCESSORS = (
- 'django.core.context_processors.request',
- 'django.core.context_processors.static',
- 'django.contrib.messages.context_processors.messages',
- 'django.core.context_processors.i18n',
- 'django.contrib.auth.context_processors.auth', # this is required for admin
- 'django.core.context_processors.csrf',
- 'dealer.contrib.django.staff.context_processor', # access git revision
- 'contentstore.context_processors.doc_url',
-)
-
# use the ratelimit backend to prevent brute force attacks
AUTHENTICATION_BACKENDS = (
'ratelimitbackend.backends.RateLimitModelBackend',
@@ -275,12 +300,6 @@
################################# Middleware ###################################
-# List of callables that know how to import templates from various sources.
-TEMPLATE_LOADERS = (
- 'django.template.loaders.filesystem.Loader',
- 'django.template.loaders.app_directories.Loader',
-)
-
MIDDLEWARE_CLASSES = (
'request_cache.middleware.RequestCache',
'django.middleware.cache.UpdateCacheMiddleware',
@@ -304,11 +323,8 @@
'embargo.middleware.EmbargoMiddleware',
# Detects user-requested locale from 'accept-language' header in http request
- # TODO: Re-import the Django version once we upgrade to Django 1.8 [PLAT-671]
- # 'django.middleware.locale.LocaleMiddleware',
- 'django_locale.middleware.LocaleMiddleware',
+ 'django.middleware.locale.LocaleMiddleware',
- 'django.middleware.transaction.TransactionMiddleware',
# needs to run after locale middleware (or anything that modifies the request context)
'edxmako.middleware.MakoMiddleware',
@@ -383,11 +399,12 @@
}
############################ DJANGO_BUILTINS ################################
-# Change DEBUG/TEMPLATE_DEBUG in your environment settings files, not here
+# Change DEBUG in your environment settings files, not here
DEBUG = False
-TEMPLATE_DEBUG = False
SESSION_COOKIE_SECURE = False
SESSION_SAVE_EVERY_REQUEST = False
+SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
+
# Site info
SITE_ID = 1
@@ -704,8 +721,8 @@
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
+ 'django.contrib.staticfiles',
'djcelery',
- 'south',
'method_override',
# Common views
@@ -726,13 +743,14 @@
# For CMS
'contentstore',
'course_creators',
+ 'external_auth',
'student', # misleading name due to sharing with lms
'openedx.core.djangoapps.course_groups', # not used in cms (yet), but tests run
'xblock_config',
# Tracking
'track',
- 'eventtracking.django',
+ 'eventtracking.django.apps.EventTrackingConfig',
# Monitoring
'datadog',
@@ -740,7 +758,6 @@
# For asset pipelining
'edxmako',
'pipeline',
- 'django.contrib.staticfiles',
'static_replace',
'require',
@@ -793,6 +810,11 @@
# Self-paced course configuration
'openedx.core.djangoapps.self_paced',
+
+ # 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.
+ 'lms.djangoapps.verify_student',
)
@@ -901,9 +923,6 @@
# milestones
'milestones',
-
- # edX Proctoring
- 'edx_proctoring',
)
diff --git a/cms/envs/dev.py b/cms/envs/dev.py
index ffd83d064adc..8320a7b43959 100644
--- a/cms/envs/dev.py
+++ b/cms/envs/dev.py
@@ -55,6 +55,7 @@
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': ENV_ROOT / "db" / "edx.db",
+ 'ATOMIC_REQUESTS': True,
}
}
diff --git a/cms/envs/dev_with_worker.py b/cms/envs/dev_with_worker.py
index 40f6ed4e1ff1..44145dad9913 100644
--- a/cms/envs/dev_with_worker.py
+++ b/cms/envs/dev_with_worker.py
@@ -29,11 +29,5 @@
# Disable transaction management because we are using a worker. Views
# that request a task and wait for the result will deadlock otherwise.
-
-MIDDLEWARE_CLASSES = tuple(
- c for c in MIDDLEWARE_CLASSES
- if c != 'django.middleware.transaction.TransactionMiddleware')
-
-# Note: other alternatives for disabling transactions don't work in 1.4
-# https://code.djangoproject.com/ticket/2304
-# https://code.djangoproject.com/ticket/16039
+for database_name in DATABASES:
+ DATABASES[database_name]['ATOMIC_REQUESTS'] = False
diff --git a/cms/envs/devstack.py b/cms/envs/devstack.py
index eb951edc2254..6634a202ff81 100644
--- a/cms/envs/devstack.py
+++ b/cms/envs/devstack.py
@@ -12,7 +12,7 @@
DEBUG = True
USE_I18N = True
-TEMPLATE_DEBUG = DEBUG
+DEFAULT_TEMPLATE_ENGINE['OPTIONS']['debug'] = DEBUG
HTTPS = 'off'
################################ LOGGERS ######################################
diff --git a/cms/envs/test.py b/cms/envs/test.py
index b96e0c02b312..186d34bb0c57 100644
--- a/cms/envs/test.py
+++ b/cms/envs/test.py
@@ -128,9 +128,14 @@
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': TEST_ROOT / "db" / "cms.db",
+ 'ATOMIC_REQUESTS': True,
},
}
+# This hack disables migrations during tests. We want to create tables directly from the models for speed.
+# See https://groups.google.com/d/msg/django-developers/PWPj3etj3-U/kCl6pMsQYYoJ.
+MIGRATION_MODULES = {app: "app.migrations_not_used_in_tests" for app in INSTALLED_APPS}
+
LMS_BASE = "localhost:8000"
FEATURES['PREVIEW_LMS_BASE'] = "preview"
@@ -171,11 +176,8 @@
},
}
-# Add external_auth to Installed apps for testing
-INSTALLED_APPS += ('external_auth', )
-
-# Add milestones to Installed apps for testing
-INSTALLED_APPS += ('milestones', 'openedx.core.djangoapps.call_stack_manager')
+# Add apps to Installed apps for testing
+INSTALLED_APPS += ('openedx.core.djangoapps.call_stack_manager',)
# hide ratelimit warnings while running tests
filterwarnings('ignore', message='No request passed to the backend, unable to rate-limit')
diff --git a/cms/envs/test_static_optimized.py b/cms/envs/test_static_optimized.py
index 9b66e3cc45cd..c3efc3c83cf5 100644
--- a/cms/envs/test_static_optimized.py
+++ b/cms/envs/test_static_optimized.py
@@ -17,6 +17,7 @@
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
+ 'ATOMIC_REQUESTS': True,
},
}
diff --git a/cms/envs/yaml_config.py b/cms/envs/yaml_config.py
index dc6463f2b71d..7b19b3567003 100644
--- a/cms/envs/yaml_config.py
+++ b/cms/envs/yaml_config.py
@@ -85,11 +85,6 @@ def construct_yaml_str(self, node):
# Each worker should only fetch one message at a time
CELERYD_PREFETCH_MULTIPLIER = 1
-# Skip djcelery migrations, since we don't use the database as the broker
-SOUTH_MIGRATION_MODULES = {
- 'djcelery': 'ignore',
-}
-
# Rename the exchange and queues for each variant
QUEUE_VARIANT = CONFIG_PREFIX.lower()
diff --git a/cms/startup.py b/cms/startup.py
index ca7d72dba313..da77a07ddb8b 100644
--- a/cms/startup.py
+++ b/cms/startup.py
@@ -8,7 +8,8 @@
settings.INSTALLED_APPS # pylint: disable=pointless-statement
from openedx.core.lib.django_startup import autostartup
-from monkey_patch import django_utils_translation
+import django
+from monkey_patch import third_party_auth
import xmodule.x_module
import cms.lib.xblock.runtime
@@ -18,7 +19,9 @@ def run():
"""
Executed during django startup
"""
- django_utils_translation.patch()
+ third_party_auth.patch()
+
+ django.setup()
autostartup()
diff --git a/cms/templates/base.html b/cms/templates/base.html
index 3feec0ad3c1f..6cd3eefd58b6 100644
--- a/cms/templates/base.html
+++ b/cms/templates/base.html
@@ -85,7 +85,7 @@
url_name: "${context_course.location.name | h}",
org: "${context_course.location.org | h}",
num: "${context_course.location.course | h}",
- display_course_number: "${_(context_course.display_coursenumber)}",
+ display_course_number: "${_(context_course.display_number_with_default)}",
revision: "${context_course.location.revision | h}",
self_paced: ${escape_json_dumps(context_course.self_paced) | n}
});
diff --git a/common/djangoapps/auth_exchange/tests/test_views.py b/common/djangoapps/auth_exchange/tests/test_views.py
index 7b7ca5a3a1b1..5c0b7503f91c 100644
--- a/common/djangoapps/auth_exchange/tests/test_views.py
+++ b/common/djangoapps/auth_exchange/tests/test_views.py
@@ -130,14 +130,15 @@ def setUp(self):
self.user = UserFactory()
self.oauth2_client = Client.objects.create(client_type=provider.constants.CONFIDENTIAL)
- def _verify_response(self, access_token, expected_status_code, expected_num_cookies):
+ def _verify_response(self, access_token, expected_status_code, expected_cookie_name=None):
"""
Calls the login_with_access_token endpoint and verifies the response given the expected values.
"""
url = reverse("login_with_access_token")
response = self.client.post(url, HTTP_AUTHORIZATION="Bearer {0}".format(access_token))
self.assertEqual(response.status_code, expected_status_code)
- self.assertEqual(len(response.cookies), expected_num_cookies)
+ if expected_cookie_name:
+ self.assertIn(expected_cookie_name, response.cookies)
def test_success(self):
access_token = AccessToken.objects.create(
@@ -145,11 +146,9 @@ def test_success(self):
client=self.oauth2_client,
user=self.user,
)
- self._verify_response(access_token, expected_status_code=204, expected_num_cookies=1)
- self.assertEqual(len(self.client.cookies), 1)
- self.assertEqual(self.client.session['_auth_user_id'], self.user.id)
+ self._verify_response(access_token, expected_status_code=204, expected_cookie_name='sessionid')
+ self.assertEqual(int(self.client.session['_auth_user_id']), self.user.id)
def test_unauthenticated(self):
- self._verify_response("invalid_token", expected_status_code=401, expected_num_cookies=0)
- self.assertEqual(len(self.client.cookies), 0)
+ self._verify_response("invalid_token", expected_status_code=401)
self.assertNotIn("session_key", self.client.session)
diff --git a/common/djangoapps/cache_toolbox/core.py b/common/djangoapps/cache_toolbox/core.py
index 6d3fac522bb6..31c853f7eb09 100644
--- a/common/djangoapps/cache_toolbox/core.py
+++ b/common/djangoapps/cache_toolbox/core.py
@@ -33,8 +33,8 @@ def get_instance(model, instance_or_pk, timeout=None, using=None):
>>> User.objects.get(pk=1) == get_instance(User, 1)
True
- """
+ """
pk = getattr(instance_or_pk, 'pk', instance_or_pk)
key = instance_key(model, instance_or_pk)
data = cache.get(key)
@@ -59,7 +59,7 @@ def get_instance(model, instance_or_pk, timeout=None, using=None):
# fallback and return the underlying instance
cache.delete(key)
- # Use the default manager so we are never filtered by a .get_query_set()
+ # Use the default manager so we are never filtered by a .get_queryset()
# import logging
# log = logging.getLogger("tracking")
@@ -94,7 +94,6 @@ def delete_instance(model, *instance_or_pk):
"""
Purges the cache keys for the instances of this model.
"""
-
cache.delete_many([instance_key(model, x) for x in instance_or_pk])
@@ -102,10 +101,10 @@ def instance_key(model, instance_or_pk):
"""
Returns the cache key for this (model, instance) pair.
"""
-
+ # pylint: disable=protected-access
return '%s.%s:%d' % (
model._meta.app_label,
- model._meta.module_name,
+ model._meta.model_name,
getattr(instance_or_pk, 'pk', instance_or_pk),
)
diff --git a/common/djangoapps/config_models/admin.py b/common/djangoapps/config_models/admin.py
index 90d79ec32971..6003326936d0 100644
--- a/common/djangoapps/config_models/admin.py
+++ b/common/djangoapps/config_models/admin.py
@@ -5,14 +5,14 @@
from django.forms import models
from django.contrib import admin
from django.contrib.admin import ListFilter
-from django.core.cache import get_cache, InvalidCacheBackendError
+from django.core.cache import caches, InvalidCacheBackendError
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404
from django.utils.translation import ugettext_lazy as _
try:
- cache = get_cache('configuration') # pylint: disable=invalid-name
+ cache = caches['configuration'] # pylint: disable=invalid-name
except InvalidCacheBackendError:
from django.core.cache import cache
@@ -84,7 +84,7 @@ def revert(self, request, queryset):
reverse(
'admin:{}_{}_change'.format(
self.model._meta.app_label,
- self.model._meta.module_name,
+ self.model._meta.model_name,
),
args=(target.id,),
)
@@ -142,7 +142,7 @@ class KeyedConfigurationModelAdmin(ConfigurationModelAdmin):
date_hierarchy = None
list_filter = (ShowHistoryFilter, )
- def queryset(self, request):
+ def get_queryset(self, request):
"""
Annote the queryset with an 'is_active' property that's true iff that row is the most
recently added row for that particular set of KEY_FIELDS values.
@@ -180,7 +180,7 @@ def edit_link(self, inst):
""" Edit link for the change view """
if not inst.is_active:
return u'--'
- update_url = reverse('admin:{}_{}_add'.format(self.model._meta.app_label, self.model._meta.module_name))
+ update_url = reverse('admin:{}_{}_add'.format(self.model._meta.app_label, self.model._meta.model_name))
update_url += "?source={}".format(inst.pk)
return u'{} '.format(update_url, _('Update'))
edit_link.allow_tags = True
diff --git a/common/djangoapps/config_models/models.py b/common/djangoapps/config_models/models.py
index af3ac859841f..5528f084cf55 100644
--- a/common/djangoapps/config_models/models.py
+++ b/common/djangoapps/config_models/models.py
@@ -3,11 +3,11 @@
"""
from django.db import connection, models
from django.contrib.auth.models import User
-from django.core.cache import get_cache, InvalidCacheBackendError
+from django.core.cache import caches, InvalidCacheBackendError
from django.utils.translation import ugettext_lazy as _
try:
- cache = get_cache('configuration') # pylint: disable=invalid-name
+ cache = caches['configuration'] # pylint: disable=invalid-name
except InvalidCacheBackendError:
from django.core.cache import cache
@@ -37,7 +37,7 @@ def current_set(self):
necessaryily mean enbled.
"""
assert self.model.KEY_FIELDS != (), "Just use model.current() if there are no KEY_FIELDS"
- return self.get_query_set().extra(
+ return self.get_queryset().extra( # pylint: disable=no-member
where=["id IN ({subquery})".format(subquery=self._current_ids_subquery())],
select={'is_active': 1}, # This annotation is used by the admin changelist. sqlite requires '1', not 'True'
)
@@ -49,11 +49,11 @@ def with_active_flag(self):
"""
if self.model.KEY_FIELDS:
subquery = self._current_ids_subquery()
- return self.get_query_set().extra(
+ return self.get_queryset().extra( # pylint: disable=no-member
select={'is_active': "id IN ({subquery})".format(subquery=subquery)}
)
else:
- return self.get_query_set().extra(
+ return self.get_queryset().extra( # pylint: disable=no-member
select={'is_active': "id = {pk}".format(pk=self.model.current().pk)}
)
diff --git a/common/djangoapps/config_models/views.py b/common/djangoapps/config_models/views.py
index 2efcfa80bb87..3bd693ec59cc 100644
--- a/common/djangoapps/config_models/views.py
+++ b/common/djangoapps/config_models/views.py
@@ -5,6 +5,7 @@
from rest_framework.permissions import DjangoModelPermissions
from rest_framework.authentication import SessionAuthentication
from rest_framework.serializers import ModelSerializer
+from django.db import transaction
class ReadableOnlyByAuthors(DjangoModelPermissions):
@@ -13,7 +14,29 @@ class ReadableOnlyByAuthors(DjangoModelPermissions):
perms_map['GET'] = perms_map['OPTIONS'] = perms_map['HEAD'] = perms_map['POST']
-class ConfigurationModelCurrentAPIView(CreateAPIView, RetrieveAPIView):
+class AtomicMixin(object):
+ """Mixin to provide atomic transaction for as_view."""
+ @classmethod
+ def create_atomic_wrapper(cls, wrapped_func):
+ """Returns a wrapped function."""
+ def _create_atomic_wrapper(*args, **kwargs):
+ """Actual wrapper."""
+ # When a view call fails due to a permissions error, it raises an exception.
+ # An uncaught exception breaks the DB transaction for any following DB operations
+ # unless it's wrapped in a atomic() decorator or context manager.
+ with transaction.atomic():
+ return wrapped_func(*args, **kwargs)
+
+ return _create_atomic_wrapper
+
+ @classmethod
+ def as_view(cls, **initkwargs):
+ """Overrides as_view to add atomic transaction."""
+ view = super(AtomicMixin, cls).as_view(**initkwargs)
+ return cls.create_atomic_wrapper(view)
+
+
+class ConfigurationModelCurrentAPIView(AtomicMixin, CreateAPIView, RetrieveAPIView):
"""
This view allows an authenticated user with the appropriate model permissions
to read and write the current configuration for the specified `model`.
diff --git a/common/djangoapps/cors_csrf/migrations/0001_initial.py b/common/djangoapps/cors_csrf/migrations/0001_initial.py
index bdc4e752cab7..f29fbb1d7e45 100644
--- a/common/djangoapps/cors_csrf/migrations/0001_initial.py
+++ b/common/djangoapps/cors_csrf/migrations/0001_initial.py
@@ -1,74 +1,30 @@
# -*- coding: utf-8 -*-
-from south.utils import datetime_utils as datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'XDomainProxyConfiguration'
- db.create_table('cors_csrf_xdomainproxyconfiguration', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('change_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
- ('changed_by', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, on_delete=models.PROTECT)),
- ('enabled', self.gf('django.db.models.fields.BooleanField')(default=False)),
- ('whitelist', self.gf('django.db.models.fields.TextField')()),
- ))
- db.send_create_signal('cors_csrf', ['XDomainProxyConfiguration'])
-
-
- def backwards(self, orm):
- # Deleting model 'XDomainProxyConfiguration'
- db.delete_table('cors_csrf_xdomainproxyconfiguration')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'cors_csrf.xdomainproxyconfiguration': {
- 'Meta': {'object_name': 'XDomainProxyConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'whitelist': ('django.db.models.fields.TextField', [], {})
- }
- }
-
- complete_apps = ['cors_csrf']
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+from django.conf import settings
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='XDomainProxyConfiguration',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('change_date', models.DateTimeField(auto_now_add=True, verbose_name='Change date')),
+ ('enabled', models.BooleanField(default=False, verbose_name='Enabled')),
+ ('whitelist', models.TextField(help_text='List of domains that are allowed to make cross-domain requests to this site. Please list each domain on its own line.')),
+ ('changed_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, editable=False, to=settings.AUTH_USER_MODEL, null=True, verbose_name='Changed by')),
+ ],
+ options={
+ 'ordering': ('-change_date',),
+ 'abstract': False,
+ },
+ ),
+ ]
diff --git a/common/djangoapps/course_action_state/managers.py b/common/djangoapps/course_action_state/managers.py
index 3bda32e50113..6603e516785d 100644
--- a/common/djangoapps/course_action_state/managers.py
+++ b/common/djangoapps/course_action_state/managers.py
@@ -55,7 +55,7 @@ class CourseActionUIStateManager(CourseActionStateManager):
"""
# add transaction protection to revert changes by get_or_create if an exception is raised before the final save.
- @transaction.commit_on_success
+ @transaction.atomic
def update_state(
self, course_key, new_state, should_display=True, message="", user=None, allow_not_found=False, **kwargs
):
diff --git a/common/djangoapps/course_action_state/migrations/0001_initial.py b/common/djangoapps/course_action_state/migrations/0001_initial.py
index a8ab6c7db3c9..c95f5f8688d6 100644
--- a/common/djangoapps/course_action_state/migrations/0001_initial.py
+++ b/common/djangoapps/course_action_state/migrations/0001_initial.py
@@ -1,92 +1,38 @@
# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'CourseRerunState'
- db.create_table('course_action_state_coursererunstate', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('created_time', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
- ('updated_time', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
- ('created_user', self.gf('django.db.models.fields.related.ForeignKey')(related_name='created_by_user+', null=True, on_delete=models.SET_NULL, to=orm['auth.User'])),
- ('updated_user', self.gf('django.db.models.fields.related.ForeignKey')(related_name='updated_by_user+', null=True, on_delete=models.SET_NULL, to=orm['auth.User'])),
- ('course_key', self.gf('xmodule_django.models.CourseKeyField')(max_length=255, db_index=True)),
- ('action', self.gf('django.db.models.fields.CharField')(max_length=100, db_index=True)),
- ('state', self.gf('django.db.models.fields.CharField')(max_length=50)),
- ('should_display', self.gf('django.db.models.fields.BooleanField')(default=False)),
- ('message', self.gf('django.db.models.fields.CharField')(max_length=1000)),
- ('source_course_key', self.gf('xmodule_django.models.CourseKeyField')(max_length=255, db_index=True)),
- ))
- db.send_create_signal('course_action_state', ['CourseRerunState'])
-
- # Adding unique constraint on 'CourseRerunState', fields ['course_key', 'action']
- db.create_unique('course_action_state_coursererunstate', ['course_key', 'action'])
-
-
- def backwards(self, orm):
- # Removing unique constraint on 'CourseRerunState', fields ['course_key', 'action']
- db.delete_unique('course_action_state_coursererunstate', ['course_key', 'action'])
-
- # Deleting model 'CourseRerunState'
- db.delete_table('course_action_state_coursererunstate')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'course_action_state.coursererunstate': {
- 'Meta': {'unique_together': "(('course_key', 'action'),)", 'object_name': 'CourseRerunState'},
- 'action': ('django.db.models.fields.CharField', [], {'max_length': '100', 'db_index': 'True'}),
- 'course_key': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created_time': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'created_user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'created_by_user+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'message': ('django.db.models.fields.CharField', [], {'max_length': '1000'}),
- 'should_display': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'source_course_key': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'state': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
- 'updated_time': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'updated_user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'updated_by_user+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"})
- }
- }
-
- complete_apps = ['course_action_state']
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+from django.conf import settings
+import xmodule_django.models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='CourseRerunState',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('created_time', models.DateTimeField(auto_now_add=True)),
+ ('updated_time', models.DateTimeField(auto_now=True)),
+ ('course_key', xmodule_django.models.CourseKeyField(max_length=255, db_index=True)),
+ ('action', models.CharField(max_length=100, db_index=True)),
+ ('state', models.CharField(max_length=50)),
+ ('should_display', models.BooleanField(default=False)),
+ ('message', models.CharField(max_length=1000)),
+ ('source_course_key', xmodule_django.models.CourseKeyField(max_length=255, db_index=True)),
+ ('display_name', models.CharField(default=b'', max_length=255, blank=True)),
+ ('created_user', models.ForeignKey(related_name='created_by_user+', on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, null=True)),
+ ('updated_user', models.ForeignKey(related_name='updated_by_user+', on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, null=True)),
+ ],
+ ),
+ migrations.AlterUniqueTogether(
+ name='coursererunstate',
+ unique_together=set([('course_key', 'action')]),
+ ),
+ ]
diff --git a/common/djangoapps/course_action_state/migrations/0002_add_rerun_display_name.py b/common/djangoapps/course_action_state/migrations/0002_add_rerun_display_name.py
deleted file mode 100644
index 92b2cc24a048..000000000000
--- a/common/djangoapps/course_action_state/migrations/0002_add_rerun_display_name.py
+++ /dev/null
@@ -1,76 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding field 'CourseRerunState.display_name'
- db.add_column('course_action_state_coursererunstate', 'display_name',
- self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True),
- keep_default=False)
-
-
- def backwards(self, orm):
- # Deleting field 'CourseRerunState.display_name'
- db.delete_column('course_action_state_coursererunstate', 'display_name')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'course_action_state.coursererunstate': {
- 'Meta': {'unique_together': "(('course_key', 'action'),)", 'object_name': 'CourseRerunState'},
- 'action': ('django.db.models.fields.CharField', [], {'max_length': '100', 'db_index': 'True'}),
- 'course_key': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created_time': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'created_user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'created_by_user+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
- 'display_name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'message': ('django.db.models.fields.CharField', [], {'max_length': '1000'}),
- 'should_display': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'source_course_key': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'state': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
- 'updated_time': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'updated_user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'updated_by_user+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"})
- }
- }
-
- complete_apps = ['course_action_state']
diff --git a/common/djangoapps/course_action_state/models.py b/common/djangoapps/course_action_state/models.py
index 87fceebed752..6c2985018aeb 100644
--- a/common/djangoapps/course_action_state/models.py
+++ b/common/djangoapps/course_action_state/models.py
@@ -90,7 +90,7 @@ class Meta(object):
# FIELDS
# Whether or not the status should be displayed to users
- should_display = models.BooleanField()
+ should_display = models.BooleanField(default=False)
# Message related to the status
message = models.CharField(max_length=MAX_MESSAGE_LENGTH)
diff --git a/common/djangoapps/course_modes/admin.py b/common/djangoapps/course_modes/admin.py
index f6c22551cd4c..6781227f5c52 100644
--- a/common/djangoapps/course_modes/admin.py
+++ b/common/djangoapps/course_modes/admin.py
@@ -26,13 +26,14 @@
# The admin page will work in both LMS and Studio,
# but the test suite for Studio will fail because
# the verification deadline table won't exist.
-from verify_student import models as verification_models # pylint: disable=import-error
+from lms.djangoapps.verify_student import models as verification_models
class CourseModeForm(forms.ModelForm):
class Meta(object):
model = CourseMode
+ fields = '__all__'
COURSE_MODE_SLUG_CHOICES = (
[(CourseMode.DEFAULT_MODE_SLUG, CourseMode.DEFAULT_MODE_SLUG)] +
diff --git a/common/djangoapps/course_modes/migrations/0001_initial.py b/common/djangoapps/course_modes/migrations/0001_initial.py
index 1818b8abea2c..a16a22cb8d61 100644
--- a/common/djangoapps/course_modes/migrations/0001_initial.py
+++ b/common/djangoapps/course_modes/migrations/0001_initial.py
@@ -1,40 +1,48 @@
# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'CourseMode'
- db.create_table('course_modes_coursemode', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('course_id', self.gf('django.db.models.fields.CharField')(max_length=255, db_index=True)),
- ('mode_slug', self.gf('django.db.models.fields.CharField')(max_length=100)),
- ('mode_display_name', self.gf('django.db.models.fields.CharField')(max_length=255)),
- ('min_price', self.gf('django.db.models.fields.IntegerField')(default=0)),
- ('suggested_prices', self.gf('django.db.models.fields.CommaSeparatedIntegerField')(default='', max_length=255, blank=True)),
- ))
- db.send_create_signal('course_modes', ['CourseMode'])
-
-
- def backwards(self, orm):
- # Deleting model 'CourseMode'
- db.delete_table('course_modes_coursemode')
-
-
- models = {
- 'course_modes.coursemode': {
- 'Meta': {'object_name': 'CourseMode'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'min_price': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'mode_display_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'mode_slug': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'suggested_prices': ('django.db.models.fields.CommaSeparatedIntegerField', [], {'default': "''", 'max_length': '255', 'blank': 'True'})
- }
- }
-
- complete_apps = ['course_modes']
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import xmodule_django.models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='CourseMode',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('course_id', xmodule_django.models.CourseKeyField(max_length=255, verbose_name='Course', db_index=True)),
+ ('mode_slug', models.CharField(max_length=100, verbose_name='Mode')),
+ ('mode_display_name', models.CharField(max_length=255, verbose_name='Display Name')),
+ ('min_price', models.IntegerField(default=0, verbose_name='Price')),
+ ('currency', models.CharField(default=b'usd', max_length=8)),
+ ('expiration_datetime', models.DateTimeField(default=None, help_text='OPTIONAL: After this date/time, users will no longer be able to enroll in this mode. Leave this blank if users can enroll in this mode until enrollment closes for the course.', null=True, verbose_name='Upgrade Deadline', blank=True)),
+ ('expiration_date', models.DateField(default=None, null=True, blank=True)),
+ ('suggested_prices', models.CommaSeparatedIntegerField(default=b'', max_length=255, blank=True)),
+ ('description', models.TextField(null=True, blank=True)),
+ ('sku', models.CharField(help_text='OPTIONAL: This is the SKU (stock keeping unit) of this mode in the external ecommerce service. Leave this blank if the course has not yet been migrated to the ecommerce service.', max_length=255, null=True, verbose_name=b'SKU', blank=True)),
+ ],
+ ),
+ migrations.CreateModel(
+ name='CourseModesArchive',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('course_id', xmodule_django.models.CourseKeyField(max_length=255, db_index=True)),
+ ('mode_slug', models.CharField(max_length=100)),
+ ('mode_display_name', models.CharField(max_length=255)),
+ ('min_price', models.IntegerField(default=0)),
+ ('suggested_prices', models.CommaSeparatedIntegerField(default=b'', max_length=255, blank=True)),
+ ('currency', models.CharField(default=b'usd', max_length=8)),
+ ('expiration_date', models.DateField(default=None, null=True, blank=True)),
+ ('expiration_datetime', models.DateTimeField(default=None, null=True, blank=True)),
+ ],
+ ),
+ migrations.AlterUniqueTogether(
+ name='coursemode',
+ unique_together=set([('course_id', 'mode_slug', 'currency')]),
+ ),
+ ]
diff --git a/common/djangoapps/course_modes/migrations/0002_auto__add_field_coursemode_currency.py b/common/djangoapps/course_modes/migrations/0002_auto__add_field_coursemode_currency.py
deleted file mode 100644
index 78bb5bf4fa34..000000000000
--- a/common/djangoapps/course_modes/migrations/0002_auto__add_field_coursemode_currency.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding field 'CourseMode.currency'
- db.add_column('course_modes_coursemode', 'currency',
- self.gf('django.db.models.fields.CharField')(default='usd', max_length=8),
- keep_default=False)
-
-
- def backwards(self, orm):
- # Deleting field 'CourseMode.currency'
- db.delete_column('course_modes_coursemode', 'currency')
-
-
- models = {
- 'course_modes.coursemode': {
- 'Meta': {'object_name': 'CourseMode'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'currency': ('django.db.models.fields.CharField', [], {'default': "'usd'", 'max_length': '8'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'min_price': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'mode_display_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'mode_slug': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'suggested_prices': ('django.db.models.fields.CommaSeparatedIntegerField', [], {'default': "''", 'max_length': '255', 'blank': 'True'})
- }
- }
-
- complete_apps = ['course_modes']
diff --git a/common/djangoapps/course_modes/migrations/0003_auto__add_unique_coursemode_course_id_currency_mode_slug.py b/common/djangoapps/course_modes/migrations/0003_auto__add_unique_coursemode_course_id_currency_mode_slug.py
deleted file mode 100644
index 7e6bc1bd4034..000000000000
--- a/common/djangoapps/course_modes/migrations/0003_auto__add_unique_coursemode_course_id_currency_mode_slug.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding unique constraint on 'CourseMode', fields ['course_id', 'currency', 'mode_slug']
- db.create_unique('course_modes_coursemode', ['course_id', 'currency', 'mode_slug'])
-
-
- def backwards(self, orm):
- # Removing unique constraint on 'CourseMode', fields ['course_id', 'currency', 'mode_slug']
- db.delete_unique('course_modes_coursemode', ['course_id', 'currency', 'mode_slug'])
-
-
- models = {
- 'course_modes.coursemode': {
- 'Meta': {'unique_together': "(('course_id', 'mode_slug', 'currency'),)", 'object_name': 'CourseMode'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'currency': ('django.db.models.fields.CharField', [], {'default': "'usd'", 'max_length': '8'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'min_price': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'mode_display_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'mode_slug': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'suggested_prices': ('django.db.models.fields.CommaSeparatedIntegerField', [], {'default': "''", 'max_length': '255', 'blank': 'True'})
- }
- }
-
- complete_apps = ['course_modes']
diff --git a/common/djangoapps/course_modes/migrations/0004_auto__add_field_coursemode_expiration_date.py b/common/djangoapps/course_modes/migrations/0004_auto__add_field_coursemode_expiration_date.py
deleted file mode 100644
index 19851446c4a8..000000000000
--- a/common/djangoapps/course_modes/migrations/0004_auto__add_field_coursemode_expiration_date.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding field 'CourseMode.expiration_date'
- db.add_column('course_modes_coursemode', 'expiration_date',
- self.gf('django.db.models.fields.DateField')(default=None, null=True),
- keep_default=False)
-
-
- def backwards(self, orm):
- # Deleting field 'CourseMode.expiration_date'
- db.delete_column('course_modes_coursemode', 'expiration_date')
-
-
- models = {
- 'course_modes.coursemode': {
- 'Meta': {'unique_together': "(('course_id', 'mode_slug', 'currency'),)", 'object_name': 'CourseMode'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'currency': ('django.db.models.fields.CharField', [], {'default': "'usd'", 'max_length': '8'}),
- 'expiration_date': ('django.db.models.fields.DateField', [], {'default': 'None', 'null': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'min_price': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'mode_display_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'mode_slug': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'suggested_prices': ('django.db.models.fields.CommaSeparatedIntegerField', [], {'default': "''", 'max_length': '255', 'blank': 'True'})
- }
- }
-
- complete_apps = ['course_modes']
diff --git a/common/djangoapps/course_modes/migrations/0005_auto__add_field_coursemode_expiration_datetime.py b/common/djangoapps/course_modes/migrations/0005_auto__add_field_coursemode_expiration_datetime.py
deleted file mode 100644
index 101c3b919be0..000000000000
--- a/common/djangoapps/course_modes/migrations/0005_auto__add_field_coursemode_expiration_datetime.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding field 'CourseMode.expiration_datetime'
- db.add_column('course_modes_coursemode', 'expiration_datetime',
- self.gf('django.db.models.fields.DateTimeField')(default=None, null=True, blank=True),
- keep_default=False)
-
-
- def backwards(self, orm):
- # Deleting field 'CourseMode.expiration_datetime'
- db.delete_column('course_modes_coursemode', 'expiration_datetime')
-
-
- models = {
- 'course_modes.coursemode': {
- 'Meta': {'unique_together': "(('course_id', 'mode_slug', 'currency'),)", 'object_name': 'CourseMode'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'currency': ('django.db.models.fields.CharField', [], {'default': "'usd'", 'max_length': '8'}),
- 'expiration_date': ('django.db.models.fields.DateField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
- 'expiration_datetime': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'min_price': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'mode_display_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'mode_slug': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'suggested_prices': ('django.db.models.fields.CommaSeparatedIntegerField', [], {'default': "''", 'max_length': '255', 'blank': 'True'})
- }
- }
-
- complete_apps = ['course_modes']
diff --git a/common/djangoapps/course_modes/migrations/0006_expiration_date_to_datetime.py b/common/djangoapps/course_modes/migrations/0006_expiration_date_to_datetime.py
deleted file mode 100644
index 319c1b02b82f..000000000000
--- a/common/djangoapps/course_modes/migrations/0006_expiration_date_to_datetime.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import DataMigration
-from django.db import models
-
-class Migration(DataMigration):
-
- def forwards(self, orm):
- from datetime import datetime
- for course_mode in orm.CourseMode.objects.all():
- if course_mode.expiration_date is None:
- course_mode.expiration_datetime = None
- course_mode.save()
- else:
- course_mode.expiration_datetime = datetime.combine(course_mode.expiration_date, datetime.min.time())
- course_mode.save()
-
- def backwards(self, orm):
- for course_mode in orm.CourseMode.objects.all():
- course_mode.expiration_datetime = None
- course_mode.save()
-
- models = {
- 'course_modes.coursemode': {
- 'Meta': {'unique_together': "(('course_id', 'mode_slug', 'currency'),)", 'object_name': 'CourseMode'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'currency': ('django.db.models.fields.CharField', [], {'default': "'usd'", 'max_length': '8'}),
- 'expiration_date': ('django.db.models.fields.DateField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
- 'expiration_datetime': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'min_price': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'mode_display_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'mode_slug': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'suggested_prices': ('django.db.models.fields.CommaSeparatedIntegerField', [], {'default': "''", 'max_length': '255', 'blank': 'True'})
- }
- }
-
- complete_apps = ['course_modes']
- symmetrical = True
diff --git a/common/djangoapps/course_modes/migrations/0007_add_description.py b/common/djangoapps/course_modes/migrations/0007_add_description.py
deleted file mode 100644
index 98386e4bcfe8..000000000000
--- a/common/djangoapps/course_modes/migrations/0007_add_description.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding field 'CourseMode.description'
- db.add_column('course_modes_coursemode', 'description',
- self.gf('django.db.models.fields.TextField')(null=True, blank=True),
- keep_default=False)
-
-
- # Changing field 'CourseMode.course_id'
- db.alter_column('course_modes_coursemode', 'course_id', self.gf('xmodule_django.models.CourseKeyField')(max_length=255))
-
- def backwards(self, orm):
- # Deleting field 'CourseMode.description'
- db.delete_column('course_modes_coursemode', 'description')
-
-
- # Changing field 'CourseMode.course_id'
- db.alter_column('course_modes_coursemode', 'course_id', self.gf('django.db.models.fields.CharField')(max_length=255))
-
- models = {
- 'course_modes.coursemode': {
- 'Meta': {'unique_together': "(('course_id', 'mode_slug', 'currency'),)", 'object_name': 'CourseMode'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'currency': ('django.db.models.fields.CharField', [], {'default': "'usd'", 'max_length': '8'}),
- 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'expiration_date': ('django.db.models.fields.DateField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
- 'expiration_datetime': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'min_price': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'mode_display_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'mode_slug': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'suggested_prices': ('django.db.models.fields.CommaSeparatedIntegerField', [], {'default': "''", 'max_length': '255', 'blank': 'True'})
- }
- }
-
- complete_apps = ['course_modes']
diff --git a/common/djangoapps/course_modes/migrations/0007_auto__add_coursemodesarchive__chg_field_coursemode_course_id.py b/common/djangoapps/course_modes/migrations/0007_auto__add_coursemodesarchive__chg_field_coursemode_course_id.py
deleted file mode 100644
index 678f2c63becf..000000000000
--- a/common/djangoapps/course_modes/migrations/0007_auto__add_coursemodesarchive__chg_field_coursemode_course_id.py
+++ /dev/null
@@ -1,66 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'CourseModesArchive'
- db.create_table('course_modes_coursemodesarchive', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('course_id', self.gf('xmodule_django.models.CourseKeyField')(max_length=255, db_index=True)),
- ('mode_slug', self.gf('django.db.models.fields.CharField')(max_length=100)),
- ('mode_display_name', self.gf('django.db.models.fields.CharField')(max_length=255)),
- ('min_price', self.gf('django.db.models.fields.IntegerField')(default=0)),
- ('suggested_prices', self.gf('django.db.models.fields.CommaSeparatedIntegerField')(default='', max_length=255, blank=True)),
- ('currency', self.gf('django.db.models.fields.CharField')(default='usd', max_length=8)),
- ('expiration_date', self.gf('django.db.models.fields.DateField')(default=None, null=True, blank=True)),
- ('expiration_datetime', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True, blank=True)),
- ))
- db.send_create_signal('course_modes', ['CourseModesArchive'])
-
-
- # Changing field 'CourseMode.course_id'
- db.alter_column('course_modes_coursemode', 'course_id', self.gf('xmodule_django.models.CourseKeyField')(max_length=255))
-
- def backwards(self, orm):
- # Deleting model 'CourseModesArchive'
- db.delete_table('course_modes_coursemodesarchive')
-
-
- # Changing field 'CourseMode.course_id'
- db.alter_column('course_modes_coursemode', 'course_id', self.gf('django.db.models.fields.CharField')(max_length=255))
-
- models = {
- 'course_modes.coursemode': {
- 'Meta': {'unique_together': "(('course_id', 'mode_slug', 'currency'),)", 'object_name': 'CourseMode'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'currency': ('django.db.models.fields.CharField', [], {'default': "'usd'", 'max_length': '8'}),
- 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'expiration_date': ('django.db.models.fields.DateField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
- 'expiration_datetime': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'min_price': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'mode_display_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'mode_slug': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'suggested_prices': ('django.db.models.fields.CommaSeparatedIntegerField', [], {'default': "''", 'max_length': '255', 'blank': 'True'})
- },
- 'course_modes.coursemodesarchive': {
- 'Meta': {'object_name': 'CourseModesArchive'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'currency': ('django.db.models.fields.CharField', [], {'default': "'usd'", 'max_length': '8'}),
- 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'expiration_date': ('django.db.models.fields.DateField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
- 'expiration_datetime': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'min_price': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'mode_display_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'mode_slug': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'suggested_prices': ('django.db.models.fields.CommaSeparatedIntegerField', [], {'default': "''", 'max_length': '255', 'blank': 'True'})
- }
- }
-
- complete_apps = ['course_modes']
diff --git a/common/djangoapps/course_modes/migrations/0008_auto__del_field_coursemodesarchive_description__add_field_coursemode_s.py b/common/djangoapps/course_modes/migrations/0008_auto__del_field_coursemodesarchive_description__add_field_coursemode_s.py
deleted file mode 100644
index c096f6c6bc29..000000000000
--- a/common/djangoapps/course_modes/migrations/0008_auto__del_field_coursemodesarchive_description__add_field_coursemode_s.py
+++ /dev/null
@@ -1,49 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding field 'CourseMode.sku'
- db.add_column('course_modes_coursemode', 'sku',
- self.gf('django.db.models.fields.CharField')(max_length=255, null=True),
- keep_default=False)
-
- def backwards(self, orm):
- # Deleting field 'CourseMode.sku'
- db.delete_column('course_modes_coursemode', 'sku')
-
- models = {
- 'course_modes.coursemode': {
- 'Meta': {'unique_together': "(('course_id', 'mode_slug', 'currency'),)", 'object_name': 'CourseMode'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'currency': ('django.db.models.fields.CharField', [], {'default': "'usd'", 'max_length': '8'}),
- 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'expiration_date': ('django.db.models.fields.DateField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
- 'expiration_datetime': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'min_price': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'mode_display_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'mode_slug': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'sku': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'suggested_prices': ('django.db.models.fields.CommaSeparatedIntegerField', [], {'default': "''", 'max_length': '255', 'blank': 'True'})
- },
- 'course_modes.coursemodesarchive': {
- 'Meta': {'object_name': 'CourseModesArchive'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'currency': ('django.db.models.fields.CharField', [], {'default': "'usd'", 'max_length': '8'}),
- 'expiration_date': ('django.db.models.fields.DateField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
- 'expiration_datetime': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'min_price': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'mode_display_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'mode_slug': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'suggested_prices': ('django.db.models.fields.CommaSeparatedIntegerField', [], {'default': "''", 'max_length': '255', 'blank': 'True'})
- }
- }
-
- complete_apps = ['course_modes']
diff --git a/common/djangoapps/course_modes/tests/test_admin.py b/common/djangoapps/course_modes/tests/test_admin.py
index 72242d14b231..f65c3a6e9f8b 100644
--- a/common/djangoapps/course_modes/tests/test_admin.py
+++ b/common/djangoapps/course_modes/tests/test_admin.py
@@ -21,7 +21,7 @@
# defined in the LMS and course_modes is in common. However, the benefits
# of putting all this configuration in one place outweigh the downsides.
# Once the course admin tool is deployed, we can remove this dependency.
-from verify_student.models import VerificationDeadline # pylint: disable=import-error
+from lms.djangoapps.verify_student.models import VerificationDeadline
# We can only test this in the LMS because the course modes admin relies
diff --git a/common/djangoapps/course_modes/views.py b/common/djangoapps/course_modes/views.py
index 0dc790b7667b..331ecbd38a20 100644
--- a/common/djangoapps/course_modes/views.py
+++ b/common/djangoapps/course_modes/views.py
@@ -6,6 +6,7 @@
from ipware.ip import get_ip
from django.core.urlresolvers import reverse
+from django.db import transaction
from django.http import HttpResponse, HttpResponseBadRequest
from django.shortcuts import redirect
from django.views.generic.base import View
@@ -20,7 +21,7 @@
from student.models import CourseEnrollment
from opaque_keys.edx.locations import SlashSeparatedCourseKey
from opaque_keys.edx.keys import CourseKey
-from util.db import commit_on_success_with_read_committed
+from util.db import outer_atomic
from xmodule.modulestore.django import modulestore
from embargo import api as embargo_api
@@ -37,7 +38,12 @@ class ChooseModeView(View):
"""
+ @method_decorator(transaction.non_atomic_requests)
+ def dispatch(self, *args, **kwargs): # pylint: disable=missing-docstring
+ return super(ChooseModeView, self).dispatch(*args, **kwargs)
+
@method_decorator(login_required)
+ @method_decorator(transaction.atomic)
def get(self, request, course_id, error=None):
"""Displays the course mode choice page.
@@ -135,8 +141,9 @@ def get(self, request, course_id, error=None):
return render_to_response("course_modes/choose.html", context)
+ @method_decorator(transaction.non_atomic_requests)
@method_decorator(login_required)
- @method_decorator(commit_on_success_with_read_committed)
+ @method_decorator(outer_atomic(read_committed=True))
def post(self, request, course_id):
"""Takes the form submission from the page and parses it.
diff --git a/common/djangoapps/dark_lang/middleware.py b/common/djangoapps/dark_lang/middleware.py
index 868ab0570853..d1062c7e4072 100644
--- a/common/djangoapps/dark_lang/middleware.py
+++ b/common/djangoapps/dark_lang/middleware.py
@@ -19,10 +19,8 @@
)
from lang_pref import LANGUAGE_KEY
-# TODO re-import this once we're on Django 1.5 or greater. [PLAT-671]
-# from django.utils.translation.trans_real import parse_accept_lang_header
-# from django.utils.translation import LANGUAGE_SESSION_KEY
-from django_locale.trans_real import parse_accept_lang_header, LANGUAGE_SESSION_KEY
+from django.utils.translation.trans_real import parse_accept_lang_header
+from django.utils.translation import LANGUAGE_SESSION_KEY
def dark_parse_accept_lang_header(accept):
diff --git a/common/djangoapps/dark_lang/migrations/0001_initial.py b/common/djangoapps/dark_lang/migrations/0001_initial.py
index b2f856ac4315..1b3ac52e8930 100644
--- a/common/djangoapps/dark_lang/migrations/0001_initial.py
+++ b/common/djangoapps/dark_lang/migrations/0001_initial.py
@@ -1,74 +1,30 @@
# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'DarkLangConfig'
- db.create_table('dark_lang_darklangconfig', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('change_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
- ('changed_by', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, on_delete=models.PROTECT)),
- ('enabled', self.gf('django.db.models.fields.BooleanField')(default=False)),
- ('released_languages', self.gf('django.db.models.fields.TextField')(blank=True)),
- ))
- db.send_create_signal('dark_lang', ['DarkLangConfig'])
-
-
- def backwards(self, orm):
- # Deleting model 'DarkLangConfig'
- db.delete_table('dark_lang_darklangconfig')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'dark_lang.darklangconfig': {
- 'Meta': {'object_name': 'DarkLangConfig'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'released_languages': ('django.db.models.fields.TextField', [], {'blank': 'True'})
- }
- }
-
- complete_apps = ['dark_lang']
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+from django.conf import settings
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='DarkLangConfig',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('change_date', models.DateTimeField(auto_now_add=True, verbose_name='Change date')),
+ ('enabled', models.BooleanField(default=False, verbose_name='Enabled')),
+ ('released_languages', models.TextField(help_text=b'A comma-separated list of language codes to release to the public.', blank=True)),
+ ('changed_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, editable=False, to=settings.AUTH_USER_MODEL, null=True, verbose_name='Changed by')),
+ ],
+ options={
+ 'ordering': ('-change_date',),
+ 'abstract': False,
+ },
+ ),
+ ]
diff --git a/common/djangoapps/dark_lang/migrations/0002_data__enable_on_install.py b/common/djangoapps/dark_lang/migrations/0002_data__enable_on_install.py
new file mode 100644
index 000000000000..88939c60a77b
--- /dev/null
+++ b/common/djangoapps/dark_lang/migrations/0002_data__enable_on_install.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+# Converted from the original South migration 0002_enable_on_install.py
+#
+from django.db import migrations, models
+
+
+def create_dark_lang_config(apps, schema_editor):
+ """
+ Enable DarkLang by default when it is installed, to prevent accidental
+ release of testing languages.
+ """
+ dark_lang_model = apps.get_model("dark_lang", "DarkLangConfig")
+ db_alias = schema_editor.connection.alias
+
+ dark_lang_model.objects.using(db_alias).get_or_create(enabled=True)
+
+def remove_dark_lang_config(apps, schema_editor):
+ """Write your backwards methods here."""
+ raise RuntimeError("Cannot reverse this migration.")
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('dark_lang', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.RunPython(create_dark_lang_config, remove_dark_lang_config),
+ ]
diff --git a/common/djangoapps/dark_lang/migrations/0002_enable_on_install.py b/common/djangoapps/dark_lang/migrations/0002_enable_on_install.py
deleted file mode 100644
index c794a156ce05..000000000000
--- a/common/djangoapps/dark_lang/migrations/0002_enable_on_install.py
+++ /dev/null
@@ -1,68 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import DataMigration
-from django.db import models
-
-class Migration(DataMigration):
-
- def forwards(self, orm):
- """
- Enable DarkLang by default when it is installed, to prevent accidental
- release of testing languages.
- """
- orm.DarkLangConfig(enabled=True).save()
-
- def backwards(self, orm):
- "Write your backwards methods here."
- raise RuntimeError("Cannot reverse this migration.")
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'dark_lang.darklangconfig': {
- 'Meta': {'object_name': 'DarkLangConfig'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'released_languages': ('django.db.models.fields.TextField', [], {'blank': 'True'})
- }
- }
-
- complete_apps = ['dark_lang']
- symmetrical = True
diff --git a/common/djangoapps/dark_lang/tests.py b/common/djangoapps/dark_lang/tests.py
index 13519b32eb0e..db529bdb8edd 100644
--- a/common/djangoapps/dark_lang/tests.py
+++ b/common/djangoapps/dark_lang/tests.py
@@ -11,9 +11,7 @@
from dark_lang.middleware import DarkLangMiddleware
from dark_lang.models import DarkLangConfig
-# TODO PLAT-671 Import from Django 1.8
-# from django.utils.translation import LANGUAGE_SESSION_KEY
-from django_locale.trans_real import LANGUAGE_SESSION_KEY
+from django.utils.translation import LANGUAGE_SESSION_KEY
from student.tests.factories import UserFactory
diff --git a/common/djangoapps/django_comment_common/migrations/0001_initial.py b/common/djangoapps/django_comment_common/migrations/0001_initial.py
index f2c3ca3aee63..2eb8f7a53315 100644
--- a/common/djangoapps/django_comment_common/migrations/0001_initial.py
+++ b/common/djangoapps/django_comment_common/migrations/0001_initial.py
@@ -1,92 +1,42 @@
# -*- coding: utf-8 -*-
-from south.v2 import SchemaMigration
+from __future__ import unicode_literals
+from django.db import migrations, models
+from django.conf import settings
+import xmodule_django.models
-class Migration(SchemaMigration):
-#
-# cdodge: This is basically an empty migration since everything has - up to now - managed in the django_comment_client app
-# But going forward we should be using this migration
-#
- def forwards(self, orm):
- pass
- def backwards(self, orm):
- pass
+class Migration(migrations.Migration):
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),
- 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'consecutive_days_visit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'blank': 'True'}),
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'display_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
- 'email_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'ignored_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'interesting_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'new_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),
- 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
- 'seen_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'show_country': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'w'", 'max_length': '2'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
- 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'django_comment_common.permission': {
- 'Meta': {'object_name': 'Permission'},
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'primary_key': 'True'}),
- 'roles': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'permissions'", 'symmetrical': 'False', 'to': "orm['django_comment_common.Role']"})
- },
- 'django_comment_common.role': {
- 'Meta': {'object_name': 'Role'},
- 'course_id': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'roles'", 'symmetrical': 'False', 'to': "orm['auth.User']"})
- }
- }
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ]
- complete_apps = ['django_comment_common']
+ operations = [
+ migrations.CreateModel(
+ name='Permission',
+ fields=[
+ ('name', models.CharField(max_length=30, serialize=False, primary_key=True)),
+ ],
+ options={
+ 'db_table': 'django_comment_client_permission',
+ },
+ ),
+ migrations.CreateModel(
+ name='Role',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('name', models.CharField(max_length=30)),
+ ('course_id', xmodule_django.models.CourseKeyField(db_index=True, max_length=255, blank=True)),
+ ('users', models.ManyToManyField(related_name='roles', to=settings.AUTH_USER_MODEL)),
+ ],
+ options={
+ 'db_table': 'django_comment_client_role',
+ },
+ ),
+ migrations.AddField(
+ model_name='permission',
+ name='roles',
+ field=models.ManyToManyField(related_name='permissions', to='django_comment_common.Role'),
+ ),
+ ]
diff --git a/common/djangoapps/django_locale/__init__.py b/common/djangoapps/django_locale/__init__.py
deleted file mode 100644
index 655019022ead..000000000000
--- a/common/djangoapps/django_locale/__init__.py
+++ /dev/null
@@ -1,7 +0,0 @@
-"""
-TODO: This module is imported from the stable Django 1.8 branch, as a
-copy of https://github.com/django/django/blob/stable/1.8.x/django/middleware/locale.py.
-
-Remove this file and re-import this middleware from Django once the
-codebase is upgraded with a modern version of Django. [PLAT-671]
-"""
diff --git a/common/djangoapps/django_locale/middleware.py b/common/djangoapps/django_locale/middleware.py
deleted file mode 100644
index b0601a807eac..000000000000
--- a/common/djangoapps/django_locale/middleware.py
+++ /dev/null
@@ -1,83 +0,0 @@
-# TODO: This file is imported from the stable Django 1.8 branch. Remove this file
-# and re-import this middleware from Django once the codebase is upgraded. [PLAT-671]
-# pylint: disable=invalid-name, missing-docstring
-"This is the locale selecting middleware that will look at accept headers"
-
-from django.conf import settings
-from django.core.urlresolvers import (
- LocaleRegexURLResolver, get_resolver, get_script_prefix, is_valid_path,
-)
-from django.http import HttpResponseRedirect
-from django.utils import translation
-from django.utils.cache import patch_vary_headers
-# Override the Django 1.4 implementation with the 1.8 implementation
-from django_locale.trans_real import get_language_from_request
-
-
-class LocaleMiddleware(object):
- """
- This is a very simple middleware that parses a request
- and decides what translation object to install in the current
- thread context. This allows pages to be dynamically
- translated to the language the user desires (if the language
- is available, of course).
- """
- response_redirect_class = HttpResponseRedirect
-
- def __init__(self):
- self._is_language_prefix_patterns_used = False
- for url_pattern in get_resolver(None).url_patterns:
- if isinstance(url_pattern, LocaleRegexURLResolver):
- self._is_language_prefix_patterns_used = True
- break
-
- def process_request(self, request):
- check_path = self.is_language_prefix_patterns_used()
- # This call is broken in Django 1.4:
- # https://github.com/django/django/blob/stable/1.4.x/django/utils/translation/trans_real.py#L399
- # (we override parse_accept_lang_header to a fixed version in dark_lang.middleware)
- language = get_language_from_request(
- request, check_path=check_path)
- translation.activate(language)
- request.LANGUAGE_CODE = translation.get_language()
-
- def process_response(self, request, response):
- language = translation.get_language()
- language_from_path = translation.get_language_from_path(request.path_info)
- if (response.status_code == 404 and not language_from_path
- and self.is_language_prefix_patterns_used()):
- urlconf = getattr(request, 'urlconf', None)
- language_path = '/%s%s' % (language, request.path_info)
- path_valid = is_valid_path(language_path, urlconf)
- if (not path_valid and settings.APPEND_SLASH
- and not language_path.endswith('/')):
- path_valid = is_valid_path("%s/" % language_path, urlconf)
-
- if path_valid:
- script_prefix = get_script_prefix()
- language_url = "%s://%s%s" % (
- request.scheme,
- request.get_host(),
- # insert language after the script prefix and before the
- # rest of the URL
- request.get_full_path().replace(
- script_prefix,
- '%s%s/' % (script_prefix, language),
- 1
- )
- )
- return self.response_redirect_class(language_url)
-
- if not (self.is_language_prefix_patterns_used()
- and language_from_path):
- patch_vary_headers(response, ('Accept-Language',))
- if 'Content-Language' not in response:
- response['Content-Language'] = language
- return response
-
- def is_language_prefix_patterns_used(self):
- """
- Returns `True` if the `LocaleRegexURLResolver` is used
- at root level of the urlpatterns, else it returns `False`.
- """
- return self._is_language_prefix_patterns_used
diff --git a/common/djangoapps/django_locale/tests.py b/common/djangoapps/django_locale/tests.py
deleted file mode 100644
index cc40ce9d4a4d..000000000000
--- a/common/djangoapps/django_locale/tests.py
+++ /dev/null
@@ -1,157 +0,0 @@
-# pylint: disable=invalid-name, line-too-long, super-method-not-called
-"""
-Tests taken from Django upstream:
-https://github.com/django/django/blob/e6b34193c5c7d117ededdab04bb16caf8864f07c/tests/regressiontests/i18n/tests.py
-"""
-from django.conf import settings
-from django.test import TestCase, RequestFactory
-from django_locale.trans_real import (
- parse_accept_lang_header, get_language_from_request, LANGUAGE_SESSION_KEY
-)
-
-# Added to test middleware around dark lang
-from django.contrib.auth.models import User
-from django.test.utils import override_settings
-from dark_lang.models import DarkLangConfig
-
-
-# Adding to support test differences between Django and our own settings
-@override_settings(LANGUAGES=[
- ('pt', 'Portuguese'),
- ('pt-br', 'Portuguese-Brasil'),
- ('es', 'Spanish'),
- ('es-ar', 'Spanish (Argentina)'),
- ('de', 'Deutch'),
- ('zh-cn', 'Chinese (China)'),
- ('ar-sa', 'Arabic (Saudi Arabia)'),
-])
-class MiscTests(TestCase):
- """
- Tests taken from Django upstream:
- https://github.com/django/django/blob/e6b34193c5c7d117ededdab04bb16caf8864f07c/tests/regressiontests/i18n/tests.py
- """
- def setUp(self):
- self.rf = RequestFactory()
- # Added to test middleware around dark lang
- user = User()
- user.save()
- DarkLangConfig(
- released_languages='pt, pt-br, es, de, es-ar, zh-cn, ar-sa',
- changed_by=user,
- enabled=True
- ).save()
-
- def test_parse_spec_http_header(self):
- """
- Testing HTTP header parsing. First, we test that we can parse the
- values according to the spec (and that we extract all the pieces in
- the right order).
- """
- p = parse_accept_lang_header
- # Good headers.
- self.assertEqual([('de', 1.0)], p('de'))
- self.assertEqual([('en-AU', 1.0)], p('en-AU'))
- self.assertEqual([('es-419', 1.0)], p('es-419'))
- self.assertEqual([('*', 1.0)], p('*;q=1.00'))
- self.assertEqual([('en-AU', 0.123)], p('en-AU;q=0.123'))
- self.assertEqual([('en-au', 0.5)], p('en-au;q=0.5'))
- self.assertEqual([('en-au', 1.0)], p('en-au;q=1.0'))
- self.assertEqual([('da', 1.0), ('en', 0.5), ('en-gb', 0.25)], p('da, en-gb;q=0.25, en;q=0.5'))
- self.assertEqual([('en-au-xx', 1.0)], p('en-au-xx'))
- self.assertEqual([('de', 1.0), ('en-au', 0.75), ('en-us', 0.5), ('en', 0.25), ('es', 0.125), ('fa', 0.125)], p('de,en-au;q=0.75,en-us;q=0.5,en;q=0.25,es;q=0.125,fa;q=0.125'))
- self.assertEqual([('*', 1.0)], p('*'))
- self.assertEqual([('de', 1.0)], p('de;q=0.'))
- self.assertEqual([('en', 1.0), ('*', 0.5)], p('en; q=1.0, * ; q=0.5'))
- self.assertEqual([], p(''))
-
- # Bad headers; should always return [].
- self.assertEqual([], p('en-gb;q=1.0000'))
- self.assertEqual([], p('en;q=0.1234'))
- self.assertEqual([], p('en;q=.2'))
- self.assertEqual([], p('abcdefghi-au'))
- self.assertEqual([], p('**'))
- self.assertEqual([], p('en,,gb'))
- self.assertEqual([], p('en-au;q=0.1.0'))
- self.assertEqual([], p('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXZ,en'))
- self.assertEqual([], p('da, en-gb;q=0.8, en;q=0.7,#'))
- self.assertEqual([], p('de;q=2.0'))
- self.assertEqual([], p('de;q=0.a'))
- self.assertEqual([], p('12-345'))
- self.assertEqual([], p(''))
-
- def test_parse_literal_http_header(self):
- """
- Now test that we parse a literal HTTP header correctly.
- """
- g = get_language_from_request
- r = self.rf.get('/')
- r.COOKIES = {}
- r.META = {'HTTP_ACCEPT_LANGUAGE': 'pt-br'}
- self.assertEqual('pt-br', g(r))
-
- r.META = {'HTTP_ACCEPT_LANGUAGE': 'pt'}
- self.assertEqual('pt', g(r))
-
- r.META = {'HTTP_ACCEPT_LANGUAGE': 'es,de'}
- self.assertEqual('es', g(r))
-
- r.META = {'HTTP_ACCEPT_LANGUAGE': 'es-ar,de'}
- self.assertEqual('es-ar', g(r))
-
- # This test assumes there won't be a Django translation to a US
- # variation of the Spanish language, a safe assumption. When the
- # user sets it as the preferred language, the main 'es'
- # translation should be selected instead.
- r.META = {'HTTP_ACCEPT_LANGUAGE': 'es-us'}
- self.assertEqual(g(r), 'es')
-
- # This tests the following scenario: there isn't a main language (zh)
- # translation of Django but there is a translation to variation (zh_CN)
- # the user sets zh-cn as the preferred language, it should be selected
- # by Django without falling back nor ignoring it.
- r.META = {'HTTP_ACCEPT_LANGUAGE': 'zh-cn,de'}
- self.assertEqual(g(r), 'zh-cn')
-
- def test_logic_masked_by_darklang(self):
- g = get_language_from_request
- r = self.rf.get('/')
- r.COOKIES = {}
- r.META = {'HTTP_ACCEPT_LANGUAGE': 'ar-qa'}
- self.assertEqual('ar-sa', g(r))
-
- r.session = {LANGUAGE_SESSION_KEY: 'es'}
- self.assertEqual('es', g(r))
-
- def test_parse_language_cookie(self):
- """
- Now test that we parse language preferences stored in a cookie correctly.
- """
- g = get_language_from_request
- r = self.rf.get('/')
- r.COOKIES = {settings.LANGUAGE_COOKIE_NAME: 'pt-br'}
- r.META = {}
- self.assertEqual('pt-br', g(r))
-
- r.COOKIES = {settings.LANGUAGE_COOKIE_NAME: 'pt'}
- r.META = {}
- self.assertEqual('pt', g(r))
-
- r.COOKIES = {settings.LANGUAGE_COOKIE_NAME: 'es'}
- r.META = {'HTTP_ACCEPT_LANGUAGE': 'de'}
- self.assertEqual('es', g(r))
-
- # This test assumes there won't be a Django translation to a US
- # variation of the Spanish language, a safe assumption. When the
- # user sets it as the preferred language, the main 'es'
- # translation should be selected instead.
- r.COOKIES = {settings.LANGUAGE_COOKIE_NAME: 'es-us'}
- r.META = {}
- self.assertEqual(g(r), 'es')
-
- # This tests the following scenario: there isn't a main language (zh)
- # translation of Django but there is a translation to variation (zh_CN)
- # the user sets zh-cn as the preferred language, it should be selected
- # by Django without falling back nor ignoring it.
- r.COOKIES = {settings.LANGUAGE_COOKIE_NAME: 'zh-cn'}
- r.META = {'HTTP_ACCEPT_LANGUAGE': 'de'}
- self.assertEqual(g(r), 'zh-cn')
diff --git a/common/djangoapps/django_locale/trans_real.py b/common/djangoapps/django_locale/trans_real.py
deleted file mode 100644
index 3ec6b6d0267b..000000000000
--- a/common/djangoapps/django_locale/trans_real.py
+++ /dev/null
@@ -1,131 +0,0 @@
-"""Translation helper functions."""
-# Imported from Django 1.8
-# pylint: disable=invalid-name
-import re
-from django.conf import settings
-from django.conf.locale import LANG_INFO
-from django.utils import translation
-
-
-# Format of Accept-Language header values. From RFC 2616, section 14.4 and 3.9.
-# and RFC 3066, section 2.1
-accept_language_re = re.compile(r'''
- ([A-Za-z]{1,8}(?:-[A-Za-z0-9]{1,8})*|\*) # "en", "en-au", "x-y-z", "*"
- (?:\s*;\s*q=(0(?:\.\d{,3})?|1(?:.0{,3})?))? # Optional "q=1.00", "q=0.8"
- (?:\s*,\s*|$) # Multiple accepts per header.
- ''', re.VERBOSE)
-
-
-language_code_re = re.compile(r'^[a-z]{1,8}(?:-[a-z0-9]{1,8})*$', re.IGNORECASE)
-
-
-LANGUAGE_SESSION_KEY = '_language'
-
-
-def parse_accept_lang_header(lang_string):
- """
- Parses the lang_string, which is the body of an HTTP Accept-Language
- header, and returns a list of (lang, q-value), ordered by 'q' values.
-
- Any format errors in lang_string results in an empty list being returned.
- """
- # parse_accept_lang_header is broken until we are on Django 1.5 or greater
- # See https://code.djangoproject.com/ticket/19381
- result = []
- pieces = accept_language_re.split(lang_string)
- if pieces[-1]:
- return []
- for i in range(0, len(pieces) - 1, 3):
- first, lang, priority = pieces[i: i + 3]
- if first:
- return []
- priority = priority and float(priority) or 1.0
- result.append((lang, priority))
- result.sort(key=lambda k: k[1], reverse=True)
- return result
-
-
-def get_supported_language_variant(lang_code, strict=False):
- """
- Returns the language-code that's listed in supported languages, possibly
- selecting a more generic variant. Raises LookupError if nothing found.
- If `strict` is False (the default), the function will look for an alternative
- country-specific variant when the currently checked is not found.
- lru_cache should have a maxsize to prevent from memory exhaustion attacks,
- as the provided language codes are taken from the HTTP request. See also
- .
- """
- if lang_code:
- # If 'fr-ca' is not supported, try special fallback or language-only 'fr'.
- possible_lang_codes = [lang_code]
- try:
- # TODO skip this, or import updated LANG_INFO format from __future__
- # (fallback option wasn't added until
- # https://github.com/django/django/commit/5dcdbe95c749d36072f527e120a8cb463199ae0d)
- possible_lang_codes.extend(LANG_INFO[lang_code]['fallback'])
- except KeyError:
- pass
- generic_lang_code = lang_code.split('-')[0]
- possible_lang_codes.append(generic_lang_code)
- supported_lang_codes = dict(settings.LANGUAGES)
-
- for code in possible_lang_codes:
- # Note: django 1.4 implementation of check_for_language is OK to use
- if code in supported_lang_codes and translation.check_for_language(code):
- return code
- if not strict:
- # if fr-fr is not supported, try fr-ca.
- for supported_code in supported_lang_codes:
- if supported_code.startswith(generic_lang_code + '-'):
- return supported_code
- raise LookupError(lang_code)
-
-
-def get_language_from_request(request, check_path=False):
- """
- Analyzes the request to find what language the user wants the system to
- show. Only languages listed in settings.LANGUAGES are taken into account.
- If the user requests a sublanguage where we have a main language, we send
- out the main language.
- If check_path is True, the URL path prefix will be checked for a language
- code, otherwise this is skipped for backwards compatibility.
- """
- if check_path:
- # Note: django 1.4 implementation of get_language_from_path is OK to use
- lang_code = translation.get_language_from_path(request.path_info)
- if lang_code is not None:
- return lang_code
-
- supported_lang_codes = dict(settings.LANGUAGES)
-
- if hasattr(request, 'session'):
- lang_code = request.session.get(LANGUAGE_SESSION_KEY)
- # Note: django 1.4 implementation of check_for_language is OK to use
- if lang_code in supported_lang_codes and lang_code is not None and translation.check_for_language(lang_code):
- return lang_code
-
- lang_code = request.COOKIES.get(settings.LANGUAGE_COOKIE_NAME)
-
- try:
- return get_supported_language_variant(lang_code)
- except LookupError:
- pass
-
- accept = request.META.get('HTTP_ACCEPT_LANGUAGE', '')
- # broken in 1.4, so defined above
- for accept_lang, unused in parse_accept_lang_header(accept):
- if accept_lang == '*':
- break
-
- if not language_code_re.search(accept_lang):
- continue
-
- try:
- return get_supported_language_variant(accept_lang)
- except LookupError:
- continue
-
- try:
- return get_supported_language_variant(settings.LANGUAGE_CODE)
- except LookupError:
- return settings.LANGUAGE_CODE
diff --git a/common/djangoapps/edxmako/makoloader.py b/common/djangoapps/edxmako/makoloader.py
index 33122b944f6e..994346a2ba0d 100644
--- a/common/djangoapps/edxmako/makoloader.py
+++ b/common/djangoapps/edxmako/makoloader.py
@@ -1,10 +1,11 @@
import logging
from django.conf import settings
+from django.core.exceptions import ImproperlyConfigured
from django.template.base import TemplateDoesNotExist
-from django.template.loader import make_origin, get_template_from_string
from django.template.loaders.filesystem import Loader as FilesystemLoader
from django.template.loaders.app_directories import Loader as AppDirectoriesLoader
+from django.template import Engine
from edxmako.template import Template
@@ -50,14 +51,17 @@ def load_template(self, template_name, template_dirs=None):
return template, None
else:
# This is a regular template
- origin = make_origin(file_path, self.load_template_source, template_name, template_dirs)
try:
- template = get_template_from_string(source, origin, template_name)
+ template = Engine.get_default().from_string(source)
return template, None
+ except ImproperlyConfigured:
+ # Either no DjangoTemplates engine was configured -or- multiple engines
+ # were configured, making the get_default() call above fail.
+ raise
except TemplateDoesNotExist:
- # If compiling the template we found raises TemplateDoesNotExist, back off to
- # returning the source and display name for the template we were asked to load.
- # This allows for correct identification (later) of the actual template that does
+ # If compiling the loaded template raises TemplateDoesNotExist, back off to
+ # returning the source and display name for the requested template.
+ # This allows for eventual correct identification of the actual template that does
# not exist.
return source, file_path
@@ -71,13 +75,15 @@ def reset(self):
class MakoFilesystemLoader(MakoLoader):
is_usable = True
+ _accepts_engine_in_init = True
- def __init__(self):
- MakoLoader.__init__(self, FilesystemLoader())
+ def __init__(self, *args):
+ MakoLoader.__init__(self, FilesystemLoader(*args))
class MakoAppDirectoriesLoader(MakoLoader):
is_usable = True
+ _accepts_engine_in_init = True
- def __init__(self):
- MakoLoader.__init__(self, AppDirectoriesLoader())
+ def __init__(self, *args):
+ MakoLoader.__init__(self, AppDirectoriesLoader(*args))
diff --git a/common/djangoapps/edxmako/management/commands/preprocess_assets.py b/common/djangoapps/edxmako/management/commands/preprocess_assets.py
index 805981327e89..8d3cf5608a18 100644
--- a/common/djangoapps/edxmako/management/commands/preprocess_assets.py
+++ b/common/djangoapps/edxmako/management/commands/preprocess_assets.py
@@ -23,6 +23,10 @@ class Command(BaseCommand):
help = "Preprocess asset template files to ready them for compilation."
+ def add_arguments(self, parser):
+ parser.add_argument('files', type=unicode, nargs='+', help='files to pre-process')
+ parser.add_argument('dest_dir', type=unicode, help='destination directory')
+
def handle(self, *args, **options):
theme_name = getattr(settings, "THEME_NAME", None)
use_custom_theme = settings.FEATURES.get("USE_CUSTOM_THEME", False)
@@ -30,8 +34,8 @@ def handle(self, *args, **options):
# No custom theme, nothing to do!
return
- dest_dir = args[-1]
- for source_file in args[:-1]:
+ dest_dir = options['dest_dir']
+ for source_file in options['files']:
self.process_one_file(source_file, dest_dir, theme_name)
def process_one_file(self, source_file, dest_dir, theme_name):
diff --git a/common/djangoapps/edxmako/middleware.py b/common/djangoapps/edxmako/middleware.py
index 5d9f8cbdfc80..cb67e2f1429d 100644
--- a/common/djangoapps/edxmako/middleware.py
+++ b/common/djangoapps/edxmako/middleware.py
@@ -13,7 +13,10 @@
# limitations under the License.
import threading
+from django.conf import settings
from django.template import RequestContext
+from django.template.context import _builtin_context_processors
+from django.utils.module_loading import import_string
from util.request import safe_get_host
REQUEST_CONTEXT = threading.local()
@@ -31,6 +34,15 @@ def process_response(self, __, response):
return response
+def get_template_context_processors():
+ """
+ Returns the context processors defined in settings.TEMPLATES.
+ """
+ context_processors = _builtin_context_processors
+ context_processors += tuple(settings.DEFAULT_TEMPLATE_ENGINE['OPTIONS']['context_processors'])
+ return tuple(import_string(path) for path in context_processors)
+
+
def get_template_request_context():
"""
Returns the template processing context to use for the current request,
@@ -42,4 +54,12 @@ def get_template_request_context():
context = RequestContext(request)
context['is_secure'] = request.is_secure()
context['site'] = safe_get_host(request)
+
+ # This used to happen when a RequestContext object was initialized but was
+ # moved to a different part of the logic when template engines were introduced.
+ # Since we are not using template engines we do this here.
+ # https://github.com/django/django/commit/37505b6397058bcc3460f23d48a7de9641cd6ef0
+ for processor in get_template_context_processors():
+ context.update(processor(request))
+
return context
diff --git a/common/djangoapps/embargo/forms.py b/common/djangoapps/embargo/forms.py
index 96f1b0c2ad97..12c845bfe272 100644
--- a/common/djangoapps/embargo/forms.py
+++ b/common/djangoapps/embargo/forms.py
@@ -27,6 +27,7 @@ class RestrictedCourseForm(forms.ModelForm):
"""
class Meta(object):
model = RestrictedCourse
+ fields = '__all__'
def clean_course_key(self):
"""Validate the course key.
@@ -60,6 +61,7 @@ class IPFilterForm(forms.ModelForm):
class Meta(object):
model = IPFilter
+ fields = '__all__'
def _is_valid_ip(self, address):
"""Whether or not address is a valid ipv4 address or ipv6 address"""
diff --git a/common/djangoapps/embargo/migrations/0001_initial.py b/common/djangoapps/embargo/migrations/0001_initial.py
index ce3a6198a00b..827928930a07 100644
--- a/common/djangoapps/embargo/migrations/0001_initial.py
+++ b/common/djangoapps/embargo/migrations/0001_initial.py
@@ -1,114 +1,104 @@
# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
+from __future__ import unicode_literals
+from django.db import migrations, models
+import django_countries.fields
+import django.db.models.deletion
+from django.conf import settings
+import xmodule_django.models
-class Migration(SchemaMigration):
- def forwards(self, orm):
- # Adding model 'EmbargoedCourse'
- db.create_table('embargo_embargoedcourse', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('course_id', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255, db_index=True)),
- ('embargoed', self.gf('django.db.models.fields.BooleanField')(default=False)),
- ))
- db.send_create_signal('embargo', ['EmbargoedCourse'])
+class Migration(migrations.Migration):
- # Adding model 'EmbargoedState'
- db.create_table('embargo_embargoedstate', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('change_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
- ('changed_by', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, on_delete=models.PROTECT)),
- ('enabled', self.gf('django.db.models.fields.BooleanField')(default=False)),
- ('embargoed_countries', self.gf('django.db.models.fields.TextField')(blank=True)),
- ))
- db.send_create_signal('embargo', ['EmbargoedState'])
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ]
- # Adding model 'IPFilter'
- db.create_table('embargo_ipfilter', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('change_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
- ('changed_by', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, on_delete=models.PROTECT)),
- ('enabled', self.gf('django.db.models.fields.BooleanField')(default=False)),
- ('whitelist', self.gf('django.db.models.fields.TextField')(blank=True)),
- ('blacklist', self.gf('django.db.models.fields.TextField')(blank=True)),
- ))
- db.send_create_signal('embargo', ['IPFilter'])
-
-
- def backwards(self, orm):
- # Deleting model 'EmbargoedCourse'
- db.delete_table('embargo_embargoedcourse')
-
- # Deleting model 'EmbargoedState'
- db.delete_table('embargo_embargoedstate')
-
- # Deleting model 'IPFilter'
- db.delete_table('embargo_ipfilter')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'embargo.embargoedcourse': {
- 'Meta': {'object_name': 'EmbargoedCourse'},
- 'course_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
- 'embargoed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'embargo.embargoedstate': {
- 'Meta': {'object_name': 'EmbargoedState'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'embargoed_countries': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'embargo.ipfilter': {
- 'Meta': {'object_name': 'IPFilter'},
- 'blacklist': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'whitelist': ('django.db.models.fields.TextField', [], {'blank': 'True'})
- }
- }
-
- complete_apps = ['embargo']
+ operations = [
+ migrations.CreateModel(
+ name='Country',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('country', django_countries.fields.CountryField(help_text='Two character ISO country code.', unique=True, max_length=2, db_index=True)),
+ ],
+ options={
+ 'ordering': ['country'],
+ },
+ ),
+ migrations.CreateModel(
+ name='CountryAccessRule',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('rule_type', models.CharField(default=b'blacklist', help_text='Whether to include or exclude the given course. If whitelist countries are specified, then ONLY users from whitelisted countries will be able to access the course. If blacklist countries are specified, then users from blacklisted countries will NOT be able to access the course.', max_length=255, choices=[(b'whitelist', b'Whitelist (allow only these countries)'), (b'blacklist', b'Blacklist (block these countries)')])),
+ ('country', models.ForeignKey(help_text='The country to which this rule applies.', to='embargo.Country')),
+ ],
+ ),
+ migrations.CreateModel(
+ name='CourseAccessRuleHistory',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('timestamp', models.DateTimeField(auto_now_add=True, db_index=True)),
+ ('course_key', xmodule_django.models.CourseKeyField(max_length=255, db_index=True)),
+ ('snapshot', models.TextField(null=True, blank=True)),
+ ],
+ options={
+ 'get_latest_by': 'timestamp',
+ },
+ ),
+ migrations.CreateModel(
+ name='EmbargoedCourse',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('course_id', xmodule_django.models.CourseKeyField(unique=True, max_length=255, db_index=True)),
+ ('embargoed', models.BooleanField(default=False)),
+ ],
+ ),
+ migrations.CreateModel(
+ name='EmbargoedState',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('change_date', models.DateTimeField(auto_now_add=True, verbose_name='Change date')),
+ ('enabled', models.BooleanField(default=False, verbose_name='Enabled')),
+ ('embargoed_countries', models.TextField(help_text=b'A comma-separated list of country codes that fall under U.S. embargo restrictions', blank=True)),
+ ('changed_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, editable=False, to=settings.AUTH_USER_MODEL, null=True, verbose_name='Changed by')),
+ ],
+ options={
+ 'ordering': ('-change_date',),
+ 'abstract': False,
+ },
+ ),
+ migrations.CreateModel(
+ name='IPFilter',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('change_date', models.DateTimeField(auto_now_add=True, verbose_name='Change date')),
+ ('enabled', models.BooleanField(default=False, verbose_name='Enabled')),
+ ('whitelist', models.TextField(help_text=b'A comma-separated list of IP addresses that should not fall under embargo restrictions.', blank=True)),
+ ('blacklist', models.TextField(help_text=b'A comma-separated list of IP addresses that should fall under embargo restrictions.', blank=True)),
+ ('changed_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, editable=False, to=settings.AUTH_USER_MODEL, null=True, verbose_name='Changed by')),
+ ],
+ options={
+ 'ordering': ('-change_date',),
+ 'abstract': False,
+ },
+ ),
+ migrations.CreateModel(
+ name='RestrictedCourse',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('course_key', xmodule_django.models.CourseKeyField(help_text='The course key for the restricted course.', unique=True, max_length=255, db_index=True)),
+ ('enroll_msg_key', models.CharField(default=b'default', help_text='The message to show when a user is blocked from enrollment.', max_length=255, choices=[(b'default', b'Default'), (b'embargo', b'Embargo')])),
+ ('access_msg_key', models.CharField(default=b'default', help_text='The message to show when a user is blocked from accessing a course.', max_length=255, choices=[(b'default', b'Default'), (b'embargo', b'Embargo')])),
+ ('disable_access_check', models.BooleanField(default=False, help_text='Allow users who enrolled in an allowed country to access restricted courses from excluded countries.')),
+ ],
+ ),
+ migrations.AddField(
+ model_name='countryaccessrule',
+ name='restricted_course',
+ field=models.ForeignKey(help_text='The course to which this rule applies.', to='embargo.RestrictedCourse'),
+ ),
+ migrations.AlterUniqueTogether(
+ name='countryaccessrule',
+ unique_together=set([('restricted_course', 'country')]),
+ ),
+ ]
diff --git a/common/djangoapps/embargo/migrations/0002_add_country_access_models.py b/common/djangoapps/embargo/migrations/0002_add_country_access_models.py
deleted file mode 100644
index e1a9efe0070b..000000000000
--- a/common/djangoapps/embargo/migrations/0002_add_country_access_models.py
+++ /dev/null
@@ -1,141 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'Country'
- db.create_table('embargo_country', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('country', self.gf('django_countries.fields.CountryField')(unique=True, max_length=2, db_index=True)),
- ))
- db.send_create_signal('embargo', ['Country'])
-
- # Adding model 'RestrictedCourse'
- db.create_table('embargo_restrictedcourse', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('course_key', self.gf('xmodule_django.models.CourseKeyField')(unique=True, max_length=255, db_index=True)),
- ('enroll_msg_key', self.gf('django.db.models.fields.CharField')(default='default', max_length=255)),
- ('access_msg_key', self.gf('django.db.models.fields.CharField')(default='default', max_length=255)),
- ))
- db.send_create_signal('embargo', ['RestrictedCourse'])
-
- # Adding model 'CountryAccessRule'
- db.create_table('embargo_countryaccessrule', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('rule_type', self.gf('django.db.models.fields.CharField')(default='blacklist', max_length=255)),
- ('restricted_course', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['embargo.RestrictedCourse'])),
- ('country', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['embargo.Country'])),
- ))
- db.send_create_signal('embargo', ['CountryAccessRule'])
-
- # Adding unique constraint on 'CountryAccessRule', fields ['restricted_course', 'country']
- db.create_unique('embargo_countryaccessrule', ['restricted_course_id', 'country_id'])
-
-
- # Changing field 'EmbargoedCourse.course_id'
- db.alter_column('embargo_embargoedcourse', 'course_id', self.gf('xmodule_django.models.CourseKeyField')(unique=True, max_length=255))
-
- def backwards(self, orm):
- # Removing unique constraint on 'CountryAccessRule', fields ['restricted_course', 'country']
- db.delete_unique('embargo_countryaccessrule', ['restricted_course_id', 'country_id'])
-
- # Deleting model 'Country'
- db.delete_table('embargo_country')
-
- # Deleting model 'RestrictedCourse'
- db.delete_table('embargo_restrictedcourse')
-
- # Deleting model 'CountryAccessRule'
- db.delete_table('embargo_countryaccessrule')
-
-
- # Changing field 'EmbargoedCourse.course_id'
- db.alter_column('embargo_embargoedcourse', 'course_id', self.gf('django.db.models.fields.CharField')(max_length=255, unique=True))
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'embargo.country': {
- 'Meta': {'ordering': "['country']", 'object_name': 'Country'},
- 'country': ('django_countries.fields.CountryField', [], {'unique': 'True', 'max_length': '2', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'embargo.countryaccessrule': {
- 'Meta': {'unique_together': "(('restricted_course', 'country'),)", 'object_name': 'CountryAccessRule'},
- 'country': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['embargo.Country']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'restricted_course': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['embargo.RestrictedCourse']"}),
- 'rule_type': ('django.db.models.fields.CharField', [], {'default': "'blacklist'", 'max_length': '255'})
- },
- 'embargo.embargoedcourse': {
- 'Meta': {'object_name': 'EmbargoedCourse'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
- 'embargoed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'embargo.embargoedstate': {
- 'Meta': {'object_name': 'EmbargoedState'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'embargoed_countries': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'embargo.ipfilter': {
- 'Meta': {'object_name': 'IPFilter'},
- 'blacklist': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'whitelist': ('django.db.models.fields.TextField', [], {'blank': 'True'})
- },
- 'embargo.restrictedcourse': {
- 'Meta': {'object_name': 'RestrictedCourse'},
- 'access_msg_key': ('django.db.models.fields.CharField', [], {'default': "'default'", 'max_length': '255'}),
- 'course_key': ('xmodule_django.models.CourseKeyField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
- 'enroll_msg_key': ('django.db.models.fields.CharField', [], {'default': "'default'", 'max_length': '255'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- }
- }
-
- complete_apps = ['embargo']
\ No newline at end of file
diff --git a/common/djangoapps/embargo/migrations/0002_data__add_countries.py b/common/djangoapps/embargo/migrations/0002_data__add_countries.py
new file mode 100644
index 000000000000..ae738a2863a5
--- /dev/null
+++ b/common/djangoapps/embargo/migrations/0002_data__add_countries.py
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+# Converted from the original South migration 0003_add_countries.py
+
+from django.db import migrations, models
+from django_countries import countries
+
+
+def create_embargo_countries(apps, schema_editor):
+ """Populate the available countries with all 2-character ISO country codes. """
+ country_model = apps.get_model("embargo", "Country")
+ db_alias = schema_editor.connection.alias
+ for country_code, __ in list(countries):
+ country_model.objects.using(db_alias).get_or_create(country=country_code)
+
+def remove_embargo_countries(apps, schema_editor):
+ """Clear all available countries. """
+ country_model = apps.get_model("embargo", "Country")
+ db_alias = schema_editor.connection.alias
+ country_model.objects.using(db_alias).all().delete()
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('embargo', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.RunPython(create_embargo_countries, remove_embargo_countries),
+ ]
+
diff --git a/common/djangoapps/embargo/migrations/0003_add_countries.py b/common/djangoapps/embargo/migrations/0003_add_countries.py
deleted file mode 100644
index a1582258af48..000000000000
--- a/common/djangoapps/embargo/migrations/0003_add_countries.py
+++ /dev/null
@@ -1,101 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import DataMigration
-from django.db import models
-from django_countries import countries
-
-class Migration(DataMigration):
-
- def forwards(self, orm):
- """Populate the available countries with all 2-character ISO country codes. """
- for country_code, __ in list(countries):
- orm.Country.objects.get_or_create(country=country_code)
-
- def backwards(self, orm):
- """Clear all available countries. """
- orm.Country.objects.all().delete()
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'embargo.country': {
- 'Meta': {'object_name': 'Country'},
- 'country': ('django_countries.fields.CountryField', [], {'unique': 'True', 'max_length': '2', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'embargo.countryaccessrule': {
- 'Meta': {'unique_together': "(('restricted_course', 'rule_type'),)", 'object_name': 'CountryAccessRule'},
- 'country': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['embargo.Country']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'restricted_course': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['embargo.RestrictedCourse']"}),
- 'rule_type': ('django.db.models.fields.CharField', [], {'max_length': '255'})
- },
- 'embargo.embargoedcourse': {
- 'Meta': {'object_name': 'EmbargoedCourse'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
- 'embargoed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'embargo.embargoedstate': {
- 'Meta': {'object_name': 'EmbargoedState'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'embargoed_countries': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'embargo.ipfilter': {
- 'Meta': {'object_name': 'IPFilter'},
- 'blacklist': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'whitelist': ('django.db.models.fields.TextField', [], {'blank': 'True'})
- },
- 'embargo.restrictedcourse': {
- 'Meta': {'object_name': 'RestrictedCourse'},
- 'access_msg_key': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'course_key': ('xmodule_django.models.CourseKeyField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
- 'enroll_msg_key': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- }
- }
-
- complete_apps = ['embargo']
- symmetrical = True
diff --git a/common/djangoapps/embargo/migrations/0004_migrate_embargo_config.py b/common/djangoapps/embargo/migrations/0004_migrate_embargo_config.py
deleted file mode 100644
index 6d577f39c33d..000000000000
--- a/common/djangoapps/embargo/migrations/0004_migrate_embargo_config.py
+++ /dev/null
@@ -1,129 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import DataMigration
-from django.db import models
-
-class Migration(DataMigration):
-
- def forwards(self, orm):
- """Move the current course embargo configuration to the new models. """
- for old_course in orm.EmbargoedCourse.objects.all():
- new_course, __ = orm.RestrictedCourse.objects.get_or_create(course_key=old_course.course_id)
-
- # Set the message keys to 'embargo'
- new_course.enroll_msg_key = 'embargo'
- new_course.access_msg_key = 'embargo'
- new_course.save()
-
- for country in self._embargoed_countries_list(orm):
- country_model = orm.Country.objects.get(country=country)
- orm.CountryAccessRule.objects.get_or_create(
- country=country_model,
- rule_type='blacklist',
- restricted_course=new_course
- )
-
- def backwards(self, orm):
- """No backwards migration required since the forward migration is idempotent. """
- pass
-
- def _embargoed_countries_list(self, orm):
- """Retrieve the list of embargoed countries from the existing tables. """
- # We need to replicate some application logic here, because South
- # doesn't give us access to class methods on the Django model objects.
- try:
- current_config = orm.EmbargoedState.objects.order_by('-change_date')[0]
- if current_config.enabled and current_config.embargoed_countries:
- return [
- country.strip().upper() for country
- in current_config.embargoed_countries.split(',')
- ]
- except IndexError:
- pass
-
- return []
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'embargo.country': {
- 'Meta': {'ordering': "['country']", 'object_name': 'Country'},
- 'country': ('django_countries.fields.CountryField', [], {'unique': 'True', 'max_length': '2', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'embargo.countryaccessrule': {
- 'Meta': {'unique_together': "(('restricted_course', 'country'),)", 'object_name': 'CountryAccessRule'},
- 'country': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['embargo.Country']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'restricted_course': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['embargo.RestrictedCourse']"}),
- 'rule_type': ('django.db.models.fields.CharField', [], {'default': "'blacklist'", 'max_length': '255'})
- },
- 'embargo.embargoedcourse': {
- 'Meta': {'object_name': 'EmbargoedCourse'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
- 'embargoed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'embargo.embargoedstate': {
- 'Meta': {'object_name': 'EmbargoedState'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'embargoed_countries': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'embargo.ipfilter': {
- 'Meta': {'object_name': 'IPFilter'},
- 'blacklist': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'whitelist': ('django.db.models.fields.TextField', [], {'blank': 'True'})
- },
- 'embargo.restrictedcourse': {
- 'Meta': {'object_name': 'RestrictedCourse'},
- 'access_msg_key': ('django.db.models.fields.CharField', [], {'default': "'default'", 'max_length': '255'}),
- 'course_key': ('xmodule_django.models.CourseKeyField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
- 'enroll_msg_key': ('django.db.models.fields.CharField', [], {'default': "'default'", 'max_length': '255'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- }
- }
-
- complete_apps = ['embargo']
- symmetrical = True
diff --git a/common/djangoapps/embargo/migrations/0005_add_courseaccessrulehistory.py b/common/djangoapps/embargo/migrations/0005_add_courseaccessrulehistory.py
deleted file mode 100644
index 1f99a113be08..000000000000
--- a/common/djangoapps/embargo/migrations/0005_add_courseaccessrulehistory.py
+++ /dev/null
@@ -1,114 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'CourseAccessRuleHistory'
- db.create_table('embargo_courseaccessrulehistory', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('timestamp', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, db_index=True, blank=True)),
- ('course_key', self.gf('xmodule_django.models.CourseKeyField')(max_length=255, db_index=True)),
- ('snapshot', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
- ))
- db.send_create_signal('embargo', ['CourseAccessRuleHistory'])
-
-
- def backwards(self, orm):
- # Deleting model 'CourseAccessRuleHistory'
- db.delete_table('embargo_courseaccessrulehistory')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'embargo.country': {
- 'Meta': {'ordering': "['country']", 'object_name': 'Country'},
- 'country': ('django_countries.fields.CountryField', [], {'unique': 'True', 'max_length': '2', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'embargo.countryaccessrule': {
- 'Meta': {'unique_together': "(('restricted_course', 'country'),)", 'object_name': 'CountryAccessRule'},
- 'country': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['embargo.Country']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'restricted_course': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['embargo.RestrictedCourse']"}),
- 'rule_type': ('django.db.models.fields.CharField', [], {'default': "'blacklist'", 'max_length': '255'})
- },
- 'embargo.courseaccessrulehistory': {
- 'Meta': {'object_name': 'CourseAccessRuleHistory'},
- 'course_key': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'snapshot': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'timestamp': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'})
- },
- 'embargo.embargoedcourse': {
- 'Meta': {'object_name': 'EmbargoedCourse'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
- 'embargoed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'embargo.embargoedstate': {
- 'Meta': {'object_name': 'EmbargoedState'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'embargoed_countries': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'embargo.ipfilter': {
- 'Meta': {'object_name': 'IPFilter'},
- 'blacklist': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'whitelist': ('django.db.models.fields.TextField', [], {'blank': 'True'})
- },
- 'embargo.restrictedcourse': {
- 'Meta': {'object_name': 'RestrictedCourse'},
- 'access_msg_key': ('django.db.models.fields.CharField', [], {'default': "'default'", 'max_length': '255'}),
- 'course_key': ('xmodule_django.models.CourseKeyField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
- 'enroll_msg_key': ('django.db.models.fields.CharField', [], {'default': "'default'", 'max_length': '255'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- }
- }
-
- complete_apps = ['embargo']
\ No newline at end of file
diff --git a/common/djangoapps/embargo/migrations/0006_auto__add_field_restrictedcourse_disable_access_check.py b/common/djangoapps/embargo/migrations/0006_auto__add_field_restrictedcourse_disable_access_check.py
deleted file mode 100644
index cfda42e042e0..000000000000
--- a/common/djangoapps/embargo/migrations/0006_auto__add_field_restrictedcourse_disable_access_check.py
+++ /dev/null
@@ -1,111 +0,0 @@
-# -*- coding: utf-8 -*-
-from south.utils import datetime_utils as datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding field 'RestrictedCourse.disable_access_check'
- db.add_column('embargo_restrictedcourse', 'disable_access_check',
- self.gf('django.db.models.fields.BooleanField')(default=False),
- keep_default=False)
-
-
- def backwards(self, orm):
- # Deleting field 'RestrictedCourse.disable_access_check'
- db.delete_column('embargo_restrictedcourse', 'disable_access_check')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'embargo.country': {
- 'Meta': {'ordering': "['country']", 'object_name': 'Country'},
- 'country': ('django_countries.fields.CountryField', [], {'unique': 'True', 'max_length': '2', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'embargo.countryaccessrule': {
- 'Meta': {'unique_together': "(('restricted_course', 'country'),)", 'object_name': 'CountryAccessRule'},
- 'country': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['embargo.Country']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'restricted_course': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['embargo.RestrictedCourse']"}),
- 'rule_type': ('django.db.models.fields.CharField', [], {'default': "'blacklist'", 'max_length': '255'})
- },
- 'embargo.courseaccessrulehistory': {
- 'Meta': {'object_name': 'CourseAccessRuleHistory'},
- 'course_key': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'snapshot': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'timestamp': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'})
- },
- 'embargo.embargoedcourse': {
- 'Meta': {'object_name': 'EmbargoedCourse'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
- 'embargoed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'embargo.embargoedstate': {
- 'Meta': {'object_name': 'EmbargoedState'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'embargoed_countries': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'embargo.ipfilter': {
- 'Meta': {'object_name': 'IPFilter'},
- 'blacklist': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'whitelist': ('django.db.models.fields.TextField', [], {'blank': 'True'})
- },
- 'embargo.restrictedcourse': {
- 'Meta': {'object_name': 'RestrictedCourse'},
- 'access_msg_key': ('django.db.models.fields.CharField', [], {'default': "'default'", 'max_length': '255'}),
- 'course_key': ('xmodule_django.models.CourseKeyField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
- 'disable_access_check': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'enroll_msg_key': ('django.db.models.fields.CharField', [], {'default': "'default'", 'max_length': '255'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- }
- }
-
- complete_apps = ['embargo']
\ No newline at end of file
diff --git a/common/djangoapps/embargo/tests/test_api.py b/common/djangoapps/embargo/tests/test_api.py
index ca6fcaecd1b9..16bcaae6ce19 100644
--- a/common/djangoapps/embargo/tests/test_api.py
+++ b/common/djangoapps/embargo/tests/test_api.py
@@ -159,7 +159,6 @@ def test_profile_country_db_null(self):
# (because when we save it, it will set the database field to an empty string instead of NULL)
query = "UPDATE auth_userprofile SET country = NULL WHERE id = %s"
connection.cursor().execute(query, [str(self.user.profile.id)])
- transaction.commit_unless_managed()
# Verify that we can check the user's access without error
result = embargo_api.check_course_access(self.course.id, user=self.user, ip_address='0.0.0.0')
@@ -171,7 +170,7 @@ def test_caching(self):
# (restricted course, but pass all the checks)
# This is the worst case, so it will hit all of the
# caching code.
- with self.assertNumQueries(4):
+ with self.assertNumQueries(3):
embargo_api.check_course_access(self.course.id, user=self.user, ip_address='0.0.0.0')
with self.assertNumQueries(0):
diff --git a/common/djangoapps/enrollment/api.py b/common/djangoapps/enrollment/api.py
index f9edd9e414c7..f7774b53a14b 100644
--- a/common/djangoapps/enrollment/api.py
+++ b/common/djangoapps/enrollment/api.py
@@ -3,7 +3,7 @@
course level, such as available course modes.
"""
-from django.utils import importlib
+import importlib
import logging
from django.conf import settings
from django.core.cache import cache
diff --git a/common/djangoapps/external_auth/migrations/0001_initial.py b/common/djangoapps/external_auth/migrations/0001_initial.py
index cf93c99d6ba9..f68b8f0e88a4 100644
--- a/common/djangoapps/external_auth/migrations/0001_initial.py
+++ b/common/djangoapps/external_auth/migrations/0001_initial.py
@@ -1,90 +1,34 @@
# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'ExternalAuthMap'
- db.create_table('external_auth_externalauthmap', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('external_id', self.gf('django.db.models.fields.CharField')(max_length=255, db_index=True)),
- ('external_domain', self.gf('django.db.models.fields.CharField')(max_length=255, db_index=True)),
- ('external_credentials', self.gf('django.db.models.fields.TextField')(blank=True)),
- ('external_email', self.gf('django.db.models.fields.CharField')(max_length=255, db_index=True)),
- ('external_name', self.gf('django.db.models.fields.CharField')(db_index=True, max_length=255, blank=True)),
- ('user', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['auth.User'], unique=True, null=True)),
- ('internal_password', self.gf('django.db.models.fields.CharField')(max_length=31, blank=True)),
- ('dtcreated', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
- ('dtsignup', self.gf('django.db.models.fields.DateTimeField')(null=True)),
- ))
- db.send_create_signal('external_auth', ['ExternalAuthMap'])
-
- # Adding unique constraint on 'ExternalAuthMap', fields ['external_id', 'external_domain']
- db.create_unique('external_auth_externalauthmap', ['external_id', 'external_domain'])
-
-
- def backwards(self, orm):
- # Removing unique constraint on 'ExternalAuthMap', fields ['external_id', 'external_domain']
- db.delete_unique('external_auth_externalauthmap', ['external_id', 'external_domain'])
-
- # Deleting model 'ExternalAuthMap'
- db.delete_table('external_auth_externalauthmap')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'external_auth.externalauthmap': {
- 'Meta': {'unique_together': "(('external_id', 'external_domain'),)", 'object_name': 'ExternalAuthMap'},
- 'dtcreated': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'dtsignup': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'external_credentials': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'external_domain': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'external_email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'external_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'external_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'internal_password': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'null': 'True'})
- }
- }
-
- complete_apps = ['external_auth']
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+from django.conf import settings
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='ExternalAuthMap',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('external_id', models.CharField(max_length=255, db_index=True)),
+ ('external_domain', models.CharField(max_length=255, db_index=True)),
+ ('external_credentials', models.TextField(blank=True)),
+ ('external_email', models.CharField(max_length=255, db_index=True)),
+ ('external_name', models.CharField(db_index=True, max_length=255, blank=True)),
+ ('internal_password', models.CharField(max_length=31, blank=True)),
+ ('dtcreated', models.DateTimeField(auto_now_add=True, verbose_name=b'creation date')),
+ ('dtsignup', models.DateTimeField(null=True, verbose_name=b'signup date')),
+ ('user', models.OneToOneField(null=True, to=settings.AUTH_USER_MODEL)),
+ ],
+ ),
+ migrations.AlterUniqueTogether(
+ name='externalauthmap',
+ unique_together=set([('external_id', 'external_domain')]),
+ ),
+ ]
diff --git a/common/djangoapps/external_auth/models.py b/common/djangoapps/external_auth/models.py
index 65150dea9dd6..56307257efb5 100644
--- a/common/djangoapps/external_auth/models.py
+++ b/common/djangoapps/external_auth/models.py
@@ -15,6 +15,7 @@
class ExternalAuthMap(models.Model):
class Meta(object):
+ app_label = "external_auth"
unique_together = (('external_id', 'external_domain'), )
external_id = models.CharField(max_length=255, db_index=True)
diff --git a/common/djangoapps/external_auth/tests/test_shib.py b/common/djangoapps/external_auth/tests/test_shib.py
index 5d8553fa1a96..d77bd5ffb626 100644
--- a/common/djangoapps/external_auth/tests/test_shib.py
+++ b/common/djangoapps/external_auth/tests/test_shib.py
@@ -13,7 +13,7 @@
from django.test.utils import override_settings
from django.core.urlresolvers import reverse
from django.contrib.auth.models import AnonymousUser, User
-from django.utils.importlib import import_module
+from importlib import import_module
from edxmako.tests import mako_middleware_process_request
from external_auth.models import ExternalAuthMap
from external_auth.views import (
diff --git a/common/djangoapps/external_auth/views.py b/common/djangoapps/external_auth/views.py
index 7c66778d451f..4edea0973cb7 100644
--- a/common/djangoapps/external_auth/views.py
+++ b/common/djangoapps/external_auth/views.py
@@ -195,7 +195,7 @@ def _external_login_or_signup(request,
if settings.AUTHENTICATION_BACKENDS:
auth_backend = settings.AUTHENTICATION_BACKENDS[0]
else:
- auth_backend = 'django.contrib.auth.backends.ModelBackend'
+ auth_backend = 'ratelimitbackend.backends.RateLimitModelBackend'
user.backend = auth_backend
if settings.FEATURES['SQUELCH_PII_IN_LOGS']:
AUDIT_LOG.info(u'Linked user.id: {0} logged in via Shibboleth'.format(user.id))
@@ -204,7 +204,7 @@ def _external_login_or_signup(request,
elif uses_certs:
# Certificates are trusted, so just link the user and log the action
user = internal_user
- user.backend = 'django.contrib.auth.backends.ModelBackend'
+ user.backend = 'ratelimitbackend.backends.RateLimitModelBackend'
if settings.FEATURES['SQUELCH_PII_IN_LOGS']:
AUDIT_LOG.info(u'Linked user_id {0} logged in via SSL certificate'.format(user.id))
else:
@@ -923,7 +923,7 @@ def provider_identity(request):
response = render_to_response('identity.xml',
{'url': get_xrds_url('login', request)},
- mimetype='text/xml')
+ content_type='text/xml')
# custom XRDS header necessary for discovery process
response['X-XRDS-Location'] = get_xrds_url('identity', request)
@@ -937,7 +937,7 @@ def provider_xrds(request):
response = render_to_response('xrds.xml',
{'url': get_xrds_url('login', request)},
- mimetype='text/xml')
+ content_type='text/xml')
# custom XRDS header necessary for discovery process
response['X-XRDS-Location'] = get_xrds_url('xrds', request)
diff --git a/common/djangoapps/heartbeat/tests/test_heartbeat.py b/common/djangoapps/heartbeat/tests/test_heartbeat.py
index a879ebb404be..345ede2bb9d9 100644
--- a/common/djangoapps/heartbeat/tests/test_heartbeat.py
+++ b/common/djangoapps/heartbeat/tests/test_heartbeat.py
@@ -6,14 +6,13 @@
from django.core.urlresolvers import reverse
from django.db.utils import DatabaseError
from django.test.client import Client
-from django.test.testcases import TestCase
+from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from mock import patch
from xmodule.exceptions import HeartbeatFailure
-@patch('heartbeat.views.modulestore')
-class HeartbeatTestCase(TestCase):
+class HeartbeatTestCase(ModuleStoreTestCase):
"""
Test the heartbeat
"""
@@ -23,19 +22,20 @@ def setUp(self):
self.heartbeat_url = reverse('heartbeat')
return super(HeartbeatTestCase, self).setUp()
- def test_success(self, mock_modulestore): # pylint: disable=unused-argument
+ def test_success(self):
response = self.client.get(self.heartbeat_url)
self.assertEqual(response.status_code, 200)
- @patch('heartbeat.views.connection')
- def test_sql_fail(self, mock_connection, mock_modulestore): # pylint: disable=unused-argument
- mock_connection.cursor.return_value.execute.side_effect = DatabaseError
- response = self.client.get(self.heartbeat_url)
- self.assertEqual(response.status_code, 503)
- response_dict = json.loads(response.content)
- self.assertIn('SQL', response_dict)
-
- def test_modulestore_fail(self, mock_modulestore): # pylint: disable=unused-argument
- mock_modulestore.return_value.heartbeat.side_effect = HeartbeatFailure('msg', 'service')
- response = self.client.get(self.heartbeat_url)
- self.assertEqual(response.status_code, 503)
+ def test_sql_fail(self):
+ with patch('heartbeat.views.connection') as mock_connection:
+ mock_connection.cursor.return_value.execute.side_effect = DatabaseError
+ response = self.client.get(self.heartbeat_url)
+ self.assertEqual(response.status_code, 503)
+ response_dict = json.loads(response.content)
+ self.assertIn('SQL', response_dict)
+
+ def test_modulestore_fail(self):
+ with patch('heartbeat.views.modulestore') as mock_modulestore:
+ mock_modulestore.return_value.heartbeat.side_effect = HeartbeatFailure('msg', 'service')
+ response = self.client.get(self.heartbeat_url)
+ self.assertEqual(response.status_code, 503)
diff --git a/common/djangoapps/lang_pref/middleware.py b/common/djangoapps/lang_pref/middleware.py
index 1631a871a0fa..e41d7c902dde 100644
--- a/common/djangoapps/lang_pref/middleware.py
+++ b/common/djangoapps/lang_pref/middleware.py
@@ -4,9 +4,7 @@
from openedx.core.djangoapps.user_api.preferences.api import get_user_preference
from lang_pref import LANGUAGE_KEY
-# TODO PLAT-671 Import from Django 1.8
-# from django.utils.translation import LANGUAGE_SESSION_KEY
-from django_locale.trans_real import LANGUAGE_SESSION_KEY
+from django.utils.translation import LANGUAGE_SESSION_KEY
class LanguagePreferenceMiddleware(object):
diff --git a/common/djangoapps/lang_pref/tests/test_middleware.py b/common/djangoapps/lang_pref/tests/test_middleware.py
index 46934db6e17b..174a888c8d78 100644
--- a/common/djangoapps/lang_pref/tests/test_middleware.py
+++ b/common/djangoapps/lang_pref/tests/test_middleware.py
@@ -1,9 +1,7 @@
from django.test import TestCase
from django.test.client import RequestFactory
from django.contrib.sessions.middleware import SessionMiddleware
-# TODO PLAT-671 Import from Django 1.8
-# from django.utils.translation import LANGUAGE_SESSION_KEY
-from django_locale.trans_real import LANGUAGE_SESSION_KEY
+from django.utils.translation import LANGUAGE_SESSION_KEY
from lang_pref.middleware import LanguagePreferenceMiddleware
from openedx.core.djangoapps.user_api.preferences.api import set_user_preference
diff --git a/common/djangoapps/monkey_patch/__init__.py b/common/djangoapps/monkey_patch/__init__.py
index f718200a9802..6c420e94eb9f 100644
--- a/common/djangoapps/monkey_patch/__init__.py
+++ b/common/djangoapps/monkey_patch/__init__.py
@@ -13,7 +13,7 @@
That said, if you've decided you really need to monkey-patch the
platform (and you've convinced enough people that this is best
solution), kindly follow these guidelines:
- - Reference django_utils_translation.py for a sample implementation.
+ - Reference django_18_upgrade.py for a sample implementation.
- Name your module by replacing periods with underscores for the
module to be patched:
- patching 'django.utils.translation'
diff --git a/common/djangoapps/monkey_patch/django_utils_translation.py b/common/djangoapps/monkey_patch/django_utils_translation.py
deleted file mode 100644
index ae1940677cf1..000000000000
--- a/common/djangoapps/monkey_patch/django_utils_translation.py
+++ /dev/null
@@ -1,91 +0,0 @@
-"""
-Monkey-patch `django.utils.translation` to not dump header info
-
-Modify Django's translation module, such that the *gettext functions
-always return an empty string when attempting to translate an empty
-string. This overrides the default behavior [0]:
-> It is convention with GNU gettext to include meta-data as the
-> translation for the empty string.
-
-Affected Methods:
- - gettext
- - ugettext
-
-Note: The *ngettext and *pgettext functions are intentionally omitted,
-as they already behave as expected. The *_lazy functions are implicitly
-patched, as they wrap their nonlazy equivalents.
-
-Django's translation module contains a good deal of indirection. For us
-to patch the module with our own functions, we have to patch
-`django.utils.translation._trans`. This ensures that the patched
-behavior will still be used, even if code elsewhere caches a reference
-to one of the translation functions. If you're curious, check out
-Django's source code [1].
-
-[0] https://docs.python.org/2.7/library/gettext.html#the-gnutranslations-class
-[1] https://github.com/django/django/blob/1.4.8/django/utils/translation/__init__.py#L66
-"""
-from django.utils.translation import _trans as translation
-
-import monkey_patch
-
-ATTRIBUTES = [
- 'gettext',
- 'ugettext',
-]
-
-
-def is_patched():
- """
- Check if the translation module has been monkey-patched
- """
- patched = True
- for attribute in ATTRIBUTES:
- if not monkey_patch.is_patched(translation, attribute):
- patched = False
- break
- return patched
-
-
-def patch():
- """
- Monkey-patch the translation functions
-
- Affected Methods:
- - gettext
- - ugettext
- """
- def decorate(function, message_default=u''):
- """
- Decorate a translation function
-
- Default message is a unicode string, but gettext overrides this
- value to return a UTF8 string.
- """
- def dont_translate_empty_string(message):
- """
- Return the empty string when passed a falsey message
- """
- if message:
- message = function(message)
- else:
- message = message_default
- return message
- return dont_translate_empty_string
- gettext = decorate(translation.gettext, '')
- ugettext = decorate(translation.ugettext)
- monkey_patch.patch(translation, 'gettext', gettext)
- monkey_patch.patch(translation, 'ugettext', ugettext)
- return is_patched()
-
-
-def unpatch():
- """
- Un-monkey-patch the translation functions
- """
- was_patched = False
- for name in ATTRIBUTES:
- # was_patched must be the second half of the or-clause, to avoid
- # short-circuiting the expression
- was_patched = monkey_patch.unpatch(translation, name) or was_patched
- return was_patched
diff --git a/common/djangoapps/monkey_patch/tests/test_django_utils_translation.py b/common/djangoapps/monkey_patch/tests/test_django_utils_translation.py
deleted file mode 100644
index 109d2a40f088..000000000000
--- a/common/djangoapps/monkey_patch/tests/test_django_utils_translation.py
+++ /dev/null
@@ -1,337 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Test methods exposed in common/lib/monkey_patch/django_utils_translation.py
-
-Verify that the Django translation functions (gettext, ngettext,
-pgettext, ugettext, and derivatives) all return the correct values
-before, during, and after monkey-patching the django.utils.translation
-module.
-
-gettext, ngettext, pgettext, and ugettext must return a translation as
-output for nonempty input.
-
-ngettext, pgettext, npgettext, and ungettext must return an empty string
-for an empty string as input.
-
-gettext and ugettext will return translation headers, before and after
-patching.
-
-gettext and ugettext must return the empty string for any falsey input,
-while patched.
-
-*_noop must return the input text.
-
-*_lazy must return the same text as their non-lazy counterparts.
-"""
-# pylint: disable=invalid-name
-# Let names like `gettext_*` stay lowercase; makes matching easier.
-# pylint: disable=missing-docstring
-# All major functions are documented, the rest are self-evident shells.
-# pylint: disable=no-member
-# Pylint doesn't see our decorator `translate_with` add the `_` method.
-# pylint: disable=test-inherits-tests
-# This test file intentionally defines one base test class (UgettextTest) and
-# patches the gettext function under test for all subsequent inheriting classes.
-from unittest import TestCase
-
-from ddt import data
-from ddt import ddt
-from django.utils.translation import _trans
-from django.utils.translation import gettext
-from django.utils.translation import gettext_lazy
-from django.utils.translation import gettext_noop
-from django.utils.translation import ngettext
-from django.utils.translation import ngettext_lazy
-from django.utils.translation import npgettext
-from django.utils.translation import npgettext_lazy
-from django.utils.translation import pgettext
-from django.utils.translation import pgettext_lazy
-from django.utils.translation import ugettext
-from django.utils.translation import ugettext_lazy
-from django.utils.translation import ugettext_noop
-from django.utils.translation import ungettext
-from django.utils.translation import ungettext_lazy
-
-from monkey_patch.django_utils_translation import ATTRIBUTES as attributes_patched
-from monkey_patch.django_utils_translation import is_patched
-from monkey_patch.django_utils_translation import patch
-from monkey_patch.django_utils_translation import unpatch
-
-# Note: The commented-out function names are explicitly excluded, as
-# they are not attributes of `django.utils.translation._trans`.
-# https://github.com/django/django/blob/1.4.8/django/utils/translation/__init__.py#L69
-attributes_not_patched = [
- 'gettext_noop',
- 'ngettext',
- 'npgettext',
- 'pgettext',
- 'ungettext',
- # 'gettext_lazy',
- # 'ngettext_lazy',
- # 'npgettext_lazy',
- # 'pgettext_lazy',
- # 'ugettext_lazy',
- # 'ugettext_noop',
- # 'ungettext_lazy',
-]
-
-
-class MonkeyPatchTest(TestCase):
- def setUp(self):
- """
- Remember the current state, then reset
- """
- super(MonkeyPatchTest, self).setUp()
- self.was_patched = unpatch()
- self.unpatch_all()
- self.addCleanup(self.cleanup)
-
- def cleanup(self):
- """
- Revert translation functions to previous state
-
- Since the end state varies, we always unpatch to remove any
- changes, then repatch again iff the module was already
- patched when the test began.
- """
- self.unpatch_all()
- if self.was_patched:
- patch()
-
- def unpatch_all(self):
- """
- Unpatch the module recursively
- """
- while is_patched():
- unpatch()
-
-
-@ddt
-class PatchTest(MonkeyPatchTest):
- """
- Verify monkey-patching and un-monkey-patching
- """
- @data(*attributes_not_patched)
- def test_not_patch(self, attribute_name):
- """
- Test that functions are not patched unintentionally
- """
- self.unpatch_all()
- old_attribute = getattr(_trans, attribute_name)
- patch()
- new_attribute = getattr(_trans, attribute_name)
- self.assertIs(old_attribute, new_attribute)
-
- @data(*attributes_patched)
- def test_unpatch(self, attribute):
- """
- Test that unpatch gracefully handles unpatched functions
- """
- patch()
- self.assertTrue(is_patched())
- self.unpatch_all()
- self.assertFalse(is_patched())
- old_attribute = getattr(_trans, attribute)
- self.unpatch_all()
- new_attribute = getattr(_trans, attribute)
- self.assertIs(old_attribute, new_attribute)
- self.assertFalse(is_patched())
-
- @data(*attributes_patched)
- def test_patch_attributes(self, attribute):
- """
- Test that patch changes the attribute
- """
- self.unpatch_all()
- self.assertFalse(is_patched())
- old_attribute = getattr(_trans, attribute)
- patch()
- new_attribute = getattr(_trans, attribute)
- self.assertIsNot(old_attribute, new_attribute)
- self.assertTrue(is_patched())
- old_attribute = getattr(_trans, attribute)
- patch()
- new_attribute = getattr(_trans, attribute)
- self.assertIsNot(old_attribute, new_attribute)
- self.assertTrue(is_patched())
-
-
-def translate_with(function):
- """
- Decorate a class by setting its `_` translation function
- """
- def decorate(cls):
- def _(self, *args):
- # pylint: disable=unused-argument
- return function(*args)
- cls._ = _
- return cls
- return decorate
-
-
-@translate_with(ugettext)
-class UgettextTest(MonkeyPatchTest):
- """
- Test a Django translation function
-
- Here we consider `ugettext` to be the base/default case. All other
- translation functions extend, as needed.
- """
- is_unicode = True
- needs_patched = True
- header = 'Project-Id-Version: '
-
- def setUp(self):
- """
- Restore translation text and functions
- """
- super(UgettextTest, self).setUp()
- if self.is_unicode:
- self.empty = u''
- self.nonempty = u'(╯°□°)╯︵ ┻━┻'
- else:
- self.empty = ''
- self.nonempty = 'Hey! Where are you?!'
-
- def assert_translations(self):
- """
- Assert that the empty and nonempty translations are correct
-
- The `empty = empty[:]` syntax is intentional. Since subclasses
- may implement a lazy translation, we must perform a "string
- operation" to coerce it to a string value. We don't use `str` or
- `unicode` because we also assert the string type.
- """
- empty, nonempty = self.get_translations()
- empty = empty[:]
- nonempty = nonempty[:]
- if self.is_unicode:
- self.assertTrue(isinstance(empty, unicode))
- self.assertTrue(isinstance(nonempty, unicode))
- else:
- self.assertTrue(isinstance(empty, str))
- self.assertTrue(isinstance(nonempty, str))
- if self.needs_patched and not is_patched():
- self.assertIn(self.header, empty)
- else:
- self.assertNotIn(self.header, empty)
- self.assertNotIn(self.header, nonempty)
-
- def get_translations(self):
- """
- Translate the empty and nonempty strings, per `self._`
- """
- empty = self._(self.empty)
- nonempty = self._(self.nonempty)
- return (empty, nonempty)
-
- def test_patch(self):
- """
- Test that `self._` correctly translates text before, during, and
- after being monkey-patched.
- """
- self.assert_translations()
- was_successful = patch()
- self.assertTrue(was_successful)
- self.assert_translations()
- was_successful = unpatch()
- self.assertTrue(was_successful)
- self.assert_translations()
-
-
-@translate_with(gettext)
-class GettextTest(UgettextTest):
- is_unicode = False
-
-
-@translate_with(pgettext)
-class PgettextTest(UgettextTest):
- needs_patched = False
- l18n_context = 'monkey_patch'
-
- def get_translations(self):
- empty = self._(self.l18n_context, self.empty)
- nonempty = self._(self.l18n_context, self.nonempty)
- return (empty, nonempty)
-
-
-@translate_with(ngettext)
-class NgettextTest(GettextTest):
- number = 1
- needs_patched = False
-
- def get_translations(self):
- empty = self._(self.empty, self.empty, self.number)
- nonempty = self._(self.nonempty, self.nonempty, self.number)
- return (empty, nonempty)
-
-
-@translate_with(npgettext)
-class NpgettextTest(PgettextTest):
- number = 1
-
- def get_translations(self):
- empty = self._(self.l18n_context, self.empty, self.empty, self.number)
- nonempty = self._(self.l18n_context, self.nonempty, self.nonempty, self.number)
- return (empty, nonempty)
-
-
-class NpgettextPluralTest(NpgettextTest):
- number = 2
-
-
-class NgettextPluralTest(NgettextTest):
- number = 2
-
-
-@translate_with(gettext_noop)
-class GettextNoopTest(GettextTest):
- needs_patched = False
-
-
-@translate_with(ugettext_noop)
-class UgettextNoopTest(UgettextTest):
- needs_patched = False
-
-
-@translate_with(ungettext)
-class UngettextTest(NgettextTest):
- is_unicode = True
-
-
-class UngettextPluralTest(UngettextTest):
- number = 2
-
-
-@translate_with(gettext_lazy)
-class GettextLazyTest(GettextTest):
- pass
-
-
-@translate_with(ugettext_lazy)
-class UgettextLazyTest(UgettextTest):
- pass
-
-
-@translate_with(pgettext_lazy)
-class PgettextLazyTest(PgettextTest):
- pass
-
-
-@translate_with(ngettext_lazy)
-class NgettextLazyTest(NgettextTest):
- pass
-
-
-@translate_with(npgettext_lazy)
-class NpgettextLazyTest(NpgettextTest):
- pass
-
-
-class NpgettextLazyPluralTest(NpgettextLazyTest):
- number = 2
-
-
-@translate_with(ungettext_lazy)
-class UngettextLazyTest(UngettextTest):
- pass
diff --git a/common/djangoapps/monkey_patch/third_party_auth.py b/common/djangoapps/monkey_patch/third_party_auth.py
new file mode 100644
index 000000000000..a78f832907e7
--- /dev/null
+++ b/common/djangoapps/monkey_patch/third_party_auth.py
@@ -0,0 +1,38 @@
+"""
+Monkey patch implementation for a python_social_auth Django ORM method that is not Django 1.8-compatible.
+Remove once the module fully supports Django 1.8!
+"""
+
+from django.db import transaction
+from social.storage.django_orm import DjangoUserMixin
+from social.apps.django_app.default.models import (
+ UserSocialAuth, Nonce, Association, Code
+)
+
+
+def patch():
+ """
+ Monkey-patch the DjangoUserMixin class.
+ """
+ def create_social_auth_wrapper(wrapped_func):
+ # pylint: disable=missing-docstring
+ wrapped_func = wrapped_func.__func__
+
+ def _create_social_auth(*args, **kwargs):
+ # The entire reason for this monkey-patch is to wrap the create_social_auth call
+ # in an atomic transaction. The call can sometime raise an IntegrityError, which is
+ # caught and dealt with by python_social_auth - but not inside of an atomic transaction.
+ # In Django 1.8, unless the exception is raised in an atomic transaction, the transaction
+ # becomes unusable after the IntegrityError exception is raised.
+ with transaction.atomic():
+ return wrapped_func(*args, **kwargs)
+ return classmethod(_create_social_auth)
+
+ DjangoUserMixin.create_social_auth = create_social_auth_wrapper(DjangoUserMixin.create_social_auth)
+
+ # Monkey-patch some social auth models' Meta class to squelch Django19 warnings.
+ # pylint: disable=protected-access
+ UserSocialAuth._meta.app_label = "default"
+ Nonce._meta.app_label = "default"
+ Association._meta.app_label = "default"
+ Code._meta.app_label = "default"
diff --git a/common/djangoapps/performance/views/__init__.py b/common/djangoapps/performance/views/__init__.py
index 805e2d96cbd8..78fe4e35cff9 100644
--- a/common/djangoapps/performance/views/__init__.py
+++ b/common/djangoapps/performance/views/__init__.py
@@ -19,9 +19,11 @@ def _get_request_header(request, header_name, default=''):
def _get_request_value(request, value_name, default=''):
- """Helper method to get header values from a request's REQUEST dict, if present."""
- if request is not None and hasattr(request, 'REQUEST') and value_name in request.REQUEST:
- return request.REQUEST[value_name]
+ """Helper method to get header values from a request's GET or POST dicts, if present."""
+ if request is not None and hasattr(request, 'GET') and value_name in request.GET:
+ return request.GET[value_name]
+ elif request is not None and hasattr(request, 'POST') and value_name in request.POST:
+ return request.POST[value_name]
else:
return default
diff --git a/common/djangoapps/pipeline_mako/templates/static_content.html b/common/djangoapps/pipeline_mako/templates/static_content.html
index 6e169f2ed32c..88686c4e079c 100644
--- a/common/djangoapps/pipeline_mako/templates/static_content.html
+++ b/common/djangoapps/pipeline_mako/templates/static_content.html
@@ -51,8 +51,11 @@
%>%def>
<%def name="include(path)"><%
-from django.template.loaders.filesystem import _loader
-source, template_path = _loader.load_template_source(path)
+from django.conf import settings
+from django.template.engine import Engine
+from django.template.loaders.filesystem import Loader
+engine = Engine(dirs=settings.DEFAULT_TEMPLATE_ENGINE['DIRS'])
+source, template_path = Loader(engine).load_template_source(path)
%>${source}%def>
<%def name="require_module(module_name, class_name)">
diff --git a/common/djangoapps/reverification/migrations/0001_initial.py b/common/djangoapps/reverification/migrations/0001_initial.py
deleted file mode 100644
index b68f4118930c..000000000000
--- a/common/djangoapps/reverification/migrations/0001_initial.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'MidcourseReverificationWindow'
- db.create_table('reverification_midcoursereverificationwindow', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('course_id', self.gf('django.db.models.fields.CharField')(max_length=255, db_index=True)),
- ('start_date', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True, blank=True)),
- ('end_date', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True, blank=True)),
- ))
- db.send_create_signal('reverification', ['MidcourseReverificationWindow'])
-
-
- def backwards(self, orm):
- # Deleting model 'MidcourseReverificationWindow'
- db.delete_table('reverification_midcoursereverificationwindow')
-
-
- models = {
- 'reverification.midcoursereverificationwindow': {
- 'Meta': {'object_name': 'MidcourseReverificationWindow'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'end_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'start_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True', 'blank': 'True'})
- }
- }
-
- complete_apps = ['reverification']
diff --git a/common/djangoapps/reverification/migrations/0002_auto__del_midcoursereverificationwindow.py b/common/djangoapps/reverification/migrations/0002_auto__del_midcoursereverificationwindow.py
deleted file mode 100644
index cad4511ed99d..000000000000
--- a/common/djangoapps/reverification/migrations/0002_auto__del_midcoursereverificationwindow.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# -*- coding: utf-8 -*-
-from south.utils import datetime_utils as datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
-
- def forwards(self, orm):
- # Deleting model 'MidcourseReverificationWindow'
- db.delete_table('reverification_midcoursereverificationwindow')
-
-
- def backwards(self, orm):
- # Adding model 'MidcourseReverificationWindow'
- db.create_table('reverification_midcoursereverificationwindow', (
- ('course_id', self.gf('django.db.models.fields.CharField')(max_length=255, db_index=True)),
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('end_date', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True, blank=True)),
- ('start_date', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True, blank=True)),
- ))
- db.send_create_signal('reverification', ['MidcourseReverificationWindow'])
-
-
- models = {
-
- }
-
- complete_apps = ['reverification']
diff --git a/common/djangoapps/service_status/views.py b/common/djangoapps/service_status/views.py
index 7233cbdbdad5..22028d545fcb 100644
--- a/common/djangoapps/service_status/views.py
+++ b/common/djangoapps/service_status/views.py
@@ -28,7 +28,7 @@ def celery_status(_):
"""
stats = celery.control.inspect().stats() or {}
return HttpResponse(json.dumps(stats, indent=4),
- mimetype="application/json")
+ content_type="application/json")
@dog_stats_api.timed('status.service.celery.ping')
@@ -56,4 +56,4 @@ def celery_ping(_):
}
return HttpResponse(json.dumps(output, indent=4),
- mimetype="application/json")
+ content_type="application/json")
diff --git a/common/djangoapps/static_replace/management/commands/clear_collectstatic_cache.py b/common/djangoapps/static_replace/management/commands/clear_collectstatic_cache.py
index 076204c31e97..02e0c2b7b3a9 100644
--- a/common/djangoapps/static_replace/management/commands/clear_collectstatic_cache.py
+++ b/common/djangoapps/static_replace/management/commands/clear_collectstatic_cache.py
@@ -3,12 +3,12 @@
###
from django.core.management.base import NoArgsCommand
-from django.core.cache import get_cache
+from django.core.cache import caches
class Command(NoArgsCommand):
help = 'Import the specified data directory into the default ModuleStore'
def handle_noargs(self, **options):
- staticfiles_cache = get_cache('staticfiles')
+ staticfiles_cache = caches['staticfiles']
staticfiles_cache.clear()
diff --git a/common/djangoapps/status/migrations/0001_initial.py b/common/djangoapps/status/migrations/0001_initial.py
index 48a4d1eeff0f..7eefeb320c2c 100644
--- a/common/djangoapps/status/migrations/0001_initial.py
+++ b/common/djangoapps/status/migrations/0001_initial.py
@@ -1,93 +1,44 @@
# -*- coding: utf-8 -*-
-from south.utils import datetime_utils as datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'GlobalStatusMessage'
- db.create_table('status_globalstatusmessage', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('change_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
- ('changed_by', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, on_delete=models.PROTECT)),
- ('enabled', self.gf('django.db.models.fields.BooleanField')(default=False)),
- ('message', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
- ))
- db.send_create_signal('status', ['GlobalStatusMessage'])
-
- # Adding model 'CourseMessage'
- db.create_table('status_coursemessage', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('global_message', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['status.GlobalStatusMessage'])),
- ('course_key', self.gf('xmodule_django.models.CourseKeyField')(db_index=True, max_length=255, blank=True)),
- ('message', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
- ))
- db.send_create_signal('status', ['CourseMessage'])
-
-
- def backwards(self, orm):
- # Deleting model 'GlobalStatusMessage'
- db.delete_table('status_globalstatusmessage')
-
- # Deleting model 'CourseMessage'
- db.delete_table('status_coursemessage')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'status.coursemessage': {
- 'Meta': {'object_name': 'CourseMessage'},
- 'course_key': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'global_message': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['status.GlobalStatusMessage']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'message': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
- },
- 'status.globalstatusmessage': {
- 'Meta': {'ordering': "('-change_date',)", 'object_name': 'GlobalStatusMessage'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'message': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
- }
- }
-
- complete_apps = ['status']
\ No newline at end of file
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+from django.conf import settings
+import xmodule_django.models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='CourseMessage',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('course_key', xmodule_django.models.CourseKeyField(db_index=True, max_length=255, blank=True)),
+ ('message', models.TextField(null=True, blank=True)),
+ ],
+ ),
+ migrations.CreateModel(
+ name='GlobalStatusMessage',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('change_date', models.DateTimeField(auto_now_add=True, verbose_name='Change date')),
+ ('enabled', models.BooleanField(default=False, verbose_name='Enabled')),
+ ('message', models.TextField(null=True, blank=True)),
+ ('changed_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, editable=False, to=settings.AUTH_USER_MODEL, null=True, verbose_name='Changed by')),
+ ],
+ options={
+ 'ordering': ('-change_date',),
+ 'abstract': False,
+ },
+ ),
+ migrations.AddField(
+ model_name='coursemessage',
+ name='global_message',
+ field=models.ForeignKey(to='status.GlobalStatusMessage'),
+ ),
+ ]
diff --git a/common/djangoapps/student/admin.py b/common/djangoapps/student/admin.py
index 0f2ad68d279a..3b84627837b1 100644
--- a/common/djangoapps/student/admin.py
+++ b/common/djangoapps/student/admin.py
@@ -19,6 +19,7 @@ class CourseAccessRoleForm(forms.ModelForm):
class Meta(object):
model = CourseAccessRole
+ fields = '__all__'
email = forms.EmailField(required=True)
COURSE_ACCESS_ROLES = [(role_name, role_name) for role_name in REGISTERED_ACCESS_ROLES.keys()]
diff --git a/common/djangoapps/student/forms.py b/common/djangoapps/student/forms.py
index 3b4ff7c95db1..bf85d55a2179 100644
--- a/common/djangoapps/student/forms.py
+++ b/common/djangoapps/student/forms.py
@@ -2,10 +2,11 @@
Utility functions for validating forms
"""
from django import forms
+from django.forms import widgets
from django.core.exceptions import ValidationError
from django.contrib.auth.models import User
from django.contrib.auth.forms import PasswordResetForm
-from django.contrib.auth.hashers import UNUSABLE_PASSWORD
+from django.contrib.auth.hashers import UNUSABLE_PASSWORD_PREFIX
from django.contrib.auth.tokens import default_token_generator
from django.utils.http import int_to_base36
@@ -22,6 +23,13 @@
class PasswordResetFormNoActive(PasswordResetForm):
+ error_messages = {
+ 'unknown': _("That e-mail address doesn't have an associated "
+ "user account. Are you sure you've registered?"),
+ 'unusable': _("The user account associated with this e-mail "
+ "address cannot reset the password."),
+ }
+
def clean_email(self):
"""
This is a literal copy from Django 1.4.5's django.contrib.auth.forms.PasswordResetForm
@@ -33,7 +41,7 @@ def clean_email(self):
self.users_cache = User.objects.filter(email__iexact=email)
if not len(self.users_cache):
raise forms.ValidationError(self.error_messages['unknown'])
- if any((user.password == UNUSABLE_PASSWORD)
+ if any((user.password.startswith(UNUSABLE_PASSWORD_PREFIX))
for user in self.users_cache):
raise forms.ValidationError(self.error_messages['unusable'])
return email
@@ -79,16 +87,20 @@ def save(
send_mail(subject, email, from_email, [user.email])
+class TrueCheckbox(widgets.CheckboxInput):
+ """
+ A checkbox widget that only accepts "true" (case-insensitive) as true.
+ """
+ def value_from_datadict(self, data, files, name):
+ value = data.get(name, '')
+ return value.lower() == 'true'
+
+
class TrueField(forms.BooleanField):
"""
A boolean field that only accepts "true" (case-insensitive) as true
"""
- def to_python(self, value):
- # CheckboxInput converts string to bool by case-insensitive match to "true" or "false"
- if value is True:
- return value
- else:
- return None
+ widget = TrueCheckbox
_USERNAME_TOO_SHORT_MSG = _("Username must be minimum of two characters long")
diff --git a/common/djangoapps/student/helpers.py b/common/djangoapps/student/helpers.py
index e285e3dcf193..4e882e5dcca4 100644
--- a/common/djangoapps/student/helpers.py
+++ b/common/djangoapps/student/helpers.py
@@ -6,7 +6,7 @@
from django.core.urlresolvers import reverse, NoReverseMatch
import third_party_auth
-from verify_student.models import VerificationDeadline, SoftwareSecurePhotoVerification # pylint: disable=import-error
+from lms.djangoapps.verify_student.models import VerificationDeadline, SoftwareSecurePhotoVerification
from course_modes.models import CourseMode
diff --git a/common/djangoapps/student/management/commands/transfer_students.py b/common/djangoapps/student/management/commands/transfer_students.py
index 835d954071bb..79892cd5a657 100644
--- a/common/djangoapps/student/management/commands/transfer_students.py
+++ b/common/djangoapps/student/management/commands/transfer_students.py
@@ -52,7 +52,7 @@ class Command(TrackedCommand):
help="If True, try to transfer certificate items to the new course.")
)
- @transaction.commit_manually
+ @transaction.atomic
def handle(self, *args, **options): # pylint: disable=unused-argument
source_key = CourseKey.from_string(options.get('source_course', ''))
dest_keys = []
@@ -72,7 +72,7 @@ def handle(self, *args, **options): # pylint: disable=unused-argument
)
for user in source_students:
- with transaction.commit_on_success():
+ with transaction.atomic():
print "Moving {}.".format(user.username)
# Find the old enrollment.
enrollment = CourseEnrollment.objects.get(
diff --git a/common/djangoapps/student/migrations/0001_initial.py b/common/djangoapps/student/migrations/0001_initial.py
index d5766ca823a7..9bb87bae63ea 100644
--- a/common/djangoapps/student/migrations/0001_initial.py
+++ b/common/djangoapps/student/migrations/0001_initial.py
@@ -1,120 +1,290 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+from django.db import migrations, models
+import django.utils.timezone
+import django_countries.fields
+import django.db.models.deletion
+from django.conf import settings
+import xmodule_django.models
-class Migration(SchemaMigration):
- def forwards(self, orm):
+class Migration(migrations.Migration):
- # Adding model 'UserProfile'
- db.create_table('auth_userprofile', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], unique=True)),
- ('name', self.gf('django.db.models.fields.TextField')(blank=True)),
- ('language', self.gf('django.db.models.fields.TextField')(blank=True)),
- ('location', self.gf('django.db.models.fields.TextField')(blank=True)),
- ('meta', self.gf('django.db.models.fields.TextField')(blank=True)),
- ('courseware', self.gf('django.db.models.fields.TextField')(default='course.xml', blank=True)),
- ))
- db.send_create_signal('student', ['UserProfile'])
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ]
- # Adding model 'Registration'
- db.create_table('auth_registration', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], unique=True)),
- ('activation_key', self.gf('django.db.models.fields.CharField')(unique=True, max_length=32, db_index=True)),
- ))
- db.send_create_signal('student', ['Registration'])
-
- def backwards(self, orm):
-
- # Deleting model 'UserProfile'
- db.delete_table('auth_userprofile')
-
- # Deleting model 'Registration'
- db.delete_table('auth_registration')
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),
- 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'consecutive_days_visit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'blank': 'True'}),
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'display_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
- 'email_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'ignored_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'interesting_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'new_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),
- 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
- 'seen_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'show_country': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'w'", 'max_length': '2'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
- 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'courseware': ('django.db.models.fields.TextField', [], {'default': "'course.xml'", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'location': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- }
- }
-
- complete_apps = ['student']
+ operations = [
+ migrations.CreateModel(
+ name='AnonymousUserId',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('anonymous_user_id', models.CharField(unique=True, max_length=32)),
+ ('course_id', xmodule_django.models.CourseKeyField(db_index=True, max_length=255, blank=True)),
+ ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
+ ],
+ ),
+ migrations.CreateModel(
+ name='CourseAccessRole',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('org', models.CharField(db_index=True, max_length=64, blank=True)),
+ ('course_id', xmodule_django.models.CourseKeyField(db_index=True, max_length=255, blank=True)),
+ ('role', models.CharField(max_length=64, db_index=True)),
+ ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
+ ],
+ ),
+ migrations.CreateModel(
+ name='CourseEnrollment',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('course_id', xmodule_django.models.CourseKeyField(max_length=255, db_index=True)),
+ ('created', models.DateTimeField(db_index=True, auto_now_add=True, null=True)),
+ ('is_active', models.BooleanField(default=True)),
+ ('mode', models.CharField(default=b'honor', max_length=100)),
+ ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
+ ],
+ options={
+ 'ordering': ('user', 'course_id'),
+ },
+ ),
+ migrations.CreateModel(
+ name='CourseEnrollmentAllowed',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('email', models.CharField(max_length=255, db_index=True)),
+ ('course_id', xmodule_django.models.CourseKeyField(max_length=255, db_index=True)),
+ ('auto_enroll', models.BooleanField(default=0)),
+ ('created', models.DateTimeField(db_index=True, auto_now_add=True, null=True)),
+ ],
+ ),
+ migrations.CreateModel(
+ name='CourseEnrollmentAttribute',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('namespace', models.CharField(help_text='Namespace of enrollment attribute', max_length=255)),
+ ('name', models.CharField(help_text='Name of the enrollment attribute', max_length=255)),
+ ('value', models.CharField(help_text='Value of the enrollment attribute', max_length=255)),
+ ('enrollment', models.ForeignKey(related_name='attributes', to='student.CourseEnrollment')),
+ ],
+ ),
+ migrations.CreateModel(
+ name='DashboardConfiguration',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('change_date', models.DateTimeField(auto_now_add=True, verbose_name='Change date')),
+ ('enabled', models.BooleanField(default=False, verbose_name='Enabled')),
+ ('recent_enrollment_time_delta', models.PositiveIntegerField(default=0, help_text=b"The number of seconds in which a new enrollment is considered 'recent'. Used to display notifications.")),
+ ('changed_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, editable=False, to=settings.AUTH_USER_MODEL, null=True, verbose_name='Changed by')),
+ ],
+ options={
+ 'ordering': ('-change_date',),
+ 'abstract': False,
+ },
+ ),
+ migrations.CreateModel(
+ name='EnrollmentRefundConfiguration',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('change_date', models.DateTimeField(auto_now_add=True, verbose_name='Change date')),
+ ('enabled', models.BooleanField(default=False, verbose_name='Enabled')),
+ ('refund_window_microseconds', models.BigIntegerField(default=1209600000000, help_text='The window of time after enrolling during which users can be granted a refund, represented in microseconds. The default is 14 days.')),
+ ('changed_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, editable=False, to=settings.AUTH_USER_MODEL, null=True, verbose_name='Changed by')),
+ ],
+ options={
+ 'ordering': ('-change_date',),
+ 'abstract': False,
+ },
+ ),
+ migrations.CreateModel(
+ name='EntranceExamConfiguration',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('course_id', xmodule_django.models.CourseKeyField(max_length=255, db_index=True)),
+ ('created', models.DateTimeField(db_index=True, auto_now_add=True, null=True)),
+ ('updated', models.DateTimeField(auto_now=True, db_index=True)),
+ ('skip_entrance_exam', models.BooleanField(default=True)),
+ ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
+ ],
+ ),
+ migrations.CreateModel(
+ name='HistoricalCourseEnrollment',
+ fields=[
+ ('id', models.IntegerField(verbose_name='ID', db_index=True, auto_created=True, blank=True)),
+ ('course_id', xmodule_django.models.CourseKeyField(max_length=255, db_index=True)),
+ ('created', models.DateTimeField(db_index=True, null=True, editable=False, blank=True)),
+ ('is_active', models.BooleanField(default=True)),
+ ('mode', models.CharField(default=b'honor', max_length=100)),
+ ('history_id', models.AutoField(serialize=False, primary_key=True)),
+ ('history_date', models.DateTimeField()),
+ ('history_type', models.CharField(max_length=1, choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')])),
+ ('history_user', models.ForeignKey(related_name='+', on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, null=True)),
+ ('user', models.ForeignKey(related_name='+', on_delete=django.db.models.deletion.DO_NOTHING, db_constraint=False, blank=True, to=settings.AUTH_USER_MODEL, null=True)),
+ ],
+ options={
+ 'ordering': ('-history_date', '-history_id'),
+ 'get_latest_by': 'history_date',
+ 'verbose_name': 'historical course enrollment',
+ },
+ ),
+ migrations.CreateModel(
+ name='LanguageProficiency',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('code', models.CharField(help_text='The ISO 639-1 language code for this language.', max_length=16, choices=[['aa', 'Afar'], ['ab', 'Abkhazian'], ['af', 'Afrikaans'], ['ak', 'Akan'], ['sq', 'Albanian'], ['am', 'Amharic'], ['ar', 'Arabic'], ['an', 'Aragonese'], ['hy', 'Armenian'], ['as', 'Assamese'], ['av', 'Avaric'], ['ae', 'Avestan'], ['ay', 'Aymara'], ['az', 'Azerbaijani'], ['ba', 'Bashkir'], ['bm', 'Bambara'], ['eu', 'Basque'], ['be', 'Belarusian'], ['bn', 'Bengali'], ['bh', 'Bihari languages'], ['bi', 'Bislama'], ['bs', 'Bosnian'], ['br', 'Breton'], ['bg', 'Bulgarian'], ['my', 'Burmese'], ['ca', 'Catalan'], ['ch', 'Chamorro'], ['ce', 'Chechen'], ['zh', 'Chinese'], ['zh_HANS', 'Simplified Chinese'], ['zh_HANT', 'Traditional Chinese'], ['cu', 'Church Slavic'], ['cv', 'Chuvash'], ['kw', 'Cornish'], ['co', 'Corsican'], ['cr', 'Cree'], ['cs', 'Czech'], ['da', 'Danish'], ['dv', 'Divehi'], ['nl', 'Dutch'], ['dz', 'Dzongkha'], ['en', 'English'], ['eo', 'Esperanto'], ['et', 'Estonian'], ['ee', 'Ewe'], ['fo', 'Faroese'], ['fj', 'Fijian'], ['fi', 'Finnish'], ['fr', 'French'], ['fy', 'Western Frisian'], ['ff', 'Fulah'], ['ka', 'Georgian'], ['de', 'German'], ['gd', 'Gaelic'], ['ga', 'Irish'], ['gl', 'Galician'], ['gv', 'Manx'], ['el', 'Greek'], ['gn', 'Guarani'], ['gu', 'Gujarati'], ['ht', 'Haitian'], ['ha', 'Hausa'], ['he', 'Hebrew'], ['hz', 'Herero'], ['hi', 'Hindi'], ['ho', 'Hiri Motu'], ['hr', 'Croatian'], ['hu', 'Hungarian'], ['ig', 'Igbo'], ['is', 'Icelandic'], ['io', 'Ido'], ['ii', 'Sichuan Yi'], ['iu', 'Inuktitut'], ['ie', 'Interlingue'], ['ia', 'Interlingua'], ['id', 'Indonesian'], ['ik', 'Inupiaq'], ['it', 'Italian'], ['jv', 'Javanese'], ['ja', 'Japanese'], ['kl', 'Kalaallisut'], ['kn', 'Kannada'], ['ks', 'Kashmiri'], ['kr', 'Kanuri'], ['kk', 'Kazakh'], ['km', 'Central Khmer'], ['ki', 'Kikuyu'], ['rw', 'Kinyarwanda'], ['ky', 'Kirghiz'], ['kv', 'Komi'], ['kg', 'Kongo'], ['ko', 'Korean'], ['kj', 'Kuanyama'], ['ku', 'Kurdish'], ['lo', 'Lao'], ['la', 'Latin'], ['lv', 'Latvian'], ['li', 'Limburgan'], ['ln', 'Lingala'], ['lt', 'Lithuanian'], ['lb', 'Luxembourgish'], ['lu', 'Luba-Katanga'], ['lg', 'Ganda'], ['mk', 'Macedonian'], ['mh', 'Marshallese'], ['ml', 'Malayalam'], ['mi', 'Maori'], ['mr', 'Marathi'], ['ms', 'Malay'], ['mg', 'Malagasy'], ['mt', 'Maltese'], ['mn', 'Mongolian'], ['na', 'Nauru'], ['nv', 'Navajo'], ['nr', 'Ndebele, South'], ['nd', 'Ndebele, North'], ['ng', 'Ndonga'], ['ne', 'Nepali'], ['nn', 'Norwegian Nynorsk'], ['nb', 'Bokm\xe5l, Norwegian'], ['no', 'Norwegian'], ['ny', 'Chichewa'], ['oc', 'Occitan'], ['oj', 'Ojibwa'], ['or', 'Oriya'], ['om', 'Oromo'], ['os', 'Ossetian'], ['pa', 'Panjabi'], ['fa', 'Persian'], ['pi', 'Pali'], ['pl', 'Polish'], ['pt', 'Portuguese'], ['ps', 'Pushto'], ['qu', 'Quechua'], ['rm', 'Romansh'], ['ro', 'Romanian'], ['rn', 'Rundi'], ['ru', 'Russian'], ['sg', 'Sango'], ['sa', 'Sanskrit'], ['si', 'Sinhala'], ['sk', 'Slovak'], ['sl', 'Slovenian'], ['se', 'Northern Sami'], ['sm', 'Samoan'], ['sn', 'Shona'], ['sd', 'Sindhi'], ['so', 'Somali'], ['st', 'Sotho, Southern'], ['es', 'Spanish'], ['sc', 'Sardinian'], ['sr', 'Serbian'], ['ss', 'Swati'], ['su', 'Sundanese'], ['sw', 'Swahili'], ['sv', 'Swedish'], ['ty', 'Tahitian'], ['ta', 'Tamil'], ['tt', 'Tatar'], ['te', 'Telugu'], ['tg', 'Tajik'], ['tl', 'Tagalog'], ['th', 'Thai'], ['bo', 'Tibetan'], ['ti', 'Tigrinya'], ['to', 'Tonga (Tonga Islands)'], ['tn', 'Tswana'], ['ts', 'Tsonga'], ['tk', 'Turkmen'], ['tr', 'Turkish'], ['tw', 'Twi'], ['ug', 'Uighur'], ['uk', 'Ukrainian'], ['ur', 'Urdu'], ['uz', 'Uzbek'], ['ve', 'Venda'], ['vi', 'Vietnamese'], ['vo', 'Volap\xfck'], ['cy', 'Welsh'], ['wa', 'Walloon'], ['wo', 'Wolof'], ['xh', 'Xhosa'], ['yi', 'Yiddish'], ['yo', 'Yoruba'], ['za', 'Zhuang'], ['zu', 'Zulu']])),
+ ],
+ ),
+ migrations.CreateModel(
+ name='LinkedInAddToProfileConfiguration',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('change_date', models.DateTimeField(auto_now_add=True, verbose_name='Change date')),
+ ('enabled', models.BooleanField(default=False, verbose_name='Enabled')),
+ ('company_identifier', models.TextField(help_text='The company identifier for the LinkedIn Add-to-Profile button e.g 0_0dPSPyS070e0HsE9HNz_13_d11_')),
+ ('dashboard_tracking_code', models.TextField(default=b'', blank=True)),
+ ('trk_partner_name', models.CharField(default=b'', help_text="Short identifier for the LinkedIn partner used in the tracking code. (Example: 'edx') If no value is provided, tracking codes will not be sent to LinkedIn.", max_length=10, blank=True)),
+ ('changed_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, editable=False, to=settings.AUTH_USER_MODEL, null=True, verbose_name='Changed by')),
+ ],
+ options={
+ 'ordering': ('-change_date',),
+ 'abstract': False,
+ },
+ ),
+ migrations.CreateModel(
+ name='LoginFailures',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('failure_count', models.IntegerField(default=0)),
+ ('lockout_until', models.DateTimeField(null=True)),
+ ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
+ ],
+ ),
+ migrations.CreateModel(
+ name='ManualEnrollmentAudit',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('enrolled_email', models.CharField(max_length=255, db_index=True)),
+ ('time_stamp', models.DateTimeField(auto_now_add=True, null=True)),
+ ('state_transition', models.CharField(max_length=255, choices=[(b'from unenrolled to allowed to enroll', b'from unenrolled to allowed to enroll'), (b'from allowed to enroll to enrolled', b'from allowed to enroll to enrolled'), (b'from enrolled to enrolled', b'from enrolled to enrolled'), (b'from enrolled to unenrolled', b'from enrolled to unenrolled'), (b'from unenrolled to enrolled', b'from unenrolled to enrolled'), (b'from allowed to enroll to enrolled', b'from allowed to enroll to enrolled'), (b'from unenrolled to unenrolled', b'from unenrolled to unenrolled'), (b'N/A', b'N/A')])),
+ ('reason', models.TextField(null=True)),
+ ('enrolled_by', models.ForeignKey(to=settings.AUTH_USER_MODEL, null=True)),
+ ('enrollment', models.ForeignKey(to='student.CourseEnrollment', null=True)),
+ ],
+ ),
+ migrations.CreateModel(
+ name='PasswordHistory',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('password', models.CharField(max_length=128)),
+ ('time_set', models.DateTimeField(default=django.utils.timezone.now)),
+ ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
+ ],
+ ),
+ migrations.CreateModel(
+ name='PendingEmailChange',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('new_email', models.CharField(db_index=True, max_length=255, blank=True)),
+ ('activation_key', models.CharField(unique=True, max_length=32, verbose_name=b'activation key', db_index=True)),
+ ('user', models.OneToOneField(to=settings.AUTH_USER_MODEL)),
+ ],
+ ),
+ migrations.CreateModel(
+ name='PendingNameChange',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('new_name', models.CharField(max_length=255, blank=True)),
+ ('rationale', models.CharField(max_length=1024, blank=True)),
+ ('user', models.OneToOneField(to=settings.AUTH_USER_MODEL)),
+ ],
+ ),
+ migrations.CreateModel(
+ name='Registration',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('activation_key', models.CharField(unique=True, max_length=32, verbose_name=b'activation key', db_index=True)),
+ ('user', models.OneToOneField(to=settings.AUTH_USER_MODEL)),
+ ],
+ options={
+ 'db_table': 'auth_registration',
+ },
+ ),
+ migrations.CreateModel(
+ name='UserProfile',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('name', models.CharField(db_index=True, max_length=255, blank=True)),
+ ('meta', models.TextField(blank=True)),
+ ('courseware', models.CharField(default=b'course.xml', max_length=255, blank=True)),
+ ('language', models.CharField(db_index=True, max_length=255, blank=True)),
+ ('location', models.CharField(db_index=True, max_length=255, blank=True)),
+ ('year_of_birth', models.IntegerField(db_index=True, null=True, blank=True)),
+ ('gender', models.CharField(blank=True, max_length=6, null=True, db_index=True, choices=[(b'm', b'Male'), (b'f', b'Female'), (b'o', b'Other/Prefer Not to Say')])),
+ ('level_of_education', models.CharField(blank=True, max_length=6, null=True, db_index=True, choices=[(b'p', b'Doctorate'), (b'm', b"Master's or professional degree"), (b'b', b"Bachelor's degree"), (b'a', b'Associate degree'), (b'hs', b'Secondary/high school'), (b'jhs', b'Junior secondary/junior high/middle school'), (b'el', b'Elementary/primary school'), (b'none', b'No Formal Education'), (b'other', b'Other Education')])),
+ ('mailing_address', models.TextField(null=True, blank=True)),
+ ('city', models.TextField(null=True, blank=True)),
+ ('country', django_countries.fields.CountryField(blank=True, max_length=2, null=True)),
+ ('goals', models.TextField(null=True, blank=True)),
+ ('allow_certificate', models.BooleanField(default=1)),
+ ('bio', models.CharField(max_length=3000, null=True, blank=True)),
+ ('profile_image_uploaded_at', models.DateTimeField(null=True)),
+ ('user', models.OneToOneField(related_name='profile', to=settings.AUTH_USER_MODEL)),
+ ],
+ options={
+ 'db_table': 'auth_userprofile',
+ },
+ ),
+ migrations.CreateModel(
+ name='UserSignupSource',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('site', models.CharField(max_length=255, db_index=True)),
+ ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
+ ],
+ ),
+ migrations.CreateModel(
+ name='UserStanding',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('account_status', models.CharField(blank=True, max_length=31, choices=[(b'disabled', 'Account Disabled'), (b'enabled', 'Account Enabled')])),
+ ('standing_last_changed_at', models.DateTimeField(auto_now=True)),
+ ('changed_by', models.ForeignKey(to=settings.AUTH_USER_MODEL, blank=True)),
+ ('user', models.OneToOneField(related_name='standing', to=settings.AUTH_USER_MODEL)),
+ ],
+ ),
+ migrations.CreateModel(
+ name='UserTestGroup',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('name', models.CharField(max_length=32, db_index=True)),
+ ('description', models.TextField(blank=True)),
+ ('users', models.ManyToManyField(to=settings.AUTH_USER_MODEL, db_index=True)),
+ ],
+ ),
+ migrations.AddField(
+ model_name='languageproficiency',
+ name='user_profile',
+ field=models.ForeignKey(related_name='language_proficiencies', to='student.UserProfile'),
+ ),
+ migrations.AlterUniqueTogether(
+ name='courseenrollmentallowed',
+ unique_together=set([('email', 'course_id')]),
+ ),
+ migrations.AlterUniqueTogether(
+ name='languageproficiency',
+ unique_together=set([('code', 'user_profile')]),
+ ),
+ migrations.AlterUniqueTogether(
+ name='entranceexamconfiguration',
+ unique_together=set([('user', 'course_id')]),
+ ),
+ migrations.AlterUniqueTogether(
+ name='courseenrollment',
+ unique_together=set([('user', 'course_id')]),
+ ),
+ migrations.AlterUniqueTogether(
+ name='courseaccessrole',
+ unique_together=set([('user', 'org', 'course_id', 'role')]),
+ ),
+ ]
diff --git a/common/djangoapps/student/migrations/0002_text_to_varchar_and_indexes.py b/common/djangoapps/student/migrations/0002_text_to_varchar_and_indexes.py
deleted file mode 100644
index 27aea40a5cb7..000000000000
--- a/common/djangoapps/student/migrations/0002_text_to_varchar_and_indexes.py
+++ /dev/null
@@ -1,142 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
-
- # Changing field 'UserProfile.name'
- db.alter_column('auth_userprofile', 'name', self.gf('django.db.models.fields.CharField')(max_length=255))
-
- # Adding index on 'UserProfile', fields ['name']
- db.create_index('auth_userprofile', ['name'])
-
- # Changing field 'UserProfile.language'
- db.alter_column('auth_userprofile', 'language', self.gf('django.db.models.fields.CharField')(max_length=255))
-
- # Adding index on 'UserProfile', fields ['language']
- db.create_index('auth_userprofile', ['language'])
-
- # Changing field 'UserProfile.courseware'
- db.alter_column('auth_userprofile', 'courseware', self.gf('django.db.models.fields.CharField')(max_length=255))
-
- # Changing field 'UserProfile.meta'
- db.alter_column('auth_userprofile', 'meta', self.gf('django.db.models.fields.CharField')(max_length=255))
-
- # Changing field 'UserProfile.location'
- db.alter_column('auth_userprofile', 'location', self.gf('django.db.models.fields.CharField')(max_length=255))
-
- # Adding index on 'UserProfile', fields ['location']
- db.create_index('auth_userprofile', ['location'])
-
- def backwards(self, orm):
-
- # Removing index on 'UserProfile', fields ['location']
- db.delete_index('auth_userprofile', ['location'])
-
- # Removing index on 'UserProfile', fields ['language']
- db.delete_index('auth_userprofile', ['language'])
-
- # Removing index on 'UserProfile', fields ['name']
- db.delete_index('auth_userprofile', ['name'])
-
- # Changing field 'UserProfile.name'
- db.alter_column('auth_userprofile', 'name', self.gf('django.db.models.fields.TextField')())
-
- # Changing field 'UserProfile.language'
- db.alter_column('auth_userprofile', 'language', self.gf('django.db.models.fields.TextField')())
-
- # Changing field 'UserProfile.courseware'
- db.alter_column('auth_userprofile', 'courseware', self.gf('django.db.models.fields.TextField')())
-
- # Changing field 'UserProfile.meta'
- db.alter_column('auth_userprofile', 'meta', self.gf('django.db.models.fields.TextField')())
-
- # Changing field 'UserProfile.location'
- db.alter_column('auth_userprofile', 'location', self.gf('django.db.models.fields.TextField')())
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),
- 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'consecutive_days_visit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'blank': 'True'}),
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'display_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
- 'email_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'ignored_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'interesting_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'new_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),
- 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
- 'seen_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'show_country': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'w'", 'max_length': '2'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
- 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0003_auto__add_usertestgroup.py b/common/djangoapps/student/migrations/0003_auto__add_usertestgroup.py
deleted file mode 100644
index a63abf946980..000000000000
--- a/common/djangoapps/student/migrations/0003_auto__add_usertestgroup.py
+++ /dev/null
@@ -1,123 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
-
- # Adding model 'UserTestGroup'
- db.create_table('student_usertestgroup', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=32, db_index=True)),
- ('description', self.gf('django.db.models.fields.TextField')(blank=True)),
- ))
- db.send_create_signal('student', ['UserTestGroup'])
-
- # Adding M2M table for field users on 'UserTestGroup'
- db.create_table('student_usertestgroup_users', (
- ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
- ('usertestgroup', models.ForeignKey(orm['student.usertestgroup'], null=False)),
- ('user', models.ForeignKey(orm['auth.user'], null=False))
- ))
- db.create_unique('student_usertestgroup_users', ['usertestgroup_id', 'user_id'])
-
- def backwards(self, orm):
-
- # Deleting model 'UserTestGroup'
- db.delete_table('student_usertestgroup')
-
- # Removing M2M table for field users on 'UserTestGroup'
- db.delete_table('student_usertestgroup_users')
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),
- 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'consecutive_days_visit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'blank': 'True'}),
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'display_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
- 'email_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'ignored_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'interesting_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'new_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),
- 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
- 'seen_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'show_country': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'w'", 'max_length': '2'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
- 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0004_add_email_index.py b/common/djangoapps/student/migrations/0004_add_email_index.py
deleted file mode 100644
index 60af424f65f9..000000000000
--- a/common/djangoapps/student/migrations/0004_add_email_index.py
+++ /dev/null
@@ -1,105 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- db.execute("create unique index email on auth_user (email)")
- pass
-
- def backwards(self, orm):
- db.execute("drop index email on auth_user")
- pass
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),
- 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'consecutive_days_visit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'blank': 'True'}),
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'display_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
- 'email_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'ignored_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'interesting_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'new_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),
- 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
- 'seen_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'show_country': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'w'", 'max_length': '2'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
- 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0005_name_change.py b/common/djangoapps/student/migrations/0005_name_change.py
deleted file mode 100644
index 24c393cccee8..000000000000
--- a/common/djangoapps/student/migrations/0005_name_change.py
+++ /dev/null
@@ -1,145 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
-
- # Adding model 'PendingEmailChange'
- db.create_table('student_pendingemailchange', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('user', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['auth.User'], unique=True)),
- ('new_email', self.gf('django.db.models.fields.CharField')(db_index=True, max_length=255, blank=True)),
- ('activation_key', self.gf('django.db.models.fields.CharField')(unique=True, max_length=32, db_index=True)),
- ))
- db.send_create_signal('student', ['PendingEmailChange'])
-
- # Adding model 'PendingNameChange'
- db.create_table('student_pendingnamechange', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('user', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['auth.User'], unique=True)),
- ('new_name', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)),
- ('rationale', self.gf('django.db.models.fields.CharField')(max_length=1024, blank=True)),
- ))
- db.send_create_signal('student', ['PendingNameChange'])
-
- # Changing field 'UserProfile.user'
- db.alter_column('auth_userprofile', 'user_id', self.gf('django.db.models.fields.related.OneToOneField')(unique=True, to=orm['auth.User']))
-
- def backwards(self, orm):
-
- # Deleting model 'PendingEmailChange'
- db.delete_table('student_pendingemailchange')
-
- # Deleting model 'PendingNameChange'
- db.delete_table('student_pendingnamechange')
-
- # Changing field 'UserProfile.user'
- db.alter_column('auth_userprofile', 'user_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], unique=True))
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),
- 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'consecutive_days_visit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'blank': 'True'}),
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'display_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
- 'email_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'ignored_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'interesting_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'new_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),
- 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
- 'seen_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'show_country': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'w'", 'max_length': '2'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
- 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0006_expand_meta_field.py b/common/djangoapps/student/migrations/0006_expand_meta_field.py
deleted file mode 100644
index 7fc3094cccc5..000000000000
--- a/common/djangoapps/student/migrations/0006_expand_meta_field.py
+++ /dev/null
@@ -1,121 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
-
- # Changing field 'UserProfile.meta'
- db.alter_column('auth_userprofile', 'meta', self.gf('django.db.models.fields.TextField')())
-
- def backwards(self, orm):
-
- # Changing field 'UserProfile.meta'
- db.alter_column('auth_userprofile', 'meta', self.gf('django.db.models.fields.CharField')(max_length=255))
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),
- 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'consecutive_days_visit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'blank': 'True'}),
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'display_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
- 'email_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'ignored_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'interesting_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'new_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),
- 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
- 'seen_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'show_country': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'w'", 'max_length': '2'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
- 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0007_convert_to_utf8.py b/common/djangoapps/student/migrations/0007_convert_to_utf8.py
deleted file mode 100644
index 7a96496ad04e..000000000000
--- a/common/djangoapps/student/migrations/0007_convert_to_utf8.py
+++ /dev/null
@@ -1,125 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- if db.backend_name == 'mysql':
- db.execute_many("""
- ALTER DATABASE CHARACTER SET utf8 COLLATE utf8_general_ci;
- ALTER TABLE student_pendingemailchange CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
- ALTER TABLE student_pendingnamechange CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
- ALTER TABLE student_usertestgroup CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
- ALTER TABLE student_usertestgroup_users CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
- """)
-
- def backwards(self, orm):
- # Although this migration can't be undone, it is okay for it to be run backwards because it doesn't add/remove any fields
- pass
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),
- 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'consecutive_days_visit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'blank': 'True'}),
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'display_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
- 'email_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'ignored_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'interesting_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'new_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),
- 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
- 'seen_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'show_country': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'w'", 'max_length': '2'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
- 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0008__auto__add_courseregistration.py b/common/djangoapps/student/migrations/0008__auto__add_courseregistration.py
deleted file mode 100644
index 22ef55913af9..000000000000
--- a/common/djangoapps/student/migrations/0008__auto__add_courseregistration.py
+++ /dev/null
@@ -1,130 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'CourseRegistration'
- db.create_table('student_courseregistration', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('user', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['auth.User'], unique=True)),
- ('course_id', self.gf('django.db.models.fields.IntegerField')()),
- ))
- db.send_create_signal('student', ['CourseRegistration'])
-
- def backwards(self, orm):
- # Deleting model 'CourseRegistration'
- db.delete_table('student_courseregistration')
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),
- 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'consecutive_days_visit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'blank': 'True'}),
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'display_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
- 'email_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'ignored_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'interesting_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'new_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),
- 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
- 'seen_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'show_country': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'w'", 'max_length': '2'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
- 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.courseregistration': {
- 'Meta': {'object_name': 'CourseRegistration'},
- 'course_id': ('django.db.models.fields.IntegerField', [], {}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0009_auto__del_courseregistration__add_courseenrollment.py b/common/djangoapps/student/migrations/0009_auto__del_courseregistration__add_courseenrollment.py
deleted file mode 100644
index c5af13d34c5b..000000000000
--- a/common/djangoapps/student/migrations/0009_auto__del_courseregistration__add_courseenrollment.py
+++ /dev/null
@@ -1,141 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Deleting model 'CourseRegistration'
- db.delete_table('student_courseregistration')
-
- # Adding model 'CourseEnrollment'
- db.create_table('student_courseenrollment', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('user', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['auth.User'], unique=True)),
- ('course_id', self.gf('django.db.models.fields.IntegerField')()),
- ))
- db.send_create_signal('student', ['CourseEnrollment'])
-
- def backwards(self, orm):
- # Adding model 'CourseRegistration'
- db.create_table('student_courseregistration', (
- ('course_id', self.gf('django.db.models.fields.IntegerField')()),
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('user', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['auth.User'], unique=True)),
- ))
- db.send_create_signal('student', ['CourseRegistration'])
-
- # Deleting model 'CourseEnrollment'
- db.delete_table('student_courseenrollment')
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),
- 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'consecutive_days_visit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'blank': 'True'}),
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'display_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
- 'email_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'ignored_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'interesting_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'new_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),
- 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
- 'seen_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'show_country': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'w'", 'max_length': '2'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
- 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.courseenrollment': {
- 'Meta': {'object_name': 'CourseEnrollment'},
- 'course_id': ('django.db.models.fields.IntegerField', [], {}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0010_auto__chg_field_courseenrollment_course_id.py b/common/djangoapps/student/migrations/0010_auto__chg_field_courseenrollment_course_id.py
deleted file mode 100644
index 153a166b5ed6..000000000000
--- a/common/djangoapps/student/migrations/0010_auto__chg_field_courseenrollment_course_id.py
+++ /dev/null
@@ -1,127 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
-
- # Changing field 'CourseEnrollment.course_id'
- db.alter_column('student_courseenrollment', 'course_id', self.gf('django.db.models.fields.CharField')(max_length=255))
-
- def backwards(self, orm):
-
- # Changing field 'CourseEnrollment.course_id'
- db.alter_column('student_courseenrollment', 'course_id', self.gf('django.db.models.fields.IntegerField')())
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),
- 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'consecutive_days_visit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'blank': 'True'}),
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'display_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
- 'email_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'ignored_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'interesting_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'new_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),
- 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
- 'seen_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'show_country': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'w'", 'max_length': '2'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
- 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.courseenrollment': {
- 'Meta': {'object_name': 'CourseEnrollment'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0011_auto__chg_field_courseenrollment_user__del_unique_courseenrollment_use.py b/common/djangoapps/student/migrations/0011_auto__chg_field_courseenrollment_user__del_unique_courseenrollment_use.py
deleted file mode 100644
index e8417f53ef4a..000000000000
--- a/common/djangoapps/student/migrations/0011_auto__chg_field_courseenrollment_user__del_unique_courseenrollment_use.py
+++ /dev/null
@@ -1,135 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # This table is dropped in a subsequent migration. This migration was causing problems when using InnoDB,
- # so we are just dropping it.
- pass
- # # Removing unique constraint on 'CourseEnrollment', fields ['user']
- # db.delete_unique('student_courseenrollment', ['user_id'])
- #
- #
- # # Changing field 'CourseEnrollment.user'
- # db.alter_column('student_courseenrollment', 'user_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User']))
-
- def backwards(self, orm):
- pass
- # # Changing field 'CourseEnrollment.user'
- # db.alter_column('student_courseenrollment', 'user_id', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['auth.User'], unique=True))
- # # Adding unique constraint on 'CourseEnrollment', fields ['user']
- # db.create_unique('student_courseenrollment', ['user_id'])
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),
- 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'consecutive_days_visit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'blank': 'True'}),
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'display_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
- 'email_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'ignored_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'interesting_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'new_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),
- 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
- 'seen_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'show_country': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'w'", 'max_length': '2'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
- 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.courseenrollment': {
- 'Meta': {'object_name': 'CourseEnrollment'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0012_auto__add_field_userprofile_gender__add_field_userprofile_date_of_birt.py b/common/djangoapps/student/migrations/0012_auto__add_field_userprofile_gender__add_field_userprofile_date_of_birt.py
deleted file mode 100644
index ce46bf50fa64..000000000000
--- a/common/djangoapps/student/migrations/0012_auto__add_field_userprofile_gender__add_field_userprofile_date_of_birt.py
+++ /dev/null
@@ -1,173 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding field 'UserProfile.gender'
- db.add_column('auth_userprofile', 'gender',
- self.gf('django.db.models.fields.CharField')(max_length=6, null=True, blank=True),
- keep_default=False)
-
- # Adding field 'UserProfile.date_of_birth'
- db.add_column('auth_userprofile', 'date_of_birth',
- self.gf('django.db.models.fields.DateField')(null=True, blank=True),
- keep_default=False)
-
- # Adding field 'UserProfile.mailing_address'
- db.add_column('auth_userprofile', 'mailing_address',
- self.gf('django.db.models.fields.TextField')(null=True, blank=True),
- keep_default=False)
-
- # Adding field 'UserProfile.country'
- db.add_column('auth_userprofile', 'country',
- self.gf('django.db.models.fields.CharField')(max_length=255, null=True, blank=True),
- keep_default=False)
-
- # Adding field 'UserProfile.telephone_number'
- db.add_column('auth_userprofile', 'telephone_number',
- self.gf('django.db.models.fields.CharField')(max_length=25, null=True, blank=True),
- keep_default=False)
-
- # Adding field 'UserProfile.occupation'
- db.add_column('auth_userprofile', 'occupation',
- self.gf('django.db.models.fields.CharField')(max_length=255, null=True, blank=True),
- keep_default=False)
-
- def backwards(self, orm):
- # Deleting field 'UserProfile.gender'
- db.delete_column('auth_userprofile', 'gender')
-
- # Deleting field 'UserProfile.date_of_birth'
- db.delete_column('auth_userprofile', 'date_of_birth')
-
- # Deleting field 'UserProfile.mailing_address'
- db.delete_column('auth_userprofile', 'mailing_address')
-
- # Deleting field 'UserProfile.country'
- db.delete_column('auth_userprofile', 'country')
-
- # Deleting field 'UserProfile.telephone_number'
- db.delete_column('auth_userprofile', 'telephone_number')
-
- # Deleting field 'UserProfile.occupation'
- db.delete_column('auth_userprofile', 'occupation')
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),
- 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'consecutive_days_visit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'blank': 'True'}),
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'display_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
- 'email_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'ignored_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'interesting_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'new_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),
- 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
- 'seen_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'show_country': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'w'", 'max_length': '2'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
- 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.courseenrollment': {
- 'Meta': {'object_name': 'CourseEnrollment'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'country': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'occupation': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
- 'telephone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0013_auto__chg_field_userprofile_meta.py b/common/djangoapps/student/migrations/0013_auto__chg_field_userprofile_meta.py
deleted file mode 100644
index de81c6bf53d2..000000000000
--- a/common/djangoapps/student/migrations/0013_auto__chg_field_userprofile_meta.py
+++ /dev/null
@@ -1,133 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
-
- # Changing field 'UserProfile.meta'
- db.alter_column('auth_userprofile', 'meta', self.gf('django.db.models.fields.TextField')())
-
- def backwards(self, orm):
-
- # Changing field 'UserProfile.meta'
- db.alter_column('auth_userprofile', 'meta', self.gf('django.db.models.fields.CharField')(max_length=255))
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),
- 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'consecutive_days_visit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'blank': 'True'}),
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'display_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
- 'email_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'ignored_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'interesting_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'new_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),
- 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
- 'seen_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'show_country': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'w'", 'max_length': '2'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
- 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.courseenrollment': {
- 'Meta': {'object_name': 'CourseEnrollment'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'country': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'occupation': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
- 'telephone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0014_auto__del_courseenrollment.py b/common/djangoapps/student/migrations/0014_auto__del_courseenrollment.py
deleted file mode 100644
index 926c38c55f4e..000000000000
--- a/common/djangoapps/student/migrations/0014_auto__del_courseenrollment.py
+++ /dev/null
@@ -1,130 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Deleting model 'CourseEnrollment'
- db.delete_table('student_courseenrollment')
-
- def backwards(self, orm):
- # Adding model 'CourseEnrollment'
- db.create_table('student_courseenrollment', (
- ('course_id', self.gf('django.db.models.fields.CharField')(max_length=255)),
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])),
- ))
- db.send_create_signal('student', ['CourseEnrollment'])
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),
- 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'consecutive_days_visit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'blank': 'True'}),
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'display_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
- 'email_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'ignored_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'interesting_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'new_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),
- 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
- 'seen_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'show_country': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'w'", 'max_length': '2'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
- 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'country': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'occupation': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
- 'telephone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0015_auto__add_courseenrollment__add_unique_courseenrollment_user_course_id.py b/common/djangoapps/student/migrations/0015_auto__add_courseenrollment__add_unique_courseenrollment_user_course_id.py
deleted file mode 100644
index 3cde0c755ce6..000000000000
--- a/common/djangoapps/student/migrations/0015_auto__add_courseenrollment__add_unique_courseenrollment_user_course_id.py
+++ /dev/null
@@ -1,142 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'CourseEnrollment'
- db.create_table('student_courseenrollment', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])),
- ('course_id', self.gf('django.db.models.fields.CharField')(max_length=255, db_index=True)),
- ))
- db.send_create_signal('student', ['CourseEnrollment'])
-
- # Adding unique constraint on 'CourseEnrollment', fields ['user', 'course_id']
- db.create_unique('student_courseenrollment', ['user_id', 'course_id'])
-
- def backwards(self, orm):
- # Removing unique constraint on 'CourseEnrollment', fields ['user', 'course_id']
- db.delete_unique('student_courseenrollment', ['user_id', 'course_id'])
-
- # Deleting model 'CourseEnrollment'
- db.delete_table('student_courseenrollment')
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),
- 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'consecutive_days_visit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'blank': 'True'}),
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'display_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
- 'email_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'ignored_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'interesting_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'new_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),
- 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
- 'seen_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'show_country': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'w'", 'max_length': '2'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
- 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.courseenrollment': {
- 'Meta': {'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'country': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'occupation': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
- 'telephone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0016_auto__add_field_courseenrollment_date__chg_field_userprofile_country.py b/common/djangoapps/student/migrations/0016_auto__add_field_courseenrollment_date__chg_field_userprofile_country.py
deleted file mode 100644
index 58f013742ece..000000000000
--- a/common/djangoapps/student/migrations/0016_auto__add_field_courseenrollment_date__chg_field_userprofile_country.py
+++ /dev/null
@@ -1,140 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding field 'CourseEnrollment.date'
- db.add_column('student_courseenrollment', 'date',
- self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, null=True, blank=True),
- keep_default=False)
-
- # Changing field 'UserProfile.country'
- db.alter_column('auth_userprofile', 'country', self.gf('django_countries.fields.CountryField')(max_length=2, null=True))
-
- def backwards(self, orm):
- # Deleting field 'CourseEnrollment.date'
- db.delete_column('student_courseenrollment', 'date')
-
- # Changing field 'UserProfile.country'
- db.alter_column('auth_userprofile', 'country', self.gf('django.db.models.fields.CharField')(max_length=255, null=True))
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),
- 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'consecutive_days_visit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'blank': 'True'}),
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'display_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
- 'email_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'ignored_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'interesting_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'new_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),
- 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
- 'seen_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'show_country': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'w'", 'max_length': '2'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
- 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.courseenrollment': {
- 'Meta': {'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'occupation': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
- 'telephone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0017_rename_date_to_created.py b/common/djangoapps/student/migrations/0017_rename_date_to_created.py
deleted file mode 100644
index 6bde313d8bfb..000000000000
--- a/common/djangoapps/student/migrations/0017_rename_date_to_created.py
+++ /dev/null
@@ -1,132 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Rename 'date' field to 'created'
- db.rename_column('student_courseenrollment', 'date', 'created')
-
- def backwards(self, orm):
- # Rename 'created' field to 'date'
- db.rename_column('student_courseenrollment', 'created', 'date')
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),
- 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'consecutive_days_visit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'blank': 'True'}),
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'display_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
- 'email_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'ignored_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'interesting_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'new_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),
- 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
- 'seen_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'show_country': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'w'", 'max_length': '2'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
- 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.courseenrollment': {
- 'Meta': {'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'occupation': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
- 'telephone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0018_auto.py b/common/djangoapps/student/migrations/0018_auto.py
deleted file mode 100644
index df0cc3fbdb00..000000000000
--- a/common/djangoapps/student/migrations/0018_auto.py
+++ /dev/null
@@ -1,132 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding index on 'CourseEnrollment', fields ['created']
- db.create_index('student_courseenrollment', ['created'])
-
- def backwards(self, orm):
- # Removing index on 'CourseEnrollment', fields ['created']
- db.delete_index('student_courseenrollment', ['created'])
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),
- 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'consecutive_days_visit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'blank': 'True'}),
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'display_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
- 'email_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'ignored_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'interesting_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'new_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),
- 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
- 'seen_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'show_country': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'w'", 'max_length': '2'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
- 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.courseenrollment': {
- 'Meta': {'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'occupation': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
- 'telephone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0019_create_approved_demographic_fields_fall_2012.py b/common/djangoapps/student/migrations/0019_create_approved_demographic_fields_fall_2012.py
deleted file mode 100644
index 7c0207f4f4c2..000000000000
--- a/common/djangoapps/student/migrations/0019_create_approved_demographic_fields_fall_2012.py
+++ /dev/null
@@ -1,187 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Deleting field 'UserProfile.occupation'
- db.delete_column('auth_userprofile', 'occupation')
-
- # Deleting field 'UserProfile.telephone_number'
- db.delete_column('auth_userprofile', 'telephone_number')
-
- # Deleting field 'UserProfile.date_of_birth'
- db.delete_column('auth_userprofile', 'date_of_birth')
-
- # Deleting field 'UserProfile.country'
- db.delete_column('auth_userprofile', 'country')
-
- # Adding field 'UserProfile.year_of_birth'
- db.add_column('auth_userprofile', 'year_of_birth',
- self.gf('django.db.models.fields.IntegerField')(db_index=True, null=True, blank=True),
- keep_default=False)
-
- # Adding field 'UserProfile.level_of_education'
- db.add_column('auth_userprofile', 'level_of_education',
- self.gf('django.db.models.fields.CharField')(db_index=True, max_length=6, null=True, blank=True),
- keep_default=False)
-
- # Adding field 'UserProfile.goals'
- db.add_column('auth_userprofile', 'goals',
- self.gf('django.db.models.fields.TextField')(null=True, blank=True),
- keep_default=False)
-
- # Adding index on 'UserProfile', fields ['gender']
- db.create_index('auth_userprofile', ['gender'])
-
- def backwards(self, orm):
- # Removing index on 'UserProfile', fields ['gender']
- db.delete_index('auth_userprofile', ['gender'])
-
- # Adding field 'UserProfile.occupation'
- db.add_column('auth_userprofile', 'occupation',
- self.gf('django.db.models.fields.CharField')(max_length=255, null=True, blank=True),
- keep_default=False)
-
- # Adding field 'UserProfile.telephone_number'
- db.add_column('auth_userprofile', 'telephone_number',
- self.gf('django.db.models.fields.CharField')(max_length=25, null=True, blank=True),
- keep_default=False)
-
- # Adding field 'UserProfile.date_of_birth'
- db.add_column('auth_userprofile', 'date_of_birth',
- self.gf('django.db.models.fields.DateField')(null=True, blank=True),
- keep_default=False)
-
- # Adding field 'UserProfile.country'
- db.add_column('auth_userprofile', 'country',
- self.gf('django_countries.fields.CountryField')(max_length=2, null=True, blank=True),
- keep_default=False)
-
- # Deleting field 'UserProfile.year_of_birth'
- db.delete_column('auth_userprofile', 'year_of_birth')
-
- # Deleting field 'UserProfile.level_of_education'
- db.delete_column('auth_userprofile', 'level_of_education')
-
- # Deleting field 'UserProfile.goals'
- db.delete_column('auth_userprofile', 'goals')
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),
- 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'consecutive_days_visit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'blank': 'True'}),
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'display_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
- 'email_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'ignored_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'interesting_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'new_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),
- 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
- 'seen_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'show_country': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'w'", 'max_length': '2'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
- 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.courseenrollment': {
- 'Meta': {'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0020_add_test_center_user.py b/common/djangoapps/student/migrations/0020_add_test_center_user.py
deleted file mode 100644
index 6c0bf5c4ee56..000000000000
--- a/common/djangoapps/student/migrations/0020_add_test_center_user.py
+++ /dev/null
@@ -1,188 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'TestCenterUser'
- db.create_table('student_testcenteruser', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('user', self.gf('django.db.models.fields.related.ForeignKey')(default=None, to=orm['auth.User'], unique=True)),
- ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, db_index=True, blank=True)),
- ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, db_index=True, blank=True)),
- ('user_updated_at', self.gf('django.db.models.fields.DateTimeField')(db_index=True)),
- ('candidate_id', self.gf('django.db.models.fields.IntegerField')(null=True, db_index=True)),
- ('client_candidate_id', self.gf('django.db.models.fields.CharField')(max_length=50, db_index=True)),
- ('first_name', self.gf('django.db.models.fields.CharField')(max_length=30, db_index=True)),
- ('last_name', self.gf('django.db.models.fields.CharField')(max_length=50, db_index=True)),
- ('middle_name', self.gf('django.db.models.fields.CharField')(max_length=30, blank=True)),
- ('suffix', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)),
- ('salutation', self.gf('django.db.models.fields.CharField')(max_length=50, blank=True)),
- ('address_1', self.gf('django.db.models.fields.CharField')(max_length=40)),
- ('address_2', self.gf('django.db.models.fields.CharField')(max_length=40, blank=True)),
- ('address_3', self.gf('django.db.models.fields.CharField')(max_length=40, blank=True)),
- ('city', self.gf('django.db.models.fields.CharField')(max_length=32, db_index=True)),
- ('state', self.gf('django.db.models.fields.CharField')(db_index=True, max_length=20, blank=True)),
- ('postal_code', self.gf('django.db.models.fields.CharField')(db_index=True, max_length=16, blank=True)),
- ('country', self.gf('django.db.models.fields.CharField')(max_length=3, db_index=True)),
- ('phone', self.gf('django.db.models.fields.CharField')(max_length=35)),
- ('extension', self.gf('django.db.models.fields.CharField')(db_index=True, max_length=8, blank=True)),
- ('phone_country_code', self.gf('django.db.models.fields.CharField')(max_length=3, db_index=True)),
- ('fax', self.gf('django.db.models.fields.CharField')(max_length=35, blank=True)),
- ('fax_country_code', self.gf('django.db.models.fields.CharField')(max_length=3, blank=True)),
- ('company_name', self.gf('django.db.models.fields.CharField')(max_length=50, blank=True)),
- ))
- db.send_create_signal('student', ['TestCenterUser'])
-
-
- def backwards(self, orm):
- # Deleting model 'TestCenterUser'
- db.delete_table('student_testcenteruser')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),
- 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'consecutive_days_visit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'blank': 'True'}),
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
- 'display_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
- 'email_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'ignored_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'interesting_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'new_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),
- 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
- 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
- 'seen_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'show_country': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'w'", 'max_length': '2'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
- 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.courseenrollment': {
- 'Meta': {'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.testcenteruser': {
- 'Meta': {'object_name': 'TestCenterUser'},
- 'address_1': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
- 'address_2': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}),
- 'address_3': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}),
- 'candidate_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'db_index': 'True'}),
- 'city': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'client_candidate_id': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
- 'company_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
- 'country': ('django.db.models.fields.CharField', [], {'max_length': '3', 'db_index': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'extension': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '8', 'blank': 'True'}),
- 'fax': ('django.db.models.fields.CharField', [], {'max_length': '35', 'blank': 'True'}),
- 'fax_country_code': ('django.db.models.fields.CharField', [], {'max_length': '3', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
- 'middle_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'phone': ('django.db.models.fields.CharField', [], {'max_length': '35'}),
- 'phone_country_code': ('django.db.models.fields.CharField', [], {'max_length': '3', 'db_index': 'True'}),
- 'postal_code': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '16', 'blank': 'True'}),
- 'salutation': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
- 'state': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '20', 'blank': 'True'}),
- 'suffix': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['auth.User']", 'unique': 'True'}),
- 'user_updated_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0021_remove_askbot.py b/common/djangoapps/student/migrations/0021_remove_askbot.py
deleted file mode 100644
index 8f76e5078c19..000000000000
--- a/common/djangoapps/student/migrations/0021_remove_askbot.py
+++ /dev/null
@@ -1,160 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-ASKBOT_AUTH_USER_COLUMNS = (
- 'website',
- 'about',
- 'gold',
- 'email_isvalid',
- 'real_name',
- 'location',
- 'reputation',
- 'gravatar',
- 'bronze',
- 'last_seen',
- 'silver',
- 'questions_per_page',
- 'new_response_count',
- 'seen_response_count',
-)
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- "Kill the askbot"
- try:
- # For MySQL, we're batching the alters together for performance reasons
- if db.backend_name == 'mysql':
- drops = ["drop `{0}`".format(col) for col in ASKBOT_AUTH_USER_COLUMNS]
- statement = "alter table `auth_user` {0};".format(", ".join(drops))
- db.execute(statement)
- else:
- for column in ASKBOT_AUTH_USER_COLUMNS:
- db.delete_column('auth_user', column)
- except Exception as ex:
- print "Couldn't remove askbot because of {0} -- it was probably never here to begin with.".format(ex)
-
- def backwards(self, orm):
- raise RuntimeError("Cannot reverse this migration: there's no going back to Askbot.")
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.courseenrollment': {
- 'Meta': {'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.testcenteruser': {
- 'Meta': {'object_name': 'TestCenterUser'},
- 'address_1': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
- 'address_2': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}),
- 'address_3': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}),
- 'candidate_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'db_index': 'True'}),
- 'city': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'client_candidate_id': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
- 'company_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
- 'country': ('django.db.models.fields.CharField', [], {'max_length': '3', 'db_index': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'extension': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '8', 'blank': 'True'}),
- 'fax': ('django.db.models.fields.CharField', [], {'max_length': '35', 'blank': 'True'}),
- 'fax_country_code': ('django.db.models.fields.CharField', [], {'max_length': '3', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
- 'middle_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'phone': ('django.db.models.fields.CharField', [], {'max_length': '35'}),
- 'phone_country_code': ('django.db.models.fields.CharField', [], {'max_length': '3', 'db_index': 'True'}),
- 'postal_code': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '16', 'blank': 'True'}),
- 'salutation': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
- 'state': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '20', 'blank': 'True'}),
- 'suffix': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['auth.User']", 'unique': 'True'}),
- 'user_updated_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0022_auto__add_courseenrollmentallowed__add_unique_courseenrollmentallowed_.py b/common/djangoapps/student/migrations/0022_auto__add_courseenrollmentallowed__add_unique_courseenrollmentallowed_.py
deleted file mode 100644
index 769ad6737dee..000000000000
--- a/common/djangoapps/student/migrations/0022_auto__add_courseenrollmentallowed__add_unique_courseenrollmentallowed_.py
+++ /dev/null
@@ -1,155 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'CourseEnrollmentAllowed'
- db.create_table('student_courseenrollmentallowed', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('email', self.gf('django.db.models.fields.CharField')(max_length=255, db_index=True)),
- ('course_id', self.gf('django.db.models.fields.CharField')(max_length=255, db_index=True)),
- ('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, null=True, db_index=True, blank=True)),
- ))
- db.send_create_signal('student', ['CourseEnrollmentAllowed'])
-
- # Adding unique constraint on 'CourseEnrollmentAllowed', fields ['email', 'course_id']
- db.create_unique('student_courseenrollmentallowed', ['email', 'course_id'])
-
-
- def backwards(self, orm):
- # Removing unique constraint on 'CourseEnrollmentAllowed', fields ['email', 'course_id']
- db.delete_unique('student_courseenrollmentallowed', ['email', 'course_id'])
-
- # Deleting model 'CourseEnrollmentAllowed'
- db.delete_table('student_courseenrollmentallowed')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.courseenrollment': {
- 'Meta': {'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.testcenteruser': {
- 'Meta': {'object_name': 'TestCenterUser'},
- 'address_1': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
- 'address_2': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}),
- 'address_3': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}),
- 'candidate_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'db_index': 'True'}),
- 'city': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'client_candidate_id': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
- 'company_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
- 'country': ('django.db.models.fields.CharField', [], {'max_length': '3', 'db_index': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'extension': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '8', 'blank': 'True'}),
- 'fax': ('django.db.models.fields.CharField', [], {'max_length': '35', 'blank': 'True'}),
- 'fax_country_code': ('django.db.models.fields.CharField', [], {'max_length': '3', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
- 'middle_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'phone': ('django.db.models.fields.CharField', [], {'max_length': '35'}),
- 'phone_country_code': ('django.db.models.fields.CharField', [], {'max_length': '3', 'db_index': 'True'}),
- 'postal_code': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '16', 'blank': 'True'}),
- 'salutation': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
- 'state': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '20', 'blank': 'True'}),
- 'suffix': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['auth.User']", 'unique': 'True'}),
- 'user_updated_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0023_add_test_center_registration.py b/common/djangoapps/student/migrations/0023_add_test_center_registration.py
deleted file mode 100644
index 6186f5deef19..000000000000
--- a/common/djangoapps/student/migrations/0023_add_test_center_registration.py
+++ /dev/null
@@ -1,241 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'TestCenterRegistration'
- db.create_table('student_testcenterregistration', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('testcenter_user', self.gf('django.db.models.fields.related.ForeignKey')(default=None, to=orm['student.TestCenterUser'])),
- ('course_id', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
- ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, db_index=True, blank=True)),
- ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, db_index=True, blank=True)),
- ('user_updated_at', self.gf('django.db.models.fields.DateTimeField')(db_index=True)),
- ('client_authorization_id', self.gf('django.db.models.fields.CharField')(unique=True, max_length=20, db_index=True)),
- ('exam_series_code', self.gf('django.db.models.fields.CharField')(max_length=15, db_index=True)),
- ('eligibility_appointment_date_first', self.gf('django.db.models.fields.DateField')(db_index=True)),
- ('eligibility_appointment_date_last', self.gf('django.db.models.fields.DateField')(db_index=True)),
- ('accommodation_code', self.gf('django.db.models.fields.CharField')(max_length=64, blank=True)),
- ('accommodation_request', self.gf('django.db.models.fields.CharField')(db_index=False, max_length=1024, blank=True)),
- ('uploaded_at', self.gf('django.db.models.fields.DateTimeField')(null=True, db_index=True)),
- ('processed_at', self.gf('django.db.models.fields.DateTimeField')(null=True, db_index=True)),
- ('upload_status', self.gf('django.db.models.fields.CharField')(db_index=True, max_length=20, blank=True)),
- ('upload_error_message', self.gf('django.db.models.fields.CharField')(max_length=512, blank=True)),
- ('authorization_id', self.gf('django.db.models.fields.IntegerField')(null=True, db_index=True)),
- ('confirmed_at', self.gf('django.db.models.fields.DateTimeField')(null=True, db_index=True)),
- ))
- db.send_create_signal('student', ['TestCenterRegistration'])
-
- # Adding field 'TestCenterUser.uploaded_at'
- db.add_column('student_testcenteruser', 'uploaded_at',
- self.gf('django.db.models.fields.DateTimeField')(db_index=True, null=True, blank=True),
- keep_default=False)
-
- # Adding field 'TestCenterUser.processed_at'
- db.add_column('student_testcenteruser', 'processed_at',
- self.gf('django.db.models.fields.DateTimeField')(null=True, db_index=True),
- keep_default=False)
-
- # Adding field 'TestCenterUser.upload_status'
- db.add_column('student_testcenteruser', 'upload_status',
- self.gf('django.db.models.fields.CharField')(db_index=True, default='', max_length=20, blank=True),
- keep_default=False)
-
- # Adding field 'TestCenterUser.upload_error_message'
- db.add_column('student_testcenteruser', 'upload_error_message',
- self.gf('django.db.models.fields.CharField')(default='', max_length=512, blank=True),
- keep_default=False)
-
- # Adding field 'TestCenterUser.confirmed_at'
- db.add_column('student_testcenteruser', 'confirmed_at',
- self.gf('django.db.models.fields.DateTimeField')(null=True, db_index=True),
- keep_default=False)
-
- # Adding index on 'TestCenterUser', fields ['company_name']
- db.create_index('student_testcenteruser', ['company_name'])
-
- # Adding unique constraint on 'TestCenterUser', fields ['client_candidate_id']
- db.create_unique('student_testcenteruser', ['client_candidate_id'])
-
-
- def backwards(self, orm):
- # Removing unique constraint on 'TestCenterUser', fields ['client_candidate_id']
- db.delete_unique('student_testcenteruser', ['client_candidate_id'])
-
- # Removing index on 'TestCenterUser', fields ['company_name']
- db.delete_index('student_testcenteruser', ['company_name'])
-
- # Deleting model 'TestCenterRegistration'
- db.delete_table('student_testcenterregistration')
-
- # Deleting field 'TestCenterUser.uploaded_at'
- db.delete_column('student_testcenteruser', 'uploaded_at')
-
- # Deleting field 'TestCenterUser.processed_at'
- db.delete_column('student_testcenteruser', 'processed_at')
-
- # Deleting field 'TestCenterUser.upload_status'
- db.delete_column('student_testcenteruser', 'upload_status')
-
- # Deleting field 'TestCenterUser.upload_error_message'
- db.delete_column('student_testcenteruser', 'upload_error_message')
-
- # Deleting field 'TestCenterUser.confirmed_at'
- db.delete_column('student_testcenteruser', 'confirmed_at')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.courseenrollment': {
- 'Meta': {'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.testcenterregistration': {
- 'Meta': {'object_name': 'TestCenterRegistration'},
- 'accommodation_code': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),
- 'accommodation_request': ('django.db.models.fields.CharField', [], {'db_index': 'False', 'max_length': '1024', 'blank': 'True'}),
- 'authorization_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'db_index': 'True'}),
- 'client_authorization_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '20', 'db_index': 'True'}),
- 'confirmed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'eligibility_appointment_date_first': ('django.db.models.fields.DateField', [], {'db_index': 'True'}),
- 'eligibility_appointment_date_last': ('django.db.models.fields.DateField', [], {'db_index': 'True'}),
- 'exam_series_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'processed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'testcenter_user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['student.TestCenterUser']"}),
- 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'upload_error_message': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
- 'upload_status': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '20', 'blank': 'True'}),
- 'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'user_updated_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'})
- },
- 'student.testcenteruser': {
- 'Meta': {'object_name': 'TestCenterUser'},
- 'address_1': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
- 'address_2': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}),
- 'address_3': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}),
- 'candidate_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'db_index': 'True'}),
- 'city': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'client_candidate_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '50', 'db_index': 'True'}),
- 'company_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '50', 'blank': 'True'}),
- 'confirmed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'country': ('django.db.models.fields.CharField', [], {'max_length': '3', 'db_index': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'extension': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '8', 'blank': 'True'}),
- 'fax': ('django.db.models.fields.CharField', [], {'max_length': '35', 'blank': 'True'}),
- 'fax_country_code': ('django.db.models.fields.CharField', [], {'max_length': '3', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
- 'middle_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'phone': ('django.db.models.fields.CharField', [], {'max_length': '35'}),
- 'phone_country_code': ('django.db.models.fields.CharField', [], {'max_length': '3', 'db_index': 'True'}),
- 'postal_code': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '16', 'blank': 'True'}),
- 'processed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'salutation': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
- 'state': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '20', 'blank': 'True'}),
- 'suffix': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'upload_error_message': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
- 'upload_status': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '20', 'blank': 'True'}),
- 'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['auth.User']", 'unique': 'True'}),
- 'user_updated_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0024_add_allow_certificate.py b/common/djangoapps/student/migrations/0024_add_allow_certificate.py
deleted file mode 100644
index 5753f0176e00..000000000000
--- a/common/djangoapps/student/migrations/0024_add_allow_certificate.py
+++ /dev/null
@@ -1,172 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding field 'UserProfile.allow_certificate'
- db.add_column('auth_userprofile', 'allow_certificate',
- self.gf('django.db.models.fields.BooleanField')(default=True),
- keep_default=False)
-
-
- def backwards(self, orm):
- # Deleting field 'UserProfile.allow_certificate'
- db.delete_column('auth_userprofile', 'allow_certificate')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.courseenrollment': {
- 'Meta': {'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.testcenterregistration': {
- 'Meta': {'object_name': 'TestCenterRegistration'},
- 'accommodation_code': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),
- 'accommodation_request': ('django.db.models.fields.CharField', [], {'db_index': 'False', 'max_length': '1024', 'blank': 'True'}),
- 'authorization_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'db_index': 'True'}),
- 'client_authorization_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '20', 'db_index': 'True'}),
- 'confirmed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'eligibility_appointment_date_first': ('django.db.models.fields.DateField', [], {'db_index': 'True'}),
- 'eligibility_appointment_date_last': ('django.db.models.fields.DateField', [], {'db_index': 'True'}),
- 'exam_series_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'processed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'testcenter_user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['student.TestCenterUser']"}),
- 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'upload_error_message': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
- 'upload_status': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '20', 'blank': 'True'}),
- 'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'user_updated_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'})
- },
- 'student.testcenteruser': {
- 'Meta': {'object_name': 'TestCenterUser'},
- 'address_1': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
- 'address_2': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}),
- 'address_3': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}),
- 'candidate_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'db_index': 'True'}),
- 'city': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'client_candidate_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '50', 'db_index': 'True'}),
- 'company_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '50', 'blank': 'True'}),
- 'confirmed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'country': ('django.db.models.fields.CharField', [], {'max_length': '3', 'db_index': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'extension': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '8', 'blank': 'True'}),
- 'fax': ('django.db.models.fields.CharField', [], {'max_length': '35', 'blank': 'True'}),
- 'fax_country_code': ('django.db.models.fields.CharField', [], {'max_length': '3', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
- 'middle_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'phone': ('django.db.models.fields.CharField', [], {'max_length': '35'}),
- 'phone_country_code': ('django.db.models.fields.CharField', [], {'max_length': '3', 'db_index': 'True'}),
- 'postal_code': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '16', 'blank': 'True'}),
- 'processed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'salutation': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
- 'state': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '20', 'blank': 'True'}),
- 'suffix': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'upload_error_message': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
- 'upload_status': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '20', 'blank': 'True'}),
- 'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['auth.User']", 'unique': 'True'}),
- 'user_updated_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0025_auto__add_field_courseenrollmentallowed_auto_enroll.py b/common/djangoapps/student/migrations/0025_auto__add_field_courseenrollmentallowed_auto_enroll.py
deleted file mode 100644
index a60d121de8fd..000000000000
--- a/common/djangoapps/student/migrations/0025_auto__add_field_courseenrollmentallowed_auto_enroll.py
+++ /dev/null
@@ -1,173 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding field 'CourseEnrollmentAllowed.auto_enroll'
- db.add_column('student_courseenrollmentallowed', 'auto_enroll',
- self.gf('django.db.models.fields.BooleanField')(default=False),
- keep_default=False)
-
-
- def backwards(self, orm):
- # Deleting field 'CourseEnrollmentAllowed.auto_enroll'
- db.delete_column('student_courseenrollmentallowed', 'auto_enroll')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.courseenrollment': {
- 'Meta': {'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.testcenterregistration': {
- 'Meta': {'object_name': 'TestCenterRegistration'},
- 'accommodation_code': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),
- 'accommodation_request': ('django.db.models.fields.CharField', [], {'db_index': 'False', 'max_length': '1024', 'blank': 'True'}),
- 'authorization_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'db_index': 'True'}),
- 'client_authorization_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '20', 'db_index': 'True'}),
- 'confirmed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'eligibility_appointment_date_first': ('django.db.models.fields.DateField', [], {'db_index': 'True'}),
- 'eligibility_appointment_date_last': ('django.db.models.fields.DateField', [], {'db_index': 'True'}),
- 'exam_series_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'processed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'testcenter_user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['student.TestCenterUser']"}),
- 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'upload_error_message': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
- 'upload_status': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '20', 'blank': 'True'}),
- 'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'user_updated_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'})
- },
- 'student.testcenteruser': {
- 'Meta': {'object_name': 'TestCenterUser'},
- 'address_1': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
- 'address_2': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}),
- 'address_3': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}),
- 'candidate_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'db_index': 'True'}),
- 'city': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'client_candidate_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '50', 'db_index': 'True'}),
- 'company_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '50', 'blank': 'True'}),
- 'confirmed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'country': ('django.db.models.fields.CharField', [], {'max_length': '3', 'db_index': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'extension': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '8', 'blank': 'True'}),
- 'fax': ('django.db.models.fields.CharField', [], {'max_length': '35', 'blank': 'True'}),
- 'fax_country_code': ('django.db.models.fields.CharField', [], {'max_length': '3', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
- 'middle_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'phone': ('django.db.models.fields.CharField', [], {'max_length': '35'}),
- 'phone_country_code': ('django.db.models.fields.CharField', [], {'max_length': '3', 'db_index': 'True'}),
- 'postal_code': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '16', 'blank': 'True'}),
- 'processed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'salutation': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
- 'state': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '20', 'blank': 'True'}),
- 'suffix': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'upload_error_message': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
- 'upload_status': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '20', 'blank': 'True'}),
- 'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['auth.User']", 'unique': 'True'}),
- 'user_updated_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0026_auto__remove_index_student_testcenterregistration_accommodation_request.py b/common/djangoapps/student/migrations/0026_auto__remove_index_student_testcenterregistration_accommodation_request.py
deleted file mode 100644
index 23fc476348e9..000000000000
--- a/common/djangoapps/student/migrations/0026_auto__remove_index_student_testcenterregistration_accommodation_request.py
+++ /dev/null
@@ -1,180 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-from django.db.utils import DatabaseError
-
-
-class Migration(SchemaMigration):
- """
- Remove an unwanted index from environments that have it.
- This is a one-way migration in that backwards is a no-op and will not undo the removal.
- This migration is only relevant to dev environments that existed before a migration rewrite
- which removed the creation of this index.
- """
-
- def forwards(self, orm):
- try:
- # Removing index on 'TestCenterRegistration', fields ['accommodation_request']
- db.delete_index('student_testcenterregistration', ['accommodation_request'])
- except DatabaseError:
- print "-- skipping delete_index of student_testcenterregistration.accommodation_request (index does not exist)"
-
-
- def backwards(self, orm):
- pass
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.courseenrollment': {
- 'Meta': {'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.testcenterregistration': {
- 'Meta': {'object_name': 'TestCenterRegistration'},
- 'accommodation_code': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),
- 'accommodation_request': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'authorization_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'db_index': 'True'}),
- 'client_authorization_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '20', 'db_index': 'True'}),
- 'confirmed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'eligibility_appointment_date_first': ('django.db.models.fields.DateField', [], {'db_index': 'True'}),
- 'eligibility_appointment_date_last': ('django.db.models.fields.DateField', [], {'db_index': 'True'}),
- 'exam_series_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'processed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'testcenter_user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['student.TestCenterUser']"}),
- 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'upload_error_message': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
- 'upload_status': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '20', 'blank': 'True'}),
- 'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'user_updated_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'})
- },
- 'student.testcenteruser': {
- 'Meta': {'object_name': 'TestCenterUser'},
- 'address_1': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
- 'address_2': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}),
- 'address_3': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}),
- 'candidate_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'db_index': 'True'}),
- 'city': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'client_candidate_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '50', 'db_index': 'True'}),
- 'company_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '50', 'blank': 'True'}),
- 'confirmed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'country': ('django.db.models.fields.CharField', [], {'max_length': '3', 'db_index': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'extension': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '8', 'blank': 'True'}),
- 'fax': ('django.db.models.fields.CharField', [], {'max_length': '35', 'blank': 'True'}),
- 'fax_country_code': ('django.db.models.fields.CharField', [], {'max_length': '3', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
- 'middle_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'phone': ('django.db.models.fields.CharField', [], {'max_length': '35'}),
- 'phone_country_code': ('django.db.models.fields.CharField', [], {'max_length': '3', 'db_index': 'True'}),
- 'postal_code': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '16', 'blank': 'True'}),
- 'processed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'salutation': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
- 'state': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '20', 'blank': 'True'}),
- 'suffix': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'upload_error_message': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
- 'upload_status': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '20', 'blank': 'True'}),
- 'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['auth.User']", 'unique': 'True'}),
- 'user_updated_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0027_add_active_flag_and_mode_to_courseware_enrollment.py b/common/djangoapps/student/migrations/0027_add_active_flag_and_mode_to_courseware_enrollment.py
deleted file mode 100644
index 112dccfe5102..000000000000
--- a/common/djangoapps/student/migrations/0027_add_active_flag_and_mode_to_courseware_enrollment.py
+++ /dev/null
@@ -1,183 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding field 'CourseEnrollment.is_active'
- db.add_column('student_courseenrollment', 'is_active',
- self.gf('django.db.models.fields.BooleanField')(default=True),
- keep_default=False)
-
- # Adding field 'CourseEnrollment.mode'
- db.add_column('student_courseenrollment', 'mode',
- self.gf('django.db.models.fields.CharField')(default='honor', max_length=100),
- keep_default=False)
-
-
- def backwards(self, orm):
- # Deleting field 'CourseEnrollment.is_active'
- db.delete_column('student_courseenrollment', 'is_active')
-
- # Deleting field 'CourseEnrollment.mode'
- db.delete_column('student_courseenrollment', 'mode')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.testcenterregistration': {
- 'Meta': {'object_name': 'TestCenterRegistration'},
- 'accommodation_code': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),
- 'accommodation_request': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'authorization_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'db_index': 'True'}),
- 'client_authorization_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '20', 'db_index': 'True'}),
- 'confirmed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'eligibility_appointment_date_first': ('django.db.models.fields.DateField', [], {'db_index': 'True'}),
- 'eligibility_appointment_date_last': ('django.db.models.fields.DateField', [], {'db_index': 'True'}),
- 'exam_series_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'processed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'testcenter_user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['student.TestCenterUser']"}),
- 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'upload_error_message': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
- 'upload_status': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '20', 'blank': 'True'}),
- 'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'user_updated_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'})
- },
- 'student.testcenteruser': {
- 'Meta': {'object_name': 'TestCenterUser'},
- 'address_1': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
- 'address_2': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}),
- 'address_3': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}),
- 'candidate_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'db_index': 'True'}),
- 'city': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'client_candidate_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '50', 'db_index': 'True'}),
- 'company_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '50', 'blank': 'True'}),
- 'confirmed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'country': ('django.db.models.fields.CharField', [], {'max_length': '3', 'db_index': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'extension': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '8', 'blank': 'True'}),
- 'fax': ('django.db.models.fields.CharField', [], {'max_length': '35', 'blank': 'True'}),
- 'fax_country_code': ('django.db.models.fields.CharField', [], {'max_length': '3', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
- 'middle_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'phone': ('django.db.models.fields.CharField', [], {'max_length': '35'}),
- 'phone_country_code': ('django.db.models.fields.CharField', [], {'max_length': '3', 'db_index': 'True'}),
- 'postal_code': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '16', 'blank': 'True'}),
- 'processed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'salutation': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
- 'state': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '20', 'blank': 'True'}),
- 'suffix': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'upload_error_message': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
- 'upload_status': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '20', 'blank': 'True'}),
- 'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['auth.User']", 'unique': 'True'}),
- 'user_updated_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0028_auto__add_userstanding.py b/common/djangoapps/student/migrations/0028_auto__add_userstanding.py
deleted file mode 100644
index ae66b86963c5..000000000000
--- a/common/djangoapps/student/migrations/0028_auto__add_userstanding.py
+++ /dev/null
@@ -1,188 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'UserStanding'
- db.create_table('student_userstanding', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('user', self.gf('django.db.models.fields.related.ForeignKey')(related_name='standing', unique=True, to=orm['auth.User'])),
- ('account_status', self.gf('django.db.models.fields.CharField')(max_length=31, blank=True)),
- ('changed_by', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], blank=True)),
- ('standing_last_changed_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
- ))
- db.send_create_signal('student', ['UserStanding'])
-
-
- def backwards(self, orm):
- # Deleting model 'UserStanding'
- db.delete_table('student_userstanding')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.testcenterregistration': {
- 'Meta': {'object_name': 'TestCenterRegistration'},
- 'accommodation_code': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),
- 'accommodation_request': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'authorization_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'db_index': 'True'}),
- 'client_authorization_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '20', 'db_index': 'True'}),
- 'confirmed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'eligibility_appointment_date_first': ('django.db.models.fields.DateField', [], {'db_index': 'True'}),
- 'eligibility_appointment_date_last': ('django.db.models.fields.DateField', [], {'db_index': 'True'}),
- 'exam_series_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'processed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'testcenter_user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['student.TestCenterUser']"}),
- 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'upload_error_message': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
- 'upload_status': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '20', 'blank': 'True'}),
- 'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'user_updated_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'})
- },
- 'student.testcenteruser': {
- 'Meta': {'object_name': 'TestCenterUser'},
- 'address_1': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
- 'address_2': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}),
- 'address_3': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}),
- 'candidate_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'db_index': 'True'}),
- 'city': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'client_candidate_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '50', 'db_index': 'True'}),
- 'company_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '50', 'blank': 'True'}),
- 'confirmed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'country': ('django.db.models.fields.CharField', [], {'max_length': '3', 'db_index': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'extension': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '8', 'blank': 'True'}),
- 'fax': ('django.db.models.fields.CharField', [], {'max_length': '35', 'blank': 'True'}),
- 'fax_country_code': ('django.db.models.fields.CharField', [], {'max_length': '3', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
- 'middle_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'phone': ('django.db.models.fields.CharField', [], {'max_length': '35'}),
- 'phone_country_code': ('django.db.models.fields.CharField', [], {'max_length': '3', 'db_index': 'True'}),
- 'postal_code': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '16', 'blank': 'True'}),
- 'processed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'salutation': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
- 'state': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '20', 'blank': 'True'}),
- 'suffix': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'upload_error_message': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
- 'upload_status': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '20', 'blank': 'True'}),
- 'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['auth.User']", 'unique': 'True'}),
- 'user_updated_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0029_add_lookup_table_between_user_and_anonymous_student_id.py b/common/djangoapps/student/migrations/0029_add_lookup_table_between_user_and_anonymous_student_id.py
deleted file mode 100644
index 49755981570e..000000000000
--- a/common/djangoapps/student/migrations/0029_add_lookup_table_between_user_and_anonymous_student_id.py
+++ /dev/null
@@ -1,194 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'AnonymousUserId'
- db.create_table('student_anonymoususerid', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])),
- ('anonymous_user_id', self.gf('django.db.models.fields.CharField')(unique=True, max_length=16)),
- ('course_id', self.gf('django.db.models.fields.CharField')(max_length=255, db_index=True)),
- ))
- db.send_create_signal('student', ['AnonymousUserId'])
-
-
- def backwards(self, orm):
- # Deleting model 'AnonymousUserId'
- db.delete_table('student_anonymoususerid')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.anonymoususerid': {
- 'Meta': {'object_name': 'AnonymousUserId'},
- 'anonymous_user_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '16'}),
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.testcenterregistration': {
- 'Meta': {'object_name': 'TestCenterRegistration'},
- 'accommodation_code': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),
- 'accommodation_request': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'authorization_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'db_index': 'True'}),
- 'client_authorization_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '20', 'db_index': 'True'}),
- 'confirmed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'eligibility_appointment_date_first': ('django.db.models.fields.DateField', [], {'db_index': 'True'}),
- 'eligibility_appointment_date_last': ('django.db.models.fields.DateField', [], {'db_index': 'True'}),
- 'exam_series_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'processed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'testcenter_user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['student.TestCenterUser']"}),
- 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'upload_error_message': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
- 'upload_status': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '20', 'blank': 'True'}),
- 'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'user_updated_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'})
- },
- 'student.testcenteruser': {
- 'Meta': {'object_name': 'TestCenterUser'},
- 'address_1': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
- 'address_2': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}),
- 'address_3': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}),
- 'candidate_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'db_index': 'True'}),
- 'city': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'client_candidate_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '50', 'db_index': 'True'}),
- 'company_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '50', 'blank': 'True'}),
- 'confirmed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'country': ('django.db.models.fields.CharField', [], {'max_length': '3', 'db_index': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'extension': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '8', 'blank': 'True'}),
- 'fax': ('django.db.models.fields.CharField', [], {'max_length': '35', 'blank': 'True'}),
- 'fax_country_code': ('django.db.models.fields.CharField', [], {'max_length': '3', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
- 'middle_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'phone': ('django.db.models.fields.CharField', [], {'max_length': '35'}),
- 'phone_country_code': ('django.db.models.fields.CharField', [], {'max_length': '3', 'db_index': 'True'}),
- 'postal_code': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '16', 'blank': 'True'}),
- 'processed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'salutation': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
- 'state': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '20', 'blank': 'True'}),
- 'suffix': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'upload_error_message': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
- 'upload_status': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '20', 'blank': 'True'}),
- 'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['auth.User']", 'unique': 'True'}),
- 'user_updated_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0029_remove_pearson.py b/common/djangoapps/student/migrations/0029_remove_pearson.py
deleted file mode 100644
index 4e1cb09b4c2f..000000000000
--- a/common/djangoapps/student/migrations/0029_remove_pearson.py
+++ /dev/null
@@ -1,185 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Deleting model 'TestCenterUser'
- db.delete_table('student_testcenteruser')
-
- # Deleting model 'TestCenterRegistration'
- db.delete_table('student_testcenterregistration')
-
-
- def backwards(self, orm):
- # Adding model 'TestCenterUser'
- db.create_table('student_testcenteruser', (
- ('last_name', self.gf('django.db.models.fields.CharField')(max_length=50, db_index=True)),
- ('suffix', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)),
- ('confirmed_at', self.gf('django.db.models.fields.DateTimeField')(null=True, db_index=True)),
- ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True, db_index=True)),
- ('salutation', self.gf('django.db.models.fields.CharField')(max_length=50, blank=True)),
- ('postal_code', self.gf('django.db.models.fields.CharField')(blank=True, max_length=16, db_index=True)),
- ('processed_at', self.gf('django.db.models.fields.DateTimeField')(null=True, db_index=True)),
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('city', self.gf('django.db.models.fields.CharField')(max_length=32, db_index=True)),
- ('first_name', self.gf('django.db.models.fields.CharField')(max_length=30, db_index=True)),
- ('middle_name', self.gf('django.db.models.fields.CharField')(max_length=30, blank=True)),
- ('phone_country_code', self.gf('django.db.models.fields.CharField')(max_length=3, db_index=True)),
- ('upload_status', self.gf('django.db.models.fields.CharField')(blank=True, max_length=20, db_index=True)),
- ('state', self.gf('django.db.models.fields.CharField')(blank=True, max_length=20, db_index=True)),
- ('upload_error_message', self.gf('django.db.models.fields.CharField')(max_length=512, blank=True)),
- ('company_name', self.gf('django.db.models.fields.CharField')(blank=True, max_length=50, db_index=True)),
- ('candidate_id', self.gf('django.db.models.fields.IntegerField')(null=True, db_index=True)),
- ('fax', self.gf('django.db.models.fields.CharField')(max_length=35, blank=True)),
- ('user_updated_at', self.gf('django.db.models.fields.DateTimeField')(db_index=True)),
- ('phone', self.gf('django.db.models.fields.CharField')(max_length=35)),
- ('user', self.gf('django.db.models.fields.related.ForeignKey')(default=None, to=orm['auth.User'], unique=True)),
- ('uploaded_at', self.gf('django.db.models.fields.DateTimeField')(blank=True, null=True, db_index=True)),
- ('extension', self.gf('django.db.models.fields.CharField')(blank=True, max_length=8, db_index=True)),
- ('fax_country_code', self.gf('django.db.models.fields.CharField')(max_length=3, blank=True)),
- ('country', self.gf('django.db.models.fields.CharField')(max_length=3, db_index=True)),
- ('client_candidate_id', self.gf('django.db.models.fields.CharField')(max_length=50, unique=True, db_index=True)),
- ('address_1', self.gf('django.db.models.fields.CharField')(max_length=40)),
- ('address_2', self.gf('django.db.models.fields.CharField')(max_length=40, blank=True)),
- ('address_3', self.gf('django.db.models.fields.CharField')(max_length=40, blank=True)),
- ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True, db_index=True)),
- ))
- db.send_create_signal('student', ['TestCenterUser'])
-
- # Adding model 'TestCenterRegistration'
- db.create_table('student_testcenterregistration', (
- ('client_authorization_id', self.gf('django.db.models.fields.CharField')(max_length=20, unique=True, db_index=True)),
- ('uploaded_at', self.gf('django.db.models.fields.DateTimeField')(null=True, db_index=True)),
- ('user_updated_at', self.gf('django.db.models.fields.DateTimeField')(db_index=True)),
- ('authorization_id', self.gf('django.db.models.fields.IntegerField')(null=True, db_index=True)),
- ('upload_status', self.gf('django.db.models.fields.CharField')(blank=True, max_length=20, db_index=True)),
- ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True, db_index=True)),
- ('confirmed_at', self.gf('django.db.models.fields.DateTimeField')(null=True, db_index=True)),
- ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True, db_index=True)),
- ('accommodation_request', self.gf('django.db.models.fields.CharField')(max_length=1024, blank=True)),
- ('eligibility_appointment_date_first', self.gf('django.db.models.fields.DateField')(db_index=True)),
- ('exam_series_code', self.gf('django.db.models.fields.CharField')(max_length=15, db_index=True)),
- ('processed_at', self.gf('django.db.models.fields.DateTimeField')(null=True, db_index=True)),
- ('upload_error_message', self.gf('django.db.models.fields.CharField')(max_length=512, blank=True)),
- ('accommodation_code', self.gf('django.db.models.fields.CharField')(max_length=64, blank=True)),
- ('course_id', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
- ('testcenter_user', self.gf('django.db.models.fields.related.ForeignKey')(default=None, to=orm['student.TestCenterUser'])),
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('eligibility_appointment_date_last', self.gf('django.db.models.fields.DateField')(db_index=True)),
- ))
- db.send_create_signal('student', ['TestCenterRegistration'])
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0030_auto__chg_field_anonymoususerid_anonymous_user_id.py b/common/djangoapps/student/migrations/0030_auto__chg_field_anonymoususerid_anonymous_user_id.py
deleted file mode 100644
index f379ad6452cc..000000000000
--- a/common/djangoapps/student/migrations/0030_auto__chg_field_anonymoususerid_anonymous_user_id.py
+++ /dev/null
@@ -1,146 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
-
- # Changing field 'AnonymousUserId.anonymous_user_id'
- db.alter_column('student_anonymoususerid', 'anonymous_user_id', self.gf('django.db.models.fields.CharField')(unique=True, max_length=32))
-
- # THIS SQL WAS HAND-CODED
- db.execute("""
- CREATE TABLE student_anonymoususerid_temp_archive
- AS SELECT * FROM student_anonymoususerid WHERE LENGTH(anonymous_user_id) = 16
- """)
- db.execute("""
- DELETE FROM student_anonymoususerid
- WHERE LENGTH(anonymous_user_id) = 16
- """)
-
- def backwards(self, orm):
-
- # Changing field 'AnonymousUserId.anonymous_user_id'
- db.alter_column('student_anonymoususerid', 'anonymous_user_id', self.gf('django.db.models.fields.CharField')(max_length=16, unique=True))
-
- db.execute("DROP TABLE student_anonymoususerid_temp_archive")
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.anonymoususerid': {
- 'Meta': {'object_name': 'AnonymousUserId'},
- 'anonymous_user_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0031_drop_student_anonymoususerid_temp_archive.py b/common/djangoapps/student/migrations/0031_drop_student_anonymoususerid_temp_archive.py
deleted file mode 100644
index bbf31664b9bd..000000000000
--- a/common/djangoapps/student/migrations/0031_drop_student_anonymoususerid_temp_archive.py
+++ /dev/null
@@ -1,132 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import DataMigration
-from django.db import models
-
-class Migration(DataMigration):
-
- def forwards(self, orm):
- "Write your forwards methods here."
- # Note: Remember to use orm['appname.ModelName'] rather than "from appname.models..."
- db.execute("DROP TABLE student_anonymoususerid_temp_archive")
-
- def backwards(self, orm):
- "Write your backwards methods here."
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.anonymoususerid': {
- 'Meta': {'object_name': 'AnonymousUserId'},
- 'anonymous_user_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
- symmetrical = True
diff --git a/common/djangoapps/student/migrations/0032_add_field_UserProfile_country_add_field_UserProfile_city.py b/common/djangoapps/student/migrations/0032_add_field_UserProfile_country_add_field_UserProfile_city.py
deleted file mode 100644
index a4d323e49833..000000000000
--- a/common/djangoapps/student/migrations/0032_add_field_UserProfile_country_add_field_UserProfile_city.py
+++ /dev/null
@@ -1,146 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding field 'UserProfile.country'
- db.add_column('auth_userprofile', 'country',
- self.gf('django_countries.fields.CountryField')(max_length=2, null=True, blank=True),
- keep_default=False)
-
- # Adding field 'UserProfile.city'
- db.add_column('auth_userprofile', 'city',
- self.gf('django.db.models.fields.TextField')(null=True, blank=True),
- keep_default=False)
-
-
- def backwards(self, orm):
- # Deleting field 'UserProfile.country'
- db.delete_column('auth_userprofile', 'country')
-
- # Deleting field 'UserProfile.city'
- db.delete_column('auth_userprofile', 'city')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.anonymoususerid': {
- 'Meta': {'object_name': 'AnonymousUserId'},
- 'anonymous_user_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'city': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0032_auto__add_loginfailures.py b/common/djangoapps/student/migrations/0032_auto__add_loginfailures.py
deleted file mode 100644
index 70919c419849..000000000000
--- a/common/djangoapps/student/migrations/0032_auto__add_loginfailures.py
+++ /dev/null
@@ -1,149 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'LoginFailures'
- db.create_table('student_loginfailures', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])),
- ('failure_count', self.gf('django.db.models.fields.IntegerField')(default=0)),
- ('lockout_until', self.gf('django.db.models.fields.DateTimeField')(null=True)),
- ))
- db.send_create_signal('student', ['LoginFailures'])
-
-
- def backwards(self, orm):
- # Deleting model 'LoginFailures'
- db.delete_table('student_loginfailures')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.anonymoususerid': {
- 'Meta': {'object_name': 'AnonymousUserId'},
- 'anonymous_user_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.loginfailures': {
- 'Meta': {'object_name': 'LoginFailures'},
- 'failure_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lockout_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'city': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0033_auto__add_passwordhistory.py b/common/djangoapps/student/migrations/0033_auto__add_passwordhistory.py
deleted file mode 100644
index c03a45f3f20d..000000000000
--- a/common/djangoapps/student/migrations/0033_auto__add_passwordhistory.py
+++ /dev/null
@@ -1,156 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'PasswordHistory'
- db.create_table('student_passwordhistory', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])),
- ('password', self.gf('django.db.models.fields.CharField')(max_length=128)),
- ('time_set', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)),
- ))
- db.send_create_signal('student', ['PasswordHistory'])
-
-
- def backwards(self, orm):
- # Deleting model 'PasswordHistory'
- db.delete_table('student_passwordhistory')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.anonymoususerid': {
- 'Meta': {'object_name': 'AnonymousUserId'},
- 'anonymous_user_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.loginfailures': {
- 'Meta': {'object_name': 'LoginFailures'},
- 'failure_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lockout_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.passwordhistory': {
- 'Meta': {'object_name': 'PasswordHistory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'time_set': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'city': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0034_auto__add_courseaccessrole.py b/common/djangoapps/student/migrations/0034_auto__add_courseaccessrole.py
deleted file mode 100644
index bf9ce5e9db6f..000000000000
--- a/common/djangoapps/student/migrations/0034_auto__add_courseaccessrole.py
+++ /dev/null
@@ -1,189 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'CourseAccessRole'
- db.create_table('student_courseaccessrole', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])),
- ('org', self.gf('django.db.models.fields.CharField')(db_index=True, max_length=64, blank=True)),
- ('course_id', self.gf('xmodule_django.models.CourseKeyField')(db_index=True, max_length=255, blank=True)),
- ('role', self.gf('django.db.models.fields.CharField')(max_length=64, db_index=True)),
- ))
- db.send_create_signal('student', ['CourseAccessRole'])
-
- # Adding unique constraint on 'CourseAccessRole', fields ['user', 'org', 'course_id', 'role']
- db.create_unique('student_courseaccessrole', ['user_id', 'org', 'course_id', 'role'])
-
-
- # Changing field 'AnonymousUserId.course_id'
- db.alter_column('student_anonymoususerid', 'course_id', self.gf('xmodule_django.models.CourseKeyField')(max_length=255))
-
- # Changing field 'CourseEnrollment.course_id'
- db.alter_column('student_courseenrollment', 'course_id', self.gf('xmodule_django.models.CourseKeyField')(max_length=255))
-
- # Changing field 'CourseEnrollmentAllowed.course_id'
- db.alter_column('student_courseenrollmentallowed', 'course_id', self.gf('xmodule_django.models.CourseKeyField')(max_length=255))
-
- def backwards(self, orm):
- # Removing unique constraint on 'CourseAccessRole', fields ['user', 'org', 'course_id', 'role']
- db.delete_unique('student_courseaccessrole', ['user_id', 'org', 'course_id', 'role'])
-
- # Deleting model 'CourseAccessRole'
- db.delete_table('student_courseaccessrole')
-
-
- # Changing field 'AnonymousUserId.course_id'
- db.alter_column('student_anonymoususerid', 'course_id', self.gf('django.db.models.fields.CharField')(max_length=255))
-
- # Changing field 'CourseEnrollment.course_id'
- db.alter_column('student_courseenrollment', 'course_id', self.gf('django.db.models.fields.CharField')(max_length=255))
-
- # Changing field 'CourseEnrollmentAllowed.course_id'
- db.alter_column('student_courseenrollmentallowed', 'course_id', self.gf('django.db.models.fields.CharField')(max_length=255))
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.anonymoususerid': {
- 'Meta': {'object_name': 'AnonymousUserId'},
- 'anonymous_user_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseaccessrole': {
- 'Meta': {'unique_together': "(('user', 'org', 'course_id', 'role'),)", 'object_name': 'CourseAccessRole'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'org': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),
- 'role': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.loginfailures': {
- 'Meta': {'object_name': 'LoginFailures'},
- 'failure_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lockout_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.passwordhistory': {
- 'Meta': {'object_name': 'PasswordHistory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'time_set': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'city': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0035_access_roles.py b/common/djangoapps/student/migrations/0035_access_roles.py
deleted file mode 100644
index bf7bec2dc6c9..000000000000
--- a/common/djangoapps/student/migrations/0035_access_roles.py
+++ /dev/null
@@ -1,312 +0,0 @@
-# -*- coding: utf-8 -*-
-from south.v2 import DataMigration
-import re
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
-from opaque_keys import InvalidKeyError
-import bson.son
-import logging
-from django.db.models.query_utils import Q
-from django.db.utils import IntegrityError
-from xmodule.modulestore import ModuleStoreEnum
-from xmodule.modulestore.django import modulestore
-from xmodule.modulestore.mixed import MixedModuleStore
-import itertools
-
-log = logging.getLogger(__name__)
-
-
-class Migration(DataMigration):
- """
- Converts course_creator, instructor_, staff_, and betatestuser_ to new table
- """
-
- # Because we instantiate the module store and the modulestore needs this config table to exist.
- depends_on = (
- ("xblock_django", "0001_initial"),
- )
-
- GROUP_ENTRY_RE = re.compile(r'(?Pstaff|instructor|beta_testers|course_creator_group)_?(?P.*)')
-
- def forwards(self, orm):
- """
- Converts group table entries for write access and beta_test roles to course access roles table.
- """
- store = modulestore()
- if isinstance(store, MixedModuleStore):
- self.mongostore = modulestore()._get_modulestore_by_type(ModuleStoreEnum.Type.mongo)
- self.xmlstore = modulestore()._get_modulestore_by_type(ModuleStoreEnum.Type.xml)
- elif store.get_modulestore_type() == ModuleStoreEnum.Type.mongo:
- self.mongostore = store
- self.xmlstore = None
- elif store.get_modulestore_type() == ModuleStoreEnum.Type.xml:
- self.mongostore = None
- self.xmlstore = store
- else:
- return
-
- # Note: Remember to use orm['appname.ModelName'] rather than "from appname.models..."
- # b/c the Groups table had several entries for each course, we need to ensure we process each unique
- # course only once. The below datastructures help ensure that.
- hold = {} # key of course_id_strings with array of group objects. Should only be org scoped entries
- # or deleted courses
- orgs = {} # downcased org to last recorded normal case of the org
- query = Q(name='course_creator_group')
- for role in ['staff', 'instructor', 'beta_testers', ]:
- query = query | Q(name__startswith=role)
- for group in orm['auth.Group'].objects.filter(query).all():
- def _migrate_users(correct_course_key, role, lower_org):
- """
- Get all the users from the old group and migrate to this course key in the new table
- """
- for user in orm['auth.user'].objects.filter(groups=group).all():
- entry = orm['student.courseaccessrole'](
- role=role, user=user,
- org=correct_course_key.org, course_id=correct_course_key
- )
- try:
- entry.save()
- except IntegrityError:
- # already stored
- pass
- orgs[lower_org] = correct_course_key.org
-
- parsed_entry = self.GROUP_ENTRY_RE.match(group.name)
- role = parsed_entry.group('role_id')
- if role == 'course_creator_group':
- for user in orm['auth.user'].objects.filter(groups=group).all():
- entry = orm['student.courseaccessrole'](role=role, user=user)
- entry.save()
- else:
- course_id_string = parsed_entry.group('course_id_string')
- try:
- course_key = SlashSeparatedCourseKey.from_deprecated_string(course_id_string)
- # course_key is the downcased version, get the normal cased one. loc_mapper() has no
- # methods taking downcased SSCK; so, need to do it manually here
- correct_course_key = self._map_downcased_ssck(course_key)
- if correct_course_key is not None:
- _migrate_users(correct_course_key, role, course_key.org)
- except InvalidKeyError:
- # old dotted format, try permutations
- parts = course_id_string.split('.')
- if len(parts) < 3:
- hold.setdefault(course_id_string, []).append(group)
- elif len(parts) == 3:
- course_key = SlashSeparatedCourseKey(*parts)
- correct_course_key = self._map_downcased_ssck(course_key)
- if correct_course_key is None:
- hold.setdefault(course_id_string, []).append(group)
- else:
- _migrate_users(correct_course_key, role, course_key.org)
- else:
- correct_course_key = self.divide_parts_find_key(parts)
- if correct_course_key is None:
- hold.setdefault(course_id_string, []).append(group)
- else:
- _migrate_users(correct_course_key, role, correct_course_key.org)
-
- # see if any in hold were missed above
- for held_auth_scope, groups in hold.iteritems():
- # orgs indexed by downcased org
- held_auth_scope = held_auth_scope.lower()
- if held_auth_scope in orgs:
- for group in groups:
- role = self.GROUP_ENTRY_RE.match(group.name).group('role_id')
- # they have org permission
- for user in orm['auth.user'].objects.filter(groups=group).all():
- entry = orm['student.courseaccessrole'](
- role=role,
- user=user,
- org=orgs[held_auth_scope],
- )
- entry.save()
- else:
- # don't silently skip unexpected roles
- log.warn("Didn't convert roles %s", [group.name for group in groups])
-
- def divide_parts_find_key(self, parts):
- """
- Look for all possible org/course/run patterns from a possibly dotted source
- """
- for org_stop, course_stop in itertools.combinations(range(1, len(parts)), 2):
- org = '.'.join(parts[:org_stop])
- course = '.'.join(parts[org_stop:course_stop])
- run = '.'.join(parts[course_stop:])
- course_key = SlashSeparatedCourseKey(org, course, run)
- correct_course_key = self._map_downcased_ssck(course_key)
- if correct_course_key is not None:
- return correct_course_key
- return None
-
- def backwards(self, orm):
- "Removes the new table."
- # Since this migration is non-destructive (monotonically adds information), I'm not sure what
- # the semantic of backwards should be other than perhaps clearing the table.
- orm['student.courseaccessrole'].objects.all().delete()
-
- def _map_downcased_ssck(self, downcased_ssck):
- """
- Get the normal cased version of this downcased slash sep course key
- """
- if self.mongostore is not None:
- course_son = bson.son.SON([
- ('_id.tag', 'i4x'),
- ('_id.org', re.compile(ur'^{}$'.format(downcased_ssck.org), re.IGNORECASE | re.UNICODE)),
- ('_id.course', re.compile(ur'^{}$'.format(downcased_ssck.course), re.IGNORECASE | re.UNICODE)),
- ('_id.category', 'course'),
- ('_id.name', re.compile(ur'^{}$'.format(downcased_ssck.run), re.IGNORECASE | re.UNICODE)),
- ])
- entry = self.mongostore.collection.find_one(course_son)
- if entry:
- idpart = entry['_id']
- return SlashSeparatedCourseKey(idpart['org'], idpart['course'], idpart['name'])
- if self.xmlstore is not None:
- for course in self.xmlstore.get_courses():
- if (
- course.id.org.lower() == downcased_ssck.org and course.id.course.lower() == downcased_ssck.course
- and course.id.run.lower() == downcased_ssck.run
- ):
- return course.id
- return None
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.anonymoususerid': {
- 'Meta': {'object_name': 'AnonymousUserId'},
- 'anonymous_user_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseaccessrole': {
- 'Meta': {'unique_together': "(('user', 'org', 'course_id', 'role'),)", 'object_name': 'CourseAccessRole'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'org': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),
- 'role': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.loginfailures': {
- 'Meta': {'object_name': 'LoginFailures'},
- 'failure_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lockout_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.passwordhistory': {
- 'Meta': {'object_name': 'PasswordHistory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'time_set': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'city': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
-
- complete_apps = ['student']
- symmetrical = True
diff --git a/common/djangoapps/student/migrations/0036_access_roles_orgless.py b/common/djangoapps/student/migrations/0036_access_roles_orgless.py
deleted file mode 100644
index f3af6b461380..000000000000
--- a/common/djangoapps/student/migrations/0036_access_roles_orgless.py
+++ /dev/null
@@ -1,278 +0,0 @@
-# -*- coding: utf-8 -*-
-from south.v2 import DataMigration
-from xmodule.modulestore.django import modulestore
-import re
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
-import logging
-from django.db.models.query_utils import Q
-from django.db.utils import IntegrityError
-from xmodule.modulestore import ModuleStoreEnum
-import bson.son
-from xmodule.modulestore.mixed import MixedModuleStore
-import itertools
-
-log = logging.getLogger(__name__)
-
-
-class Migration(DataMigration):
- """
- Converts course_creator, instructor_, staff_, and betatestuser_ to new table
- """
-
- GROUP_ENTRY_RE = re.compile(r'(?Pstaff|instructor|beta_testers)_(?P\S*)')
-
- def forwards(self, orm):
- """
- Converts group table entries for write access and beta_test roles to course access roles table.
- """
- store = modulestore()
- if isinstance(store, MixedModuleStore):
- self.mongostore = modulestore()._get_modulestore_by_type(ModuleStoreEnum.Type.mongo)
- self.xmlstore = modulestore()._get_modulestore_by_type(ModuleStoreEnum.Type.xml)
- elif store.get_modulestore_type() == ModuleStoreEnum.Type.mongo:
- self.mongostore = store
- self.xmlstore = None
- elif store.get_modulestore_type() == ModuleStoreEnum.Type.xml:
- self.mongostore = None
- self.xmlstore = store
- else:
- return
-
- query = Q(name__startswith='staff') | Q(name__startswith='instructor') | Q(name__startswith='beta_testers')
- for group in orm['auth.Group'].objects.filter(query).exclude(name__contains="/").all():
- def _migrate_users(correct_course_key, role):
- """
- Get all the users from the old group and migrate to this course key in the new table
- """
- log.info(
- u'Giving %s users access to %s',
- group.name, correct_course_key
- )
- for user in orm['auth.user'].objects.filter(groups=group).all():
- entry = orm['student.courseaccessrole'](
- role=role,
- user=user,
- org=correct_course_key.org,
- course_id=correct_course_key,
- )
- try:
- entry.save()
- except IntegrityError:
- pass
-
- parsed_entry = self.GROUP_ENTRY_RE.search(group.name)
- if parsed_entry is None:
- log.warn('Ignoring an unexpected unparsable entry %s', group.name)
- continue
- role = parsed_entry.group('role_id')
- course_id_string = parsed_entry.group('course_id_string')
- # if it's a full course_id w/ dots, ignore it
- if u'/' not in course_id_string and not self.dotted_course(course_id_string):
- # check new table to see if it's been added as org permission
- if not orm['student.courseaccessrole'].objects.filter(
- role=role,
- org__iexact=course_id_string,
- ).exists():
- # old auth was of form role_coursenum. Grant access to all such courses wildcarding org and run
- # look in xml for matching courses
- if self.xmlstore is not None:
- for course in self.xmlstore.get_courses():
- if course_id_string == course.id.course.lower():
- _migrate_users(course.id, role)
-
- if self.mongostore is not None:
- mongo_query = re.compile(ur'^{}$'.format(course_id_string), re.IGNORECASE)
- for mongo_entry in self.mongostore.collection.find(
- {"_id.category": "course", "_id.course": mongo_query}, fields=["_id"]
- ):
- mongo_id_dict = mongo_entry['_id']
- course_key = SlashSeparatedCourseKey(
- mongo_id_dict['org'], mongo_id_dict['course'], mongo_id_dict['name']
- )
- _migrate_users(course_key, role)
-
- def dotted_course(self, parts):
- """
- Look for all possible org/course/run patterns from a possibly dotted source
- """
- for org_stop, course_stop in itertools.combinations(range(1, len(parts)), 2):
- org = '.'.join(parts[:org_stop])
- course = '.'.join(parts[org_stop:course_stop])
- run = '.'.join(parts[course_stop:])
- course_key = SlashSeparatedCourseKey(org, course, run)
- correct_course_key = self._map_downcased_ssck(course_key)
- if correct_course_key is not None:
- return correct_course_key
- return False
-
- def _map_downcased_ssck(self, downcased_ssck):
- """
- Get the normal cased version of this downcased slash sep course key
- """
- if self.mongostore is not None:
- course_son = bson.son.SON([
- ('_id.tag', 'i4x'),
- ('_id.org', re.compile(ur'^{}$'.format(downcased_ssck.org), re.IGNORECASE | re.UNICODE)),
- ('_id.course', re.compile(ur'^{}$'.format(downcased_ssck.course), re.IGNORECASE | re.UNICODE)),
- ('_id.category', 'course'),
- ('_id.name', re.compile(ur'^{}$'.format(downcased_ssck.run), re.IGNORECASE | re.UNICODE)),
- ])
- entry = self.mongostore.collection.find_one(course_son)
- if entry:
- idpart = entry['_id']
- return SlashSeparatedCourseKey(idpart['org'], idpart['course'], idpart['name'])
- if self.xmlstore is not None:
- for course in self.xmlstore.get_courses():
- if (
- course.id.org.lower() == downcased_ssck.org and course.id.course.lower() == downcased_ssck.course
- and course.id.run.lower() == downcased_ssck.run
- ):
- return course.id
- return None
-
- def backwards(self, orm):
- "No obvious way to reverse just this migration, but reversing 0035 will reverse this."
- pass
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.anonymoususerid': {
- 'Meta': {'object_name': 'AnonymousUserId'},
- 'anonymous_user_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseaccessrole': {
- 'Meta': {'unique_together': "(('user', 'org', 'course_id', 'role'),)", 'object_name': 'CourseAccessRole'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'org': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),
- 'role': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.loginfailures': {
- 'Meta': {'object_name': 'LoginFailures'},
- 'failure_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lockout_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.passwordhistory': {
- 'Meta': {'object_name': 'PasswordHistory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'time_set': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'city': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
-
- complete_apps = ['student']
- symmetrical = True
diff --git a/common/djangoapps/student/migrations/0037_auto__add_courseregistrationcode.py b/common/djangoapps/student/migrations/0037_auto__add_courseregistrationcode.py
deleted file mode 100644
index c60425df8afb..000000000000
--- a/common/djangoapps/student/migrations/0037_auto__add_courseregistrationcode.py
+++ /dev/null
@@ -1,179 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'CourseRegistrationCode'
- db.create_table('student_courseregistrationcode', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('code', self.gf('django.db.models.fields.CharField')(max_length=32, db_index=True)),
- ('course_id', self.gf('xmodule_django.models.CourseKeyField')(max_length=255, db_index=True)),
- ('transaction_group_name', self.gf('django.db.models.fields.CharField')(db_index=True, max_length=255, null=True, blank=True)),
- ('created_by', self.gf('django.db.models.fields.related.ForeignKey')(related_name='created_by_user', to=orm['auth.User'])),
- ('created_at', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 6, 24, 0, 0))),
- ('redeemed_by', self.gf('django.db.models.fields.related.ForeignKey')(related_name='redeemed_by_user', null=True, to=orm['auth.User'])),
- ('redeemed_at', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 6, 24, 0, 0), null=True)),
- ))
- db.send_create_signal('student', ['CourseRegistrationCode'])
-
-
- def backwards(self, orm):
- # Deleting model 'CourseRegistrationCode'
- db.delete_table('student_courseregistrationcode')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.anonymoususerid': {
- 'Meta': {'object_name': 'AnonymousUserId'},
- 'anonymous_user_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseaccessrole': {
- 'Meta': {'unique_together': "(('user', 'org', 'course_id', 'role'),)", 'object_name': 'CourseAccessRole'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'org': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),
- 'role': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.courseregistrationcode': {
- 'Meta': {'object_name': 'CourseRegistrationCode'},
- 'code': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2014, 6, 24, 0, 0)'}),
- 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'created_by_user'", 'to': "orm['auth.User']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'redeemed_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2014, 6, 24, 0, 0)', 'null': 'True'}),
- 'redeemed_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'redeemed_by_user'", 'null': 'True', 'to': "orm['auth.User']"}),
- 'transaction_group_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'null': 'True', 'blank': 'True'})
- },
- 'student.loginfailures': {
- 'Meta': {'object_name': 'LoginFailures'},
- 'failure_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lockout_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.passwordhistory': {
- 'Meta': {'object_name': 'PasswordHistory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'time_set': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'city': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0038_auto__add_usersignupsource.py b/common/djangoapps/student/migrations/0038_auto__add_usersignupsource.py
deleted file mode 100644
index faa725b7949a..000000000000
--- a/common/djangoapps/student/migrations/0038_auto__add_usersignupsource.py
+++ /dev/null
@@ -1,180 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'UserSignupSource'
- db.create_table('student_usersignupsource', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('user_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])),
- ('site', self.gf('django.db.models.fields.CharField')(max_length=255, db_index=True)),
- ))
- db.send_create_signal('student', ['UserSignupSource'])
-
-
- def backwards(self, orm):
- # Deleting model 'UserSignupSource'
- db.delete_table('student_usersignupsource')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.anonymoususerid': {
- 'Meta': {'object_name': 'AnonymousUserId'},
- 'anonymous_user_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseaccessrole': {
- 'Meta': {'unique_together': "(('user', 'org', 'course_id', 'role'),)", 'object_name': 'CourseAccessRole'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'org': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),
- 'role': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.courseregistrationcode': {
- 'Meta': {'object_name': 'CourseRegistrationCode'},
- 'code': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2014, 6, 25, 0, 0)'}),
- 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'created_by_user'", 'to': "orm['auth.User']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'redeemed_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2014, 6, 25, 0, 0)', 'null': 'True'}),
- 'redeemed_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'redeemed_by_user'", 'null': 'True', 'to': "orm['auth.User']"}),
- 'transaction_group_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'null': 'True', 'blank': 'True'})
- },
- 'student.loginfailures': {
- 'Meta': {'object_name': 'LoginFailures'},
- 'failure_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lockout_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.passwordhistory': {
- 'Meta': {'object_name': 'PasswordHistory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'time_set': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'city': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.usersignupsource': {
- 'Meta': {'object_name': 'UserSignupSource'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'site': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'user_id': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0039_auto__del_courseregistrationcode.py b/common/djangoapps/student/migrations/0039_auto__del_courseregistrationcode.py
deleted file mode 100644
index 441b52ea2c12..000000000000
--- a/common/djangoapps/student/migrations/0039_auto__del_courseregistrationcode.py
+++ /dev/null
@@ -1,174 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Deleting model 'CourseRegistrationCode'
- db.delete_table('student_courseregistrationcode')
-
-
- def backwards(self, orm):
- # Adding model 'CourseRegistrationCode'
- db.create_table('student_courseregistrationcode', (
- ('code', self.gf('django.db.models.fields.CharField')(max_length=32, db_index=True)),
- ('transaction_group_name', self.gf('django.db.models.fields.CharField')(blank=True, max_length=255, null=True, db_index=True)),
- ('redeemed_by', self.gf('django.db.models.fields.related.ForeignKey')(related_name='redeemed_by_user', null=True, to=orm['auth.User'])),
- ('course_id', self.gf('xmodule_django.models.CourseKeyField')(max_length=255, db_index=True)),
- ('redeemed_at', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 6, 25, 0, 0), null=True)),
- ('created_at', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 6, 25, 0, 0))),
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('created_by', self.gf('django.db.models.fields.related.ForeignKey')(related_name='created_by_user', to=orm['auth.User'])),
- ))
- db.send_create_signal('student', ['CourseRegistrationCode'])
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.anonymoususerid': {
- 'Meta': {'object_name': 'AnonymousUserId'},
- 'anonymous_user_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseaccessrole': {
- 'Meta': {'unique_together': "(('user', 'org', 'course_id', 'role'),)", 'object_name': 'CourseAccessRole'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'org': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),
- 'role': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.loginfailures': {
- 'Meta': {'object_name': 'LoginFailures'},
- 'failure_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lockout_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.passwordhistory': {
- 'Meta': {'object_name': 'PasswordHistory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'time_set': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'city': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.usersignupsource': {
- 'Meta': {'object_name': 'UserSignupSource'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'site': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'user_id': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0040_auto__del_field_usersignupsource_user_id__add_field_usersignupsource_u.py b/common/djangoapps/student/migrations/0040_auto__del_field_usersignupsource_user_id__add_field_usersignupsource_u.py
deleted file mode 100644
index cabacf8de767..000000000000
--- a/common/djangoapps/student/migrations/0040_auto__del_field_usersignupsource_user_id__add_field_usersignupsource_u.py
+++ /dev/null
@@ -1,172 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Deleting field 'UserSignupSource.user_id'
- db.delete_column('student_usersignupsource', 'user_id_id')
-
- # Adding field 'UserSignupSource.user'
- db.add_column('student_usersignupsource', 'user',
- self.gf('django.db.models.fields.related.ForeignKey')(default=0, to=orm['auth.User']),
- keep_default=False)
-
-
- def backwards(self, orm):
-
- # User chose to not deal with backwards NULL issues for 'UserSignupSource.user_id'
- raise RuntimeError("Cannot reverse this migration. 'UserSignupSource.user_id' and its values cannot be restored.")
- # Deleting field 'UserSignupSource.user'
- db.delete_column('student_usersignupsource', 'user_id')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.anonymoususerid': {
- 'Meta': {'object_name': 'AnonymousUserId'},
- 'anonymous_user_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseaccessrole': {
- 'Meta': {'unique_together': "(('user', 'org', 'course_id', 'role'),)", 'object_name': 'CourseAccessRole'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'org': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),
- 'role': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.loginfailures': {
- 'Meta': {'object_name': 'LoginFailures'},
- 'failure_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lockout_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.passwordhistory': {
- 'Meta': {'object_name': 'PasswordHistory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'time_set': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'city': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.usersignupsource': {
- 'Meta': {'object_name': 'UserSignupSource'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'site': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0041_add_dashboard_config.py b/common/djangoapps/student/migrations/0041_add_dashboard_config.py
deleted file mode 100644
index dbf6da578c2a..000000000000
--- a/common/djangoapps/student/migrations/0041_add_dashboard_config.py
+++ /dev/null
@@ -1,177 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'DashboardConfiguration'
- db.create_table('student_dashboardconfiguration', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('change_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
- ('changed_by', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, on_delete=models.PROTECT)),
- ('enabled', self.gf('django.db.models.fields.BooleanField')(default=False)),
- ('recent_enrollment_time_delta', self.gf('django.db.models.fields.PositiveIntegerField')(default=0)),
- ))
- db.send_create_signal('student', ['DashboardConfiguration'])
-
- def backwards(self, orm):
- # Deleting model 'DashboardConfiguration'
- db.delete_table('student_dashboardconfiguration')
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.anonymoususerid': {
- 'Meta': {'object_name': 'AnonymousUserId'},
- 'anonymous_user_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseaccessrole': {
- 'Meta': {'unique_together': "(('user', 'org', 'course_id', 'role'),)", 'object_name': 'CourseAccessRole'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'org': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),
- 'role': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.dashboardconfiguration': {
- 'Meta': {'object_name': 'DashboardConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'recent_enrollment_time_delta': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'})
- },
- 'student.loginfailures': {
- 'Meta': {'object_name': 'LoginFailures'},
- 'failure_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lockout_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.passwordhistory': {
- 'Meta': {'object_name': 'PasswordHistory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'time_set': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'city': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.usersignupsource': {
- 'Meta': {'object_name': 'UserSignupSource'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'site': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0042_grant_sales_admin_roles.py b/common/djangoapps/student/migrations/0042_grant_sales_admin_roles.py
deleted file mode 100644
index ccbb58f7fcca..000000000000
--- a/common/djangoapps/student/migrations/0042_grant_sales_admin_roles.py
+++ /dev/null
@@ -1,184 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import DataMigration
-from django.db import models, IntegrityError
-
-
-class Migration(DataMigration):
-
- def forwards(self, orm):
- """Map all Finance Admins to Sales Admins."""
- finance_admins = orm['student.courseaccessrole'].objects.filter(role='finance_admin')
-
- for finance_admin in finance_admins:
- sales_admin = orm['student.courseaccessrole'](
- role='sales_admin',
- user=finance_admin.user,
- org=finance_admin.org,
- course_id=finance_admin.course_id,
- )
- try:
- sales_admin.save()
- except IntegrityError:
- pass # If sales admin roles exist, continue.
-
- def backwards(self, orm):
- """Remove all sales administrators, as they did not exist before this migration. """
- sales_admins = orm['student.courseaccessrole'].objects.filter(role='sales_admin')
- sales_admins.delete()
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.anonymoususerid': {
- 'Meta': {'object_name': 'AnonymousUserId'},
- 'anonymous_user_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseaccessrole': {
- 'Meta': {'unique_together': "(('user', 'org', 'course_id', 'role'),)", 'object_name': 'CourseAccessRole'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'org': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),
- 'role': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.dashboardconfiguration': {
- 'Meta': {'object_name': 'DashboardConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'recent_enrollment_time_delta': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'})
- },
- 'student.loginfailures': {
- 'Meta': {'object_name': 'LoginFailures'},
- 'failure_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lockout_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.passwordhistory': {
- 'Meta': {'object_name': 'PasswordHistory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'time_set': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'city': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.usersignupsource': {
- 'Meta': {'object_name': 'UserSignupSource'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'site': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
- symmetrical = True
diff --git a/common/djangoapps/student/migrations/0043_auto__add_linkedinaddtoprofileconfiguration.py b/common/djangoapps/student/migrations/0043_auto__add_linkedinaddtoprofileconfiguration.py
deleted file mode 100644
index 41ec46effd48..000000000000
--- a/common/djangoapps/student/migrations/0043_auto__add_linkedinaddtoprofileconfiguration.py
+++ /dev/null
@@ -1,187 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'LinkedInAddToProfileConfiguration'
- db.create_table('student_linkedinaddtoprofileconfiguration', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('change_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
- ('changed_by', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, on_delete=models.PROTECT)),
- ('enabled', self.gf('django.db.models.fields.BooleanField')(default=False)),
- ('dashboard_tracking_code', self.gf('django.db.models.fields.TextField')(blank=True)),
- ))
- db.send_create_signal('student', ['LinkedInAddToProfileConfiguration'])
-
-
- def backwards(self, orm):
- # Deleting model 'LinkedInAddToProfileConfiguration'
- db.delete_table('student_linkedinaddtoprofileconfiguration')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.anonymoususerid': {
- 'Meta': {'object_name': 'AnonymousUserId'},
- 'anonymous_user_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseaccessrole': {
- 'Meta': {'unique_together': "(('user', 'org', 'course_id', 'role'),)", 'object_name': 'CourseAccessRole'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'org': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),
- 'role': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.dashboardconfiguration': {
- 'Meta': {'object_name': 'DashboardConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'recent_enrollment_time_delta': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'})
- },
- 'student.linkedinaddtoprofileconfiguration': {
- 'Meta': {'object_name': 'LinkedInAddToProfileConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'dashboard_tracking_code': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.loginfailures': {
- 'Meta': {'object_name': 'LoginFailures'},
- 'failure_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lockout_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.passwordhistory': {
- 'Meta': {'object_name': 'PasswordHistory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'time_set': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'city': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.usersignupsource': {
- 'Meta': {'object_name': 'UserSignupSource'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'site': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
\ No newline at end of file
diff --git a/common/djangoapps/student/migrations/0044_linkedin_add_company_identifier.py b/common/djangoapps/student/migrations/0044_linkedin_add_company_identifier.py
deleted file mode 100644
index 0f6b749591d3..000000000000
--- a/common/djangoapps/student/migrations/0044_linkedin_add_company_identifier.py
+++ /dev/null
@@ -1,183 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding field 'LinkedInAddToProfileConfiguration.company_identifier'
- db.add_column('student_linkedinaddtoprofileconfiguration', 'company_identifier',
- self.gf('django.db.models.fields.TextField')(default=''),
- keep_default=False)
-
-
- def backwards(self, orm):
- # Deleting field 'LinkedInAddToProfileConfiguration.company_identifier'
- db.delete_column('student_linkedinaddtoprofileconfiguration', 'company_identifier')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.anonymoususerid': {
- 'Meta': {'object_name': 'AnonymousUserId'},
- 'anonymous_user_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseaccessrole': {
- 'Meta': {'unique_together': "(('user', 'org', 'course_id', 'role'),)", 'object_name': 'CourseAccessRole'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'org': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),
- 'role': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.dashboardconfiguration': {
- 'Meta': {'object_name': 'DashboardConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'recent_enrollment_time_delta': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'})
- },
- 'student.linkedinaddtoprofileconfiguration': {
- 'Meta': {'object_name': 'LinkedInAddToProfileConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'company_identifier': ('django.db.models.fields.TextField', [], {}),
- 'dashboard_tracking_code': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.loginfailures': {
- 'Meta': {'object_name': 'LoginFailures'},
- 'failure_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lockout_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.passwordhistory': {
- 'Meta': {'object_name': 'PasswordHistory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'time_set': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'city': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.usersignupsource': {
- 'Meta': {'object_name': 'UserSignupSource'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'site': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
\ No newline at end of file
diff --git a/common/djangoapps/student/migrations/0045_add_trk_partner_to_linkedin_config.py b/common/djangoapps/student/migrations/0045_add_trk_partner_to_linkedin_config.py
deleted file mode 100644
index 87128512d42d..000000000000
--- a/common/djangoapps/student/migrations/0045_add_trk_partner_to_linkedin_config.py
+++ /dev/null
@@ -1,184 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding field 'LinkedInAddToProfileConfiguration.trk_partner_name'
- db.add_column('student_linkedinaddtoprofileconfiguration', 'trk_partner_name',
- self.gf('django.db.models.fields.CharField')(default='', max_length=10, blank=True),
- keep_default=False)
-
-
- def backwards(self, orm):
- # Deleting field 'LinkedInAddToProfileConfiguration.trk_partner_name'
- db.delete_column('student_linkedinaddtoprofileconfiguration', 'trk_partner_name')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.anonymoususerid': {
- 'Meta': {'object_name': 'AnonymousUserId'},
- 'anonymous_user_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseaccessrole': {
- 'Meta': {'unique_together': "(('user', 'org', 'course_id', 'role'),)", 'object_name': 'CourseAccessRole'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'org': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),
- 'role': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.dashboardconfiguration': {
- 'Meta': {'object_name': 'DashboardConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'recent_enrollment_time_delta': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'})
- },
- 'student.linkedinaddtoprofileconfiguration': {
- 'Meta': {'object_name': 'LinkedInAddToProfileConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'company_identifier': ('django.db.models.fields.TextField', [], {}),
- 'dashboard_tracking_code': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'trk_partner_name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '10', 'blank': 'True'})
- },
- 'student.loginfailures': {
- 'Meta': {'object_name': 'LoginFailures'},
- 'failure_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lockout_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.passwordhistory': {
- 'Meta': {'object_name': 'PasswordHistory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'time_set': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'city': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.usersignupsource': {
- 'Meta': {'object_name': 'UserSignupSource'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'site': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0046_auto__add_entranceexamconfiguration__add_unique_entranceexamconfigurat.py b/common/djangoapps/student/migrations/0046_auto__add_entranceexamconfiguration__add_unique_entranceexamconfigurat.py
deleted file mode 100644
index a0373d043eef..000000000000
--- a/common/djangoapps/student/migrations/0046_auto__add_entranceexamconfiguration__add_unique_entranceexamconfigurat.py
+++ /dev/null
@@ -1,205 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'EntranceExamConfiguration'
- db.create_table('student_entranceexamconfiguration', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])),
- ('course_id', self.gf('xmodule_django.models.CourseKeyField')(max_length=255, db_index=True)),
- ('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, null=True, db_index=True, blank=True)),
- ('updated', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, db_index=True, blank=True)),
- ('skip_entrance_exam', self.gf('django.db.models.fields.BooleanField')(default=True)),
- ))
- db.send_create_signal('student', ['EntranceExamConfiguration'])
-
- # Adding unique constraint on 'EntranceExamConfiguration', fields ['user', 'course_id']
- db.create_unique('student_entranceexamconfiguration', ['user_id', 'course_id'])
-
-
- def backwards(self, orm):
- # Removing unique constraint on 'EntranceExamConfiguration', fields ['user', 'course_id']
- db.delete_unique('student_entranceexamconfiguration', ['user_id', 'course_id'])
-
- # Deleting model 'EntranceExamConfiguration'
- db.delete_table('student_entranceexamconfiguration')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.anonymoususerid': {
- 'Meta': {'object_name': 'AnonymousUserId'},
- 'anonymous_user_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseaccessrole': {
- 'Meta': {'unique_together': "(('user', 'org', 'course_id', 'role'),)", 'object_name': 'CourseAccessRole'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'org': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),
- 'role': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.dashboardconfiguration': {
- 'Meta': {'object_name': 'DashboardConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'recent_enrollment_time_delta': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'})
- },
- 'student.entranceexamconfiguration': {
- 'Meta': {'unique_together': "(('user', 'course_id'),)", 'object_name': 'EntranceExamConfiguration'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'skip_entrance_exam': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.linkedinaddtoprofileconfiguration': {
- 'Meta': {'object_name': 'LinkedInAddToProfileConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'company_identifier': ('django.db.models.fields.TextField', [], {}),
- 'dashboard_tracking_code': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'trk_partner_name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '10', 'blank': 'True'})
- },
- 'student.loginfailures': {
- 'Meta': {'object_name': 'LoginFailures'},
- 'failure_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lockout_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.passwordhistory': {
- 'Meta': {'object_name': 'PasswordHistory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'time_set': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'city': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.usersignupsource': {
- 'Meta': {'object_name': 'UserSignupSource'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'site': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
\ No newline at end of file
diff --git a/common/djangoapps/student/migrations/0047_add_bio_field.py b/common/djangoapps/student/migrations/0047_add_bio_field.py
deleted file mode 100644
index 33f42d2e6573..000000000000
--- a/common/djangoapps/student/migrations/0047_add_bio_field.py
+++ /dev/null
@@ -1,194 +0,0 @@
-# -*- coding: utf-8 -*-
-from south.utils import datetime_utils as datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding field 'UserProfile.bio'
- db.add_column('auth_userprofile', 'bio',
- self.gf('django.db.models.fields.CharField')(max_length=3000, null=True, blank=True, db_index=False),
- keep_default=False)
-
-
- def backwards(self, orm):
- # Deleting field 'UserProfile.bio'
- db.delete_column('auth_userprofile', 'bio')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.anonymoususerid': {
- 'Meta': {'object_name': 'AnonymousUserId'},
- 'anonymous_user_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseaccessrole': {
- 'Meta': {'unique_together': "(('user', 'org', 'course_id', 'role'),)", 'object_name': 'CourseAccessRole'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'org': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),
- 'role': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.dashboardconfiguration': {
- 'Meta': {'object_name': 'DashboardConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'recent_enrollment_time_delta': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'})
- },
- 'student.entranceexamconfiguration': {
- 'Meta': {'unique_together': "(('user', 'course_id'),)", 'object_name': 'EntranceExamConfiguration'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'skip_entrance_exam': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.linkedinaddtoprofileconfiguration': {
- 'Meta': {'object_name': 'LinkedInAddToProfileConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'company_identifier': ('django.db.models.fields.TextField', [], {}),
- 'dashboard_tracking_code': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'trk_partner_name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '10', 'blank': 'True'})
- },
- 'student.loginfailures': {
- 'Meta': {'object_name': 'LoginFailures'},
- 'failure_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lockout_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.passwordhistory': {
- 'Meta': {'object_name': 'PasswordHistory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'time_set': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'bio': ('django.db.models.fields.CharField', [], {'db_index': 'False', 'null': 'True', 'blank': 'True'}),
- 'city': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.usersignupsource': {
- 'Meta': {'object_name': 'UserSignupSource'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'site': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
\ No newline at end of file
diff --git a/common/djangoapps/student/migrations/0048_add_profile_image_version.py b/common/djangoapps/student/migrations/0048_add_profile_image_version.py
deleted file mode 100644
index 80e14e2f72c9..000000000000
--- a/common/djangoapps/student/migrations/0048_add_profile_image_version.py
+++ /dev/null
@@ -1,195 +0,0 @@
-# -*- coding: utf-8 -*-
-from south.utils import datetime_utils as datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding field 'UserProfile.profile_image_uploaded_at'
- db.add_column('auth_userprofile', 'profile_image_uploaded_at',
- self.gf('django.db.models.fields.DateTimeField')(null=True),
- keep_default=False)
-
-
- def backwards(self, orm):
- # Deleting field 'UserProfile.profile_image_uploaded_at'
- db.delete_column('auth_userprofile', 'profile_image_uploaded_at')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.anonymoususerid': {
- 'Meta': {'object_name': 'AnonymousUserId'},
- 'anonymous_user_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseaccessrole': {
- 'Meta': {'unique_together': "(('user', 'org', 'course_id', 'role'),)", 'object_name': 'CourseAccessRole'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'org': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),
- 'role': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.dashboardconfiguration': {
- 'Meta': {'object_name': 'DashboardConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'recent_enrollment_time_delta': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'})
- },
- 'student.entranceexamconfiguration': {
- 'Meta': {'unique_together': "(('user', 'course_id'),)", 'object_name': 'EntranceExamConfiguration'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'skip_entrance_exam': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.linkedinaddtoprofileconfiguration': {
- 'Meta': {'object_name': 'LinkedInAddToProfileConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'company_identifier': ('django.db.models.fields.TextField', [], {}),
- 'dashboard_tracking_code': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'trk_partner_name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '10', 'blank': 'True'})
- },
- 'student.loginfailures': {
- 'Meta': {'object_name': 'LoginFailures'},
- 'failure_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lockout_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.passwordhistory': {
- 'Meta': {'object_name': 'PasswordHistory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'time_set': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'bio': ('django.db.models.fields.CharField', [], {'max_length': '3000', 'db_index': 'False', 'null': 'True', 'blank': 'True'}),
- 'city': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'has_profile_image': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.usersignupsource': {
- 'Meta': {'object_name': 'UserSignupSource'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'site': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0049_auto__add_languageproficiency__add_unique_languageproficiency_code_use.py b/common/djangoapps/student/migrations/0049_auto__add_languageproficiency__add_unique_languageproficiency_code_use.py
deleted file mode 100644
index 252e3f03c495..000000000000
--- a/common/djangoapps/student/migrations/0049_auto__add_languageproficiency__add_unique_languageproficiency_code_use.py
+++ /dev/null
@@ -1,210 +0,0 @@
-# -*- coding: utf-8 -*-
-from south.utils import datetime_utils as datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'LanguageProficiency'
- db.create_table('student_languageproficiency', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('user_profile', self.gf('django.db.models.fields.related.ForeignKey')(related_name='language_proficiencies', to=orm['student.UserProfile'])),
- ('code', self.gf('django.db.models.fields.CharField')(max_length=16)),
- ))
- db.send_create_signal('student', ['LanguageProficiency'])
-
- # Adding unique constraint on 'LanguageProficiency', fields ['code', 'user_profile']
- db.create_unique('student_languageproficiency', ['code', 'user_profile_id'])
-
-
- def backwards(self, orm):
- # Removing unique constraint on 'LanguageProficiency', fields ['code', 'user_profile']
- db.delete_unique('student_languageproficiency', ['code', 'user_profile_id'])
-
- # Deleting model 'LanguageProficiency'
- db.delete_table('student_languageproficiency')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.anonymoususerid': {
- 'Meta': {'object_name': 'AnonymousUserId'},
- 'anonymous_user_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseaccessrole': {
- 'Meta': {'unique_together': "(('user', 'org', 'course_id', 'role'),)", 'object_name': 'CourseAccessRole'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'org': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),
- 'role': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.dashboardconfiguration': {
- 'Meta': {'object_name': 'DashboardConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'recent_enrollment_time_delta': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'})
- },
- 'student.entranceexamconfiguration': {
- 'Meta': {'unique_together': "(('user', 'course_id'),)", 'object_name': 'EntranceExamConfiguration'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'skip_entrance_exam': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.languageproficiency': {
- 'Meta': {'unique_together': "(('code', 'user_profile'),)", 'object_name': 'LanguageProficiency'},
- 'code': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user_profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'language_proficiencies'", 'to': "orm['student.UserProfile']"})
- },
- 'student.linkedinaddtoprofileconfiguration': {
- 'Meta': {'object_name': 'LinkedInAddToProfileConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'company_identifier': ('django.db.models.fields.TextField', [], {}),
- 'dashboard_tracking_code': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'trk_partner_name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '10', 'blank': 'True'})
- },
- 'student.loginfailures': {
- 'Meta': {'object_name': 'LoginFailures'},
- 'failure_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lockout_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.passwordhistory': {
- 'Meta': {'object_name': 'PasswordHistory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'time_set': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'bio': ('django.db.models.fields.CharField', [], {'max_length': '3000', 'db_index': 'False', 'null': 'True', 'blank': 'True'}),
- 'city': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'profile_image_uploaded_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.usersignupsource': {
- 'Meta': {'object_name': 'UserSignupSource'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'site': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
\ No newline at end of file
diff --git a/common/djangoapps/student/migrations/0050_auto__add_manualenrollmentaudit.py b/common/djangoapps/student/migrations/0050_auto__add_manualenrollmentaudit.py
deleted file mode 100644
index 90c3025d5eaa..000000000000
--- a/common/djangoapps/student/migrations/0050_auto__add_manualenrollmentaudit.py
+++ /dev/null
@@ -1,216 +0,0 @@
-# -*- coding: utf-8 -*-
-from south.utils import datetime_utils as datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'ManualEnrollmentAudit'
- db.create_table('student_manualenrollmentaudit', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('enrollment', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['student.CourseEnrollment'], null=True)),
- ('enrolled_by', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True)),
- ('enrolled_email', self.gf('django.db.models.fields.CharField')(max_length=255, db_index=True)),
- ('time_stamp', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, null=True, blank=True)),
- ('state_transition', self.gf('django.db.models.fields.CharField')(max_length=255)),
- ('reason', self.gf('django.db.models.fields.TextField')(null=True)),
- ))
- db.send_create_signal('student', ['ManualEnrollmentAudit'])
-
- def backwards(self, orm):
- # Deleting model 'ManualEnrollmentAudit'
- db.delete_table('student_manualenrollmentaudit')
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.anonymoususerid': {
- 'Meta': {'object_name': 'AnonymousUserId'},
- 'anonymous_user_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseaccessrole': {
- 'Meta': {'unique_together': "(('user', 'org', 'course_id', 'role'),)", 'object_name': 'CourseAccessRole'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'org': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),
- 'role': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.dashboardconfiguration': {
- 'Meta': {'object_name': 'DashboardConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'recent_enrollment_time_delta': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'})
- },
- 'student.entranceexamconfiguration': {
- 'Meta': {'unique_together': "(('user', 'course_id'),)", 'object_name': 'EntranceExamConfiguration'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'skip_entrance_exam': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.languageproficiency': {
- 'Meta': {'unique_together': "(('code', 'user_profile'),)", 'object_name': 'LanguageProficiency'},
- 'code': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user_profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'language_proficiencies'", 'to': "orm['student.UserProfile']"})
- },
- 'student.linkedinaddtoprofileconfiguration': {
- 'Meta': {'object_name': 'LinkedInAddToProfileConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'company_identifier': ('django.db.models.fields.TextField', [], {}),
- 'dashboard_tracking_code': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'trk_partner_name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '10', 'blank': 'True'})
- },
- 'student.loginfailures': {
- 'Meta': {'object_name': 'LoginFailures'},
- 'failure_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lockout_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.manualenrollmentaudit': {
- 'Meta': {'object_name': 'ManualEnrollmentAudit'},
- 'enrolled_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
- 'enrolled_email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'enrollment': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['student.CourseEnrollment']", 'null': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'reason': ('django.db.models.fields.TextField', [], {'null': 'True'}),
- 'state_transition': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'time_stamp': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.passwordhistory': {
- 'Meta': {'object_name': 'PasswordHistory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'time_set': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'bio': ('django.db.models.fields.CharField', [], {'max_length': '3000', 'null': 'True', 'blank': 'True'}),
- 'city': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'profile_image_uploaded_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.usersignupsource': {
- 'Meta': {'object_name': 'UserSignupSource'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'site': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
diff --git a/common/djangoapps/student/migrations/0051_auto__add_courseenrollmentattribute.py b/common/djangoapps/student/migrations/0051_auto__add_courseenrollmentattribute.py
deleted file mode 100644
index 66c218382cee..000000000000
--- a/common/djangoapps/student/migrations/0051_auto__add_courseenrollmentattribute.py
+++ /dev/null
@@ -1,224 +0,0 @@
-# -*- coding: utf-8 -*-
-from south.utils import datetime_utils as datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'CourseEnrollmentAttribute'
- db.create_table('student_courseenrollmentattribute', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('enrollment', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['student.CourseEnrollment'])),
- ('namespace', self.gf('django.db.models.fields.CharField')(max_length=255)),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=255)),
- ('value', self.gf('django.db.models.fields.CharField')(max_length=255)),
- ))
- db.send_create_signal('student', ['CourseEnrollmentAttribute'])
-
-
- def backwards(self, orm):
- # Deleting model 'CourseEnrollmentAttribute'
- db.delete_table('student_courseenrollmentattribute')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.anonymoususerid': {
- 'Meta': {'object_name': 'AnonymousUserId'},
- 'anonymous_user_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseaccessrole': {
- 'Meta': {'unique_together': "(('user', 'org', 'course_id', 'role'),)", 'object_name': 'CourseAccessRole'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'org': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),
- 'role': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.courseenrollmentattribute': {
- 'Meta': {'object_name': 'CourseEnrollmentAttribute'},
- 'enrollment': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['student.CourseEnrollment']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'namespace': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'value': ('django.db.models.fields.CharField', [], {'max_length': '255'})
- },
- 'student.dashboardconfiguration': {
- 'Meta': {'ordering': "('-change_date',)", 'object_name': 'DashboardConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'recent_enrollment_time_delta': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'})
- },
- 'student.entranceexamconfiguration': {
- 'Meta': {'unique_together': "(('user', 'course_id'),)", 'object_name': 'EntranceExamConfiguration'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'skip_entrance_exam': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.languageproficiency': {
- 'Meta': {'unique_together': "(('code', 'user_profile'),)", 'object_name': 'LanguageProficiency'},
- 'code': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user_profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'language_proficiencies'", 'to': "orm['student.UserProfile']"})
- },
- 'student.linkedinaddtoprofileconfiguration': {
- 'Meta': {'ordering': "('-change_date',)", 'object_name': 'LinkedInAddToProfileConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'company_identifier': ('django.db.models.fields.TextField', [], {}),
- 'dashboard_tracking_code': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'trk_partner_name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '10', 'blank': 'True'})
- },
- 'student.loginfailures': {
- 'Meta': {'object_name': 'LoginFailures'},
- 'failure_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lockout_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.manualenrollmentaudit': {
- 'Meta': {'object_name': 'ManualEnrollmentAudit'},
- 'enrolled_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
- 'enrolled_email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'enrollment': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['student.CourseEnrollment']", 'null': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'reason': ('django.db.models.fields.TextField', [], {'null': 'True'}),
- 'state_transition': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'time_stamp': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.passwordhistory': {
- 'Meta': {'object_name': 'PasswordHistory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'time_set': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'bio': ('django.db.models.fields.CharField', [], {'max_length': '3000', 'null': 'True', 'blank': 'True'}),
- 'city': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'profile_image_uploaded_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.usersignupsource': {
- 'Meta': {'object_name': 'UserSignupSource'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'site': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
\ No newline at end of file
diff --git a/common/djangoapps/student/migrations/0052_auto__add_historicalcourseenrollment.py b/common/djangoapps/student/migrations/0052_auto__add_historicalcourseenrollment.py
deleted file mode 100644
index 123050c5f409..000000000000
--- a/common/djangoapps/student/migrations/0052_auto__add_historicalcourseenrollment.py
+++ /dev/null
@@ -1,242 +0,0 @@
-# -*- coding: utf-8 -*-
-from south.utils import datetime_utils as datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'HistoricalCourseEnrollment'
- db.create_table('student_historicalcourseenrollment', (
- ('id', self.gf('django.db.models.fields.IntegerField')(db_index=True, blank=True)),
- ('course_id', self.gf('xmodule_django.models.CourseKeyField')(max_length=255, db_index=True)),
- ('created', self.gf('django.db.models.fields.DateTimeField')(db_index=True, null=True, blank=True)),
- ('is_active', self.gf('django.db.models.fields.BooleanField')(default=True)),
- ('mode', self.gf('django.db.models.fields.CharField')(default='honor', max_length=100)),
- ('user', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name=u'+', null=True, on_delete=models.DO_NOTHING, to=orm['auth.User'])),
- (u'history_id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- (u'history_date', self.gf('django.db.models.fields.DateTimeField')()),
- (u'history_user', self.gf('django.db.models.fields.related.ForeignKey')(related_name=u'+', null=True, on_delete=models.SET_NULL, to=orm['auth.User'])),
- (u'history_type', self.gf('django.db.models.fields.CharField')(max_length=1)),
- ))
- db.send_create_signal('student', ['HistoricalCourseEnrollment'])
-
-
- def backwards(self, orm):
- # Deleting model 'HistoricalCourseEnrollment'
- db.delete_table('student_historicalcourseenrollment')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.anonymoususerid': {
- 'Meta': {'object_name': 'AnonymousUserId'},
- 'anonymous_user_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseaccessrole': {
- 'Meta': {'unique_together': "(('user', 'org', 'course_id', 'role'),)", 'object_name': 'CourseAccessRole'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'org': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),
- 'role': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.courseenrollmentattribute': {
- 'Meta': {'object_name': 'CourseEnrollmentAttribute'},
- 'enrollment': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attributes'", 'to': "orm['student.CourseEnrollment']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'namespace': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'value': ('django.db.models.fields.CharField', [], {'max_length': '255'})
- },
- 'student.dashboardconfiguration': {
- 'Meta': {'ordering': "('-change_date',)", 'object_name': 'DashboardConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'recent_enrollment_time_delta': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'})
- },
- 'student.entranceexamconfiguration': {
- 'Meta': {'unique_together': "(('user', 'course_id'),)", 'object_name': 'EntranceExamConfiguration'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'skip_entrance_exam': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.historicalcourseenrollment': {
- 'Meta': {'ordering': "(u'-history_date', u'-history_id')", 'object_name': 'HistoricalCourseEnrollment'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- u'history_date': ('django.db.models.fields.DateTimeField', [], {}),
- u'history_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- u'history_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
- u'history_user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "u'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
- 'id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'blank': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'+'", 'null': 'True', 'on_delete': 'models.DO_NOTHING', 'to': "orm['auth.User']"})
- },
- 'student.languageproficiency': {
- 'Meta': {'unique_together': "(('code', 'user_profile'),)", 'object_name': 'LanguageProficiency'},
- 'code': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user_profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'language_proficiencies'", 'to': "orm['student.UserProfile']"})
- },
- 'student.linkedinaddtoprofileconfiguration': {
- 'Meta': {'ordering': "('-change_date',)", 'object_name': 'LinkedInAddToProfileConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'company_identifier': ('django.db.models.fields.TextField', [], {}),
- 'dashboard_tracking_code': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'trk_partner_name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '10', 'blank': 'True'})
- },
- 'student.loginfailures': {
- 'Meta': {'object_name': 'LoginFailures'},
- 'failure_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lockout_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.manualenrollmentaudit': {
- 'Meta': {'object_name': 'ManualEnrollmentAudit'},
- 'enrolled_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
- 'enrolled_email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'enrollment': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['student.CourseEnrollment']", 'null': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'reason': ('django.db.models.fields.TextField', [], {'null': 'True'}),
- 'state_transition': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'time_stamp': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.passwordhistory': {
- 'Meta': {'object_name': 'PasswordHistory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'time_set': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'bio': ('django.db.models.fields.CharField', [], {'max_length': '3000', 'null': 'True', 'blank': 'True'}),
- 'city': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'profile_image_uploaded_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.usersignupsource': {
- 'Meta': {'object_name': 'UserSignupSource'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'site': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
\ No newline at end of file
diff --git a/common/djangoapps/student/migrations/0053_auto__add_enrollmentrefundconfiguration.py b/common/djangoapps/student/migrations/0053_auto__add_enrollmentrefundconfiguration.py
deleted file mode 100644
index 6311bca541c7..000000000000
--- a/common/djangoapps/student/migrations/0053_auto__add_enrollmentrefundconfiguration.py
+++ /dev/null
@@ -1,245 +0,0 @@
-# -*- coding: utf-8 -*-
-from south.utils import datetime_utils as datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'EnrollmentRefundConfiguration'
- db.create_table('student_enrollmentrefundconfiguration', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('change_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
- ('changed_by', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, on_delete=models.PROTECT)),
- ('enabled', self.gf('django.db.models.fields.BooleanField')(default=False)),
- ('refund_window_microseconds', self.gf('django.db.models.fields.BigIntegerField')(default=1209600000000)),
- ))
- db.send_create_signal('student', ['EnrollmentRefundConfiguration'])
-
-
- def backwards(self, orm):
- # Deleting model 'EnrollmentRefundConfiguration'
- db.delete_table('student_enrollmentrefundconfiguration')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'student.anonymoususerid': {
- 'Meta': {'object_name': 'AnonymousUserId'},
- 'anonymous_user_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseaccessrole': {
- 'Meta': {'unique_together': "(('user', 'org', 'course_id', 'role'),)", 'object_name': 'CourseAccessRole'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'org': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),
- 'role': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollment': {
- 'Meta': {'ordering': "('user', 'course_id')", 'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.courseenrollmentallowed': {
- 'Meta': {'unique_together': "(('email', 'course_id'),)", 'object_name': 'CourseEnrollmentAllowed'},
- 'auto_enroll': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'student.courseenrollmentattribute': {
- 'Meta': {'object_name': 'CourseEnrollmentAttribute'},
- 'enrollment': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attributes'", 'to': "orm['student.CourseEnrollment']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'namespace': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'value': ('django.db.models.fields.CharField', [], {'max_length': '255'})
- },
- 'student.dashboardconfiguration': {
- 'Meta': {'ordering': "('-change_date',)", 'object_name': 'DashboardConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'recent_enrollment_time_delta': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'})
- },
- 'student.enrollmentrefundconfiguration': {
- 'Meta': {'ordering': "('-change_date',)", 'object_name': 'EnrollmentRefundConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'refund_window_microseconds': ('django.db.models.fields.BigIntegerField', [], {'default': '1209600000000'})
- },
- 'student.entranceexamconfiguration': {
- 'Meta': {'unique_together': "(('user', 'course_id'),)", 'object_name': 'EntranceExamConfiguration'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'skip_entrance_exam': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.historicalcourseenrollment': {
- 'Meta': {'ordering': "(u'-history_date', u'-history_id')", 'object_name': 'HistoricalCourseEnrollment'},
- 'course_id': ('xmodule_django.models.CourseKeyField', [], {'max_length': '255', 'db_index': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- u'history_date': ('django.db.models.fields.DateTimeField', [], {}),
- u'history_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- u'history_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
- u'history_user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "u'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
- 'id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'blank': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '100'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'+'", 'null': 'True', 'on_delete': 'models.DO_NOTHING', 'to': "orm['auth.User']"})
- },
- 'student.languageproficiency': {
- 'Meta': {'unique_together': "(('code', 'user_profile'),)", 'object_name': 'LanguageProficiency'},
- 'code': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user_profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'language_proficiencies'", 'to': "orm['student.UserProfile']"})
- },
- 'student.linkedinaddtoprofileconfiguration': {
- 'Meta': {'ordering': "('-change_date',)", 'object_name': 'LinkedInAddToProfileConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'company_identifier': ('django.db.models.fields.TextField', [], {}),
- 'dashboard_tracking_code': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'trk_partner_name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '10', 'blank': 'True'})
- },
- 'student.loginfailures': {
- 'Meta': {'object_name': 'LoginFailures'},
- 'failure_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lockout_until': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.manualenrollmentaudit': {
- 'Meta': {'object_name': 'ManualEnrollmentAudit'},
- 'enrolled_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
- 'enrolled_email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'enrollment': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['student.CourseEnrollment']", 'null': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'reason': ('django.db.models.fields.TextField', [], {'null': 'True'}),
- 'state_transition': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'time_stamp': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.passwordhistory': {
- 'Meta': {'object_name': 'PasswordHistory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'time_set': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.pendingemailchange': {
- 'Meta': {'object_name': 'PendingEmailChange'},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.pendingnamechange': {
- 'Meta': {'object_name': 'PendingNameChange'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.registration': {
- 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"},
- 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'student.userprofile': {
- 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"},
- 'allow_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'bio': ('django.db.models.fields.CharField', [], {'max_length': '3000', 'null': 'True', 'blank': 'True'}),
- 'city': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
- 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}),
- 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
- 'profile_image_uploaded_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
- 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
- },
- 'student.usersignupsource': {
- 'Meta': {'object_name': 'UserSignupSource'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'site': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- 'student.userstanding': {
- 'Meta': {'object_name': 'UserStanding'},
- 'account_status': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'standing_last_changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'standing'", 'unique': 'True', 'to': "orm['auth.User']"})
- },
- 'student.usertestgroup': {
- 'Meta': {'object_name': 'UserTestGroup'},
- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
- 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'})
- }
- }
-
- complete_apps = ['student']
\ No newline at end of file
diff --git a/common/djangoapps/student/models.py b/common/djangoapps/student/models.py
index 2faf03bba4a7..5e0d13d6d846 100644
--- a/common/djangoapps/student/models.py
+++ b/common/djangoapps/student/models.py
@@ -42,7 +42,6 @@
from opaque_keys.edx.keys import CourseKey
from opaque_keys.edx.locations import SlashSeparatedCourseKey
from simple_history.models import HistoricalRecords
-from south.modelsinspector import add_introspection_rules
from track import contexts
from xmodule_django.models import CourseKeyField, NoneToEmptyManager
@@ -189,7 +188,7 @@ class UserStanding(models.Model):
(ACCOUNT_ENABLED, u"Account Enabled"),
)
- user = models.ForeignKey(User, db_index=True, related_name='standing', unique=True)
+ user = models.OneToOneField(User, db_index=True, related_name='standing')
account_status = models.CharField(
blank=True, max_length=31, choices=USER_STANDING_CHOICES
)
@@ -493,7 +492,7 @@ class Registration(models.Model):
class Meta(object):
db_table = "auth_registration"
- user = models.ForeignKey(User, unique=True)
+ user = models.OneToOneField(User)
activation_key = models.CharField(('activation key'), max_length=32, unique=True, db_index=True)
def register(self, user):
@@ -824,7 +823,7 @@ def num_enrolled_in(self, course_id):
'course_id' is the course_id to return enrollments
"""
- enrollment_number = super(CourseEnrollmentManager, self).get_query_set().filter(
+ enrollment_number = super(CourseEnrollmentManager, self).get_queryset().filter(
course_id=course_id,
is_active=1
).count()
@@ -855,7 +854,7 @@ def enrollment_counts(self, course_id):
"""
# Unfortunately, Django's "group by"-style queries look super-awkward
query = use_read_replica_if_available(
- super(CourseEnrollmentManager, self).get_query_set().filter(course_id=course_id, is_active=True).values(
+ super(CourseEnrollmentManager, self).get_queryset().filter(course_id=course_id, is_active=True).values(
'mode').order_by().annotate(Count('mode')))
total = 0
enroll_dict = defaultdict(int)
@@ -923,6 +922,7 @@ def __unicode__(self):
).format(self.user, self.course_id, self.created, self.is_active)
@classmethod
+ @transaction.atomic
def get_or_create_enrollment(cls, user, course_key):
"""
Create an enrollment for a user in a class. By default *this enrollment
@@ -950,32 +950,16 @@ def get_or_create_enrollment(cls, user, course_key):
if user.id is None:
user.save()
- try:
- enrollment, created = CourseEnrollment.objects.get_or_create(
- user=user,
- course_id=course_key,
- )
+ enrollment, created = CourseEnrollment.objects.get_or_create(
+ user=user,
+ course_id=course_key,
+ )
- # If we *did* just create a new enrollment, set some defaults
- if created:
- enrollment.mode = "honor"
- enrollment.is_active = False
- enrollment.save()
- except IntegrityError:
- log.info(
- (
- "An integrity error occurred while getting-or-creating the enrollment"
- "for course key %s and student %s. This can occur if two processes try to get-or-create "
- "the enrollment at the same time and the database is set to REPEATABLE READ. We will try "
- "committing the transaction and retrying."
- ),
- course_key, user
- )
- transaction.commit()
- enrollment = CourseEnrollment.objects.get(
- user=user,
- course_id=course_key,
- )
+ # If we *did* just create a new enrollment, set some defaults
+ if created:
+ enrollment.mode = "honor"
+ enrollment.is_active = False
+ enrollment.save()
return enrollment
@@ -1950,9 +1934,6 @@ def __init__(self, *args, **kwargs):
)
-add_introspection_rules([], [r"^student\.models\.LanguageField"])
-
-
class LanguageProficiency(models.Model):
"""
Represents a user's language proficiency.
diff --git a/common/djangoapps/student/tests/test_email.py b/common/djangoapps/student/tests/test_email.py
index d7aaf011807b..1b56924dcf69 100644
--- a/common/djangoapps/student/tests/test_email.py
+++ b/common/djangoapps/student/tests/test_email.py
@@ -12,6 +12,7 @@
from django.core.urlresolvers import reverse
from django.core import mail
from django.contrib.auth.models import User
+from django.db import transaction
from django.test import TestCase, TransactionTestCase
from django.test.client import RequestFactory
from mock import Mock, patch
@@ -35,7 +36,6 @@ def mock_render_to_string(template_name, context):
def mock_render_to_response(template_name, context):
"""Return an HttpResponse with content that encodes template_name and context"""
- # View confirm_email_change uses @transaction.commit_manually.
# This simulates any db access in the templates.
UserProfile.objects.exists()
return HttpResponse(mock_render_to_string(template_name, context))
@@ -418,9 +418,10 @@ def test_successful_email_change(self, email_user):
self.assertEquals(0, PendingEmailChange.objects.count())
@patch('student.views.PendingEmailChange.objects.get', Mock(side_effect=TestException))
- @patch('student.views.transaction.rollback', wraps=django.db.transaction.rollback)
- def test_always_rollback(self, rollback, _email_user):
- with self.assertRaises(TestException):
- confirm_email_change(self.request, self.key)
+ def test_always_rollback(self, _email_user):
+ connection = transaction.get_connection()
+ with patch.object(connection, 'rollback', wraps=connection.rollback) as mock_rollback:
+ with self.assertRaises(TestException):
+ confirm_email_change(self.request, self.key)
- rollback.assert_called_with()
+ mock_rollback.assert_called_with()
diff --git a/common/djangoapps/student/tests/test_login.py b/common/djangoapps/student/tests/test_login.py
index 9ac21c17f5d3..d293af908a7b 100644
--- a/common/djangoapps/student/tests/test_login.py
+++ b/common/djangoapps/student/tests/test_login.py
@@ -284,6 +284,9 @@ def test_single_session_with_url_not_having_login_required_decorator(self):
response = client1.post(self.url, creds)
self._assert_response(response, success=True)
+ # Reload the user from the database
+ self.user = User.objects.get(pk=self.user.pk) # pylint: disable=no-member
+
self.assertEqual(self.user.profile.get_meta()['session_id'], client1.session.session_key)
# second login should log out the first
@@ -501,7 +504,7 @@ def test_success(self):
self._setup_provider_response(success=True)
response = self.client.post(self.url, {"access_token": "dummy"})
self.assertEqual(response.status_code, 204)
- self.assertEqual(self.client.session['_auth_user_id'], self.user.id) # pylint: disable=no-member
+ self.assertEqual(int(self.client.session['_auth_user_id']), self.user.id) # pylint: disable=no-member
def test_invalid_token(self):
self._setup_provider_response(success=False)
diff --git a/common/djangoapps/student/tests/test_password_policy.py b/common/djangoapps/student/tests/test_password_policy.py
index 194de075f3fa..c606478b2520 100644
--- a/common/djangoapps/student/tests/test_password_policy.py
+++ b/common/djangoapps/student/tests/test_password_policy.py
@@ -7,7 +7,7 @@
from django.test.client import RequestFactory
from django.core.urlresolvers import reverse
from django.contrib.auth.models import AnonymousUser
-from django.utils.importlib import import_module
+from importlib import import_module
from django.test.utils import override_settings
from django.conf import settings
from mock import patch
diff --git a/common/djangoapps/student/tests/test_reset_password.py b/common/djangoapps/student/tests/test_reset_password.py
index 511395fbe3d8..ac07a0c4e0fc 100644
--- a/common/djangoapps/student/tests/test_reset_password.py
+++ b/common/djangoapps/student/tests/test_reset_password.py
@@ -10,10 +10,11 @@
from django.test import TestCase
from django.test.client import RequestFactory
from django.contrib.auth.models import User
-from django.contrib.auth.hashers import UNUSABLE_PASSWORD
+from django.contrib.auth.hashers import UNUSABLE_PASSWORD_PREFIX
from django.contrib.auth.tokens import default_token_generator
-from django.utils.http import int_to_base36
+from django.utils.encoding import force_bytes, force_text
+from django.utils.http import urlsafe_base64_encode, base36_to_int, int_to_base36
from mock import Mock, patch
import ddt
@@ -42,12 +43,16 @@ def setUp(self):
self.user_bad_passwd = UserFactory.create()
self.user_bad_passwd.is_active = False
- self.user_bad_passwd.password = UNUSABLE_PASSWORD
+ self.user_bad_passwd.password = UNUSABLE_PASSWORD_PREFIX
self.user_bad_passwd.save()
+ def uidb36_to_uidb64(self, uidb36=None):
+ """ Converts uidb36 into uidb64 """
+ return force_text(urlsafe_base64_encode(force_bytes(base36_to_int(uidb36 or self.uidb36))))
+
@patch('student.views.render_to_string', Mock(side_effect=mock_render_to_string, autospec=True))
def test_user_bad_password_reset(self):
- """Tests password reset behavior for user with password marked UNUSABLE_PASSWORD"""
+ """Tests password reset behavior for user with password marked UNUSABLE_PASSWORD_PREFIX"""
bad_pwd_req = self.request_factory.post('/password_reset/', {'email': self.user_bad_passwd.email})
bad_pwd_resp = password_reset(bad_pwd_req)
@@ -217,7 +222,9 @@ def test_reset_password_bad_token(self, reset_confirm):
bad_reset_req = self.request_factory.get('/password_reset_confirm/NO-OP/')
password_reset_confirm_wrapper(bad_reset_req, 'NO', 'OP')
confirm_kwargs = reset_confirm.call_args[1]
- self.assertEquals(confirm_kwargs['uidb36'], 'NO')
+
+ self.assertEquals(confirm_kwargs['uidb64'], self.uidb36_to_uidb64('NO'))
+
self.assertEquals(confirm_kwargs['token'], 'OP')
self.user = User.objects.get(pk=self.user.pk)
self.assertFalse(self.user.is_active)
@@ -229,7 +236,7 @@ def test_reset_password_good_token(self, reset_confirm):
good_reset_req = self.request_factory.get('/password_reset_confirm/{0}-{1}/'.format(self.uidb36, self.token))
password_reset_confirm_wrapper(good_reset_req, self.uidb36, self.token)
confirm_kwargs = reset_confirm.call_args[1]
- self.assertEquals(confirm_kwargs['uidb36'], self.uidb36)
+ self.assertEquals(confirm_kwargs['uidb64'], self.uidb36_to_uidb64())
self.assertEquals(confirm_kwargs['token'], self.token)
self.user = User.objects.get(pk=self.user.pk)
self.assertTrue(self.user.is_active)
@@ -251,7 +258,7 @@ def test_reset_password_with_reused_password(self, reset_confirm):
good_reset_req = self.request_factory.get('/password_reset_confirm/{0}-{1}/'.format(self.uidb36, self.token))
password_reset_confirm_wrapper(good_reset_req, self.uidb36, self.token)
confirm_kwargs = reset_confirm.call_args[1]
- self.assertEquals(confirm_kwargs['uidb36'], self.uidb36)
+ self.assertEquals(confirm_kwargs['uidb64'], self.uidb36_to_uidb64())
self.assertEquals(confirm_kwargs['token'], self.token)
self.user = User.objects.get(pk=self.user.pk)
self.assertTrue(self.user.is_active)
diff --git a/common/djangoapps/student/tests/test_verification_status.py b/common/djangoapps/student/tests/test_verification_status.py
index 140b2f71d4ad..c3002bb63d11 100644
--- a/common/djangoapps/student/tests/test_verification_status.py
+++ b/common/djangoapps/student/tests/test_verification_status.py
@@ -20,7 +20,7 @@
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from student.tests.factories import UserFactory, CourseEnrollmentFactory
from course_modes.tests.factories import CourseModeFactory
-from verify_student.models import VerificationDeadline, SoftwareSecurePhotoVerification # pylint: disable=import-error
+from lms.djangoapps.verify_student.models import VerificationDeadline, SoftwareSecurePhotoVerification
from util.testing import UrlResetMixin
diff --git a/common/djangoapps/student/tests/tests.py b/common/djangoapps/student/tests/tests.py
index a2c1e05ae4db..42f19757f29c 100644
--- a/common/djangoapps/student/tests/tests.py
+++ b/common/djangoapps/student/tests/tests.py
@@ -39,7 +39,7 @@
from bulk_email.models import Optout # pylint: disable=import-error
from certificates.models import CertificateStatuses # pylint: disable=import-error
from certificates.tests.factories import GeneratedCertificateFactory # pylint: disable=import-error
-from verify_student.models import SoftwareSecurePhotoVerification
+from lms.djangoapps.verify_student.models import SoftwareSecurePhotoVerification
import shoppingcart # pylint: disable=import-error
from openedx.core.djangoapps.programs.tests.mixins import ProgramsApiConfigMixin
diff --git a/common/djangoapps/student/views.py b/common/djangoapps/student/views.py
index 845968856e1e..15776e69ddf0 100644
--- a/common/djangoapps/student/views.py
+++ b/common/djangoapps/student/views.py
@@ -27,8 +27,9 @@
from django.http import (HttpResponse, HttpResponseBadRequest, HttpResponseForbidden,
HttpResponseServerError, Http404)
from django.shortcuts import redirect
+from django.utils.encoding import force_bytes, force_text
from django.utils.translation import ungettext
-from django.utils.http import base36_to_int
+from django.utils.http import base36_to_int, urlsafe_base64_encode
from django.utils.translation import ugettext as _, get_language
from django.views.decorators.csrf import csrf_exempt, ensure_csrf_cookie
from django.views.decorators.http import require_POST, require_GET
@@ -55,7 +56,7 @@
DashboardConfiguration, LinkedInAddToProfileConfiguration, ManualEnrollmentAudit, ALLOWEDTOENROLL_TO_ENROLLED)
from student.forms import AccountCreationForm, PasswordResetFormNoActive
-from verify_student.models import SoftwareSecurePhotoVerification # pylint: disable=import-error
+from lms.djangoapps.verify_student.models import SoftwareSecurePhotoVerification
from certificates.models import CertificateStatuses, certificate_status_for_student
from certificates.api import ( # pylint: disable=import-error
get_certificate_url,
@@ -90,7 +91,7 @@
import dogstats_wrapper as dog_stats_api
-from util.db import commit_on_success_with_read_committed
+from util.db import outer_atomic
from util.json_request import JsonResponse
from util.bad_request_rate_limiter import BadRequestRateLimiter
from util.milestones_helpers import (
@@ -920,8 +921,9 @@ def _credit_statuses(user, course_enrollments):
return statuses
+@transaction.non_atomic_requests
@require_POST
-@commit_on_success_with_read_committed
+@outer_atomic(read_committed=True)
def change_enrollment(request, check_access=True):
"""
Modify the enrollment status for the logged-in user.
@@ -1438,7 +1440,8 @@ def _do_create_account(form):
# TODO: Rearrange so that if part of the process fails, the whole process fails.
# Right now, we can have e.g. no registration e-mail sent out and a zombie account
try:
- user.save()
+ with transaction.atomic():
+ user.save()
except IntegrityError:
# Figure out the cause of the integrity error
if len(User.objects.filter(username=user.username)) > 0:
@@ -1570,7 +1573,7 @@ def create_account_with_params(request, params):
)
# Perform operations within a transaction that are critical to account creation
- with transaction.commit_on_success():
+ with transaction.atomic():
# first, create the account
(user, profile, registration) = _do_create_account(form)
@@ -2052,12 +2055,19 @@ def password_reset_confirm_wrapper(
# we also want to pass settings.PLATFORM_NAME in as extra_context
extra_context = {"platform_name": microsite.get_value('platform_name', settings.PLATFORM_NAME)}
+ # Support old password reset URLs that used base36 encoded user IDs.
+ # https://github.com/django/django/commit/1184d077893ff1bc947e45b00a4d565f3df81776#diff-c571286052438b2e3190f8db8331a92bR231
+ try:
+ uidb64 = force_text(urlsafe_base64_encode(force_bytes(base36_to_int(uidb36))))
+ except ValueError:
+ uidb64 = '1' # dummy invalid ID (incorrect padding for base64)
+
if request.method == 'POST':
# remember what the old password hash is before we call down
old_password_hash = user.password
result = password_reset_confirm(
- request, uidb36=uidb36, token=token, extra_context=extra_context
+ request, uidb64=uidb64, token=token, extra_context=extra_context
)
# get the updated user
@@ -2071,7 +2081,7 @@ def password_reset_confirm_wrapper(
return result
else:
return password_reset_confirm(
- request, uidb36=uidb36, token=token, extra_context=extra_context
+ request, uidb64=uidb64, token=token, extra_context=extra_context
)
@@ -2179,18 +2189,17 @@ def do_email_change_request(user, new_email, activation_key=None):
@ensure_csrf_cookie
-@transaction.commit_manually
def confirm_email_change(request, key): # pylint: disable=unused-argument
"""
User requested a new e-mail. This is called when the activation
link is clicked. We confirm with the old e-mail, and update
"""
- try:
+ with transaction.atomic():
try:
pec = PendingEmailChange.objects.get(activation_key=key)
except PendingEmailChange.DoesNotExist:
response = render_to_response("invalid_email_key.html", {})
- transaction.rollback()
+ transaction.set_rollback(True)
return response
user = pec.user
@@ -2201,7 +2210,7 @@ def confirm_email_change(request, key): # pylint: disable=unused-argument
if len(User.objects.filter(email=pec.new_email)) != 0:
response = render_to_response("email_exists.html", {})
- transaction.rollback()
+ transaction.set_rollback(True)
return response
subject = render_to_string('emails/email_change_subject.txt', address_context)
@@ -2220,7 +2229,7 @@ def confirm_email_change(request, key): # pylint: disable=unused-argument
except Exception: # pylint: disable=broad-except
log.warning('Unable to send confirmation email to old address', exc_info=True)
response = render_to_response("email_change_failed.html", {'email': user.email})
- transaction.rollback()
+ transaction.set_rollback(True)
return response
user.email = pec.new_email
@@ -2232,16 +2241,11 @@ def confirm_email_change(request, key): # pylint: disable=unused-argument
except Exception: # pylint: disable=broad-except
log.warning('Unable to send confirmation email to new address', exc_info=True)
response = render_to_response("email_change_failed.html", {'email': pec.new_email})
- transaction.rollback()
+ transaction.set_rollback(True)
return response
response = render_to_response("email_change_successful.html", address_context)
- transaction.commit()
return response
- except Exception: # pylint: disable=broad-except
- # If we get an unexpected exception, be sure to rollback the transaction
- transaction.rollback()
- raise
@require_POST
diff --git a/common/djangoapps/third_party_auth/admin.py b/common/djangoapps/third_party_auth/admin.py
index 0897e3e28381..c42141da1b1b 100644
--- a/common/djangoapps/third_party_auth/admin.py
+++ b/common/djangoapps/third_party_auth/admin.py
@@ -126,6 +126,7 @@ class ApiPermissionsAdminForm(forms.ModelForm):
""" Django admin form for ApiPermissions model """
class Meta(object): # pylint: disable=missing-docstring
model = ProviderApiPermissions
+ fields = ['client', 'provider_id']
provider_id = forms.ChoiceField(choices=[], required=True)
diff --git a/common/djangoapps/third_party_auth/api/views.py b/common/djangoapps/third_party_auth/api/views.py
index ada722849c78..d508a7317981 100644
--- a/common/djangoapps/third_party_auth/api/views.py
+++ b/common/djangoapps/third_party_auth/api/views.py
@@ -204,8 +204,8 @@ def get_queryset(self):
query = Q()
- usernames = self.request.QUERY_PARAMS.getlist('username', None)
- remote_ids = self.request.QUERY_PARAMS.getlist('remote_id', None)
+ usernames = self.request.query_params.getlist('username', None)
+ remote_ids = self.request.query_params.getlist('remote_id', None)
if usernames:
usernames = ','.join(usernames)
diff --git a/common/djangoapps/third_party_auth/migrations/0001_initial.py b/common/djangoapps/third_party_auth/migrations/0001_initial.py
index d4a13a6dc026..9bd9f7aee1bb 100644
--- a/common/djangoapps/third_party_auth/migrations/0001_initial.py
+++ b/common/djangoapps/third_party_auth/migrations/0001_initial.py
@@ -1,181 +1,137 @@
# -*- coding: utf-8 -*-
-from south.utils import datetime_utils as datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
+from __future__ import unicode_literals
+from django.db import migrations, models
+import provider.utils
+import django.db.models.deletion
+from django.conf import settings
-class Migration(SchemaMigration):
- def forwards(self, orm):
- # Adding model 'OAuth2ProviderConfig'
- db.create_table('third_party_auth_oauth2providerconfig', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('change_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
- ('changed_by', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, on_delete=models.PROTECT)),
- ('enabled', self.gf('django.db.models.fields.BooleanField')(default=False)),
- ('icon_class', self.gf('django.db.models.fields.CharField')(default='fa-sign-in', max_length=50)),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=50)),
- ('backend_name', self.gf('django.db.models.fields.CharField')(max_length=50, db_index=True)),
- ('key', self.gf('django.db.models.fields.TextField')(blank=True)),
- ('secret', self.gf('django.db.models.fields.TextField')(blank=True)),
- ('other_settings', self.gf('django.db.models.fields.TextField')(blank=True)),
- ))
- db.send_create_signal('third_party_auth', ['OAuth2ProviderConfig'])
+class Migration(migrations.Migration):
- # Adding model 'SAMLProviderConfig'
- db.create_table('third_party_auth_samlproviderconfig', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('change_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
- ('changed_by', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, on_delete=models.PROTECT)),
- ('enabled', self.gf('django.db.models.fields.BooleanField')(default=False)),
- ('icon_class', self.gf('django.db.models.fields.CharField')(default='fa-sign-in', max_length=50)),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=50)),
- ('backend_name', self.gf('django.db.models.fields.CharField')(default='tpa-saml', max_length=50)),
- ('idp_slug', self.gf('django.db.models.fields.SlugField')(max_length=30)),
- ('entity_id', self.gf('django.db.models.fields.CharField')(max_length=255)),
- ('metadata_source', self.gf('django.db.models.fields.CharField')(max_length=255)),
- ('attr_user_permanent_id', self.gf('django.db.models.fields.CharField')(max_length=128, blank=True)),
- ('attr_full_name', self.gf('django.db.models.fields.CharField')(max_length=128, blank=True)),
- ('attr_first_name', self.gf('django.db.models.fields.CharField')(max_length=128, blank=True)),
- ('attr_last_name', self.gf('django.db.models.fields.CharField')(max_length=128, blank=True)),
- ('attr_username', self.gf('django.db.models.fields.CharField')(max_length=128, blank=True)),
- ('attr_email', self.gf('django.db.models.fields.CharField')(max_length=128, blank=True)),
- ('other_settings', self.gf('django.db.models.fields.TextField')(blank=True)),
- ))
- db.send_create_signal('third_party_auth', ['SAMLProviderConfig'])
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ('oauth2', '0001_initial'),
+ ]
- # Adding model 'SAMLConfiguration'
- db.create_table('third_party_auth_samlconfiguration', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('change_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
- ('changed_by', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, on_delete=models.PROTECT)),
- ('enabled', self.gf('django.db.models.fields.BooleanField')(default=False)),
- ('private_key', self.gf('django.db.models.fields.TextField')()),
- ('public_key', self.gf('django.db.models.fields.TextField')()),
- ('entity_id', self.gf('django.db.models.fields.CharField')(default='http://saml.example.com', max_length=255)),
- ('org_info_str', self.gf('django.db.models.fields.TextField')(default='{"en-US": {"url": "http://www.example.com", "displayname": "Example Inc.", "name": "example"}}')),
- ('other_config_str', self.gf('django.db.models.fields.TextField')(default='{\n"SECURITY_CONFIG": {"metadataCacheDuration": 604800, "signMetadata": false}\n}')),
- ))
- db.send_create_signal('third_party_auth', ['SAMLConfiguration'])
-
- # Adding model 'SAMLProviderData'
- db.create_table('third_party_auth_samlproviderdata', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('fetched_at', self.gf('django.db.models.fields.DateTimeField')(db_index=True)),
- ('expires_at', self.gf('django.db.models.fields.DateTimeField')(null=True, db_index=True)),
- ('entity_id', self.gf('django.db.models.fields.CharField')(max_length=255, db_index=True)),
- ('sso_url', self.gf('django.db.models.fields.URLField')(max_length=200)),
- ('public_key', self.gf('django.db.models.fields.TextField')()),
- ))
- db.send_create_signal('third_party_auth', ['SAMLProviderData'])
-
-
- def backwards(self, orm):
- # Deleting model 'OAuth2ProviderConfig'
- db.delete_table('third_party_auth_oauth2providerconfig')
-
- # Deleting model 'SAMLProviderConfig'
- db.delete_table('third_party_auth_samlproviderconfig')
-
- # Deleting model 'SAMLConfiguration'
- db.delete_table('third_party_auth_samlconfiguration')
-
- # Deleting model 'SAMLProviderData'
- db.delete_table('third_party_auth_samlproviderdata')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'third_party_auth.oauth2providerconfig': {
- 'Meta': {'object_name': 'OAuth2ProviderConfig'},
- 'backend_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'icon_class': ('django.db.models.fields.CharField', [], {'default': "'fa-sign-in'", 'max_length': '50'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'key': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
- 'other_settings': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'secret': ('django.db.models.fields.TextField', [], {'blank': 'True'})
- },
- 'third_party_auth.samlconfiguration': {
- 'Meta': {'object_name': 'SAMLConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'entity_id': ('django.db.models.fields.CharField', [], {'default': "'http://saml.example.com'", 'max_length': '255'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'org_info_str': ('django.db.models.fields.TextField', [], {'default': '\'{"en-US": {"url": "http://www.example.com", "displayname": "Example Inc.", "name": "example"}}\''}),
- 'other_config_str': ('django.db.models.fields.TextField', [], {'default': '\'{\\n"SECURITY_CONFIG": {"metadataCacheDuration": 604800, "signMetadata": false}\\n}\''}),
- 'private_key': ('django.db.models.fields.TextField', [], {}),
- 'public_key': ('django.db.models.fields.TextField', [], {})
- },
- 'third_party_auth.samlproviderconfig': {
- 'Meta': {'object_name': 'SAMLProviderConfig'},
- 'attr_email': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_first_name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_full_name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_last_name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_user_permanent_id': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_username': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'backend_name': ('django.db.models.fields.CharField', [], {'default': "'tpa-saml'", 'max_length': '50'}),
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'entity_id': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'icon_class': ('django.db.models.fields.CharField', [], {'default': "'fa-sign-in'", 'max_length': '50'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'idp_slug': ('django.db.models.fields.SlugField', [], {'max_length': '30'}),
- 'metadata_source': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
- 'other_settings': ('django.db.models.fields.TextField', [], {'blank': 'True'})
- },
- 'third_party_auth.samlproviderdata': {
- 'Meta': {'ordering': "('-fetched_at',)", 'object_name': 'SAMLProviderData'},
- 'entity_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'expires_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'fetched_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'public_key': ('django.db.models.fields.TextField', [], {}),
- 'sso_url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
- }
- }
-
- complete_apps = ['third_party_auth']
\ No newline at end of file
+ operations = [
+ migrations.CreateModel(
+ name='LTIProviderConfig',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('change_date', models.DateTimeField(auto_now_add=True, verbose_name='Change date')),
+ ('enabled', models.BooleanField(default=False, verbose_name='Enabled')),
+ ('icon_class', models.CharField(default=b'fa-sign-in', help_text=b'The Font Awesome (or custom) icon class to use on the login button for this provider. Examples: fa-google-plus, fa-facebook, fa-linkedin, fa-sign-in, fa-university', max_length=50)),
+ ('name', models.CharField(help_text=b'Name of this provider (shown to users)', max_length=50)),
+ ('secondary', models.BooleanField(default=False, help_text='Secondary providers are displayed less prominently, in a separate list of "Institution" login providers.')),
+ ('skip_registration_form', models.BooleanField(default=False, help_text='If this option is enabled, users will not be asked to confirm their details (name, email, etc.) during the registration process. Only select this option for trusted providers that are known to provide accurate user information.')),
+ ('skip_email_verification', models.BooleanField(default=False, help_text='If this option is selected, users will not be required to confirm their email, and their account will be activated immediately upon registration.')),
+ ('lti_consumer_key', models.CharField(help_text=b'The name that the LTI Tool Consumer will use to identify itself', max_length=255)),
+ ('lti_hostname', models.CharField(default=b'localhost', help_text=b'The domain that will be acting as the LTI consumer.', max_length=255, db_index=True)),
+ ('lti_consumer_secret', models.CharField(default=provider.utils.long_token, help_text=b'The shared secret that the LTI Tool Consumer will use to authenticate requests. Only this edX instance and this tool consumer instance should know this value. For increased security, you can avoid storing this in your database by leaving this field blank and setting SOCIAL_AUTH_LTI_CONSUMER_SECRETS = {"consumer key": "secret", ...} in your instance\'s Django setttigs (or lms.auth.json)', max_length=255, blank=True)),
+ ('lti_max_timestamp_age', models.IntegerField(default=10, help_text=b'The maximum age of oauth_timestamp values, in seconds.')),
+ ('changed_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, editable=False, to=settings.AUTH_USER_MODEL, null=True, verbose_name='Changed by')),
+ ],
+ options={
+ 'verbose_name': 'Provider Configuration (LTI)',
+ 'verbose_name_plural': 'Provider Configuration (LTI)',
+ },
+ ),
+ migrations.CreateModel(
+ name='OAuth2ProviderConfig',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('change_date', models.DateTimeField(auto_now_add=True, verbose_name='Change date')),
+ ('enabled', models.BooleanField(default=False, verbose_name='Enabled')),
+ ('icon_class', models.CharField(default=b'fa-sign-in', help_text=b'The Font Awesome (or custom) icon class to use on the login button for this provider. Examples: fa-google-plus, fa-facebook, fa-linkedin, fa-sign-in, fa-university', max_length=50)),
+ ('name', models.CharField(help_text=b'Name of this provider (shown to users)', max_length=50)),
+ ('secondary', models.BooleanField(default=False, help_text='Secondary providers are displayed less prominently, in a separate list of "Institution" login providers.')),
+ ('skip_registration_form', models.BooleanField(default=False, help_text='If this option is enabled, users will not be asked to confirm their details (name, email, etc.) during the registration process. Only select this option for trusted providers that are known to provide accurate user information.')),
+ ('skip_email_verification', models.BooleanField(default=False, help_text='If this option is selected, users will not be required to confirm their email, and their account will be activated immediately upon registration.')),
+ ('backend_name', models.CharField(help_text=b'Which python-social-auth OAuth2 provider backend to use. The list of backend choices is determined by the THIRD_PARTY_AUTH_BACKENDS setting.', max_length=50, db_index=True)),
+ ('key', models.TextField(verbose_name=b'Client ID', blank=True)),
+ ('secret', models.TextField(help_text=b'For increased security, you can avoid storing this in your database by leaving this field blank and setting SOCIAL_AUTH_OAUTH_SECRETS = {"(backend name)": "secret", ...} in your instance\'s Django settings (or lms.auth.json)', verbose_name=b'Client Secret', blank=True)),
+ ('other_settings', models.TextField(help_text=b'Optional JSON object with advanced settings, if any.', blank=True)),
+ ('changed_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, editable=False, to=settings.AUTH_USER_MODEL, null=True, verbose_name='Changed by')),
+ ],
+ options={
+ 'verbose_name': 'Provider Configuration (OAuth)',
+ 'verbose_name_plural': 'Provider Configuration (OAuth)',
+ },
+ ),
+ migrations.CreateModel(
+ name='ProviderApiPermissions',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('provider_id', models.CharField(help_text=b'Uniquely identify a provider. This is different from backend_name.', max_length=255)),
+ ('client', models.ForeignKey(to='oauth2.Client')),
+ ],
+ options={
+ 'verbose_name': 'Provider API Permission',
+ 'verbose_name_plural': 'Provider API Permissions',
+ },
+ ),
+ migrations.CreateModel(
+ name='SAMLConfiguration',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('change_date', models.DateTimeField(auto_now_add=True, verbose_name='Change date')),
+ ('enabled', models.BooleanField(default=False, verbose_name='Enabled')),
+ ('private_key', models.TextField(help_text=b'To generate a key pair as two files, run "openssl req -new -x509 -days 3652 -nodes -out saml.crt -keyout saml.key". Paste the contents of saml.key here. For increased security, you can avoid storing this in your database by leaving this field blank and setting it via the SOCIAL_AUTH_SAML_SP_PRIVATE_KEY setting in your instance\'s Django settings (or lms.auth.json).', blank=True)),
+ ('public_key', models.TextField(help_text=b"Public key certificate. For increased security, you can avoid storing this in your database by leaving this field blank and setting it via the SOCIAL_AUTH_SAML_SP_PUBLIC_CERT setting in your instance's Django settings (or lms.auth.json).", blank=True)),
+ ('entity_id', models.CharField(default=b'http://saml.example.com', max_length=255, verbose_name=b'Entity ID')),
+ ('org_info_str', models.TextField(default=b'{"en-US": {"url": "http://www.example.com", "displayname": "Example Inc.", "name": "example"}}', help_text=b"JSON dictionary of 'url', 'displayname', and 'name' for each language", verbose_name=b'Organization Info')),
+ ('other_config_str', models.TextField(default=b'{\n"SECURITY_CONFIG": {"metadataCacheDuration": 604800, "signMetadata": false}\n}', help_text=b'JSON object defining advanced settings that are passed on to python-saml. Valid keys that can be set here include: SECURITY_CONFIG and SP_EXTRA')),
+ ('changed_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, editable=False, to=settings.AUTH_USER_MODEL, null=True, verbose_name='Changed by')),
+ ],
+ options={
+ 'verbose_name': 'SAML Configuration',
+ 'verbose_name_plural': 'SAML Configuration',
+ },
+ ),
+ migrations.CreateModel(
+ name='SAMLProviderConfig',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('change_date', models.DateTimeField(auto_now_add=True, verbose_name='Change date')),
+ ('enabled', models.BooleanField(default=False, verbose_name='Enabled')),
+ ('icon_class', models.CharField(default=b'fa-sign-in', help_text=b'The Font Awesome (or custom) icon class to use on the login button for this provider. Examples: fa-google-plus, fa-facebook, fa-linkedin, fa-sign-in, fa-university', max_length=50)),
+ ('name', models.CharField(help_text=b'Name of this provider (shown to users)', max_length=50)),
+ ('secondary', models.BooleanField(default=False, help_text='Secondary providers are displayed less prominently, in a separate list of "Institution" login providers.')),
+ ('skip_registration_form', models.BooleanField(default=False, help_text='If this option is enabled, users will not be asked to confirm their details (name, email, etc.) during the registration process. Only select this option for trusted providers that are known to provide accurate user information.')),
+ ('skip_email_verification', models.BooleanField(default=False, help_text='If this option is selected, users will not be required to confirm their email, and their account will be activated immediately upon registration.')),
+ ('backend_name', models.CharField(default=b'tpa-saml', help_text=b"Which python-social-auth provider backend to use. 'tpa-saml' is the standard edX SAML backend.", max_length=50)),
+ ('idp_slug', models.SlugField(help_text=b'A short string uniquely identifying this provider. Cannot contain spaces and should be a usable as a CSS class. Examples: "ubc", "mit-staging"', max_length=30)),
+ ('entity_id', models.CharField(help_text=b'Example: https://idp.testshib.org/idp/shibboleth', max_length=255, verbose_name=b'Entity ID')),
+ ('metadata_source', models.CharField(help_text=b"URL to this provider's XML metadata. Should be an HTTPS URL. Example: https://www.testshib.org/metadata/testshib-providers.xml", max_length=255)),
+ ('attr_user_permanent_id', models.CharField(help_text=b'URN of the SAML attribute that we can use as a unique, persistent user ID. Leave blank for default.', max_length=128, verbose_name=b'User ID Attribute', blank=True)),
+ ('attr_full_name', models.CharField(help_text=b"URN of SAML attribute containing the user's full name. Leave blank for default.", max_length=128, verbose_name=b'Full Name Attribute', blank=True)),
+ ('attr_first_name', models.CharField(help_text=b"URN of SAML attribute containing the user's first name. Leave blank for default.", max_length=128, verbose_name=b'First Name Attribute', blank=True)),
+ ('attr_last_name', models.CharField(help_text=b"URN of SAML attribute containing the user's last name. Leave blank for default.", max_length=128, verbose_name=b'Last Name Attribute', blank=True)),
+ ('attr_username', models.CharField(help_text=b'URN of SAML attribute to use as a suggested username for this user. Leave blank for default.', max_length=128, verbose_name=b'Username Hint Attribute', blank=True)),
+ ('attr_email', models.CharField(help_text=b"URN of SAML attribute containing the user's email address[es]. Leave blank for default.", max_length=128, verbose_name=b'Email Attribute', blank=True)),
+ ('other_settings', models.TextField(help_text=b'For advanced use cases, enter a JSON object with addtional configuration. The tpa-saml backend supports only {"requiredEntitlements": ["urn:..."]} which can be used to require the presence of a specific eduPersonEntitlement.', verbose_name=b'Advanced settings', blank=True)),
+ ('changed_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, editable=False, to=settings.AUTH_USER_MODEL, null=True, verbose_name='Changed by')),
+ ],
+ options={
+ 'verbose_name': 'Provider Configuration (SAML IdP)',
+ 'verbose_name_plural': 'Provider Configuration (SAML IdPs)',
+ },
+ ),
+ migrations.CreateModel(
+ name='SAMLProviderData',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('fetched_at', models.DateTimeField(db_index=True)),
+ ('expires_at', models.DateTimeField(null=True, db_index=True)),
+ ('entity_id', models.CharField(max_length=255, db_index=True)),
+ ('sso_url', models.URLField(verbose_name=b'SSO URL')),
+ ('public_key', models.TextField()),
+ ],
+ options={
+ 'ordering': ('-fetched_at',),
+ 'verbose_name': 'SAML Provider Data',
+ 'verbose_name_plural': 'SAML Provider Data',
+ },
+ ),
+ ]
diff --git a/common/djangoapps/third_party_auth/migrations/0002_convert_settings.py b/common/djangoapps/third_party_auth/migrations/0002_convert_settings.py
deleted file mode 100644
index a5c38bca8139..000000000000
--- a/common/djangoapps/third_party_auth/migrations/0002_convert_settings.py
+++ /dev/null
@@ -1,141 +0,0 @@
-# -*- coding: utf-8 -*-
-from django.conf import settings
-import json
-from south.v2 import DataMigration
-
-
-class Migration(DataMigration):
-
- def forwards(self, orm):
- """ Convert from the THIRD_PARTY_AUTH setting to OAuth2ProviderConfig """
- tpa = getattr(settings, 'THIRD_PARTY_AUTH_OLD_CONFIG', {})
- if tpa and not any(orm.OAuth2ProviderConfig.objects.all()):
- print("Migrating third party auth config to OAuth2ProviderConfig")
- providers = (
- # Name, backend, icon, prefix
- ('Google', 'google-oauth2', 'fa-google-plus', 'SOCIAL_AUTH_GOOGLE_OAUTH2_'),
- ('LinkedIn', 'linkedin-oauth2', 'fa-linkedin', 'SOCIAL_AUTH_LINKEDIN_OAUTH2_'),
- ('Facebook', 'facebook', 'fa-facebook', 'SOCIAL_AUTH_FACEBOOK_'),
- )
- for name, backend, icon, prefix in providers:
- if name in tpa:
- conf = tpa[name]
- conf = {key.replace(prefix, ''): val for key, val in conf.items()}
- key = conf.pop('KEY', '')
- secret = conf.pop('SECRET', '')
- orm.OAuth2ProviderConfig.objects.create(
- enabled=True,
- name=name,
- backend_name=backend,
- icon_class=icon,
- key=key,
- secret=secret,
- other_settings=json.dumps(conf),
- changed_by=None,
- )
- print(
- "Done. Make changes via /admin/third_party_auth/oauth2providerconfig/ "
- "from now on. You can remove THIRD_PARTY_AUTH from ~/lms.auth.json"
- )
- else:
- print("Not migrating third party auth config to OAuth2ProviderConfig.")
-
- def backwards(self, orm):
- """ No backwards migration necessary """
- pass
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'third_party_auth.oauth2providerconfig': {
- 'Meta': {'object_name': 'OAuth2ProviderConfig'},
- 'backend_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'icon_class': ('django.db.models.fields.CharField', [], {'default': "'fa-sign-in'", 'max_length': '50'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'key': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
- 'other_settings': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'secret': ('django.db.models.fields.TextField', [], {'blank': 'True'})
- },
- 'third_party_auth.samlconfiguration': {
- 'Meta': {'object_name': 'SAMLConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'entity_id': ('django.db.models.fields.CharField', [], {'default': "'http://saml.example.com'", 'max_length': '255'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'org_info_str': ('django.db.models.fields.TextField', [], {'default': '\'{"en-US": {"url": "http://www.example.com", "displayname": "Example Inc.", "name": "example"}}\''}),
- 'other_config_str': ('django.db.models.fields.TextField', [], {'default': '\'{\\n"SECURITY_CONFIG": {"metadataCacheDuration": 604800, "signMetadata": false}\\n}\''}),
- 'private_key': ('django.db.models.fields.TextField', [], {}),
- 'public_key': ('django.db.models.fields.TextField', [], {})
- },
- 'third_party_auth.samlproviderconfig': {
- 'Meta': {'object_name': 'SAMLProviderConfig'},
- 'attr_email': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_first_name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_full_name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_last_name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_user_permanent_id': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_username': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'backend_name': ('django.db.models.fields.CharField', [], {'default': "'tpa-saml'", 'max_length': '50'}),
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'entity_id': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'icon_class': ('django.db.models.fields.CharField', [], {'default': "'fa-sign-in'", 'max_length': '50'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'idp_slug': ('django.db.models.fields.SlugField', [], {'max_length': '30'}),
- 'metadata_source': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
- 'other_settings': ('django.db.models.fields.TextField', [], {'blank': 'True'})
- },
- 'third_party_auth.samlproviderdata': {
- 'Meta': {'ordering': "('-fetched_at',)", 'object_name': 'SAMLProviderData'},
- 'entity_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'expires_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'fetched_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'public_key': ('django.db.models.fields.TextField', [], {}),
- 'sso_url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
- }
- }
-
- complete_apps = ['third_party_auth']
- symmetrical = True
diff --git a/common/djangoapps/third_party_auth/migrations/0003_add_config_options.py b/common/djangoapps/third_party_auth/migrations/0003_add_config_options.py
deleted file mode 100644
index 6ff8a3d3a5ec..000000000000
--- a/common/djangoapps/third_party_auth/migrations/0003_add_config_options.py
+++ /dev/null
@@ -1,161 +0,0 @@
-# -*- coding: utf-8 -*-
-from south.utils import datetime_utils as datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding field 'SAMLProviderConfig.secondary'
- db.add_column('third_party_auth_samlproviderconfig', 'secondary',
- self.gf('django.db.models.fields.BooleanField')(default=False),
- keep_default=False)
-
- # Adding field 'SAMLProviderConfig.skip_registration_form'
- db.add_column('third_party_auth_samlproviderconfig', 'skip_registration_form',
- self.gf('django.db.models.fields.BooleanField')(default=False),
- keep_default=False)
-
- # Adding field 'SAMLProviderConfig.skip_email_verification'
- db.add_column('third_party_auth_samlproviderconfig', 'skip_email_verification',
- self.gf('django.db.models.fields.BooleanField')(default=False),
- keep_default=False)
-
- # Adding field 'OAuth2ProviderConfig.secondary'
- db.add_column('third_party_auth_oauth2providerconfig', 'secondary',
- self.gf('django.db.models.fields.BooleanField')(default=False),
- keep_default=False)
-
- # Adding field 'OAuth2ProviderConfig.skip_registration_form'
- db.add_column('third_party_auth_oauth2providerconfig', 'skip_registration_form',
- self.gf('django.db.models.fields.BooleanField')(default=False),
- keep_default=False)
-
- # Adding field 'OAuth2ProviderConfig.skip_email_verification'
- db.add_column('third_party_auth_oauth2providerconfig', 'skip_email_verification',
- self.gf('django.db.models.fields.BooleanField')(default=False),
- keep_default=False)
-
-
- def backwards(self, orm):
- # Deleting field 'SAMLProviderConfig.secondary'
- db.delete_column('third_party_auth_samlproviderconfig', 'secondary')
-
- # Deleting field 'SAMLProviderConfig.skip_registration_form'
- db.delete_column('third_party_auth_samlproviderconfig', 'skip_registration_form')
-
- # Deleting field 'SAMLProviderConfig.skip_email_verification'
- db.delete_column('third_party_auth_samlproviderconfig', 'skip_email_verification')
-
- # Deleting field 'OAuth2ProviderConfig.secondary'
- db.delete_column('third_party_auth_oauth2providerconfig', 'secondary')
-
- # Deleting field 'OAuth2ProviderConfig.skip_registration_form'
- db.delete_column('third_party_auth_oauth2providerconfig', 'skip_registration_form')
-
- # Deleting field 'OAuth2ProviderConfig.skip_email_verification'
- db.delete_column('third_party_auth_oauth2providerconfig', 'skip_email_verification')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'third_party_auth.oauth2providerconfig': {
- 'Meta': {'object_name': 'OAuth2ProviderConfig'},
- 'backend_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'icon_class': ('django.db.models.fields.CharField', [], {'default': "'fa-sign-in'", 'max_length': '50'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'key': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
- 'other_settings': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'secondary': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'secret': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'skip_email_verification': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'skip_registration_form': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
- },
- 'third_party_auth.samlconfiguration': {
- 'Meta': {'object_name': 'SAMLConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'entity_id': ('django.db.models.fields.CharField', [], {'default': "'http://saml.example.com'", 'max_length': '255'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'org_info_str': ('django.db.models.fields.TextField', [], {'default': '\'{"en-US": {"url": "http://www.example.com", "displayname": "Example Inc.", "name": "example"}}\''}),
- 'other_config_str': ('django.db.models.fields.TextField', [], {'default': '\'{\\n"SECURITY_CONFIG": {"metadataCacheDuration": 604800, "signMetadata": false}\\n}\''}),
- 'private_key': ('django.db.models.fields.TextField', [], {}),
- 'public_key': ('django.db.models.fields.TextField', [], {})
- },
- 'third_party_auth.samlproviderconfig': {
- 'Meta': {'object_name': 'SAMLProviderConfig'},
- 'attr_email': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_first_name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_full_name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_last_name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_user_permanent_id': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_username': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'backend_name': ('django.db.models.fields.CharField', [], {'default': "'tpa-saml'", 'max_length': '50'}),
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'entity_id': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'icon_class': ('django.db.models.fields.CharField', [], {'default': "'fa-sign-in'", 'max_length': '50'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'idp_slug': ('django.db.models.fields.SlugField', [], {'max_length': '30'}),
- 'metadata_source': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
- 'other_settings': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'secondary': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'skip_email_verification': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'skip_registration_form': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
- },
- 'third_party_auth.samlproviderdata': {
- 'Meta': {'ordering': "('-fetched_at',)", 'object_name': 'SAMLProviderData'},
- 'entity_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'expires_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'fetched_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'public_key': ('django.db.models.fields.TextField', [], {}),
- 'sso_url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
- }
- }
-
- complete_apps = ['third_party_auth']
\ No newline at end of file
diff --git a/common/djangoapps/third_party_auth/migrations/0004_lti_tool_consumers.py b/common/djangoapps/third_party_auth/migrations/0004_lti_tool_consumers.py
deleted file mode 100644
index dfef06ae7393..000000000000
--- a/common/djangoapps/third_party_auth/migrations/0004_lti_tool_consumers.py
+++ /dev/null
@@ -1,149 +0,0 @@
-# -*- coding: utf-8 -*-
-# pylint: disable=C,E,F,R,W
-from south.utils import datetime_utils as datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'LTIProviderConfig'
- db.create_table('third_party_auth_ltiproviderconfig', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('change_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
- ('changed_by', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, on_delete=models.PROTECT)),
- ('enabled', self.gf('django.db.models.fields.BooleanField')(default=False)),
- ('icon_class', self.gf('django.db.models.fields.CharField')(default='fa-sign-in', max_length=50)),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=50)),
- ('secondary', self.gf('django.db.models.fields.BooleanField')(default=False)),
- ('skip_registration_form', self.gf('django.db.models.fields.BooleanField')(default=False)),
- ('skip_email_verification', self.gf('django.db.models.fields.BooleanField')(default=False)),
- ('lti_consumer_key', self.gf('django.db.models.fields.CharField')(max_length=255)),
- ('lti_consumer_secret', self.gf('django.db.models.fields.CharField')(max_length=255)),
- ('lti_max_timestamp_age', self.gf('django.db.models.fields.IntegerField')(default=10)),
- ))
- db.send_create_signal('third_party_auth', ['LTIProviderConfig'])
-
-
- def backwards(self, orm):
- # Deleting model 'LTIProviderConfig'
- db.delete_table('third_party_auth_ltiproviderconfig')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'third_party_auth.ltiproviderconfig': {
- 'Meta': {'object_name': 'LTIProviderConfig'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'icon_class': ('django.db.models.fields.CharField', [], {'default': "'fa-sign-in'", 'max_length': '50'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lti_consumer_key': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'lti_consumer_secret': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'lti_max_timestamp_age': ('django.db.models.fields.IntegerField', [], {'default': '10'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
- 'secondary': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'skip_email_verification': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'skip_registration_form': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
- },
- 'third_party_auth.oauth2providerconfig': {
- 'Meta': {'object_name': 'OAuth2ProviderConfig'},
- 'backend_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'icon_class': ('django.db.models.fields.CharField', [], {'default': "'fa-sign-in'", 'max_length': '50'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'key': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
- 'other_settings': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'secondary': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'secret': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'skip_email_verification': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'skip_registration_form': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
- },
- 'third_party_auth.samlconfiguration': {
- 'Meta': {'object_name': 'SAMLConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'entity_id': ('django.db.models.fields.CharField', [], {'default': "'http://saml.example.com'", 'max_length': '255'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'org_info_str': ('django.db.models.fields.TextField', [], {'default': '\'{"en-US": {"url": "http://www.example.com", "displayname": "Example Inc.", "name": "example"}}\''}),
- 'other_config_str': ('django.db.models.fields.TextField', [], {'default': '\'{\\n"SECURITY_CONFIG": {"metadataCacheDuration": 604800, "signMetadata": false}\\n}\''}),
- 'private_key': ('django.db.models.fields.TextField', [], {}),
- 'public_key': ('django.db.models.fields.TextField', [], {})
- },
- 'third_party_auth.samlproviderconfig': {
- 'Meta': {'object_name': 'SAMLProviderConfig'},
- 'attr_email': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_first_name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_full_name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_last_name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_user_permanent_id': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_username': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'backend_name': ('django.db.models.fields.CharField', [], {'default': "'tpa-saml'", 'max_length': '50'}),
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'entity_id': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'icon_class': ('django.db.models.fields.CharField', [], {'default': "'fa-sign-in'", 'max_length': '50'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'idp_slug': ('django.db.models.fields.SlugField', [], {'max_length': '30'}),
- 'metadata_source': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
- 'other_settings': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'secondary': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'skip_email_verification': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'skip_registration_form': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
- },
- 'third_party_auth.samlproviderdata': {
- 'Meta': {'ordering': "('-fetched_at',)", 'object_name': 'SAMLProviderData'},
- 'entity_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'expires_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'fetched_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'public_key': ('django.db.models.fields.TextField', [], {}),
- 'sso_url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
- }
- }
-
- complete_apps = ['third_party_auth']
diff --git a/common/djangoapps/third_party_auth/migrations/0005_auto__add_field_ltiproviderconfig_lti_hostname.py b/common/djangoapps/third_party_auth/migrations/0005_auto__add_field_ltiproviderconfig_lti_hostname.py
deleted file mode 100644
index 87c09fc129bf..000000000000
--- a/common/djangoapps/third_party_auth/migrations/0005_auto__add_field_ltiproviderconfig_lti_hostname.py
+++ /dev/null
@@ -1,137 +0,0 @@
-# -*- coding: utf-8 -*-
-from south.utils import datetime_utils as datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding field 'LTIProviderConfig.lti_hostname'
- db.add_column('third_party_auth_ltiproviderconfig', 'lti_hostname',
- self.gf('django.db.models.fields.CharField')(default='localhost', max_length=255, db_index=True),
- keep_default=False)
-
-
- def backwards(self, orm):
- # Deleting field 'LTIProviderConfig.lti_hostname'
- db.delete_column('third_party_auth_ltiproviderconfig', 'lti_hostname')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'third_party_auth.ltiproviderconfig': {
- 'Meta': {'object_name': 'LTIProviderConfig'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'icon_class': ('django.db.models.fields.CharField', [], {'default': "'fa-sign-in'", 'max_length': '50'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lti_consumer_key': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'lti_consumer_secret': ('django.db.models.fields.CharField', [], {'default': "'ae8c9adcb7764ad67272c57c602dabd0b71acf22'", 'max_length': '255', 'blank': 'True'}),
- 'lti_hostname': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'lti_max_timestamp_age': ('django.db.models.fields.IntegerField', [], {'default': '10'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
- 'secondary': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'skip_email_verification': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'skip_registration_form': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
- },
- 'third_party_auth.oauth2providerconfig': {
- 'Meta': {'object_name': 'OAuth2ProviderConfig'},
- 'backend_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'icon_class': ('django.db.models.fields.CharField', [], {'default': "'fa-sign-in'", 'max_length': '50'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'key': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
- 'other_settings': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'secondary': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'secret': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'skip_email_verification': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'skip_registration_form': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
- },
- 'third_party_auth.samlconfiguration': {
- 'Meta': {'object_name': 'SAMLConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'entity_id': ('django.db.models.fields.CharField', [], {'default': "'http://saml.example.com'", 'max_length': '255'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'org_info_str': ('django.db.models.fields.TextField', [], {'default': '\'{"en-US": {"url": "http://www.example.com", "displayname": "Example Inc.", "name": "example"}}\''}),
- 'other_config_str': ('django.db.models.fields.TextField', [], {'default': '\'{\\n"SECURITY_CONFIG": {"metadataCacheDuration": 604800, "signMetadata": false}\\n}\''}),
- 'private_key': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'public_key': ('django.db.models.fields.TextField', [], {'blank': 'True'})
- },
- 'third_party_auth.samlproviderconfig': {
- 'Meta': {'object_name': 'SAMLProviderConfig'},
- 'attr_email': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_first_name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_full_name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_last_name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_user_permanent_id': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_username': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'backend_name': ('django.db.models.fields.CharField', [], {'default': "'tpa-saml'", 'max_length': '50'}),
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'entity_id': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'icon_class': ('django.db.models.fields.CharField', [], {'default': "'fa-sign-in'", 'max_length': '50'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'idp_slug': ('django.db.models.fields.SlugField', [], {'max_length': '30'}),
- 'metadata_source': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
- 'other_settings': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'secondary': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'skip_email_verification': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'skip_registration_form': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
- },
- 'third_party_auth.samlproviderdata': {
- 'Meta': {'ordering': "('-fetched_at',)", 'object_name': 'SAMLProviderData'},
- 'entity_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'expires_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'fetched_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'public_key': ('django.db.models.fields.TextField', [], {}),
- 'sso_url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
- }
- }
-
- complete_apps = ['third_party_auth']
\ No newline at end of file
diff --git a/common/djangoapps/third_party_auth/migrations/0006_add_api_permission.py b/common/djangoapps/third_party_auth/migrations/0006_add_api_permission.py
deleted file mode 100644
index 9658dcbc89f2..000000000000
--- a/common/djangoapps/third_party_auth/migrations/0006_add_api_permission.py
+++ /dev/null
@@ -1,156 +0,0 @@
-# -*- coding: utf-8 -*-
-from south.utils import datetime_utils as datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'ProviderApiPermissions'
- db.create_table('third_party_auth_providerapipermissions', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('client', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['oauth2.Client'])),
- ('provider_id', self.gf('django.db.models.fields.CharField')(max_length=255)),
- ))
- db.send_create_signal('third_party_auth', ['ProviderApiPermissions'])
-
-
- def backwards(self, orm):
- # Deleting model 'ProviderApiPermissions'
- db.delete_table('third_party_auth_providerapipermissions')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'oauth2.client': {
- 'Meta': {'object_name': 'Client'},
- 'client_id': ('django.db.models.fields.CharField', [], {'default': "'d9843a249e3f607e3177'", 'max_length': '255'}),
- 'client_secret': ('django.db.models.fields.CharField', [], {'default': "'4009d3b78cee9c0144da4a47a11e2186c6a46d4c'", 'max_length': '255'}),
- 'client_type': ('django.db.models.fields.IntegerField', [], {}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
- 'redirect_uri': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
- 'url': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'oauth2_client'", 'null': 'True', 'to': "orm['auth.User']"})
- },
- 'third_party_auth.providerapipermissions': {
- 'Meta': {'object_name': 'ProviderApiPermissions'},
- 'client': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['oauth2.Client']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'provider_id': ('django.db.models.fields.CharField', [], {'max_length': '255'})
- },
- 'third_party_auth.ltiproviderconfig': {
- 'Meta': {'object_name': 'LTIProviderConfig'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'icon_class': ('django.db.models.fields.CharField', [], {'default': "'fa-sign-in'", 'max_length': '50'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lti_consumer_key': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'lti_consumer_secret': ('django.db.models.fields.CharField', [], {'default': "'011ecd0d33af228631f68d89b335cd6303c00508'", 'max_length': '255', 'blank': 'True'}),
- 'lti_max_timestamp_age': ('django.db.models.fields.IntegerField', [], {'default': '10'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
- 'secondary': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'skip_email_verification': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'skip_registration_form': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
- },
- 'third_party_auth.oauth2providerconfig': {
- 'Meta': {'object_name': 'OAuth2ProviderConfig'},
- 'backend_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'icon_class': ('django.db.models.fields.CharField', [], {'default': "'fa-sign-in'", 'max_length': '50'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'key': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
- 'other_settings': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'secondary': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'secret': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'skip_email_verification': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'skip_registration_form': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
- },
- 'third_party_auth.samlconfiguration': {
- 'Meta': {'object_name': 'SAMLConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'entity_id': ('django.db.models.fields.CharField', [], {'default': "'http://saml.example.com'", 'max_length': '255'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'org_info_str': ('django.db.models.fields.TextField', [], {'default': '\'{"en-US": {"url": "http://www.example.com", "displayname": "Example Inc.", "name": "example"}}\''}),
- 'other_config_str': ('django.db.models.fields.TextField', [], {'default': '\'{\\n"SECURITY_CONFIG": {"metadataCacheDuration": 604800, "signMetadata": false}\\n}\''}),
- 'private_key': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'public_key': ('django.db.models.fields.TextField', [], {'blank': 'True'})
- },
- 'third_party_auth.samlproviderconfig': {
- 'Meta': {'object_name': 'SAMLProviderConfig'},
- 'attr_email': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_first_name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_full_name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_last_name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_user_permanent_id': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'attr_username': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- 'backend_name': ('django.db.models.fields.CharField', [], {'default': "'tpa-saml'", 'max_length': '50'}),
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'entity_id': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'icon_class': ('django.db.models.fields.CharField', [], {'default': "'fa-sign-in'", 'max_length': '50'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'idp_slug': ('django.db.models.fields.SlugField', [], {'max_length': '30'}),
- 'metadata_source': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
- 'other_settings': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'secondary': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'skip_email_verification': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'skip_registration_form': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
- },
- 'third_party_auth.samlproviderdata': {
- 'Meta': {'ordering': "('-fetched_at',)", 'object_name': 'SAMLProviderData'},
- 'entity_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
- 'expires_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
- 'fetched_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'public_key': ('django.db.models.fields.TextField', [], {}),
- 'sso_url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
- }
- }
-
- complete_apps = ['third_party_auth']
\ No newline at end of file
diff --git a/common/djangoapps/third_party_auth/models.py b/common/djangoapps/third_party_auth/models.py
index da06f6ecfccc..4384319faa6e 100644
--- a/common/djangoapps/third_party_auth/models.py
+++ b/common/djangoapps/third_party_auth/models.py
@@ -106,6 +106,7 @@ class ProviderConfig(ConfigurationModel):
# "enabled" field is inherited from ConfigurationModel
class Meta(object):
+ app_label = "third_party_auth"
abstract = True
@property
@@ -213,6 +214,7 @@ class OAuth2ProviderConfig(ProviderConfig):
other_settings = models.TextField(blank=True, help_text="Optional JSON object with advanced settings, if any.")
class Meta(object):
+ app_label = "third_party_auth"
verbose_name = "Provider Configuration (OAuth)"
verbose_name_plural = verbose_name
@@ -292,6 +294,7 @@ def clean(self):
self.other_settings = clean_json(self.other_settings, dict)
class Meta(object):
+ app_label = "third_party_auth"
verbose_name = "Provider Configuration (SAML IdP)"
verbose_name_plural = "Provider Configuration (SAML IdPs)"
@@ -387,6 +390,7 @@ class SAMLConfiguration(ConfigurationModel):
)
class Meta(object):
+ app_label = "third_party_auth"
verbose_name = "SAML Configuration"
verbose_name_plural = verbose_name
@@ -453,6 +457,7 @@ class SAMLProviderData(models.Model):
public_key = models.TextField()
class Meta(object):
+ app_label = "third_party_auth"
verbose_name = "SAML Provider Data"
verbose_name_plural = verbose_name
ordering = ('-fetched_at', )
@@ -508,6 +513,7 @@ class LTIProviderConfig(ProviderConfig):
)
lti_hostname = models.CharField(
+ default='localhost',
max_length=255,
help_text=(
'The domain that will be acting as the LTI consumer.'
@@ -565,6 +571,7 @@ def get_lti_consumer_secret(self):
return getattr(settings, 'SOCIAL_AUTH_LTI_CONSUMER_SECRETS', {}).get(self.lti_consumer_key, '')
class Meta(object):
+ app_label = "third_party_auth"
verbose_name = "Provider Configuration (LTI)"
verbose_name_plural = verbose_name
@@ -575,6 +582,9 @@ class ProviderApiPermissions(models.Model):
It gives permission for a OAuth2 client to access the information under certain IdPs.
"""
+ class Meta(object):
+ app_label = "third_party_auth"
+
client = models.ForeignKey(Client)
provider_id = models.CharField(
max_length=255,
diff --git a/common/djangoapps/third_party_auth/settings.py b/common/djangoapps/third_party_auth/settings.py
index a856aefa4f4f..ae5b669f8bcf 100644
--- a/common/djangoapps/third_party_auth/settings.py
+++ b/common/djangoapps/third_party_auth/settings.py
@@ -24,12 +24,6 @@ def apply_settings(django_settings):
# Params not in this whitelist will be silently dropped.
django_settings.FIELDS_STORED_IN_SESSION = _FIELDS_STORED_IN_SESSION
- # Register and configure python-social-auth with Django.
- django_settings.INSTALLED_APPS += (
- 'social.apps.django_app.default',
- 'third_party_auth',
- )
-
# Inject exception middleware to make redirects fire.
django_settings.MIDDLEWARE_CLASSES += _MIDDLEWARE_CLASSES
@@ -81,7 +75,7 @@ def apply_settings(django_settings):
# Context processors required under Django.
django_settings.SOCIAL_AUTH_UUID_LENGTH = 4
- django_settings.TEMPLATE_CONTEXT_PROCESSORS += (
+ django_settings.DEFAULT_TEMPLATE_ENGINE['OPTIONS']['context_processors'] += (
'social.apps.django_app.context_processors.backends',
'social.apps.django_app.context_processors.login_redirect',
)
diff --git a/common/djangoapps/third_party_auth/tests/test_settings.py b/common/djangoapps/third_party_auth/tests/test_settings.py
index 9108ce9c6621..9b5943c62d85 100644
--- a/common/djangoapps/third_party_auth/tests/test_settings.py
+++ b/common/djangoapps/third_party_auth/tests/test_settings.py
@@ -13,9 +13,14 @@
'AUTHENTICATION_BACKENDS': _ORIGINAL_AUTHENTICATION_BACKENDS,
'INSTALLED_APPS': _ORIGINAL_INSTALLED_APPS,
'MIDDLEWARE_CLASSES': _ORIGINAL_MIDDLEWARE_CLASSES,
- 'TEMPLATE_CONTEXT_PROCESSORS': _ORIGINAL_TEMPLATE_CONTEXT_PROCESSORS,
+ 'TEMPLATES': [{
+ 'OPTIONS': {
+ 'context_processors': _ORIGINAL_TEMPLATE_CONTEXT_PROCESSORS
+ }
+ }],
'FEATURES': {},
}
+_SETTINGS_MAP['DEFAULT_TEMPLATE_ENGINE'] = _SETTINGS_MAP['TEMPLATES'][0]
class SettingsUnitTest(testutil.TestCase):
@@ -39,10 +44,6 @@ def test_apply_settings_adds_fields_stored_in_session(self):
settings.apply_settings(self.settings)
self.assertEqual(settings._FIELDS_STORED_IN_SESSION, self.settings.FIELDS_STORED_IN_SESSION)
- def test_apply_settings_adds_third_party_auth_to_installed_apps(self):
- settings.apply_settings(self.settings)
- self.assertIn('third_party_auth', self.settings.INSTALLED_APPS)
-
@unittest.skipUnless(testutil.AUTH_FEATURE_ENABLED, 'third_party_auth not enabled')
def test_apply_settings_enables_no_providers_by_default(self):
# Providers are only enabled via ConfigurationModels in the database
diff --git a/common/djangoapps/track/migrations/0001_initial.py b/common/djangoapps/track/migrations/0001_initial.py
index 6ec146dd1081..99ed7dce89d9 100644
--- a/common/djangoapps/track/migrations/0001_initial.py
+++ b/common/djangoapps/track/migrations/0001_initial.py
@@ -1,48 +1,32 @@
# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'TrackingLog'
- db.create_table('track_trackinglog', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('dtcreated', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
- ('username', self.gf('django.db.models.fields.CharField')(max_length=32, blank=True)),
- ('ip', self.gf('django.db.models.fields.CharField')(max_length=32, blank=True)),
- ('event_source', self.gf('django.db.models.fields.CharField')(max_length=32)),
- ('event_type', self.gf('django.db.models.fields.CharField')(max_length=32, blank=True)),
- ('event', self.gf('django.db.models.fields.TextField')(blank=True)),
- ('agent', self.gf('django.db.models.fields.CharField')(max_length=256, blank=True)),
- ('page', self.gf('django.db.models.fields.CharField')(max_length=32, null=True, blank=True)),
- ('time', self.gf('django.db.models.fields.DateTimeField')()),
- ))
- db.send_create_signal('track', ['TrackingLog'])
-
-
- def backwards(self, orm):
- # Deleting model 'TrackingLog'
- db.delete_table('track_trackinglog')
-
-
- models = {
- 'track.trackinglog': {
- 'Meta': {'object_name': 'TrackingLog'},
- 'agent': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),
- 'dtcreated': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'event': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'event_source': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'event_type': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'ip': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}),
- 'page': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
- 'time': ('django.db.models.fields.DateTimeField', [], {}),
- 'username': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'})
- }
- }
-
- complete_apps = ['track']
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='TrackingLog',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('dtcreated', models.DateTimeField(auto_now_add=True, verbose_name=b'creation date')),
+ ('username', models.CharField(max_length=32, blank=True)),
+ ('ip', models.CharField(max_length=32, blank=True)),
+ ('event_source', models.CharField(max_length=32)),
+ ('event_type', models.CharField(max_length=512, blank=True)),
+ ('event', models.TextField(blank=True)),
+ ('agent', models.CharField(max_length=256, blank=True)),
+ ('page', models.CharField(max_length=512, null=True, blank=True)),
+ ('time', models.DateTimeField(verbose_name=b'event time')),
+ ('host', models.CharField(max_length=64, blank=True)),
+ ],
+ options={
+ 'db_table': 'track_trackinglog',
+ },
+ ),
+ ]
diff --git a/common/djangoapps/track/migrations/0002_auto__add_field_trackinglog_host__chg_field_trackinglog_event_type__ch.py b/common/djangoapps/track/migrations/0002_auto__add_field_trackinglog_host__chg_field_trackinglog_event_type__ch.py
deleted file mode 100644
index 0bb0cde42ec5..000000000000
--- a/common/djangoapps/track/migrations/0002_auto__add_field_trackinglog_host__chg_field_trackinglog_event_type__ch.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding field 'TrackingLog.host'
- db.add_column('track_trackinglog', 'host',
- self.gf('django.db.models.fields.CharField')(default='', max_length=64, blank=True),
- keep_default=False)
-
-
- # Changing field 'TrackingLog.event_type'
- db.alter_column('track_trackinglog', 'event_type', self.gf('django.db.models.fields.CharField')(max_length=512))
-
- # Changing field 'TrackingLog.page'
- db.alter_column('track_trackinglog', 'page', self.gf('django.db.models.fields.CharField')(max_length=512, null=True))
-
- def backwards(self, orm):
- # Deleting field 'TrackingLog.host'
- db.delete_column('track_trackinglog', 'host')
-
-
- # Changing field 'TrackingLog.event_type'
- db.alter_column('track_trackinglog', 'event_type', self.gf('django.db.models.fields.CharField')(max_length=32))
-
- # Changing field 'TrackingLog.page'
- db.alter_column('track_trackinglog', 'page', self.gf('django.db.models.fields.CharField')(max_length=32, null=True))
-
- models = {
- 'track.trackinglog': {
- 'Meta': {'object_name': 'TrackingLog'},
- 'agent': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),
- 'dtcreated': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'event': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'event_source': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'event_type': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
- 'host': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'ip': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}),
- 'page': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
- 'time': ('django.db.models.fields.DateTimeField', [], {}),
- 'username': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'})
- }
- }
-
- complete_apps = ['track']
diff --git a/common/djangoapps/track/views/__init__.py b/common/djangoapps/track/views/__init__.py
index 3babc9c9df75..b3b18bf498f8 100644
--- a/common/djangoapps/track/views/__init__.py
+++ b/common/djangoapps/track/views/__init__.py
@@ -41,17 +41,18 @@ def _get_request_ip(request, default=''):
def _get_request_value(request, value_name, default=''):
- """Helper method to get header values from a request's REQUEST dict, if present."""
- if request is not None and hasattr(request, 'REQUEST') and value_name in request.REQUEST:
- return request.REQUEST[value_name]
- else:
- return default
+ """Helper method to get header values from a request's GET/POST dict, if present."""
+ if request is not None:
+ if request.method == 'GET':
+ return request.GET.get(value_name, default)
+ elif request.method == 'POST':
+ return request.POST.get(value_name, default)
+ return default
def user_track(request):
"""
- Log when POST call to "event" URL is made by a user. Uses request.REQUEST
- to allow for GET calls.
+ Log when POST call to "event" URL is made by a user.
GET or POST call should provide "event_type", "event", and "page" arguments.
"""
diff --git a/common/djangoapps/util/cache.py b/common/djangoapps/util/cache.py
index 1e50ac85898f..5b912ec3e408 100644
--- a/common/djangoapps/util/cache.py
+++ b/common/djangoapps/util/cache.py
@@ -17,7 +17,7 @@
from django.utils.translation import get_language
try:
- cache = cache.get_cache('general')
+ cache = cache.caches['general'] # pylint: disable=invalid-name
except Exception:
cache = cache.cache
diff --git a/common/djangoapps/util/db.py b/common/djangoapps/util/db.py
index 15442b3243b2..75264a66664a 100644
--- a/common/djangoapps/util/db.py
+++ b/common/djangoapps/util/db.py
@@ -1,47 +1,222 @@
"""
Utility functions related to databases.
"""
+# TransactionManagementError used below actually *does* derive from the standard "Exception" class.
+# pylint: disable=nonstandard-exception
from functools import wraps
import random
-from django.db import connection, transaction
+from django.db import DEFAULT_DB_ALIAS, DatabaseError, Error, transaction
MYSQL_MAX_INT = (2 ** 31) - 1
-def commit_on_success_with_read_committed(func): # pylint: disable=invalid-name
+class CommitOnSuccessManager(object):
"""
- Decorator which executes the decorated function inside a transaction with isolation level set to READ COMMITTED.
+ This class implements the commit_on_success() API that was available till Django 1.5.
- If the function returns a response the transaction is committed and if the function raises an exception the
- transaction is rolled back.
+ An instance can be used either as a decorator or as a context manager. However, it
+ cannot be nested inside an atomic block.
- Raises TransactionManagementError if there are already more than 1 level of transactions open.
+ It is mostly taken from https://github.com/django/django/blob/1.8.5/django/db/transaction.py#L110-L277
+ but instead of using save points commits all pending queries at the end of a block.
- Note: This only works on MySQL.
+ The goal is to behave as close as possible to:
+ https://github.com/django/django/blob/1.4.22/django/db/transaction.py#L263-L289
"""
- @wraps(func)
- def wrapper(*args, **kwargs): # pylint: disable=missing-docstring
- if connection.vendor == 'mysql':
- # The isolation level cannot be changed while a transaction is in progress. So we close any existing one.
- if connection.transaction_state:
- if len(connection.transaction_state) == 1:
- connection.commit()
- # We can commit all open transactions. But it does not seem like a good idea.
- elif len(connection.transaction_state) > 1:
- raise transaction.TransactionManagementError('Cannot change isolation level. '
- 'More than 1 level of nested transactions.')
+ # Tests in TestCase subclasses are wrapped in an atomic block to speed up database restoration.
+ # So we must disabled this manager.
+ # https://github.com/django/django/blob/1.8.5/django/core/handlers/base.py#L129-L132
+ ENABLED = True
+
+ def __init__(self, using, read_committed=False):
+ self.using = using
+ self.read_committed = read_committed
+
+ def __enter__(self):
+
+ if not self.ENABLED:
+ return
+
+ connection = transaction.get_connection(self.using)
+
+ if connection.in_atomic_block:
+ raise transaction.TransactionManagementError('Cannot be inside an atomic block.')
+
+ if getattr(connection, 'commit_on_success_block_level', 0) == 0:
+ connection.commit_on_success_block_level = 1
# This will set the transaction isolation level to READ COMMITTED for the next transaction.
- cursor = connection.cursor()
- cursor.execute("SET TRANSACTION ISOLATION LEVEL READ COMMITTED")
+ if self.read_committed is True:
+ if connection.vendor == 'mysql':
+ cursor = connection.cursor()
+ cursor.execute("SET TRANSACTION ISOLATION LEVEL READ COMMITTED")
+
+ # We aren't in a transaction yet; create one.
+ # The usual way to start a transaction is to turn autocommit off.
+ # However, some database adapters (namely sqlite3) don't handle
+ # transactions and savepoints properly when autocommit is off.
+ # In such cases, start an explicit transaction instead, which has
+ # the side-effect of disabling autocommit.
+ if connection.features.autocommits_when_autocommit_is_off:
+ connection._start_transaction_under_autocommit() # pylint: disable=protected-access
+ connection.autocommit = False
+ else:
+ connection.set_autocommit(False)
+ else:
+ if self.read_committed is True:
+ raise transaction.TransactionManagementError('Cannot change isolation level when nested.')
+
+ connection.commit_on_success_block_level += 1
+
+ def __exit__(self, exc_type, exc_value, traceback):
+
+ if not self.ENABLED:
+ return
+
+ connection = transaction.get_connection(self.using)
+
+ try:
+ if exc_type is None:
+ # Commit transaction
+ try:
+ connection.commit()
+ except DatabaseError:
+ try:
+ connection.rollback()
+ except Error:
+ # An error during rollback means that something
+ # went wrong with the connection. Drop it.
+ connection.close()
+ raise
+ else:
+ # Roll back transaction
+ try:
+ connection.rollback()
+ except Error:
+ # An error during rollback means that something
+ # went wrong with the connection. Drop it.
+ connection.close()
+
+ finally:
+ connection.commit_on_success_block_level -= 1
+
+ # Outermost block exit when autocommit was enabled.
+ if connection.commit_on_success_block_level == 0:
+ if connection.features.autocommits_when_autocommit_is_off:
+ connection.autocommit = True
+ else:
+ connection.set_autocommit(True)
+
+ def __call__(self, func):
+ @wraps(func)
+ def decorated(*args, **kwds): # pylint: disable=missing-docstring
+ with self:
+ return func(*args, **kwds)
+ return decorated
+
+
+def commit_on_success(using=None, read_committed=False):
+ """
+ This function implements the commit_on_success() API that was available till Django 1.5.
+
+ It can be used either as a decorator or as a context manager. However, it
+ cannot be nested inside an atomic block.
+
+ If the wrapped function or block returns a response the transaction is committed
+ and if it raises an exception the transaction is rolled back.
+
+ Arguments:
+ using (str): the name of the database.
+ read_committed (bool): Whether to use read committed isolation level.
+
+ Raises:
+ TransactionManagementError: if already inside an atomic block.
+ """
+ if callable(using):
+ return CommitOnSuccessManager(DEFAULT_DB_ALIAS, read_committed)(using)
+ # Decorator: @commit_on_success(...) or context manager: with commit_on_success(...): ...
+ else:
+ return CommitOnSuccessManager(using, read_committed)
- with transaction.commit_on_success():
- return func(*args, **kwargs)
- return wrapper
+class OuterAtomic(transaction.Atomic):
+ """
+ Atomic which cannot be nested in another atomic.
+
+ This is useful if you want to ensure that a commit happens at
+ the end of the wrapped block.
+ """
+ ALLOW_NESTED = False
+
+ def __init__(self, using, savepoint, read_committed=False):
+ self.read_committed = read_committed
+ super(OuterAtomic, self).__init__(using, savepoint)
+
+ def __enter__(self):
+
+ connection = transaction.get_connection(self.using)
+
+ # TestCase setup nests tests in two atomics - one for the test class and one for the individual test.
+ # The outermost atomic starts a transaction - so does not have a savepoint.
+ # The inner atomic starts a savepoint around the test.
+ # So, for tests only, there should be exactly one savepoint_id and two atomic_for_testcase_calls.
+ # atomic_for_testcase_calls below is added in a monkey-patch for tests only.
+ # pylint: disable=no-member
+ if self.ALLOW_NESTED and (self.atomic_for_testcase_calls - len(connection.savepoint_ids)) < 1:
+ raise transaction.TransactionManagementError('Cannot be inside an atomic block.')
+
+ # Otherwise, this shouldn't be nested in any atomic block.
+ if not self.ALLOW_NESTED and connection.in_atomic_block:
+ raise transaction.TransactionManagementError('Cannot be inside an atomic block.')
+
+ # This will set the transaction isolation level to READ COMMITTED for the next transaction.
+ if self.read_committed is True:
+ if connection.vendor == 'mysql':
+ cursor = connection.cursor()
+ cursor.execute("SET TRANSACTION ISOLATION LEVEL READ COMMITTED")
+
+ super(OuterAtomic, self).__enter__()
+
+
+def outer_atomic(using=None, savepoint=True, read_committed=False):
+ """
+ A variant of Django's atomic() which cannot be nested inside another atomic.
+
+ With the upgrade to Django 1.8, all views by default are wrapped
+ in an atomic block. Because of this, a commit to the database can
+ only happen once the view returns. This is because nested atomic
+ blocks use savepoints and the transaction only gets committed when
+ the outermost atomic block returns. See the official Django docs
+ for details: https://docs.djangoproject.com/en/1.8/topics/db/transactions/
+
+ However, in some cases, we need to be able to commit to the
+ database in the middle of a view. The only way to do this
+ is to disable automatic transaction management for the view by
+ adding @transaction.non_atomic_requests to it and then using
+ atomic() inside it in relevant places. To help ensure that queries
+ inside a piece of code are committed, you can wrap it in
+ outer_atomic(). outer_atomic() will ensure that it is not nested
+ inside another atomic block.
+
+ Additionally, some views need to use READ COMMITTED isolation level.
+ For this add @transaction.non_atomic_requests and
+ @outer_atomic(read_committed=True) decorators on it.
+
+ Arguments:
+ using (str): the name of the database.
+ read_committed (bool): Whether to use read committed isolation level.
+
+ Raises:
+ TransactionManagementError: if already inside an atomic block.
+ """
+ if callable(using):
+ return OuterAtomic(DEFAULT_DB_ALIAS, savepoint, read_committed)(using)
+ # Decorator: @outer_atomic(...) or context manager: with outer_atomic(...): ...
+ else:
+ return OuterAtomic(using, savepoint, read_committed)
def generate_int_id(minimum=0, maximum=MYSQL_MAX_INT, used_ids=None):
diff --git a/common/djangoapps/util/json_request.py b/common/djangoapps/util/json_request.py
index 30eacb9810a8..8cc188ec2b18 100644
--- a/common/djangoapps/util/json_request.py
+++ b/common/djangoapps/util/json_request.py
@@ -1,11 +1,36 @@
from functools import wraps
import json
+import decimal
from django.core.serializers import serialize
from django.core.serializers.json import DjangoJSONEncoder
from django.db.models.query import QuerySet
from django.http import HttpResponse, HttpResponseBadRequest
+class EDXJSONEncoder(DjangoJSONEncoder):
+ """
+ Encoder for Decimal object, other objects will be encoded as per DjangoJSONEncoder default implementation.
+
+ NOTE:
+ Please see https://docs.djangoproject.com/en/1.8/releases/1.5/#system-version-of-simplejson-no-longer-used
+ DjangoJSONEncoder will now use the Python's json module but Python's json module don't know about how to
+ encode Decimal object, so as per default implementation Decimal objects will be encoded to `str` which we don't
+ want and also this is different from Django 1.4, In Django 1.4 if Decimal object has zeros after the decimal
+ point then object will be serialized as `int` else `float`, so we are keeping this behavior.
+ """
+ def default(self, o): # pylint: disable=method-hidden
+ """
+ Encode Decimal objects. If decimal object has zeros after the
+ decimal point then object will be serialized as `int` else `float`
+ """
+ if isinstance(o, decimal.Decimal):
+ if o == o.to_integral():
+ return int(o)
+ return float(o)
+ else:
+ return super(EDXJSONEncoder, self).default(o)
+
+
def expect_json(view_function):
"""
View decorator for simplifying handing of requests that expect json. If the request's
@@ -33,15 +58,15 @@ class JsonResponse(HttpResponse):
"""
Django HttpResponse subclass that has sensible defaults for outputting JSON.
"""
- def __init__(self, object=None, status=None, encoder=DjangoJSONEncoder,
+ def __init__(self, resp_obj=None, status=None, encoder=EDXJSONEncoder,
*args, **kwargs):
- if object in (None, ""):
+ if resp_obj in (None, ""):
content = ""
status = status or 204
- elif isinstance(object, QuerySet):
- content = serialize('json', object)
+ elif isinstance(resp_obj, QuerySet):
+ content = serialize('json', resp_obj)
else:
- content = json.dumps(object, cls=encoder, indent=2, ensure_ascii=False)
+ content = json.dumps(resp_obj, cls=encoder, indent=2, ensure_ascii=False)
kwargs.setdefault("content_type", "application/json")
if status:
kwargs["status"] = status
diff --git a/common/djangoapps/util/migrations/0001_initial.py b/common/djangoapps/util/migrations/0001_initial.py
index baed557c2c35..6880b5da3597 100644
--- a/common/djangoapps/util/migrations/0001_initial.py
+++ b/common/djangoapps/util/migrations/0001_initial.py
@@ -1,72 +1,29 @@
# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'RateLimitConfiguration'
- db.create_table('util_ratelimitconfiguration', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('change_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
- ('changed_by', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, on_delete=models.PROTECT)),
- ('enabled', self.gf('django.db.models.fields.BooleanField')(default=False)),
- ))
- db.send_create_signal('util', ['RateLimitConfiguration'])
-
-
- def backwards(self, orm):
- # Deleting model 'RateLimitConfiguration'
- db.delete_table('util_ratelimitconfiguration')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'util.ratelimitconfiguration': {
- 'Meta': {'object_name': 'RateLimitConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- }
- }
-
- complete_apps = ['util']
\ No newline at end of file
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+from django.conf import settings
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='RateLimitConfiguration',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('change_date', models.DateTimeField(auto_now_add=True, verbose_name='Change date')),
+ ('enabled', models.BooleanField(default=False, verbose_name='Enabled')),
+ ('changed_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, editable=False, to=settings.AUTH_USER_MODEL, null=True, verbose_name='Changed by')),
+ ],
+ options={
+ 'ordering': ('-change_date',),
+ 'abstract': False,
+ },
+ ),
+ ]
diff --git a/common/djangoapps/util/migrations/0002_data__default_rate_limit_config.py b/common/djangoapps/util/migrations/0002_data__default_rate_limit_config.py
new file mode 100644
index 000000000000..f43878182939
--- /dev/null
+++ b/common/djangoapps/util/migrations/0002_data__default_rate_limit_config.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+# Converted from the original South migration 0002_default_rate_limit_config.py
+
+from django.db import migrations, models
+
+
+def forwards(apps, schema_editor):
+ """Ensure that rate limiting is enabled by default. """
+ rate_limit_configuration_model = apps.get_model("util", "RateLimitConfiguration")
+ db_alias = schema_editor.connection.alias
+ rate_limit_configuration_model.objects.using(db_alias).get_or_create(enabled=True)
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('util', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.RunPython(forwards)
+ ]
diff --git a/common/djangoapps/util/migrations/0002_default_rate_limit_config.py b/common/djangoapps/util/migrations/0002_default_rate_limit_config.py
deleted file mode 100644
index f15ca5b558a1..000000000000
--- a/common/djangoapps/util/migrations/0002_default_rate_limit_config.py
+++ /dev/null
@@ -1,64 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import DataMigration
-from django.db import models
-
-
-class Migration(DataMigration):
-
- def forwards(self, orm):
- """Ensure that rate limiting is enabled by default. """
- orm['util.RateLimitConfiguration'].objects.create(enabled=True)
-
- def backwards(self, orm):
- pass
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'util.ratelimitconfiguration': {
- 'Meta': {'object_name': 'RateLimitConfiguration'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- }
- }
-
- complete_apps = ['util']
- symmetrical = True
diff --git a/common/djangoapps/util/model_utils.py b/common/djangoapps/util/model_utils.py
index e0a03bc690dc..de8e43a7d8a3 100644
--- a/common/djangoapps/util/model_utils.py
+++ b/common/djangoapps/util/model_utils.py
@@ -41,9 +41,9 @@ def get_changed_fields_dict(instance, model_class):
# an empty dict as a default value.
return {}
else:
- field_names = [
- field[0].name for field in model_class._meta.get_fields_with_model()
- ]
+ # We want to compare all of the scalar fields on the model, but none of
+ # the relations.
+ field_names = [f.name for f in model_class._meta.get_fields() if not f.is_relation] # pylint: disable=protected-access
changed_fields = {
field_name: getattr(old_model, field_name) for field_name in field_names
if getattr(old_model, field_name) != getattr(instance, field_name)
diff --git a/common/djangoapps/util/models.py b/common/djangoapps/util/models.py
index ff353a803960..9cfe1c5fbd71 100644
--- a/common/djangoapps/util/models.py
+++ b/common/djangoapps/util/models.py
@@ -20,7 +20,8 @@ class RateLimitConfiguration(ConfigurationModel):
When enabled, it will disable rate limiting on any view decorated
with the `can_disable_rate_limit` class decorator.
"""
- pass
+ class Meta(ConfigurationModel.Meta):
+ app_label = "util"
def decompress_string(value):
@@ -61,13 +62,3 @@ def to_python(self, value):
value = decompress_string(value)
return value
-
- def south_field_triple(self):
- """Returns a suitable description of this field for South."""
- # We'll just introspect the _actual_ field.
- from south.modelsinspector import introspector
-
- field_class = "django.db.models.fields.TextField"
- args, kwargs = introspector(self)
- # That's our definition!
- return field_class, args, kwargs
diff --git a/common/djangoapps/util/testing.py b/common/djangoapps/util/testing.py
index 72a94a93cdac..d1d49e0496c5 100644
--- a/common/djangoapps/util/testing.py
+++ b/common/djangoapps/util/testing.py
@@ -4,6 +4,9 @@
from django.conf import settings
from django.core.urlresolvers import clear_url_caches, resolve
+from django.test import TestCase
+
+from util.db import OuterAtomic, CommitOnSuccessManager
class UrlResetMixin(object):
@@ -90,3 +93,51 @@ def reset_tracker(self):
Reset the mock tracker in order to forget about old events.
"""
self.mock_tracker.reset_mock()
+
+
+def patch_testcase():
+ """
+ Disable commit_on_success decorators for tests in TestCase subclasses.
+
+ Since tests in TestCase classes are wrapped in an atomic block, we
+ cannot use transaction.commit() or transaction.rollback().
+ https://docs.djangoproject.com/en/1.8/topics/testing/tools/#django.test.TransactionTestCase
+ """
+
+ def enter_atomics_wrapper(wrapped_func):
+ """
+ Wrapper for TestCase._enter_atomics
+ """
+ wrapped_func = wrapped_func.__func__
+
+ def _wrapper(*args, **kwargs):
+ """
+ Method that performs atomic-entering accounting.
+ """
+ CommitOnSuccessManager.ENABLED = False
+ OuterAtomic.ALLOW_NESTED = True
+ if not hasattr(OuterAtomic, 'atomic_for_testcase_calls'):
+ OuterAtomic.atomic_for_testcase_calls = 0
+ OuterAtomic.atomic_for_testcase_calls += 1
+ return wrapped_func(*args, **kwargs)
+ return classmethod(_wrapper)
+
+ def rollback_atomics_wrapper(wrapped_func):
+ """
+ Wrapper for TestCase._rollback_atomics
+ """
+ wrapped_func = wrapped_func.__func__
+
+ def _wrapper(*args, **kwargs):
+ """
+ Method that performs atomic-rollback accounting.
+ """
+ CommitOnSuccessManager.ENABLED = True
+ OuterAtomic.ALLOW_NESTED = False
+ OuterAtomic.atomic_for_testcase_calls -= 1
+ return wrapped_func(*args, **kwargs)
+ return classmethod(_wrapper)
+
+ # pylint: disable=protected-access
+ TestCase._enter_atomics = enter_atomics_wrapper(TestCase._enter_atomics)
+ TestCase._rollback_atomics = rollback_atomics_wrapper(TestCase._rollback_atomics)
diff --git a/common/djangoapps/util/tests/test_db.py b/common/djangoapps/util/tests/test_db.py
index 62326e8a32db..603eecd9bb63 100644
--- a/common/djangoapps/util/tests/test_db.py
+++ b/common/djangoapps/util/tests/test_db.py
@@ -7,27 +7,27 @@
from django.contrib.auth.models import User
from django.db import connection, IntegrityError
-from django.db.transaction import commit_on_success, TransactionManagementError
+from django.db.transaction import atomic, TransactionManagementError
from django.test import TestCase, TransactionTestCase
-from util.db import commit_on_success_with_read_committed, generate_int_id
+from util.db import commit_on_success, generate_int_id, outer_atomic
@ddt.ddt
-class TransactionIsolationLevelsTestCase(TransactionTestCase):
+class TransactionManagersTestCase(TransactionTestCase):
"""
- Tests the effects of changing transaction isolation level to READ COMMITTED instead of REPEATABLE READ.
+ Tests commit_on_success and outer_atomic.
Note: This TestCase only works with MySQL.
- To run it on devstack:
- 1. Add TEST_RUNNER = 'django_nose.NoseTestSuiteRunner' to envs/devstack.py
- 2. Run "./manage.py lms --settings=devstack test util.tests.test_db"
+ To test do: "./manage.py lms --settings=test_with_mysql test util.tests.test_db"
"""
@ddt.data(
- (commit_on_success, IntegrityError, None, True),
- (commit_on_success_with_read_committed, type(None), False, True),
+ (outer_atomic(), IntegrityError, None, True),
+ (outer_atomic(read_committed=True), type(None), False, True),
+ (commit_on_success(), IntegrityError, None, True),
+ (commit_on_success(read_committed=True), type(None), False, True),
)
@ddt.unpack
def test_concurrent_requests(self, transaction_decorator, exception_class, created_in_1, created_in_2):
@@ -80,8 +80,11 @@ def run(self):
self.assertIsNone(thread2.status.get('exception'))
self.assertEqual(thread2.status.get('created'), created_in_2)
- def test_transaction_nesting(self):
- """Test that the decorator raises an error if there are already more than 1 levels of nested transactions."""
+ def test_outer_atomic_nesting(self):
+ """
+ Test that outer_atomic raises an error if it is nested inside
+ another atomic.
+ """
if connection.vendor != 'mysql':
raise unittest.SkipTest('Only works on MySQL.')
@@ -90,15 +93,46 @@ def do_nothing():
"""Just return."""
return
- commit_on_success_with_read_committed(do_nothing)()
+ outer_atomic()(do_nothing)()
+
+ with atomic():
+ atomic()(do_nothing)()
+
+ with outer_atomic():
+ atomic()(do_nothing)()
+
+ with self.assertRaisesRegexp(TransactionManagementError, 'Cannot be inside an atomic block.'):
+ with atomic():
+ outer_atomic()(do_nothing)()
- with commit_on_success():
- commit_on_success_with_read_committed(do_nothing)()
+ with self.assertRaisesRegexp(TransactionManagementError, 'Cannot be inside an atomic block.'):
+ with outer_atomic():
+ outer_atomic()(do_nothing)()
- with self.assertRaises(TransactionManagementError):
+ def test_commit_on_success_nesting(self):
+ """
+ Test that commit_on_success raises an error if it is nested inside
+ atomic or if the isolation level is changed when it is nested
+ inside another commit_on_success.
+ """
+ # pylint: disable=not-callable
+
+ if connection.vendor != 'mysql':
+ raise unittest.SkipTest('Only works on MySQL.')
+
+ def do_nothing():
+ """Just return."""
+ return
+
+ commit_on_success(read_committed=True)(do_nothing)()
+
+ with self.assertRaisesRegexp(TransactionManagementError, 'Cannot change isolation level when nested.'):
with commit_on_success():
- with commit_on_success():
- commit_on_success_with_read_committed(do_nothing)()
+ commit_on_success(read_committed=True)(do_nothing)()
+
+ with self.assertRaisesRegexp(TransactionManagementError, 'Cannot be inside an atomic block.'):
+ with atomic():
+ commit_on_success(read_committed=True)(do_nothing)()
@ddt.ddt
diff --git a/common/djangoapps/util/tests/test_file.py b/common/djangoapps/util/tests/test_file.py
index ae798d080d8d..0a1b111a8f4e 100644
--- a/common/djangoapps/util/tests/test_file.py
+++ b/common/djangoapps/util/tests/test_file.py
@@ -88,7 +88,6 @@ def setUp(self):
super(StoreUploadedFileTestCase, self).setUp()
self.request = Mock(spec=HttpRequest)
self.file_content = "test file content"
- self.request.FILES = {"uploaded_file": SimpleUploadedFile("tempfile.csv", self.file_content)}
self.stored_file_name = None
self.file_storage = None
self.default_max_size = 2000000
@@ -109,22 +108,27 @@ def test_error_conditions(self):
Verifies that exceptions are thrown in the expected cases.
"""
with self.assertRaises(ValueError) as error:
+ self.request.FILES = {"uploaded_file": SimpleUploadedFile("tempfile.csv", self.file_content)}
store_uploaded_file(self.request, "wrong_key", [".txt", ".csv"], "stored_file", self.default_max_size)
self.verify_exception("No file uploaded with key 'wrong_key'.", error)
with self.assertRaises(exceptions.PermissionDenied) as error:
+ self.request.FILES = {"uploaded_file": SimpleUploadedFile("tempfile.csv", self.file_content)}
store_uploaded_file(self.request, "uploaded_file", [], "stored_file", self.default_max_size)
self.verify_exception("The file must end with one of the following extensions: ''.", error)
with self.assertRaises(exceptions.PermissionDenied) as error:
+ self.request.FILES = {"uploaded_file": SimpleUploadedFile("tempfile.csv", self.file_content)}
store_uploaded_file(self.request, "uploaded_file", [".bar"], "stored_file", self.default_max_size)
self.verify_exception("The file must end with the extension '.bar'.", error)
with self.assertRaises(exceptions.PermissionDenied) as error:
+ self.request.FILES = {"uploaded_file": SimpleUploadedFile("tempfile.csv", self.file_content)}
store_uploaded_file(self.request, "uploaded_file", [".xxx", ".bar"], "stored_file", self.default_max_size)
self.verify_exception("The file must end with one of the following extensions: '.xxx', '.bar'.", error)
with self.assertRaises(exceptions.PermissionDenied) as error:
+ self.request.FILES = {"uploaded_file": SimpleUploadedFile("tempfile.csv", self.file_content)}
store_uploaded_file(self.request, "uploaded_file", [".csv"], "stored_file", 2)
self.verify_exception("Maximum upload file size is 2 bytes.", error)
@@ -158,6 +162,7 @@ def success_validator(storage, filename):
store_file_data(storage, filename)
with self.assertRaises(FileValidationException) as error:
+ self.request.FILES = {"uploaded_file": SimpleUploadedFile("tempfile.csv", self.file_content)}
store_uploaded_file(
self.request, "uploaded_file", [".csv"], "error_file",
self.default_max_size, validator=exception_validator
@@ -166,6 +171,7 @@ def success_validator(storage, filename):
# Verify the file was deleted.
verify_file_presence(False)
+ self.request.FILES = {"uploaded_file": SimpleUploadedFile("tempfile.csv", self.file_content)}
store_uploaded_file(
self.request, "uploaded_file", [".csv"], "success_file", self.default_max_size, validator=success_validator
)
@@ -176,6 +182,7 @@ def test_file_upload_lower_case_extension(self):
"""
Tests uploading a file with lower case extension. Verifies that the stored file contents are correct.
"""
+ self.request.FILES = {"uploaded_file": SimpleUploadedFile("tempfile.csv", self.file_content)}
file_storage, stored_file_name = store_uploaded_file(
self.request, "uploaded_file", [".csv"], "stored_file", self.default_max_size
)
@@ -204,6 +211,7 @@ def test_unique_filenames(self):
self.request, "nonunique_file", [".txt"], requested_file_name, self.default_max_size
)
+ self.request.FILES = {"nonunique_file": SimpleUploadedFile("nonunique.txt", file_content)}
file_storage, second_stored_file_name = store_uploaded_file(
self.request, "nonunique_file", [".txt"], requested_file_name, self.default_max_size
)
diff --git a/common/djangoapps/util/tests/test_memcache.py b/common/djangoapps/util/tests/test_memcache.py
index 805884012db1..939765e3a480 100644
--- a/common/djangoapps/util/tests/test_memcache.py
+++ b/common/djangoapps/util/tests/test_memcache.py
@@ -3,7 +3,7 @@
"""
from django.test import TestCase
-from django.core.cache import get_cache
+from django.core.cache import caches
from util.memcache import safe_key
@@ -18,7 +18,7 @@ class MemcacheTest(TestCase):
def setUp(self):
super(MemcacheTest, self).setUp()
- self.cache = get_cache('default')
+ self.cache = caches['default']
def test_safe_key(self):
key = safe_key('test', 'prefix', 'version')
diff --git a/common/djangoapps/util/url.py b/common/djangoapps/util/url.py
index c90d83dea2a7..25250eb2d577 100644
--- a/common/djangoapps/util/url.py
+++ b/common/djangoapps/util/url.py
@@ -5,7 +5,7 @@
import sys
from django.conf import settings
from django.core.urlresolvers import set_urlconf
-from django.utils.importlib import import_module
+from importlib import import_module
def reload_django_url_config():
diff --git a/common/djangoapps/xblock_django/migrations/0001_initial.py b/common/djangoapps/xblock_django/migrations/0001_initial.py
index 68485f0196b6..21231c122a51 100644
--- a/common/djangoapps/xblock_django/migrations/0001_initial.py
+++ b/common/djangoapps/xblock_django/migrations/0001_initial.py
@@ -1,74 +1,30 @@
# -*- coding: utf-8 -*-
-from south.utils import datetime_utils as datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'XBlockDisableConfig'
- db.create_table('xblock_django_xblockdisableconfig', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('change_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
- ('changed_by', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, on_delete=models.PROTECT)),
- ('enabled', self.gf('django.db.models.fields.BooleanField')(default=False)),
- ('disabled_blocks', self.gf('django.db.models.fields.TextField')(default='', blank=True)),
- ))
- db.send_create_signal('xblock_django', ['XBlockDisableConfig'])
-
-
- def backwards(self, orm):
- # Deleting model 'XBlockDisableConfig'
- db.delete_table('xblock_django_xblockdisableconfig')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'xblock_django.xblockdisableconfig': {
- 'Meta': {'ordering': "('-change_date',)", 'object_name': 'XBlockDisableConfig'},
- 'change_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'on_delete': 'models.PROTECT'}),
- 'disabled_blocks': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- }
- }
-
- complete_apps = ['xblock_django']
\ No newline at end of file
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+from django.conf import settings
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='XBlockDisableConfig',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('change_date', models.DateTimeField(auto_now_add=True, verbose_name='Change date')),
+ ('enabled', models.BooleanField(default=False, verbose_name='Enabled')),
+ ('disabled_blocks', models.TextField(default=b'', help_text='Space-separated list of XBlocks which should not render.', blank=True)),
+ ('changed_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, editable=False, to=settings.AUTH_USER_MODEL, null=True, verbose_name='Changed by')),
+ ],
+ options={
+ 'ordering': ('-change_date',),
+ 'abstract': False,
+ },
+ ),
+ ]
diff --git a/common/djangoapps/xblock_django/models.py b/common/djangoapps/xblock_django/models.py
index 863be4a3a742..d527287307e0 100644
--- a/common/djangoapps/xblock_django/models.py
+++ b/common/djangoapps/xblock_django/models.py
@@ -13,6 +13,9 @@ class XBlockDisableConfig(ConfigurationModel):
Configuration for disabling XBlocks.
"""
+ class Meta(ConfigurationModel.Meta):
+ app_label = 'xblock_django'
+
disabled_blocks = TextField(
default='', blank=True,
help_text=_('Space-separated list of XBlocks which should not render.')
diff --git a/common/djangoapps/xmodule_django/models.py b/common/djangoapps/xmodule_django/models.py
index 99268d7e4f47..fdf7294f7769 100644
--- a/common/djangoapps/xmodule_django/models.py
+++ b/common/djangoapps/xmodule_django/models.py
@@ -7,8 +7,6 @@
from django.core.exceptions import ValidationError
from opaque_keys.edx.keys import CourseKey, UsageKey, BlockTypeKey
-from south.modelsinspector import add_introspection_rules
-
class NoneToEmptyManager(models.Manager):
"""
@@ -22,7 +20,10 @@ def __init__(self):
"""
super(NoneToEmptyManager, self).__init__()
- def get_query_set(self):
+ def get_queryset(self):
+ """
+ Returns the result of NoneToEmptyQuerySet instead of a regular QuerySet.
+ """
return NoneToEmptyQuerySet(self.model, using=self._db)
@@ -171,9 +172,3 @@ class BlockTypeKeyField(OpaqueKeyField):
"""
description = "A BlockTypeKey object, saved to the DB in the form of a string."
KEY_CLASS = BlockTypeKey
-
-
-add_introspection_rules([], [r"^xmodule_django\.models\.CourseKeyField"])
-add_introspection_rules([], [r"^xmodule_django\.models\.LocationKeyField"])
-add_introspection_rules([], [r"^xmodule_django\.models\.UsageKeyField"])
-add_introspection_rules([], [r"^xmodule_django\.models\.BlockTypeKeyField"])
diff --git a/common/lib/capa/capa/tests/test_responsetypes.py b/common/lib/capa/capa/tests/test_responsetypes.py
index 788c551dc2c3..a3a91e440fc9 100644
--- a/common/lib/capa/capa/tests/test_responsetypes.py
+++ b/common/lib/capa/capa/tests/test_responsetypes.py
@@ -57,11 +57,11 @@ def setUp(self):
if self.xml_factory_class:
self.xml_factory = self.xml_factory_class()
- def build_problem(self, capa_system=None, **kwargs):
+ def build_problem(self, capa_system=None, **kwargs): # pylint: disable=missing-docstring
xml = self.xml_factory.build_xml(**kwargs)
return new_loncapa_problem(xml, capa_system=capa_system)
- def assert_grade(self, problem, submission, expected_correctness, msg=None):
+ def assert_grade(self, problem, submission, expected_correctness, msg=None): # pylint: disable=missing-docstring
input_dict = {'1_2_1': submission}
correct_map = problem.grade_answers(input_dict)
if msg is None:
@@ -69,11 +69,11 @@ def assert_grade(self, problem, submission, expected_correctness, msg=None):
else:
self.assertEquals(correct_map.get_correctness('1_2_1'), expected_correctness, msg)
- def assert_answer_format(self, problem):
+ def assert_answer_format(self, problem): # pylint: disable=missing-docstring
answers = problem.get_question_answers()
self.assertTrue(answers['1_2_1'] is not None)
- def assert_multiple_grade(self, problem, correct_answers, incorrect_answers):
+ def assert_multiple_grade(self, problem, correct_answers, incorrect_answers): # pylint: disable=missing-docstring
for input_str in correct_answers:
result = problem.grade_answers({'1_2_1': input_str}).get_correctness('1_2_1')
self.assertEqual(result, 'correct')
@@ -109,7 +109,7 @@ def _get_random_number_result(self, seed_value):
return str(rand.randint(0, 1e9))
-class MultiChoiceResponseTest(ResponseTest):
+class MultiChoiceResponseTest(ResponseTest): # pylint: disable=missing-docstring
xml_factory_class = MultipleChoiceResponseXMLFactory
def test_multiple_choice_grade(self):
@@ -170,7 +170,7 @@ def test_partial_points_multiple_choice_grade(self):
self.assertAlmostEqual(correct_map.get_npoints('1_2_1'), 0)
-class TrueFalseResponseTest(ResponseTest):
+class TrueFalseResponseTest(ResponseTest): # pylint: disable=missing-docstring
xml_factory_class = TrueFalseResponseXMLFactory
def test_true_false_grade(self):
@@ -214,7 +214,7 @@ def test_single_correct_response(self):
self.assert_grade(problem, ['choice_0'], 'correct')
-class ImageResponseTest(ResponseTest):
+class ImageResponseTest(ResponseTest): # pylint: disable=missing-docstring
xml_factory_class = ImageResponseXMLFactory
def test_rectangle_grade(self):
@@ -277,7 +277,7 @@ def test_show_answer(self):
self.assert_answer_format(problem)
-class SymbolicResponseTest(ResponseTest):
+class SymbolicResponseTest(ResponseTest): # pylint: disable=missing-docstring
xml_factory_class = SymbolicResponseXMLFactory
def test_grade_single_input_correct(self):
@@ -394,7 +394,7 @@ def _assert_symbolic_grade(
)
-class OptionResponseTest(ResponseTest):
+class OptionResponseTest(ResponseTest): # pylint: disable=missing-docstring
xml_factory_class = OptionResponseXMLFactory
def test_grade(self):
@@ -592,7 +592,7 @@ def test_validate_answer(self):
self.assertFalse(problem.responders.values()[0].validate_answer('3*y+2*x'))
-class StringResponseTest(ResponseTest):
+class StringResponseTest(ResponseTest): # pylint: disable=missing-docstring
xml_factory_class = StringResponseXMLFactory
def test_backward_compatibility_for_multiple_answers(self):
@@ -947,7 +947,7 @@ def gimme_a_random_hint(answer_ids, student_answers, new_cmap, old_cmap):
self.assertEqual(hint, self._get_random_number_result(problem.seed))
-class CodeResponseTest(ResponseTest):
+class CodeResponseTest(ResponseTest): # pylint: disable=missing-docstring
xml_factory_class = CodeResponseXMLFactory
def setUp(self):
@@ -1138,7 +1138,7 @@ def test_parse_score_msg_of_responder(self):
self.assertEquals(output[answer_id]['msg'], u'Invalid grader reply. Please contact the course staff.')
-class ChoiceResponseTest(ResponseTest):
+class ChoiceResponseTest(ResponseTest): # pylint: disable=missing-docstring
xml_factory_class = ChoiceResponseXMLFactory
def test_radio_group_grade(self):
@@ -1286,7 +1286,7 @@ def test_grade_with_no_checkbox_selected(self):
self.assertEqual(correct_map.get_correctness('1_2_1'), 'incorrect')
-class JavascriptResponseTest(ResponseTest):
+class JavascriptResponseTest(ResponseTest): # pylint: disable=missing-docstring
xml_factory_class = JavascriptResponseXMLFactory
def test_grade(self):
@@ -1326,7 +1326,7 @@ def test_cant_execute_javascript(self):
)
-class NumericalResponseTest(ResponseTest):
+class NumericalResponseTest(ResponseTest): # pylint: disable=missing-docstring
xml_factory_class = NumericalResponseXMLFactory
# We blend the line between integration (using evaluator) and exclusively
@@ -1640,7 +1640,7 @@ def test_validate_answer(self):
self.assertFalse(responder.validate_answer('fish'))
-class CustomResponseTest(ResponseTest):
+class CustomResponseTest(ResponseTest): # pylint: disable=missing-docstring
xml_factory_class = CustomResponseXMLFactory
def test_inline_code(self):
diff --git a/common/lib/xmodule/xmodule/course_module.py b/common/lib/xmodule/xmodule/course_module.py
index f1993e58b125..19b85a36a133 100644
--- a/common/lib/xmodule/xmodule/course_module.py
+++ b/common/lib/xmodule/xmodule/course_module.py
@@ -417,6 +417,7 @@ class CourseFields(object):
)
has_children = True
checklists = List(
+ help=_("Checklist to Follow When Developing a Course"),
scope=Scope.settings,
default=[
{
@@ -787,7 +788,8 @@ class CourseFields(object):
"number that you entered when you created the course. To use the course number that you entered when "
"you created the course, enter null."
),
- scope=Scope.settings
+ scope=Scope.settings,
+ default=""
)
max_student_enrollments_allowed = Integer(
diff --git a/common/lib/xmodule/xmodule/modulestore/django.py b/common/lib/xmodule/xmodule/modulestore/django.py
index 9f61a4e8d6f3..7eb9ef8d8d84 100644
--- a/common/lib/xmodule/xmodule/modulestore/django.py
+++ b/common/lib/xmodule/xmodule/modulestore/django.py
@@ -17,7 +17,7 @@
if not settings.configured:
settings.configure()
-from django.core.cache import get_cache, InvalidCacheBackendError
+from django.core.cache import caches, InvalidCacheBackendError
import django.dispatch
import django.utils
@@ -152,9 +152,9 @@ def create_modulestore_instance(
request_cache = None
try:
- metadata_inheritance_cache = get_cache('mongo_metadata_inheritance')
+ metadata_inheritance_cache = caches['mongo_metadata_inheritance']
except InvalidCacheBackendError:
- metadata_inheritance_cache = get_cache('default')
+ metadata_inheritance_cache = caches['default']
if issubclass(class_, MixedModuleStore):
_options['create_modulestore_instance'] = create_modulestore_instance
@@ -214,7 +214,7 @@ def modulestore():
# should be updated to have a setting that enumerates modulestore
# wrappers and then uses that setting to wrap the modulestore in
# appropriate wrappers depending on enabled features.
- from ccx.modulestore import CCXModulestoreWrapper # pylint: disable=import-error
+ from lms.djangoapps.ccx.modulestore import CCXModulestoreWrapper
_MIXED_MODULESTORE = CCXModulestoreWrapper(_MIXED_MODULESTORE)
return _MIXED_MODULESTORE
diff --git a/common/lib/xmodule/xmodule/modulestore/split_mongo/mongo_connection.py b/common/lib/xmodule/xmodule/modulestore/split_mongo/mongo_connection.py
index 739fcf32ea7b..81dade550e0c 100644
--- a/common/lib/xmodule/xmodule/modulestore/split_mongo/mongo_connection.py
+++ b/common/lib/xmodule/xmodule/modulestore/split_mongo/mongo_connection.py
@@ -15,7 +15,7 @@
from pymongo.errors import DuplicateKeyError # pylint: disable=unused-import
try:
- from django.core.cache import get_cache, InvalidCacheBackendError
+ from django.core.cache import caches, InvalidCacheBackendError
DJANGO_AVAILABLE = True
except ImportError:
DJANGO_AVAILABLE = False
@@ -32,6 +32,15 @@
new_contract('BlockData', BlockData)
+def get_cache(alias):
+ """
+ Return cache for an `alias`
+
+ Note: The primary purpose of this is to mock the cache in test_split_modulestore.py
+ """
+ return caches[alias]
+
+
def round_power_2(value):
"""
Return value rounded up to the nearest power of 2.
diff --git a/common/lib/xmodule/xmodule/modulestore/tests/test_split_modulestore.py b/common/lib/xmodule/xmodule/modulestore/tests/test_split_modulestore.py
index 5e10752fa787..4c0ee8770593 100644
--- a/common/lib/xmodule/xmodule/modulestore/tests/test_split_modulestore.py
+++ b/common/lib/xmodule/xmodule/modulestore/tests/test_split_modulestore.py
@@ -13,7 +13,7 @@
import ddt
from contracts import contract
from nose.plugins.attrib import attr
-from django.core.cache import get_cache, InvalidCacheBackendError
+from django.core.cache import caches, InvalidCacheBackendError
from openedx.core.lib import tempdir
from xblock.fields import Reference, ReferenceList, ReferenceValueDict
@@ -934,7 +934,7 @@ class TestCourseStructureCache(SplitModuleTest):
def setUp(self):
# use the default cache, since the `course_structure_cache`
# is a dummy cache during testing
- self.cache = get_cache('default')
+ self.cache = caches['default']
# make sure we clear the cache before every test...
self.cache.clear()
diff --git a/common/lib/xmodule/xmodule/static_content.py b/common/lib/xmodule/xmodule/static_content.py
index deed93e0c5a0..dd4fbecbc6d1 100755
--- a/common/lib/xmodule/xmodule/static_content.py
+++ b/common/lib/xmodule/xmodule/static_content.py
@@ -186,6 +186,9 @@ def main():
Generate
Usage: static_content.py
"""
+ from django.conf import settings
+ settings.configure()
+
args = docopt(main.__doc__)
root = path(args[''])
diff --git a/common/lib/xmodule/xmodule/tests/test_course_metadata_utils.py b/common/lib/xmodule/xmodule/tests/test_course_metadata_utils.py
index 6743dcbf4e01..5e8d4ec20367 100644
--- a/common/lib/xmodule/xmodule/tests/test_course_metadata_utils.py
+++ b/common/lib/xmodule/xmodule/tests/test_course_metadata_utils.py
@@ -6,7 +6,6 @@
from unittest import TestCase
from django.utils.timezone import UTC
-from django.utils.translation import ugettext
from xmodule.course_metadata_utils import (
clean_course_key,
@@ -105,6 +104,10 @@ def mock_strftime_localized(date_time, format_string):
else:
raise ValueError("Invalid format string :" + format_string)
+ def nop_gettext(text):
+ """Dummy implementation of gettext, so we don't need Django."""
+ return text
+
test_datetime = datetime(1945, 02, 06, 04, 20, 00, tzinfo=UTC())
advertised_start_parsable = "2038-01-19 03:14:07"
advertised_start_bad_date = "215-01-01 10:10:10"
@@ -158,36 +161,34 @@ def mock_strftime_localized(date_time, format_string):
# Test parsable advertised start date.
# Expect start datetime to be parsed and formatted back into a string.
TestScenario(
- (DEFAULT_START_DATE, advertised_start_parsable, 'DATE_TIME', ugettext, mock_strftime_localized),
+ (DEFAULT_START_DATE, advertised_start_parsable, 'DATE_TIME', nop_gettext, mock_strftime_localized),
mock_strftime_localized(Date().from_json(advertised_start_parsable), 'DATE_TIME') + " UTC"
),
# Test un-parsable advertised start date.
# Expect date parsing to throw a ValueError, and the advertised
# start to be returned in Title Case.
TestScenario(
- (test_datetime, advertised_start_unparsable, 'DATE_TIME', ugettext, mock_strftime_localized),
+ (test_datetime, advertised_start_unparsable, 'DATE_TIME', nop_gettext, mock_strftime_localized),
advertised_start_unparsable.title()
),
# Test parsable advertised start date from before January 1, 1900.
# Expect mock_strftime_localized to throw a ValueError, and the
# advertised start to be returned in Title Case.
TestScenario(
- (test_datetime, advertised_start_bad_date, 'DATE_TIME', ugettext, mock_strftime_localized),
+ (test_datetime, advertised_start_bad_date, 'DATE_TIME', nop_gettext, mock_strftime_localized),
advertised_start_bad_date.title()
),
# Test without advertised start date, but with a set start datetime.
# Expect formatted datetime to be returned.
TestScenario(
- (test_datetime, None, 'SHORT_DATE', ugettext, mock_strftime_localized),
+ (test_datetime, None, 'SHORT_DATE', nop_gettext, mock_strftime_localized),
mock_strftime_localized(test_datetime, 'SHORT_DATE')
),
# Test without advertised start date and with default start datetime.
# Expect TBD to be returned.
TestScenario(
- (DEFAULT_START_DATE, None, 'SHORT_DATE', ugettext, mock_strftime_localized),
- # Translators: TBD stands for 'To Be Determined' and is used when a course
- # does not yet have an announced start date.
- ugettext('TBD')
+ (DEFAULT_START_DATE, None, 'SHORT_DATE', nop_gettext, mock_strftime_localized),
+ 'TBD'
)
]),
FunctionTest(course_end_datetime_text, [
diff --git a/common/test/acceptance/pages/lms/instructor_dashboard.py b/common/test/acceptance/pages/lms/instructor_dashboard.py
index 83e42928968d..9286f6ed2951 100644
--- a/common/test/acceptance/pages/lms/instructor_dashboard.py
+++ b/common/test/acceptance/pages/lms/instructor_dashboard.py
@@ -775,8 +775,8 @@ class SpecialExamsPageAttemptsSection(PageObject):
url = None
def is_browser_on_page(self):
- return self.q(css="div.wrap #ui-accordion-proctoring-accordion-header-1[aria-selected=true]").present and\
- self.q(css="#search_attempt_id").present
+ return (self.q(css="div.wrap #ui-accordion-proctoring-accordion-header-1[aria-selected=true]").present and
+ self.q(css="#search_attempt_id").present)
@property
def is_search_text_field_visible(self):
diff --git a/common/test/acceptance/tests/discussion/helpers.py b/common/test/acceptance/tests/discussion/helpers.py
index 269148b20de4..949628d98d4c 100644
--- a/common/test/acceptance/tests/discussion/helpers.py
+++ b/common/test/acceptance/tests/discussion/helpers.py
@@ -81,6 +81,7 @@ def add_user_to_cohort(self, course_fixture, username, cohort_id):
"""
url = LMS_BASE_URL + "/courses/" + course_fixture._course_key + "/cohorts/{}/add".format(cohort_id)
data = {"users": username}
+ course_fixture.headers['Content-type'] = 'application/x-www-form-urlencoded'
response = course_fixture.session.post(url, data=data, headers=course_fixture.headers)
self.assertTrue(response.ok, "Failed to add user to cohort")
diff --git a/common/test/acceptance/tests/lms/test_teams.py b/common/test/acceptance/tests/lms/test_teams.py
index b1226e647a3d..08b96e9c0be7 100644
--- a/common/test/acceptance/tests/lms/test_teams.py
+++ b/common/test/acceptance/tests/lms/test_teams.py
@@ -673,10 +673,7 @@ def test_sort_teams(self, sort_order, secondary_sort_order, reverse):
user_info = AutoAuthPage(self.browser, course_id=self.course_id).visit().user_info
self.create_membership(user_info['username'], team['id'])
team['open_slots'] = self.max_team_size - i
- # Parse last activity date, removing microseconds because
- # the Django ORM does not support them. Will be fixed in
- # Django 1.8.
- team['last_activity_at'] = parse(team['last_activity_at']).replace(microsecond=0)
+
# Re-authenticate as staff after creating users
AutoAuthPage(
self.browser,
diff --git a/common/test/db_cache/bok_choy_data.json b/common/test/db_cache/bok_choy_data.json
deleted file mode 100644
index 74b2c4d6752f..000000000000
--- a/common/test/db_cache/bok_choy_data.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"pk": 81, "model": "contenttypes.contenttype", "fields": {"model": "accesstoken", "name": "access token", "app_label": "oauth2"}}, {"pk": 164, "model": "contenttypes.contenttype", "fields": {"model": "aiclassifier", "name": "ai classifier", "app_label": "assessment"}}, {"pk": 163, "model": "contenttypes.contenttype", "fields": {"model": "aiclassifierset", "name": "ai classifier set", "app_label": "assessment"}}, {"pk": 166, "model": "contenttypes.contenttype", "fields": {"model": "aigradingworkflow", "name": "ai grading workflow", "app_label": "assessment"}}, {"pk": 165, "model": "contenttypes.contenttype", "fields": {"model": "aitrainingworkflow", "name": "ai training workflow", "app_label": "assessment"}}, {"pk": 35, "model": "contenttypes.contenttype", "fields": {"model": "anonymoususerid", "name": "anonymous user id", "app_label": "student"}}, {"pk": 84, "model": "contenttypes.contenttype", "fields": {"model": "article", "name": "article", "app_label": "wiki"}}, {"pk": 85, "model": "contenttypes.contenttype", "fields": {"model": "articleforobject", "name": "Article for object", "app_label": "wiki"}}, {"pk": 88, "model": "contenttypes.contenttype", "fields": {"model": "articleplugin", "name": "article plugin", "app_label": "wiki"}}, {"pk": 86, "model": "contenttypes.contenttype", "fields": {"model": "articlerevision", "name": "article revision", "app_label": "wiki"}}, {"pk": 93, "model": "contenttypes.contenttype", "fields": {"model": "articlesubscription", "name": "article subscription", "app_label": "wiki"}}, {"pk": 154, "model": "contenttypes.contenttype", "fields": {"model": "assessment", "name": "assessment", "app_label": "assessment"}}, {"pk": 157, "model": "contenttypes.contenttype", "fields": {"model": "assessmentfeedback", "name": "assessment feedback", "app_label": "assessment"}}, {"pk": 156, "model": "contenttypes.contenttype", "fields": {"model": "assessmentfeedbackoption", "name": "assessment feedback option", "app_label": "assessment"}}, {"pk": 155, "model": "contenttypes.contenttype", "fields": {"model": "assessmentpart", "name": "assessment part", "app_label": "assessment"}}, {"pk": 167, "model": "contenttypes.contenttype", "fields": {"model": "assessmentworkflow", "name": "assessment workflow", "app_label": "workflow"}}, {"pk": 169, "model": "contenttypes.contenttype", "fields": {"model": "assessmentworkflowcancellation", "name": "assessment workflow cancellation", "app_label": "workflow"}}, {"pk": 168, "model": "contenttypes.contenttype", "fields": {"model": "assessmentworkflowstep", "name": "assessment workflow step", "app_label": "workflow"}}, {"pk": 19, "model": "contenttypes.contenttype", "fields": {"model": "association", "name": "association", "app_label": "django_openid_auth"}}, {"pk": 25, "model": "contenttypes.contenttype", "fields": {"model": "association", "name": "association", "app_label": "default"}}, {"pk": 63, "model": "contenttypes.contenttype", "fields": {"model": "badgeassertion", "name": "badge assertion", "app_label": "certificates"}}, {"pk": 64, "model": "contenttypes.contenttype", "fields": {"model": "badgeimageconfiguration", "name": "badge image configuration", "app_label": "certificates"}}, {"pk": 77, "model": "contenttypes.contenttype", "fields": {"model": "brandingapiconfig", "name": "branding api config", "app_label": "branding"}}, {"pk": 76, "model": "contenttypes.contenttype", "fields": {"model": "brandinginfoconfig", "name": "branding info config", "app_label": "branding"}}, {"pk": 61, "model": "contenttypes.contenttype", "fields": {"model": "certificategenerationconfiguration", "name": "certificate generation configuration", "app_label": "certificates"}}, {"pk": 60, "model": "contenttypes.contenttype", "fields": {"model": "certificategenerationcoursesetting", "name": "certificate generation course setting", "app_label": "certificates"}}, {"pk": 62, "model": "contenttypes.contenttype", "fields": {"model": "certificatehtmlviewconfiguration", "name": "certificate html view configuration", "app_label": "certificates"}}, {"pk": 122, "model": "contenttypes.contenttype", "fields": {"model": "certificateitem", "name": "certificate item", "app_label": "shoppingcart"}}, {"pk": 56, "model": "contenttypes.contenttype", "fields": {"model": "certificatewhitelist", "name": "certificate whitelist", "app_label": "certificates"}}, {"pk": 79, "model": "contenttypes.contenttype", "fields": {"model": "client", "name": "client", "app_label": "oauth2"}}, {"pk": 26, "model": "contenttypes.contenttype", "fields": {"model": "code", "name": "code", "app_label": "default"}}, {"pk": 4, "model": "contenttypes.contenttype", "fields": {"model": "contenttype", "name": "content type", "app_label": "contenttypes"}}, {"pk": 22, "model": "contenttypes.contenttype", "fields": {"model": "corsmodel", "name": "cors model", "app_label": "corsheaders"}}, {"pk": 136, "model": "contenttypes.contenttype", "fields": {"model": "country", "name": "country", "app_label": "embargo"}}, {"pk": 137, "model": "contenttypes.contenttype", "fields": {"model": "countryaccessrule", "name": "country access rule", "app_label": "embargo"}}, {"pk": 116, "model": "contenttypes.contenttype", "fields": {"model": "coupon", "name": "coupon", "app_label": "shoppingcart"}}, {"pk": 117, "model": "contenttypes.contenttype", "fields": {"model": "couponredemption", "name": "coupon redemption", "app_label": "shoppingcart"}}, {"pk": 48, "model": "contenttypes.contenttype", "fields": {"model": "courseaccessrole", "name": "course access role", "app_label": "student"}}, {"pk": 138, "model": "contenttypes.contenttype", "fields": {"model": "courseaccessrulehistory", "name": "course access rule history", "app_label": "embargo"}}, {"pk": 75, "model": "contenttypes.contenttype", "fields": {"model": "courseauthorization", "name": "course authorization", "app_label": "bulk_email"}}, {"pk": 71, "model": "contenttypes.contenttype", "fields": {"model": "coursecohort", "name": "course cohort", "app_label": "course_groups"}}, {"pk": 70, "model": "contenttypes.contenttype", "fields": {"model": "coursecohortssettings", "name": "course cohorts settings", "app_label": "course_groups"}}, {"pk": 178, "model": "contenttypes.contenttype", "fields": {"model": "coursecontentmilestone", "name": "course content milestone", "app_label": "milestones"}}, {"pk": 189, "model": "contenttypes.contenttype", "fields": {"model": "coursecreator", "name": "course creator", "app_label": "course_creators"}}, {"pk": 72, "model": "contenttypes.contenttype", "fields": {"model": "courseemail", "name": "course email", "app_label": "bulk_email"}}, {"pk": 74, "model": "contenttypes.contenttype", "fields": {"model": "courseemailtemplate", "name": "course email template", "app_label": "bulk_email"}}, {"pk": 45, "model": "contenttypes.contenttype", "fields": {"model": "courseenrollment", "name": "course enrollment", "app_label": "student"}}, {"pk": 47, "model": "contenttypes.contenttype", "fields": {"model": "courseenrollmentallowed", "name": "course enrollment allowed", "app_label": "student"}}, {"pk": 53, "model": "contenttypes.contenttype", "fields": {"model": "courseenrollmentattribute", "name": "course enrollment attribute", "app_label": "student"}}, {"pk": 177, "model": "contenttypes.contenttype", "fields": {"model": "coursemilestone", "name": "course milestone", "app_label": "milestones"}}, {"pk": 125, "model": "contenttypes.contenttype", "fields": {"model": "coursemode", "name": "course mode", "app_label": "course_modes"}}, {"pk": 126, "model": "contenttypes.contenttype", "fields": {"model": "coursemodesarchive", "name": "course modes archive", "app_label": "course_modes"}}, {"pk": 119, "model": "contenttypes.contenttype", "fields": {"model": "courseregcodeitem", "name": "course reg code item", "app_label": "shoppingcart"}}, {"pk": 120, "model": "contenttypes.contenttype", "fields": {"model": "courseregcodeitemannotation", "name": "course reg code item annotation", "app_label": "shoppingcart"}}, {"pk": 114, "model": "contenttypes.contenttype", "fields": {"model": "courseregistrationcode", "name": "course registration code", "app_label": "shoppingcart"}}, {"pk": 112, "model": "contenttypes.contenttype", "fields": {"model": "courseregistrationcodeinvoiceitem", "name": "course registration code invoice item", "app_label": "shoppingcart"}}, {"pk": 140, "model": "contenttypes.contenttype", "fields": {"model": "coursererunstate", "name": "course rerun state", "app_label": "course_action_state"}}, {"pk": 66, "model": "contenttypes.contenttype", "fields": {"model": "coursesoftware", "name": "course software", "app_label": "licenses"}}, {"pk": 145, "model": "contenttypes.contenttype", "fields": {"model": "coursestructure", "name": "course structure", "app_label": "course_structures"}}, {"pk": 105, "model": "contenttypes.contenttype", "fields": {"model": "courseteam", "name": "course team", "app_label": "teams"}}, {"pk": 106, "model": "contenttypes.contenttype", "fields": {"model": "courseteammembership", "name": "course team membership", "app_label": "teams"}}, {"pk": 68, "model": "contenttypes.contenttype", "fields": {"model": "courseusergroup", "name": "course user group", "app_label": "course_groups"}}, {"pk": 69, "model": "contenttypes.contenttype", "fields": {"model": "courseusergrouppartitiongroup", "name": "course user group partition group", "app_label": "course_groups"}}, {"pk": 172, "model": "contenttypes.contenttype", "fields": {"model": "coursevideo", "name": "course video", "app_label": "edxval"}}, {"pk": 181, "model": "contenttypes.contenttype", "fields": {"model": "creditcourse", "name": "credit course", "app_label": "credit"}}, {"pk": 184, "model": "contenttypes.contenttype", "fields": {"model": "crediteligibility", "name": "credit eligibility", "app_label": "credit"}}, {"pk": 180, "model": "contenttypes.contenttype", "fields": {"model": "creditprovider", "name": "credit provider", "app_label": "credit"}}, {"pk": 186, "model": "contenttypes.contenttype", "fields": {"model": "creditrequest", "name": "credit request", "app_label": "credit"}}, {"pk": 182, "model": "contenttypes.contenttype", "fields": {"model": "creditrequirement", "name": "credit requirement", "app_label": "credit"}}, {"pk": 183, "model": "contenttypes.contenttype", "fields": {"model": "creditrequirementstatus", "name": "credit requirement status", "app_label": "credit"}}, {"pk": 152, "model": "contenttypes.contenttype", "fields": {"model": "criterion", "name": "criterion", "app_label": "assessment"}}, {"pk": 153, "model": "contenttypes.contenttype", "fields": {"model": "criterionoption", "name": "criterion option", "app_label": "assessment"}}, {"pk": 10, "model": "contenttypes.contenttype", "fields": {"model": "crontabschedule", "name": "crontab", "app_label": "djcelery"}}, {"pk": 132, "model": "contenttypes.contenttype", "fields": {"model": "darklangconfig", "name": "dark lang config", "app_label": "dark_lang"}}, {"pk": 49, "model": "contenttypes.contenttype", "fields": {"model": "dashboardconfiguration", "name": "dashboard configuration", "app_label": "student"}}, {"pk": 124, "model": "contenttypes.contenttype", "fields": {"model": "donation", "name": "donation", "app_label": "shoppingcart"}}, {"pk": 123, "model": "contenttypes.contenttype", "fields": {"model": "donationconfiguration", "name": "donation configuration", "app_label": "shoppingcart"}}, {"pk": 133, "model": "contenttypes.contenttype", "fields": {"model": "embargoedcourse", "name": "embargoed course", "app_label": "embargo"}}, {"pk": 134, "model": "contenttypes.contenttype", "fields": {"model": "embargoedstate", "name": "embargoed state", "app_label": "embargo"}}, {"pk": 173, "model": "contenttypes.contenttype", "fields": {"model": "encodedvideo", "name": "encoded video", "app_label": "edxval"}}, {"pk": 51, "model": "contenttypes.contenttype", "fields": {"model": "entranceexamconfiguration", "name": "entrance exam configuration", "app_label": "student"}}, {"pk": 59, "model": "contenttypes.contenttype", "fields": {"model": "examplecertificate", "name": "example certificate", "app_label": "certificates"}}, {"pk": 58, "model": "contenttypes.contenttype", "fields": {"model": "examplecertificateset", "name": "example certificate set", "app_label": "certificates"}}, {"pk": 78, "model": "contenttypes.contenttype", "fields": {"model": "externalauthmap", "name": "external auth map", "app_label": "external_auth"}}, {"pk": 57, "model": "contenttypes.contenttype", "fields": {"model": "generatedcertificate", "name": "generated certificate", "app_label": "certificates"}}, {"pk": 80, "model": "contenttypes.contenttype", "fields": {"model": "grant", "name": "grant", "app_label": "oauth2"}}, {"pk": 2, "model": "contenttypes.contenttype", "fields": {"model": "group", "name": "group", "app_label": "auth"}}, {"pk": 185, "model": "contenttypes.contenttype", "fields": {"model": "historicalcreditrequest", "name": "historical credit request", "app_label": "credit"}}, {"pk": 130, "model": "contenttypes.contenttype", "fields": {"model": "incoursereverificationconfiguration", "name": "in course reverification configuration", "app_label": "verify_student"}}, {"pk": 65, "model": "contenttypes.contenttype", "fields": {"model": "instructortask", "name": "instructor task", "app_label": "instructor_task"}}, {"pk": 9, "model": "contenttypes.contenttype", "fields": {"model": "intervalschedule", "name": "interval", "app_label": "djcelery"}}, {"pk": 109, "model": "contenttypes.contenttype", "fields": {"model": "invoice", "name": "invoice", "app_label": "shoppingcart"}}, {"pk": 113, "model": "contenttypes.contenttype", "fields": {"model": "invoicehistory", "name": "invoice history", "app_label": "shoppingcart"}}, {"pk": 111, "model": "contenttypes.contenttype", "fields": {"model": "invoiceitem", "name": "invoice item", "app_label": "shoppingcart"}}, {"pk": 110, "model": "contenttypes.contenttype", "fields": {"model": "invoicetransaction", "name": "invoice transaction", "app_label": "shoppingcart"}}, {"pk": 139, "model": "contenttypes.contenttype", "fields": {"model": "ipfilter", "name": "ip filter", "app_label": "embargo"}}, {"pk": 52, "model": "contenttypes.contenttype", "fields": {"model": "languageproficiency", "name": "language proficiency", "app_label": "student"}}, {"pk": 50, "model": "contenttypes.contenttype", "fields": {"model": "linkedinaddtoprofileconfiguration", "name": "linked in add to profile configuration", "app_label": "student"}}, {"pk": 21, "model": "contenttypes.contenttype", "fields": {"model": "logentry", "name": "log entry", "app_label": "admin"}}, {"pk": 44, "model": "contenttypes.contenttype", "fields": {"model": "loginfailures", "name": "login failures", "app_label": "student"}}, {"pk": 46, "model": "contenttypes.contenttype", "fields": {"model": "manualenrollmentaudit", "name": "manual enrollment audit", "app_label": "student"}}, {"pk": 15, "model": "contenttypes.contenttype", "fields": {"model": "migrationhistory", "name": "migration history", "app_label": "south"}}, {"pk": 175, "model": "contenttypes.contenttype", "fields": {"model": "milestone", "name": "milestone", "app_label": "milestones"}}, {"pk": 176, "model": "contenttypes.contenttype", "fields": {"model": "milestonerelationshiptype", "name": "milestone relationship type", "app_label": "milestones"}}, {"pk": 141, "model": "contenttypes.contenttype", "fields": {"model": "mobileapiconfig", "name": "mobile api config", "app_label": "mobile_api"}}, {"pk": 18, "model": "contenttypes.contenttype", "fields": {"model": "nonce", "name": "nonce", "app_label": "django_openid_auth"}}, {"pk": 24, "model": "contenttypes.contenttype", "fields": {"model": "nonce", "name": "nonce", "app_label": "default"}}, {"pk": 100, "model": "contenttypes.contenttype", "fields": {"model": "note", "name": "note", "app_label": "notes"}}, {"pk": 97, "model": "contenttypes.contenttype", "fields": {"model": "notification", "name": "notification", "app_label": "django_notify"}}, {"pk": 32, "model": "contenttypes.contenttype", "fields": {"model": "offlinecomputedgrade", "name": "offline computed grade", "app_label": "courseware"}}, {"pk": 33, "model": "contenttypes.contenttype", "fields": {"model": "offlinecomputedgradelog", "name": "offline computed grade log", "app_label": "courseware"}}, {"pk": 73, "model": "contenttypes.contenttype", "fields": {"model": "optout", "name": "optout", "app_label": "bulk_email"}}, {"pk": 107, "model": "contenttypes.contenttype", "fields": {"model": "order", "name": "order", "app_label": "shoppingcart"}}, {"pk": 108, "model": "contenttypes.contenttype", "fields": {"model": "orderitem", "name": "order item", "app_label": "shoppingcart"}}, {"pk": 118, "model": "contenttypes.contenttype", "fields": {"model": "paidcourseregistration", "name": "paid course registration", "app_label": "shoppingcart"}}, {"pk": 121, "model": "contenttypes.contenttype", "fields": {"model": "paidcourseregistrationannotation", "name": "paid course registration annotation", "app_label": "shoppingcart"}}, {"pk": 43, "model": "contenttypes.contenttype", "fields": {"model": "passwordhistory", "name": "password history", "app_label": "student"}}, {"pk": 158, "model": "contenttypes.contenttype", "fields": {"model": "peerworkflow", "name": "peer workflow", "app_label": "assessment"}}, {"pk": 159, "model": "contenttypes.contenttype", "fields": {"model": "peerworkflowitem", "name": "peer workflow item", "app_label": "assessment"}}, {"pk": 42, "model": "contenttypes.contenttype", "fields": {"model": "pendingemailchange", "name": "pending email change", "app_label": "student"}}, {"pk": 41, "model": "contenttypes.contenttype", "fields": {"model": "pendingnamechange", "name": "pending name change", "app_label": "student"}}, {"pk": 12, "model": "contenttypes.contenttype", "fields": {"model": "periodictask", "name": "periodic task", "app_label": "djcelery"}}, {"pk": 11, "model": "contenttypes.contenttype", "fields": {"model": "periodictasks", "name": "periodic tasks", "app_label": "djcelery"}}, {"pk": 1, "model": "contenttypes.contenttype", "fields": {"model": "permission", "name": "permission", "app_label": "auth"}}, {"pk": 170, "model": "contenttypes.contenttype", "fields": {"model": "profile", "name": "profile", "app_label": "edxval"}}, {"pk": 17, "model": "contenttypes.contenttype", "fields": {"model": "psychometricdata", "name": "psychometric data", "app_label": "psychometrics"}}, {"pk": 188, "model": "contenttypes.contenttype", "fields": {"model": "pushnotificationconfig", "name": "push notification config", "app_label": "contentstore"}}, {"pk": 99, "model": "contenttypes.contenttype", "fields": {"model": "puzzlecomplete", "name": "puzzle complete", "app_label": "foldit"}}, {"pk": 55, "model": "contenttypes.contenttype", "fields": {"model": "ratelimitconfiguration", "name": "rate limit configuration", "app_label": "util"}}, {"pk": 82, "model": "contenttypes.contenttype", "fields": {"model": "refreshtoken", "name": "refresh token", "app_label": "oauth2"}}, {"pk": 40, "model": "contenttypes.contenttype", "fields": {"model": "registration", "name": "registration", "app_label": "student"}}, {"pk": 115, "model": "contenttypes.contenttype", "fields": {"model": "registrationcoderedemption", "name": "registration code redemption", "app_label": "shoppingcart"}}, {"pk": 135, "model": "contenttypes.contenttype", "fields": {"model": "restrictedcourse", "name": "restricted course", "app_label": "embargo"}}, {"pk": 89, "model": "contenttypes.contenttype", "fields": {"model": "reusableplugin", "name": "reusable plugin", "app_label": "wiki"}}, {"pk": 91, "model": "contenttypes.contenttype", "fields": {"model": "revisionplugin", "name": "revision plugin", "app_label": "wiki"}}, {"pk": 92, "model": "contenttypes.contenttype", "fields": {"model": "revisionpluginrevision", "name": "revision plugin revision", "app_label": "wiki"}}, {"pk": 151, "model": "contenttypes.contenttype", "fields": {"model": "rubric", "name": "rubric", "app_label": "assessment"}}, {"pk": 8, "model": "contenttypes.contenttype", "fields": {"model": "tasksetmeta", "name": "saved group result", "app_label": "djcelery"}}, {"pk": 98, "model": "contenttypes.contenttype", "fields": {"model": "score", "name": "score", "app_label": "foldit"}}, {"pk": 149, "model": "contenttypes.contenttype", "fields": {"model": "score", "name": "score", "app_label": "submissions"}}, {"pk": 150, "model": "contenttypes.contenttype", "fields": {"model": "scoresummary", "name": "score summary", "app_label": "submissions"}}, {"pk": 16, "model": "contenttypes.contenttype", "fields": {"model": "servercircuit", "name": "server circuit", "app_label": "circuit"}}, {"pk": 5, "model": "contenttypes.contenttype", "fields": {"model": "session", "name": "session", "app_label": "sessions"}}, {"pk": 95, "model": "contenttypes.contenttype", "fields": {"model": "settings", "name": "settings", "app_label": "django_notify"}}, {"pk": 90, "model": "contenttypes.contenttype", "fields": {"model": "simpleplugin", "name": "simple plugin", "app_label": "wiki"}}, {"pk": 6, "model": "contenttypes.contenttype", "fields": {"model": "site", "name": "site", "app_label": "sites"}}, {"pk": 131, "model": "contenttypes.contenttype", "fields": {"model": "skippedreverification", "name": "skipped reverification", "app_label": "verify_student"}}, {"pk": 127, "model": "contenttypes.contenttype", "fields": {"model": "softwaresecurephotoverification", "name": "software secure photo verification", "app_label": "verify_student"}}, {"pk": 101, "model": "contenttypes.contenttype", "fields": {"model": "splashconfig", "name": "splash config", "app_label": "splash"}}, {"pk": 34, "model": "contenttypes.contenttype", "fields": {"model": "studentfieldoverride", "name": "student field override", "app_label": "courseware"}}, {"pk": 147, "model": "contenttypes.contenttype", "fields": {"model": "studentitem", "name": "student item", "app_label": "submissions"}}, {"pk": 27, "model": "contenttypes.contenttype", "fields": {"model": "studentmodule", "name": "student module", "app_label": "courseware"}}, {"pk": 28, "model": "contenttypes.contenttype", "fields": {"model": "studentmodulehistory", "name": "student module history", "app_label": "courseware"}}, {"pk": 161, "model": "contenttypes.contenttype", "fields": {"model": "studenttrainingworkflow", "name": "student training workflow", "app_label": "assessment"}}, {"pk": 162, "model": "contenttypes.contenttype", "fields": {"model": "studenttrainingworkflowitem", "name": "student training workflow item", "app_label": "assessment"}}, {"pk": 190, "model": "contenttypes.contenttype", "fields": {"model": "studioconfig", "name": "studio config", "app_label": "xblock_config"}}, {"pk": 148, "model": "contenttypes.contenttype", "fields": {"model": "submission", "name": "submission", "app_label": "submissions"}}, {"pk": 96, "model": "contenttypes.contenttype", "fields": {"model": "subscription", "name": "subscription", "app_label": "django_notify"}}, {"pk": 174, "model": "contenttypes.contenttype", "fields": {"model": "subtitle", "name": "subtitle", "app_label": "edxval"}}, {"pk": 143, "model": "contenttypes.contenttype", "fields": {"model": "surveyanswer", "name": "survey answer", "app_label": "survey"}}, {"pk": 142, "model": "contenttypes.contenttype", "fields": {"model": "surveyform", "name": "survey form", "app_label": "survey"}}, {"pk": 14, "model": "contenttypes.contenttype", "fields": {"model": "taskstate", "name": "task", "app_label": "djcelery"}}, {"pk": 7, "model": "contenttypes.contenttype", "fields": {"model": "taskmeta", "name": "task state", "app_label": "djcelery"}}, {"pk": 54, "model": "contenttypes.contenttype", "fields": {"model": "trackinglog", "name": "tracking log", "app_label": "track"}}, {"pk": 160, "model": "contenttypes.contenttype", "fields": {"model": "trainingexample", "name": "training example", "app_label": "assessment"}}, {"pk": 83, "model": "contenttypes.contenttype", "fields": {"model": "trustedclient", "name": "trusted client", "app_label": "oauth2_provider"}}, {"pk": 94, "model": "contenttypes.contenttype", "fields": {"model": "notificationtype", "name": "type", "app_label": "django_notify"}}, {"pk": 87, "model": "contenttypes.contenttype", "fields": {"model": "urlpath", "name": "URL path", "app_label": "wiki"}}, {"pk": 3, "model": "contenttypes.contenttype", "fields": {"model": "user", "name": "user", "app_label": "auth"}}, {"pk": 103, "model": "contenttypes.contenttype", "fields": {"model": "usercoursetag", "name": "user course tag", "app_label": "user_api"}}, {"pk": 67, "model": "contenttypes.contenttype", "fields": {"model": "userlicense", "name": "user license", "app_label": "licenses"}}, {"pk": 179, "model": "contenttypes.contenttype", "fields": {"model": "usermilestone", "name": "user milestone", "app_label": "milestones"}}, {"pk": 20, "model": "contenttypes.contenttype", "fields": {"model": "useropenid", "name": "user open id", "app_label": "django_openid_auth"}}, {"pk": 104, "model": "contenttypes.contenttype", "fields": {"model": "userorgtag", "name": "user org tag", "app_label": "user_api"}}, {"pk": 102, "model": "contenttypes.contenttype", "fields": {"model": "userpreference", "name": "user preference", "app_label": "user_api"}}, {"pk": 37, "model": "contenttypes.contenttype", "fields": {"model": "userprofile", "name": "user profile", "app_label": "student"}}, {"pk": 38, "model": "contenttypes.contenttype", "fields": {"model": "usersignupsource", "name": "user signup source", "app_label": "student"}}, {"pk": 23, "model": "contenttypes.contenttype", "fields": {"model": "usersocialauth", "name": "user social auth", "app_label": "default"}}, {"pk": 36, "model": "contenttypes.contenttype", "fields": {"model": "userstanding", "name": "user standing", "app_label": "student"}}, {"pk": 39, "model": "contenttypes.contenttype", "fields": {"model": "usertestgroup", "name": "user test group", "app_label": "student"}}, {"pk": 128, "model": "contenttypes.contenttype", "fields": {"model": "verificationcheckpoint", "name": "verification checkpoint", "app_label": "verify_student"}}, {"pk": 129, "model": "contenttypes.contenttype", "fields": {"model": "verificationstatus", "name": "Verification Status", "app_label": "verify_student"}}, {"pk": 171, "model": "contenttypes.contenttype", "fields": {"model": "video", "name": "video", "app_label": "edxval"}}, {"pk": 187, "model": "contenttypes.contenttype", "fields": {"model": "videouploadconfig", "name": "video upload config", "app_label": "contentstore"}}, {"pk": 13, "model": "contenttypes.contenttype", "fields": {"model": "workerstate", "name": "worker", "app_label": "djcelery"}}, {"pk": 144, "model": "contenttypes.contenttype", "fields": {"model": "xblockasidesconfig", "name": "x block asides config", "app_label": "lms_xblock"}}, {"pk": 146, "model": "contenttypes.contenttype", "fields": {"model": "xdomainproxyconfiguration", "name": "x domain proxy configuration", "app_label": "cors_csrf"}}, {"pk": 31, "model": "contenttypes.contenttype", "fields": {"model": "xmodulestudentinfofield", "name": "x module student info field", "app_label": "courseware"}}, {"pk": 30, "model": "contenttypes.contenttype", "fields": {"model": "xmodulestudentprefsfield", "name": "x module student prefs field", "app_label": "courseware"}}, {"pk": 29, "model": "contenttypes.contenttype", "fields": {"model": "xmoduleuserstatesummaryfield", "name": "x module user state summary field", "app_label": "courseware"}}, {"pk": 1, "model": "sites.site", "fields": {"domain": "example.com", "name": "example.com"}}, {"pk": 1, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:50Z", "app_name": "courseware", "migration": "0001_initial"}}, {"pk": 2, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:51Z", "app_name": "courseware", "migration": "0002_add_indexes"}}, {"pk": 3, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:51Z", "app_name": "courseware", "migration": "0003_done_grade_cache"}}, {"pk": 4, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:51Z", "app_name": "courseware", "migration": "0004_add_field_studentmodule_course_id"}}, {"pk": 5, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:51Z", "app_name": "courseware", "migration": "0005_auto__add_offlinecomputedgrade__add_unique_offlinecomputedgrade_user_c"}}, {"pk": 6, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:51Z", "app_name": "courseware", "migration": "0006_create_student_module_history"}}, {"pk": 7, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:51Z", "app_name": "courseware", "migration": "0007_allow_null_version_in_history"}}, {"pk": 8, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:52Z", "app_name": "courseware", "migration": "0008_add_xmodule_storage"}}, {"pk": 9, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:52Z", "app_name": "courseware", "migration": "0009_add_field_default"}}, {"pk": 10, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:52Z", "app_name": "courseware", "migration": "0010_rename_xblock_field_content_to_user_state_summary"}}, {"pk": 11, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:52Z", "app_name": "courseware", "migration": "0011_add_model_StudentFieldOverride"}}, {"pk": 12, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:52Z", "app_name": "courseware", "migration": "0012_auto__del_unique_studentfieldoverride_course_id_location_student__add_"}}, {"pk": 13, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:52Z", "app_name": "courseware", "migration": "0013_auto__add_field_studentfieldoverride_created__add_field_studentfieldov"}}, {"pk": 14, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:53Z", "app_name": "student", "migration": "0001_initial"}}, {"pk": 15, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:53Z", "app_name": "student", "migration": "0002_text_to_varchar_and_indexes"}}, {"pk": 16, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:53Z", "app_name": "student", "migration": "0003_auto__add_usertestgroup"}}, {"pk": 17, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:53Z", "app_name": "student", "migration": "0004_add_email_index"}}, {"pk": 18, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:53Z", "app_name": "student", "migration": "0005_name_change"}}, {"pk": 19, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:53Z", "app_name": "student", "migration": "0006_expand_meta_field"}}, {"pk": 20, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:53Z", "app_name": "student", "migration": "0007_convert_to_utf8"}}, {"pk": 21, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:53Z", "app_name": "student", "migration": "0008__auto__add_courseregistration"}}, {"pk": 22, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:53Z", "app_name": "student", "migration": "0009_auto__del_courseregistration__add_courseenrollment"}}, {"pk": 23, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:54Z", "app_name": "student", "migration": "0010_auto__chg_field_courseenrollment_course_id"}}, {"pk": 24, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:54Z", "app_name": "student", "migration": "0011_auto__chg_field_courseenrollment_user__del_unique_courseenrollment_use"}}, {"pk": 25, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:54Z", "app_name": "student", "migration": "0012_auto__add_field_userprofile_gender__add_field_userprofile_date_of_birt"}}, {"pk": 26, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:54Z", "app_name": "student", "migration": "0013_auto__chg_field_userprofile_meta"}}, {"pk": 27, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:54Z", "app_name": "student", "migration": "0014_auto__del_courseenrollment"}}, {"pk": 28, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:54Z", "app_name": "student", "migration": "0015_auto__add_courseenrollment__add_unique_courseenrollment_user_course_id"}}, {"pk": 29, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:54Z", "app_name": "student", "migration": "0016_auto__add_field_courseenrollment_date__chg_field_userprofile_country"}}, {"pk": 30, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:54Z", "app_name": "student", "migration": "0017_rename_date_to_created"}}, {"pk": 31, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:54Z", "app_name": "student", "migration": "0018_auto"}}, {"pk": 32, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:54Z", "app_name": "student", "migration": "0019_create_approved_demographic_fields_fall_2012"}}, {"pk": 33, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:55Z", "app_name": "student", "migration": "0020_add_test_center_user"}}, {"pk": 34, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:55Z", "app_name": "student", "migration": "0021_remove_askbot"}}, {"pk": 35, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:55Z", "app_name": "student", "migration": "0022_auto__add_courseenrollmentallowed__add_unique_courseenrollmentallowed_"}}, {"pk": 36, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:56Z", "app_name": "student", "migration": "0023_add_test_center_registration"}}, {"pk": 37, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:56Z", "app_name": "student", "migration": "0024_add_allow_certificate"}}, {"pk": 38, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:56Z", "app_name": "student", "migration": "0025_auto__add_field_courseenrollmentallowed_auto_enroll"}}, {"pk": 39, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:56Z", "app_name": "student", "migration": "0026_auto__remove_index_student_testcenterregistration_accommodation_request"}}, {"pk": 40, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:56Z", "app_name": "student", "migration": "0027_add_active_flag_and_mode_to_courseware_enrollment"}}, {"pk": 41, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:56Z", "app_name": "student", "migration": "0028_auto__add_userstanding"}}, {"pk": 42, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:56Z", "app_name": "student", "migration": "0029_add_lookup_table_between_user_and_anonymous_student_id"}}, {"pk": 43, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:56Z", "app_name": "student", "migration": "0029_remove_pearson"}}, {"pk": 44, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:56Z", "app_name": "student", "migration": "0030_auto__chg_field_anonymoususerid_anonymous_user_id"}}, {"pk": 45, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:56Z", "app_name": "student", "migration": "0031_drop_student_anonymoususerid_temp_archive"}}, {"pk": 46, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:56Z", "app_name": "student", "migration": "0032_add_field_UserProfile_country_add_field_UserProfile_city"}}, {"pk": 47, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:56Z", "app_name": "student", "migration": "0032_auto__add_loginfailures"}}, {"pk": 48, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:57Z", "app_name": "student", "migration": "0033_auto__add_passwordhistory"}}, {"pk": 49, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:57Z", "app_name": "student", "migration": "0034_auto__add_courseaccessrole"}}, {"pk": 50, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:58Z", "app_name": "student", "migration": "0035_access_roles"}}, {"pk": 51, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:58Z", "app_name": "student", "migration": "0036_access_roles_orgless"}}, {"pk": 52, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:59Z", "app_name": "student", "migration": "0037_auto__add_courseregistrationcode"}}, {"pk": 53, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:59Z", "app_name": "student", "migration": "0038_auto__add_usersignupsource"}}, {"pk": 54, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:59Z", "app_name": "student", "migration": "0039_auto__del_courseregistrationcode"}}, {"pk": 55, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:59Z", "app_name": "student", "migration": "0040_auto__del_field_usersignupsource_user_id__add_field_usersignupsource_u"}}, {"pk": 56, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:59Z", "app_name": "student", "migration": "0041_add_dashboard_config"}}, {"pk": 57, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:59Z", "app_name": "student", "migration": "0042_grant_sales_admin_roles"}}, {"pk": 58, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:59Z", "app_name": "student", "migration": "0043_auto__add_linkedinaddtoprofileconfiguration"}}, {"pk": 59, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:59Z", "app_name": "student", "migration": "0044_linkedin_add_company_identifier"}}, {"pk": 60, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:59Z", "app_name": "student", "migration": "0045_add_trk_partner_to_linkedin_config"}}, {"pk": 61, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:55:59Z", "app_name": "student", "migration": "0046_auto__add_entranceexamconfiguration__add_unique_entranceexamconfigurat"}}, {"pk": 62, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:00Z", "app_name": "student", "migration": "0047_add_bio_field"}}, {"pk": 63, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:00Z", "app_name": "student", "migration": "0048_add_profile_image_version"}}, {"pk": 64, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:00Z", "app_name": "student", "migration": "0049_auto__add_languageproficiency__add_unique_languageproficiency_code_use"}}, {"pk": 65, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:00Z", "app_name": "student", "migration": "0050_auto__add_manualenrollmentaudit"}}, {"pk": 66, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:00Z", "app_name": "student", "migration": "0051_auto__add_courseenrollmentattribute"}}, {"pk": 67, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:00Z", "app_name": "track", "migration": "0001_initial"}}, {"pk": 68, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:01Z", "app_name": "track", "migration": "0002_auto__add_field_trackinglog_host__chg_field_trackinglog_event_type__ch"}}, {"pk": 69, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:01Z", "app_name": "util", "migration": "0001_initial"}}, {"pk": 70, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:01Z", "app_name": "util", "migration": "0002_default_rate_limit_config"}}, {"pk": 71, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:01Z", "app_name": "certificates", "migration": "0001_added_generatedcertificates"}}, {"pk": 72, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:01Z", "app_name": "certificates", "migration": "0002_auto__add_field_generatedcertificate_download_url"}}, {"pk": 73, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:02Z", "app_name": "certificates", "migration": "0003_auto__add_field_generatedcertificate_enabled"}}, {"pk": 74, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:02Z", "app_name": "certificates", "migration": "0004_auto__add_field_generatedcertificate_graded_certificate_id__add_field_"}}, {"pk": 75, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:02Z", "app_name": "certificates", "migration": "0005_auto__add_field_generatedcertificate_name"}}, {"pk": 76, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:02Z", "app_name": "certificates", "migration": "0006_auto__chg_field_generatedcertificate_certificate_id"}}, {"pk": 77, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:02Z", "app_name": "certificates", "migration": "0007_auto__add_revokedcertificate"}}, {"pk": 78, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:02Z", "app_name": "certificates", "migration": "0008_auto__del_revokedcertificate__del_field_generatedcertificate_name__add"}}, {"pk": 79, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:02Z", "app_name": "certificates", "migration": "0009_auto__del_field_generatedcertificate_graded_download_url__del_field_ge"}}, {"pk": 80, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:02Z", "app_name": "certificates", "migration": "0010_auto__del_field_generatedcertificate_enabled__add_field_generatedcerti"}}, {"pk": 81, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:02Z", "app_name": "certificates", "migration": "0011_auto__del_field_generatedcertificate_certificate_id__add_field_generat"}}, {"pk": 82, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:03Z", "app_name": "certificates", "migration": "0012_auto__add_field_generatedcertificate_name__add_field_generatedcertific"}}, {"pk": 83, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:03Z", "app_name": "certificates", "migration": "0013_auto__add_field_generatedcertificate_error_reason"}}, {"pk": 84, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:03Z", "app_name": "certificates", "migration": "0014_adding_whitelist"}}, {"pk": 85, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:03Z", "app_name": "certificates", "migration": "0015_adding_mode_for_verified_certs"}}, {"pk": 86, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:03Z", "app_name": "certificates", "migration": "0016_change_course_key_fields"}}, {"pk": 87, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:03Z", "app_name": "certificates", "migration": "0017_auto__add_certificategenerationconfiguration"}}, {"pk": 88, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:03Z", "app_name": "certificates", "migration": "0018_add_example_cert_models"}}, {"pk": 89, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:03Z", "app_name": "certificates", "migration": "0019_auto__add_certificatehtmlviewconfiguration"}}, {"pk": 90, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:03Z", "app_name": "certificates", "migration": "0020_certificatehtmlviewconfiguration_data"}}, {"pk": 91, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:04Z", "app_name": "certificates", "migration": "0021_auto__add_badgeassertion__add_unique_badgeassertion_course_id_user__ad"}}, {"pk": 92, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:04Z", "app_name": "certificates", "migration": "0022_default_modes"}}, {"pk": 93, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:04Z", "app_name": "instructor_task", "migration": "0001_initial"}}, {"pk": 94, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:04Z", "app_name": "instructor_task", "migration": "0002_add_subtask_field"}}, {"pk": 95, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:05Z", "app_name": "licenses", "migration": "0001_initial"}}, {"pk": 96, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:05Z", "app_name": "course_groups", "migration": "0001_initial"}}, {"pk": 97, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:05Z", "app_name": "course_groups", "migration": "0002_add_model_CourseUserGroupPartitionGroup"}}, {"pk": 98, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:06Z", "app_name": "course_groups", "migration": "0003_auto__add_coursecohort__add_coursecohortssettings"}}, {"pk": 99, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:06Z", "app_name": "course_groups", "migration": "0004_auto__del_field_coursecohortssettings_cohorted_discussions__add_field_"}}, {"pk": 100, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:06Z", "app_name": "bulk_email", "migration": "0001_initial"}}, {"pk": 101, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:06Z", "app_name": "bulk_email", "migration": "0002_change_field_names"}}, {"pk": 102, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:06Z", "app_name": "bulk_email", "migration": "0003_add_optout_user"}}, {"pk": 103, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:06Z", "app_name": "bulk_email", "migration": "0004_migrate_optout_user"}}, {"pk": 104, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:06Z", "app_name": "bulk_email", "migration": "0005_remove_optout_email"}}, {"pk": 105, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:06Z", "app_name": "bulk_email", "migration": "0006_add_course_email_template"}}, {"pk": 106, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:07Z", "app_name": "bulk_email", "migration": "0007_load_course_email_template"}}, {"pk": 107, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:07Z", "app_name": "bulk_email", "migration": "0008_add_course_authorizations"}}, {"pk": 108, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:07Z", "app_name": "bulk_email", "migration": "0009_force_unique_course_ids"}}, {"pk": 109, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:07Z", "app_name": "bulk_email", "migration": "0010_auto__chg_field_optout_course_id__add_field_courseemail_template_name_"}}, {"pk": 110, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:07Z", "app_name": "branding", "migration": "0001_initial"}}, {"pk": 111, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:07Z", "app_name": "branding", "migration": "0002_auto__add_brandingapiconfig"}}, {"pk": 112, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:08Z", "app_name": "external_auth", "migration": "0001_initial"}}, {"pk": 113, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:09Z", "app_name": "oauth2", "migration": "0001_initial"}}, {"pk": 114, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:09Z", "app_name": "oauth2", "migration": "0002_auto__chg_field_client_user"}}, {"pk": 115, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:09Z", "app_name": "oauth2", "migration": "0003_auto__add_field_client_name"}}, {"pk": 116, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:09Z", "app_name": "oauth2", "migration": "0004_auto__add_index_accesstoken_token"}}, {"pk": 117, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:09Z", "app_name": "oauth2_provider", "migration": "0001_initial"}}, {"pk": 118, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:10Z", "app_name": "wiki", "migration": "0001_initial"}}, {"pk": 119, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:10Z", "app_name": "wiki", "migration": "0002_auto__add_field_articleplugin_created"}}, {"pk": 120, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:11Z", "app_name": "wiki", "migration": "0003_auto__add_field_urlpath_article"}}, {"pk": 121, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:11Z", "app_name": "wiki", "migration": "0004_populate_urlpath__article"}}, {"pk": 122, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:11Z", "app_name": "wiki", "migration": "0005_auto__chg_field_urlpath_article"}}, {"pk": 123, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:11Z", "app_name": "wiki", "migration": "0006_auto__add_attachmentrevision__add_image__add_attachment"}}, {"pk": 124, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:11Z", "app_name": "wiki", "migration": "0007_auto__add_articlesubscription"}}, {"pk": 125, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:11Z", "app_name": "wiki", "migration": "0008_auto__add_simpleplugin__add_revisionpluginrevision__add_imagerevision_"}}, {"pk": 126, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:11Z", "app_name": "wiki", "migration": "0009_auto__add_field_imagerevision_width__add_field_imagerevision_height"}}, {"pk": 127, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:11Z", "app_name": "wiki", "migration": "0010_auto__chg_field_imagerevision_image"}}, {"pk": 128, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:12Z", "app_name": "wiki", "migration": "0011_auto__chg_field_imagerevision_width__chg_field_imagerevision_height"}}, {"pk": 129, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:12Z", "app_name": "django_notify", "migration": "0001_initial"}}, {"pk": 130, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:13Z", "app_name": "notifications", "migration": "0001_initial"}}, {"pk": 131, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:13Z", "app_name": "foldit", "migration": "0001_initial"}}, {"pk": 132, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:14Z", "app_name": "django_comment_client", "migration": "0001_initial"}}, {"pk": 133, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:14Z", "app_name": "django_comment_common", "migration": "0001_initial"}}, {"pk": 134, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:15Z", "app_name": "notes", "migration": "0001_initial"}}, {"pk": 135, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:15Z", "app_name": "splash", "migration": "0001_initial"}}, {"pk": 136, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:15Z", "app_name": "splash", "migration": "0002_auto__add_field_splashconfig_unaffected_url_paths"}}, {"pk": 137, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:15Z", "app_name": "user_api", "migration": "0001_initial"}}, {"pk": 138, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:16Z", "app_name": "user_api", "migration": "0002_auto__add_usercoursetags__add_unique_usercoursetags_user_course_id_key"}}, {"pk": 139, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:16Z", "app_name": "user_api", "migration": "0003_rename_usercoursetags"}}, {"pk": 140, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:16Z", "app_name": "user_api", "migration": "0004_auto__add_userorgtag__add_unique_userorgtag_user_org_key__chg_field_us"}}, {"pk": 141, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:16Z", "app_name": "teams", "migration": "0001_initial"}}, {"pk": 142, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:17Z", "app_name": "shoppingcart", "migration": "0001_initial"}}, {"pk": 143, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:17Z", "app_name": "shoppingcart", "migration": "0002_auto__add_field_paidcourseregistration_mode"}}, {"pk": 144, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:17Z", "app_name": "shoppingcart", "migration": "0003_auto__del_field_orderitem_line_cost"}}, {"pk": 145, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:17Z", "app_name": "shoppingcart", "migration": "0004_auto__add_field_orderitem_fulfilled_time"}}, {"pk": 146, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:17Z", "app_name": "shoppingcart", "migration": "0005_auto__add_paidcourseregistrationannotation__add_field_orderitem_report"}}, {"pk": 147, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:17Z", "app_name": "shoppingcart", "migration": "0006_auto__add_field_order_refunded_time__add_field_orderitem_refund_reques"}}, {"pk": 148, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:18Z", "app_name": "shoppingcart", "migration": "0007_auto__add_field_orderitem_service_fee"}}, {"pk": 149, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:18Z", "app_name": "shoppingcart", "migration": "0008_auto__add_coupons__add_couponredemption__chg_field_certificateitem_cou"}}, {"pk": 150, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:18Z", "app_name": "shoppingcart", "migration": "0009_auto__del_coupons__add_courseregistrationcode__add_coupon__chg_field_c"}}, {"pk": 151, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:18Z", "app_name": "shoppingcart", "migration": "0010_auto__add_registrationcoderedemption__del_field_courseregistrationcode"}}, {"pk": 152, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:19Z", "app_name": "shoppingcart", "migration": "0011_auto__add_invoice__add_field_courseregistrationcode_invoice"}}, {"pk": 153, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:19Z", "app_name": "shoppingcart", "migration": "0012_auto__del_field_courseregistrationcode_transaction_group_name__del_fie"}}, {"pk": 154, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:19Z", "app_name": "shoppingcart", "migration": "0013_auto__add_field_invoice_is_valid"}}, {"pk": 155, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:20Z", "app_name": "shoppingcart", "migration": "0014_auto__del_field_invoice_tax_id__add_field_invoice_address_line_1__add_"}}, {"pk": 156, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:20Z", "app_name": "shoppingcart", "migration": "0015_auto__del_field_invoice_purchase_order_number__del_field_invoice_compa"}}, {"pk": 157, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:20Z", "app_name": "shoppingcart", "migration": "0016_auto__del_field_invoice_company_email__del_field_invoice_company_refer"}}, {"pk": 158, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:20Z", "app_name": "shoppingcart", "migration": "0017_auto__add_field_courseregistrationcode_order__chg_field_registrationco"}}, {"pk": 159, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:20Z", "app_name": "shoppingcart", "migration": "0018_auto__add_donation"}}, {"pk": 160, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:20Z", "app_name": "shoppingcart", "migration": "0019_auto__add_donationconfiguration"}}, {"pk": 161, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:21Z", "app_name": "shoppingcart", "migration": "0020_auto__add_courseregcodeitem__add_courseregcodeitemannotation__add_fiel"}}, {"pk": 162, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:21Z", "app_name": "shoppingcart", "migration": "0021_auto__add_field_orderitem_created__add_field_orderitem_modified"}}, {"pk": 163, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:21Z", "app_name": "shoppingcart", "migration": "0022_auto__add_field_registrationcoderedemption_course_enrollment__add_fiel"}}, {"pk": 164, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:21Z", "app_name": "shoppingcart", "migration": "0023_auto__add_field_coupon_expiration_date"}}, {"pk": 165, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:21Z", "app_name": "shoppingcart", "migration": "0024_auto__add_field_courseregistrationcode_mode_slug"}}, {"pk": 166, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:22Z", "app_name": "shoppingcart", "migration": "0025_update_invoice_models"}}, {"pk": 167, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:22Z", "app_name": "shoppingcart", "migration": "0026_migrate_invoices"}}, {"pk": 168, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:22Z", "app_name": "shoppingcart", "migration": "0027_add_invoice_history"}}, {"pk": 169, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:22Z", "app_name": "shoppingcart", "migration": "0028_auto__add_field_courseregistrationcode_is_valid"}}, {"pk": 170, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:23Z", "app_name": "course_modes", "migration": "0001_initial"}}, {"pk": 171, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:23Z", "app_name": "course_modes", "migration": "0002_auto__add_field_coursemode_currency"}}, {"pk": 172, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:23Z", "app_name": "course_modes", "migration": "0003_auto__add_unique_coursemode_course_id_currency_mode_slug"}}, {"pk": 173, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:23Z", "app_name": "course_modes", "migration": "0004_auto__add_field_coursemode_expiration_date"}}, {"pk": 174, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:23Z", "app_name": "course_modes", "migration": "0005_auto__add_field_coursemode_expiration_datetime"}}, {"pk": 175, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:23Z", "app_name": "course_modes", "migration": "0006_expiration_date_to_datetime"}}, {"pk": 176, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:23Z", "app_name": "course_modes", "migration": "0007_add_description"}}, {"pk": 177, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:23Z", "app_name": "course_modes", "migration": "0007_auto__add_coursemodesarchive__chg_field_coursemode_course_id"}}, {"pk": 178, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:23Z", "app_name": "course_modes", "migration": "0008_auto__del_field_coursemodesarchive_description__add_field_coursemode_s"}}, {"pk": 179, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:23Z", "app_name": "verify_student", "migration": "0001_initial"}}, {"pk": 180, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:24Z", "app_name": "verify_student", "migration": "0002_auto__add_field_softwaresecurephotoverification_window"}}, {"pk": 181, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:24Z", "app_name": "verify_student", "migration": "0003_auto__add_field_softwaresecurephotoverification_display"}}, {"pk": 182, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:24Z", "app_name": "verify_student", "migration": "0004_auto__add_verificationcheckpoint__add_unique_verificationcheckpoint_co"}}, {"pk": 183, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:24Z", "app_name": "verify_student", "migration": "0005_auto__add_incoursereverificationconfiguration"}}, {"pk": 184, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:24Z", "app_name": "verify_student", "migration": "0006_auto__add_skippedreverification__add_unique_skippedreverification_user"}}, {"pk": 185, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:24Z", "app_name": "verify_student", "migration": "0007_auto__add_field_verificationstatus_location_id"}}, {"pk": 186, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:24Z", "app_name": "verify_student", "migration": "0008_auto__del_field_verificationcheckpoint_checkpoint_name__add_field_veri"}}, {"pk": 187, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:24Z", "app_name": "verify_student", "migration": "0009_auto__change_softwaresecurephotoverification_window_id_default_none"}}, {"pk": 188, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:25Z", "app_name": "verify_student", "migration": "0010_auto__del_field_softwaresecurephotoverification_window"}}, {"pk": 189, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:25Z", "app_name": "dark_lang", "migration": "0001_initial"}}, {"pk": 190, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:25Z", "app_name": "dark_lang", "migration": "0002_enable_on_install"}}, {"pk": 191, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:25Z", "app_name": "reverification", "migration": "0001_initial"}}, {"pk": 192, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:25Z", "app_name": "reverification", "migration": "0002_auto__del_midcoursereverificationwindow"}}, {"pk": 193, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:26Z", "app_name": "embargo", "migration": "0001_initial"}}, {"pk": 194, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:26Z", "app_name": "embargo", "migration": "0002_add_country_access_models"}}, {"pk": 195, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:27Z", "app_name": "embargo", "migration": "0003_add_countries"}}, {"pk": 196, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:27Z", "app_name": "embargo", "migration": "0004_migrate_embargo_config"}}, {"pk": 197, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:27Z", "app_name": "embargo", "migration": "0005_add_courseaccessrulehistory"}}, {"pk": 198, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:27Z", "app_name": "embargo", "migration": "0006_auto__add_field_restrictedcourse_disable_access_check"}}, {"pk": 199, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:28Z", "app_name": "course_action_state", "migration": "0001_initial"}}, {"pk": 200, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:28Z", "app_name": "course_action_state", "migration": "0002_add_rerun_display_name"}}, {"pk": 201, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:28Z", "app_name": "mobile_api", "migration": "0001_initial"}}, {"pk": 202, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:29Z", "app_name": "survey", "migration": "0001_initial"}}, {"pk": 203, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:30Z", "app_name": "lms_xblock", "migration": "0001_initial"}}, {"pk": 204, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:30Z", "app_name": "course_structures", "migration": "0001_initial"}}, {"pk": 205, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:30Z", "app_name": "cors_csrf", "migration": "0001_initial"}}, {"pk": 206, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:31Z", "app_name": "submissions", "migration": "0001_initial"}}, {"pk": 207, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:31Z", "app_name": "submissions", "migration": "0002_auto__add_scoresummary"}}, {"pk": 208, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:31Z", "app_name": "submissions", "migration": "0003_auto__del_field_submission_answer__add_field_submission_raw_answer"}}, {"pk": 209, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:31Z", "app_name": "submissions", "migration": "0004_auto__add_field_score_reset"}}, {"pk": 210, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:32Z", "app_name": "assessment", "migration": "0001_initial"}}, {"pk": 211, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:33Z", "app_name": "assessment", "migration": "0002_auto__add_assessmentfeedbackoption__del_field_assessmentfeedback_feedb"}}, {"pk": 212, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:33Z", "app_name": "assessment", "migration": "0003_add_index_pw_course_item_student"}}, {"pk": 213, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:33Z", "app_name": "assessment", "migration": "0004_auto__add_field_peerworkflow_graded_count"}}, {"pk": 214, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:33Z", "app_name": "assessment", "migration": "0005_auto__del_field_peerworkflow_graded_count__add_field_peerworkflow_grad"}}, {"pk": 215, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:33Z", "app_name": "assessment", "migration": "0006_auto__add_field_assessmentpart_feedback"}}, {"pk": 216, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:33Z", "app_name": "assessment", "migration": "0007_auto__chg_field_assessmentpart_feedback"}}, {"pk": 217, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:33Z", "app_name": "assessment", "migration": "0008_student_training"}}, {"pk": 218, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:34Z", "app_name": "assessment", "migration": "0009_auto__add_unique_studenttrainingworkflowitem_order_num_workflow"}}, {"pk": 219, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:34Z", "app_name": "assessment", "migration": "0010_auto__add_unique_studenttrainingworkflow_submission_uuid"}}, {"pk": 220, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:34Z", "app_name": "assessment", "migration": "0011_ai_training"}}, {"pk": 221, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:34Z", "app_name": "assessment", "migration": "0012_move_algorithm_id_to_classifier_set"}}, {"pk": 222, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:34Z", "app_name": "assessment", "migration": "0013_auto__add_field_aigradingworkflow_essay_text"}}, {"pk": 223, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:35Z", "app_name": "assessment", "migration": "0014_auto__add_field_aitrainingworkflow_item_id__add_field_aitrainingworkfl"}}, {"pk": 224, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:35Z", "app_name": "assessment", "migration": "0015_auto__add_unique_aitrainingworkflow_uuid__add_unique_aigradingworkflow"}}, {"pk": 225, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:35Z", "app_name": "assessment", "migration": "0016_auto__add_field_aiclassifierset_course_id__add_field_aiclassifierset_i"}}, {"pk": 226, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:35Z", "app_name": "assessment", "migration": "0016_auto__add_field_rubric_structure_hash"}}, {"pk": 227, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:35Z", "app_name": "assessment", "migration": "0017_rubric_structure_hash"}}, {"pk": 228, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:35Z", "app_name": "assessment", "migration": "0018_auto__add_field_assessmentpart_criterion"}}, {"pk": 229, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:35Z", "app_name": "assessment", "migration": "0019_assessmentpart_criterion_field"}}, {"pk": 230, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:35Z", "app_name": "assessment", "migration": "0020_assessmentpart_criterion_not_null"}}, {"pk": 231, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:35Z", "app_name": "assessment", "migration": "0021_assessmentpart_option_nullable"}}, {"pk": 232, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:36Z", "app_name": "assessment", "migration": "0022__add_label_fields"}}, {"pk": 233, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:36Z", "app_name": "assessment", "migration": "0023_assign_criteria_and_option_labels"}}, {"pk": 234, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:36Z", "app_name": "assessment", "migration": "0024_auto__chg_field_assessmentpart_criterion"}}, {"pk": 235, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:36Z", "app_name": "assessment", "migration": "0025_auto__add_field_peerworkflow_cancelled_at"}}, {"pk": 236, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:36Z", "app_name": "workflow", "migration": "0001_initial"}}, {"pk": 237, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:36Z", "app_name": "workflow", "migration": "0002_auto__add_field_assessmentworkflow_course_id__add_field_assessmentwork"}}, {"pk": 238, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:36Z", "app_name": "workflow", "migration": "0003_auto__add_assessmentworkflowstep"}}, {"pk": 239, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:37Z", "app_name": "workflow", "migration": "0004_auto__add_assessmentworkflowcancellation"}}, {"pk": 240, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:37Z", "app_name": "edxval", "migration": "0001_initial"}}, {"pk": 241, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:37Z", "app_name": "edxval", "migration": "0002_default_profiles"}}, {"pk": 242, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:37Z", "app_name": "edxval", "migration": "0003_status_and_created_fields"}}, {"pk": 243, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:38Z", "app_name": "edxval", "migration": "0004_remove_profile_fields"}}, {"pk": 244, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:39Z", "app_name": "milestones", "migration": "0001_initial"}}, {"pk": 245, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:39Z", "app_name": "milestones", "migration": "0002_seed_relationship_types"}}, {"pk": 246, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:39Z", "app_name": "django_extensions", "migration": "0001_empty"}}, {"pk": 247, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:40Z", "app_name": "credit", "migration": "0001_initial"}}, {"pk": 248, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:40Z", "app_name": "credit", "migration": "0002_rename_credit_requirement_criteria_field"}}, {"pk": 249, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:40Z", "app_name": "credit", "migration": "0003_add_creditrequirementstatus_reason"}}, {"pk": 250, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:40Z", "app_name": "credit", "migration": "0004_auto__add_field_creditrequirement_display_name"}}, {"pk": 251, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:40Z", "app_name": "credit", "migration": "0005_auto__add_field_creditprovider_provider_url__add_field_creditprovider_"}}, {"pk": 252, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:41Z", "app_name": "credit", "migration": "0006_auto__add_creditrequest__add_unique_creditrequest_username_course_prov"}}, {"pk": 253, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:41Z", "app_name": "credit", "migration": "0007_auto__add_field_creditprovider_enable_integration__chg_field_creditpro"}}, {"pk": 254, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:45Z", "app_name": "contentstore", "migration": "0001_initial"}}, {"pk": 255, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:45Z", "app_name": "contentstore", "migration": "0002_auto__del_field_videouploadconfig_status_whitelist"}}, {"pk": 256, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:45Z", "app_name": "contentstore", "migration": "0003_auto__add_pushnotificationconfig"}}, {"pk": 257, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:46Z", "app_name": "course_creators", "migration": "0001_initial"}}, {"pk": 258, "model": "south.migrationhistory", "fields": {"applied": "2015-06-17T19:56:46Z", "app_name": "xblock_config", "migration": "0001_initial"}}, {"pk": 1, "model": "certificates.badgeimageconfiguration", "fields": {"default": false, "mode": "honor", "icon": "./honor.png"}}, {"pk": 2, "model": "certificates.badgeimageconfiguration", "fields": {"default": false, "mode": "verified", "icon": "./verified.png"}}, {"pk": 3, "model": "certificates.badgeimageconfiguration", "fields": {"default": false, "mode": "professional", "icon": "./professional.png"}}, {"pk": 6, "model": "embargo.country", "fields": {"country": "AD"}}, {"pk": 234, "model": "embargo.country", "fields": {"country": "AE"}}, {"pk": 1, "model": "embargo.country", "fields": {"country": "AF"}}, {"pk": 10, "model": "embargo.country", "fields": {"country": "AG"}}, {"pk": 8, "model": "embargo.country", "fields": {"country": "AI"}}, {"pk": 3, "model": "embargo.country", "fields": {"country": "AL"}}, {"pk": 12, "model": "embargo.country", "fields": {"country": "AM"}}, {"pk": 7, "model": "embargo.country", "fields": {"country": "AO"}}, {"pk": 9, "model": "embargo.country", "fields": {"country": "AQ"}}, {"pk": 11, "model": "embargo.country", "fields": {"country": "AR"}}, {"pk": 5, "model": "embargo.country", "fields": {"country": "AS"}}, {"pk": 15, "model": "embargo.country", "fields": {"country": "AT"}}, {"pk": 14, "model": "embargo.country", "fields": {"country": "AU"}}, {"pk": 13, "model": "embargo.country", "fields": {"country": "AW"}}, {"pk": 2, "model": "embargo.country", "fields": {"country": "AX"}}, {"pk": 16, "model": "embargo.country", "fields": {"country": "AZ"}}, {"pk": 29, "model": "embargo.country", "fields": {"country": "BA"}}, {"pk": 20, "model": "embargo.country", "fields": {"country": "BB"}}, {"pk": 19, "model": "embargo.country", "fields": {"country": "BD"}}, {"pk": 22, "model": "embargo.country", "fields": {"country": "BE"}}, {"pk": 36, "model": "embargo.country", "fields": {"country": "BF"}}, {"pk": 35, "model": "embargo.country", "fields": {"country": "BG"}}, {"pk": 18, "model": "embargo.country", "fields": {"country": "BH"}}, {"pk": 37, "model": "embargo.country", "fields": {"country": "BI"}}, {"pk": 24, "model": "embargo.country", "fields": {"country": "BJ"}}, {"pk": 184, "model": "embargo.country", "fields": {"country": "BL"}}, {"pk": 25, "model": "embargo.country", "fields": {"country": "BM"}}, {"pk": 34, "model": "embargo.country", "fields": {"country": "BN"}}, {"pk": 27, "model": "embargo.country", "fields": {"country": "BO"}}, {"pk": 28, "model": "embargo.country", "fields": {"country": "BQ"}}, {"pk": 32, "model": "embargo.country", "fields": {"country": "BR"}}, {"pk": 17, "model": "embargo.country", "fields": {"country": "BS"}}, {"pk": 26, "model": "embargo.country", "fields": {"country": "BT"}}, {"pk": 31, "model": "embargo.country", "fields": {"country": "BV"}}, {"pk": 30, "model": "embargo.country", "fields": {"country": "BW"}}, {"pk": 21, "model": "embargo.country", "fields": {"country": "BY"}}, {"pk": 23, "model": "embargo.country", "fields": {"country": "BZ"}}, {"pk": 41, "model": "embargo.country", "fields": {"country": "CA"}}, {"pk": 48, "model": "embargo.country", "fields": {"country": "CC"}}, {"pk": 52, "model": "embargo.country", "fields": {"country": "CD"}}, {"pk": 43, "model": "embargo.country", "fields": {"country": "CF"}}, {"pk": 51, "model": "embargo.country", "fields": {"country": "CG"}}, {"pk": 216, "model": "embargo.country", "fields": {"country": "CH"}}, {"pk": 55, "model": "embargo.country", "fields": {"country": "CI"}}, {"pk": 53, "model": "embargo.country", "fields": {"country": "CK"}}, {"pk": 45, "model": "embargo.country", "fields": {"country": "CL"}}, {"pk": 40, "model": "embargo.country", "fields": {"country": "CM"}}, {"pk": 46, "model": "embargo.country", "fields": {"country": "CN"}}, {"pk": 49, "model": "embargo.country", "fields": {"country": "CO"}}, {"pk": 54, "model": "embargo.country", "fields": {"country": "CR"}}, {"pk": 57, "model": "embargo.country", "fields": {"country": "CU"}}, {"pk": 38, "model": "embargo.country", "fields": {"country": "CV"}}, {"pk": 58, "model": "embargo.country", "fields": {"country": "CW"}}, {"pk": 47, "model": "embargo.country", "fields": {"country": "CX"}}, {"pk": 59, "model": "embargo.country", "fields": {"country": "CY"}}, {"pk": 60, "model": "embargo.country", "fields": {"country": "CZ"}}, {"pk": 83, "model": "embargo.country", "fields": {"country": "DE"}}, {"pk": 62, "model": "embargo.country", "fields": {"country": "DJ"}}, {"pk": 61, "model": "embargo.country", "fields": {"country": "DK"}}, {"pk": 63, "model": "embargo.country", "fields": {"country": "DM"}}, {"pk": 64, "model": "embargo.country", "fields": {"country": "DO"}}, {"pk": 4, "model": "embargo.country", "fields": {"country": "DZ"}}, {"pk": 65, "model": "embargo.country", "fields": {"country": "EC"}}, {"pk": 70, "model": "embargo.country", "fields": {"country": "EE"}}, {"pk": 66, "model": "embargo.country", "fields": {"country": "EG"}}, {"pk": 246, "model": "embargo.country", "fields": {"country": "EH"}}, {"pk": 69, "model": "embargo.country", "fields": {"country": "ER"}}, {"pk": 209, "model": "embargo.country", "fields": {"country": "ES"}}, {"pk": 71, "model": "embargo.country", "fields": {"country": "ET"}}, {"pk": 75, "model": "embargo.country", "fields": {"country": "FI"}}, {"pk": 74, "model": "embargo.country", "fields": {"country": "FJ"}}, {"pk": 72, "model": "embargo.country", "fields": {"country": "FK"}}, {"pk": 143, "model": "embargo.country", "fields": {"country": "FM"}}, {"pk": 73, "model": "embargo.country", "fields": {"country": "FO"}}, {"pk": 76, "model": "embargo.country", "fields": {"country": "FR"}}, {"pk": 80, "model": "embargo.country", "fields": {"country": "GA"}}, {"pk": 235, "model": "embargo.country", "fields": {"country": "GB"}}, {"pk": 88, "model": "embargo.country", "fields": {"country": "GD"}}, {"pk": 82, "model": "embargo.country", "fields": {"country": "GE"}}, {"pk": 77, "model": "embargo.country", "fields": {"country": "GF"}}, {"pk": 92, "model": "embargo.country", "fields": {"country": "GG"}}, {"pk": 84, "model": "embargo.country", "fields": {"country": "GH"}}, {"pk": 85, "model": "embargo.country", "fields": {"country": "GI"}}, {"pk": 87, "model": "embargo.country", "fields": {"country": "GL"}}, {"pk": 81, "model": "embargo.country", "fields": {"country": "GM"}}, {"pk": 93, "model": "embargo.country", "fields": {"country": "GN"}}, {"pk": 89, "model": "embargo.country", "fields": {"country": "GP"}}, {"pk": 68, "model": "embargo.country", "fields": {"country": "GQ"}}, {"pk": 86, "model": "embargo.country", "fields": {"country": "GR"}}, {"pk": 206, "model": "embargo.country", "fields": {"country": "GS"}}, {"pk": 91, "model": "embargo.country", "fields": {"country": "GT"}}, {"pk": 90, "model": "embargo.country", "fields": {"country": "GU"}}, {"pk": 94, "model": "embargo.country", "fields": {"country": "GW"}}, {"pk": 95, "model": "embargo.country", "fields": {"country": "GY"}}, {"pk": 100, "model": "embargo.country", "fields": {"country": "HK"}}, {"pk": 97, "model": "embargo.country", "fields": {"country": "HM"}}, {"pk": 99, "model": "embargo.country", "fields": {"country": "HN"}}, {"pk": 56, "model": "embargo.country", "fields": {"country": "HR"}}, {"pk": 96, "model": "embargo.country", "fields": {"country": "HT"}}, {"pk": 101, "model": "embargo.country", "fields": {"country": "HU"}}, {"pk": 104, "model": "embargo.country", "fields": {"country": "ID"}}, {"pk": 107, "model": "embargo.country", "fields": {"country": "IE"}}, {"pk": 109, "model": "embargo.country", "fields": {"country": "IL"}}, {"pk": 108, "model": "embargo.country", "fields": {"country": "IM"}}, {"pk": 103, "model": "embargo.country", "fields": {"country": "IN"}}, {"pk": 33, "model": "embargo.country", "fields": {"country": "IO"}}, {"pk": 106, "model": "embargo.country", "fields": {"country": "IQ"}}, {"pk": 105, "model": "embargo.country", "fields": {"country": "IR"}}, {"pk": 102, "model": "embargo.country", "fields": {"country": "IS"}}, {"pk": 110, "model": "embargo.country", "fields": {"country": "IT"}}, {"pk": 113, "model": "embargo.country", "fields": {"country": "JE"}}, {"pk": 111, "model": "embargo.country", "fields": {"country": "JM"}}, {"pk": 114, "model": "embargo.country", "fields": {"country": "JO"}}, {"pk": 112, "model": "embargo.country", "fields": {"country": "JP"}}, {"pk": 116, "model": "embargo.country", "fields": {"country": "KE"}}, {"pk": 119, "model": "embargo.country", "fields": {"country": "KG"}}, {"pk": 39, "model": "embargo.country", "fields": {"country": "KH"}}, {"pk": 117, "model": "embargo.country", "fields": {"country": "KI"}}, {"pk": 50, "model": "embargo.country", "fields": {"country": "KM"}}, {"pk": 186, "model": "embargo.country", "fields": {"country": "KN"}}, {"pk": 163, "model": "embargo.country", "fields": {"country": "KP"}}, {"pk": 207, "model": "embargo.country", "fields": {"country": "KR"}}, {"pk": 118, "model": "embargo.country", "fields": {"country": "KW"}}, {"pk": 42, "model": "embargo.country", "fields": {"country": "KY"}}, {"pk": 115, "model": "embargo.country", "fields": {"country": "KZ"}}, {"pk": 120, "model": "embargo.country", "fields": {"country": "LA"}}, {"pk": 122, "model": "embargo.country", "fields": {"country": "LB"}}, {"pk": 187, "model": "embargo.country", "fields": {"country": "LC"}}, {"pk": 126, "model": "embargo.country", "fields": {"country": "LI"}}, {"pk": 210, "model": "embargo.country", "fields": {"country": "LK"}}, {"pk": 124, "model": "embargo.country", "fields": {"country": "LR"}}, {"pk": 123, "model": "embargo.country", "fields": {"country": "LS"}}, {"pk": 127, "model": "embargo.country", "fields": {"country": "LT"}}, {"pk": 128, "model": "embargo.country", "fields": {"country": "LU"}}, {"pk": 121, "model": "embargo.country", "fields": {"country": "LV"}}, {"pk": 125, "model": "embargo.country", "fields": {"country": "LY"}}, {"pk": 149, "model": "embargo.country", "fields": {"country": "MA"}}, {"pk": 145, "model": "embargo.country", "fields": {"country": "MC"}}, {"pk": 144, "model": "embargo.country", "fields": {"country": "MD"}}, {"pk": 147, "model": "embargo.country", "fields": {"country": "ME"}}, {"pk": 188, "model": "embargo.country", "fields": {"country": "MF"}}, {"pk": 131, "model": "embargo.country", "fields": {"country": "MG"}}, {"pk": 137, "model": "embargo.country", "fields": {"country": "MH"}}, {"pk": 130, "model": "embargo.country", "fields": {"country": "MK"}}, {"pk": 135, "model": "embargo.country", "fields": {"country": "ML"}}, {"pk": 151, "model": "embargo.country", "fields": {"country": "MM"}}, {"pk": 146, "model": "embargo.country", "fields": {"country": "MN"}}, {"pk": 129, "model": "embargo.country", "fields": {"country": "MO"}}, {"pk": 164, "model": "embargo.country", "fields": {"country": "MP"}}, {"pk": 138, "model": "embargo.country", "fields": {"country": "MQ"}}, {"pk": 139, "model": "embargo.country", "fields": {"country": "MR"}}, {"pk": 148, "model": "embargo.country", "fields": {"country": "MS"}}, {"pk": 136, "model": "embargo.country", "fields": {"country": "MT"}}, {"pk": 140, "model": "embargo.country", "fields": {"country": "MU"}}, {"pk": 134, "model": "embargo.country", "fields": {"country": "MV"}}, {"pk": 132, "model": "embargo.country", "fields": {"country": "MW"}}, {"pk": 142, "model": "embargo.country", "fields": {"country": "MX"}}, {"pk": 133, "model": "embargo.country", "fields": {"country": "MY"}}, {"pk": 150, "model": "embargo.country", "fields": {"country": "MZ"}}, {"pk": 152, "model": "embargo.country", "fields": {"country": "NA"}}, {"pk": 156, "model": "embargo.country", "fields": {"country": "NC"}}, {"pk": 159, "model": "embargo.country", "fields": {"country": "NE"}}, {"pk": 162, "model": "embargo.country", "fields": {"country": "NF"}}, {"pk": 160, "model": "embargo.country", "fields": {"country": "NG"}}, {"pk": 158, "model": "embargo.country", "fields": {"country": "NI"}}, {"pk": 155, "model": "embargo.country", "fields": {"country": "NL"}}, {"pk": 165, "model": "embargo.country", "fields": {"country": "NO"}}, {"pk": 154, "model": "embargo.country", "fields": {"country": "NP"}}, {"pk": 153, "model": "embargo.country", "fields": {"country": "NR"}}, {"pk": 161, "model": "embargo.country", "fields": {"country": "NU"}}, {"pk": 157, "model": "embargo.country", "fields": {"country": "NZ"}}, {"pk": 166, "model": "embargo.country", "fields": {"country": "OM"}}, {"pk": 170, "model": "embargo.country", "fields": {"country": "PA"}}, {"pk": 173, "model": "embargo.country", "fields": {"country": "PE"}}, {"pk": 78, "model": "embargo.country", "fields": {"country": "PF"}}, {"pk": 171, "model": "embargo.country", "fields": {"country": "PG"}}, {"pk": 174, "model": "embargo.country", "fields": {"country": "PH"}}, {"pk": 167, "model": "embargo.country", "fields": {"country": "PK"}}, {"pk": 176, "model": "embargo.country", "fields": {"country": "PL"}}, {"pk": 189, "model": "embargo.country", "fields": {"country": "PM"}}, {"pk": 175, "model": "embargo.country", "fields": {"country": "PN"}}, {"pk": 178, "model": "embargo.country", "fields": {"country": "PR"}}, {"pk": 169, "model": "embargo.country", "fields": {"country": "PS"}}, {"pk": 177, "model": "embargo.country", "fields": {"country": "PT"}}, {"pk": 168, "model": "embargo.country", "fields": {"country": "PW"}}, {"pk": 172, "model": "embargo.country", "fields": {"country": "PY"}}, {"pk": 179, "model": "embargo.country", "fields": {"country": "QA"}}, {"pk": 180, "model": "embargo.country", "fields": {"country": "RE"}}, {"pk": 181, "model": "embargo.country", "fields": {"country": "RO"}}, {"pk": 196, "model": "embargo.country", "fields": {"country": "RS"}}, {"pk": 182, "model": "embargo.country", "fields": {"country": "RU"}}, {"pk": 183, "model": "embargo.country", "fields": {"country": "RW"}}, {"pk": 194, "model": "embargo.country", "fields": {"country": "SA"}}, {"pk": 203, "model": "embargo.country", "fields": {"country": "SB"}}, {"pk": 197, "model": "embargo.country", "fields": {"country": "SC"}}, {"pk": 211, "model": "embargo.country", "fields": {"country": "SD"}}, {"pk": 215, "model": "embargo.country", "fields": {"country": "SE"}}, {"pk": 199, "model": "embargo.country", "fields": {"country": "SG"}}, {"pk": 185, "model": "embargo.country", "fields": {"country": "SH"}}, {"pk": 202, "model": "embargo.country", "fields": {"country": "SI"}}, {"pk": 213, "model": "embargo.country", "fields": {"country": "SJ"}}, {"pk": 201, "model": "embargo.country", "fields": {"country": "SK"}}, {"pk": 198, "model": "embargo.country", "fields": {"country": "SL"}}, {"pk": 192, "model": "embargo.country", "fields": {"country": "SM"}}, {"pk": 195, "model": "embargo.country", "fields": {"country": "SN"}}, {"pk": 204, "model": "embargo.country", "fields": {"country": "SO"}}, {"pk": 212, "model": "embargo.country", "fields": {"country": "SR"}}, {"pk": 208, "model": "embargo.country", "fields": {"country": "SS"}}, {"pk": 193, "model": "embargo.country", "fields": {"country": "ST"}}, {"pk": 67, "model": "embargo.country", "fields": {"country": "SV"}}, {"pk": 200, "model": "embargo.country", "fields": {"country": "SX"}}, {"pk": 217, "model": "embargo.country", "fields": {"country": "SY"}}, {"pk": 214, "model": "embargo.country", "fields": {"country": "SZ"}}, {"pk": 230, "model": "embargo.country", "fields": {"country": "TC"}}, {"pk": 44, "model": "embargo.country", "fields": {"country": "TD"}}, {"pk": 79, "model": "embargo.country", "fields": {"country": "TF"}}, {"pk": 223, "model": "embargo.country", "fields": {"country": "TG"}}, {"pk": 221, "model": "embargo.country", "fields": {"country": "TH"}}, {"pk": 219, "model": "embargo.country", "fields": {"country": "TJ"}}, {"pk": 224, "model": "embargo.country", "fields": {"country": "TK"}}, {"pk": 222, "model": "embargo.country", "fields": {"country": "TL"}}, {"pk": 229, "model": "embargo.country", "fields": {"country": "TM"}}, {"pk": 227, "model": "embargo.country", "fields": {"country": "TN"}}, {"pk": 225, "model": "embargo.country", "fields": {"country": "TO"}}, {"pk": 228, "model": "embargo.country", "fields": {"country": "TR"}}, {"pk": 226, "model": "embargo.country", "fields": {"country": "TT"}}, {"pk": 231, "model": "embargo.country", "fields": {"country": "TV"}}, {"pk": 218, "model": "embargo.country", "fields": {"country": "TW"}}, {"pk": 220, "model": "embargo.country", "fields": {"country": "TZ"}}, {"pk": 233, "model": "embargo.country", "fields": {"country": "UA"}}, {"pk": 232, "model": "embargo.country", "fields": {"country": "UG"}}, {"pk": 236, "model": "embargo.country", "fields": {"country": "UM"}}, {"pk": 237, "model": "embargo.country", "fields": {"country": "US"}}, {"pk": 238, "model": "embargo.country", "fields": {"country": "UY"}}, {"pk": 239, "model": "embargo.country", "fields": {"country": "UZ"}}, {"pk": 98, "model": "embargo.country", "fields": {"country": "VA"}}, {"pk": 190, "model": "embargo.country", "fields": {"country": "VC"}}, {"pk": 241, "model": "embargo.country", "fields": {"country": "VE"}}, {"pk": 243, "model": "embargo.country", "fields": {"country": "VG"}}, {"pk": 244, "model": "embargo.country", "fields": {"country": "VI"}}, {"pk": 242, "model": "embargo.country", "fields": {"country": "VN"}}, {"pk": 240, "model": "embargo.country", "fields": {"country": "VU"}}, {"pk": 245, "model": "embargo.country", "fields": {"country": "WF"}}, {"pk": 191, "model": "embargo.country", "fields": {"country": "WS"}}, {"pk": 247, "model": "embargo.country", "fields": {"country": "YE"}}, {"pk": 141, "model": "embargo.country", "fields": {"country": "YT"}}, {"pk": 205, "model": "embargo.country", "fields": {"country": "ZA"}}, {"pk": 248, "model": "embargo.country", "fields": {"country": "ZM"}}, {"pk": 249, "model": "embargo.country", "fields": {"country": "ZW"}}, {"pk": 1, "model": "edxval.profile", "fields": {"profile_name": "desktop_mp4"}}, {"pk": 2, "model": "edxval.profile", "fields": {"profile_name": "desktop_webm"}}, {"pk": 3, "model": "edxval.profile", "fields": {"profile_name": "mobile_high"}}, {"pk": 4, "model": "edxval.profile", "fields": {"profile_name": "mobile_low"}}, {"pk": 5, "model": "edxval.profile", "fields": {"profile_name": "youtube"}}, {"pk": 1, "model": "milestones.milestonerelationshiptype", "fields": {"active": true, "description": "Autogenerated milestone relationship type \"fulfills\"", "modified": "2015-06-17T19:56:39Z", "name": "fulfills", "created": "2015-06-17T19:56:39Z"}}, {"pk": 2, "model": "milestones.milestonerelationshiptype", "fields": {"active": true, "description": "Autogenerated milestone relationship type \"requires\"", "modified": "2015-06-17T19:56:39Z", "name": "requires", "created": "2015-06-17T19:56:39Z"}}, {"pk": 61, "model": "auth.permission", "fields": {"codename": "add_logentry", "name": "Can add log entry", "content_type": 21}}, {"pk": 62, "model": "auth.permission", "fields": {"codename": "change_logentry", "name": "Can change log entry", "content_type": 21}}, {"pk": 63, "model": "auth.permission", "fields": {"codename": "delete_logentry", "name": "Can delete log entry", "content_type": 21}}, {"pk": 493, "model": "auth.permission", "fields": {"codename": "add_aiclassifier", "name": "Can add ai classifier", "content_type": 164}}, {"pk": 494, "model": "auth.permission", "fields": {"codename": "change_aiclassifier", "name": "Can change ai classifier", "content_type": 164}}, {"pk": 495, "model": "auth.permission", "fields": {"codename": "delete_aiclassifier", "name": "Can delete ai classifier", "content_type": 164}}, {"pk": 490, "model": "auth.permission", "fields": {"codename": "add_aiclassifierset", "name": "Can add ai classifier set", "content_type": 163}}, {"pk": 491, "model": "auth.permission", "fields": {"codename": "change_aiclassifierset", "name": "Can change ai classifier set", "content_type": 163}}, {"pk": 492, "model": "auth.permission", "fields": {"codename": "delete_aiclassifierset", "name": "Can delete ai classifier set", "content_type": 163}}, {"pk": 499, "model": "auth.permission", "fields": {"codename": "add_aigradingworkflow", "name": "Can add ai grading workflow", "content_type": 166}}, {"pk": 500, "model": "auth.permission", "fields": {"codename": "change_aigradingworkflow", "name": "Can change ai grading workflow", "content_type": 166}}, {"pk": 501, "model": "auth.permission", "fields": {"codename": "delete_aigradingworkflow", "name": "Can delete ai grading workflow", "content_type": 166}}, {"pk": 496, "model": "auth.permission", "fields": {"codename": "add_aitrainingworkflow", "name": "Can add ai training workflow", "content_type": 165}}, {"pk": 497, "model": "auth.permission", "fields": {"codename": "change_aitrainingworkflow", "name": "Can change ai training workflow", "content_type": 165}}, {"pk": 498, "model": "auth.permission", "fields": {"codename": "delete_aitrainingworkflow", "name": "Can delete ai training workflow", "content_type": 165}}, {"pk": 463, "model": "auth.permission", "fields": {"codename": "add_assessment", "name": "Can add assessment", "content_type": 154}}, {"pk": 464, "model": "auth.permission", "fields": {"codename": "change_assessment", "name": "Can change assessment", "content_type": 154}}, {"pk": 465, "model": "auth.permission", "fields": {"codename": "delete_assessment", "name": "Can delete assessment", "content_type": 154}}, {"pk": 472, "model": "auth.permission", "fields": {"codename": "add_assessmentfeedback", "name": "Can add assessment feedback", "content_type": 157}}, {"pk": 473, "model": "auth.permission", "fields": {"codename": "change_assessmentfeedback", "name": "Can change assessment feedback", "content_type": 157}}, {"pk": 474, "model": "auth.permission", "fields": {"codename": "delete_assessmentfeedback", "name": "Can delete assessment feedback", "content_type": 157}}, {"pk": 469, "model": "auth.permission", "fields": {"codename": "add_assessmentfeedbackoption", "name": "Can add assessment feedback option", "content_type": 156}}, {"pk": 470, "model": "auth.permission", "fields": {"codename": "change_assessmentfeedbackoption", "name": "Can change assessment feedback option", "content_type": 156}}, {"pk": 471, "model": "auth.permission", "fields": {"codename": "delete_assessmentfeedbackoption", "name": "Can delete assessment feedback option", "content_type": 156}}, {"pk": 466, "model": "auth.permission", "fields": {"codename": "add_assessmentpart", "name": "Can add assessment part", "content_type": 155}}, {"pk": 467, "model": "auth.permission", "fields": {"codename": "change_assessmentpart", "name": "Can change assessment part", "content_type": 155}}, {"pk": 468, "model": "auth.permission", "fields": {"codename": "delete_assessmentpart", "name": "Can delete assessment part", "content_type": 155}}, {"pk": 457, "model": "auth.permission", "fields": {"codename": "add_criterion", "name": "Can add criterion", "content_type": 152}}, {"pk": 458, "model": "auth.permission", "fields": {"codename": "change_criterion", "name": "Can change criterion", "content_type": 152}}, {"pk": 459, "model": "auth.permission", "fields": {"codename": "delete_criterion", "name": "Can delete criterion", "content_type": 152}}, {"pk": 460, "model": "auth.permission", "fields": {"codename": "add_criterionoption", "name": "Can add criterion option", "content_type": 153}}, {"pk": 461, "model": "auth.permission", "fields": {"codename": "change_criterionoption", "name": "Can change criterion option", "content_type": 153}}, {"pk": 462, "model": "auth.permission", "fields": {"codename": "delete_criterionoption", "name": "Can delete criterion option", "content_type": 153}}, {"pk": 475, "model": "auth.permission", "fields": {"codename": "add_peerworkflow", "name": "Can add peer workflow", "content_type": 158}}, {"pk": 476, "model": "auth.permission", "fields": {"codename": "change_peerworkflow", "name": "Can change peer workflow", "content_type": 158}}, {"pk": 477, "model": "auth.permission", "fields": {"codename": "delete_peerworkflow", "name": "Can delete peer workflow", "content_type": 158}}, {"pk": 478, "model": "auth.permission", "fields": {"codename": "add_peerworkflowitem", "name": "Can add peer workflow item", "content_type": 159}}, {"pk": 479, "model": "auth.permission", "fields": {"codename": "change_peerworkflowitem", "name": "Can change peer workflow item", "content_type": 159}}, {"pk": 480, "model": "auth.permission", "fields": {"codename": "delete_peerworkflowitem", "name": "Can delete peer workflow item", "content_type": 159}}, {"pk": 454, "model": "auth.permission", "fields": {"codename": "add_rubric", "name": "Can add rubric", "content_type": 151}}, {"pk": 455, "model": "auth.permission", "fields": {"codename": "change_rubric", "name": "Can change rubric", "content_type": 151}}, {"pk": 456, "model": "auth.permission", "fields": {"codename": "delete_rubric", "name": "Can delete rubric", "content_type": 151}}, {"pk": 484, "model": "auth.permission", "fields": {"codename": "add_studenttrainingworkflow", "name": "Can add student training workflow", "content_type": 161}}, {"pk": 485, "model": "auth.permission", "fields": {"codename": "change_studenttrainingworkflow", "name": "Can change student training workflow", "content_type": 161}}, {"pk": 486, "model": "auth.permission", "fields": {"codename": "delete_studenttrainingworkflow", "name": "Can delete student training workflow", "content_type": 161}}, {"pk": 487, "model": "auth.permission", "fields": {"codename": "add_studenttrainingworkflowitem", "name": "Can add student training workflow item", "content_type": 162}}, {"pk": 488, "model": "auth.permission", "fields": {"codename": "change_studenttrainingworkflowitem", "name": "Can change student training workflow item", "content_type": 162}}, {"pk": 489, "model": "auth.permission", "fields": {"codename": "delete_studenttrainingworkflowitem", "name": "Can delete student training workflow item", "content_type": 162}}, {"pk": 481, "model": "auth.permission", "fields": {"codename": "add_trainingexample", "name": "Can add training example", "content_type": 160}}, {"pk": 482, "model": "auth.permission", "fields": {"codename": "change_trainingexample", "name": "Can change training example", "content_type": 160}}, {"pk": 483, "model": "auth.permission", "fields": {"codename": "delete_trainingexample", "name": "Can delete training example", "content_type": 160}}, {"pk": 4, "model": "auth.permission", "fields": {"codename": "add_group", "name": "Can add group", "content_type": 2}}, {"pk": 5, "model": "auth.permission", "fields": {"codename": "change_group", "name": "Can change group", "content_type": 2}}, {"pk": 6, "model": "auth.permission", "fields": {"codename": "delete_group", "name": "Can delete group", "content_type": 2}}, {"pk": 1, "model": "auth.permission", "fields": {"codename": "add_permission", "name": "Can add permission", "content_type": 1}}, {"pk": 2, "model": "auth.permission", "fields": {"codename": "change_permission", "name": "Can change permission", "content_type": 1}}, {"pk": 3, "model": "auth.permission", "fields": {"codename": "delete_permission", "name": "Can delete permission", "content_type": 1}}, {"pk": 7, "model": "auth.permission", "fields": {"codename": "add_user", "name": "Can add user", "content_type": 3}}, {"pk": 8, "model": "auth.permission", "fields": {"codename": "change_user", "name": "Can change user", "content_type": 3}}, {"pk": 9, "model": "auth.permission", "fields": {"codename": "delete_user", "name": "Can delete user", "content_type": 3}}, {"pk": 229, "model": "auth.permission", "fields": {"codename": "add_brandingapiconfig", "name": "Can add branding api config", "content_type": 77}}, {"pk": 230, "model": "auth.permission", "fields": {"codename": "change_brandingapiconfig", "name": "Can change branding api config", "content_type": 77}}, {"pk": 231, "model": "auth.permission", "fields": {"codename": "delete_brandingapiconfig", "name": "Can delete branding api config", "content_type": 77}}, {"pk": 226, "model": "auth.permission", "fields": {"codename": "add_brandinginfoconfig", "name": "Can add branding info config", "content_type": 76}}, {"pk": 227, "model": "auth.permission", "fields": {"codename": "change_brandinginfoconfig", "name": "Can change branding info config", "content_type": 76}}, {"pk": 228, "model": "auth.permission", "fields": {"codename": "delete_brandinginfoconfig", "name": "Can delete branding info config", "content_type": 76}}, {"pk": 223, "model": "auth.permission", "fields": {"codename": "add_courseauthorization", "name": "Can add course authorization", "content_type": 75}}, {"pk": 224, "model": "auth.permission", "fields": {"codename": "change_courseauthorization", "name": "Can change course authorization", "content_type": 75}}, {"pk": 225, "model": "auth.permission", "fields": {"codename": "delete_courseauthorization", "name": "Can delete course authorization", "content_type": 75}}, {"pk": 214, "model": "auth.permission", "fields": {"codename": "add_courseemail", "name": "Can add course email", "content_type": 72}}, {"pk": 215, "model": "auth.permission", "fields": {"codename": "change_courseemail", "name": "Can change course email", "content_type": 72}}, {"pk": 216, "model": "auth.permission", "fields": {"codename": "delete_courseemail", "name": "Can delete course email", "content_type": 72}}, {"pk": 220, "model": "auth.permission", "fields": {"codename": "add_courseemailtemplate", "name": "Can add course email template", "content_type": 74}}, {"pk": 221, "model": "auth.permission", "fields": {"codename": "change_courseemailtemplate", "name": "Can change course email template", "content_type": 74}}, {"pk": 222, "model": "auth.permission", "fields": {"codename": "delete_courseemailtemplate", "name": "Can delete course email template", "content_type": 74}}, {"pk": 217, "model": "auth.permission", "fields": {"codename": "add_optout", "name": "Can add optout", "content_type": 73}}, {"pk": 218, "model": "auth.permission", "fields": {"codename": "change_optout", "name": "Can change optout", "content_type": 73}}, {"pk": 219, "model": "auth.permission", "fields": {"codename": "delete_optout", "name": "Can delete optout", "content_type": 73}}, {"pk": 187, "model": "auth.permission", "fields": {"codename": "add_badgeassertion", "name": "Can add badge assertion", "content_type": 63}}, {"pk": 188, "model": "auth.permission", "fields": {"codename": "change_badgeassertion", "name": "Can change badge assertion", "content_type": 63}}, {"pk": 189, "model": "auth.permission", "fields": {"codename": "delete_badgeassertion", "name": "Can delete badge assertion", "content_type": 63}}, {"pk": 190, "model": "auth.permission", "fields": {"codename": "add_badgeimageconfiguration", "name": "Can add badge image configuration", "content_type": 64}}, {"pk": 191, "model": "auth.permission", "fields": {"codename": "change_badgeimageconfiguration", "name": "Can change badge image configuration", "content_type": 64}}, {"pk": 192, "model": "auth.permission", "fields": {"codename": "delete_badgeimageconfiguration", "name": "Can delete badge image configuration", "content_type": 64}}, {"pk": 181, "model": "auth.permission", "fields": {"codename": "add_certificategenerationconfiguration", "name": "Can add certificate generation configuration", "content_type": 61}}, {"pk": 182, "model": "auth.permission", "fields": {"codename": "change_certificategenerationconfiguration", "name": "Can change certificate generation configuration", "content_type": 61}}, {"pk": 183, "model": "auth.permission", "fields": {"codename": "delete_certificategenerationconfiguration", "name": "Can delete certificate generation configuration", "content_type": 61}}, {"pk": 178, "model": "auth.permission", "fields": {"codename": "add_certificategenerationcoursesetting", "name": "Can add certificate generation course setting", "content_type": 60}}, {"pk": 179, "model": "auth.permission", "fields": {"codename": "change_certificategenerationcoursesetting", "name": "Can change certificate generation course setting", "content_type": 60}}, {"pk": 180, "model": "auth.permission", "fields": {"codename": "delete_certificategenerationcoursesetting", "name": "Can delete certificate generation course setting", "content_type": 60}}, {"pk": 184, "model": "auth.permission", "fields": {"codename": "add_certificatehtmlviewconfiguration", "name": "Can add certificate html view configuration", "content_type": 62}}, {"pk": 185, "model": "auth.permission", "fields": {"codename": "change_certificatehtmlviewconfiguration", "name": "Can change certificate html view configuration", "content_type": 62}}, {"pk": 186, "model": "auth.permission", "fields": {"codename": "delete_certificatehtmlviewconfiguration", "name": "Can delete certificate html view configuration", "content_type": 62}}, {"pk": 166, "model": "auth.permission", "fields": {"codename": "add_certificatewhitelist", "name": "Can add certificate whitelist", "content_type": 56}}, {"pk": 167, "model": "auth.permission", "fields": {"codename": "change_certificatewhitelist", "name": "Can change certificate whitelist", "content_type": 56}}, {"pk": 168, "model": "auth.permission", "fields": {"codename": "delete_certificatewhitelist", "name": "Can delete certificate whitelist", "content_type": 56}}, {"pk": 175, "model": "auth.permission", "fields": {"codename": "add_examplecertificate", "name": "Can add example certificate", "content_type": 59}}, {"pk": 176, "model": "auth.permission", "fields": {"codename": "change_examplecertificate", "name": "Can change example certificate", "content_type": 59}}, {"pk": 177, "model": "auth.permission", "fields": {"codename": "delete_examplecertificate", "name": "Can delete example certificate", "content_type": 59}}, {"pk": 172, "model": "auth.permission", "fields": {"codename": "add_examplecertificateset", "name": "Can add example certificate set", "content_type": 58}}, {"pk": 173, "model": "auth.permission", "fields": {"codename": "change_examplecertificateset", "name": "Can change example certificate set", "content_type": 58}}, {"pk": 174, "model": "auth.permission", "fields": {"codename": "delete_examplecertificateset", "name": "Can delete example certificate set", "content_type": 58}}, {"pk": 169, "model": "auth.permission", "fields": {"codename": "add_generatedcertificate", "name": "Can add generated certificate", "content_type": 57}}, {"pk": 170, "model": "auth.permission", "fields": {"codename": "change_generatedcertificate", "name": "Can change generated certificate", "content_type": 57}}, {"pk": 171, "model": "auth.permission", "fields": {"codename": "delete_generatedcertificate", "name": "Can delete generated certificate", "content_type": 57}}, {"pk": 46, "model": "auth.permission", "fields": {"codename": "add_servercircuit", "name": "Can add server circuit", "content_type": 16}}, {"pk": 47, "model": "auth.permission", "fields": {"codename": "change_servercircuit", "name": "Can change server circuit", "content_type": 16}}, {"pk": 48, "model": "auth.permission", "fields": {"codename": "delete_servercircuit", "name": "Can delete server circuit", "content_type": 16}}, {"pk": 565, "model": "auth.permission", "fields": {"codename": "add_pushnotificationconfig", "name": "Can add push notification config", "content_type": 188}}, {"pk": 566, "model": "auth.permission", "fields": {"codename": "change_pushnotificationconfig", "name": "Can change push notification config", "content_type": 188}}, {"pk": 567, "model": "auth.permission", "fields": {"codename": "delete_pushnotificationconfig", "name": "Can delete push notification config", "content_type": 188}}, {"pk": 562, "model": "auth.permission", "fields": {"codename": "add_videouploadconfig", "name": "Can add video upload config", "content_type": 187}}, {"pk": 563, "model": "auth.permission", "fields": {"codename": "change_videouploadconfig", "name": "Can change video upload config", "content_type": 187}}, {"pk": 564, "model": "auth.permission", "fields": {"codename": "delete_videouploadconfig", "name": "Can delete video upload config", "content_type": 187}}, {"pk": 10, "model": "auth.permission", "fields": {"codename": "add_contenttype", "name": "Can add content type", "content_type": 4}}, {"pk": 11, "model": "auth.permission", "fields": {"codename": "change_contenttype", "name": "Can change content type", "content_type": 4}}, {"pk": 12, "model": "auth.permission", "fields": {"codename": "delete_contenttype", "name": "Can delete content type", "content_type": 4}}, {"pk": 64, "model": "auth.permission", "fields": {"codename": "add_corsmodel", "name": "Can add cors model", "content_type": 22}}, {"pk": 65, "model": "auth.permission", "fields": {"codename": "change_corsmodel", "name": "Can change cors model", "content_type": 22}}, {"pk": 66, "model": "auth.permission", "fields": {"codename": "delete_corsmodel", "name": "Can delete cors model", "content_type": 22}}, {"pk": 439, "model": "auth.permission", "fields": {"codename": "add_xdomainproxyconfiguration", "name": "Can add x domain proxy configuration", "content_type": 146}}, {"pk": 440, "model": "auth.permission", "fields": {"codename": "change_xdomainproxyconfiguration", "name": "Can change x domain proxy configuration", "content_type": 146}}, {"pk": 441, "model": "auth.permission", "fields": {"codename": "delete_xdomainproxyconfiguration", "name": "Can delete x domain proxy configuration", "content_type": 146}}, {"pk": 94, "model": "auth.permission", "fields": {"codename": "add_offlinecomputedgrade", "name": "Can add offline computed grade", "content_type": 32}}, {"pk": 95, "model": "auth.permission", "fields": {"codename": "change_offlinecomputedgrade", "name": "Can change offline computed grade", "content_type": 32}}, {"pk": 96, "model": "auth.permission", "fields": {"codename": "delete_offlinecomputedgrade", "name": "Can delete offline computed grade", "content_type": 32}}, {"pk": 97, "model": "auth.permission", "fields": {"codename": "add_offlinecomputedgradelog", "name": "Can add offline computed grade log", "content_type": 33}}, {"pk": 98, "model": "auth.permission", "fields": {"codename": "change_offlinecomputedgradelog", "name": "Can change offline computed grade log", "content_type": 33}}, {"pk": 99, "model": "auth.permission", "fields": {"codename": "delete_offlinecomputedgradelog", "name": "Can delete offline computed grade log", "content_type": 33}}, {"pk": 100, "model": "auth.permission", "fields": {"codename": "add_studentfieldoverride", "name": "Can add student field override", "content_type": 34}}, {"pk": 101, "model": "auth.permission", "fields": {"codename": "change_studentfieldoverride", "name": "Can change student field override", "content_type": 34}}, {"pk": 102, "model": "auth.permission", "fields": {"codename": "delete_studentfieldoverride", "name": "Can delete student field override", "content_type": 34}}, {"pk": 79, "model": "auth.permission", "fields": {"codename": "add_studentmodule", "name": "Can add student module", "content_type": 27}}, {"pk": 80, "model": "auth.permission", "fields": {"codename": "change_studentmodule", "name": "Can change student module", "content_type": 27}}, {"pk": 81, "model": "auth.permission", "fields": {"codename": "delete_studentmodule", "name": "Can delete student module", "content_type": 27}}, {"pk": 82, "model": "auth.permission", "fields": {"codename": "add_studentmodulehistory", "name": "Can add student module history", "content_type": 28}}, {"pk": 83, "model": "auth.permission", "fields": {"codename": "change_studentmodulehistory", "name": "Can change student module history", "content_type": 28}}, {"pk": 84, "model": "auth.permission", "fields": {"codename": "delete_studentmodulehistory", "name": "Can delete student module history", "content_type": 28}}, {"pk": 91, "model": "auth.permission", "fields": {"codename": "add_xmodulestudentinfofield", "name": "Can add x module student info field", "content_type": 31}}, {"pk": 92, "model": "auth.permission", "fields": {"codename": "change_xmodulestudentinfofield", "name": "Can change x module student info field", "content_type": 31}}, {"pk": 93, "model": "auth.permission", "fields": {"codename": "delete_xmodulestudentinfofield", "name": "Can delete x module student info field", "content_type": 31}}, {"pk": 88, "model": "auth.permission", "fields": {"codename": "add_xmodulestudentprefsfield", "name": "Can add x module student prefs field", "content_type": 30}}, {"pk": 89, "model": "auth.permission", "fields": {"codename": "change_xmodulestudentprefsfield", "name": "Can change x module student prefs field", "content_type": 30}}, {"pk": 90, "model": "auth.permission", "fields": {"codename": "delete_xmodulestudentprefsfield", "name": "Can delete x module student prefs field", "content_type": 30}}, {"pk": 85, "model": "auth.permission", "fields": {"codename": "add_xmoduleuserstatesummaryfield", "name": "Can add x module user state summary field", "content_type": 29}}, {"pk": 86, "model": "auth.permission", "fields": {"codename": "change_xmoduleuserstatesummaryfield", "name": "Can change x module user state summary field", "content_type": 29}}, {"pk": 87, "model": "auth.permission", "fields": {"codename": "delete_xmoduleuserstatesummaryfield", "name": "Can delete x module user state summary field", "content_type": 29}}, {"pk": 421, "model": "auth.permission", "fields": {"codename": "add_coursererunstate", "name": "Can add course rerun state", "content_type": 140}}, {"pk": 422, "model": "auth.permission", "fields": {"codename": "change_coursererunstate", "name": "Can change course rerun state", "content_type": 140}}, {"pk": 423, "model": "auth.permission", "fields": {"codename": "delete_coursererunstate", "name": "Can delete course rerun state", "content_type": 140}}, {"pk": 568, "model": "auth.permission", "fields": {"codename": "add_coursecreator", "name": "Can add course creator", "content_type": 189}}, {"pk": 569, "model": "auth.permission", "fields": {"codename": "change_coursecreator", "name": "Can change course creator", "content_type": 189}}, {"pk": 570, "model": "auth.permission", "fields": {"codename": "delete_coursecreator", "name": "Can delete course creator", "content_type": 189}}, {"pk": 211, "model": "auth.permission", "fields": {"codename": "add_coursecohort", "name": "Can add course cohort", "content_type": 71}}, {"pk": 212, "model": "auth.permission", "fields": {"codename": "change_coursecohort", "name": "Can change course cohort", "content_type": 71}}, {"pk": 213, "model": "auth.permission", "fields": {"codename": "delete_coursecohort", "name": "Can delete course cohort", "content_type": 71}}, {"pk": 208, "model": "auth.permission", "fields": {"codename": "add_coursecohortssettings", "name": "Can add course cohorts settings", "content_type": 70}}, {"pk": 209, "model": "auth.permission", "fields": {"codename": "change_coursecohortssettings", "name": "Can change course cohorts settings", "content_type": 70}}, {"pk": 210, "model": "auth.permission", "fields": {"codename": "delete_coursecohortssettings", "name": "Can delete course cohorts settings", "content_type": 70}}, {"pk": 202, "model": "auth.permission", "fields": {"codename": "add_courseusergroup", "name": "Can add course user group", "content_type": 68}}, {"pk": 203, "model": "auth.permission", "fields": {"codename": "change_courseusergroup", "name": "Can change course user group", "content_type": 68}}, {"pk": 204, "model": "auth.permission", "fields": {"codename": "delete_courseusergroup", "name": "Can delete course user group", "content_type": 68}}, {"pk": 205, "model": "auth.permission", "fields": {"codename": "add_courseusergrouppartitiongroup", "name": "Can add course user group partition group", "content_type": 69}}, {"pk": 206, "model": "auth.permission", "fields": {"codename": "change_courseusergrouppartitiongroup", "name": "Can change course user group partition group", "content_type": 69}}, {"pk": 207, "model": "auth.permission", "fields": {"codename": "delete_courseusergrouppartitiongroup", "name": "Can delete course user group partition group", "content_type": 69}}, {"pk": 376, "model": "auth.permission", "fields": {"codename": "add_coursemode", "name": "Can add course mode", "content_type": 125}}, {"pk": 377, "model": "auth.permission", "fields": {"codename": "change_coursemode", "name": "Can change course mode", "content_type": 125}}, {"pk": 378, "model": "auth.permission", "fields": {"codename": "delete_coursemode", "name": "Can delete course mode", "content_type": 125}}, {"pk": 379, "model": "auth.permission", "fields": {"codename": "add_coursemodesarchive", "name": "Can add course modes archive", "content_type": 126}}, {"pk": 380, "model": "auth.permission", "fields": {"codename": "change_coursemodesarchive", "name": "Can change course modes archive", "content_type": 126}}, {"pk": 381, "model": "auth.permission", "fields": {"codename": "delete_coursemodesarchive", "name": "Can delete course modes archive", "content_type": 126}}, {"pk": 436, "model": "auth.permission", "fields": {"codename": "add_coursestructure", "name": "Can add course structure", "content_type": 145}}, {"pk": 437, "model": "auth.permission", "fields": {"codename": "change_coursestructure", "name": "Can change course structure", "content_type": 145}}, {"pk": 438, "model": "auth.permission", "fields": {"codename": "delete_coursestructure", "name": "Can delete course structure", "content_type": 145}}, {"pk": 544, "model": "auth.permission", "fields": {"codename": "add_creditcourse", "name": "Can add credit course", "content_type": 181}}, {"pk": 545, "model": "auth.permission", "fields": {"codename": "change_creditcourse", "name": "Can change credit course", "content_type": 181}}, {"pk": 546, "model": "auth.permission", "fields": {"codename": "delete_creditcourse", "name": "Can delete credit course", "content_type": 181}}, {"pk": 553, "model": "auth.permission", "fields": {"codename": "add_crediteligibility", "name": "Can add credit eligibility", "content_type": 184}}, {"pk": 554, "model": "auth.permission", "fields": {"codename": "change_crediteligibility", "name": "Can change credit eligibility", "content_type": 184}}, {"pk": 555, "model": "auth.permission", "fields": {"codename": "delete_crediteligibility", "name": "Can delete credit eligibility", "content_type": 184}}, {"pk": 541, "model": "auth.permission", "fields": {"codename": "add_creditprovider", "name": "Can add credit provider", "content_type": 180}}, {"pk": 542, "model": "auth.permission", "fields": {"codename": "change_creditprovider", "name": "Can change credit provider", "content_type": 180}}, {"pk": 543, "model": "auth.permission", "fields": {"codename": "delete_creditprovider", "name": "Can delete credit provider", "content_type": 180}}, {"pk": 559, "model": "auth.permission", "fields": {"codename": "add_creditrequest", "name": "Can add credit request", "content_type": 186}}, {"pk": 560, "model": "auth.permission", "fields": {"codename": "change_creditrequest", "name": "Can change credit request", "content_type": 186}}, {"pk": 561, "model": "auth.permission", "fields": {"codename": "delete_creditrequest", "name": "Can delete credit request", "content_type": 186}}, {"pk": 547, "model": "auth.permission", "fields": {"codename": "add_creditrequirement", "name": "Can add credit requirement", "content_type": 182}}, {"pk": 548, "model": "auth.permission", "fields": {"codename": "change_creditrequirement", "name": "Can change credit requirement", "content_type": 182}}, {"pk": 549, "model": "auth.permission", "fields": {"codename": "delete_creditrequirement", "name": "Can delete credit requirement", "content_type": 182}}, {"pk": 550, "model": "auth.permission", "fields": {"codename": "add_creditrequirementstatus", "name": "Can add credit requirement status", "content_type": 183}}, {"pk": 551, "model": "auth.permission", "fields": {"codename": "change_creditrequirementstatus", "name": "Can change credit requirement status", "content_type": 183}}, {"pk": 552, "model": "auth.permission", "fields": {"codename": "delete_creditrequirementstatus", "name": "Can delete credit requirement status", "content_type": 183}}, {"pk": 556, "model": "auth.permission", "fields": {"codename": "add_historicalcreditrequest", "name": "Can add historical credit request", "content_type": 185}}, {"pk": 557, "model": "auth.permission", "fields": {"codename": "change_historicalcreditrequest", "name": "Can change historical credit request", "content_type": 185}}, {"pk": 558, "model": "auth.permission", "fields": {"codename": "delete_historicalcreditrequest", "name": "Can delete historical credit request", "content_type": 185}}, {"pk": 397, "model": "auth.permission", "fields": {"codename": "add_darklangconfig", "name": "Can add dark lang config", "content_type": 132}}, {"pk": 398, "model": "auth.permission", "fields": {"codename": "change_darklangconfig", "name": "Can change dark lang config", "content_type": 132}}, {"pk": 399, "model": "auth.permission", "fields": {"codename": "delete_darklangconfig", "name": "Can delete dark lang config", "content_type": 132}}, {"pk": 73, "model": "auth.permission", "fields": {"codename": "add_association", "name": "Can add association", "content_type": 25}}, {"pk": 74, "model": "auth.permission", "fields": {"codename": "change_association", "name": "Can change association", "content_type": 25}}, {"pk": 75, "model": "auth.permission", "fields": {"codename": "delete_association", "name": "Can delete association", "content_type": 25}}, {"pk": 76, "model": "auth.permission", "fields": {"codename": "add_code", "name": "Can add code", "content_type": 26}}, {"pk": 77, "model": "auth.permission", "fields": {"codename": "change_code", "name": "Can change code", "content_type": 26}}, {"pk": 78, "model": "auth.permission", "fields": {"codename": "delete_code", "name": "Can delete code", "content_type": 26}}, {"pk": 70, "model": "auth.permission", "fields": {"codename": "add_nonce", "name": "Can add nonce", "content_type": 24}}, {"pk": 71, "model": "auth.permission", "fields": {"codename": "change_nonce", "name": "Can change nonce", "content_type": 24}}, {"pk": 72, "model": "auth.permission", "fields": {"codename": "delete_nonce", "name": "Can delete nonce", "content_type": 24}}, {"pk": 67, "model": "auth.permission", "fields": {"codename": "add_usersocialauth", "name": "Can add user social auth", "content_type": 23}}, {"pk": 68, "model": "auth.permission", "fields": {"codename": "change_usersocialauth", "name": "Can change user social auth", "content_type": 23}}, {"pk": 69, "model": "auth.permission", "fields": {"codename": "delete_usersocialauth", "name": "Can delete user social auth", "content_type": 23}}, {"pk": 292, "model": "auth.permission", "fields": {"codename": "add_notification", "name": "Can add notification", "content_type": 97}}, {"pk": 293, "model": "auth.permission", "fields": {"codename": "change_notification", "name": "Can change notification", "content_type": 97}}, {"pk": 294, "model": "auth.permission", "fields": {"codename": "delete_notification", "name": "Can delete notification", "content_type": 97}}, {"pk": 283, "model": "auth.permission", "fields": {"codename": "add_notificationtype", "name": "Can add type", "content_type": 94}}, {"pk": 284, "model": "auth.permission", "fields": {"codename": "change_notificationtype", "name": "Can change type", "content_type": 94}}, {"pk": 285, "model": "auth.permission", "fields": {"codename": "delete_notificationtype", "name": "Can delete type", "content_type": 94}}, {"pk": 286, "model": "auth.permission", "fields": {"codename": "add_settings", "name": "Can add settings", "content_type": 95}}, {"pk": 287, "model": "auth.permission", "fields": {"codename": "change_settings", "name": "Can change settings", "content_type": 95}}, {"pk": 288, "model": "auth.permission", "fields": {"codename": "delete_settings", "name": "Can delete settings", "content_type": 95}}, {"pk": 289, "model": "auth.permission", "fields": {"codename": "add_subscription", "name": "Can add subscription", "content_type": 96}}, {"pk": 290, "model": "auth.permission", "fields": {"codename": "change_subscription", "name": "Can change subscription", "content_type": 96}}, {"pk": 291, "model": "auth.permission", "fields": {"codename": "delete_subscription", "name": "Can delete subscription", "content_type": 96}}, {"pk": 55, "model": "auth.permission", "fields": {"codename": "add_association", "name": "Can add association", "content_type": 19}}, {"pk": 56, "model": "auth.permission", "fields": {"codename": "change_association", "name": "Can change association", "content_type": 19}}, {"pk": 57, "model": "auth.permission", "fields": {"codename": "delete_association", "name": "Can delete association", "content_type": 19}}, {"pk": 52, "model": "auth.permission", "fields": {"codename": "add_nonce", "name": "Can add nonce", "content_type": 18}}, {"pk": 53, "model": "auth.permission", "fields": {"codename": "change_nonce", "name": "Can change nonce", "content_type": 18}}, {"pk": 54, "model": "auth.permission", "fields": {"codename": "delete_nonce", "name": "Can delete nonce", "content_type": 18}}, {"pk": 58, "model": "auth.permission", "fields": {"codename": "add_useropenid", "name": "Can add user open id", "content_type": 20}}, {"pk": 59, "model": "auth.permission", "fields": {"codename": "change_useropenid", "name": "Can change user open id", "content_type": 20}}, {"pk": 60, "model": "auth.permission", "fields": {"codename": "delete_useropenid", "name": "Can delete user open id", "content_type": 20}}, {"pk": 28, "model": "auth.permission", "fields": {"codename": "add_crontabschedule", "name": "Can add crontab", "content_type": 10}}, {"pk": 29, "model": "auth.permission", "fields": {"codename": "change_crontabschedule", "name": "Can change crontab", "content_type": 10}}, {"pk": 30, "model": "auth.permission", "fields": {"codename": "delete_crontabschedule", "name": "Can delete crontab", "content_type": 10}}, {"pk": 25, "model": "auth.permission", "fields": {"codename": "add_intervalschedule", "name": "Can add interval", "content_type": 9}}, {"pk": 26, "model": "auth.permission", "fields": {"codename": "change_intervalschedule", "name": "Can change interval", "content_type": 9}}, {"pk": 27, "model": "auth.permission", "fields": {"codename": "delete_intervalschedule", "name": "Can delete interval", "content_type": 9}}, {"pk": 34, "model": "auth.permission", "fields": {"codename": "add_periodictask", "name": "Can add periodic task", "content_type": 12}}, {"pk": 35, "model": "auth.permission", "fields": {"codename": "change_periodictask", "name": "Can change periodic task", "content_type": 12}}, {"pk": 36, "model": "auth.permission", "fields": {"codename": "delete_periodictask", "name": "Can delete periodic task", "content_type": 12}}, {"pk": 31, "model": "auth.permission", "fields": {"codename": "add_periodictasks", "name": "Can add periodic tasks", "content_type": 11}}, {"pk": 32, "model": "auth.permission", "fields": {"codename": "change_periodictasks", "name": "Can change periodic tasks", "content_type": 11}}, {"pk": 33, "model": "auth.permission", "fields": {"codename": "delete_periodictasks", "name": "Can delete periodic tasks", "content_type": 11}}, {"pk": 19, "model": "auth.permission", "fields": {"codename": "add_taskmeta", "name": "Can add task state", "content_type": 7}}, {"pk": 20, "model": "auth.permission", "fields": {"codename": "change_taskmeta", "name": "Can change task state", "content_type": 7}}, {"pk": 21, "model": "auth.permission", "fields": {"codename": "delete_taskmeta", "name": "Can delete task state", "content_type": 7}}, {"pk": 22, "model": "auth.permission", "fields": {"codename": "add_tasksetmeta", "name": "Can add saved group result", "content_type": 8}}, {"pk": 23, "model": "auth.permission", "fields": {"codename": "change_tasksetmeta", "name": "Can change saved group result", "content_type": 8}}, {"pk": 24, "model": "auth.permission", "fields": {"codename": "delete_tasksetmeta", "name": "Can delete saved group result", "content_type": 8}}, {"pk": 40, "model": "auth.permission", "fields": {"codename": "add_taskstate", "name": "Can add task", "content_type": 14}}, {"pk": 41, "model": "auth.permission", "fields": {"codename": "change_taskstate", "name": "Can change task", "content_type": 14}}, {"pk": 42, "model": "auth.permission", "fields": {"codename": "delete_taskstate", "name": "Can delete task", "content_type": 14}}, {"pk": 37, "model": "auth.permission", "fields": {"codename": "add_workerstate", "name": "Can add worker", "content_type": 13}}, {"pk": 38, "model": "auth.permission", "fields": {"codename": "change_workerstate", "name": "Can change worker", "content_type": 13}}, {"pk": 39, "model": "auth.permission", "fields": {"codename": "delete_workerstate", "name": "Can delete worker", "content_type": 13}}, {"pk": 517, "model": "auth.permission", "fields": {"codename": "add_coursevideo", "name": "Can add course video", "content_type": 172}}, {"pk": 518, "model": "auth.permission", "fields": {"codename": "change_coursevideo", "name": "Can change course video", "content_type": 172}}, {"pk": 519, "model": "auth.permission", "fields": {"codename": "delete_coursevideo", "name": "Can delete course video", "content_type": 172}}, {"pk": 520, "model": "auth.permission", "fields": {"codename": "add_encodedvideo", "name": "Can add encoded video", "content_type": 173}}, {"pk": 521, "model": "auth.permission", "fields": {"codename": "change_encodedvideo", "name": "Can change encoded video", "content_type": 173}}, {"pk": 522, "model": "auth.permission", "fields": {"codename": "delete_encodedvideo", "name": "Can delete encoded video", "content_type": 173}}, {"pk": 511, "model": "auth.permission", "fields": {"codename": "add_profile", "name": "Can add profile", "content_type": 170}}, {"pk": 512, "model": "auth.permission", "fields": {"codename": "change_profile", "name": "Can change profile", "content_type": 170}}, {"pk": 513, "model": "auth.permission", "fields": {"codename": "delete_profile", "name": "Can delete profile", "content_type": 170}}, {"pk": 523, "model": "auth.permission", "fields": {"codename": "add_subtitle", "name": "Can add subtitle", "content_type": 174}}, {"pk": 524, "model": "auth.permission", "fields": {"codename": "change_subtitle", "name": "Can change subtitle", "content_type": 174}}, {"pk": 525, "model": "auth.permission", "fields": {"codename": "delete_subtitle", "name": "Can delete subtitle", "content_type": 174}}, {"pk": 514, "model": "auth.permission", "fields": {"codename": "add_video", "name": "Can add video", "content_type": 171}}, {"pk": 515, "model": "auth.permission", "fields": {"codename": "change_video", "name": "Can change video", "content_type": 171}}, {"pk": 516, "model": "auth.permission", "fields": {"codename": "delete_video", "name": "Can delete video", "content_type": 171}}, {"pk": 409, "model": "auth.permission", "fields": {"codename": "add_country", "name": "Can add country", "content_type": 136}}, {"pk": 410, "model": "auth.permission", "fields": {"codename": "change_country", "name": "Can change country", "content_type": 136}}, {"pk": 411, "model": "auth.permission", "fields": {"codename": "delete_country", "name": "Can delete country", "content_type": 136}}, {"pk": 412, "model": "auth.permission", "fields": {"codename": "add_countryaccessrule", "name": "Can add country access rule", "content_type": 137}}, {"pk": 413, "model": "auth.permission", "fields": {"codename": "change_countryaccessrule", "name": "Can change country access rule", "content_type": 137}}, {"pk": 414, "model": "auth.permission", "fields": {"codename": "delete_countryaccessrule", "name": "Can delete country access rule", "content_type": 137}}, {"pk": 415, "model": "auth.permission", "fields": {"codename": "add_courseaccessrulehistory", "name": "Can add course access rule history", "content_type": 138}}, {"pk": 416, "model": "auth.permission", "fields": {"codename": "change_courseaccessrulehistory", "name": "Can change course access rule history", "content_type": 138}}, {"pk": 417, "model": "auth.permission", "fields": {"codename": "delete_courseaccessrulehistory", "name": "Can delete course access rule history", "content_type": 138}}, {"pk": 400, "model": "auth.permission", "fields": {"codename": "add_embargoedcourse", "name": "Can add embargoed course", "content_type": 133}}, {"pk": 401, "model": "auth.permission", "fields": {"codename": "change_embargoedcourse", "name": "Can change embargoed course", "content_type": 133}}, {"pk": 402, "model": "auth.permission", "fields": {"codename": "delete_embargoedcourse", "name": "Can delete embargoed course", "content_type": 133}}, {"pk": 403, "model": "auth.permission", "fields": {"codename": "add_embargoedstate", "name": "Can add embargoed state", "content_type": 134}}, {"pk": 404, "model": "auth.permission", "fields": {"codename": "change_embargoedstate", "name": "Can change embargoed state", "content_type": 134}}, {"pk": 405, "model": "auth.permission", "fields": {"codename": "delete_embargoedstate", "name": "Can delete embargoed state", "content_type": 134}}, {"pk": 418, "model": "auth.permission", "fields": {"codename": "add_ipfilter", "name": "Can add ip filter", "content_type": 139}}, {"pk": 419, "model": "auth.permission", "fields": {"codename": "change_ipfilter", "name": "Can change ip filter", "content_type": 139}}, {"pk": 420, "model": "auth.permission", "fields": {"codename": "delete_ipfilter", "name": "Can delete ip filter", "content_type": 139}}, {"pk": 406, "model": "auth.permission", "fields": {"codename": "add_restrictedcourse", "name": "Can add restricted course", "content_type": 135}}, {"pk": 407, "model": "auth.permission", "fields": {"codename": "change_restrictedcourse", "name": "Can change restricted course", "content_type": 135}}, {"pk": 408, "model": "auth.permission", "fields": {"codename": "delete_restrictedcourse", "name": "Can delete restricted course", "content_type": 135}}, {"pk": 232, "model": "auth.permission", "fields": {"codename": "add_externalauthmap", "name": "Can add external auth map", "content_type": 78}}, {"pk": 233, "model": "auth.permission", "fields": {"codename": "change_externalauthmap", "name": "Can change external auth map", "content_type": 78}}, {"pk": 234, "model": "auth.permission", "fields": {"codename": "delete_externalauthmap", "name": "Can delete external auth map", "content_type": 78}}, {"pk": 298, "model": "auth.permission", "fields": {"codename": "add_puzzlecomplete", "name": "Can add puzzle complete", "content_type": 99}}, {"pk": 299, "model": "auth.permission", "fields": {"codename": "change_puzzlecomplete", "name": "Can change puzzle complete", "content_type": 99}}, {"pk": 300, "model": "auth.permission", "fields": {"codename": "delete_puzzlecomplete", "name": "Can delete puzzle complete", "content_type": 99}}, {"pk": 295, "model": "auth.permission", "fields": {"codename": "add_score", "name": "Can add score", "content_type": 98}}, {"pk": 296, "model": "auth.permission", "fields": {"codename": "change_score", "name": "Can change score", "content_type": 98}}, {"pk": 297, "model": "auth.permission", "fields": {"codename": "delete_score", "name": "Can delete score", "content_type": 98}}, {"pk": 193, "model": "auth.permission", "fields": {"codename": "add_instructortask", "name": "Can add instructor task", "content_type": 65}}, {"pk": 194, "model": "auth.permission", "fields": {"codename": "change_instructortask", "name": "Can change instructor task", "content_type": 65}}, {"pk": 195, "model": "auth.permission", "fields": {"codename": "delete_instructortask", "name": "Can delete instructor task", "content_type": 65}}, {"pk": 196, "model": "auth.permission", "fields": {"codename": "add_coursesoftware", "name": "Can add course software", "content_type": 66}}, {"pk": 197, "model": "auth.permission", "fields": {"codename": "change_coursesoftware", "name": "Can change course software", "content_type": 66}}, {"pk": 198, "model": "auth.permission", "fields": {"codename": "delete_coursesoftware", "name": "Can delete course software", "content_type": 66}}, {"pk": 199, "model": "auth.permission", "fields": {"codename": "add_userlicense", "name": "Can add user license", "content_type": 67}}, {"pk": 200, "model": "auth.permission", "fields": {"codename": "change_userlicense", "name": "Can change user license", "content_type": 67}}, {"pk": 201, "model": "auth.permission", "fields": {"codename": "delete_userlicense", "name": "Can delete user license", "content_type": 67}}, {"pk": 433, "model": "auth.permission", "fields": {"codename": "add_xblockasidesconfig", "name": "Can add x block asides config", "content_type": 144}}, {"pk": 434, "model": "auth.permission", "fields": {"codename": "change_xblockasidesconfig", "name": "Can change x block asides config", "content_type": 144}}, {"pk": 435, "model": "auth.permission", "fields": {"codename": "delete_xblockasidesconfig", "name": "Can delete x block asides config", "content_type": 144}}, {"pk": 535, "model": "auth.permission", "fields": {"codename": "add_coursecontentmilestone", "name": "Can add course content milestone", "content_type": 178}}, {"pk": 536, "model": "auth.permission", "fields": {"codename": "change_coursecontentmilestone", "name": "Can change course content milestone", "content_type": 178}}, {"pk": 537, "model": "auth.permission", "fields": {"codename": "delete_coursecontentmilestone", "name": "Can delete course content milestone", "content_type": 178}}, {"pk": 532, "model": "auth.permission", "fields": {"codename": "add_coursemilestone", "name": "Can add course milestone", "content_type": 177}}, {"pk": 533, "model": "auth.permission", "fields": {"codename": "change_coursemilestone", "name": "Can change course milestone", "content_type": 177}}, {"pk": 534, "model": "auth.permission", "fields": {"codename": "delete_coursemilestone", "name": "Can delete course milestone", "content_type": 177}}, {"pk": 526, "model": "auth.permission", "fields": {"codename": "add_milestone", "name": "Can add milestone", "content_type": 175}}, {"pk": 527, "model": "auth.permission", "fields": {"codename": "change_milestone", "name": "Can change milestone", "content_type": 175}}, {"pk": 528, "model": "auth.permission", "fields": {"codename": "delete_milestone", "name": "Can delete milestone", "content_type": 175}}, {"pk": 529, "model": "auth.permission", "fields": {"codename": "add_milestonerelationshiptype", "name": "Can add milestone relationship type", "content_type": 176}}, {"pk": 530, "model": "auth.permission", "fields": {"codename": "change_milestonerelationshiptype", "name": "Can change milestone relationship type", "content_type": 176}}, {"pk": 531, "model": "auth.permission", "fields": {"codename": "delete_milestonerelationshiptype", "name": "Can delete milestone relationship type", "content_type": 176}}, {"pk": 538, "model": "auth.permission", "fields": {"codename": "add_usermilestone", "name": "Can add user milestone", "content_type": 179}}, {"pk": 539, "model": "auth.permission", "fields": {"codename": "change_usermilestone", "name": "Can change user milestone", "content_type": 179}}, {"pk": 540, "model": "auth.permission", "fields": {"codename": "delete_usermilestone", "name": "Can delete user milestone", "content_type": 179}}, {"pk": 424, "model": "auth.permission", "fields": {"codename": "add_mobileapiconfig", "name": "Can add mobile api config", "content_type": 141}}, {"pk": 425, "model": "auth.permission", "fields": {"codename": "change_mobileapiconfig", "name": "Can change mobile api config", "content_type": 141}}, {"pk": 426, "model": "auth.permission", "fields": {"codename": "delete_mobileapiconfig", "name": "Can delete mobile api config", "content_type": 141}}, {"pk": 301, "model": "auth.permission", "fields": {"codename": "add_note", "name": "Can add note", "content_type": 100}}, {"pk": 302, "model": "auth.permission", "fields": {"codename": "change_note", "name": "Can change note", "content_type": 100}}, {"pk": 303, "model": "auth.permission", "fields": {"codename": "delete_note", "name": "Can delete note", "content_type": 100}}, {"pk": 241, "model": "auth.permission", "fields": {"codename": "add_accesstoken", "name": "Can add access token", "content_type": 81}}, {"pk": 242, "model": "auth.permission", "fields": {"codename": "change_accesstoken", "name": "Can change access token", "content_type": 81}}, {"pk": 243, "model": "auth.permission", "fields": {"codename": "delete_accesstoken", "name": "Can delete access token", "content_type": 81}}, {"pk": 235, "model": "auth.permission", "fields": {"codename": "add_client", "name": "Can add client", "content_type": 79}}, {"pk": 236, "model": "auth.permission", "fields": {"codename": "change_client", "name": "Can change client", "content_type": 79}}, {"pk": 237, "model": "auth.permission", "fields": {"codename": "delete_client", "name": "Can delete client", "content_type": 79}}, {"pk": 238, "model": "auth.permission", "fields": {"codename": "add_grant", "name": "Can add grant", "content_type": 80}}, {"pk": 239, "model": "auth.permission", "fields": {"codename": "change_grant", "name": "Can change grant", "content_type": 80}}, {"pk": 240, "model": "auth.permission", "fields": {"codename": "delete_grant", "name": "Can delete grant", "content_type": 80}}, {"pk": 244, "model": "auth.permission", "fields": {"codename": "add_refreshtoken", "name": "Can add refresh token", "content_type": 82}}, {"pk": 245, "model": "auth.permission", "fields": {"codename": "change_refreshtoken", "name": "Can change refresh token", "content_type": 82}}, {"pk": 246, "model": "auth.permission", "fields": {"codename": "delete_refreshtoken", "name": "Can delete refresh token", "content_type": 82}}, {"pk": 247, "model": "auth.permission", "fields": {"codename": "add_trustedclient", "name": "Can add trusted client", "content_type": 83}}, {"pk": 248, "model": "auth.permission", "fields": {"codename": "change_trustedclient", "name": "Can change trusted client", "content_type": 83}}, {"pk": 249, "model": "auth.permission", "fields": {"codename": "delete_trustedclient", "name": "Can delete trusted client", "content_type": 83}}, {"pk": 49, "model": "auth.permission", "fields": {"codename": "add_psychometricdata", "name": "Can add psychometric data", "content_type": 17}}, {"pk": 50, "model": "auth.permission", "fields": {"codename": "change_psychometricdata", "name": "Can change psychometric data", "content_type": 17}}, {"pk": 51, "model": "auth.permission", "fields": {"codename": "delete_psychometricdata", "name": "Can delete psychometric data", "content_type": 17}}, {"pk": 13, "model": "auth.permission", "fields": {"codename": "add_session", "name": "Can add session", "content_type": 5}}, {"pk": 14, "model": "auth.permission", "fields": {"codename": "change_session", "name": "Can change session", "content_type": 5}}, {"pk": 15, "model": "auth.permission", "fields": {"codename": "delete_session", "name": "Can delete session", "content_type": 5}}, {"pk": 367, "model": "auth.permission", "fields": {"codename": "add_certificateitem", "name": "Can add certificate item", "content_type": 122}}, {"pk": 368, "model": "auth.permission", "fields": {"codename": "change_certificateitem", "name": "Can change certificate item", "content_type": 122}}, {"pk": 369, "model": "auth.permission", "fields": {"codename": "delete_certificateitem", "name": "Can delete certificate item", "content_type": 122}}, {"pk": 349, "model": "auth.permission", "fields": {"codename": "add_coupon", "name": "Can add coupon", "content_type": 116}}, {"pk": 350, "model": "auth.permission", "fields": {"codename": "change_coupon", "name": "Can change coupon", "content_type": 116}}, {"pk": 351, "model": "auth.permission", "fields": {"codename": "delete_coupon", "name": "Can delete coupon", "content_type": 116}}, {"pk": 352, "model": "auth.permission", "fields": {"codename": "add_couponredemption", "name": "Can add coupon redemption", "content_type": 117}}, {"pk": 353, "model": "auth.permission", "fields": {"codename": "change_couponredemption", "name": "Can change coupon redemption", "content_type": 117}}, {"pk": 354, "model": "auth.permission", "fields": {"codename": "delete_couponredemption", "name": "Can delete coupon redemption", "content_type": 117}}, {"pk": 358, "model": "auth.permission", "fields": {"codename": "add_courseregcodeitem", "name": "Can add course reg code item", "content_type": 119}}, {"pk": 359, "model": "auth.permission", "fields": {"codename": "change_courseregcodeitem", "name": "Can change course reg code item", "content_type": 119}}, {"pk": 360, "model": "auth.permission", "fields": {"codename": "delete_courseregcodeitem", "name": "Can delete course reg code item", "content_type": 119}}, {"pk": 361, "model": "auth.permission", "fields": {"codename": "add_courseregcodeitemannotation", "name": "Can add course reg code item annotation", "content_type": 120}}, {"pk": 362, "model": "auth.permission", "fields": {"codename": "change_courseregcodeitemannotation", "name": "Can change course reg code item annotation", "content_type": 120}}, {"pk": 363, "model": "auth.permission", "fields": {"codename": "delete_courseregcodeitemannotation", "name": "Can delete course reg code item annotation", "content_type": 120}}, {"pk": 343, "model": "auth.permission", "fields": {"codename": "add_courseregistrationcode", "name": "Can add course registration code", "content_type": 114}}, {"pk": 344, "model": "auth.permission", "fields": {"codename": "change_courseregistrationcode", "name": "Can change course registration code", "content_type": 114}}, {"pk": 345, "model": "auth.permission", "fields": {"codename": "delete_courseregistrationcode", "name": "Can delete course registration code", "content_type": 114}}, {"pk": 337, "model": "auth.permission", "fields": {"codename": "add_courseregistrationcodeinvoiceitem", "name": "Can add course registration code invoice item", "content_type": 112}}, {"pk": 338, "model": "auth.permission", "fields": {"codename": "change_courseregistrationcodeinvoiceitem", "name": "Can change course registration code invoice item", "content_type": 112}}, {"pk": 339, "model": "auth.permission", "fields": {"codename": "delete_courseregistrationcodeinvoiceitem", "name": "Can delete course registration code invoice item", "content_type": 112}}, {"pk": 373, "model": "auth.permission", "fields": {"codename": "add_donation", "name": "Can add donation", "content_type": 124}}, {"pk": 374, "model": "auth.permission", "fields": {"codename": "change_donation", "name": "Can change donation", "content_type": 124}}, {"pk": 375, "model": "auth.permission", "fields": {"codename": "delete_donation", "name": "Can delete donation", "content_type": 124}}, {"pk": 370, "model": "auth.permission", "fields": {"codename": "add_donationconfiguration", "name": "Can add donation configuration", "content_type": 123}}, {"pk": 371, "model": "auth.permission", "fields": {"codename": "change_donationconfiguration", "name": "Can change donation configuration", "content_type": 123}}, {"pk": 372, "model": "auth.permission", "fields": {"codename": "delete_donationconfiguration", "name": "Can delete donation configuration", "content_type": 123}}, {"pk": 328, "model": "auth.permission", "fields": {"codename": "add_invoice", "name": "Can add invoice", "content_type": 109}}, {"pk": 329, "model": "auth.permission", "fields": {"codename": "change_invoice", "name": "Can change invoice", "content_type": 109}}, {"pk": 330, "model": "auth.permission", "fields": {"codename": "delete_invoice", "name": "Can delete invoice", "content_type": 109}}, {"pk": 340, "model": "auth.permission", "fields": {"codename": "add_invoicehistory", "name": "Can add invoice history", "content_type": 113}}, {"pk": 341, "model": "auth.permission", "fields": {"codename": "change_invoicehistory", "name": "Can change invoice history", "content_type": 113}}, {"pk": 342, "model": "auth.permission", "fields": {"codename": "delete_invoicehistory", "name": "Can delete invoice history", "content_type": 113}}, {"pk": 334, "model": "auth.permission", "fields": {"codename": "add_invoiceitem", "name": "Can add invoice item", "content_type": 111}}, {"pk": 335, "model": "auth.permission", "fields": {"codename": "change_invoiceitem", "name": "Can change invoice item", "content_type": 111}}, {"pk": 336, "model": "auth.permission", "fields": {"codename": "delete_invoiceitem", "name": "Can delete invoice item", "content_type": 111}}, {"pk": 331, "model": "auth.permission", "fields": {"codename": "add_invoicetransaction", "name": "Can add invoice transaction", "content_type": 110}}, {"pk": 332, "model": "auth.permission", "fields": {"codename": "change_invoicetransaction", "name": "Can change invoice transaction", "content_type": 110}}, {"pk": 333, "model": "auth.permission", "fields": {"codename": "delete_invoicetransaction", "name": "Can delete invoice transaction", "content_type": 110}}, {"pk": 322, "model": "auth.permission", "fields": {"codename": "add_order", "name": "Can add order", "content_type": 107}}, {"pk": 323, "model": "auth.permission", "fields": {"codename": "change_order", "name": "Can change order", "content_type": 107}}, {"pk": 324, "model": "auth.permission", "fields": {"codename": "delete_order", "name": "Can delete order", "content_type": 107}}, {"pk": 325, "model": "auth.permission", "fields": {"codename": "add_orderitem", "name": "Can add order item", "content_type": 108}}, {"pk": 326, "model": "auth.permission", "fields": {"codename": "change_orderitem", "name": "Can change order item", "content_type": 108}}, {"pk": 327, "model": "auth.permission", "fields": {"codename": "delete_orderitem", "name": "Can delete order item", "content_type": 108}}, {"pk": 355, "model": "auth.permission", "fields": {"codename": "add_paidcourseregistration", "name": "Can add paid course registration", "content_type": 118}}, {"pk": 356, "model": "auth.permission", "fields": {"codename": "change_paidcourseregistration", "name": "Can change paid course registration", "content_type": 118}}, {"pk": 357, "model": "auth.permission", "fields": {"codename": "delete_paidcourseregistration", "name": "Can delete paid course registration", "content_type": 118}}, {"pk": 364, "model": "auth.permission", "fields": {"codename": "add_paidcourseregistrationannotation", "name": "Can add paid course registration annotation", "content_type": 121}}, {"pk": 365, "model": "auth.permission", "fields": {"codename": "change_paidcourseregistrationannotation", "name": "Can change paid course registration annotation", "content_type": 121}}, {"pk": 366, "model": "auth.permission", "fields": {"codename": "delete_paidcourseregistrationannotation", "name": "Can delete paid course registration annotation", "content_type": 121}}, {"pk": 346, "model": "auth.permission", "fields": {"codename": "add_registrationcoderedemption", "name": "Can add registration code redemption", "content_type": 115}}, {"pk": 347, "model": "auth.permission", "fields": {"codename": "change_registrationcoderedemption", "name": "Can change registration code redemption", "content_type": 115}}, {"pk": 348, "model": "auth.permission", "fields": {"codename": "delete_registrationcoderedemption", "name": "Can delete registration code redemption", "content_type": 115}}, {"pk": 16, "model": "auth.permission", "fields": {"codename": "add_site", "name": "Can add site", "content_type": 6}}, {"pk": 17, "model": "auth.permission", "fields": {"codename": "change_site", "name": "Can change site", "content_type": 6}}, {"pk": 18, "model": "auth.permission", "fields": {"codename": "delete_site", "name": "Can delete site", "content_type": 6}}, {"pk": 43, "model": "auth.permission", "fields": {"codename": "add_migrationhistory", "name": "Can add migration history", "content_type": 15}}, {"pk": 44, "model": "auth.permission", "fields": {"codename": "change_migrationhistory", "name": "Can change migration history", "content_type": 15}}, {"pk": 45, "model": "auth.permission", "fields": {"codename": "delete_migrationhistory", "name": "Can delete migration history", "content_type": 15}}, {"pk": 304, "model": "auth.permission", "fields": {"codename": "add_splashconfig", "name": "Can add splash config", "content_type": 101}}, {"pk": 305, "model": "auth.permission", "fields": {"codename": "change_splashconfig", "name": "Can change splash config", "content_type": 101}}, {"pk": 306, "model": "auth.permission", "fields": {"codename": "delete_splashconfig", "name": "Can delete splash config", "content_type": 101}}, {"pk": 103, "model": "auth.permission", "fields": {"codename": "add_anonymoususerid", "name": "Can add anonymous user id", "content_type": 35}}, {"pk": 104, "model": "auth.permission", "fields": {"codename": "change_anonymoususerid", "name": "Can change anonymous user id", "content_type": 35}}, {"pk": 105, "model": "auth.permission", "fields": {"codename": "delete_anonymoususerid", "name": "Can delete anonymous user id", "content_type": 35}}, {"pk": 142, "model": "auth.permission", "fields": {"codename": "add_courseaccessrole", "name": "Can add course access role", "content_type": 48}}, {"pk": 143, "model": "auth.permission", "fields": {"codename": "change_courseaccessrole", "name": "Can change course access role", "content_type": 48}}, {"pk": 144, "model": "auth.permission", "fields": {"codename": "delete_courseaccessrole", "name": "Can delete course access role", "content_type": 48}}, {"pk": 133, "model": "auth.permission", "fields": {"codename": "add_courseenrollment", "name": "Can add course enrollment", "content_type": 45}}, {"pk": 134, "model": "auth.permission", "fields": {"codename": "change_courseenrollment", "name": "Can change course enrollment", "content_type": 45}}, {"pk": 135, "model": "auth.permission", "fields": {"codename": "delete_courseenrollment", "name": "Can delete course enrollment", "content_type": 45}}, {"pk": 139, "model": "auth.permission", "fields": {"codename": "add_courseenrollmentallowed", "name": "Can add course enrollment allowed", "content_type": 47}}, {"pk": 140, "model": "auth.permission", "fields": {"codename": "change_courseenrollmentallowed", "name": "Can change course enrollment allowed", "content_type": 47}}, {"pk": 141, "model": "auth.permission", "fields": {"codename": "delete_courseenrollmentallowed", "name": "Can delete course enrollment allowed", "content_type": 47}}, {"pk": 157, "model": "auth.permission", "fields": {"codename": "add_courseenrollmentattribute", "name": "Can add course enrollment attribute", "content_type": 53}}, {"pk": 158, "model": "auth.permission", "fields": {"codename": "change_courseenrollmentattribute", "name": "Can change course enrollment attribute", "content_type": 53}}, {"pk": 159, "model": "auth.permission", "fields": {"codename": "delete_courseenrollmentattribute", "name": "Can delete course enrollment attribute", "content_type": 53}}, {"pk": 145, "model": "auth.permission", "fields": {"codename": "add_dashboardconfiguration", "name": "Can add dashboard configuration", "content_type": 49}}, {"pk": 146, "model": "auth.permission", "fields": {"codename": "change_dashboardconfiguration", "name": "Can change dashboard configuration", "content_type": 49}}, {"pk": 147, "model": "auth.permission", "fields": {"codename": "delete_dashboardconfiguration", "name": "Can delete dashboard configuration", "content_type": 49}}, {"pk": 151, "model": "auth.permission", "fields": {"codename": "add_entranceexamconfiguration", "name": "Can add entrance exam configuration", "content_type": 51}}, {"pk": 152, "model": "auth.permission", "fields": {"codename": "change_entranceexamconfiguration", "name": "Can change entrance exam configuration", "content_type": 51}}, {"pk": 153, "model": "auth.permission", "fields": {"codename": "delete_entranceexamconfiguration", "name": "Can delete entrance exam configuration", "content_type": 51}}, {"pk": 154, "model": "auth.permission", "fields": {"codename": "add_languageproficiency", "name": "Can add language proficiency", "content_type": 52}}, {"pk": 155, "model": "auth.permission", "fields": {"codename": "change_languageproficiency", "name": "Can change language proficiency", "content_type": 52}}, {"pk": 156, "model": "auth.permission", "fields": {"codename": "delete_languageproficiency", "name": "Can delete language proficiency", "content_type": 52}}, {"pk": 148, "model": "auth.permission", "fields": {"codename": "add_linkedinaddtoprofileconfiguration", "name": "Can add linked in add to profile configuration", "content_type": 50}}, {"pk": 149, "model": "auth.permission", "fields": {"codename": "change_linkedinaddtoprofileconfiguration", "name": "Can change linked in add to profile configuration", "content_type": 50}}, {"pk": 150, "model": "auth.permission", "fields": {"codename": "delete_linkedinaddtoprofileconfiguration", "name": "Can delete linked in add to profile configuration", "content_type": 50}}, {"pk": 130, "model": "auth.permission", "fields": {"codename": "add_loginfailures", "name": "Can add login failures", "content_type": 44}}, {"pk": 131, "model": "auth.permission", "fields": {"codename": "change_loginfailures", "name": "Can change login failures", "content_type": 44}}, {"pk": 132, "model": "auth.permission", "fields": {"codename": "delete_loginfailures", "name": "Can delete login failures", "content_type": 44}}, {"pk": 136, "model": "auth.permission", "fields": {"codename": "add_manualenrollmentaudit", "name": "Can add manual enrollment audit", "content_type": 46}}, {"pk": 137, "model": "auth.permission", "fields": {"codename": "change_manualenrollmentaudit", "name": "Can change manual enrollment audit", "content_type": 46}}, {"pk": 138, "model": "auth.permission", "fields": {"codename": "delete_manualenrollmentaudit", "name": "Can delete manual enrollment audit", "content_type": 46}}, {"pk": 127, "model": "auth.permission", "fields": {"codename": "add_passwordhistory", "name": "Can add password history", "content_type": 43}}, {"pk": 128, "model": "auth.permission", "fields": {"codename": "change_passwordhistory", "name": "Can change password history", "content_type": 43}}, {"pk": 129, "model": "auth.permission", "fields": {"codename": "delete_passwordhistory", "name": "Can delete password history", "content_type": 43}}, {"pk": 124, "model": "auth.permission", "fields": {"codename": "add_pendingemailchange", "name": "Can add pending email change", "content_type": 42}}, {"pk": 125, "model": "auth.permission", "fields": {"codename": "change_pendingemailchange", "name": "Can change pending email change", "content_type": 42}}, {"pk": 126, "model": "auth.permission", "fields": {"codename": "delete_pendingemailchange", "name": "Can delete pending email change", "content_type": 42}}, {"pk": 121, "model": "auth.permission", "fields": {"codename": "add_pendingnamechange", "name": "Can add pending name change", "content_type": 41}}, {"pk": 122, "model": "auth.permission", "fields": {"codename": "change_pendingnamechange", "name": "Can change pending name change", "content_type": 41}}, {"pk": 123, "model": "auth.permission", "fields": {"codename": "delete_pendingnamechange", "name": "Can delete pending name change", "content_type": 41}}, {"pk": 118, "model": "auth.permission", "fields": {"codename": "add_registration", "name": "Can add registration", "content_type": 40}}, {"pk": 119, "model": "auth.permission", "fields": {"codename": "change_registration", "name": "Can change registration", "content_type": 40}}, {"pk": 120, "model": "auth.permission", "fields": {"codename": "delete_registration", "name": "Can delete registration", "content_type": 40}}, {"pk": 109, "model": "auth.permission", "fields": {"codename": "add_userprofile", "name": "Can add user profile", "content_type": 37}}, {"pk": 110, "model": "auth.permission", "fields": {"codename": "change_userprofile", "name": "Can change user profile", "content_type": 37}}, {"pk": 111, "model": "auth.permission", "fields": {"codename": "delete_userprofile", "name": "Can delete user profile", "content_type": 37}}, {"pk": 112, "model": "auth.permission", "fields": {"codename": "add_usersignupsource", "name": "Can add user signup source", "content_type": 38}}, {"pk": 113, "model": "auth.permission", "fields": {"codename": "change_usersignupsource", "name": "Can change user signup source", "content_type": 38}}, {"pk": 114, "model": "auth.permission", "fields": {"codename": "delete_usersignupsource", "name": "Can delete user signup source", "content_type": 38}}, {"pk": 106, "model": "auth.permission", "fields": {"codename": "add_userstanding", "name": "Can add user standing", "content_type": 36}}, {"pk": 107, "model": "auth.permission", "fields": {"codename": "change_userstanding", "name": "Can change user standing", "content_type": 36}}, {"pk": 108, "model": "auth.permission", "fields": {"codename": "delete_userstanding", "name": "Can delete user standing", "content_type": 36}}, {"pk": 115, "model": "auth.permission", "fields": {"codename": "add_usertestgroup", "name": "Can add user test group", "content_type": 39}}, {"pk": 116, "model": "auth.permission", "fields": {"codename": "change_usertestgroup", "name": "Can change user test group", "content_type": 39}}, {"pk": 117, "model": "auth.permission", "fields": {"codename": "delete_usertestgroup", "name": "Can delete user test group", "content_type": 39}}, {"pk": 448, "model": "auth.permission", "fields": {"codename": "add_score", "name": "Can add score", "content_type": 149}}, {"pk": 449, "model": "auth.permission", "fields": {"codename": "change_score", "name": "Can change score", "content_type": 149}}, {"pk": 450, "model": "auth.permission", "fields": {"codename": "delete_score", "name": "Can delete score", "content_type": 149}}, {"pk": 451, "model": "auth.permission", "fields": {"codename": "add_scoresummary", "name": "Can add score summary", "content_type": 150}}, {"pk": 452, "model": "auth.permission", "fields": {"codename": "change_scoresummary", "name": "Can change score summary", "content_type": 150}}, {"pk": 453, "model": "auth.permission", "fields": {"codename": "delete_scoresummary", "name": "Can delete score summary", "content_type": 150}}, {"pk": 442, "model": "auth.permission", "fields": {"codename": "add_studentitem", "name": "Can add student item", "content_type": 147}}, {"pk": 443, "model": "auth.permission", "fields": {"codename": "change_studentitem", "name": "Can change student item", "content_type": 147}}, {"pk": 444, "model": "auth.permission", "fields": {"codename": "delete_studentitem", "name": "Can delete student item", "content_type": 147}}, {"pk": 445, "model": "auth.permission", "fields": {"codename": "add_submission", "name": "Can add submission", "content_type": 148}}, {"pk": 446, "model": "auth.permission", "fields": {"codename": "change_submission", "name": "Can change submission", "content_type": 148}}, {"pk": 447, "model": "auth.permission", "fields": {"codename": "delete_submission", "name": "Can delete submission", "content_type": 148}}, {"pk": 430, "model": "auth.permission", "fields": {"codename": "add_surveyanswer", "name": "Can add survey answer", "content_type": 143}}, {"pk": 431, "model": "auth.permission", "fields": {"codename": "change_surveyanswer", "name": "Can change survey answer", "content_type": 143}}, {"pk": 432, "model": "auth.permission", "fields": {"codename": "delete_surveyanswer", "name": "Can delete survey answer", "content_type": 143}}, {"pk": 427, "model": "auth.permission", "fields": {"codename": "add_surveyform", "name": "Can add survey form", "content_type": 142}}, {"pk": 428, "model": "auth.permission", "fields": {"codename": "change_surveyform", "name": "Can change survey form", "content_type": 142}}, {"pk": 429, "model": "auth.permission", "fields": {"codename": "delete_surveyform", "name": "Can delete survey form", "content_type": 142}}, {"pk": 316, "model": "auth.permission", "fields": {"codename": "add_courseteam", "name": "Can add course team", "content_type": 105}}, {"pk": 317, "model": "auth.permission", "fields": {"codename": "change_courseteam", "name": "Can change course team", "content_type": 105}}, {"pk": 318, "model": "auth.permission", "fields": {"codename": "delete_courseteam", "name": "Can delete course team", "content_type": 105}}, {"pk": 319, "model": "auth.permission", "fields": {"codename": "add_courseteammembership", "name": "Can add course team membership", "content_type": 106}}, {"pk": 320, "model": "auth.permission", "fields": {"codename": "change_courseteammembership", "name": "Can change course team membership", "content_type": 106}}, {"pk": 321, "model": "auth.permission", "fields": {"codename": "delete_courseteammembership", "name": "Can delete course team membership", "content_type": 106}}, {"pk": 160, "model": "auth.permission", "fields": {"codename": "add_trackinglog", "name": "Can add tracking log", "content_type": 54}}, {"pk": 161, "model": "auth.permission", "fields": {"codename": "change_trackinglog", "name": "Can change tracking log", "content_type": 54}}, {"pk": 162, "model": "auth.permission", "fields": {"codename": "delete_trackinglog", "name": "Can delete tracking log", "content_type": 54}}, {"pk": 310, "model": "auth.permission", "fields": {"codename": "add_usercoursetag", "name": "Can add user course tag", "content_type": 103}}, {"pk": 311, "model": "auth.permission", "fields": {"codename": "change_usercoursetag", "name": "Can change user course tag", "content_type": 103}}, {"pk": 312, "model": "auth.permission", "fields": {"codename": "delete_usercoursetag", "name": "Can delete user course tag", "content_type": 103}}, {"pk": 313, "model": "auth.permission", "fields": {"codename": "add_userorgtag", "name": "Can add user org tag", "content_type": 104}}, {"pk": 314, "model": "auth.permission", "fields": {"codename": "change_userorgtag", "name": "Can change user org tag", "content_type": 104}}, {"pk": 315, "model": "auth.permission", "fields": {"codename": "delete_userorgtag", "name": "Can delete user org tag", "content_type": 104}}, {"pk": 307, "model": "auth.permission", "fields": {"codename": "add_userpreference", "name": "Can add user preference", "content_type": 102}}, {"pk": 308, "model": "auth.permission", "fields": {"codename": "change_userpreference", "name": "Can change user preference", "content_type": 102}}, {"pk": 309, "model": "auth.permission", "fields": {"codename": "delete_userpreference", "name": "Can delete user preference", "content_type": 102}}, {"pk": 163, "model": "auth.permission", "fields": {"codename": "add_ratelimitconfiguration", "name": "Can add rate limit configuration", "content_type": 55}}, {"pk": 164, "model": "auth.permission", "fields": {"codename": "change_ratelimitconfiguration", "name": "Can change rate limit configuration", "content_type": 55}}, {"pk": 165, "model": "auth.permission", "fields": {"codename": "delete_ratelimitconfiguration", "name": "Can delete rate limit configuration", "content_type": 55}}, {"pk": 391, "model": "auth.permission", "fields": {"codename": "add_incoursereverificationconfiguration", "name": "Can add in course reverification configuration", "content_type": 130}}, {"pk": 392, "model": "auth.permission", "fields": {"codename": "change_incoursereverificationconfiguration", "name": "Can change in course reverification configuration", "content_type": 130}}, {"pk": 393, "model": "auth.permission", "fields": {"codename": "delete_incoursereverificationconfiguration", "name": "Can delete in course reverification configuration", "content_type": 130}}, {"pk": 394, "model": "auth.permission", "fields": {"codename": "add_skippedreverification", "name": "Can add skipped reverification", "content_type": 131}}, {"pk": 395, "model": "auth.permission", "fields": {"codename": "change_skippedreverification", "name": "Can change skipped reverification", "content_type": 131}}, {"pk": 396, "model": "auth.permission", "fields": {"codename": "delete_skippedreverification", "name": "Can delete skipped reverification", "content_type": 131}}, {"pk": 382, "model": "auth.permission", "fields": {"codename": "add_softwaresecurephotoverification", "name": "Can add software secure photo verification", "content_type": 127}}, {"pk": 383, "model": "auth.permission", "fields": {"codename": "change_softwaresecurephotoverification", "name": "Can change software secure photo verification", "content_type": 127}}, {"pk": 384, "model": "auth.permission", "fields": {"codename": "delete_softwaresecurephotoverification", "name": "Can delete software secure photo verification", "content_type": 127}}, {"pk": 385, "model": "auth.permission", "fields": {"codename": "add_verificationcheckpoint", "name": "Can add verification checkpoint", "content_type": 128}}, {"pk": 386, "model": "auth.permission", "fields": {"codename": "change_verificationcheckpoint", "name": "Can change verification checkpoint", "content_type": 128}}, {"pk": 387, "model": "auth.permission", "fields": {"codename": "delete_verificationcheckpoint", "name": "Can delete verification checkpoint", "content_type": 128}}, {"pk": 388, "model": "auth.permission", "fields": {"codename": "add_verificationstatus", "name": "Can add Verification Status", "content_type": 129}}, {"pk": 389, "model": "auth.permission", "fields": {"codename": "change_verificationstatus", "name": "Can change Verification Status", "content_type": 129}}, {"pk": 390, "model": "auth.permission", "fields": {"codename": "delete_verificationstatus", "name": "Can delete Verification Status", "content_type": 129}}, {"pk": 250, "model": "auth.permission", "fields": {"codename": "add_article", "name": "Can add article", "content_type": 84}}, {"pk": 254, "model": "auth.permission", "fields": {"codename": "assign", "name": "Can change ownership of any article", "content_type": 84}}, {"pk": 251, "model": "auth.permission", "fields": {"codename": "change_article", "name": "Can change article", "content_type": 84}}, {"pk": 252, "model": "auth.permission", "fields": {"codename": "delete_article", "name": "Can delete article", "content_type": 84}}, {"pk": 255, "model": "auth.permission", "fields": {"codename": "grant", "name": "Can assign permissions to other users", "content_type": 84}}, {"pk": 253, "model": "auth.permission", "fields": {"codename": "moderate", "name": "Can edit all articles and lock/unlock/restore", "content_type": 84}}, {"pk": 256, "model": "auth.permission", "fields": {"codename": "add_articleforobject", "name": "Can add Article for object", "content_type": 85}}, {"pk": 257, "model": "auth.permission", "fields": {"codename": "change_articleforobject", "name": "Can change Article for object", "content_type": 85}}, {"pk": 258, "model": "auth.permission", "fields": {"codename": "delete_articleforobject", "name": "Can delete Article for object", "content_type": 85}}, {"pk": 265, "model": "auth.permission", "fields": {"codename": "add_articleplugin", "name": "Can add article plugin", "content_type": 88}}, {"pk": 266, "model": "auth.permission", "fields": {"codename": "change_articleplugin", "name": "Can change article plugin", "content_type": 88}}, {"pk": 267, "model": "auth.permission", "fields": {"codename": "delete_articleplugin", "name": "Can delete article plugin", "content_type": 88}}, {"pk": 259, "model": "auth.permission", "fields": {"codename": "add_articlerevision", "name": "Can add article revision", "content_type": 86}}, {"pk": 260, "model": "auth.permission", "fields": {"codename": "change_articlerevision", "name": "Can change article revision", "content_type": 86}}, {"pk": 261, "model": "auth.permission", "fields": {"codename": "delete_articlerevision", "name": "Can delete article revision", "content_type": 86}}, {"pk": 280, "model": "auth.permission", "fields": {"codename": "add_articlesubscription", "name": "Can add article subscription", "content_type": 93}}, {"pk": 281, "model": "auth.permission", "fields": {"codename": "change_articlesubscription", "name": "Can change article subscription", "content_type": 93}}, {"pk": 282, "model": "auth.permission", "fields": {"codename": "delete_articlesubscription", "name": "Can delete article subscription", "content_type": 93}}, {"pk": 268, "model": "auth.permission", "fields": {"codename": "add_reusableplugin", "name": "Can add reusable plugin", "content_type": 89}}, {"pk": 269, "model": "auth.permission", "fields": {"codename": "change_reusableplugin", "name": "Can change reusable plugin", "content_type": 89}}, {"pk": 270, "model": "auth.permission", "fields": {"codename": "delete_reusableplugin", "name": "Can delete reusable plugin", "content_type": 89}}, {"pk": 274, "model": "auth.permission", "fields": {"codename": "add_revisionplugin", "name": "Can add revision plugin", "content_type": 91}}, {"pk": 275, "model": "auth.permission", "fields": {"codename": "change_revisionplugin", "name": "Can change revision plugin", "content_type": 91}}, {"pk": 276, "model": "auth.permission", "fields": {"codename": "delete_revisionplugin", "name": "Can delete revision plugin", "content_type": 91}}, {"pk": 277, "model": "auth.permission", "fields": {"codename": "add_revisionpluginrevision", "name": "Can add revision plugin revision", "content_type": 92}}, {"pk": 278, "model": "auth.permission", "fields": {"codename": "change_revisionpluginrevision", "name": "Can change revision plugin revision", "content_type": 92}}, {"pk": 279, "model": "auth.permission", "fields": {"codename": "delete_revisionpluginrevision", "name": "Can delete revision plugin revision", "content_type": 92}}, {"pk": 271, "model": "auth.permission", "fields": {"codename": "add_simpleplugin", "name": "Can add simple plugin", "content_type": 90}}, {"pk": 272, "model": "auth.permission", "fields": {"codename": "change_simpleplugin", "name": "Can change simple plugin", "content_type": 90}}, {"pk": 273, "model": "auth.permission", "fields": {"codename": "delete_simpleplugin", "name": "Can delete simple plugin", "content_type": 90}}, {"pk": 262, "model": "auth.permission", "fields": {"codename": "add_urlpath", "name": "Can add URL path", "content_type": 87}}, {"pk": 263, "model": "auth.permission", "fields": {"codename": "change_urlpath", "name": "Can change URL path", "content_type": 87}}, {"pk": 264, "model": "auth.permission", "fields": {"codename": "delete_urlpath", "name": "Can delete URL path", "content_type": 87}}, {"pk": 502, "model": "auth.permission", "fields": {"codename": "add_assessmentworkflow", "name": "Can add assessment workflow", "content_type": 167}}, {"pk": 503, "model": "auth.permission", "fields": {"codename": "change_assessmentworkflow", "name": "Can change assessment workflow", "content_type": 167}}, {"pk": 504, "model": "auth.permission", "fields": {"codename": "delete_assessmentworkflow", "name": "Can delete assessment workflow", "content_type": 167}}, {"pk": 508, "model": "auth.permission", "fields": {"codename": "add_assessmentworkflowcancellation", "name": "Can add assessment workflow cancellation", "content_type": 169}}, {"pk": 509, "model": "auth.permission", "fields": {"codename": "change_assessmentworkflowcancellation", "name": "Can change assessment workflow cancellation", "content_type": 169}}, {"pk": 510, "model": "auth.permission", "fields": {"codename": "delete_assessmentworkflowcancellation", "name": "Can delete assessment workflow cancellation", "content_type": 169}}, {"pk": 505, "model": "auth.permission", "fields": {"codename": "add_assessmentworkflowstep", "name": "Can add assessment workflow step", "content_type": 168}}, {"pk": 506, "model": "auth.permission", "fields": {"codename": "change_assessmentworkflowstep", "name": "Can change assessment workflow step", "content_type": 168}}, {"pk": 507, "model": "auth.permission", "fields": {"codename": "delete_assessmentworkflowstep", "name": "Can delete assessment workflow step", "content_type": 168}}, {"pk": 571, "model": "auth.permission", "fields": {"codename": "add_studioconfig", "name": "Can add studio config", "content_type": 190}}, {"pk": 572, "model": "auth.permission", "fields": {"codename": "change_studioconfig", "name": "Can change studio config", "content_type": 190}}, {"pk": 573, "model": "auth.permission", "fields": {"codename": "delete_studioconfig", "name": "Can delete studio config", "content_type": 190}}, {"pk": 1, "model": "util.ratelimitconfiguration", "fields": {"change_date": "2015-06-17T19:56:01Z", "changed_by": null, "enabled": true}}, {"pk": 1, "model": "certificates.certificatehtmlviewconfiguration", "fields": {"change_date": "2015-06-17T19:56:03Z", "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\"}, \"base\": {\"certificate_type\": \"base\", \"certificate_title\": \"Certificate of Achievement\", \"document_body_class_append\": \"is-base\"}, \"distinguished\": {\"certificate_type\": \"distinguished\", \"certificate_title\": \"Distinguished Certificate of Achievement\", \"document_body_class_append\": \"is-distinguished\"}}", "enabled": false}}, {"pk": 1, "model": "dark_lang.darklangconfig", "fields": {"change_date": "2015-06-17T19:56:25Z", "changed_by": null, "enabled": true, "released_languages": ""}}, {"pk": 1, "model": "mobile_api.mobileapiconfig", "fields": {"change_date": "2015-06-17T19:56:28Z", "video_profiles": "mobile_low,mobile_high,youtube", "changed_by": null, "enabled": false}}]
\ No newline at end of file
diff --git a/common/test/db_cache/bok_choy_schema.sql b/common/test/db_cache/bok_choy_schema.sql
deleted file mode 100644
index bbba6a4aed94..000000000000
--- a/common/test/db_cache/bok_choy_schema.sql
+++ /dev/null
@@ -1,3433 +0,0 @@
-
-/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-/*!40101 SET NAMES utf8 */;
-/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
-/*!40103 SET TIME_ZONE='+00:00' */;
-/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
-/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
-/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
-/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
-DROP TABLE IF EXISTS `assessment_aiclassifier`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `assessment_aiclassifier` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `classifier_set_id` int(11) NOT NULL,
- `criterion_id` int(11) NOT NULL,
- `classifier_data` varchar(100) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `assessment_aiclassifier_714175dc` (`classifier_set_id`),
- KEY `assessment_aiclassifier_a36470e4` (`criterion_id`),
- CONSTRAINT `classifier_set_id_refs_id_f80cbf6` FOREIGN KEY (`classifier_set_id`) REFERENCES `assessment_aiclassifierset` (`id`),
- CONSTRAINT `criterion_id_refs_id_e6ab97f2` FOREIGN KEY (`criterion_id`) REFERENCES `assessment_criterion` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `assessment_aiclassifierset`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `assessment_aiclassifierset` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `rubric_id` int(11) NOT NULL,
- `created_at` datetime NOT NULL,
- `algorithm_id` varchar(128) NOT NULL,
- `course_id` varchar(40) NOT NULL,
- `item_id` varchar(128) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `assessment_aiclassifierset_27cb9807` (`rubric_id`),
- KEY `assessment_aiclassifierset_3b1c9c31` (`created_at`),
- KEY `assessment_aiclassifierset_53012c1e` (`algorithm_id`),
- KEY `assessment_aiclassifierset_ff48d8e5` (`course_id`),
- KEY `assessment_aiclassifierset_67b70d25` (`item_id`),
- CONSTRAINT `rubric_id_refs_id_c037b8e4` FOREIGN KEY (`rubric_id`) REFERENCES `assessment_rubric` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `assessment_aigradingworkflow`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `assessment_aigradingworkflow` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `uuid` varchar(36) NOT NULL,
- `scheduled_at` datetime NOT NULL,
- `completed_at` datetime DEFAULT NULL,
- `submission_uuid` varchar(128) NOT NULL,
- `classifier_set_id` int(11) DEFAULT NULL,
- `algorithm_id` varchar(128) NOT NULL,
- `rubric_id` int(11) NOT NULL,
- `assessment_id` int(11) DEFAULT NULL,
- `student_id` varchar(40) NOT NULL,
- `item_id` varchar(128) NOT NULL,
- `course_id` varchar(40) NOT NULL,
- `essay_text` longtext NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `assessment_aigradingworkflow_uuid_492e936265ecbfd2_uniq` (`uuid`),
- KEY `assessment_aigradingworkflow_2bbc74ae` (`uuid`),
- KEY `assessment_aigradingworkflow_4bacaa90` (`scheduled_at`),
- KEY `assessment_aigradingworkflow_a2fd3af6` (`completed_at`),
- KEY `assessment_aigradingworkflow_39d020e6` (`submission_uuid`),
- KEY `assessment_aigradingworkflow_714175dc` (`classifier_set_id`),
- KEY `assessment_aigradingworkflow_53012c1e` (`algorithm_id`),
- KEY `assessment_aigradingworkflow_27cb9807` (`rubric_id`),
- KEY `assessment_aigradingworkflow_c168f2dc` (`assessment_id`),
- KEY `assessment_aigradingworkflow_42ff452e` (`student_id`),
- KEY `assessment_aigradingworkflow_67b70d25` (`item_id`),
- KEY `assessment_aigradingworkflow_ff48d8e5` (`course_id`),
- CONSTRAINT `assessment_id_refs_id_1d8478e7` FOREIGN KEY (`assessment_id`) REFERENCES `assessment_assessment` (`id`),
- CONSTRAINT `classifier_set_id_refs_id_1e9046d1` FOREIGN KEY (`classifier_set_id`) REFERENCES `assessment_aiclassifierset` (`id`),
- CONSTRAINT `rubric_id_refs_id_dc2a0464` FOREIGN KEY (`rubric_id`) REFERENCES `assessment_rubric` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `assessment_aitrainingworkflow`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `assessment_aitrainingworkflow` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `uuid` varchar(36) NOT NULL,
- `algorithm_id` varchar(128) NOT NULL,
- `classifier_set_id` int(11) DEFAULT NULL,
- `scheduled_at` datetime NOT NULL,
- `completed_at` datetime DEFAULT NULL,
- `item_id` varchar(128) NOT NULL,
- `course_id` varchar(40) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `assessment_aitrainingworkflow_uuid_284fdaa93019f8ef_uniq` (`uuid`),
- KEY `assessment_aitrainingworkflow_2bbc74ae` (`uuid`),
- KEY `assessment_aitrainingworkflow_53012c1e` (`algorithm_id`),
- KEY `assessment_aitrainingworkflow_714175dc` (`classifier_set_id`),
- KEY `assessment_aitrainingworkflow_4bacaa90` (`scheduled_at`),
- KEY `assessment_aitrainingworkflow_a2fd3af6` (`completed_at`),
- KEY `assessment_aitrainingworkflow_67b70d25` (`item_id`),
- KEY `assessment_aitrainingworkflow_ff48d8e5` (`course_id`),
- CONSTRAINT `classifier_set_id_refs_id_dcc7412` FOREIGN KEY (`classifier_set_id`) REFERENCES `assessment_aiclassifierset` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `assessment_aitrainingworkflow_training_examples`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `assessment_aitrainingworkflow_training_examples` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `aitrainingworkflow_id` int(11) NOT NULL,
- `trainingexample_id` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `assessment_aitraini_aitrainingworkflow_id_4b50cfbece05470a_uniq` (`aitrainingworkflow_id`,`trainingexample_id`),
- KEY `assessment_aitrainingworkflow_training_examples_a57f9195` (`aitrainingworkflow_id`),
- KEY `assessment_aitrainingworkflow_training_examples_ea4da31f` (`trainingexample_id`),
- CONSTRAINT `aitrainingworkflow_id_refs_id_45c30582` FOREIGN KEY (`aitrainingworkflow_id`) REFERENCES `assessment_aitrainingworkflow` (`id`),
- CONSTRAINT `trainingexample_id_refs_id_bf13a24` FOREIGN KEY (`trainingexample_id`) REFERENCES `assessment_trainingexample` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `assessment_assessment`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `assessment_assessment` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `submission_uuid` varchar(128) NOT NULL,
- `rubric_id` int(11) NOT NULL,
- `scored_at` datetime NOT NULL,
- `scorer_id` varchar(40) NOT NULL,
- `score_type` varchar(2) NOT NULL,
- `feedback` longtext NOT NULL,
- PRIMARY KEY (`id`),
- KEY `assessment_assessment_39d020e6` (`submission_uuid`),
- KEY `assessment_assessment_27cb9807` (`rubric_id`),
- KEY `assessment_assessment_3227200` (`scored_at`),
- KEY `assessment_assessment_9f54855a` (`scorer_id`),
- CONSTRAINT `rubric_id_refs_id_1ab6dbc4` FOREIGN KEY (`rubric_id`) REFERENCES `assessment_rubric` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `assessment_assessmentfeedback`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `assessment_assessmentfeedback` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `submission_uuid` varchar(128) NOT NULL,
- `feedback_text` longtext NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `submission_uuid` (`submission_uuid`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `assessment_assessmentfeedback_assessments`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `assessment_assessmentfeedback_assessments` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `assessmentfeedback_id` int(11) NOT NULL,
- `assessment_id` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `assessment_assessmen_assessmentfeedback_id_36925aaa1a839ac_uniq` (`assessmentfeedback_id`,`assessment_id`),
- KEY `assessment_assessmentfeedback_assessments_58f1f0d` (`assessmentfeedback_id`),
- KEY `assessment_assessmentfeedback_assessments_c168f2dc` (`assessment_id`),
- CONSTRAINT `assessment_id_refs_id_e7fd607e` FOREIGN KEY (`assessment_id`) REFERENCES `assessment_assessment` (`id`),
- CONSTRAINT `assessmentfeedback_id_refs_id_91bbd347` FOREIGN KEY (`assessmentfeedback_id`) REFERENCES `assessment_assessmentfeedback` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `assessment_assessmentfeedback_options`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `assessment_assessmentfeedback_options` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `assessmentfeedback_id` int(11) NOT NULL,
- `assessmentfeedbackoption_id` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `assessment_assessmen_assessmentfeedback_id_14efc9eea8f4c83_uniq` (`assessmentfeedback_id`,`assessmentfeedbackoption_id`),
- KEY `assessment_assessmentfeedback_options_58f1f0d` (`assessmentfeedback_id`),
- KEY `assessment_assessmentfeedback_options_4e523d64` (`assessmentfeedbackoption_id`),
- CONSTRAINT `assessmentfeedback_id_refs_id_5c27c412` FOREIGN KEY (`assessmentfeedback_id`) REFERENCES `assessment_assessmentfeedback` (`id`),
- CONSTRAINT `assessmentfeedbackoption_id_refs_id_cdf28acd` FOREIGN KEY (`assessmentfeedbackoption_id`) REFERENCES `assessment_assessmentfeedbackoption` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `assessment_assessmentfeedbackoption`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `assessment_assessmentfeedbackoption` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `text` varchar(255) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `text` (`text`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `assessment_assessmentpart`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `assessment_assessmentpart` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `assessment_id` int(11) NOT NULL,
- `option_id` int(11),
- `feedback` longtext NOT NULL,
- `criterion_id` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `assessment_assessmentpart_c168f2dc` (`assessment_id`),
- KEY `assessment_assessmentpart_2f3b0dc9` (`option_id`),
- KEY `assessment_assessmentpart_a36470e4` (`criterion_id`),
- CONSTRAINT `assessment_id_refs_id_bff26444` FOREIGN KEY (`assessment_id`) REFERENCES `assessment_assessment` (`id`),
- CONSTRAINT `criterion_id_refs_id_eeb3dc44` FOREIGN KEY (`criterion_id`) REFERENCES `assessment_criterion` (`id`),
- CONSTRAINT `option_id_refs_id_4439dd5` FOREIGN KEY (`option_id`) REFERENCES `assessment_criterionoption` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `assessment_criterion`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `assessment_criterion` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `rubric_id` int(11) NOT NULL,
- `name` varchar(100) NOT NULL,
- `order_num` int(10) unsigned NOT NULL,
- `prompt` longtext NOT NULL,
- `label` varchar(100) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `assessment_criterion_27cb9807` (`rubric_id`),
- CONSTRAINT `rubric_id_refs_id_f2f4f3c4` FOREIGN KEY (`rubric_id`) REFERENCES `assessment_rubric` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `assessment_criterionoption`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `assessment_criterionoption` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `criterion_id` int(11) NOT NULL,
- `order_num` int(10) unsigned NOT NULL,
- `points` int(10) unsigned NOT NULL,
- `name` varchar(100) NOT NULL,
- `explanation` longtext NOT NULL,
- `label` varchar(100) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `assessment_criterionoption_a36470e4` (`criterion_id`),
- CONSTRAINT `criterion_id_refs_id_d2645232` FOREIGN KEY (`criterion_id`) REFERENCES `assessment_criterion` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `assessment_peerworkflow`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `assessment_peerworkflow` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `student_id` varchar(40) NOT NULL,
- `item_id` varchar(128) NOT NULL,
- `course_id` varchar(40) NOT NULL,
- `submission_uuid` varchar(128) NOT NULL,
- `created_at` datetime NOT NULL,
- `completed_at` datetime DEFAULT NULL,
- `grading_completed_at` datetime,
- `cancelled_at` datetime,
- PRIMARY KEY (`id`),
- UNIQUE KEY `submission_uuid` (`submission_uuid`),
- KEY `assessment_peerworkflow_42ff452e` (`student_id`),
- KEY `assessment_peerworkflow_67b70d25` (`item_id`),
- KEY `assessment_peerworkflow_ff48d8e5` (`course_id`),
- KEY `assessment_peerworkflow_3b1c9c31` (`created_at`),
- KEY `assessment_peerworkflow_a2fd3af6` (`completed_at`),
- KEY `assessment_peerworkflow_course_id_5ca23fddca9b630d` (`course_id`,`item_id`,`student_id`),
- KEY `assessment_peerworkflow_dcd62131` (`grading_completed_at`),
- KEY `assessment_peerworkflow_853d09a8` (`cancelled_at`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `assessment_peerworkflowitem`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `assessment_peerworkflowitem` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `scorer_id` int(11) NOT NULL,
- `author_id` int(11) NOT NULL,
- `submission_uuid` varchar(128) NOT NULL,
- `started_at` datetime NOT NULL,
- `assessment_id` int(11) DEFAULT NULL,
- `scored` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `assessment_peerworkflowitem_9f54855a` (`scorer_id`),
- KEY `assessment_peerworkflowitem_cc846901` (`author_id`),
- KEY `assessment_peerworkflowitem_39d020e6` (`submission_uuid`),
- KEY `assessment_peerworkflowitem_d6e710e4` (`started_at`),
- KEY `assessment_peerworkflowitem_c168f2dc` (`assessment_id`),
- CONSTRAINT `assessment_id_refs_id_f69a86a1` FOREIGN KEY (`assessment_id`) REFERENCES `assessment_assessment` (`id`),
- CONSTRAINT `author_id_refs_id_59547df0` FOREIGN KEY (`author_id`) REFERENCES `assessment_peerworkflow` (`id`),
- CONSTRAINT `scorer_id_refs_id_59547df0` FOREIGN KEY (`scorer_id`) REFERENCES `assessment_peerworkflow` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `assessment_rubric`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `assessment_rubric` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `content_hash` varchar(40) NOT NULL,
- `structure_hash` varchar(40) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `content_hash` (`content_hash`),
- KEY `assessment_rubric_36e74b05` (`structure_hash`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `assessment_studenttrainingworkflow`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `assessment_studenttrainingworkflow` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `submission_uuid` varchar(128) NOT NULL,
- `student_id` varchar(40) NOT NULL,
- `item_id` varchar(128) NOT NULL,
- `course_id` varchar(40) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `assessment_studenttrainin_submission_uuid_6d32c6477719d68f_uniq` (`submission_uuid`),
- KEY `assessment_studenttrainingworkflow_39d020e6` (`submission_uuid`),
- KEY `assessment_studenttrainingworkflow_42ff452e` (`student_id`),
- KEY `assessment_studenttrainingworkflow_67b70d25` (`item_id`),
- KEY `assessment_studenttrainingworkflow_ff48d8e5` (`course_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `assessment_studenttrainingworkflowitem`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `assessment_studenttrainingworkflowitem` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `workflow_id` int(11) NOT NULL,
- `order_num` int(10) unsigned NOT NULL,
- `started_at` datetime NOT NULL,
- `completed_at` datetime DEFAULT NULL,
- `training_example_id` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `assessment_studenttrainingworkf_order_num_1391289faa95b87c_uniq` (`order_num`,`workflow_id`),
- KEY `assessment_studenttrainingworkflowitem_26cddbc7` (`workflow_id`),
- KEY `assessment_studenttrainingworkflowitem_541d6663` (`training_example_id`),
- CONSTRAINT `training_example_id_refs_id_7d3f36e4` FOREIGN KEY (`training_example_id`) REFERENCES `assessment_trainingexample` (`id`),
- CONSTRAINT `workflow_id_refs_id_ce50a30` FOREIGN KEY (`workflow_id`) REFERENCES `assessment_studenttrainingworkflow` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `assessment_trainingexample`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `assessment_trainingexample` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `raw_answer` longtext NOT NULL,
- `rubric_id` int(11) NOT NULL,
- `content_hash` varchar(40) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `content_hash` (`content_hash`),
- KEY `assessment_trainingexample_27cb9807` (`rubric_id`),
- CONSTRAINT `rubric_id_refs_id_7750db21` FOREIGN KEY (`rubric_id`) REFERENCES `assessment_rubric` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `assessment_trainingexample_options_selected`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `assessment_trainingexample_options_selected` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `trainingexample_id` int(11) NOT NULL,
- `criterionoption_id` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `assessment_trainingexa_trainingexample_id_60940991fb17d27d_uniq` (`trainingexample_id`,`criterionoption_id`),
- KEY `assessment_trainingexample_options_selected_ea4da31f` (`trainingexample_id`),
- KEY `assessment_trainingexample_options_selected_843fa247` (`criterionoption_id`),
- CONSTRAINT `criterionoption_id_refs_id_bed5a465` FOREIGN KEY (`criterionoption_id`) REFERENCES `assessment_criterionoption` (`id`),
- CONSTRAINT `trainingexample_id_refs_id_5f0faa8d` FOREIGN KEY (`trainingexample_id`) REFERENCES `assessment_trainingexample` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `auth_group`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `auth_group` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `name` varchar(80) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `name` (`name`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `auth_group_permissions`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `auth_group_permissions` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `group_id` int(11) NOT NULL,
- `permission_id` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `group_id` (`group_id`,`permission_id`),
- KEY `auth_group_permissions_bda51c3c` (`group_id`),
- KEY `auth_group_permissions_1e014c8f` (`permission_id`),
- CONSTRAINT `group_id_refs_id_3cea63fe` FOREIGN KEY (`group_id`) REFERENCES `auth_group` (`id`),
- CONSTRAINT `permission_id_refs_id_a7792de1` FOREIGN KEY (`permission_id`) REFERENCES `auth_permission` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `auth_permission`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `auth_permission` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `name` varchar(50) NOT NULL,
- `content_type_id` int(11) NOT NULL,
- `codename` varchar(100) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `content_type_id` (`content_type_id`,`codename`),
- KEY `auth_permission_e4470c6e` (`content_type_id`),
- CONSTRAINT `content_type_id_refs_id_728de91f` FOREIGN KEY (`content_type_id`) REFERENCES `django_content_type` (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=574 DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `auth_registration`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `auth_registration` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `activation_key` varchar(32) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `user_id` (`user_id`),
- UNIQUE KEY `activation_key` (`activation_key`),
- CONSTRAINT `user_id_refs_id_3e5b0b5` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `auth_user`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `auth_user` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `username` varchar(30) NOT NULL,
- `first_name` varchar(30) NOT NULL,
- `last_name` varchar(30) NOT NULL,
- `email` varchar(75) NOT NULL,
- `password` varchar(128) NOT NULL,
- `is_staff` tinyint(1) NOT NULL,
- `is_active` tinyint(1) NOT NULL,
- `is_superuser` tinyint(1) NOT NULL,
- `last_login` datetime NOT NULL,
- `date_joined` datetime NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `username` (`username`),
- UNIQUE KEY `email` (`email`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `auth_user_groups`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `auth_user_groups` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `group_id` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `user_id` (`user_id`,`group_id`),
- KEY `auth_user_groups_fbfc09f1` (`user_id`),
- KEY `auth_user_groups_bda51c3c` (`group_id`),
- CONSTRAINT `group_id_refs_id_f0ee9890` FOREIGN KEY (`group_id`) REFERENCES `auth_group` (`id`),
- CONSTRAINT `user_id_refs_id_831107f1` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `auth_user_user_permissions`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `auth_user_user_permissions` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `permission_id` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `user_id` (`user_id`,`permission_id`),
- KEY `auth_user_user_permissions_fbfc09f1` (`user_id`),
- KEY `auth_user_user_permissions_1e014c8f` (`permission_id`),
- CONSTRAINT `permission_id_refs_id_67e79cb` FOREIGN KEY (`permission_id`) REFERENCES `auth_permission` (`id`),
- CONSTRAINT `user_id_refs_id_f2045483` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `auth_userprofile`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `auth_userprofile` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `name` varchar(255) NOT NULL,
- `language` varchar(255) NOT NULL,
- `location` varchar(255) NOT NULL,
- `meta` longtext NOT NULL,
- `courseware` varchar(255) NOT NULL,
- `gender` varchar(6),
- `mailing_address` longtext,
- `year_of_birth` int(11),
- `level_of_education` varchar(6),
- `goals` longtext,
- `allow_certificate` tinyint(1) NOT NULL,
- `country` varchar(2),
- `city` longtext,
- `bio` varchar(3000),
- `profile_image_uploaded_at` datetime,
- PRIMARY KEY (`id`),
- UNIQUE KEY `user_id` (`user_id`),
- KEY `auth_userprofile_52094d6e` (`name`),
- KEY `auth_userprofile_8a7ac9ab` (`language`),
- KEY `auth_userprofile_b54954de` (`location`),
- KEY `auth_userprofile_fca3d292` (`gender`),
- KEY `auth_userprofile_d85587` (`year_of_birth`),
- KEY `auth_userprofile_551e365c` (`level_of_education`),
- CONSTRAINT `user_id_refs_id_628b4c11` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `branding_brandingapiconfig`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `branding_brandingapiconfig` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `change_date` datetime NOT NULL,
- `changed_by_id` int(11) DEFAULT NULL,
- `enabled` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `branding_brandingapiconfig_16905482` (`changed_by_id`),
- CONSTRAINT `changed_by_id_refs_id_9f2ff49` FOREIGN KEY (`changed_by_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `branding_brandinginfoconfig`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `branding_brandinginfoconfig` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `change_date` datetime NOT NULL,
- `changed_by_id` int(11) DEFAULT NULL,
- `enabled` tinyint(1) NOT NULL,
- `configuration` longtext NOT NULL,
- PRIMARY KEY (`id`),
- KEY `branding_brandinginfoconfig_16905482` (`changed_by_id`),
- CONSTRAINT `changed_by_id_refs_id_d2757db8` FOREIGN KEY (`changed_by_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `bulk_email_courseauthorization`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `bulk_email_courseauthorization` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `course_id` varchar(255) NOT NULL,
- `email_enabled` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `bulk_email_courseauthorization_course_id_4f6cee675bf93275_uniq` (`course_id`),
- KEY `bulk_email_courseauthorization_ff48d8e5` (`course_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `bulk_email_courseemail`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `bulk_email_courseemail` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `sender_id` int(11) DEFAULT NULL,
- `slug` varchar(128) NOT NULL,
- `subject` varchar(128) NOT NULL,
- `html_message` longtext,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- `course_id` varchar(255) NOT NULL,
- `to_option` varchar(64) NOT NULL,
- `text_message` longtext,
- `template_name` varchar(255),
- `from_addr` varchar(255),
- PRIMARY KEY (`id`),
- KEY `bulk_email_courseemail_901f59e9` (`sender_id`),
- KEY `bulk_email_courseemail_36af87d1` (`slug`),
- KEY `bulk_email_courseemail_ff48d8e5` (`course_id`),
- CONSTRAINT `sender_id_refs_id_70ed6279` FOREIGN KEY (`sender_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `bulk_email_courseemailtemplate`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `bulk_email_courseemailtemplate` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `html_template` longtext,
- `plain_template` longtext,
- `name` varchar(255),
- PRIMARY KEY (`id`),
- UNIQUE KEY `name` (`name`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `bulk_email_optout`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `bulk_email_optout` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `course_id` varchar(255) NOT NULL,
- `user_id` int(11),
- PRIMARY KEY (`id`),
- UNIQUE KEY `bulk_email_optout_course_id_368f7519b2997e1a_uniq` (`course_id`,`user_id`),
- KEY `bulk_email_optout_ff48d8e5` (`course_id`),
- KEY `bulk_email_optout_fbfc09f1` (`user_id`),
- CONSTRAINT `user_id_refs_id_9e68e67c` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `celery_taskmeta`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `celery_taskmeta` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `task_id` varchar(255) NOT NULL,
- `status` varchar(50) NOT NULL,
- `result` longtext,
- `date_done` datetime NOT NULL,
- `traceback` longtext,
- `hidden` tinyint(1) NOT NULL,
- `meta` longtext,
- PRIMARY KEY (`id`),
- UNIQUE KEY `task_id` (`task_id`),
- KEY `celery_taskmeta_c91f1bf` (`hidden`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `celery_tasksetmeta`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `celery_tasksetmeta` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `taskset_id` varchar(255) NOT NULL,
- `result` longtext NOT NULL,
- `date_done` datetime NOT NULL,
- `hidden` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `taskset_id` (`taskset_id`),
- KEY `celery_tasksetmeta_c91f1bf` (`hidden`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `certificates_badgeassertion`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `certificates_badgeassertion` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `course_id` varchar(255) NOT NULL,
- `mode` varchar(100) NOT NULL,
- `data` longtext NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `certificates_badgeassertion_course_id_f465e63872f731f_uniq` (`course_id`,`user_id`),
- KEY `certificates_badgeassertion_fbfc09f1` (`user_id`),
- CONSTRAINT `user_id_refs_id_30664b3b` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `certificates_badgeimageconfiguration`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `certificates_badgeimageconfiguration` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `mode` varchar(125) NOT NULL,
- `icon` varchar(100) NOT NULL,
- `default` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `mode` (`mode`)
-) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `certificates_certificategenerationconfiguration`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `certificates_certificategenerationconfiguration` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `change_date` datetime NOT NULL,
- `changed_by_id` int(11) DEFAULT NULL,
- `enabled` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `certificates_certificategenerationconfiguration_16905482` (`changed_by_id`),
- CONSTRAINT `changed_by_id_refs_id_abb3a677` FOREIGN KEY (`changed_by_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `certificates_certificategenerationcoursesetting`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `certificates_certificategenerationcoursesetting` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- `course_key` varchar(255) NOT NULL,
- `enabled` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `certificates_certificategenerationcoursesetting_b4b47e7a` (`course_key`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `certificates_certificatehtmlviewconfiguration`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `certificates_certificatehtmlviewconfiguration` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `change_date` datetime NOT NULL,
- `changed_by_id` int(11) DEFAULT NULL,
- `enabled` tinyint(1) NOT NULL,
- `configuration` longtext NOT NULL,
- PRIMARY KEY (`id`),
- KEY `certificates_certificatehtmlviewconfiguration_16905482` (`changed_by_id`),
- CONSTRAINT `changed_by_id_refs_id_8584db17` FOREIGN KEY (`changed_by_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `certificates_certificatewhitelist`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `certificates_certificatewhitelist` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `course_id` varchar(255) NOT NULL,
- `whitelist` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `certificates_certificatewhitelist_fbfc09f1` (`user_id`),
- CONSTRAINT `user_id_refs_id_a7ba9306` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `certificates_examplecertificate`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `certificates_examplecertificate` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- `example_cert_set_id` int(11) NOT NULL,
- `description` varchar(255) NOT NULL,
- `uuid` varchar(255) NOT NULL,
- `access_key` varchar(255) NOT NULL,
- `full_name` varchar(255) NOT NULL,
- `template` varchar(255) NOT NULL,
- `status` varchar(255) NOT NULL,
- `error_reason` longtext,
- `download_url` varchar(255) DEFAULT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `uuid` (`uuid`),
- KEY `certificates_examplecertificate_uuid_183b9188451b331e` (`uuid`,`access_key`),
- KEY `certificates_examplecertificate_3b9264a` (`example_cert_set_id`),
- KEY `certificates_examplecertificate_752852c3` (`access_key`),
- CONSTRAINT `example_cert_set_id_refs_id_bdd9e28a` FOREIGN KEY (`example_cert_set_id`) REFERENCES `certificates_examplecertificateset` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `certificates_examplecertificateset`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `certificates_examplecertificateset` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- `course_key` varchar(255) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `certificates_examplecertificateset_b4b47e7a` (`course_key`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `certificates_generatedcertificate`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `certificates_generatedcertificate` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `download_url` varchar(128) NOT NULL,
- `grade` varchar(5) NOT NULL,
- `course_id` varchar(255) NOT NULL,
- `key` varchar(32) NOT NULL,
- `distinction` tinyint(1) NOT NULL,
- `status` varchar(32) NOT NULL,
- `verify_uuid` varchar(32) NOT NULL,
- `download_uuid` varchar(32) NOT NULL,
- `name` varchar(255) NOT NULL,
- `created_date` datetime NOT NULL,
- `modified_date` datetime NOT NULL,
- `error_reason` varchar(512) NOT NULL,
- `mode` varchar(32) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `certificates_generatedcertifica_course_id_1389f6b2d72f5e78_uniq` (`course_id`,`user_id`),
- KEY `certificates_generatedcertificate_fbfc09f1` (`user_id`),
- CONSTRAINT `user_id_refs_id_8e23bfe2` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `circuit_servercircuit`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `circuit_servercircuit` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `name` varchar(32) NOT NULL,
- `schematic` longtext NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `name` (`name`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `contentstore_pushnotificationconfig`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `contentstore_pushnotificationconfig` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `change_date` datetime NOT NULL,
- `changed_by_id` int(11) DEFAULT NULL,
- `enabled` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `contentstore_pushnotificationconfig_16905482` (`changed_by_id`),
- CONSTRAINT `changed_by_id_refs_id_e431b975` FOREIGN KEY (`changed_by_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `contentstore_videouploadconfig`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `contentstore_videouploadconfig` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `change_date` datetime NOT NULL,
- `changed_by_id` int(11) DEFAULT NULL,
- `enabled` tinyint(1) NOT NULL,
- `profile_whitelist` longtext NOT NULL,
- PRIMARY KEY (`id`),
- KEY `contentstore_videouploadconfig_16905482` (`changed_by_id`),
- CONSTRAINT `changed_by_id_refs_id_209c438f` FOREIGN KEY (`changed_by_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `cors_csrf_xdomainproxyconfiguration`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `cors_csrf_xdomainproxyconfiguration` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `change_date` datetime NOT NULL,
- `changed_by_id` int(11) DEFAULT NULL,
- `enabled` tinyint(1) NOT NULL,
- `whitelist` longtext NOT NULL,
- PRIMARY KEY (`id`),
- KEY `cors_csrf_xdomainproxyconfiguration_16905482` (`changed_by_id`),
- CONSTRAINT `changed_by_id_refs_id_3dfcfcb0` FOREIGN KEY (`changed_by_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `corsheaders_corsmodel`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `corsheaders_corsmodel` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `cors` varchar(255) NOT NULL,
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `course_action_state_coursererunstate`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `course_action_state_coursererunstate` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `created_time` datetime NOT NULL,
- `updated_time` datetime NOT NULL,
- `created_user_id` int(11) DEFAULT NULL,
- `updated_user_id` int(11) DEFAULT NULL,
- `course_key` varchar(255) NOT NULL,
- `action` varchar(100) NOT NULL,
- `state` varchar(50) NOT NULL,
- `should_display` tinyint(1) NOT NULL,
- `message` varchar(1000) NOT NULL,
- `source_course_key` varchar(255) NOT NULL,
- `display_name` varchar(255) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `course_action_state_coursererun_course_key_cf5da77ed3032d6_uniq` (`course_key`,`action`),
- KEY `course_action_state_coursererunstate_5b876fa2` (`created_user_id`),
- KEY `course_action_state_coursererunstate_ceb2e2e7` (`updated_user_id`),
- KEY `course_action_state_coursererunstate_b4b47e7a` (`course_key`),
- KEY `course_action_state_coursererunstate_1bd4707b` (`action`),
- KEY `course_action_state_coursererunstate_ebfe36dd` (`source_course_key`),
- CONSTRAINT `created_user_id_refs_id_1744bdeb` FOREIGN KEY (`created_user_id`) REFERENCES `auth_user` (`id`),
- CONSTRAINT `updated_user_id_refs_id_1744bdeb` FOREIGN KEY (`updated_user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `course_creators_coursecreator`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `course_creators_coursecreator` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `state_changed` datetime NOT NULL,
- `state` varchar(24) NOT NULL,
- `note` varchar(512) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `user_id` (`user_id`),
- CONSTRAINT `user_id_refs_id_6a0e6044` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `course_groups_coursecohort`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `course_groups_coursecohort` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `course_user_group_id` int(11) NOT NULL,
- `assignment_type` varchar(20) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `course_user_group_id` (`course_user_group_id`),
- CONSTRAINT `course_user_group_id_refs_id_8febc00f` FOREIGN KEY (`course_user_group_id`) REFERENCES `course_groups_courseusergroup` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `course_groups_coursecohortssettings`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `course_groups_coursecohortssettings` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `is_cohorted` tinyint(1) NOT NULL,
- `course_id` varchar(255) NOT NULL,
- `cohorted_discussions` longtext,
- `always_cohort_inline_discussions` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `course_id` (`course_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `course_groups_courseusergroup`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `course_groups_courseusergroup` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `name` varchar(255) NOT NULL,
- `course_id` varchar(255) NOT NULL,
- `group_type` varchar(20) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `course_groups_courseusergroup_name_63f7511804c52f38_uniq` (`name`,`course_id`),
- KEY `course_groups_courseusergroup_ff48d8e5` (`course_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `course_groups_courseusergroup_users`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `course_groups_courseusergroup_users` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `courseusergroup_id` int(11) NOT NULL,
- `user_id` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `course_groups_courseus_courseusergroup_id_46691806058983eb_uniq` (`courseusergroup_id`,`user_id`),
- KEY `course_groups_courseusergroup_users_caee1c64` (`courseusergroup_id`),
- KEY `course_groups_courseusergroup_users_fbfc09f1` (`user_id`),
- CONSTRAINT `courseusergroup_id_refs_id_d26180aa` FOREIGN KEY (`courseusergroup_id`) REFERENCES `course_groups_courseusergroup` (`id`),
- CONSTRAINT `user_id_refs_id_bf33b47a` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `course_groups_courseusergrouppartitiongroup`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `course_groups_courseusergrouppartitiongroup` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `course_user_group_id` int(11) NOT NULL,
- `partition_id` int(11) NOT NULL,
- `group_id` int(11) NOT NULL,
- `created_at` datetime NOT NULL,
- `updated_at` datetime NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `course_user_group_id` (`course_user_group_id`),
- CONSTRAINT `course_user_group_id_refs_id_145383c4` FOREIGN KEY (`course_user_group_id`) REFERENCES `course_groups_courseusergroup` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `course_modes_coursemode`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `course_modes_coursemode` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `course_id` varchar(255) NOT NULL,
- `mode_slug` varchar(100) NOT NULL,
- `mode_display_name` varchar(255) NOT NULL,
- `min_price` int(11) NOT NULL,
- `suggested_prices` varchar(255) NOT NULL,
- `currency` varchar(8) NOT NULL,
- `expiration_date` date DEFAULT NULL,
- `expiration_datetime` datetime DEFAULT NULL,
- `description` longtext,
- `sku` varchar(255),
- PRIMARY KEY (`id`),
- UNIQUE KEY `course_modes_coursemode_course_id_69505c92fc09856_uniq` (`course_id`,`currency`,`mode_slug`),
- KEY `course_modes_coursemode_ff48d8e5` (`course_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `course_modes_coursemodesarchive`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `course_modes_coursemodesarchive` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `course_id` varchar(255) NOT NULL,
- `mode_slug` varchar(100) NOT NULL,
- `mode_display_name` varchar(255) NOT NULL,
- `min_price` int(11) NOT NULL,
- `suggested_prices` varchar(255) NOT NULL,
- `currency` varchar(8) NOT NULL,
- `expiration_date` date DEFAULT NULL,
- `expiration_datetime` datetime DEFAULT NULL,
- PRIMARY KEY (`id`),
- KEY `course_modes_coursemodesarchive_ff48d8e5` (`course_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `course_structures_coursestructure`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `course_structures_coursestructure` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- `course_id` varchar(255) NOT NULL,
- `structure_json` longtext,
- PRIMARY KEY (`id`),
- UNIQUE KEY `course_id` (`course_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `courseware_offlinecomputedgrade`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `courseware_offlinecomputedgrade` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `course_id` varchar(255) NOT NULL,
- `created` datetime DEFAULT NULL,
- `updated` datetime NOT NULL,
- `gradeset` longtext,
- PRIMARY KEY (`id`),
- UNIQUE KEY `courseware_offlinecomputedgrade_user_id_46133bbd0926078f_uniq` (`user_id`,`course_id`),
- KEY `courseware_offlinecomputedgrade_fbfc09f1` (`user_id`),
- KEY `courseware_offlinecomputedgrade_ff48d8e5` (`course_id`),
- KEY `courseware_offlinecomputedgrade_3216ff68` (`created`),
- KEY `courseware_offlinecomputedgrade_8aac229` (`updated`),
- CONSTRAINT `user_id_refs_id_38cf339d` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `courseware_offlinecomputedgradelog`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `courseware_offlinecomputedgradelog` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `course_id` varchar(255) NOT NULL,
- `created` datetime DEFAULT NULL,
- `seconds` int(11) NOT NULL,
- `nstudents` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `courseware_offlinecomputedgradelog_ff48d8e5` (`course_id`),
- KEY `courseware_offlinecomputedgradelog_3216ff68` (`created`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `courseware_studentfieldoverride`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `courseware_studentfieldoverride` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `course_id` varchar(255) NOT NULL,
- `location` varchar(255) NOT NULL,
- `student_id` int(11) NOT NULL,
- `field` varchar(255) NOT NULL,
- `value` longtext NOT NULL,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `courseware_studentfieldoverride_course_id_39dd7eaeac5623d2_uniq` (`course_id`,`field`,`location`,`student_id`),
- KEY `courseware_studentfieldoverride_ff48d8e5` (`course_id`),
- KEY `courseware_studentfieldoverride_b54954de` (`location`),
- KEY `courseware_studentfieldoverride_42ff452e` (`student_id`),
- KEY `courseware_studentfieldoverride_course_id_344e77afe4983e04` (`course_id`,`location`,`student_id`),
- CONSTRAINT `student_id_refs_id_7b49c12b` FOREIGN KEY (`student_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `courseware_studentmodule`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `courseware_studentmodule` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `module_type` varchar(32) NOT NULL,
- `module_id` varchar(255) NOT NULL,
- `student_id` int(11) NOT NULL,
- `state` longtext,
- `grade` double DEFAULT NULL,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- `max_grade` double,
- `done` varchar(8) NOT NULL,
- `course_id` varchar(255) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `courseware_studentmodule_student_id_635d77aea1256de5_uniq` (`student_id`,`module_id`,`course_id`),
- KEY `courseware_studentmodule_42ff452e` (`student_id`),
- KEY `courseware_studentmodule_3216ff68` (`created`),
- KEY `courseware_studentmodule_6dff86b5` (`grade`),
- KEY `courseware_studentmodule_5436e97a` (`modified`),
- KEY `courseware_studentmodule_2d8768ff` (`module_type`),
- KEY `courseware_studentmodule_f53ed95e` (`module_id`),
- KEY `courseware_studentmodule_1923c03f` (`done`),
- KEY `courseware_studentmodule_ff48d8e5` (`course_id`),
- CONSTRAINT `student_id_refs_id_79ba2570` FOREIGN KEY (`student_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `courseware_studentmodulehistory`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `courseware_studentmodulehistory` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `student_module_id` int(11) NOT NULL,
- `version` varchar(255),
- `created` datetime NOT NULL,
- `state` longtext,
- `grade` double DEFAULT NULL,
- `max_grade` double DEFAULT NULL,
- PRIMARY KEY (`id`),
- KEY `courseware_studentmodulehistory_5656f5fe` (`student_module_id`),
- KEY `courseware_studentmodulehistory_659105e4` (`version`),
- KEY `courseware_studentmodulehistory_3216ff68` (`created`),
- CONSTRAINT `student_module_id_refs_id_e48636f4` FOREIGN KEY (`student_module_id`) REFERENCES `courseware_studentmodule` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `courseware_xmodulestudentinfofield`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `courseware_xmodulestudentinfofield` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `field_name` varchar(64) NOT NULL,
- `value` longtext NOT NULL,
- `student_id` int(11) NOT NULL,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `courseware_xmodulestudentinfof_student_id_33f2f772c49db067_uniq` (`student_id`,`field_name`),
- KEY `courseware_xmodulestudentinfofield_7e1499` (`field_name`),
- KEY `courseware_xmodulestudentinfofield_42ff452e` (`student_id`),
- KEY `courseware_xmodulestudentinfofield_3216ff68` (`created`),
- KEY `courseware_xmodulestudentinfofield_5436e97a` (`modified`),
- CONSTRAINT `student_id_refs_id_bfcfbe68` FOREIGN KEY (`student_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `courseware_xmodulestudentprefsfield`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `courseware_xmodulestudentprefsfield` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `field_name` varchar(64) NOT NULL,
- `module_type` varchar(64) NOT NULL,
- `value` longtext NOT NULL,
- `student_id` int(11) NOT NULL,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `courseware_xmodulestudentprefs_student_id_2a5d275498b7a407_uniq` (`student_id`,`module_type`,`field_name`),
- KEY `courseware_xmodulestudentprefsfield_7e1499` (`field_name`),
- KEY `courseware_xmodulestudentprefsfield_2d8768ff` (`module_type`),
- KEY `courseware_xmodulestudentprefsfield_42ff452e` (`student_id`),
- KEY `courseware_xmodulestudentprefsfield_3216ff68` (`created`),
- KEY `courseware_xmodulestudentprefsfield_5436e97a` (`modified`),
- CONSTRAINT `student_id_refs_id_d7b9940b` FOREIGN KEY (`student_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `courseware_xmoduleuserstatesummaryfield`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `courseware_xmoduleuserstatesummaryfield` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `field_name` varchar(64) NOT NULL,
- `usage_id` varchar(255) NOT NULL,
- `value` longtext NOT NULL,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `courseware_xmodulecontentfi_definition_id_50fa4fd570cf2f4a_uniq` (`usage_id`,`field_name`),
- KEY `courseware_xmodulecontentfield_7e1499` (`field_name`),
- KEY `courseware_xmodulecontentfield_1d304ded` (`usage_id`),
- KEY `courseware_xmodulecontentfield_3216ff68` (`created`),
- KEY `courseware_xmodulecontentfield_5436e97a` (`modified`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `credit_creditcourse`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `credit_creditcourse` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `course_key` varchar(255) NOT NULL,
- `enabled` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `course_key` (`course_key`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `credit_creditcourse_providers`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `credit_creditcourse_providers` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `creditcourse_id` int(11) NOT NULL,
- `creditprovider_id` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `credit_creditcourse_provid_creditcourse_id_d626a766090895c_uniq` (`creditcourse_id`,`creditprovider_id`),
- KEY `credit_creditcourse_providers_872fcb0` (`creditcourse_id`),
- KEY `credit_creditcourse_providers_56a10efe` (`creditprovider_id`),
- CONSTRAINT `creditcourse_id_refs_id_ada165e4` FOREIGN KEY (`creditcourse_id`) REFERENCES `credit_creditcourse` (`id`),
- CONSTRAINT `creditprovider_id_refs_id_52467f1a` FOREIGN KEY (`creditprovider_id`) REFERENCES `credit_creditprovider` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `credit_crediteligibility`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `credit_crediteligibility` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- `username` varchar(255) NOT NULL,
- `course_id` int(11) NOT NULL,
- `provider_id` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `credit_crediteligibility_username_936cb16677e83e_uniq` (`username`,`course_id`),
- KEY `credit_crediteligibility_f774835d` (`username`),
- KEY `credit_crediteligibility_ff48d8e5` (`course_id`),
- KEY `credit_crediteligibility_d9e5df97` (`provider_id`),
- CONSTRAINT `course_id_refs_id_eede15d0` FOREIGN KEY (`course_id`) REFERENCES `credit_creditcourse` (`id`),
- CONSTRAINT `provider_id_refs_id_561c64e6` FOREIGN KEY (`provider_id`) REFERENCES `credit_creditprovider` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `credit_creditprovider`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `credit_creditprovider` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- `provider_id` varchar(255) NOT NULL,
- `display_name` varchar(255) NOT NULL,
- `provider_url` varchar(200) NOT NULL,
- `eligibility_duration` int(10) unsigned NOT NULL,
- `active` tinyint(1) NOT NULL,
- `enable_integration` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `provider_id` (`provider_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `credit_creditrequest`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `credit_creditrequest` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- `uuid` varchar(32) NOT NULL,
- `username` varchar(255) NOT NULL,
- `course_id` int(11) NOT NULL,
- `provider_id` int(11) NOT NULL,
- `timestamp` datetime NOT NULL,
- `parameters` longtext NOT NULL,
- `status` varchar(255) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `uuid` (`uuid`),
- UNIQUE KEY `credit_creditrequest_username_4f61c10bb0d67c01_uniq` (`username`,`course_id`,`provider_id`),
- KEY `credit_creditrequest_f774835d` (`username`),
- KEY `credit_creditrequest_ff48d8e5` (`course_id`),
- KEY `credit_creditrequest_d9e5df97` (`provider_id`),
- CONSTRAINT `course_id_refs_id_96abc610` FOREIGN KEY (`course_id`) REFERENCES `credit_creditcourse` (`id`),
- CONSTRAINT `provider_id_refs_id_df6afe06` FOREIGN KEY (`provider_id`) REFERENCES `credit_creditprovider` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `credit_creditrequirement`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `credit_creditrequirement` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- `course_id` int(11) NOT NULL,
- `namespace` varchar(255) NOT NULL,
- `name` varchar(255) NOT NULL,
- `active` tinyint(1) NOT NULL,
- `criteria` longtext NOT NULL,
- `display_name` varchar(255) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `credit_creditrequirement_namespace_33039c83b3e69b8_uniq` (`namespace`,`name`,`course_id`),
- KEY `credit_creditrequirement_ff48d8e5` (`course_id`),
- CONSTRAINT `course_id_refs_id_a417c522` FOREIGN KEY (`course_id`) REFERENCES `credit_creditcourse` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `credit_creditrequirementstatus`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `credit_creditrequirementstatus` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- `username` varchar(255) NOT NULL,
- `requirement_id` int(11) NOT NULL,
- `status` varchar(32) NOT NULL,
- `reason` longtext NOT NULL,
- PRIMARY KEY (`id`),
- KEY `credit_creditrequirementstatus_f774835d` (`username`),
- KEY `credit_creditrequirementstatus_99a85f32` (`requirement_id`),
- CONSTRAINT `requirement_id_refs_id_1f08312b` FOREIGN KEY (`requirement_id`) REFERENCES `credit_creditrequirement` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `credit_historicalcreditrequest`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `credit_historicalcreditrequest` (
- `id` int(11) NOT NULL,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- `uuid` varchar(32) NOT NULL,
- `username` varchar(255) NOT NULL,
- `timestamp` datetime NOT NULL,
- `parameters` longtext NOT NULL,
- `status` varchar(255) NOT NULL,
- `course_id` int(11) DEFAULT NULL,
- `provider_id` int(11) DEFAULT NULL,
- `history_id` int(11) NOT NULL AUTO_INCREMENT,
- `history_date` datetime NOT NULL,
- `history_user_id` int(11) DEFAULT NULL,
- `history_type` varchar(1) NOT NULL,
- PRIMARY KEY (`history_id`),
- KEY `credit_historicalcreditrequest_4a5fc416` (`id`),
- KEY `credit_historicalcreditrequest_2bbc74ae` (`uuid`),
- KEY `credit_historicalcreditrequest_f774835d` (`username`),
- KEY `credit_historicalcreditrequest_ff48d8e5` (`course_id`),
- KEY `credit_historicalcreditrequest_d9e5df97` (`provider_id`),
- KEY `credit_historicalcreditrequest_e1a0ea2a` (`history_user_id`),
- CONSTRAINT `course_id_refs_id_b034099e` FOREIGN KEY (`course_id`) REFERENCES `credit_creditcourse` (`id`),
- CONSTRAINT `history_user_id_refs_id_3ef1516a` FOREIGN KEY (`history_user_id`) REFERENCES `auth_user` (`id`),
- CONSTRAINT `provider_id_refs_id_72d984b8` FOREIGN KEY (`provider_id`) REFERENCES `credit_creditprovider` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `dark_lang_darklangconfig`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `dark_lang_darklangconfig` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `change_date` datetime NOT NULL,
- `changed_by_id` int(11) DEFAULT NULL,
- `enabled` tinyint(1) NOT NULL,
- `released_languages` longtext NOT NULL,
- PRIMARY KEY (`id`),
- KEY `dark_lang_darklangconfig_16905482` (`changed_by_id`),
- CONSTRAINT `changed_by_id_refs_id_5c5fe834` FOREIGN KEY (`changed_by_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `django_admin_log`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `django_admin_log` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `action_time` datetime NOT NULL,
- `user_id` int(11) NOT NULL,
- `content_type_id` int(11) DEFAULT NULL,
- `object_id` longtext,
- `object_repr` varchar(200) NOT NULL,
- `action_flag` smallint(5) unsigned NOT NULL,
- `change_message` longtext NOT NULL,
- PRIMARY KEY (`id`),
- KEY `django_admin_log_fbfc09f1` (`user_id`),
- KEY `django_admin_log_e4470c6e` (`content_type_id`),
- CONSTRAINT `content_type_id_refs_id_288599e6` FOREIGN KEY (`content_type_id`) REFERENCES `django_content_type` (`id`),
- CONSTRAINT `user_id_refs_id_c8665aa` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `django_comment_client_permission`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `django_comment_client_permission` (
- `name` varchar(30) NOT NULL,
- PRIMARY KEY (`name`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `django_comment_client_permission_roles`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `django_comment_client_permission_roles` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `permission_id` varchar(30) NOT NULL,
- `role_id` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `django_comment_client_permi_permission_id_7a766da089425952_uniq` (`permission_id`,`role_id`),
- KEY `django_comment_client_permission_roles_1e014c8f` (`permission_id`),
- KEY `django_comment_client_permission_roles_bf07f040` (`role_id`),
- CONSTRAINT `permission_id_refs_name_b6302d27` FOREIGN KEY (`permission_id`) REFERENCES `django_comment_client_permission` (`name`),
- CONSTRAINT `role_id_refs_id_c1b5c854` FOREIGN KEY (`role_id`) REFERENCES `django_comment_client_role` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `django_comment_client_role`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `django_comment_client_role` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `name` varchar(30) NOT NULL,
- `course_id` varchar(255) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `django_comment_client_role_ff48d8e5` (`course_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `django_comment_client_role_users`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `django_comment_client_role_users` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `role_id` int(11) NOT NULL,
- `user_id` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `django_comment_client_role_users_role_id_78e483f531943614_uniq` (`role_id`,`user_id`),
- KEY `django_comment_client_role_users_bf07f040` (`role_id`),
- KEY `django_comment_client_role_users_fbfc09f1` (`user_id`),
- CONSTRAINT `role_id_refs_id_ab82c838` FOREIGN KEY (`role_id`) REFERENCES `django_comment_client_role` (`id`),
- CONSTRAINT `user_id_refs_id_441b79e7` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `django_content_type`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `django_content_type` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `name` varchar(100) NOT NULL,
- `app_label` varchar(100) NOT NULL,
- `model` varchar(100) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `app_label` (`app_label`,`model`)
-) ENGINE=InnoDB AUTO_INCREMENT=191 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 */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `django_openid_auth_association` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `server_url` longtext NOT NULL,
- `handle` varchar(255) NOT NULL,
- `secret` longtext NOT NULL,
- `issued` int(11) NOT NULL,
- `lifetime` int(11) NOT NULL,
- `assoc_type` longtext NOT NULL,
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `django_openid_auth_nonce`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `django_openid_auth_nonce` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `server_url` varchar(2047) NOT NULL,
- `timestamp` int(11) NOT NULL,
- `salt` varchar(40) NOT NULL,
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `django_openid_auth_useropenid`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `django_openid_auth_useropenid` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `claimed_id` longtext NOT NULL,
- `display_id` longtext NOT NULL,
- PRIMARY KEY (`id`),
- KEY `django_openid_auth_useropenid_fbfc09f1` (`user_id`),
- CONSTRAINT `user_id_refs_id_be7162f0` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `django_session`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `django_session` (
- `session_key` varchar(40) NOT NULL,
- `session_data` longtext NOT NULL,
- `expire_date` datetime NOT NULL,
- PRIMARY KEY (`session_key`),
- KEY `django_session_c25c2c28` (`expire_date`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `django_site`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `django_site` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `domain` varchar(100) NOT NULL,
- `name` varchar(50) NOT NULL,
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `djcelery_crontabschedule`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `djcelery_crontabschedule` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `minute` varchar(64) NOT NULL,
- `hour` varchar(64) NOT NULL,
- `day_of_week` varchar(64) NOT NULL,
- `day_of_month` varchar(64) NOT NULL,
- `month_of_year` varchar(64) NOT NULL,
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `djcelery_intervalschedule`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `djcelery_intervalschedule` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `every` int(11) NOT NULL,
- `period` varchar(24) NOT NULL,
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `djcelery_periodictask`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `djcelery_periodictask` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `name` varchar(200) NOT NULL,
- `task` varchar(200) NOT NULL,
- `interval_id` int(11) DEFAULT NULL,
- `crontab_id` int(11) DEFAULT NULL,
- `args` longtext NOT NULL,
- `kwargs` longtext NOT NULL,
- `queue` varchar(200) DEFAULT NULL,
- `exchange` varchar(200) DEFAULT NULL,
- `routing_key` varchar(200) DEFAULT NULL,
- `expires` datetime DEFAULT NULL,
- `enabled` tinyint(1) NOT NULL,
- `last_run_at` datetime DEFAULT NULL,
- `total_run_count` int(10) unsigned NOT NULL,
- `date_changed` datetime NOT NULL,
- `description` longtext NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `name` (`name`),
- KEY `djcelery_periodictask_17d2d99d` (`interval_id`),
- KEY `djcelery_periodictask_7aa5fda` (`crontab_id`),
- CONSTRAINT `crontab_id_refs_id_ebff5e74` FOREIGN KEY (`crontab_id`) REFERENCES `djcelery_crontabschedule` (`id`),
- CONSTRAINT `interval_id_refs_id_f2054349` FOREIGN KEY (`interval_id`) REFERENCES `djcelery_intervalschedule` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `djcelery_periodictasks`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `djcelery_periodictasks` (
- `ident` smallint(6) NOT NULL,
- `last_update` datetime NOT NULL,
- PRIMARY KEY (`ident`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `djcelery_taskstate`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `djcelery_taskstate` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `state` varchar(64) NOT NULL,
- `task_id` varchar(36) NOT NULL,
- `name` varchar(200) DEFAULT NULL,
- `tstamp` datetime NOT NULL,
- `args` longtext,
- `kwargs` longtext,
- `eta` datetime DEFAULT NULL,
- `expires` datetime DEFAULT NULL,
- `result` longtext,
- `traceback` longtext,
- `runtime` double DEFAULT NULL,
- `retries` int(11) NOT NULL,
- `worker_id` int(11) DEFAULT NULL,
- `hidden` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `task_id` (`task_id`),
- KEY `djcelery_taskstate_355bfc27` (`state`),
- KEY `djcelery_taskstate_52094d6e` (`name`),
- KEY `djcelery_taskstate_f0ba6500` (`tstamp`),
- KEY `djcelery_taskstate_20fc5b84` (`worker_id`),
- KEY `djcelery_taskstate_c91f1bf` (`hidden`),
- CONSTRAINT `worker_id_refs_id_4e3453a` FOREIGN KEY (`worker_id`) REFERENCES `djcelery_workerstate` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `djcelery_workerstate`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `djcelery_workerstate` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `hostname` varchar(255) NOT NULL,
- `last_heartbeat` datetime DEFAULT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `hostname` (`hostname`),
- KEY `djcelery_workerstate_eb8ac7e4` (`last_heartbeat`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `edxval_coursevideo`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `edxval_coursevideo` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `course_id` varchar(255) NOT NULL,
- `video_id` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `edxval_coursevideo_course_id_42cecee05cff2d8c_uniq` (`course_id`,`video_id`),
- KEY `edxval_coursevideo_fa26288c` (`video_id`),
- CONSTRAINT `video_id_refs_id_7520c050` FOREIGN KEY (`video_id`) REFERENCES `edxval_video` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `edxval_encodedvideo`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `edxval_encodedvideo` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- `url` varchar(200) NOT NULL,
- `file_size` int(10) unsigned NOT NULL,
- `bitrate` int(10) unsigned NOT NULL,
- `profile_id` int(11) NOT NULL,
- `video_id` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `edxval_encodedvideo_141c6eec` (`profile_id`),
- KEY `edxval_encodedvideo_fa26288c` (`video_id`),
- CONSTRAINT `profile_id_refs_id_692d754` FOREIGN KEY (`profile_id`) REFERENCES `edxval_profile` (`id`),
- CONSTRAINT `video_id_refs_id_176ce1a0` FOREIGN KEY (`video_id`) REFERENCES `edxval_video` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `edxval_profile`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `edxval_profile` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `profile_name` varchar(50) NOT NULL,
- `extension` varchar(10) DEFAULT 'mp4',
- `width` int(10) unsigned DEFAULT '1',
- `height` int(10) unsigned DEFAULT '1',
- PRIMARY KEY (`id`),
- UNIQUE KEY `profile_name` (`profile_name`)
-) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `edxval_subtitle`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `edxval_subtitle` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- `video_id` int(11) NOT NULL,
- `fmt` varchar(20) NOT NULL,
- `language` varchar(8) NOT NULL,
- `content` longtext NOT NULL,
- PRIMARY KEY (`id`),
- KEY `edxval_subtitle_fa26288c` (`video_id`),
- KEY `edxval_subtitle_306df28f` (`fmt`),
- KEY `edxval_subtitle_8a7ac9ab` (`language`),
- CONSTRAINT `video_id_refs_id_788bc3d3` FOREIGN KEY (`video_id`) REFERENCES `edxval_video` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `edxval_video`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `edxval_video` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `edx_video_id` varchar(100) NOT NULL,
- `client_video_id` varchar(255) NOT NULL,
- `duration` double NOT NULL,
- `created` datetime NOT NULL,
- `status` varchar(255) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `edx_video_id` (`edx_video_id`),
- KEY `edxval_video_de3f5709` (`client_video_id`),
- KEY `edxval_video_c9ad71dd` (`status`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `embargo_country`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `embargo_country` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `country` varchar(2) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `country` (`country`)
-) ENGINE=InnoDB AUTO_INCREMENT=250 DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `embargo_countryaccessrule`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `embargo_countryaccessrule` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `rule_type` varchar(255) NOT NULL,
- `restricted_course_id` int(11) NOT NULL,
- `country_id` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `embargo_countryacces_restricted_course_id_6f340c36c633cb0a_uniq` (`restricted_course_id`,`country_id`),
- KEY `embargo_countryaccessrule_3cd064f4` (`restricted_course_id`),
- KEY `embargo_countryaccessrule_534dd89` (`country_id`),
- CONSTRAINT `country_id_refs_id_f679fa73` FOREIGN KEY (`country_id`) REFERENCES `embargo_country` (`id`),
- CONSTRAINT `restricted_course_id_refs_id_c792331c` FOREIGN KEY (`restricted_course_id`) REFERENCES `embargo_restrictedcourse` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `embargo_courseaccessrulehistory`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `embargo_courseaccessrulehistory` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `timestamp` datetime NOT NULL,
- `course_key` varchar(255) NOT NULL,
- `snapshot` longtext,
- PRIMARY KEY (`id`),
- KEY `embargo_courseaccessrulehistory_67f1b7ce` (`timestamp`),
- KEY `embargo_courseaccessrulehistory_b4b47e7a` (`course_key`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `embargo_embargoedcourse`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `embargo_embargoedcourse` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `course_id` varchar(255) NOT NULL,
- `embargoed` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `course_id` (`course_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `embargo_embargoedstate`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `embargo_embargoedstate` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `change_date` datetime NOT NULL,
- `changed_by_id` int(11) DEFAULT NULL,
- `enabled` tinyint(1) NOT NULL,
- `embargoed_countries` longtext NOT NULL,
- PRIMARY KEY (`id`),
- KEY `embargo_embargoedstate_16905482` (`changed_by_id`),
- CONSTRAINT `changed_by_id_refs_id_d0205d39` FOREIGN KEY (`changed_by_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `embargo_ipfilter`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `embargo_ipfilter` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `change_date` datetime NOT NULL,
- `changed_by_id` int(11) DEFAULT NULL,
- `enabled` tinyint(1) NOT NULL,
- `whitelist` longtext NOT NULL,
- `blacklist` longtext NOT NULL,
- PRIMARY KEY (`id`),
- KEY `embargo_ipfilter_16905482` (`changed_by_id`),
- CONSTRAINT `changed_by_id_refs_id_22c1f5d3` FOREIGN KEY (`changed_by_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `embargo_restrictedcourse`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `embargo_restrictedcourse` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `course_key` varchar(255) NOT NULL,
- `enroll_msg_key` varchar(255) NOT NULL,
- `access_msg_key` varchar(255) NOT NULL,
- `disable_access_check` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `course_key` (`course_key`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `external_auth_externalauthmap`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `external_auth_externalauthmap` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `external_id` varchar(255) NOT NULL,
- `external_domain` varchar(255) NOT NULL,
- `external_credentials` longtext NOT NULL,
- `external_email` varchar(255) NOT NULL,
- `external_name` varchar(255) NOT NULL,
- `user_id` int(11) DEFAULT NULL,
- `internal_password` varchar(31) NOT NULL,
- `dtcreated` datetime NOT NULL,
- `dtsignup` datetime DEFAULT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `external_auth_externalauthmap_external_id_7f035ef8bc4d313e_uniq` (`external_id`,`external_domain`),
- UNIQUE KEY `user_id` (`user_id`),
- KEY `external_auth_externalauthmap_d5e787` (`external_id`),
- KEY `external_auth_externalauthmap_a570024c` (`external_domain`),
- KEY `external_auth_externalauthmap_a142061d` (`external_email`),
- KEY `external_auth_externalauthmap_c1a016f` (`external_name`),
- CONSTRAINT `user_id_refs_id_f8635f67` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `foldit_puzzlecomplete`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `foldit_puzzlecomplete` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `unique_user_id` varchar(50) NOT NULL,
- `puzzle_id` int(11) NOT NULL,
- `puzzle_set` int(11) NOT NULL,
- `puzzle_subset` int(11) NOT NULL,
- `created` datetime NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `foldit_puzzlecomplete_user_id_4c63656af6674331_uniq` (`user_id`,`puzzle_id`,`puzzle_set`,`puzzle_subset`),
- KEY `foldit_puzzlecomplete_fbfc09f1` (`user_id`),
- KEY `foldit_puzzlecomplete_8027477e` (`unique_user_id`),
- KEY `foldit_puzzlecomplete_4798a2b8` (`puzzle_set`),
- KEY `foldit_puzzlecomplete_59f06bcd` (`puzzle_subset`),
- CONSTRAINT `user_id_refs_id_37e9437b` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `foldit_score`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `foldit_score` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `unique_user_id` varchar(50) NOT NULL,
- `puzzle_id` int(11) NOT NULL,
- `best_score` double NOT NULL,
- `current_score` double NOT NULL,
- `score_version` int(11) NOT NULL,
- `created` datetime NOT NULL,
- PRIMARY KEY (`id`),
- KEY `foldit_score_fbfc09f1` (`user_id`),
- KEY `foldit_score_8027477e` (`unique_user_id`),
- KEY `foldit_score_3624c060` (`best_score`),
- KEY `foldit_score_b4627792` (`current_score`),
- CONSTRAINT `user_id_refs_id_4c07957f` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `instructor_task_instructortask`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `instructor_task_instructortask` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `task_type` varchar(50) NOT NULL,
- `course_id` varchar(255) NOT NULL,
- `task_key` varchar(255) NOT NULL,
- `task_input` varchar(255) NOT NULL,
- `task_id` varchar(255) NOT NULL,
- `task_state` varchar(50) DEFAULT NULL,
- `task_output` varchar(1024) DEFAULT NULL,
- `requester_id` int(11) NOT NULL,
- `created` datetime DEFAULT NULL,
- `updated` datetime NOT NULL,
- `subtasks` longtext NOT NULL,
- PRIMARY KEY (`id`),
- KEY `instructor_task_instructortask_8ae638b4` (`task_type`),
- KEY `instructor_task_instructortask_ff48d8e5` (`course_id`),
- KEY `instructor_task_instructortask_cfc55170` (`task_key`),
- KEY `instructor_task_instructortask_c00fe455` (`task_id`),
- KEY `instructor_task_instructortask_731e67a4` (`task_state`),
- KEY `instructor_task_instructortask_b8ca8b9f` (`requester_id`),
- CONSTRAINT `requester_id_refs_id_a97278e6` FOREIGN KEY (`requester_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `licenses_coursesoftware`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `licenses_coursesoftware` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `name` varchar(255) NOT NULL,
- `full_name` varchar(255) NOT NULL,
- `url` varchar(255) NOT NULL,
- `course_id` varchar(255) NOT NULL,
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `licenses_userlicense`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `licenses_userlicense` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `software_id` int(11) NOT NULL,
- `user_id` int(11) DEFAULT NULL,
- `serial` varchar(255) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `licenses_userlicense_4c6ed3c1` (`software_id`),
- KEY `licenses_userlicense_fbfc09f1` (`user_id`),
- CONSTRAINT `software_id_refs_id_f9e27be8` FOREIGN KEY (`software_id`) REFERENCES `licenses_coursesoftware` (`id`),
- CONSTRAINT `user_id_refs_id_2f3a1cb3` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `lms_xblock_xblockasidesconfig`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `lms_xblock_xblockasidesconfig` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `change_date` datetime NOT NULL,
- `changed_by_id` int(11) DEFAULT NULL,
- `enabled` tinyint(1) NOT NULL,
- `disabled_blocks` longtext NOT NULL,
- PRIMARY KEY (`id`),
- KEY `lms_xblock_xblockasidesconfig_16905482` (`changed_by_id`),
- CONSTRAINT `changed_by_id_refs_id_552627bc` FOREIGN KEY (`changed_by_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `milestones_coursecontentmilestone`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `milestones_coursecontentmilestone` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- `course_id` varchar(255) NOT NULL,
- `content_id` varchar(255) NOT NULL,
- `milestone_id` int(11) NOT NULL,
- `milestone_relationship_type_id` int(11) NOT NULL,
- `active` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `milestones_coursecontentmilesto_course_id_68d1457cd52d6dff_uniq` (`course_id`,`content_id`,`milestone_id`),
- KEY `milestones_coursecontentmilestone_ff48d8e5` (`course_id`),
- KEY `milestones_coursecontentmilestone_cc8ff3c` (`content_id`),
- KEY `milestones_coursecontentmilestone_9cfa291f` (`milestone_id`),
- KEY `milestones_coursecontentmilestone_595c57ff` (`milestone_relationship_type_id`),
- CONSTRAINT `milestone_id_refs_id_d7fabedc` FOREIGN KEY (`milestone_id`) REFERENCES `milestones_milestone` (`id`),
- CONSTRAINT `milestone_relationship_type_id_refs_id_d7ab186` FOREIGN KEY (`milestone_relationship_type_id`) REFERENCES `milestones_milestonerelationshiptype` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `milestones_coursemilestone`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `milestones_coursemilestone` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- `course_id` varchar(255) NOT NULL,
- `milestone_id` int(11) NOT NULL,
- `milestone_relationship_type_id` int(11) NOT NULL,
- `active` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `milestones_coursemilestone_course_id_5a06e10579eab3b7_uniq` (`course_id`,`milestone_id`),
- KEY `milestones_coursemilestone_ff48d8e5` (`course_id`),
- KEY `milestones_coursemilestone_9cfa291f` (`milestone_id`),
- KEY `milestones_coursemilestone_595c57ff` (`milestone_relationship_type_id`),
- CONSTRAINT `milestone_id_refs_id_cd764354` FOREIGN KEY (`milestone_id`) REFERENCES `milestones_milestone` (`id`),
- CONSTRAINT `milestone_relationship_type_id_refs_id_874a03b6` FOREIGN KEY (`milestone_relationship_type_id`) REFERENCES `milestones_milestonerelationshiptype` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `milestones_milestone`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `milestones_milestone` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- `namespace` varchar(255) NOT NULL,
- `name` varchar(255) NOT NULL,
- `display_name` varchar(255) NOT NULL,
- `description` longtext NOT NULL,
- `active` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `milestones_milestone_namespace_460a2f6943016c0b_uniq` (`namespace`,`name`),
- KEY `milestones_milestone_eb040977` (`namespace`),
- KEY `milestones_milestone_52094d6e` (`name`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `milestones_milestonerelationshiptype`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `milestones_milestonerelationshiptype` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- `name` varchar(25) NOT NULL,
- `description` longtext NOT NULL,
- `active` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `name` (`name`)
-) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `milestones_usermilestone`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `milestones_usermilestone` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- `user_id` int(11) NOT NULL,
- `milestone_id` int(11) NOT NULL,
- `source` longtext NOT NULL,
- `collected` datetime DEFAULT NULL,
- `active` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `milestones_usermilestone_user_id_10206aa452468351_uniq` (`user_id`,`milestone_id`),
- KEY `milestones_usermilestone_fbfc09f1` (`user_id`),
- KEY `milestones_usermilestone_9cfa291f` (`milestone_id`),
- CONSTRAINT `milestone_id_refs_id_af7fa460` FOREIGN KEY (`milestone_id`) REFERENCES `milestones_milestone` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `mobile_api_mobileapiconfig`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `mobile_api_mobileapiconfig` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `change_date` datetime NOT NULL,
- `changed_by_id` int(11) DEFAULT NULL,
- `enabled` tinyint(1) NOT NULL,
- `video_profiles` longtext NOT NULL,
- PRIMARY KEY (`id`),
- KEY `mobile_api_mobileapiconfig_16905482` (`changed_by_id`),
- CONSTRAINT `changed_by_id_refs_id_97c2f4c8` FOREIGN KEY (`changed_by_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `notes_note`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `notes_note` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `course_id` varchar(255) NOT NULL,
- `uri` varchar(255) NOT NULL,
- `text` longtext NOT NULL,
- `quote` longtext NOT NULL,
- `range_start` varchar(2048) NOT NULL,
- `range_start_offset` int(11) NOT NULL,
- `range_end` varchar(2048) NOT NULL,
- `range_end_offset` int(11) NOT NULL,
- `tags` longtext NOT NULL,
- `created` datetime DEFAULT NULL,
- `updated` datetime NOT NULL,
- PRIMARY KEY (`id`),
- KEY `notes_note_fbfc09f1` (`user_id`),
- KEY `notes_note_ff48d8e5` (`course_id`),
- KEY `notes_note_a9794fa` (`uri`),
- KEY `notes_note_3216ff68` (`created`),
- KEY `notes_note_8aac229` (`updated`),
- CONSTRAINT `user_id_refs_id_360715cc` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `notifications_articlesubscription`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `notifications_articlesubscription` (
- `subscription_ptr_id` int(11) NOT NULL,
- `articleplugin_ptr_id` int(11) NOT NULL,
- PRIMARY KEY (`articleplugin_ptr_id`),
- UNIQUE KEY `subscription_ptr_id` (`subscription_ptr_id`),
- CONSTRAINT `articleplugin_ptr_id_refs_id_71ed584a` FOREIGN KEY (`articleplugin_ptr_id`) REFERENCES `wiki_articleplugin` (`id`),
- CONSTRAINT `subscription_ptr_id_refs_id_75c0b518` FOREIGN KEY (`subscription_ptr_id`) REFERENCES `notify_subscription` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `notify_notification`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `notify_notification` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `subscription_id` int(11) DEFAULT NULL,
- `message` longtext NOT NULL,
- `url` varchar(200) DEFAULT NULL,
- `is_viewed` tinyint(1) NOT NULL,
- `is_emailed` tinyint(1) NOT NULL,
- `created` datetime NOT NULL,
- PRIMARY KEY (`id`),
- KEY `notify_notification_104f5ac1` (`subscription_id`),
- CONSTRAINT `subscription_id_refs_id_baf93d4f` FOREIGN KEY (`subscription_id`) REFERENCES `notify_subscription` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `notify_notificationtype`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `notify_notificationtype` (
- `key` varchar(128) NOT NULL,
- `label` varchar(128) DEFAULT NULL,
- `content_type_id` int(11) DEFAULT NULL,
- PRIMARY KEY (`key`),
- KEY `notify_notificationtype_e4470c6e` (`content_type_id`),
- CONSTRAINT `content_type_id_refs_id_f2478378` FOREIGN KEY (`content_type_id`) REFERENCES `django_content_type` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `notify_settings`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `notify_settings` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `interval` smallint(6) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `notify_settings_fbfc09f1` (`user_id`),
- CONSTRAINT `user_id_refs_id_9a2911e6` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `notify_subscription`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `notify_subscription` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `settings_id` int(11) NOT NULL,
- `notification_type_id` varchar(128) NOT NULL,
- `object_id` varchar(64) DEFAULT NULL,
- `send_emails` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `notify_subscription_83326d99` (`settings_id`),
- KEY `notify_subscription_9955f091` (`notification_type_id`),
- CONSTRAINT `notification_type_id_refs_key_baa41a19` FOREIGN KEY (`notification_type_id`) REFERENCES `notify_notificationtype` (`key`),
- CONSTRAINT `settings_id_refs_id_3b7225d5` FOREIGN KEY (`settings_id`) REFERENCES `notify_settings` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `oauth2_accesstoken`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `oauth2_accesstoken` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `token` varchar(255) NOT NULL,
- `client_id` int(11) NOT NULL,
- `expires` datetime NOT NULL,
- `scope` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `oauth2_accesstoken_fbfc09f1` (`user_id`),
- KEY `oauth2_accesstoken_4a4e8ffb` (`client_id`),
- KEY `oauth2_accesstoken_bfac9f99` (`token`),
- CONSTRAINT `client_id_refs_id_e566ebcc` FOREIGN KEY (`client_id`) REFERENCES `oauth2_client` (`id`),
- CONSTRAINT `user_id_refs_id_c740ddb9` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `oauth2_client`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `oauth2_client` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11),
- `url` varchar(200) NOT NULL,
- `redirect_uri` varchar(200) NOT NULL,
- `client_id` varchar(255) NOT NULL,
- `client_secret` varchar(255) NOT NULL,
- `client_type` int(11) NOT NULL,
- `name` varchar(255) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `oauth2_client_fbfc09f1` (`user_id`),
- CONSTRAINT `user_id_refs_id_c2e3e9a0` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `oauth2_grant`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `oauth2_grant` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `client_id` int(11) NOT NULL,
- `code` varchar(255) NOT NULL,
- `expires` datetime NOT NULL,
- `redirect_uri` varchar(255) NOT NULL,
- `scope` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `oauth2_grant_fbfc09f1` (`user_id`),
- KEY `oauth2_grant_4a4e8ffb` (`client_id`),
- CONSTRAINT `client_id_refs_id_b2f66ded` FOREIGN KEY (`client_id`) REFERENCES `oauth2_client` (`id`),
- CONSTRAINT `user_id_refs_id_37f50fe6` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `oauth2_provider_trustedclient`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `oauth2_provider_trustedclient` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `client_id` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `oauth2_provider_trustedclient_4a4e8ffb` (`client_id`),
- CONSTRAINT `client_id_refs_id_f6dfcacc` FOREIGN KEY (`client_id`) REFERENCES `oauth2_client` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `oauth2_refreshtoken`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `oauth2_refreshtoken` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `token` varchar(255) NOT NULL,
- `access_token_id` int(11) NOT NULL,
- `client_id` int(11) NOT NULL,
- `expired` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `access_token_id` (`access_token_id`),
- KEY `oauth2_refreshtoken_fbfc09f1` (`user_id`),
- KEY `oauth2_refreshtoken_4a4e8ffb` (`client_id`),
- CONSTRAINT `access_token_id_refs_id_df7961b9` FOREIGN KEY (`access_token_id`) REFERENCES `oauth2_accesstoken` (`id`),
- CONSTRAINT `client_id_refs_id_798730c8` FOREIGN KEY (`client_id`) REFERENCES `oauth2_client` (`id`),
- CONSTRAINT `user_id_refs_id_78216905` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `psychometrics_psychometricdata`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `psychometrics_psychometricdata` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `studentmodule_id` int(11) NOT NULL,
- `done` tinyint(1) NOT NULL,
- `attempts` int(11) NOT NULL,
- `checktimes` longtext,
- PRIMARY KEY (`id`),
- UNIQUE KEY `studentmodule_id` (`studentmodule_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `shoppingcart_certificateitem`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `shoppingcart_certificateitem` (
- `orderitem_ptr_id` int(11) NOT NULL,
- `course_id` varchar(128) NOT NULL,
- `course_enrollment_id` int(11) NOT NULL,
- `mode` varchar(50) NOT NULL,
- PRIMARY KEY (`orderitem_ptr_id`),
- KEY `shoppingcart_certificateitem_ff48d8e5` (`course_id`),
- KEY `shoppingcart_certificateitem_9e513f0b` (`course_enrollment_id`),
- KEY `shoppingcart_certificateitem_4160619e` (`mode`),
- CONSTRAINT `course_enrollment_id_refs_id_8048c435` FOREIGN KEY (`course_enrollment_id`) REFERENCES `student_courseenrollment` (`id`),
- CONSTRAINT `orderitem_ptr_id_refs_id_d3ebc4d0` FOREIGN KEY (`orderitem_ptr_id`) REFERENCES `shoppingcart_orderitem` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `shoppingcart_coupon`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `shoppingcart_coupon` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `code` varchar(32) NOT NULL,
- `description` varchar(255) DEFAULT NULL,
- `course_id` varchar(255) NOT NULL,
- `percentage_discount` int(11) NOT NULL,
- `created_by_id` int(11) NOT NULL,
- `created_at` datetime NOT NULL,
- `is_active` tinyint(1) NOT NULL,
- `expiration_date` datetime,
- PRIMARY KEY (`id`),
- KEY `shoppingcart_coupon_65da3d2c` (`code`),
- KEY `shoppingcart_coupon_b5de30be` (`created_by_id`),
- CONSTRAINT `created_by_id_refs_id_259aadc` FOREIGN KEY (`created_by_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `shoppingcart_couponredemption`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `shoppingcart_couponredemption` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `order_id` int(11) NOT NULL,
- `user_id` int(11) NOT NULL,
- `coupon_id` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `shoppingcart_couponredemption_8337030b` (`order_id`),
- KEY `shoppingcart_couponredemption_fbfc09f1` (`user_id`),
- KEY `shoppingcart_couponredemption_c29b2e60` (`coupon_id`),
- CONSTRAINT `coupon_id_refs_id_c11a8022` FOREIGN KEY (`coupon_id`) REFERENCES `shoppingcart_coupon` (`id`),
- CONSTRAINT `order_id_refs_id_f5db1967` FOREIGN KEY (`order_id`) REFERENCES `shoppingcart_order` (`id`),
- CONSTRAINT `user_id_refs_id_5e9b8167` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `shoppingcart_courseregcodeitem`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `shoppingcart_courseregcodeitem` (
- `orderitem_ptr_id` int(11) NOT NULL,
- `course_id` varchar(128) NOT NULL,
- `mode` varchar(50) NOT NULL,
- PRIMARY KEY (`orderitem_ptr_id`),
- KEY `shoppingcart_courseregcodeitem_ff48d8e5` (`course_id`),
- KEY `shoppingcart_courseregcodeitem_4160619e` (`mode`),
- CONSTRAINT `orderitem_ptr_id_refs_id_a466f07f` FOREIGN KEY (`orderitem_ptr_id`) REFERENCES `shoppingcart_orderitem` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `shoppingcart_courseregcodeitemannotation`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `shoppingcart_courseregcodeitemannotation` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `course_id` varchar(128) NOT NULL,
- `annotation` longtext,
- PRIMARY KEY (`id`),
- UNIQUE KEY `course_id` (`course_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `shoppingcart_courseregistrationcode`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `shoppingcart_courseregistrationcode` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `code` varchar(32) NOT NULL,
- `course_id` varchar(255) NOT NULL,
- `created_by_id` int(11) NOT NULL,
- `created_at` datetime NOT NULL,
- `invoice_id` int(11),
- `order_id` int(11),
- `mode_slug` varchar(100),
- `invoice_item_id` int(11),
- `is_valid` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `shoppingcart_courseregistrationcode_code_6614bad3cae62199_uniq` (`code`),
- KEY `shoppingcart_courseregistrationcode_65da3d2c` (`code`),
- KEY `shoppingcart_courseregistrationcode_ff48d8e5` (`course_id`),
- KEY `shoppingcart_courseregistrationcode_b5de30be` (`created_by_id`),
- KEY `shoppingcart_courseregistrationcode_59f72b12` (`invoice_id`),
- KEY `shoppingcart_courseregistrationcode_8337030b` (`order_id`),
- KEY `shoppingcart_courseregistrationcode_80766641` (`invoice_item_id`),
- CONSTRAINT `created_by_id_refs_id_38397037` FOREIGN KEY (`created_by_id`) REFERENCES `auth_user` (`id`),
- CONSTRAINT `invoice_id_refs_id_995f0ae8` FOREIGN KEY (`invoice_id`) REFERENCES `shoppingcart_invoice` (`id`),
- CONSTRAINT `invoice_item_id_refs_invoiceitem_ptr_id_8a5558e6` FOREIGN KEY (`invoice_item_id`) REFERENCES `shoppingcart_courseregistrationcodeinvoiceitem` (`invoiceitem_ptr_id`),
- CONSTRAINT `order_id_refs_id_be36d837` FOREIGN KEY (`order_id`) REFERENCES `shoppingcart_order` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `shoppingcart_courseregistrationcodeinvoiceitem`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `shoppingcart_courseregistrationcodeinvoiceitem` (
- `invoiceitem_ptr_id` int(11) NOT NULL,
- `course_id` varchar(128) NOT NULL,
- PRIMARY KEY (`invoiceitem_ptr_id`),
- KEY `shoppingcart_courseregistrationcodeinvoiceitem_ff48d8e5` (`course_id`),
- CONSTRAINT `invoiceitem_ptr_id_refs_id_74a11b46` FOREIGN KEY (`invoiceitem_ptr_id`) REFERENCES `shoppingcart_invoiceitem` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `shoppingcart_donation`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `shoppingcart_donation` (
- `orderitem_ptr_id` int(11) NOT NULL,
- `donation_type` varchar(32) NOT NULL,
- `course_id` varchar(255) NOT NULL,
- PRIMARY KEY (`orderitem_ptr_id`),
- KEY `shoppingcart_donation_ff48d8e5` (`course_id`),
- CONSTRAINT `orderitem_ptr_id_refs_id_b7138a4b` FOREIGN KEY (`orderitem_ptr_id`) REFERENCES `shoppingcart_orderitem` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `shoppingcart_donationconfiguration`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `shoppingcart_donationconfiguration` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `change_date` datetime NOT NULL,
- `changed_by_id` int(11) DEFAULT NULL,
- `enabled` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `shoppingcart_donationconfiguration_16905482` (`changed_by_id`),
- CONSTRAINT `changed_by_id_refs_id_b4a26b7f` FOREIGN KEY (`changed_by_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `shoppingcart_invoice`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `shoppingcart_invoice` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `total_amount` double NOT NULL,
- `company_name` varchar(255) NOT NULL,
- `course_id` varchar(255) NOT NULL,
- `internal_reference` varchar(255),
- `is_valid` tinyint(1) NOT NULL,
- `address_line_1` varchar(255) NOT NULL,
- `address_line_2` varchar(255),
- `address_line_3` varchar(255),
- `city` varchar(255),
- `state` varchar(255),
- `zip` varchar(15),
- `country` varchar(64),
- `recipient_name` varchar(255) NOT NULL,
- `recipient_email` varchar(255) NOT NULL,
- `customer_reference_number` varchar(63),
- `company_contact_name` varchar(255) NOT NULL,
- `company_contact_email` varchar(255) NOT NULL,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- PRIMARY KEY (`id`),
- KEY `shoppingcart_invoice_ca9021a2` (`company_name`),
- KEY `shoppingcart_invoice_ff48d8e5` (`course_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `shoppingcart_invoicehistory`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `shoppingcart_invoicehistory` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `timestamp` datetime NOT NULL,
- `invoice_id` int(11) NOT NULL,
- `snapshot` longtext NOT NULL,
- PRIMARY KEY (`id`),
- KEY `shoppingcart_invoicehistory_67f1b7ce` (`timestamp`),
- KEY `shoppingcart_invoicehistory_59f72b12` (`invoice_id`),
- CONSTRAINT `invoice_id_refs_id_239c2b7c` FOREIGN KEY (`invoice_id`) REFERENCES `shoppingcart_invoice` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `shoppingcart_invoiceitem`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `shoppingcart_invoiceitem` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- `invoice_id` int(11) NOT NULL,
- `qty` int(11) NOT NULL,
- `unit_price` decimal(30,2) NOT NULL,
- `currency` varchar(8) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `shoppingcart_invoiceitem_59f72b12` (`invoice_id`),
- CONSTRAINT `invoice_id_refs_id_5c894802` FOREIGN KEY (`invoice_id`) REFERENCES `shoppingcart_invoice` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `shoppingcart_invoicetransaction`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `shoppingcart_invoicetransaction` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- `invoice_id` int(11) NOT NULL,
- `amount` decimal(30,2) NOT NULL,
- `currency` varchar(8) NOT NULL,
- `comments` longtext,
- `status` varchar(32) NOT NULL,
- `created_by_id` int(11) NOT NULL,
- `last_modified_by_id` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `shoppingcart_invoicetransaction_59f72b12` (`invoice_id`),
- KEY `shoppingcart_invoicetransaction_b5de30be` (`created_by_id`),
- KEY `shoppingcart_invoicetransaction_bcd6c6d2` (`last_modified_by_id`),
- CONSTRAINT `created_by_id_refs_id_7259d0bb` FOREIGN KEY (`created_by_id`) REFERENCES `auth_user` (`id`),
- CONSTRAINT `invoice_id_refs_id_8e5b62ec` FOREIGN KEY (`invoice_id`) REFERENCES `shoppingcart_invoice` (`id`),
- CONSTRAINT `last_modified_by_id_refs_id_7259d0bb` FOREIGN KEY (`last_modified_by_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `shoppingcart_order`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `shoppingcart_order` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `currency` varchar(8) NOT NULL,
- `status` varchar(32) NOT NULL,
- `purchase_time` datetime DEFAULT NULL,
- `bill_to_first` varchar(64) NOT NULL,
- `bill_to_last` varchar(64) NOT NULL,
- `bill_to_street1` varchar(128) NOT NULL,
- `bill_to_street2` varchar(128) NOT NULL,
- `bill_to_city` varchar(64) NOT NULL,
- `bill_to_state` varchar(8) NOT NULL,
- `bill_to_postalcode` varchar(16) NOT NULL,
- `bill_to_country` varchar(64) NOT NULL,
- `bill_to_ccnum` varchar(8) NOT NULL,
- `bill_to_cardtype` varchar(32) NOT NULL,
- `processor_reply_dump` longtext NOT NULL,
- `refunded_time` datetime,
- `company_name` varchar(255),
- `company_contact_name` varchar(255),
- `company_contact_email` varchar(255),
- `recipient_name` varchar(255),
- `recipient_email` varchar(255),
- `customer_reference_number` varchar(63),
- `order_type` varchar(32) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `shoppingcart_order_fbfc09f1` (`user_id`),
- CONSTRAINT `user_id_refs_id_e1195673` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `shoppingcart_orderitem`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `shoppingcart_orderitem` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `order_id` int(11) NOT NULL,
- `user_id` int(11) NOT NULL,
- `status` varchar(32) NOT NULL,
- `qty` int(11) NOT NULL,
- `unit_cost` decimal(30,2) NOT NULL,
- `line_desc` varchar(1024) NOT NULL,
- `currency` varchar(8) NOT NULL,
- `fulfilled_time` datetime,
- `report_comments` longtext NOT NULL,
- `refund_requested_time` datetime,
- `service_fee` decimal(30,2) NOT NULL,
- `list_price` decimal(30,2),
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- PRIMARY KEY (`id`),
- KEY `shoppingcart_orderitem_8337030b` (`order_id`),
- KEY `shoppingcart_orderitem_fbfc09f1` (`user_id`),
- KEY `shoppingcart_orderitem_c9ad71dd` (`status`),
- KEY `shoppingcart_orderitem_8457f26a` (`fulfilled_time`),
- KEY `shoppingcart_orderitem_416112c1` (`refund_requested_time`),
- CONSTRAINT `order_id_refs_id_7c77b3f0` FOREIGN KEY (`order_id`) REFERENCES `shoppingcart_order` (`id`),
- CONSTRAINT `user_id_refs_id_d92ae410` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `shoppingcart_paidcourseregistration`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `shoppingcart_paidcourseregistration` (
- `orderitem_ptr_id` int(11) NOT NULL,
- `course_id` varchar(128) NOT NULL,
- `mode` varchar(50) NOT NULL,
- `course_enrollment_id` int(11),
- PRIMARY KEY (`orderitem_ptr_id`),
- KEY `shoppingcart_paidcourseregistration_ff48d8e5` (`course_id`),
- KEY `shoppingcart_paidcourseregistration_4160619e` (`mode`),
- KEY `shoppingcart_paidcourseregistration_9e513f0b` (`course_enrollment_id`),
- CONSTRAINT `course_enrollment_id_refs_id_dc061be6` FOREIGN KEY (`course_enrollment_id`) REFERENCES `student_courseenrollment` (`id`),
- CONSTRAINT `orderitem_ptr_id_refs_id_d8709d99` FOREIGN KEY (`orderitem_ptr_id`) REFERENCES `shoppingcart_orderitem` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `shoppingcart_paidcourseregistrationannotation`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `shoppingcart_paidcourseregistrationannotation` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `course_id` varchar(128) NOT NULL,
- `annotation` longtext,
- PRIMARY KEY (`id`),
- UNIQUE KEY `course_id` (`course_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `shoppingcart_registrationcoderedemption`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `shoppingcart_registrationcoderedemption` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `order_id` int(11),
- `registration_code_id` int(11) NOT NULL,
- `redeemed_by_id` int(11) NOT NULL,
- `redeemed_at` datetime DEFAULT NULL,
- `course_enrollment_id` int(11),
- PRIMARY KEY (`id`),
- KEY `shoppingcart_registrationcoderedemption_8337030b` (`order_id`),
- KEY `shoppingcart_registrationcoderedemption_d25b37dc` (`registration_code_id`),
- KEY `shoppingcart_registrationcoderedemption_e151467a` (`redeemed_by_id`),
- KEY `shoppingcart_registrationcoderedemption_9e513f0b` (`course_enrollment_id`),
- CONSTRAINT `course_enrollment_id_refs_id_c9486127` FOREIGN KEY (`course_enrollment_id`) REFERENCES `student_courseenrollment` (`id`),
- CONSTRAINT `order_id_refs_id_53a8a5c9` FOREIGN KEY (`order_id`) REFERENCES `shoppingcart_order` (`id`),
- CONSTRAINT `redeemed_by_id_refs_id_4e320dc9` FOREIGN KEY (`redeemed_by_id`) REFERENCES `auth_user` (`id`),
- CONSTRAINT `registration_code_id_refs_id_4d01e47b` FOREIGN KEY (`registration_code_id`) REFERENCES `shoppingcart_courseregistrationcode` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `south_migrationhistory`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `south_migrationhistory` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `app_name` varchar(255) NOT NULL,
- `migration` varchar(255) NOT NULL,
- `applied` datetime NOT NULL,
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=259 DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `splash_splashconfig`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `splash_splashconfig` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `change_date` datetime NOT NULL,
- `changed_by_id` int(11) DEFAULT NULL,
- `enabled` tinyint(1) NOT NULL,
- `cookie_name` longtext NOT NULL,
- `cookie_allowed_values` longtext NOT NULL,
- `unaffected_usernames` longtext NOT NULL,
- `redirect_url` varchar(200) NOT NULL,
- `unaffected_url_paths` longtext NOT NULL,
- PRIMARY KEY (`id`),
- KEY `splash_splashconfig_16905482` (`changed_by_id`),
- CONSTRAINT `changed_by_id_refs_id_9125b21c` FOREIGN KEY (`changed_by_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `student_anonymoususerid`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `student_anonymoususerid` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `anonymous_user_id` varchar(32) NOT NULL,
- `course_id` varchar(255) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `anonymous_user_id` (`anonymous_user_id`),
- KEY `student_anonymoususerid_fbfc09f1` (`user_id`),
- KEY `student_anonymoususerid_ff48d8e5` (`course_id`),
- CONSTRAINT `user_id_refs_id_c38f7a2a` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `student_courseaccessrole`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `student_courseaccessrole` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `org` varchar(64) NOT NULL,
- `course_id` varchar(255) NOT NULL,
- `role` varchar(64) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `student_courseaccessrole_user_id_3203176c4f474414_uniq` (`user_id`,`org`,`course_id`,`role`),
- KEY `student_courseaccessrole_fbfc09f1` (`user_id`),
- KEY `student_courseaccessrole_4f5f82e2` (`org`),
- KEY `student_courseaccessrole_ff48d8e5` (`course_id`),
- KEY `student_courseaccessrole_e0b082a1` (`role`),
- CONSTRAINT `user_id_refs_id_6ac23885` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `student_courseenrollment`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `student_courseenrollment` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `course_id` varchar(255) NOT NULL,
- `created` datetime DEFAULT NULL,
- `is_active` tinyint(1) NOT NULL,
- `mode` varchar(100) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `student_courseenrollment_user_id_2d2a572f07dd8e37_uniq` (`user_id`,`course_id`),
- KEY `student_courseenrollment_fbfc09f1` (`user_id`),
- KEY `student_courseenrollment_ff48d8e5` (`course_id`),
- KEY `student_courseenrollment_3216ff68` (`created`),
- CONSTRAINT `user_id_refs_id_ed37bc9d` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `student_courseenrollmentallowed`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `student_courseenrollmentallowed` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `email` varchar(255) NOT NULL,
- `course_id` varchar(255) NOT NULL,
- `created` datetime DEFAULT NULL,
- `auto_enroll` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `student_courseenrollmentallowed_email_6f3eafd4a6c58591_uniq` (`email`,`course_id`),
- KEY `student_courseenrollmentallowed_3904588a` (`email`),
- KEY `student_courseenrollmentallowed_ff48d8e5` (`course_id`),
- KEY `student_courseenrollmentallowed_3216ff68` (`created`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `student_courseenrollmentattribute`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `student_courseenrollmentattribute` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `enrollment_id` int(11) NOT NULL,
- `namespace` varchar(255) NOT NULL,
- `name` varchar(255) NOT NULL,
- `value` varchar(255) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `student_courseenrollmentattribute_ab10102` (`enrollment_id`),
- CONSTRAINT `enrollment_id_refs_id_974619de` FOREIGN KEY (`enrollment_id`) REFERENCES `student_courseenrollment` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `student_dashboardconfiguration`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `student_dashboardconfiguration` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `change_date` datetime NOT NULL,
- `changed_by_id` int(11) DEFAULT NULL,
- `enabled` tinyint(1) NOT NULL,
- `recent_enrollment_time_delta` int(10) unsigned NOT NULL,
- PRIMARY KEY (`id`),
- KEY `student_dashboardconfiguration_16905482` (`changed_by_id`),
- CONSTRAINT `changed_by_id_refs_id_eec78c18` FOREIGN KEY (`changed_by_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `student_entranceexamconfiguration`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `student_entranceexamconfiguration` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `course_id` varchar(255) NOT NULL,
- `created` datetime DEFAULT NULL,
- `updated` datetime NOT NULL,
- `skip_entrance_exam` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `student_entranceexamconfiguration_user_id_714c2ef6a88504f0_uniq` (`user_id`,`course_id`),
- KEY `student_entranceexamconfiguration_fbfc09f1` (`user_id`),
- KEY `student_entranceexamconfiguration_ff48d8e5` (`course_id`),
- KEY `student_entranceexamconfiguration_3216ff68` (`created`),
- KEY `student_entranceexamconfiguration_8aac229` (`updated`),
- CONSTRAINT `user_id_refs_id_9c93dc16` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `student_languageproficiency`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `student_languageproficiency` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_profile_id` int(11) NOT NULL,
- `code` varchar(16) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `student_languageproficiency_code_68e76171684c62e5_uniq` (`code`,`user_profile_id`),
- KEY `student_languageproficiency_634d39b9` (`user_profile_id`),
- CONSTRAINT `user_profile_id_refs_id_ba5aae00` FOREIGN KEY (`user_profile_id`) REFERENCES `auth_userprofile` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `student_linkedinaddtoprofileconfiguration`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `student_linkedinaddtoprofileconfiguration` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `change_date` datetime NOT NULL,
- `changed_by_id` int(11) DEFAULT NULL,
- `enabled` tinyint(1) NOT NULL,
- `dashboard_tracking_code` longtext NOT NULL,
- `company_identifier` longtext NOT NULL,
- `trk_partner_name` varchar(10) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `student_linkedinaddtoprofileconfiguration_16905482` (`changed_by_id`),
- CONSTRAINT `changed_by_id_refs_id_9469646a` FOREIGN KEY (`changed_by_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `student_loginfailures`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `student_loginfailures` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `failure_count` int(11) NOT NULL,
- `lockout_until` datetime DEFAULT NULL,
- PRIMARY KEY (`id`),
- KEY `student_loginfailures_fbfc09f1` (`user_id`),
- CONSTRAINT `user_id_refs_id_e6a71045` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `student_manualenrollmentaudit`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `student_manualenrollmentaudit` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `enrollment_id` int(11) DEFAULT NULL,
- `enrolled_by_id` int(11) DEFAULT NULL,
- `enrolled_email` varchar(255) NOT NULL,
- `time_stamp` datetime DEFAULT NULL,
- `state_transition` varchar(255) NOT NULL,
- `reason` longtext,
- PRIMARY KEY (`id`),
- KEY `student_manualenrollmentaudit_ab10102` (`enrollment_id`),
- KEY `student_manualenrollmentaudit_a14a0576` (`enrolled_by_id`),
- KEY `student_manualenrollmentaudit_3dd381cb` (`enrolled_email`),
- CONSTRAINT `enrolled_by_id_refs_id_a8059256` FOREIGN KEY (`enrolled_by_id`) REFERENCES `auth_user` (`id`),
- CONSTRAINT `enrollment_id_refs_id_a87a89ac` FOREIGN KEY (`enrollment_id`) REFERENCES `student_courseenrollment` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `student_passwordhistory`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `student_passwordhistory` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `password` varchar(128) NOT NULL,
- `time_set` datetime NOT NULL,
- PRIMARY KEY (`id`),
- KEY `student_passwordhistory_fbfc09f1` (`user_id`),
- CONSTRAINT `user_id_refs_id_ed0987da` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `student_pendingemailchange`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `student_pendingemailchange` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `new_email` varchar(255) NOT NULL,
- `activation_key` varchar(32) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `user_id` (`user_id`),
- UNIQUE KEY `activation_key` (`activation_key`),
- KEY `student_pendingemailchange_856c86d7` (`new_email`),
- CONSTRAINT `user_id_refs_id_a525fa67` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `student_pendingnamechange`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `student_pendingnamechange` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `new_name` varchar(255) NOT NULL,
- `rationale` varchar(1024) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `user_id` (`user_id`),
- CONSTRAINT `user_id_refs_id_d9359b27` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `student_usersignupsource`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `student_usersignupsource` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `site` varchar(255) NOT NULL,
- `user_id` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `student_usersignupsource_e00a881a` (`site`),
- KEY `student_usersignupsource_fbfc09f1` (`user_id`),
- CONSTRAINT `user_id_refs_id_38a4bd6e` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `student_userstanding`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `student_userstanding` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `account_status` varchar(31) NOT NULL,
- `changed_by_id` int(11) NOT NULL,
- `standing_last_changed_at` datetime NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `user_id` (`user_id`),
- KEY `student_userstanding_16905482` (`changed_by_id`),
- CONSTRAINT `changed_by_id_refs_id_450a33b` FOREIGN KEY (`changed_by_id`) REFERENCES `auth_user` (`id`),
- CONSTRAINT `user_id_refs_id_450a33b` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `student_usertestgroup`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `student_usertestgroup` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `name` varchar(32) NOT NULL,
- `description` longtext NOT NULL,
- PRIMARY KEY (`id`),
- KEY `student_usertestgroup_52094d6e` (`name`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `student_usertestgroup_users`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `student_usertestgroup_users` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `usertestgroup_id` int(11) NOT NULL,
- `user_id` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `student_usertestgroup_us_usertestgroup_id_63c588e0372991b0_uniq` (`usertestgroup_id`,`user_id`),
- KEY `student_usertestgroup_users_44f27cdf` (`usertestgroup_id`),
- KEY `student_usertestgroup_users_fbfc09f1` (`user_id`),
- CONSTRAINT `user_id_refs_id_8947584c` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`),
- CONSTRAINT `usertestgroup_id_refs_id_6d724f9e` FOREIGN KEY (`usertestgroup_id`) REFERENCES `student_usertestgroup` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `submissions_score`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `submissions_score` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `student_item_id` int(11) NOT NULL,
- `submission_id` int(11) DEFAULT NULL,
- `points_earned` int(10) unsigned NOT NULL,
- `points_possible` int(10) unsigned NOT NULL,
- `created_at` datetime NOT NULL,
- `reset` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `submissions_score_fa84001` (`student_item_id`),
- KEY `submissions_score_b3d6235a` (`submission_id`),
- KEY `submissions_score_3b1c9c31` (`created_at`),
- CONSTRAINT `student_item_id_refs_id_8cd97385` FOREIGN KEY (`student_item_id`) REFERENCES `submissions_studentitem` (`id`),
- CONSTRAINT `submission_id_refs_id_9e39cf2e` FOREIGN KEY (`submission_id`) REFERENCES `submissions_submission` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `submissions_scoresummary`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `submissions_scoresummary` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `student_item_id` int(11) NOT NULL,
- `highest_id` int(11) NOT NULL,
- `latest_id` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `student_item_id` (`student_item_id`),
- KEY `submissions_scoresummary_d65f9365` (`highest_id`),
- KEY `submissions_scoresummary_1efb24d9` (`latest_id`),
- CONSTRAINT `highest_id_refs_id_1bdc0a18` FOREIGN KEY (`highest_id`) REFERENCES `submissions_score` (`id`),
- CONSTRAINT `latest_id_refs_id_1bdc0a18` FOREIGN KEY (`latest_id`) REFERENCES `submissions_score` (`id`),
- CONSTRAINT `student_item_id_refs_id_bd51e768` FOREIGN KEY (`student_item_id`) REFERENCES `submissions_studentitem` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `submissions_studentitem`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `submissions_studentitem` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `student_id` varchar(255) NOT NULL,
- `course_id` varchar(255) NOT NULL,
- `item_id` varchar(255) NOT NULL,
- `item_type` varchar(100) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `submissions_studentitem_course_id_6a6eccbdec6ffd0b_uniq` (`course_id`,`student_id`,`item_id`),
- KEY `submissions_studentitem_42ff452e` (`student_id`),
- KEY `submissions_studentitem_ff48d8e5` (`course_id`),
- KEY `submissions_studentitem_67b70d25` (`item_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `submissions_submission`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `submissions_submission` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `uuid` varchar(36) NOT NULL,
- `student_item_id` int(11) NOT NULL,
- `attempt_number` int(10) unsigned NOT NULL,
- `submitted_at` datetime NOT NULL,
- `created_at` datetime NOT NULL,
- `raw_answer` longtext NOT NULL,
- PRIMARY KEY (`id`),
- KEY `submissions_submission_2bbc74ae` (`uuid`),
- KEY `submissions_submission_fa84001` (`student_item_id`),
- KEY `submissions_submission_4452d192` (`submitted_at`),
- KEY `submissions_submission_3b1c9c31` (`created_at`),
- CONSTRAINT `student_item_id_refs_id_b5cccc` FOREIGN KEY (`student_item_id`) REFERENCES `submissions_studentitem` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `survey_surveyanswer`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `survey_surveyanswer` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- `user_id` int(11) NOT NULL,
- `form_id` int(11) NOT NULL,
- `field_name` varchar(255) NOT NULL,
- `field_value` varchar(1024) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `survey_surveyanswer_fbfc09f1` (`user_id`),
- KEY `survey_surveyanswer_1d0aabf2` (`form_id`),
- KEY `survey_surveyanswer_7e1499` (`field_name`),
- CONSTRAINT `form_id_refs_id_f4c79f29` FOREIGN KEY (`form_id`) REFERENCES `survey_surveyform` (`id`),
- CONSTRAINT `user_id_refs_id_e0ad4b5e` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `survey_surveyform`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `survey_surveyform` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- `name` varchar(255) NOT NULL,
- `form` longtext NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `name` (`name`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `teams_courseteam`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `teams_courseteam` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `team_id` varchar(255) NOT NULL,
- `name` varchar(255) NOT NULL,
- `is_active` tinyint(1) NOT NULL,
- `course_id` varchar(255) NOT NULL,
- `topic_id` varchar(255) NOT NULL,
- `date_created` datetime NOT NULL,
- `description` varchar(300) NOT NULL,
- `country` varchar(2) NOT NULL,
- `language` varchar(16) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `team_id` (`team_id`),
- KEY `teams_courseteam_ff48d8e5` (`course_id`),
- KEY `teams_courseteam_57732028` (`topic_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `teams_courseteammembership`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `teams_courseteammembership` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `team_id` int(11) NOT NULL,
- `date_joined` datetime NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `teams_courseteammembership_user_id_48efa8e8971947c3_uniq` (`user_id`,`team_id`),
- KEY `teams_courseteammembership_fbfc09f1` (`user_id`),
- KEY `teams_courseteammembership_fcf8ac47` (`team_id`),
- CONSTRAINT `team_id_refs_id_679497a3` FOREIGN KEY (`team_id`) REFERENCES `teams_courseteam` (`id`),
- CONSTRAINT `user_id_refs_id_abc442bf` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `track_trackinglog`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `track_trackinglog` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `dtcreated` datetime NOT NULL,
- `username` varchar(32) NOT NULL,
- `ip` varchar(32) NOT NULL,
- `event_source` varchar(32) NOT NULL,
- `event_type` varchar(512) NOT NULL,
- `event` longtext NOT NULL,
- `agent` varchar(256) NOT NULL,
- `page` varchar(512),
- `time` datetime NOT NULL,
- `host` varchar(64) NOT NULL,
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `user_api_usercoursetag`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `user_api_usercoursetag` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `key` varchar(255) NOT NULL,
- `course_id` varchar(255) NOT NULL,
- `value` longtext NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `user_api_usercoursetags_user_id_a734720a0483b08_uniq` (`user_id`,`course_id`,`key`),
- KEY `user_api_usercoursetags_fbfc09f1` (`user_id`),
- KEY `user_api_usercoursetags_45544485` (`key`),
- KEY `user_api_usercoursetags_ff48d8e5` (`course_id`),
- CONSTRAINT `user_id_refs_id_47a9a367` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `user_api_userorgtag`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `user_api_userorgtag` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- `user_id` int(11) NOT NULL,
- `key` varchar(255) NOT NULL,
- `org` varchar(255) NOT NULL,
- `value` longtext NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `user_api_userorgtag_user_id_694f9e3322120c6f_uniq` (`user_id`,`org`,`key`),
- KEY `user_api_userorgtag_user_id_694f9e3322120c6f` (`user_id`,`org`,`key`),
- KEY `user_api_userorgtag_fbfc09f1` (`user_id`),
- KEY `user_api_userorgtag_45544485` (`key`),
- KEY `user_api_userorgtag_4f5f82e2` (`org`),
- CONSTRAINT `user_id_refs_id_e54b717f` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `user_api_userpreference`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `user_api_userpreference` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `key` varchar(255) NOT NULL,
- `value` longtext NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `user_api_userpreference_user_id_4e4942d73f760072_uniq` (`user_id`,`key`),
- KEY `user_api_userpreference_fbfc09f1` (`user_id`),
- KEY `user_api_userpreference_45544485` (`key`),
- CONSTRAINT `user_id_refs_id_f3473b9e` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `util_ratelimitconfiguration`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `util_ratelimitconfiguration` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `change_date` datetime NOT NULL,
- `changed_by_id` int(11) DEFAULT NULL,
- `enabled` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `util_ratelimitconfiguration_16905482` (`changed_by_id`),
- CONSTRAINT `changed_by_id_refs_id_76a26307` FOREIGN KEY (`changed_by_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `verify_student_incoursereverificationconfiguration`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `verify_student_incoursereverificationconfiguration` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `change_date` datetime NOT NULL,
- `changed_by_id` int(11) DEFAULT NULL,
- `enabled` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `verify_student_incoursereverificationconfiguration_16905482` (`changed_by_id`),
- CONSTRAINT `changed_by_id_refs_id_ab2dfc2a` FOREIGN KEY (`changed_by_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `verify_student_skippedreverification`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `verify_student_skippedreverification` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `user_id` int(11) NOT NULL,
- `course_id` varchar(255) NOT NULL,
- `checkpoint_id` int(11) NOT NULL,
- `created_at` datetime NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `verify_student_skippedreverificat_user_id_1e8af5a5e735aa1a_uniq` (`user_id`,`course_id`),
- KEY `verify_student_skippedreverification_fbfc09f1` (`user_id`),
- KEY `verify_student_skippedreverification_ff48d8e5` (`course_id`),
- KEY `verify_student_skippedreverification_a631e438` (`checkpoint_id`),
- CONSTRAINT `checkpoint_id_refs_id_de8541b1` FOREIGN KEY (`checkpoint_id`) REFERENCES `verify_student_verificationcheckpoint` (`id`),
- CONSTRAINT `user_id_refs_id_f26a5780` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `verify_student_softwaresecurephotoverification`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `verify_student_softwaresecurephotoverification` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `status` varchar(100) NOT NULL,
- `status_changed` datetime NOT NULL,
- `user_id` int(11) NOT NULL,
- `name` varchar(255) NOT NULL,
- `face_image_url` varchar(255) NOT NULL,
- `photo_id_image_url` varchar(255) NOT NULL,
- `receipt_id` varchar(255) NOT NULL,
- `created_at` datetime NOT NULL,
- `updated_at` datetime NOT NULL,
- `submitted_at` datetime DEFAULT NULL,
- `reviewing_user_id` int(11) DEFAULT NULL,
- `reviewing_service` varchar(255) NOT NULL,
- `error_msg` longtext NOT NULL,
- `error_code` varchar(50) NOT NULL,
- `photo_id_key` longtext NOT NULL,
- `display` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `verify_student_softwaresecurephotoverification_fbfc09f1` (`user_id`),
- KEY `verify_student_softwaresecurephotoverification_8713c555` (`receipt_id`),
- KEY `verify_student_softwaresecurephotoverification_3b1c9c31` (`created_at`),
- KEY `verify_student_softwaresecurephotoverification_f84f7de6` (`updated_at`),
- KEY `verify_student_softwaresecurephotoverification_4452d192` (`submitted_at`),
- KEY `verify_student_softwaresecurephotoverification_b2c165b4` (`reviewing_user_id`),
- KEY `verify_student_softwaresecurephotoverification_35eebcb6` (`display`),
- CONSTRAINT `reviewing_user_id_refs_id_d6ea4207` FOREIGN KEY (`reviewing_user_id`) REFERENCES `auth_user` (`id`),
- CONSTRAINT `user_id_refs_id_d6ea4207` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `verify_student_verificationcheckpoint`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `verify_student_verificationcheckpoint` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `course_id` varchar(255) NOT NULL,
- `checkpoint_location` varchar(255) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `verify_student_verificationchec_course_id_2c6a1f5c22b4cc19_uniq` (`course_id`,`checkpoint_location`),
- KEY `verify_student_verificationcheckpoint_ff48d8e5` (`course_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `verify_student_verificationcheckpoint_photo_verification`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `verify_student_verificationcheckpoint_photo_verification` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `verificationcheckpoint_id` int(11) NOT NULL,
- `softwaresecurephotoverification_id` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `verify_student_v_verificationcheckpoint_id_1df07f66c1a9271_uniq` (`verificationcheckpoint_id`,`softwaresecurephotoverification_id`),
- KEY `verify_student_verificationcheckpoint_photo_verification_c30361a` (`verificationcheckpoint_id`),
- KEY `verify_student_verificationcheckpoint_photo_verification_fdc8dba` (`softwaresecurephotoverification_id`),
- CONSTRAINT `softwaresecurephotoverification_id_refs_id_5efb90e` FOREIGN KEY (`softwaresecurephotoverification_id`) REFERENCES `verify_student_softwaresecurephotoverification` (`id`),
- CONSTRAINT `verificationcheckpoint_id_refs_id_9a387f43` FOREIGN KEY (`verificationcheckpoint_id`) REFERENCES `verify_student_verificationcheckpoint` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `verify_student_verificationstatus`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `verify_student_verificationstatus` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `checkpoint_id` int(11) NOT NULL,
- `user_id` int(11) NOT NULL,
- `status` varchar(32) NOT NULL,
- `timestamp` datetime NOT NULL,
- `response` longtext,
- `error` longtext,
- PRIMARY KEY (`id`),
- KEY `verify_student_verificationstatus_a631e438` (`checkpoint_id`),
- KEY `verify_student_verificationstatus_fbfc09f1` (`user_id`),
- KEY `verify_student_verificationstatus_c9ad71dd` (`status`),
- CONSTRAINT `checkpoint_id_refs_id_70d70b21` FOREIGN KEY (`checkpoint_id`) REFERENCES `verify_student_verificationcheckpoint` (`id`),
- CONSTRAINT `user_id_refs_id_bfc6370` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `wiki_article`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `wiki_article` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `current_revision_id` int(11) DEFAULT NULL,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- `owner_id` int(11) DEFAULT NULL,
- `group_id` int(11) DEFAULT NULL,
- `group_read` tinyint(1) NOT NULL,
- `group_write` tinyint(1) NOT NULL,
- `other_read` tinyint(1) NOT NULL,
- `other_write` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `current_revision_id` (`current_revision_id`),
- KEY `wiki_article_5d52dd10` (`owner_id`),
- KEY `wiki_article_bda51c3c` (`group_id`),
- CONSTRAINT `current_revision_id_refs_id_bafac304` FOREIGN KEY (`current_revision_id`) REFERENCES `wiki_articlerevision` (`id`),
- CONSTRAINT `group_id_refs_id_108bfee4` FOREIGN KEY (`group_id`) REFERENCES `auth_group` (`id`),
- CONSTRAINT `owner_id_refs_id_9e14b583` FOREIGN KEY (`owner_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `wiki_articleforobject`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `wiki_articleforobject` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `article_id` int(11) NOT NULL,
- `content_type_id` int(11) NOT NULL,
- `object_id` int(10) unsigned NOT NULL,
- `is_mptt` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `wiki_articleforobject_content_type_id_27c4cce189b3bcab_uniq` (`content_type_id`,`object_id`),
- KEY `wiki_articleforobject_30525a19` (`article_id`),
- KEY `wiki_articleforobject_e4470c6e` (`content_type_id`),
- CONSTRAINT `article_id_refs_id_5099436` FOREIGN KEY (`article_id`) REFERENCES `wiki_article` (`id`),
- CONSTRAINT `content_type_id_refs_id_37828764` FOREIGN KEY (`content_type_id`) REFERENCES `django_content_type` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `wiki_articleplugin`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `wiki_articleplugin` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `article_id` int(11) NOT NULL,
- `deleted` tinyint(1) NOT NULL,
- `created` datetime NOT NULL,
- PRIMARY KEY (`id`),
- KEY `wiki_articleplugin_30525a19` (`article_id`),
- CONSTRAINT `article_id_refs_id_92c648ca` FOREIGN KEY (`article_id`) REFERENCES `wiki_article` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `wiki_articlerevision`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `wiki_articlerevision` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `revision_number` int(11) NOT NULL,
- `user_message` longtext NOT NULL,
- `automatic_log` longtext NOT NULL,
- `ip_address` char(15) DEFAULT NULL,
- `user_id` int(11) DEFAULT NULL,
- `modified` datetime NOT NULL,
- `created` datetime NOT NULL,
- `previous_revision_id` int(11) DEFAULT NULL,
- `deleted` tinyint(1) NOT NULL,
- `locked` tinyint(1) NOT NULL,
- `article_id` int(11) NOT NULL,
- `content` longtext NOT NULL,
- `title` varchar(512) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `wiki_articlerevision_article_id_4b4e7910c8e7b2d0_uniq` (`article_id`,`revision_number`),
- KEY `wiki_articlerevision_fbfc09f1` (`user_id`),
- KEY `wiki_articlerevision_49bc38cc` (`previous_revision_id`),
- KEY `wiki_articlerevision_30525a19` (`article_id`),
- CONSTRAINT `article_id_refs_id_5c88570a` FOREIGN KEY (`article_id`) REFERENCES `wiki_article` (`id`),
- CONSTRAINT `previous_revision_id_refs_id_a951e36b` FOREIGN KEY (`previous_revision_id`) REFERENCES `wiki_articlerevision` (`id`),
- CONSTRAINT `user_id_refs_id_fbb26714` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `wiki_articlesubscription`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `wiki_articlesubscription` (
- `subscription_ptr_id` int(11) NOT NULL,
- `articleplugin_ptr_id` int(11) NOT NULL,
- PRIMARY KEY (`articleplugin_ptr_id`),
- UNIQUE KEY `subscription_ptr_id` (`subscription_ptr_id`),
- CONSTRAINT `articleplugin_ptr_id_refs_id_cbce00e3` FOREIGN KEY (`articleplugin_ptr_id`) REFERENCES `wiki_articleplugin` (`id`),
- CONSTRAINT `subscription_ptr_id_refs_id_ae89f475` FOREIGN KEY (`subscription_ptr_id`) REFERENCES `notify_subscription` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `wiki_attachment`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `wiki_attachment` (
- `reusableplugin_ptr_id` int(11) NOT NULL,
- `current_revision_id` int(11) DEFAULT NULL,
- `original_filename` varchar(256) DEFAULT NULL,
- PRIMARY KEY (`reusableplugin_ptr_id`),
- UNIQUE KEY `current_revision_id` (`current_revision_id`),
- CONSTRAINT `current_revision_id_refs_id_2198feb4` FOREIGN KEY (`current_revision_id`) REFERENCES `wiki_attachmentrevision` (`id`),
- CONSTRAINT `reusableplugin_ptr_id_refs_articleplugin_ptr_id_6644e87a` FOREIGN KEY (`reusableplugin_ptr_id`) REFERENCES `wiki_reusableplugin` (`articleplugin_ptr_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `wiki_attachmentrevision`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `wiki_attachmentrevision` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `revision_number` int(11) NOT NULL,
- `user_message` longtext NOT NULL,
- `automatic_log` longtext NOT NULL,
- `ip_address` char(15) DEFAULT NULL,
- `user_id` int(11) DEFAULT NULL,
- `modified` datetime NOT NULL,
- `created` datetime NOT NULL,
- `previous_revision_id` int(11) DEFAULT NULL,
- `deleted` tinyint(1) NOT NULL,
- `locked` tinyint(1) NOT NULL,
- `attachment_id` int(11) NOT NULL,
- `file` varchar(100) NOT NULL,
- `description` longtext NOT NULL,
- PRIMARY KEY (`id`),
- KEY `wiki_attachmentrevision_fbfc09f1` (`user_id`),
- KEY `wiki_attachmentrevision_49bc38cc` (`previous_revision_id`),
- KEY `wiki_attachmentrevision_edee6011` (`attachment_id`),
- CONSTRAINT `attachment_id_refs_reusableplugin_ptr_id_640583da` FOREIGN KEY (`attachment_id`) REFERENCES `wiki_attachment` (`reusableplugin_ptr_id`),
- CONSTRAINT `previous_revision_id_refs_id_41bbf5` FOREIGN KEY (`previous_revision_id`) REFERENCES `wiki_attachmentrevision` (`id`),
- CONSTRAINT `user_id_refs_id_2eaca84c` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `wiki_image`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `wiki_image` (
- `revisionplugin_ptr_id` int(11) NOT NULL,
- PRIMARY KEY (`revisionplugin_ptr_id`),
- CONSTRAINT `revisionplugin_ptr_id_refs_articleplugin_ptr_id_fc42a0b1` FOREIGN KEY (`revisionplugin_ptr_id`) REFERENCES `wiki_revisionplugin` (`articleplugin_ptr_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `wiki_imagerevision`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `wiki_imagerevision` (
- `revisionpluginrevision_ptr_id` int(11) NOT NULL,
- `image` varchar(2000),
- `width` smallint(6),
- `height` smallint(6),
- PRIMARY KEY (`revisionpluginrevision_ptr_id`),
- CONSTRAINT `revisionpluginrevision_ptr_id_refs_id_5b9fc791` FOREIGN KEY (`revisionpluginrevision_ptr_id`) REFERENCES `wiki_revisionpluginrevision` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `wiki_reusableplugin`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `wiki_reusableplugin` (
- `articleplugin_ptr_id` int(11) NOT NULL,
- PRIMARY KEY (`articleplugin_ptr_id`),
- CONSTRAINT `articleplugin_ptr_id_refs_id_4ca661fd` FOREIGN KEY (`articleplugin_ptr_id`) REFERENCES `wiki_articleplugin` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `wiki_reusableplugin_articles`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `wiki_reusableplugin_articles` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `reusableplugin_id` int(11) NOT NULL,
- `article_id` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `wiki_reusableplugin_art_reusableplugin_id_6e34ac94afa8f9f2_uniq` (`reusableplugin_id`,`article_id`),
- KEY `wiki_reusableplugin_articles_28b0b358` (`reusableplugin_id`),
- KEY `wiki_reusableplugin_articles_30525a19` (`article_id`),
- CONSTRAINT `article_id_refs_id_2f51faad` FOREIGN KEY (`article_id`) REFERENCES `wiki_article` (`id`),
- CONSTRAINT `reusableplugin_id_refs_articleplugin_ptr_id_44b45e30` FOREIGN KEY (`reusableplugin_id`) REFERENCES `wiki_reusableplugin` (`articleplugin_ptr_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `wiki_revisionplugin`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `wiki_revisionplugin` (
- `articleplugin_ptr_id` int(11) NOT NULL,
- `current_revision_id` int(11),
- PRIMARY KEY (`articleplugin_ptr_id`),
- UNIQUE KEY `current_revision_id` (`current_revision_id`),
- CONSTRAINT `articleplugin_ptr_id_refs_id_cac31401` FOREIGN KEY (`articleplugin_ptr_id`) REFERENCES `wiki_articleplugin` (`id`),
- CONSTRAINT `current_revision_id_refs_id_44938e26` FOREIGN KEY (`current_revision_id`) REFERENCES `wiki_revisionpluginrevision` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `wiki_revisionpluginrevision`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `wiki_revisionpluginrevision` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `revision_number` int(11) NOT NULL,
- `user_message` longtext NOT NULL,
- `automatic_log` longtext NOT NULL,
- `ip_address` char(15) DEFAULT NULL,
- `user_id` int(11) DEFAULT NULL,
- `modified` datetime NOT NULL,
- `created` datetime NOT NULL,
- `previous_revision_id` int(11) DEFAULT NULL,
- `deleted` tinyint(1) NOT NULL,
- `locked` tinyint(1) NOT NULL,
- `plugin_id` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- KEY `wiki_revisionpluginrevision_fbfc09f1` (`user_id`),
- KEY `wiki_revisionpluginrevision_49bc38cc` (`previous_revision_id`),
- KEY `wiki_revisionpluginrevision_2857ccbf` (`plugin_id`),
- CONSTRAINT `plugin_id_refs_articleplugin_ptr_id_41bbc69c` FOREIGN KEY (`plugin_id`) REFERENCES `wiki_revisionplugin` (`articleplugin_ptr_id`),
- CONSTRAINT `previous_revision_id_refs_id_78fffe43` FOREIGN KEY (`previous_revision_id`) REFERENCES `wiki_revisionpluginrevision` (`id`),
- CONSTRAINT `user_id_refs_id_32d8f395` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `wiki_simpleplugin`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `wiki_simpleplugin` (
- `articleplugin_ptr_id` int(11) NOT NULL,
- `article_revision_id` int(11) NOT NULL,
- PRIMARY KEY (`articleplugin_ptr_id`),
- KEY `wiki_simpleplugin_b3dc49fe` (`article_revision_id`),
- CONSTRAINT `article_revision_id_refs_id_6df37b12` FOREIGN KEY (`article_revision_id`) REFERENCES `wiki_articlerevision` (`id`),
- CONSTRAINT `articleplugin_ptr_id_refs_id_a25cbfd2` FOREIGN KEY (`articleplugin_ptr_id`) REFERENCES `wiki_articleplugin` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `wiki_urlpath`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `wiki_urlpath` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `slug` varchar(50) DEFAULT NULL,
- `site_id` int(11) NOT NULL,
- `parent_id` int(11) DEFAULT NULL,
- `lft` int(10) unsigned NOT NULL,
- `rght` int(10) unsigned NOT NULL,
- `tree_id` int(10) unsigned NOT NULL,
- `level` int(10) unsigned NOT NULL,
- `article_id` int(11) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `wiki_urlpath_site_id_124f6aa7b2cc9b82_uniq` (`site_id`,`parent_id`,`slug`),
- KEY `wiki_urlpath_a951d5d6` (`slug`),
- KEY `wiki_urlpath_6223029` (`site_id`),
- KEY `wiki_urlpath_63f17a16` (`parent_id`),
- KEY `wiki_urlpath_42b06ff6` (`lft`),
- KEY `wiki_urlpath_91543e5a` (`rght`),
- KEY `wiki_urlpath_efd07f28` (`tree_id`),
- KEY `wiki_urlpath_2a8f42e8` (`level`),
- KEY `wiki_urlpath_30525a19` (`article_id`),
- CONSTRAINT `article_id_refs_id_971759c9` FOREIGN KEY (`article_id`) REFERENCES `wiki_article` (`id`),
- CONSTRAINT `parent_id_refs_id_52d1e703` FOREIGN KEY (`parent_id`) REFERENCES `wiki_urlpath` (`id`),
- CONSTRAINT `site_id_refs_id_f4bbaaa2` FOREIGN KEY (`site_id`) REFERENCES `django_site` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `workflow_assessmentworkflow`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `workflow_assessmentworkflow` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `created` datetime NOT NULL,
- `modified` datetime NOT NULL,
- `status` varchar(100) NOT NULL,
- `status_changed` datetime NOT NULL,
- `submission_uuid` varchar(36) NOT NULL,
- `uuid` varchar(36) NOT NULL,
- `course_id` varchar(255) NOT NULL,
- `item_id` varchar(255) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `submission_uuid` (`submission_uuid`),
- UNIQUE KEY `uuid` (`uuid`),
- KEY `workflow_assessmentworkflow_course_id_21b427c69fc666ad` (`course_id`,`item_id`,`status`),
- KEY `workflow_assessmentworkflow_ff48d8e5` (`course_id`),
- KEY `workflow_assessmentworkflow_67b70d25` (`item_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `workflow_assessmentworkflowcancellation`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `workflow_assessmentworkflowcancellation` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `workflow_id` int(11) NOT NULL,
- `comments` longtext NOT NULL,
- `cancelled_by_id` varchar(40) NOT NULL,
- `created_at` datetime NOT NULL,
- PRIMARY KEY (`id`),
- KEY `workflow_assessmentworkflowcancellation_26cddbc7` (`workflow_id`),
- KEY `workflow_assessmentworkflowcancellation_8569167` (`cancelled_by_id`),
- KEY `workflow_assessmentworkflowcancellation_3b1c9c31` (`created_at`),
- CONSTRAINT `workflow_id_refs_id_9b9e066a` FOREIGN KEY (`workflow_id`) REFERENCES `workflow_assessmentworkflow` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `workflow_assessmentworkflowstep`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `workflow_assessmentworkflowstep` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `workflow_id` int(11) NOT NULL,
- `name` varchar(20) NOT NULL,
- `submitter_completed_at` datetime DEFAULT NULL,
- `assessment_completed_at` datetime DEFAULT NULL,
- `order_num` int(10) unsigned NOT NULL,
- PRIMARY KEY (`id`),
- KEY `workflow_assessmentworkflowstep_26cddbc7` (`workflow_id`),
- CONSTRAINT `workflow_id_refs_id_69d0b483` FOREIGN KEY (`workflow_id`) REFERENCES `workflow_assessmentworkflow` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-DROP TABLE IF EXISTS `xblock_config_studioconfig`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `xblock_config_studioconfig` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `change_date` datetime NOT NULL,
- `changed_by_id` int(11) DEFAULT NULL,
- `enabled` tinyint(1) NOT NULL,
- `disabled_blocks` longtext NOT NULL,
- PRIMARY KEY (`id`),
- KEY `xblock_config_studioconfig_16905482` (`changed_by_id`),
- CONSTRAINT `changed_by_id_refs_id_6ef7f7d7` FOREIGN KEY (`changed_by_id`) REFERENCES `auth_user` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
-
-/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
-/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
-/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
-/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
-/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
-/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
-/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-
diff --git a/common/test/db_cache/lettuce.db b/common/test/db_cache/lettuce.db
index 3bd9676090be6d130549e6a348fc13cb1ad4c49b..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
GIT binary patch
literal 0
HcmV?d00001
literal 654336
zcmeEv31Az?dG5?EK-jV++p;BCq9}o+C<>xT;yxtHGEGsktjm%t+wuj2z>GvIt{LJR{gE|EA`*hpQ=Arf1rL(
z{f_!g^{eWis-IRrrhZU;kNS4?&FbsaSE?^jA5-h}E
z=_kS6svn1p|Chc8+`rJH;C@E$2KSTt72tkQSHS&11)LY$1J2%~;0%p`Gq4q$Eq)Tb
zT)6{W<$(Gl^=s-Msk7=)bwuq}FIN6q`GoSgaz70Q3i&4ym=^*{a;--RE9ix}6WP+F
zmdTZ8Dpl=NA+MG3o1yOhu-BuED(Jb{d_GgH&E&OGtyakvN`=zo>2l@dM6rAt>p=I(
zD?PYRsc|mVT)Cp*yTQM{)`O!;fkfA)#Jb16N
zm8Z-`ocxe~5&?<8g@nK|l36-8zmRe*^C}UL2oMD1
z_g~fniNJ-6fc*YnxMeSME)kI5e_0140v9d<^80_`mc7imM1Xw%z39UTeHed1@u(Zs
z`_6w%>MO9%KQMr2kJhr|MJ+p1JCT{zDpLj6fPqaN`>Qf~WNhT-vB1qE*Y6(-^f*F$
z0-Kiw;IF5U?+Fx2HEmL>1P&g$IdJgU{{4ZQj_f@!a^!em-`Mf3jI5NM(s}}?vK81z
zscepif+jI1$d!Rfsg@y|Lm4-wCLQc{*_eex4cv|$+#n4k6C!qy(t0JDvi|O>v2K1
zfoQ%UGX^cdvkKc4;=qxy-D5|_4vvl;bt`aE)60+p(c$0I-9|~XHbhI;SMT@v{39cH_PAA|WMei%9ji96Cgd7&kxPlY63({hMpFw1n3+*Ss;ghFz@Rf3eR$IEZKa9q`lA5kP0}mo|f%1urzflxv&4
z6r}|L+&U-$R+A-kO*@x$_>T_GjVQ~Uh$Hh^F6aMGUvDBgO9ak$1myhxd@ms>pG4s4
zLqLB2pFV6QXNkc1j)46BpYJ6k<&y|JeF%{6zoNVoDeqK2PX2rPQhKVK@z-UtQ8-_XUI;Yr?e_E!VCI`)
z8-DDCaHQ{Xx&9|$DSt`?E-(b-`rids;4-@s0RaK>{qI0vkZ2pm_*(okG5U!f8;l$QndQ!AOGuaAmbEfdY)
zslp_)hI0b!;*=|A-F^M`Ot=%xH$P-$%Pwyu9&b>oHU+dY?nVa8iUkeSxLpca-+!gg
zpG@L+e69MHK{Q$Jh
zo%(g)uFwS0OZWIK#L6dry?zzAuh3x{kDse!aIXO)qUg6^85I3p2Aq!_0q5hp
z!THnp3Y4Q~itc82>{~1OatSuy#>?fRxf94YU9vUMz?!aA8?6Bu
zhI>wExszlM5lF~>G;7o(m4iRC|0C`H+j~9vCK0$$5Rmi#3#FuG
zJ|zN;2*~!|h>7%(2wW%#koK>lcOdi*`~~&wd7JBc=Ng}X&mKG*Z#EMoN1E8o&}AZM
z1#Xyg9%#|dcN$1ywrT2-kOF(b(qm7qn1xk^JZ0cE3CtI&)5YxB#_(mq+3;Fw0`t*T
zB0AapRH2lCn;tnJ=6km*24?Vlvz^V6%Pccws_&wF%jc+15gXy0zYSs0(l5`ZXcNEz
zae4e+Emt!UB0U2AFf-bhF8y0p3us%qwG&^iEXS7%>8OkM`#;u2W(d|9BYwWfLGSi~!KGUNGdJe-T>tgB$e;E>DQuQ?B4
z3fMqIW`fLTRw7H$
z>3RZnEaGZrVtgVON>8xcSzJk?E`quen!E&IT?q-8G=O3`)W<|UHkYUd78Flc#<8|V
zHF&inss)#v|6jQMk<7V7fFdC0|FR-T1TI_zWc$Bx%UCo>L`RVwZXq_2GhhX+P|Uz(4|&ZQwwbSy@XHdo
zT7;8I>{AO)f6&rhOHC3vq@1ROG&KS=3el7{WXWSV~R*B}c@)zJj
zm|7@F(Hb7R^V?EU5iQ4o*kH-7FhLFA+0Hcu>$@IAD9ezOMEs15!8;MN4m1Vz
zBadC>^A8W>I=gmW1dN`+YVhc5jvbA#fT*=PX9bwq&R8XcN=5a5{OAS**1q1YKB(TU
zZc|q)zft~5`Ka=iurQS!PQ=r#=|61HlKIK057|R#`G#L8pGQOIb5Ei)wF7zUObP=q
zLSeuJzt>*wMSZx-M27@ZOyI|+%e*LzgCc)sc-3np!Cp75FzJj`IGvFYdkri%r6HN*
z_D#JsIYu#jsTXa>VIf7XOBSe|oz^@&S?))?hA%NA@T6@Kc=|$w;4&|Y;{hYTHfkb>
zKpME%6qh9&AS>u97lQl_Tx3%4)F}l|mHb}ov%yP)NiyU|Plp!`;yxj>bh||13DB1w
zuSvsGU^F}l`m)aBMg4e#ktIez5~07gs$P_2)t~3WTAar`Da&W8Vp8+;tT4V
zv*01UfE9pA^42T){;xuNkoqDel++|!Y`m%1o1_mP_($HUtEnYN=lLF+VAOfsY4Uk=u6+-bcZ{nK>
zn(;U+4e_`T#NUb++U!L;SbZh{HAEtU*<%Fz&HBlU3v_D(TB%k!yPS `rr9$t2}M
zS)^PVgS5BLi-uWMBXU@DL;!xnQ+bKLbD)sFQ~-vlKo9kr^dcw*y#NTK
z-`qpwrQL}MhCyrq!8v!6E?evdgkiuXToA!)C}7faNrb>lxFCYp<_%sHwK@SIXTQxOkr6I;XCi+PG-
z0P#<+HKX#xMG6*`3nB)PsL?gHZ;lwu;t}~oUmEFZGZGgSDm;t|%}+3wllk&bFq!}N
zp|2qL_xI>mcm-aM!*~}yiZy&1zZhEoXYjZ1kMM7mWy(5bNZG4QD$i5isC-QMw(@iJ
zQgsWA7Y?ZRsHfDIs_#_)Sp7@&XKvlYGvIfX2M4jEbHjcQ9>$HGqr&`+a?>hPFlq!H
zcJ(q3-hdSXF72Q_D?PXmE4+}XmzR0*sMM=tg$H+GmBb>g(szXi_hOYtB0d)}A0CJJ
zT)fJI2e5}k5x#26uJ!=<9v)K&xP%38213B4l(YDmUQTiFavuCUzJhu3_}ud{Dz-VI
zxSX;Q#~)WPA0rlwI##ar;5haXv7G~+E4w^+JNEH(ouOB;P|nI3x{4OZMTD)bZmy=u
zxsDwDEXa^ewBvm>4Z4_cbGDE*RE&$ckj~JxER^$fhIZ1rVRa1aXhm4YdC|V2i+OPd
z)N4I0XlK{8ftIIB?-yVJoP*HWb<+~Olw^w3AJ!N5P~0x%B3S;t%%5|y{5MkhmJ=q%
zhoz6S|6cgC!@uvMf5n&L%{Ybk;k$8-w*HUcFX6w&KUEavYH0m?U{vsc@_Wh?%D15P
zU!wM^*Q&?WY4wF*8Tb=mE%>L;Ks$FPK>>DtfBPwpD-5`-um0vv4^HA00%TTLkcA1b
zSz%jf>0d?|(sCW3P}+t!TbY+w`h!%s%SkMuEQhFYmvb3}fMFKUSo$H_RIea>$RbFX
zHq0wH1L6~5K0GGziBf4+k|?!o^(5GA$;PNOD|s}-H_m){RKqtxeXlg4SG5}9kfZ`$
zDRAHcDHb3w;Q?vd7_TCHi1CUFTvA2M+7mM^+h}vUiZgSDZfBvKqcilHH69$rt0*89
zI2)85H@NOt=fP>b%D~1Rcr6PwV6q49q^)K(;R(azLOEZ^5j3jT(JZXy9Bn}(EQs^7
z1zo?|g9owS$!(Mh?ss9fi-oxG8lz=#HDPtSTsaAY*cx18v717EHRmJ*>|p_%kq~gh
zl^)!W*APB5V}#3IHvYdAsozsSsMggZYC^qA`K9ut@@A!`j4GGnzr^o?k-!-4L_a~F
zM8AV>bv8iP_vnZ@7GV;S83@HRK+|@GbMQLba)2X-6Uyq)PBO(w3p0isE74W%1w3@E
zNzY|6=sAe|)u>9FcaSM$)R?>(#6%7UW#}3*XcZSGj0$@d7sYrtc!#!|F}N%SMY9I6
zWg8jF(ghZffSQ6Kt;w}%#nWE2$2Lf>W>3KhH9A}gRJ7_$v34bwj1~uL-tm+fjSJ-x
zjbkN58%}!Bh&5z)iDOndmd=(0naR?LJ`;l0i2$wED+RGgm$M~q(sG$d%A8h^h0tz{
zkpiZ(b^?(=Xb3>40#S2ifTvFS%PV-g1y7CqUK_Tp9nfHs2Kg}*GG{!T
zztF{B&XWK<59d@&JN$z5lD$7lXu7#wCJ)jyC!HJ3;NM
z+i_NoE>pN2=3@bIu2v)3z#)s={D%9c2lrTPqI5&4>2W>W&qU~T7r}NQQ%EB*hX_VI
z=Yc#+1p14fzusTr`%RX8))jAxU_47Q7K
z(Et-6O!vVWL@;ina0YCjLj)sUa}oGqCVKFmZij)wT6vLFKxiosKf9uiJ>}%(_x~wF
zC>clu7A*p@{V&?0lY&bGo-zVN|4&iAjntdLk$)0_#gD*4kHKA$I|miL)7_k0BA(Ai
z^N}1o-EG;KQy#X@W}M*}BO;s4ID^TAik$xg({Y<0yIQ=kK%^uyQ1(s@{~H$;G$+~7
zT&O0z8pX2{+Gc+8`@i@ryv%__;9L027wQx06Z7Y%?~1^bYbUPz`33Yju+Lk8yXqY_pYr!M2^i(G9Bw_k
zDIJ-+v|~ma%pRWYp+<5h!2sgHLpKKw9^1bktYkBzLY5Kjh-l&&GX9hKXMRz}(EDRP
ze;O_%EZ9rTFuFwT`B!y#BS(%0_Kh8f
zA}MC8wam;kn6T7(h;>Vi7_&BsgZttg{!AJpHkrS#2zCg`oV`rnGwvd0!tVZi^s$uB
zACKeupgr4ynJhD=;J2?ymIabFYvze^wN}bbK~4=L;}Ow-d4L(RH&8jDWh=FDEej}G
zz(7R~?n!s}?}*O{iXfi=iQv0me*YI`^OZtN1QrAV+5Q&wk-~*rd=B
zfdxT8w*LizQ8JMTEJ_4q`(KpBCWV#=EC>R!{VxcNl8HoMQ6eDM{}yGjNuebI3xa_B
z{x1lOl8HoMQ6fOv|4MfM@0-+tjc~NW(|TU0M7Rqcef2GP&lB->ge68w*rtrlzu$vjMoKzL;Of?^8O%=;#>*LdA(F
z&7mV+l)(p#E4b$7NiJb(#qj#WUUUeL3U`K8YcqLJQ!%9F_jh;lJCb-P6Oo5qf0N0B
z=d}qBoiZrox=51O~D@r#}84A#0yA3b13aus{6o4AAfZCA26
zl4+2yZy&iiYfylf=n<{q;!vF;Qp9~Xnq*uQO2!2+$u{gIw`}zrAW<5Uq)8CGf!v)e
zUPjDRTdw8_3W_elJtiqnl9Td81=8N#UKF(MGvjn5VSy+-My`*hm&5TQFw~#uy<>hZ
zf#FF+4(~Ffa1o497KKYNQO2mM9@?xvlOfxT3DeF5HTIW8t|W*7FDh+{lRQyvf2}y~2Z0@ApyE0QE+HpN_iC?y8NKnygm4XJ0iMpjj
z-;q^W3WpiW#5qyOL&w(>7%!KB6VG9AbbE*Y*6^H)WoC&9YGtP1LEV3?&%Y;*^_|?D
z2-o@)+D}FsPi1pSEoRmdA@B&VC)~on8;Kd;FfG!U1gT6^x6sm}3+f#^eg4rf*8A*|
znX+f1@%Z>eE|N48HG_^ek;)`6<2qzA35Z0j?gn-5bxaU;^FU*2nRq0Wj^z_tW6-fV
z1u^2b5`@_
z=TfE-x7AW6U$77A%dTgV3^tP_5}L@x$5Ym-v$-~V>ztApaa&1ZEw{r8@2Jl|(rT$W
zmkv*a$0r(5xou8ac+^&+@b&%RBb~c^{$vtA|CoKBM%-sIMG!rYb19rQ8AKYgqMfUh
zOTb#(W8k|m))q{JZm(F|C~liCJk;8u(ax|fF*_UJEpE72Jhf7Gyr{vxk8MYT?5~t(
zYK78d=A;HTAyOd(0IfC!
z8hnjD*V<>qjRa&m%sJRJ5S!R|b5+3$7_+kwnV!P5&(Pa*Oz+6lFkddY+0288cAY{#
z@e7XbZKd7Un4e6z(Ql{j-6t+=G*V>v>O^D6_4b90Mgk)$Ti9p}Cjc7@8};iC`20I|
z;71%rC;56rHFrWI3h3tAhQoiCy)c`R(G<%w6>H_dp>CSbp3RgeGE=Y!a>AX+EYbcg
z{ZKSK!f8zd4|5-CWT4T-=xARxd0=Kz|F
zA`w_32$1i;ivA0s|5DZ{w=I!O&7F<6*p(uoWP^wp
zb(jGI9L5$)oEQ_alr+hfU_1MPRNb@ro}R-d2y7*>^hIkV;=UgcobwK2aL1tz|KWjV
zJFN~3Z2N>nsKc{;8r__G-dzk}*g>mmU@1kj8#DraSy%rX9FR95BiQG_6iSV#{ko~g
zPFAvTBR92{0%&maMWU{+SWIB$sQ_lDny}(VX9(B?`RtjDojJ1+m8qSb7WUer5nDyz
zG@@}D+tx5JW{9+?Eynh6Kix~D8^A`jOIe9oyMv`HA#AceNbP@k(9HwNJ|%m#^rwkHvxpfd+ne_P&?ZEn2>s(Jv#8UZ`7H=l+A)dRrvSsj@LwwRg
zXx51M!TRPCKL5Ubcy^DoS(Yaz;F3NqSDu=N-Qqm0+k%L0!FM%nq;Axtt%|kK=pP-o
z0TMfKL{wAl!JxCDZT7Sc&8M+9VCIh41%pl6HqC8S1I>N2FAeIsg3o{7KDg7;S)OjW
z%W%0fz39{D%+Y+1_@hti|%=9P=)q
z$jocv3K80zyP8u!YbCJl`DqoV-le>|5#JJDfp7^8>erm~`S03?^}E`drcQuy+faHU
zJO@bGri&16v&)RZwY|A0ECd*n(V%{9k%^yePyEKk6E}gz=P5qt+P3&sK?D9%^T9tF
z2`45d5~(@x&&@9b2G{m8z?Vs+{{Q*c;Yo=k0?!x%a{m8}K`j%K2%L8a$o7BU6^Rr`
zBJhkMAlv^l2DMB`B5>Xzz}EjBMd(pH3O9iL?Xx4GzOCf*-vNtQceJ$%l*(pvkw|)u
zHI)4P)=)UpwwF*0g_59tW7+4=9mYBsTF8UVN=uQ*ZE1=uKN_k#bCXWYD-R;?w(`N3
zHklk$K}f%0nq{WYZf1AHaw+Os??09q3Fj}m6>9bp`B*wrMan2i5gXcAsM;;_w00d
zGF6Gdd4Yf&|DPAdAcc?!JSzyu_W!KFE)$gqoEHeN^MBI_P2;yIZ+-ejs)zL}m^#k^
z=dA1uo5Aq;OrbPUhQnAz@fbxDiel5bS(6BJPS1=vl{jk>&Y^&yEe?vE$`;8T5w;3_(I%>`D~&}`ZnM@{F`kub!>9H3V}*`-
zV->Kac;+B!R<-2!|LO1ZWC{|2^A!Q9|9`%gjFd|v@bn`f+yB##u}ncCaK0iS+yD7m
zGEy#yz|)TaTmO3qp@;AvD!+XC)3c{g59+Hg^6Q;PalPDnWy@NHv8^--t0S3=wG7h6
z3eoiZ7P{t_{v69*7PE$RFCjz3zL1qAu-!AN`$0?U4m{gnQ;V;vkyCY4bEG;mHI=QL
zZL$>RN_KLtzoIKgl(=#+{x|$}`~-eAz88<;_2@s)ljuF@
zWe};&zb$LMDA?W4H+TbVh-(eexj*w>yT*%Fb!{LPbB!Ar>4lnLU{_mzwHK}F>OEbq
zoYX2tD0`!$-c5cl>hJ0^Zuty|Obk!rw|OQr`_FV2oy`8<;YPFmzWNV-@&I1LX
z)t7mZztdkTmvTl_`g_X?FB;;ljRI~16!|z0|{lXgO`BJVVlei)Pnfk
z%Ru}v7r%j!<|KNt7Y+9hPFK(7PLu(xN+CyV17}5#s`x?z`!9kz(b*4TfwFxdSE%G>
z3N`*8$VA_=kH$oGFOdMAQ^pF!V6zr@S&R(udoqru<
z=Ilp;9()w9<4LumJjy6}lC3Cj?(yI;+$AKYy;ITjLM#51J$h*
zi}j7knTlPvZS>&1c)e?CCed+5OaW_xH5jf5Q
zId4Z`jy9kk!jrIqk4hwk-~*rd=BfdxT8w*LizQ8JMT
zEJ_5HD?YgY>j{LOzz^d;Q6C`xErN{byYx<a6a7h+fmTB;q
zvF~p;gp-|Y@sNaZ+^5~^X#(uT3~aAvbG5=LDn#a_cGlX47Vm=M)WH#bU5EeJaI#@(iyT{!Bk-RKC~NySS*|lg+^f8xqFA5L5ecqn_{p-SgwE)q#KJ!
zIuVUU_Q6(k_hCDWWF}iImQQC&GsR+t+hNNTN*TVN=f*4?j;15=eXvpOWR}RV%W93y
zO5@hk7R*A4a6Fcnxwr#$>%Df-;$$bioS}Ji+p=OIGo`|PGn(tZ7%QNhTOOdCV(H`|
z*c9(RZcjBP6pC&4)Vlbxfng{;l#a$ziRiVkdETA0GmK`)jmPXV-Apc!%&ii8YnfmMhnLi>2wk{8xC=|<_iiR?53(hsYa5@rAhLW&9Z;u$woQgmVpnKBp5o4)zIFf{2e0#(QM2xqJ
z7)qv-(Qp)Y`n&o>QCs9MHIz;!Qqd%7|CgejNd1snRQ_9eR2fxP;*aAq_*(Q;q(eaK
zzw0)EGQ-FSuLz+~gjEmLW^!7k26i%Xuu?N~FWF@SZ;4a7f?~rR50<6SYhZ
zbRgh1SaDwO$|xL5$0C)D9jFu9h$Rcu46}i-o=YoL%EjUou%!}eaPctR5oK+p8BJrF
zk)dQbl}g1^y&!y8NHPqED3K5dVhk@Q_4qX(#qT7{4I24UUr`MCR6BA7cWyih%&eF+H
z?$9j2o+_~uLwhsG`9uNkkp^O-nBjXBp3T&XoP&V#R5Opy(W{Gqtos5z8
zzY-ln>KD}0YDD>k@?oW-?1JzAf8#IXH$gwJ8?QwFh(3j03`BGPU9;7Tc6M%O_1{CTzE%h|~27*MlZD1Po
z$Ut2%Z>nsud%X>B<14(`i{hPO&{ZP}5&>-r7;~)-&YK6(5Z0ZC`n@RHIc&rsqaxQR
zB!I=(2pwl%XP?-$aqgnmX6PITI{Qga0QQ8cHKsSn35hT9q-tJ68$r9UbC6P23zH?#
zE(DFVN)E#5<>e%R`7`fc=(+kjdnr9{Gy)~}>4Q$Hzq5}q7
zBtRn+@|@K4C*Fnpbuk}
zSuvIo?D=9r54DjIM%iX|$ehl^j#{oDX9p)?&Tl9oQL`4X66&U)6x0j)pwEALRH^sU
zRd82inLv*0z+pV<1AJRVLeF)zUeO{(^JJLWiWX6+sR{=iLhgh5N`1)Z-?pt;P%Sc;
ziNz)&$y|P-1r4gVBOzT1Fxj<`lV%_8j%U}d+iIG;|EG0#CqpFyOBw+=|6kI@D>Ek%
zXo-Mq|1IH>ff9iwjeu
zZcaImHAdIvL+jjPNjsgPI!)G*MVsZ^c^+-NS&w%3Cr1>-O6|TP*uJ8QYV_Syfo{xu
z#w@kr1)vwUEHR64VGE3|
zKL+ggf*-m$aFE>%&di6pm-W$sWh?j0T3x1IFiWY@_LPA|AdAj2m}8V6i2qBOQlF#FGOIH)lew
z?Bk(yDs}_dMD9E+uulO8%AXvNVthpYuAIWLcr?6?*i4QKoRSc|1V<-p^h{`NBIOo0
zl7d5=>1)80a%WnIo5*NqromKYhMZzy=X_ja$K%OVGyxWtI|qf>aeCb{KRM?bF9fF?
z6WhSrvQ1)kh>gyL*nYlS+;B7rM`*4GL(H9HLYl^59K+J4x!vx{BOFddBfG(DbLRnp
zMlz^D27KR9=rO2MhukX-*;untZ#
zk_aq11jzS)IogfXcd1$RO63d6!%7tY7{2}*?nd83FNdHu{`TJEMYrO;quEk`nI8_g
zAI>7jyEujGiF63wn=x6jlX9(CF^XoaM(_5b!+4ZP1-)@AKBTj5a@g$pyWpf2W70Bf
z8(63-o9pj1d9=*ah8Fp`<_<5~i+8ln%!Xzex$$-{I&Lc<^XM60(Grfpt>;;3ascke
z<0dbjn^wGdmYVR|b(?b_Q(FU*L6<(wA1mw|+NQs8ki@?A91U5!%9c*SL;ZT)m4~!f+9@sZ_oP<=t=p5X0MMk|Y
z@gTI8otS70q2jZwoS~BuB?5~c0XhF)^hGE$AQ3oc1Z4X^XXs=^iNK;qK(_xyUxYFP5`l9@K(_yL
zhE7J52rPO8({Kr3bSMp{mm=ZoL-xZ|QSpQz)yXh!
z^l3ay6&-?WwL;NwewZBj^9iD`3*y)j!egNHaFhLxDB*yiEwoT`xjqU~2_;hT^vy#c
zX+cONoXJWVu8l_ros7+Qc5Kn@
z1YvY2o(h8{k2KuP)ETw7N7BY+Wz$-=QZ1LBW;#O^
zh%)0^?X;$qm>}f9nkAc|=j1M4ED=t}!y|B;lX#6-gxx#FZ)k&ZGp-wQ6Em8Mg_5Z|
z;hrZEzX;sk2vRcTq0B@vJ4p}H!38)PIb6q1HIj>lGS=}=SMK339I&fyCLjps>)a_Ear*X9%m5pW0EmPqroYtiGe<4rX?OYN{1SA4W2mv|%UqXc`vmz0gCjzql
z&l507E)iHl2*~ySB~+L)D-wZuA|Sv2^8`$iO9Yk>0`mL6gbGt;MItay1myRBo`6Ym
ziNF#bLv+gM-TRue4t(HO*}9
zn0FBIcl3Kr?wI1?VlOxE>E_PeRT_>FZ3
z6EG-dOOrF%Nw`mn-><&eNinIF^5otqBRmm=XqLSgE5I4?ESS=PJAgCeg-Y#24_vBS
z({
z|LEYH_fGLL6|Sr@YQgLDyXtrP{K=$Jzm?V-!(Nch=98-@`dxbsawQ_wNX)odU+f4p
ztyhp?Zg`5=3@X*kauqKIgQ7fHo~dOZyigSH^nywo)K}H-^7;2B6+KR^1i6ZtnHZnQ
zh0+sY*HH9Y_bcIS7?~{Wx53$HjQiV26AF^{uj2oQ@c&cSs+y`jwf4XCV*g<2Wl79Y
z-CsZC^T*@L>>*pjBTd1uw`J5u(GR`Ez1fL0Pqo!qy*aU&1Sbc(
zc!qxK?)tL#y+F~XHvSc_GkSN#!Yz5JqI7G(|?mc{LEU@?BuCd!lujGzs>qP7&
z>lCnOvpGzLs!ITa2O}cbzzaozxBsso^cDOGHf{~<}eS%DmM(J8LF&eRIvi0#32d=_+HF&U|>+ol{&-HyW
z(_{I!K2eSU^yd1edY*Lvci9kRwZ^iLX+Y@oN3V9r&`BruI>rP^97yLX8q7X~YjL5n
zHoF4YHYp)?JuNiDA@N3HWAf5}qFgFh`fZKD98Wkqie}L3d+M6cpWA`;2V8my3n`)+c=aefyNzH7)A{
zw>R1>XFM3axV_rJ$=hscj=Pqf1?XCppl0!Dc|d4SP$L9`sg8T0&1x13>UY;Ceg3I^
zO8v5yWzX}Gp%S)H0SuU4IcQh}!fY^_8)i1b(s$KQ(a&n#-i^|USz)p?GhKxd1&prw
zDA4JT-pU2LdF1;2W7cTVNhdZBvx75Nx{U8%h@({-1j7yqSxTgRuGQB$crc>c*=eCWjE9B!8Rl)_xv!BddNXvHbJj4#j-tSD?w!2tX$i@WO
z|KETPBlwp`I(iHG6Z9jDa1Xu_pTIhPGyW9*9{#1WR@tp+N=>4tmY58%eun+cox_7jsC{Nc4<rW_XZ&}SAj2W1)`l^
z5BYZsU|i310(L_1w5C;zoIeMk8*CB=+@~H|<>_7{gjZ(9D}~%C$j^2GF8&Q{!0fpL
zp6=1P=}1CIcVxm~rk%-7O&7I?S9n(WG1>c_tdwV_l`B1~pfuohTB}SIpeB?{c)4fQ
zD(Xi*?*?-oAfc13q-$&%M6O{e!lyS)p|KJG
zuwm;i)#vGpV_^rhD*Qfu0>Fme3LM1m-s6m!aX%+r*
zQLm?OSb=d!4cbDrR<3BL3V981DVDQ*c!FNB&ePY6ISuKBs={y2W>0hw0_i#@x!a^%
zqB|oR^QveS_{_sjiB|0K4D>@vl#up`5
z!@q++jQ;`ukFrYHq@IZ&9C6zp4IMX#LH94tx6d
z7(&x(z$GE&P2Wi~DUi(2w?wC>uiKy}3p<>g{LBM_;U-~Ke#ws3>*hAEnwp-0k|LdmwqX-Ag*j-T6AM891x0DH;w=UwnJH>(9qHHt`I>&GBb_rWDkm+J
zCd%|8m-V!#vC^@VO;@yuDy8d!mN_QK!|CX_m=t?;W@;*1IZJ8Rt@CUM;(WGp61Kcb
zljH|^vQhA)-_zNP^V&pq21be1YB^V+ZR_&OJ)Nrz{~Q2*#TA}Tzu{3TmvY)=YdxL7
zmqn#1lgLHVs8_7_^!MTXy^u^fQ!0Zt!CC4OodPJ`gFT-9!REoFvhQ2#>F=_Wz^9-F
zJ$iM2BlGIacon)++6f=%@q{5qEba2NR)Q6IB9oB0OV)Y9ke3D$nyqEso^ZEIAju(P
zcj-D$*8ouDw4zoyo2x)G&O-VpK;NRMt?Kf0k-V`$GU%?H0zC;Hdes_F7XgNaLf=;?
z=LoyJq`G>Qr;A|0A`xPuNV4*3PZ!Cjr)lv0s^{o0@=mGwwd82eAi6Qr~5Y9^ssdRd96895U
z&}7Kqij1!ri|Tq0-hul$zlPu%3+7B4f@juwa2jtGIMdHC<92F;2k*q2?W~3H(=6Q1
zTL?cxGZduEp@BoK&hrlUEKN3OaJC2D&jJm$_P_^d8EqjvZ8|d#(t_B+Iog7r!-6)j@vJ<%_8pBaORZjZsUBgWV=?L~1sNYVg2?BoO>kv3NLq7fVyK_1
z0ooS(xJbm?Y-+KR8H>y0jK#&W#TuF-IT<$Oaz-Jd+32?wy=V{K?v#!7AOSXC-6)7B
zb}idZnsG%5?QsPm#kjG1&D;_EsGRnQhNxn!;R4BB*eNaVL3;%`x!3RsGlD3h5kU}+
zdj%&+xenOyGpG%T_11U)}
z)Qm=iG<{hd(*7?;<4FCo`a*TTx>EUb@CweGUIYY8{=|BopGZN6G&-?K_G36
zM<8v8^pF{ei4>q;g@AE+=@u@i?OPFjjv0vy>4?N7v_%?x(2LSmALEEYWV4YcAMm14
zTctD_Xdm7w
zv>ZOH2+(hTfF-oq5R?sAgkiz8r_K0=tc=DU-;lQHMY%{>pn)z`u8#cx;Nqkd5RnEGk;Pt~u&s>FBH@2Njf|4IG1`XB0V
z&bjkipom@-!yk1O>Z-(5Jk<44w}ZHRw7*?{ey{pzdYF?YNw}
zS5S8)aeY@(_bTeHBJM@2sq3fi)x^Dc4RzO2x0ATb)={^My6cI1$p-2MsM}54OM9r>
zOWlpcUEW9CP1Nlt?uyOS4N`XtaW5O7?pEp!68G{U>JC#kMBFRF)QwO#O5Bw(>c**?
zAnuh(>ZYihChk?+sJorI*AREr4(eV@-JQf;eI0d2sCzwe{iD>~McpytUcH;Td#HN@
zao6mn?v2#lN8Gjhse6FB2Z`Hxh`KjX_b_qS9ii?~>fTJ;u4B}_g}S#Acl~YDJx<-*
ziM!zr>fTA+yNDaOo4Oh5-b38(EOp1JnPmHu8c_S8)yLIqV2$BM^)R&g
zj5?uCsWtThXz?#lUj};)Z&Kd|?fpaQC)Cfu$mJW*+W$`dq52c`m+G$0zXZhw`!HR{d~ck?Ogo~G^@;s(!B_kQX=K-?`4QujI3eTcXN4|k|o89>iv51l-=
zqB?ubvd1IjF^HbW9*?re^T}ffJ;oj{V2>A)$1r*kd;AW2yqG*f=q2p&QucTmd4$o+
z+2a-L@w?;^L9b+wSFy*d$s>wh!yd0?kKZGY7kjFLXgY5Ak_V_S)>_8u3kB_p)6XbC%`WSnBoIO549y`$|+2d2}@yFzG9r`qT
ze1<(fOCBTWbL{bX_V^R__*3@y0(*RsJg!GyVvjGg$5+T>6n&LFzQ!I;lE*Ieb@uo(
z_V@;QjG=F`$G6zy&&gvq`Zjy~1$+D@8UL?BBM82juTm>&LivsIC1|HJ$_V}i{t|vS
zz7G~~yy&OsFVP3ki_q;rYX9?(fcoI7PO^BPD{7|;Cky=N@O54k9O$oAW~#8@9>^67
zu-{Q8tFe&`%-hJOM}-Hnu#G#tsDDi#taHObw-bR{`J`52^xTX3^jzyjeQSD|ew0YW
zd?*ck0+4@=9~SwI6zNa@HD0u4%^Fb>_B*oOi-!9L;E17CDP@ZRB4l7HJ8gK-HDu$3
z1VUJ18%$5TqkKj{Jk7l+YhQ_l+5(elm_?fL*pSxPmU2d>O3Oj4`Q6+x-_m-#^4Ri%L=W2PPMmBN`LgsDwh9f{b5G=sPS7jy#
zn`!~FRBpXy?62f)TNnzWFK%w$1%%x@;b+w(5InbqXk5W3VD1kJp04|c-NTT1e=pT-
zfW-+iH>AG}4|q=x!CFaY+SIgwd1s^6k{N0X92)eZaOWTgjkglvOacpF{=}Pn|JR}S
zBl!0u`Uzf!x8lR_^?xyb2mT!XzT#2(;cI>`e7)bH{3(2^f2&>%U*`SrJ$|nGdiCS#
zckP|Q)Bgrb)p2EzOl6!oLC>RWrh|Nj)DZkA3+B_WhT!LSd+>-dL^!)6iyqtP!F!Y;
z&c6xK3m6ekr3ujsVeNiE87657rH)<%3)*32m?t2H{0SpNq(2+GD1?ZS}tj-
z=#{W$pHw28za#KfERb_{1iqT`j8c5)4zAH-px4l7Q3Dx!;A>f+fr&lv_h|9O2v4EA
zLa(Dq#W+JT0OX%UKq7DfB0$>zrRW$^pRcY^{t)*4*5JRxufgMZGx{_18VER-
zzw3^8QTO%{YXlk!g(4Z=lTp2t3|WD!Mnd8EU?@Bojt4@~ZIRfvaB3))h$X|R_+jAC
zXXg-xuL39tWs7dnqKQN_6}s&vm_leH?BmWyuQYAa6B5;-VrG=~<;S3#-9wboZZgKb
z^sSL|awr{-MpE(AA>iECz`2D?5Hk`_grm`eUewh$VvJisoR*Oi$w)Ys*mVHLvuQYg
zV~l6%0M^V3=)92cVuoVrCUh(o3P&T`_5+tb7cMO&h^CXtNbKM~7^WT_5l6Eid7RiG
zfl(_3Gc!@HWI(ZvXmY}M3aJY_8GFqhq!otbIYPsZ^L?oGvrcU3`f%^1bXBv_A(jaxZr66tz
zClkq7I(mAKYrn7sjd`S@0d^!W(|X
zOTW~N!DTi=X$&r^;Ri8-`Xx3EIU|UY6Tu7*pdHhfdC_6KN6<|%*Cy?&%R^i=GuXDg
zJf>f4^5IgNgbqGjU^CdpXQzG<(b5?)^i@nM2NRMFGt9Z__)>$UGY^k$DcBkz=~orZMRflU55l(X`UMLHBskF}znO0v^*v70xEN70xx~
zZqQYem0f&`)YPi8<-!W*tl0d&hF~rKxiACxC9DD54f;Lrf)hYd^f^?UPs4AQb{}ld
z^&M~ynqaPzhqFDd(>IrSWqc?VPA1~9>1#TWAEs=yva<=YW6UQsgA6%h3C1|g0j(Hj
zo%tjbZbPPc3MNg-5bPHE`^*Ge%%$T)v2-jEPFxRrg`Hy~{J>8r6pO&x1nf;_s#&n7
z1^I^4lFV?FTdJW1Oie>OVc)QGr@({aWi<}i4|~0i5`{SvwUow+lUN6X5_YM+
zv7uxv93>?S42FeF!F)(y;FgVK2!`&lG1&36p&?FoST?M_$Bj)W9u38kr2S*`Ekyn;
ziN8k&X8Y;b^hKkMV^eb|B7C!jpHEJe!%B5y#l#Nqc*W7SlE(kQH4kb$7<5y|0s+U@Y04b~hZ>qXoeY2te=ZYNo>y
z+qE1*kwh#;AY{#u&Ocmd7#1Hh0_}{XhBrpLe$@BS-|61OnvyFWdi;C`y?LiNL%OAnjj;6F_Jc_A39$qwB@l
z%|8DO?C)-%#wUgGg8LE~SH`C+#bo3NKjw^sUdfl$?3W?T8P6pxmyJ)iu?`qPw^n3?
zWwPLGaW+J)#y)zOt{GZGHL7;!7`n9%MPIY87Ph9Qd$H4GnF)5G$%EK-6s=WKH9vdn``
zAnl5F-waq^X}(KO(;=&=!b)E}M8s~gq-A8tw%%uxELiu=hUr}qv%R#u4c$y$wTy{H
z6L0h<_7ZMF)~1F+i}hH@$;3>tNY%ltQnO_RNI+Yyd7xF_-E|z~`ro{JOc_BUuyhcR
zXrqxKNYP5!}f-8)dgLvMXfVGLebp5?Vf*
z3%doPFYz4m`)%B4Oa^R@;zmN%1^8Mv$zf2xVm8JE3)AVBTO?EI(=8BvxedYWm+rW+
zp_3C1ZBT!3HV#7VQR*{HuY!&3>Fx_C{n9s54%CAWJKY1(SL_v|C2^ZIr1dCzu2C>l
zAu4LdKGBK@6Rn_rbT;AhPeT4xHYaYCe}00)Ot)ng(N{Shj*0Mm65uo7R#9N~OHqQ%
znsPDyUk{l6M|pfqDX1Hrt$!ij^{LsU&wuo&Qr|gu)nS@kEdgUB=*f9hBNnC2%ES^k
zD|7q34!_qsSigKWb&+4c1aiEujmkn&YG^``YKBS;KiWa#>*r93=1jPaYQ>Q?mR4-2
z30-qgPtK-&{^NTT{dgOY7Gp-RARaP@3&D
zeGY0?)55t#thG#(7JXwr*|4*3BQsXjXR_Ezh~EDp*Z&uymy(4ue7Uw6{3_})e$Ha++o*%d@?qRB8u_GmdtbxN
z46-}5*Xv-QJczqZlbwu)+U2A_Q#xG0JciSRfLlN`uGls&;NH%y9~uF0@e#RuJEg<@
z%RDMKd}vTuQMoim0FN5c;rivBIBJMx1Y7ZlgoZDVv{Q!*nfYxMTvRrSq_NCh9c>08+Q5a_m8J-
z8L-_xex1I>WMR*MgM}>zHWu6Tpn2&A2x^$|bi}u^V2iv_-)z=8o&|REd5X)--Ztv}
zCK(r#lX1D&+j@PIt#Wc2k~aG}toNA)JzWq>HUc%QZ!}}L0F-RRC8+n>Os?`0rP)q8
zV7Nu^F)i!bfN))eE#8KMK9A8F6$a!-Z?gSpzqmNs~QOG2ddpokqL*z1Kh?3c!`TrHyzn~VC2a0
zz`n8LL4E7&Ek6G-5E88O!Mb8YlE$KtaE!iz2K^N08Ms)vnwnPtxQWIaGoJR#{U8I
zX$1fN1!LTa<9H9g6W@nlhChh^0{^?RN=Yh5lxgK9%A1vsC|_0nR{4dhs%zDldQhEE
zb@dH!bLh9!pFKO-8t{PCqC`9M9Q62V4<1mQ^D6WQYdo;==`uS*Z)G7i=JX?t-gbot
zcPlAtwus(-l?V4LDcc+qy@Ppj25er5-nrg`w<~GK^v>v%(Yv}mctlAzP8LmycQcAc
zu}q3Tq)BYElCZ5Kp!ZM)+iXeLDgKC2*pjeQymze!N0sd)3CB_idS90Zr?Euz+C)XGo?yH_
zN#WYbdD((K#ez69ThJe0?ZLy!b%a~3G6Ob}^K4}eeY(?wl|DPS)WvUW^^8o?b
z{?CU}kTOUFo*e{8`(F;qJ?iJwht%!LFG2Swqg;*O0-8TD^fS2m_xL%=wJ+mEYmSeU
z$-+@26bi+tzIKLeM6n$^akV8w*GU>LQ%?^i)6sM^Id(TNJ76)33d|-7S}~ttOCxk6
z%au(c9*;-H?y|Fqa5lLUlNlQuqAcOcCY+3>Lg71sO`j!A7&26-!A%2hQ4)!0G#N|X
z;YIy@BgTRkN%sVR(lTZw7EPqnGq-o3ZoPNJ+FpWap$5U(@}js=Nr2{=qMK)Q?b6&&
zVixKf1x^j6c%FSio`?7J+}dyy>>P!
zS_k-!o^4&xol!iV2*+-?6&UTaGfHNPob+3%6p?ETq
z42O0c1r~9;6wo}N@aKvikAz}r`Tak~{!K=c2rK~vw5~
z=inUvy!rY
zg`)4ypBU@+CMk%vIfiq4zGWc#TRVg;i3x%tAm)i-K}!>~@=PABRQF7xe0d6#-YkVZ
z=UulZA?PONwGx?gIqy9d)1<}H1~)g&IewQDup{Gd`=Mu>Rvpn*t(3CG%yhO|JzcH{
zDvHstrA-Ko^0k&KmHAq=Fj<0QJ>UE1W_xb~~_rQ&N7_Mhb((?c4~f9yL_oIx#aV7rYKg!?ARycSLZB#lNCXxq0$I~gzjM*qS^;Txur_!28@I=;t#huG?WQLH+ZefW9;_5Kv*)9o
znJ&N)dT}@0Vhr2=5SXiFW-5i|EULNkG^D_-Nm&{hb>Hly&mRsevrJ`z=UO<*-{^yW
z;);|IX94h{YVghT(;Ci}fHi|ce*c$Be*=Ly=G&NZAS*gae5@E?yh(*}2eB@=e>L_fc8_N33B>{IkB
zsNx!@p*Hc%8`wlo^sn~S3o*=$z*Z~7AcDBDL=ddb7Fn9B8qvx;5`l$AfXx5lW@-fgzK6@oC)M5OoPxf5
zw(RqdMHSt)vmtK3nOh}%YeNh}|LMB7A(EKUZJQe+g?+2#ve{`SP*~h*5$Q9=c8Qxn
zznWVhBYI1Lgzc944YO6BzrSC3;?UTr*7BGWr1Qg4fR$~sBK}#DzIy8
z_sFsRHwXIrfv}1CY$#;2S2a^93c9F{K%S}ESvL(^qTEZb<)S;F%`|*DNmT>0Si&Wo
zPNQF<_OM`FEU5ctYiuX2Pb^+x<1I5jk^B6mGY?qxhBi3B1#O>D3UMbV%NEx-Tg+~3KF5`jgJ
zfNcMZz6fOoBm(D*fNcNg44sT95m@vHkoo^rD1+3$RzIP>N}X1BsVkL#P(G+Uq}-^i
z#XrRF#V^9+IE{Xbz5;5(nR#Y7rtk5h5gZ@QmI81mNnnKCI~;(EWCG>!d*KA<_2jCO
zEb|6m<{8p=d(o}fPoq_dS>(X9R+%cm&vL06sFefd+6k=^Ad02c5vsE~tdDuoQM`sk
zVK*ZO%BM>Ze4;QN`2Xy^37i|pbtha^4G@+sStkWiBZ?RfheK#IL!5&FDT*3V6h-k8
zFG&@sY$w>?A(o
z9M0O#;oQFB?^Rb-cXgv11A0k{EYD8%tpp;Ec%lg5@X+Je&(AY9V|;{_*bZ{?!N
z>X)Q(mtBWT=B~p9lj{r{o5LuFM}%DN3REnadZV!^j5gz>Bo$l2GokJlV^u2YO&DO1
zbEA>BYjBxdHMmHUA|P&zhfx*}3yECh*62Ch*BZGn8o`5-Jl5^Ig$rU`tTo1LA}#_W
z;%!?Ow;5SDQwpyUtuhMQob_v+kqM)Xct~o9-6D7Kme>`2{zK?Z2)zmKA|D{%I>+bx
zyptQbGbdR*)g!V}$6x>9)!zA2p>O-Ddi;rPmM*Q2KP^?iIJ%X%Sv#{}`P`pfV<~|a
z%E!y%%_jdw-*u~ad_B0Jp%=Yw3wEW2M!5wp`K}WZXjAlc4&Cvq$jbaG#>dZ`
zS`pnf7~~8gBU?zySLl1DcIGtrBIL-KfsWC#ze92rI}`n9@c7w8Jq{#)$Gfp~!W@)p
zaJT@BGu5&N(XcP3t8~6fzi;}KJecKXVXoc+HLDByxU&B{@2@b$P$6*HAfVR&m(5Tq
zK@|e$9Rd3NzZ%_%w2x>%tldYxLwyKr4;a6LeMthtMWF
z4xug26=!sNPP$N@f&+;P&f&W5;#s{sGu!Go8#R?2&1B%n*Tk-;!f53&(OBn+w{C9M
zl^?ToCYR0TD`i=9ILQ_cUZ}Cdh}jvrZf;z3x|s4S4i-I?%jS})+AM8tfXkkM18?ot
zn&r8AMXy)pXUbL9zQBv+i7S3kvI|hZ?j^^^lZoW^8Nh14XfG$V$0wN0`N?LfQLeXO
zvCzpTF$yRCCdS8}oThSz1s^yS*Ot53Y86Yfb1)h8k&p@NkodKb%O`T<<2!T^^ss0k
z%NuZR5imKZ7vZkqV*4^m%OrC7?2eKwOXrc&
zf>Re+#uB-)^w^$BU{n;ch(o2Fn};*tgU%OZeqGCElDSlRV-eU53Uvgn;_~OJJy<
z3V~&YfcpL~vjJD#RR~B3(C>c;y$_-H;kS@=8j*@F`Jcw2GfzjNb2(yOYuO6;?$#DO
zd#Htiy(GNiy(zAN1Mmm82qTV6EhnmkI=R?eFU@1@XMBz
z(5CHi|J>a_*Cx1dh5>AOpM8tt#?x&=kB)}!v7@8AbpcEicfrZDFJ68HyrBx-%I{2rvy|8TsQ>O{QtsXt2iqJE_DRd^M9$2
zkdjX!aN!W3>wkjZi|~83w_LbZ6zB7gz?p~J8zB6}HnNzMSLMthz->*QI_%;2?5f
z`^2H`F&<{53u(_wa_*B*ou8Z38=c4R!3xwm5MT~GZopn_ZL9^SCd#Jj)aq!i*eaI_
zmD)^aak*Xq+Zyo4g0lg^A*Qh*nT4<=;PfCEyFy~H{O*npU410#)ZnQ$Pgmms&KA%v
z^QrOidZ4~z)W5=Ibq^J|F_24Cu6v1>+jm5w{r$w~a|YJ3PqPNc`i1ZC88)kgj*^g+
zH{wnU!9H7tsmcL
zGI3*|y^cw{)7iJ{WKhtjbbSm?USk_i9b&-Q;XO$!*eofnBLa<`8#f+o4@RO}wh(i$
zV@FIrVNBi^lk@Sq;N3BqjshiL7rYT{L~P#}3(^c5V6Hv3V0vlSEdEe?{fcO5OD~59
zyM%EaBrKQUL1VN%6p3!!NX)AofaD|JEM(*iyxs>AnSf$(?wxZG2?$#xVhz#fU&F6L
z_*LZd+N;m!6R3Fgf`ECr-De#d-j+6*`N?zE&BA}Xq&!O*os|H%K=1lnsA`v+Stir
z!wLwNO~m8Io$cGe6k?DVaMI$Geo6+jz&lzf*rF8*l!Z)$HIBGXAb4>!U=Sba#VW=K
z-e??M5Z7*&hU2zmkGI;ZndfJ;Q(R$K;Sw**#go5GLM~CkM-Jz8V!hJU{J)o{RM98|
zu1o~f^M7TItLl|Ppce#`{=XNL6pcdQ%0xgt|5xU?s$MAsdO?8B|3hdKLYv4A?RKru
zOC3hjzN&qDB)WMsd2z_mbvg=Tp<%al7MjiB)yUC3=xwQxu8N3jTKbP
zc|ap5=DY)Mkdkk@T!DD}LXDP8Bp|Rp*AxTaDZN>0lt?G%&A2$xRW0C0aFfot%
z-3*?a0I%vg_?AA?ea>Fs27voMD9tx4Rik}Bxb7V|3c%Sgs5Q!<7%Wx_w9nPzoYe1B
zc8nb;5WlHRvXD7@AI3;>Su|LOgOrzjNyR~!Or{(r>{sp^nIpl1Zw{Qm)j9w4JySo`&!
zD|!geOtyz3(QKA1>e2*|os2AIF>Ds-&cnC(O$FUFbi(3mHzRzcVQwlWG*VWuPqa0c
zt>`VkgPFQ*IYYfA&Zg>qu+3
z&^wzQUoFPLY-iLuaNWet%`2!RSATaFeudAi>n5Rh?m4VUcz1g^w(I`(#ud>c>8=YC
zw(ZbUYH
zEKH`SN}2pL3+pbIVB(_>kqPXo(q};~r!Qvlof5A^%O1)YX(uDm!`q0l$5Ge_3ie_a
zR|S{SM&!C_@C`nK`jgu1B$53oT?!myQ#-{3mh9a8>)BSy)@RtC2H)7bz`}OACxLw@
zaB*W}JI$ouza-qL@ocVCnw;(?{Y||~FWB`aJs1a;tLzSWuszPg0&Q_73)az_0#Qpq
zR}LQLa>-$VToiOn7s^wu*|o9eT(MFqS6g%*HfJ4>DipG*1ZZTX35@$*>#%y3W^Pbv
zRxevNqJq73WNKX5|6H{9ooYxSaLFN{=Kq)6kSKu^0v8Pd_5HtSP^*R%0+$>D>id7m
z4T%y+A#l+UP~ZQH2DNHPA#lkdpq~FrZb+0s3W1A;0Gv#q3
z!&~qpcox4F{~Z1x{tEtgavjN$N5~2CljJwaN6DASH#MT&s@Kn%T++?vaQxnNlsW#te>g8KQeesU6W~(F9LZyfIr
z4FRuH@ROQ}gW=DtxS+r1iuKK_LaX9lJgx9amxKV8vFwYfUAD|+ZUkc^i!OSOi+
zZ*6Eej?2|%t1(|{)f$CXv3cCNq*tlF(CRp@luLTG35NET%+1<#YXPEXq;CnW9gwW<(+3^!d=$LFv6KevD(@ah1-ymH1z3)-ki0nZtV{Z5Apm0+=lc9
zYryC=!D@`Lx@T=@Xav`rr%SW7Ila{=mzwg$RIydODiMnBz_2fT!%d+%EC0n_DKK6l)$0
zqrSnua`j{l9s-%3XRUiAjQR)H)EY1nG1_mL#>%CceGi9GbTDdNcMuF54x_=<{q$an
z)fzLgR&mBM*(=t|G=(h4i6081;nhPH5$}$Nj^#q;9S13C+#-b??r9y|PfFmrqBjbh
zrIWkvKo||J8f?}p#pWzvLZ41{!T!&3ZrC42E2AsvO>N)Z8yj#n25PdGjNglA
zx!{gH7OfoE%0(*|tlb?(tA|!M
z^;Qe+%%+=;XRhA`9U2;;&$O#tZj%-!9t@-G$~3pih{?^+4RxL`XXkdp9k((sw%ucF
zI~;DklV$q&&|2cRd#8N;1AynsxG3ZmJL%W%fDv0c$P7m$D%p}`{r#NRe6u)N(IqPP
zkxJ{fhf#dxkmw#0Na`5NxaB?obYWfR$~-bMpf
z7B1Xe^UM1gZY+=0NE@)e*ow1~gkrMD2)1(pd9J7h>kVFu%jc=Z#dFmfFyk8%OR|Y6?tNS;KFu96V5!0>xjZ%{mxNRH8?aCrfsn`i&a%m9>zpQM
zzyf6(&P(kIQN?U|n;R98oikwB!fSeP5hUB($cXHu0Sg&^FM=qsjs_)kM4e3rEM<1!
z&61oG9n<%F-ICf<_)P{ZXLw~Us!wINuy$pt|67CpCxU;!i@t!qhQ5t#wv_*YNA{
z&*Kl^Pvfrqx-#vKFta_OHbivq9Hs&c2FVZmoNIP1?djX(N**(tcde-6@AW<(B~6_K5q%}
zfGr_Y81Rn$DJ!%kbQS(te+W;Iom4_GGOU`oLVvz4gm;jgzPxRsFEAqCHf*9VTKCz5
z(vZp85A-EVlm~f3{59jE_%fs5t@u&=1^fQzk@iv0uKvR#FB
z(WMgF!@Di__YPy$C6ZjW$GWE^{u_)L`k@(?Ub#YzwOfe8HCP*rX`57t!i#nbG5Gab
zL#H35LGe+tSz66=qC1T#&>6Yj_EZ73i#IC+NAvGAN;Wxf-XiBsd&$=ulc2z3^8jcy
zX3=^Fgl29viea=1Pe=&xTf~L*gTc4YR^v&V1DDK~1DDk22Fx3UFxt+bpu+lAr^5Tx
zz2A5uj1J-*lKkS);ZrMnwz-q{L6o~6+53%SHY45*LD<2FcSV%D8Qo(%9!7f@qO>=H
zs)GydktlSt$QnoO`63hA%jE&zzGRKZ?0Wuv@PFH>^}p+_rY;l$%L)Ny|GTV)TXj|;
z;6i|Y|6v`6a1wu)>>=NB6{?F)1dJW+ycPD;9I)KKt?Bn^*J_7Ot^=|`WyVhE;*Q_}
zWYin{xPDp+#hDs+V*Yr7pH_;K^k5(1B%ZWLA=V}Md~?H{0+q-e^ApPBd)u2>4{@?kCs~m;EazQ{n|I1~hRX-I1
zod~GszY`OcqYzjw2+-$0j9!J%tMEHu{r_=o^5XW~jJ3D0Wf+Sa?6bD?$-)`mWthBX
z>U9|=E$-Y)F}8x916K?y2Ael1FYK#3YicY_m|t0NwBooi
z*uI+`BEe!3`T$}r@bye4mne+|>K?{8X#B+3rP#2*cmY%tUaxi`{#<)291lKBjMY{!
zKVH>d>56!Xo_sK>a-CZ4DfYxg^psLLgbE-I5hd@5M7O7jk#z|mkMVdqof@0U=LH|B
z43GN@B9RnCbr(3^<-gry&`ZRPTiX*%s2zbq<@4F>bRsV_D>6SYUh+jp7D`m_DwNe>
zuR=kc|8a3&cd9joz$Jx%+W)(xhC>OX5V)uasOSHp!mS!p2wYMKsOSHZ8V)6lLg1nz
zpq~GW3b$%ZA#h0{K=uD2^cjRcgR2nV>wTA$a6hOp#>)1+Oy$Z>7UH^Imj*PM$V_L8
zC82Va%kU;&m8(or5Y=5OSDAt;re!@Y-CT$pdV5?8dP}uE3+U*?D|mKE{1-n4?O^DKma{dGX2ieJi5#`?{JIc9W7D8FnMV_n7yz
zw@0FbgQPuSp~(Us6{O%t>^C^%xQzB>ItquM_24;J8O~SBC+78n*oCkSF|+Q|(^>Q;
z_a2jDz&8m2*O;_x!QrRqSm;qJPJXJn)v?ZEE4u(8#%R!^wc-Fw+r*DD0FKsSmk^Uo
zZ
z!U0=}@x;+)7_B-z!Ge+jyt0@KDmh+RVZK_No`&dBy5*N#pkb?gVHiv0lId)+0nB0C
ztsrRKM?5{69Z!#C6NwWvpxXqz3iakvHPX<5O!l5SM0OaQ;Niv~UK$O5SfFXG+MPpc
zG@nb1B~tg)d^uPl1efBF8;4tFELpWW%HB0gRmtQt>0EAn4#JID9krvhEz#lBXd*M7
z%IC%_R!vuYweD>uN5>P{>{y!4|JR}qA^7)Y^nH9Iz5`F-BjEY_Mu`0RVf+RB_k@s}
zNdjyGo+3|^*ORxA-yokNf3Lkv8`SRAj%o|q4@2a@4{Lv>eWUvme}PIZAL(7(EmQtn
z(k*fHm#mn(Om-Ci)r}!MNOsc~huE`4e|>WZ4->CrFZvsn%{kfBU$s2eJG_h0-&$_z
zeqPGx|FR;%N!rLoU$eM%xKE?6TUGY@^b&o875VfK{oQpTyoT(vdPjqhqQAGgyN|Q6
zz8mNtSe}r^qWee7asDA%(H++mebe%de~5GN6#f${V70zJ4
z((Pe3cqW`RX8Mg+AnJKJu7y?A&I3^_Mfaw;^>rp-wNMwSTJN?EsU&Y
z4olp40cHgfD_%gX(SMlov0`Cj%^K;4ISZB-qVxZo&|#!~T>A;_8SP;$Nxn~h7vg+0
z$Ubr>{!fSj^rLtR---SO{Wf|X5ccwyFOiBjvY7rvADyL1+A6Ww?
zAMP+q>^)*fJ$;C`=6=0o4VYKB!z_90aS`10HX1Owkisl^D^a=JHP#w1x!@5VI0)8@
zbRUSQob$Fhv-`YXlIC!UCPXg%bu$2i!3;03my3u-8G|&Py0D
z58zdJv#u(WXOnN)O_z;}mL6oWE9fTGJDta(Fw$IGI|jX7eLEEh3fxGa@5-SOiJDfuTfYG+fU
z1HI+T0^i3GXIuL*?g;2hdv47!GYDTsYaItY*ox*r!IryoK_Qc_7>4l^?FZn#8YIT`
zGA5Ri%ytRn4O*FaJMWykSMCZfIjtgkgHeSn-I$M`YVTxiuIX%ZJdw&}ayi}A=KWpT
z6cqy6bT+1~rd#a?S<}(Zrqg4oObNCnT}|)k(zK}H-?U_Fp#1-&SDE^$5Lj*qDE;4Z
z8*$ZNg@A*Adj1_O)Gvj=azj8p|I2N}Reu!%4g%`=cd$^u6avc)0jmFBfwm&}_nY_t
z{wMMVZR8vt)-~oueEf0LB+wxZ+9fRGbdub
z@mAcs2VO<7yA(g@D~y}SX5o^`P2BQJ%Y06)=
zJ-x^#SoA0x-;yx)wI7N^CnktFWbJi%9gHmZphBZo(Su9yJ}w`3*bJuZaqEkEp*fK#
z({86jX7f%r7;Lx1R5t4zC86~H=kT&qqzZv64FNU(ztToj^+zGlI|AzY?;R^esSvo*
z5Kzzml{TWPKMH}~5unfiBtC#Z_jd$8iDz&X&*NwD8T=ajX8czCGx-0*zleVg{}#jo
z`91uH_)j1%&|l+k;D5&7CYZd8Tnn*5R+DvPn50Oa+(UMdz2q=?oRlD1$O&?ayg(Kq
zX2@H}Pm=#m-bH?e{5tsn`9I`i5JBWm$zPDaCI3MFjeJiFX|K?3&{krk?H9CP)!wUpNc*VvN$s=R7qq|9zOMa~
zc8Q!_xzZzRZ%ppvf-u6_)%Z
zOa6)`yU|~>AN>nU{*@*FMw0{R-&yh>Ecq5q4x(?f-h@3G`RS@M0F9L9(xm?eZJ
z4`YobA(n(`@(5nRk_by)Mw3VJRV;ZqOI|^fBlv2TT*H!A(&RCGElaLr$@Mfjif>@a
zjV!r|CXeHlEV-E_QJNgXx3FXtOKzpf6S$8hx3Oe3O$zvSmaJh(j3!UwewM6d$pB4?
zcpXayS+brclX!?F8(0#jNeSPKF{WAY}y#|%K+0G&6x(*O1HzEd;`
zfh!XMHUGad$5r)8AigddN{U7yaAhK(zW-O|xT;<$1bRV0egAtwNzo_-u1o~z
z_dkT*gV1~M?~;?+=F6j(<~8kyA!1&H>TA2`=q2SS)qpk&QU=x6bG7JF>S3fO#7BA--OYHZ
z4mkTx4(1c>Bj?nK>B;F*B0n9l9bxfhop|gVJ0TeN-U-@{6?Ra4|1Xa>o{~}_a3K&-
z&;Nx$Rq<2^TpkFh=l}8;Cncpq;6fmvp8pGhs^X~-xI7S``acad5NhDVBy}-lHVW;>
zBGKcZx(j#F{Ya`Vsu*b&l6oSUDUDD2Yk<7u_-HRG6mKoNk#33QOONesT8H;Kzwi@W
zHXh{4De2LyRp_TW3|7H}+0i5V$F!nW&W&8Icj7y5tM9{j{S^rJJoQLN7B
zg=VYRfI26O4LCx#u_2Ynj5{&3fTcuLs7+4?odLth^r{?<%byj{bYlc3Xg51$^*LhZ
z@b29dj`~!wr9-PUX_e=6yW=YU*Ts0{sWub>mnZ_t{^t@M7$ufM;36QP*8dj)WYvU1
z;1WfEe*agXM-lw{2u|T2BN~}IAEK7q$0E^mKQXSdR=~~z(2l3=WZ{B)CF_*f#B8wU;$m=HoY=1|XU!R(Y!_BUll|lcZ)3%LE}xk$N^MOB
zw#8}vnxbphc)9DS3Ga%_5fY+P!l6xfU)_G?G17UMJRVuW_chGF(E7M|sea%F-KiFG?vi__D3
z3D&uV`9`HsFScgAYvkB{+wY$^y!%jWXydF7EBZ;j*cyWMaj8~2Ue*iD9oefG(5uBs
z2z0WEi*ih$S;RXNDft`CM4jhT?+I~c>|If$EPVrC(T&4)9
z`Tu1)a7t{2zc;rw~q&tI3D8(s^Kcg|jdoZtIcg=FP;MuTt6-C7s-dd!gi3gS>>@HjT@= FsGcgL*PGEp+BFu52
z08IqY;A!4XcZlNvY8OYggBU;wK@hAG7XE;CF>b7G&p;q!ka|m3sfCk#0B2lwZ*2yU
zd3K}&s9f9A#;W!#6ENFVz)Uuq$z;Z}0X*?jy$LATbjK0)&n@)S{QnAnU8(LV1iB!g
z=Ko#5QAG-YD;xp!{9oY%th%QV=z@TH{=0yqiWCA@I0EYVzrqJtbx$GC1p!O{kLD4Y
z$3IC9XxDZjJ%2^!+IH3Q136RfRH4@zGZ5aur37VJ_(T`gIV0&&Z7y72I^!XLYJ9FX
zRh};UMoWNFOD@@&LON2gtHvD!JXdvmx?PJzA4wBqrc-as`s*mp;kr{F&xmkiX^Y>O$oD>3=9Rh0pf7uP05?CQ{-VmVk{~OUL(mtcTLu+b>w2j)!
z$ydm)kwsD>o5=O}6ZkB?3w;y44edjtx0^SFQ5^SgD^_F0si_!DWa_o*QTSP4Klhr~
zhtW~Ij}lDj6}_d$8v0DR*=iJ9aELTin4&pT`dpn}KgMVZG7TkhDE6Ay*$kPFba#e~
zrVGOd%xlBwFy1M;AUEA19_^S+;Fj%v^Oa$A5buyW%Vu_+A|Bx#W#wL$_nX()jCdyl
z8SxJKGrGsTI*j(<3DLPgE_}oq;E*m25AEK1^A%x~#Br%p6{=xuieJ`@k>Pn=iKs
zxzK`;%g8Td=2c-dj0c2Jf{Mz(e-E243!@w!ks7Tv;5LYrTl(B1yj?4YW(=DVo0_*Q
zQS-)a>Ope_m2*fmFOgCSY`V2(IE+T{pjU>6<>uF#A)82U`eC`%+e|HthVU9!ix1n4
zjhZBkHsg&_Lv)!DgJnnz78i$kdo+)&Z$?dQSKy7hD)6?Q3L8umMp-t7&}_^_P33S%
zmHp3odzC6i3W3WG0X6@>?1oGUtPnVF2+;3;7@bDwG~SE9L@MN4=Z$rDM#lbjBN8ox
zru7w_YGO8Tg~^bk;AUA69H~>yZBygpOKZAq;vm*ON@Kf@TkCC$Fg9&R{Pqavoc&+TGuVA`-sVyxNXm`YPXm`gMk7GgK;`3EC@#iE>Lx8fkgGL0K6$3&Mhl=;c`{bePircYjN%QiZ@3jeuJJU(v&>I;RlmiU3{z_n{9U`1dLF
zb*$l=@tycyJcVD4e+hpYe~+vu<75w+B+rwdBJU$#)HH2_wq4V;v)V6cpY6)}A{5>f
z!b9W{TeC{%YIsF7gh$9DvO?C%kFb1Mn``C2?1m5?AdgZeTpNwAS{cG|@+fB^a$nAJ
zIRlaVivAFuAV+9*HgEGP)bZ8pLU;!`!np+yUBiet^8lh(4up|AbcasboxLuZ|V!-EP0&c138kU
zD{l|s&E#M_ngfM^vX;;jS_-FjOH=g1ST
zQKq{k)*aNhCWN<;C!B7uZ56xxHdgNR!&AO`eF*O&1z+aHDnwtl_RjF_@etlm3PH_C
zlxrAeP=gX>jDG(^2p;6m;xCY++V+d^&|ZWlU~zYSBsw!gOde=jUX=L{u>*>0wYL;8
zex}RvZ>h??tOsM$-4G
zJuM{9i5wfo^x4}Y(H%R8xzlHbZS5R8PqT|RJj(7D#n~<(dx|D`%IN-l-Kg-1Yr|1Uhoss)9>rHTOk{=X7Ei?q*c@7A8x
z?$JWzL*x|Mi2oJ;FFcReqd$Ve3-ouujD=AV@0T1QVY3vBBdGr@^Tnn16)|UDyRfuL
z!vS-R&6Jr+P%q`KOqaH(*lpfUy^wbakItnyE@8^C#atamyYQAJI{rjZZ?~AY+4Z~h
zG0-9hcbFEdkQz$}rlB
zv(hklD)Rft)#5tyrZC#b{F(U>Fvdq+BCa!Uw8>n8xsA5y^M4h(8);jjHRJX(p%VKwoXDiJdx@$V=Y?>kjK|zg}y!{2I=s^7&Ni(Pse28846-sa-F}>G{fZxl-Z1_TxO3OXRZS
z2cHJc$Gn`=oU?PcJ3~|{S9KWnrmwhT$y6$vJbD_K&Uu-pI>hw{t3aK9{3OnfB{SJE
zHUID7HK#}v0#_&k^!dLP{Z|D4{s4U&uf%D*A2;xi;`c)2pTEZ6B{z^^av#|LpCRuc
zpCsSYhQa!OQhPyrr}pU!4asN-A0rDS3F~VV3P-hwrrf8K(Fg6IMv{OMypj3E_=oN_5^@
zI#~sytU&bJDcEQMqPzJti;dE3`J|2$79e^DKbs)Q2s-%M1gSeh_#m04{F}Au)J7)4dMq6W!WQ^wR0_qp+I+RO7FLbLitMKSbh++SNM>mT
znCMqq4XMSk49lLY7ptdXLRf7TORYk+I43!7r{oy1vHP~)KXG{Xq1ez6bqc7q^hOnA
zuqAa`q}6}~ZZddqngwgdneHfV=%sSKOr6bpZWKb~wmjldQJMufU62~mPu6M<4z|2W
ztNZSL>T|_%#VwKzpk2}GXsO0(b`cWzJDoWf&Qwce8TboNc^BYb2vcr(Y0sh0bRcFR
zn3vmmz=eI%UD2wkhaBD9gbyN3qbFPyDd@sVF0?R*UFRgLRGv~%&(
zT^>c7iaw0=#+q+BFr`y*8zpOW>G}>Hk~tb20q9!#sg_OPxnJO6Z21QBcIY}+M`NSo
znRF_jp^ug&nXlgm6uK9NYwdvIP$VtBAs?QuIq9w7G@ckuBxp16jSUJr?hyM*IyRmj
zAEzu%&{vqa0VSsv_*T**Nu{@qJKltAy$)bmOM6#eDxlRX)El5nu)6~7%~#8G6q@kL
z^Y)LH(r_a3BOys7XS<&i>+Lk9H%rdwCljfRGyZY&!LxIb=+UEu2ak8%Y+n72qrmHt
z4FA_IH)$|;de_pn^f`cU@^nzY;k8fSF+q_%4)5L#z;)bkkSDhckWaDql+Re(LKNw!
zz^zZ!G{7JL@wnRm@8PYdNE8BBC<65PzYZNh+OKPG)uyxo@^$jl^
z7n-g4DLUooz6{Oj5Pfwp$$A*0i|1yHFNgUDz{+F4t)IMf{ZtqY4E9SE{ptHlVYGU1
zwNMPmpEi+q*JK#w2Xo?*!@!jgeid9=ibN4m92}OE8&)J%;H)#(&3EO#tdxCb~
zq&-}j$x>RHT?M#32DfoQ;3EkAfB@2-U16CcBLzy~eebAz#-5L_bOehO3v-XsN>nbiPS+(hpGO(PKBvKIv$zpG`*I)YpjwgRYjm*i34$SLEKM(4gTsP2ZoF{z
zSR}fCKQZCRIXLahm#=GLv@`|&;U31r#ghspFV6#p!`@z?I#;o>x3yld#AgJZ>IbG(
z(5tkEUahQJ|M&KMDk_D*6^Ved|G6TERdq@s&=Ue`{ofNzibx@FMIxZS|5xO&s!k~c
zdP0DH|1sKy=)eERzZa8dXCu*MlDy#+o!S&j`{dG|SULEuU9=?@1=Wt!8?_RcuGOd^
zUcGX+-RfA2shOW0HD=Y8$DsDo_j>}8P3}gHZVg!p)2@C=q
zQx&&eO?@70V2fbyL2WP`oefphENPJ=jPZQz*MhA%EY3ZeEOs-`v4HQQ_Hzu9>UyII
zX3iCAeq>`(Y)o}k8QO#{n@g~ObZN5!4gH|0B@Dzw10DlK_vi?sN|72c36npM6pkTb
zr@^7r<>_*x3lq^&9ZaQ)6}tcCw3i(7?KLO}0}Mdv7;|U@k^em+S_K7dhpDLzw2J@x
z|M=2V)fEDlGXnJce;pb};Lr0Q`3Ct7IOpR&62c$Ar|?0%0eufn1$jGa0)gjm+)Plv
z=e*>*OnvNK#x4OaAtUBSuuXBDf6O+KtlCo@jvyoEs7=rIIKb4w^600nb$Y4{nImD8
zc1}N*iK(XryQXzFn0HdjVaf4Z>=c!R!v=Ta*@%XFy_ii$
z8y6Sb%y<~>!`pqDcH8PqdIWK89c?o=*jzkPdAN9FbaB~Y4u#Q9yj6^)kkP|J7T;Ar
zXRZ&UZR}oP(#9m~Aj?{(C`Q%oOqDYS?V4Qvj+$I@DW97EB+YeTm4nklW~rDpXpOYH
zwWH=h7?tr+3G*PM9?4$mNiMp-ZI5GKbktmHbLV~Og*)%wQrr)l{b5wXhedyTVND@e
ziZ6ZsL+IlOeH_1yyk2{q=P|#$E{%O>pNK?D`-w3hyw&WwbqmR{d?K3}Pq~&R;sJ1x
z;pNvG09V6zB&J|>bfX<`Wz1t2Q{?T&*
zz^T{k4!vzzU@s?Jo##inzzkky&6csSNgqFPwg|_yXvcawuB8hco|9U-P~sn>&p#nA
zBJ!ek|K;_tD`~GF1dPpR%iz?rlNiT3-`pKHaKYDFsDlij>hi|!pthO%ysbNktv9v(
zxW|pLvrjSc5B4H{COMWEOXl77MjdV7pExJ+1=C)|x8B2+{m)fsJJQ~)Maf6VgZK~e
z!|2b^k3m-NfBTG=Lx_^Yo)9HT5sN2q;^^njmK_7H%jCVrRlsqxm!lkHM|`AxnIzMB
zh}2`e%rC-BvNL3kjlCVcifU;JOb;f71#;U_`?Z`I8_%Y)3r57ZWf4>drj$I;5O+bQ
z&Wx7lucgb810#6}EC*k|meaXRG7BxQ@NHQ{)#+^6)>5+GG6&~C3H(}4rSoIsi3KC<
z+p>tO)7f&XcnW3;attBSS-4{yU*#mD@M}4dN{*$I4;dl2SswA;EF$ao8Z7*AIW
zLR-GZ+nb~m???1QihdLz2B-9EE|bVXq%QjXhXsK8QwS&omLURa|9=?{y6Un*fFq#3
z|LRsy2rOR&)bqc5$6obZA)w~}>K;%CEMElF_ka10z3RC_fIj~kz8c}HNk&_{yzwyC
zovlWq2M>}nBc0|a{)SX8%M*VR{9+fQ6aOmi-DQ7c63Y&}hiH<)<~EKM|7@*VYfuyZ
zV0#}aN@v`7>TE3%ojXd*XyxghW&b<4n%#`gMtE>7
z337LI&baZ|*?J_ZA0%d^v$y`^XN%zKsXs0L=`OwWuVS7jp(;NGeE|MGt4sopPd
z1nBqwwxQ^munJ^I4HNu#fo3e%=p-NX6#AhTBy0;F(pX_0qgxbcJFdB4L3pRVdIt1
zM9JHPj4rdift!P#vF5ok{A5pzrPGQ0f^m(X1x~6HOt08Za7!_a(ihz}ndxkKY&4(G
zf)!QWxSF=S(%UE50>^tmSc!$1mu;DxxfDDRR%my>Cdc!6FhE~0Ug6tW`5Zml!be0l
zWsP-YJGRA+G`=k-lc_{bt^b$z`(O2bc_U!0|Ixb;dKZaZ(kB3!&9f&W(R7-e^@%RP
zJ}$1+7R$mv(`E6^NZ8s)_DS(XxTL31G|F{q%IWy6@I!SxpEJkFKem^JT@)V%`8WpK
z`x;iC(edlq8Pv3J#F&pMz_IyTXJ
ze5Ft|Ix}N;L@eLMjF8t;=niRS5yj6W7I7rHc{4dXZ|$E3z#Wi{f3~N=qJz{`777?u
zLHn%%ejxZgt+6#8T_AJ|;^u6w&Nrv%)@t`b?BSm3eVpZcSX#@05U!;x4Lo4^|6YT(
zAnn~+T|?jj{3!l9{x#ghIZV)p&1-3)Z0;gyMQWq^WJ^EW&>Qnry6CkZj!p$;esp|%Jey13ZL9%)wszdZFIb=y
zFi0oHQ)4OP_Au%joZttPb?pUI$|S~fWBI(XI*j7<04DjAu7k;@Z1Qg7wlG?g
zpRms)v--`>XDEP*yj-PW;(XNlz6p;OpHzEu#AtUGvJAyE*q<8V_IipoeKP=8e=EB`L&hGrxUq!-nhjY
zjE;VF1qHm8^Xc525v7{8-}iuwRn(X^sYmax_i89KgRjo!(`v1P*(=9LBs`D>M{l*S)uN9`;$(`ak&frb-k7
zS2_Y}{ePv8u)E|BoaNnnV7?tv24Iv-(}ldPT!X$-b*r`
z|F1;rkoLc|=d}&wW28>DK>Y7Nz)#}=^fB~S^aNU$Gw-&eG(+Gsy`{&vvP_@ip}5N|
zzhLLHS6t5AV%Ov`k!=c5lLtVy^I6TLd6z4`vt2BzQDa&=lhrw7ZVsa&i;>LboGVYU
zvY1;_7h^i5SuVCs=B8pqhs;ejTiywqK7cLnlTGHwcCVQaqoa7Ai0Et+2k@jFwrTtr
zj+x^W?3@(dnyMIM6$mKILwV2e{?dG!&7u#FnK`>6?_fto-XnL#ggHhBDJiX)=sL_Qt@0p+s
z;C;|c)0^O+=&B&^!kBhmkOgqP+f0SgE*5#6-?995wX}^fu5Q$M|5=%=h`ifO+6;J?
zeHrjhb}~@RvMzzX$bxg>?2_im4OI}vNTSkepSIckeL
z->5hn=w2SyH;K9p^+3z_H$8^G_Qr7%)|#D%PT58YbXB^9g{sqcZ`YtQo7-5C`ngd7
zWX{*=j?q*h$mZ4V-f{hO=K*YNEMRNQI>A7;g?7dxcyAhx+S0+w+LB0|#^r@qZ#3W#
zIQI!!@(BXa1x7O01p8m_0ddXw$+>dN+rPMRdhwN!=rd(vuCi9~=XMho(pg=fEKQD`
zTQ&T1?lu0o)wUaDOa61KOdlI@@2T~_{U%gD6avc+0XqNh!^4Qg$^E2&e+j=Ce+hpC
ze}~*iPLns1|3N-XzNlTVt<~<*4r&$c)!Kj4epCCr_7Av@cR{t~^tUE7G)PWOR%)f=
z@Cm9;muH%-`KfY^{YGzD7h0Vs3$@1a=}K*(*lfayrE}oFBXYn*uZ~`fg;poK5TV7}
zLIZ=?`cgHU;BnLh#~%oVKR-8DY@D8785)Ro6t->+4fMNm>35FR?h6eJxQakxkcl4Y
z(};#v(Uz#`7W+R$tY6R@)s>-Dl%115U2DwE-4^N_!L-9rolYm3<(cYyy$M?KlD_Vi
zP#>_83R}hM6im9-t_t-H$ptO2RJ6k353USF2QWm*FCDl32gH@y%*IFYu(`|v{f
zc)8eUl}iIurn
zzu=zq2hq`aiacH1%V&{Zb6jh>X_-3tPdWK~wBU7qV-8`=?rzF63x|nh12mm*c<+?e
zwRxEN!z#lyql_Cvi`PY>`?e5ck2P@&>WF;~SP%jJCHG`7h|XrjrhP$V))tTZ7%}tq
z#p@x6jZVzxtTBVzL~npodZ}ogP|;PdcrLW~m)&D~E_HhyZ+m0T4vgeoCcr|Z(dxJ(
z#CTJcWDC}T!Z?l@FB{Fp8zRvKKxm~knCBw7y#seHmGG~)2mM^?+6}TB;asX(H-`6ur^ALI@h3WS{jK&Ze!(sd|c}zRj3joHh
z#TzY84|CZ1obZh}?}l7JHvXUPk3<03dHNnWuHp7}q32^C-@ACzifD0jkhgV!e1&8{
z0e-iM7FR~1`8+wZ${!!9D$_fvTeJ^*|G&!=Nq*gX?ynNYbcJ#vH&5`KH
z2syLSg+aMKU9PksB*5Hcu`yFCh->_7{{0r^FL93-W?|7(0T+AEED&ajlNDIS_!PyB
zHH%U3X3G;}yEUf}UAED)hSHwZ`4{8=<(?<_Q`t<|jKH7B`u4jghIIXpweKMKr~VWI
z3W4Q=KuAN_`u?l)|CZ07tDY(ZWCWD`kBo-;tq@pV2+;Mv`u;DkF;~4+2nYn!_g^5P
zQiZ_sLqL81m*1GH9xDU{0_yn}NT^gHu>25E^Z(^H=BmdE0fB&e{sj^$RR}CU1nB%<
zLysW%_Z2O4-uiDu7H^3}w~i2F#AW#;jJa%cC1I!}3h;aUt(`=yVok^s)*m2|3Vm~+lANB+-lS4`K;d1T}
zY5d@rJvhOsR_)~m!0+WZjc*9Eb8V451HH8C1T>>#4|f6|L(BgEX7m`+KBK)yds=%`
zOObDrFOuIRZz4~Ty<~u_z<-H<6~6&LiC3eqqW7cM0C7)$qc4QfNdGW+cfmQ85P?QN
zRiutcj$@oC;RVU(!zkH5QrGoHO!&;jsH2)wgO-URTC(A}FdFI~bXD=E&O8f2!uyj>
zVQgC0rzXK})5&sviL!}j!f2v@i&J3Niq)+1z?>52m#EAr?tD6ohWq1AajXu$DbA(y
zi{=lU4x|45ekarK*XSt=SU8gmtZ3oB>yX7RVIuS|K(z4wHFmDU)6VKU331%}S2gA*
z8{iUTyDqZp_&lIIFlad<#<(Y9fP><#tuTrXM7htR?S*JvuWLfz2KuF%j+>&BIn;pQ
z)&m3Fm(Uu2r?APh>DUjP2%~{D{gv{}Y%5lpEmx+fvt_M89SLckm33PgpBSAR^%w_&S5Q#m=A_g9&e=7ZmBHST$fBVXT;oT)4L_I=w0&AoFVf8
zcs=5{M;eRRk%eAvGIvmHH%pRq-oOB+-B2q`5amO=<|t=2$)KNc{JIY1R=~MQ
z1rVSDkC3XvhfPiJu3JMmO{y+Vyl6Koa`ECtd#o|4QEr`+FuXSw!dpp=^YkIu#|SuQ
zAA*Oj58-|yO-%9rn?iVq)HzQs#sQYe`S8qx7Gfu;Y|csoAF_Zs!Rt!}hgkvVAr(Aq
z4Rymp%n7@KAF*!0h5$?|d6bn1yrhyNmPkzozF1b_$E=o{f|I?R!be$wVB{1$eq9K!
zAuWp!jVptXsr~sOCfM+AwcKr^;hfSgVYr>>LUdj2i47CKcX41v^zg=@z(O5eDI`0x@CVG?;<`vQohI!Y
zJ0W9hR#z>)jQwC2*ci!$2hO_*FK^USyyWoXuClTYW(-|mhaGGfE}%JCtjxR20a6*q
z93XC7vp5)uZchs{6d#-l)05MsM1Ixu!oKblcZI+ujewf}U(&;)gi{DyPz2QTe?j3@%oPHc
zGy-b>?~)!KC7eRwf+9el{}6f{!M|@1Og?x%8#At69EwCIK>M=Masu*EXcTgKGLz5y
zl;HO-t?FQvyDK^zO;X&vesM!2x?=}9v&K@SIac02Mkrki@&9ov*SZq-s%E=Dp}N5t
zh#n_1Rj};bI}b70ycmx}kL(a<*mv!U?S0ji3jdCK=(-ZyEZH!2rKLzRYZvIvX{tPo
zn|CdyttjK|xHYD>kv}&`_g>?VyGPDjPMhFf28D99KJOFm+b#xevG8$9ryQ-L<7Y)3
zjs%751?4zxP3hCc`AUoWZV9iaTGd|(EmYKnAc6q*CSdJWq{@;g{ona~;VE7Ufy)d5
zwf?`%226>o5IBzr(E0x>Pz7lp)!wWPkY6BU_^WUV=rsB!dIw~m*T1ZBC%AwPPB;#x
zi9{j^)2woRcd40txW(tAJ3IX-}Usl7VgjEQfR|M$%U&HGVUWflq8#=G7uNY>=
z_Qebwo;^ZL&DzJXC(&YIAkF!tX{|Mz_0r;xa{aSA0F;+ZniI?OSZ)%#Z*Od^w}unp
z3G~3A^K}HFSC$4iZjLQ(ibS(n(!R!{EO+MX4qqn^|51?A+@Yb0bGM$kGb|XJ@q>kR
z(PJp>me