codeforlife-portal 6.44.3__tar.gz → 6.44.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of codeforlife-portal might be problematic. Click here for more details.
- codeforlife-portal-6.44.8/PKG-INFO +48 -0
- codeforlife-portal-6.44.8/codeforlife_portal.egg-info/PKG-INFO +48 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/codeforlife_portal.egg-info/requires.txt +2 -2
- codeforlife-portal-6.44.8/portal/__init__.py +1 -0
- codeforlife-portal-6.44.8/portal/static/portal/img/gitbook.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/contribute.html +9 -7
- codeforlife-portal-6.44.8/portal/templates/portal/reset_password_email_sent.html +19 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/test_emails.py +90 -34
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/urls.py +237 -55
- codeforlife-portal-6.44.8/portal/views/email.py +70 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/setup.py +11 -3
- codeforlife-portal-6.44.3/PKG-INFO +0 -7
- codeforlife-portal-6.44.3/codeforlife_portal.egg-info/PKG-INFO +0 -7
- codeforlife-portal-6.44.3/portal/__init__.py +0 -1
- codeforlife-portal-6.44.3/portal/static/portal/img/gitbook.png +0 -0
- codeforlife-portal-6.44.3/portal/templates/portal/reset_password_email_sent.html +0 -11
- codeforlife-portal-6.44.3/portal/views/email.py +0 -95
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/LICENSE.md +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/MANIFEST.in +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/README.md +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/codeforlife_portal.egg-info/SOURCES.txt +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/codeforlife_portal.egg-info/dependency_links.txt +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/codeforlife_portal.egg-info/not-zip-safe +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/codeforlife_portal.egg-info/top_level.txt +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/deploy/__init__.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/deploy/captcha.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/deploy/middleware/__init__.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/deploy/middleware/admin_access.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/deploy/middleware/basicauth.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/deploy/middleware/exceptionlogging.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/deploy/middleware/screentime_warning.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/deploy/middleware/security.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/deploy/middleware/session_timeout.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/deploy/static/apple-touch-icon-120x120.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/deploy/static/apple-touch-icon-152x152.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/deploy/static/apple-touch-icon-180x180.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/deploy/static/apple-touch-icon-76x76.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/deploy/static/apple-touch-icon.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/deploy/static/robots.txt +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/deploy/templates/deploy/csrf_failure.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/deploy/views.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/admin.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/app_settings.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/backends.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/beta.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/context_processors.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/forms/__init__.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/forms/add_game.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/forms/admin.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/forms/dotmailer.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/forms/error_messages.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/forms/invite_teacher.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/forms/organisation.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/forms/play.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/forms/registration.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/forms/teach.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/handlers.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/helpers/__init__.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/helpers/captcha.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/helpers/decorators.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/helpers/password.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/helpers/ratelimit.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/helpers/regexes.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/helpers/request_handlers.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/migrations/0001_squashed_0041_new_news.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/migrations/0042_school_country.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/migrations/0043_auto_20150430_0952.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/migrations/0044_auto_20150430_0959.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/migrations/0045_auto_20150430_1446.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/migrations/0046_auto_20150723_1101.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/migrations/0047_remove_userprofile_avatar.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/migrations/0048_plural_management_frontnews.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/migrations/0049_refactor_emailverifications.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/migrations/0050_refactor_emailverifications_2.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/migrations/0051_add_missing_ev_records.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/migrations/0052_refactor_emailverifications_3.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/migrations/0053_refactor_teacher_student_1.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/migrations/0054_pending_join_request_can_be_blank.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/migrations/0055_add_preview_user.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/migrations/0056_remove_preview_user.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/migrations/0057_delete_frontpagenews.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/migrations/0058_move_to_common_models.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/migrations/0059_move_email_verifications_to_common.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/migrations/0060_delete_guardian.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/migrations/0061_make_portaladmin_teacher.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/migrations/0062_verify_portaladmin.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/migrations/__init__.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/mixins/__init__.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/mixins/cron_mixin.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/models.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/permissions/__init__.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/permissions/is_cron_request_from_google.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/pipeline_compilers/__init__.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/pipeline_compilers/libsass_compiler.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/fonts/bootstrap/glyphicons-halflings-regular.eot +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/fonts/bootstrap/glyphicons-halflings-regular.svg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/fonts/bootstrap/glyphicons-halflings-regular.ttf +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/fonts/bootstrap/glyphicons-halflings-regular.woff +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/fonts/bootstrap/glyphicons-halflings-regular.woff2 +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/10_years_anniversary.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/10x_logo.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/RR_logo_grass_background.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/RR_logo_green.svg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/RR_logo_simple.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/about_us_cfl.jpg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/about_us_hero.jpg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/about_us_ocado.jpg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/barefoot_logo.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/bcs_logo.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/clubs.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/coding_club_hero.jpg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/coding_club_python_pack.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/colorboxImages/border.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/colorboxImages/controls.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/colorboxImages/loading.gif +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/colorboxImages/loading_background.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/colorboxImages/overlay.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/confirmation_tick.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/cross.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/dee.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/facebook.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/favicon.ico +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/get_involved_hero.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/gitbook_space.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/github.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/github_hero.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/gla_logo.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/hamburger.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/help_and_support_hero.jpg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/home_educate.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/home_educate_hero.jpg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/home_learning_hero.jpg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/home_play.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/home_play_hero.jpg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/hope_logo.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/icl_logo.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/icon_controller.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/icon_free.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/icon_globe.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/icon_piechart.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/icon_step_by_step.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/icon_tracking.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/icon_uk_flag.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/kirsty.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/kurono_hero.jpg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/kurono_landing_hero.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/kurono_logo.svg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/kurono_logo_grey_background.svg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/kurono_logo_mark.svg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/kurono_resources_hero.jpg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/kurono_story.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/logo_cfl.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/logo_cfl_powered.svg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/logo_cfl_reminder_cards.jpg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/logo_cfl_white_landscape.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/logo_ocado.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/logo_ocado_group.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/logo_ocado_group.svg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/logo_ocado_group_white.svg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/mc_saatchi_logo.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/nigel.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/ocado-swirl.svg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/oval_blue.svg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/oval_pink.svg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/oval_yellow.svg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/paper_plane.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/phil.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/polygon_blue.svg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/polygon_pink.svg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/polygon_yellow.svg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/pressure_cooker_logo.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/rapid_router.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/rapid_router_landing_hero.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/rapidrouter.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/resources_hero.jpg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/resources_montage.jpg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/reuben.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/rob.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/rr_advanced.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/rr_beginner.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/rr_intermediate.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/sadface.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/sharon_harrison.jpg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/sian.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/teaching_resources_hero.jpg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/thumbnail_educate_kurono.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/thumbnail_educate_rapid_router.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/thumbnail_educate_resources.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/thumbnail_intro_c4l.jpg +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/thumbnail_kurono_resources.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/thumbnail_play_kurono.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/thumbnail_play_rapid_router.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/twitter.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/universities.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/wes.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/img/x_close_video.png +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/js/aimmoGame.js +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/js/bootstrap.min.js +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/js/carouselCards.js +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/js/common.js +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/js/independentLogin.js +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/js/independentRegistration.js +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/js/join_create_game_toggle.js +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/js/jquery.placeholder.js +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/js/levelControl.js +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/js/lib/jquery-video-lightning.js +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/js/lib/jquery.colorbox.js +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/js/lib/jquery.easy-ticker.js +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/js/lib/jquery.min.js +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/js/lib/modernizr-build.js +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/js/lib/papaparse.min.js +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/js/organisation_manage.js +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/js/passwordStrength.js +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/js/play.js +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/js/resetPassword.js +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/js/riveted.min.js +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/js/school.js +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/js/sticky_subnav.js +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/js/studentLogin.js +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/js/teach_browser.js +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/js/teach_class.js +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/js/teacherEditStudent.js +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/js/teacherLogin.js +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_alerts.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_badges.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_breadcrumbs.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_button-groups.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_buttons.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_carousel.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_close.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_code.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_component-animations.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_dropdowns.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_forms.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_glyphicons.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_grid.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_input-groups.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_jumbotron.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_labels.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_list-group.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_media.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_mixins.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_modals.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_navbar.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_navs.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_normalize.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_pager.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_pagination.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_panels.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_popovers.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_print.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_progress-bars.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_responsive-embed.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_responsive-utilities.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_scaffolding.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_tables.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_theme.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_thumbnails.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_tooltip.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_type.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_utilities.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_variables.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/_wells.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_alerts.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_background-variant.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_border-radius.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_breakpoints.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_buttons.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_center-block.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_clearfix.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_forms.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_gradients.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_grid-framework.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_grid.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_hide-text.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_image.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_labels.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_list-group.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_nav-divider.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_nav-vertical-align.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_opacity.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_pagination.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_panels.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_progress-bar.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_reset-filter.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_reset-text.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_resize.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_responsive-visibility.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_size.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_tab-focus.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_table-row.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_text-emphasis.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_text-overflow.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_text-truncate.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap/mixins/_vendor-prefixes.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap_mixins/_all.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap_mixins/_border-radius.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap_mixins/_box-shadow.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap_mixins/_hover.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap_mixins/_nav-divider.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap_partials/_dropdown.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap_partials/_glyphicons.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap_partials/_grid.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap_partials/_variables.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap_utilities/_align.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap_utilities/_background.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap_utilities/_borders.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap_utilities/_clearfix.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap_utilities/_cursor.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap_utilities/_display.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap_utilities/_flex.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap_utilities/_float.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap_utilities/_position.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap_utilities/_screenreaders.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap_utilities/_sizing.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap_utilities/_spacing.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap_utilities/_text.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/bootstrap_utilities/_visibility.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/colorbox.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/modules/_all.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/modules/_animation.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/modules/_breakpoints.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/modules/_card_constants.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/modules/_colours.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/modules/_homepage_constants.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/modules/_levels.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/modules/_mixins.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/modules/_spacing.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/partials/_banners.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/partials/_base.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/partials/_buttons.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/partials/_carousel.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/partials/_footer.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/partials/_forms.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/partials/_grids.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/partials/_header.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/partials/_images.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/partials/_popup.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/partials/_progress-bars.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/partials/_subnavs.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/partials/_tables.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/partials/_text.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/partials/_ui-dialog.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/partials/_utils.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/partials/_videos.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/sass/styles.scss +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/video/aimmo_play_now_background_video.mp4 +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/static/portal/video/code for life .pdf +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/strings/__init__.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/strings/about.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/strings/coding_club.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/strings/help_and_support.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/strings/home_learning.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/strings/materials.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/strings/play.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/strings/student_aimmo_dashboard.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/strings/teach.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/strings/teacher_resources.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/403.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/404.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/500.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/captcha/includes/js_v2_invisible.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/captcha/widget_v2_invisible.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/email.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/email.txt +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/about.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/base.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/base_no_userprofile.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/coding_club.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/dotmailer_consent_form.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/email_invitation_sent.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/email_style_template.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/email_verification_failed.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/email_verification_needed.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/form_shapes.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/getinvolved.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/home.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/home_learning.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/locked_out.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/locked_out_school_student.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/login/independent_student.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/login/student.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/login/student_class_code.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/login/teacher.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/mouseflow.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/partials/aimmo_games_table.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/partials/banner.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/partials/benefits.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/partials/card_list.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/partials/character_list.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/partials/delete_popup.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/partials/footer.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/partials/header.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/partials/headline.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/partials/hero_card.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/partials/info_popup.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/partials/invite_admin_teacher.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/partials/popup.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/partials/register_newsletter_tickbox.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/partials/screentime_popup.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/partials/service_unavailable_popup.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/partials/session_popup.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/partials/teacher_non_dashboard_subnav.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/partials/teacher_non_dashboard_subnav_account.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/play/independent_student_dashboard.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/play/student_aimmo_dashboard.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/play/student_dashboard.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/play/student_edit_account.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/play/student_join_organisation.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/play.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/privacy_notice.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/register.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/reset_password.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/reset_password_confirm.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/reset_password_done.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/tag_manager/tag_manager_body.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/tag_manager/tag_manager_head.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/teach/base_registering.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/teach/class.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/teach/dashboard.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/teach/invited.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/teach/onboarding_classes.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/teach/onboarding_print.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/teach/onboarding_school.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/teach/onboarding_students.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/teach/teacher_add_external_student.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/teach/teacher_added_external_student.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/teach/teacher_aimmo_dashboard.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/teach/teacher_dismiss_students.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/teach/teacher_edit_class.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/teach/teacher_edit_student.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/teach/teacher_move_all_classes.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/teach/teacher_move_students.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/teach/teacher_move_students_to_class.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/teach.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/terms.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/two_factor/_base.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/two_factor/_wizard_actions.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/two_factor/_wizard_actions_enable_2fa.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/two_factor/_wizard_actions_submit.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/two_factor/_wizard_forms.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/two_factor/_wizard_forms_token.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/two_factor/backup_token.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/two_factor/core/backup_tokens.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/two_factor/core/login.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/two_factor/core/setup.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/two_factor/core/setup_complete.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/two_factor/profile/disable.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/two_factor/profile/profile.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/two_factor/setup_wizard_token.html +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templatetags/__init__.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templatetags/app_tags.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templatetags/banner_tags.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templatetags/benefits_tags.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templatetags/card_list_tags.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templatetags/character_list_tags.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templatetags/future.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templatetags/headline_tags.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templatetags/hero_card_tags.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templatetags/table_tags.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/__init__.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/base_test.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/conftest.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/migrations/__init__.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/migrations/test_migration_make_portaladmin_teacher.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/migrations/test_migration_preview_user_remove.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/migrations/test_migration_preview_users.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/migrations/test_migration_remove_front_page_news.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/migrations/test_migration_remove_guardian.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/migrations/test_migration_use_common_models.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/migrations/test_migration_verify_portaladmin.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/__init__.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/__init__.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/admin/__init__.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/admin/admin_base_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/admin/admin_data_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/admin/admin_map_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/base_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/email_verification_needed_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/forbidden_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/game_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/home_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/independent_login_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/kurono_teacher_dashboard_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/password_reset_form_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/password_reset_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/play/__init__.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/play/account_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/play/dashboard_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/play/join_school_or_club_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/play/play_base_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/play_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/resources_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/signup_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/student_login_class_code.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/student_login_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/teach/__init__.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/teach/add_independent_student_to_class_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/teach/added_independent_student_to_class_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/teach/class_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/teach/dashboard_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/teach/dismiss_students_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/teach/edit_student_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/teach/move_class_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/teach/move_classes_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/teach/move_students_disambiguate_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/teach/move_students_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/teach/onboarding_classes_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/teach/onboarding_organisation_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/teach/onboarding_student_list_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/teach/onboarding_students_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/teach/teach_base_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/pageObjects/portal/teacher_login_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/selenium_test_case.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/snapshots/__init__.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/snapshots/snap_test_partials.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/test_2FA.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/test_admin.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/test_aimmo_dashboards.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/test_api.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/test_captcha_forms.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/test_class.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/test_daily_activities.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/test_helper_methods.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/test_independent_student.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/test_invite_teacher.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/test_middleware.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/test_newsletter_footer.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/test_organisation.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/test_partials.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/test_ratelimit.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/test_school_student.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/test_security.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/test_teacher.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/test_teacher_student.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/test_views.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/utils/__init__.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/utils/aimmo_games.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/utils/classes.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/tests/utils/messages.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/__init__.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/about.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/admin.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/aimmo/__init__.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/aimmo/dashboard.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/api.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/cron/__init__.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/cron/user.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/dotmailer.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/home.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/legal.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/login/__init__.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/login/independent_student.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/login/student.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/login/teacher.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/organisation.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/play_landing_page.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/registration.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/student/__init__.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/student/edit_account_details.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/student/play.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/teach.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/teacher/__init__.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/teacher/dashboard.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/teacher/teach.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/two_factor/__init__.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/two_factor/core.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/two_factor/form.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/views/two_factor/profile.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/wsgi.py +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/pyproject.toml +0 -0
- {codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/setup.cfg +0 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: codeforlife-portal
|
|
3
|
+
Version: 6.44.8
|
|
4
|
+
Classifier: Programming Language :: Python
|
|
5
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
6
|
+
Classifier: Framework :: Django
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
License-File: LICENSE.md
|
|
9
|
+
|
|
10
|
+
# Code for Life Portal
|
|
11
|
+
|
|
12
|
+
[](https://github.com/ocadotechnology/codeforlife-portal/actions/workflows/ci.yml)
|
|
13
|
+
[](https://codecov.io/gh/ocadotechnology/codeforlife-portal)
|
|
14
|
+
|
|
15
|
+
## LICENCE
|
|
16
|
+
In accordance with the [Terms of Use](https://www.codeforlife.education/terms#terms)
|
|
17
|
+
of the Code for Life website, all copyright, trademarks, and other
|
|
18
|
+
intellectual property rights in and relating to Code for Life (including all
|
|
19
|
+
content of the Code for Life website, the Rapid Router application, the
|
|
20
|
+
Kurono application, related software (including any drawn and/or animated
|
|
21
|
+
avatars, whether or not such avatars have any modifications) and any other
|
|
22
|
+
games, applications or any other content that we make available from time to
|
|
23
|
+
time) are owned by Ocado Innovation Limited.
|
|
24
|
+
|
|
25
|
+
The source code of the Code for Life portal, the Rapid Router application
|
|
26
|
+
and the Kurono/aimmo application are [licensed under the GNU Affero General
|
|
27
|
+
Public License](https://github.com/ocadotechnology/codeforlife-workspace/blob/main/LICENSE.md).
|
|
28
|
+
All other assets including images, logos, sounds etc., are not covered by
|
|
29
|
+
this licence and no-one may copy, modify, distribute, show in public or
|
|
30
|
+
create any derivative work from these assets.
|
|
31
|
+
|
|
32
|
+
## Code for Life
|
|
33
|
+
|
|
34
|
+
[Code for Life](https://www.codeforlife.education/) has been developed by Ocado Technology as a **free, open-source** project to inspire the next generation of computer scientists and to help teachers deliver the computing curriculum.
|
|
35
|
+
|
|
36
|
+
This repository hosts the source code of the [main website](https://www.codeforlife.education/), which includes the registration, log in, teacher and student dashboards, the teaching materials, etc.
|
|
37
|
+
|
|
38
|
+
We are open to contributors from anywhere around the world. Please read ahead if you'd like to get involved.
|
|
39
|
+
|
|
40
|
+
## To get started
|
|
41
|
+
|
|
42
|
+
- [Developer Guide](https://docs.codeforlife.education/developer-guide)
|
|
43
|
+
|
|
44
|
+
- [Good First Issues](https://github.com/ocadotechnology/codeforlife-portal/contribute)
|
|
45
|
+
|
|
46
|
+
- [How to set up your work environment](https://docs.codeforlife.education/git/common-setup)
|
|
47
|
+
|
|
48
|
+
- [Testing](https://docs.codeforlife.education/git/testing)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: codeforlife-portal
|
|
3
|
+
Version: 6.44.8
|
|
4
|
+
Classifier: Programming Language :: Python
|
|
5
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
6
|
+
Classifier: Framework :: Django
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
License-File: LICENSE.md
|
|
9
|
+
|
|
10
|
+
# Code for Life Portal
|
|
11
|
+
|
|
12
|
+
[](https://github.com/ocadotechnology/codeforlife-portal/actions/workflows/ci.yml)
|
|
13
|
+
[](https://codecov.io/gh/ocadotechnology/codeforlife-portal)
|
|
14
|
+
|
|
15
|
+
## LICENCE
|
|
16
|
+
In accordance with the [Terms of Use](https://www.codeforlife.education/terms#terms)
|
|
17
|
+
of the Code for Life website, all copyright, trademarks, and other
|
|
18
|
+
intellectual property rights in and relating to Code for Life (including all
|
|
19
|
+
content of the Code for Life website, the Rapid Router application, the
|
|
20
|
+
Kurono application, related software (including any drawn and/or animated
|
|
21
|
+
avatars, whether or not such avatars have any modifications) and any other
|
|
22
|
+
games, applications or any other content that we make available from time to
|
|
23
|
+
time) are owned by Ocado Innovation Limited.
|
|
24
|
+
|
|
25
|
+
The source code of the Code for Life portal, the Rapid Router application
|
|
26
|
+
and the Kurono/aimmo application are [licensed under the GNU Affero General
|
|
27
|
+
Public License](https://github.com/ocadotechnology/codeforlife-workspace/blob/main/LICENSE.md).
|
|
28
|
+
All other assets including images, logos, sounds etc., are not covered by
|
|
29
|
+
this licence and no-one may copy, modify, distribute, show in public or
|
|
30
|
+
create any derivative work from these assets.
|
|
31
|
+
|
|
32
|
+
## Code for Life
|
|
33
|
+
|
|
34
|
+
[Code for Life](https://www.codeforlife.education/) has been developed by Ocado Technology as a **free, open-source** project to inspire the next generation of computer scientists and to help teachers deliver the computing curriculum.
|
|
35
|
+
|
|
36
|
+
This repository hosts the source code of the [main website](https://www.codeforlife.education/), which includes the registration, log in, teacher and student dashboards, the teaching materials, etc.
|
|
37
|
+
|
|
38
|
+
We are open to contributors from anywhere around the world. Please read ahead if you'd like to get involved.
|
|
39
|
+
|
|
40
|
+
## To get started
|
|
41
|
+
|
|
42
|
+
- [Developer Guide](https://docs.codeforlife.education/developer-guide)
|
|
43
|
+
|
|
44
|
+
- [Good First Issues](https://github.com/ocadotechnology/codeforlife-portal/contribute)
|
|
45
|
+
|
|
46
|
+
- [How to set up your work environment](https://docs.codeforlife.education/git/common-setup)
|
|
47
|
+
|
|
48
|
+
- [Testing](https://docs.codeforlife.education/git/testing)
|
{codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/codeforlife_portal.egg-info/requires.txt
RENAMED
|
@@ -10,14 +10,14 @@ aimmo>=2
|
|
|
10
10
|
reportlab==3.6.13
|
|
11
11
|
django-formtools==2.2
|
|
12
12
|
django-otp==1.0.2
|
|
13
|
-
requests==2.
|
|
13
|
+
requests==2.32.0
|
|
14
14
|
django-treebeard==4.3.1
|
|
15
15
|
django-sekizai==2.0.0
|
|
16
16
|
django-classy-tags==2.0.0
|
|
17
17
|
libsass==0.23.0
|
|
18
18
|
phonenumbers==8.12.12
|
|
19
19
|
more-itertools==8.7.0
|
|
20
|
-
cfl-common==6.44.
|
|
20
|
+
cfl-common==6.44.8
|
|
21
21
|
django-ratelimit==3.0.1
|
|
22
22
|
django-preventconcurrentlogins==0.8.2
|
|
23
23
|
django-csp==3.7
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "6.44.8"
|
|
Binary file
|
{codeforlife-portal-6.44.3 → codeforlife-portal-6.44.8}/portal/templates/portal/contribute.html
RENAMED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
{% block content %}
|
|
11
11
|
<div class="background container">
|
|
12
12
|
<section>
|
|
13
|
-
<
|
|
13
|
+
<h3>How to get involved and gain experience</h3>
|
|
14
14
|
</section>
|
|
15
15
|
<div class="row">
|
|
16
16
|
<div class="col-sm-6">
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
Ocado Technology deployed an army of internal volunteers who worked after hours, fuelled by
|
|
26
26
|
free pizzas and fizzy drinks.
|
|
27
27
|
</p>
|
|
28
|
-
<p>What came out of this, is what you see today, used by educators and learners from over
|
|
28
|
+
<p>What came out of this, is what you see today, used by educators and learners from over 180
|
|
29
29
|
countries. Our products are open-source and free forever.
|
|
30
30
|
</p>
|
|
31
31
|
</div>
|
|
@@ -50,14 +50,14 @@
|
|
|
50
50
|
</p>
|
|
51
51
|
|
|
52
52
|
<p><b>Rapid Router</b></p>
|
|
53
|
-
<p>An introduction to coding that is aimed at Key Stages 1-3 (age 5 to
|
|
53
|
+
<p>An introduction to coding that is aimed at Key Stages 1-3 (age 5 to 15).
|
|
54
54
|
Built on Blockly, it's a visual programming language similar to Scratch.
|
|
55
|
-
The levels start off with Blockly and gradually progress to Python. With
|
|
55
|
+
The levels start off with Blockly and gradually progress to Python. With over 100 levels,
|
|
56
56
|
Rapid Router is our flagship game with the biggest user base.
|
|
57
57
|
</p>
|
|
58
58
|
|
|
59
59
|
<p><b>Kurono</b></p>
|
|
60
|
-
<p>A multiplayer game that is aimed at
|
|
60
|
+
<p>A multiplayer game that is aimed at students at Key Stages 3 and up,
|
|
61
61
|
it is primarily for use in a class or a club setting. Students code in Python to
|
|
62
62
|
move their avatar around in order to complete tasks. Parts of Kurono are still in development.
|
|
63
63
|
</p>
|
|
@@ -77,8 +77,10 @@
|
|
|
77
77
|
<div class="col-sm-6">
|
|
78
78
|
<h4>How you can contribute</h4>
|
|
79
79
|
<p>Today, there is a small dedicated team working full time on Code for Life.
|
|
80
|
-
|
|
81
|
-
|
|
80
|
+
Our community, made up of dedicated teachers, tutors, students, and volunteers,
|
|
81
|
+
has played a vital part in Code For Life's growth. The resources and games are
|
|
82
|
+
aligned to the UK National Curriculum and have reached over 265,000 active users
|
|
83
|
+
across 180 countries, and over 600,000 users since the launch in 2014. We need your help to grow even more.
|
|
82
84
|
</p>
|
|
83
85
|
<p>
|
|
84
86
|
If contributing to open-source projects to support education in coding and technology
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{% extends 'portal/form_shapes.html' %}
|
|
2
|
+
{% load static %}
|
|
3
|
+
|
|
4
|
+
{% block form_content %}
|
|
5
|
+
<div id="reset_password_email_sent_page"></div>
|
|
6
|
+
<h4>Thank you</h4>
|
|
7
|
+
<h5>If you have entered a valid email address, you will receive a link to
|
|
8
|
+
reset your password. Make sure to check your <strong>spam</strong>.</h5>
|
|
9
|
+
<img class="background" title="Paper Plane" alt="Verification email sent"
|
|
10
|
+
src="{% static 'portal/img/paper_plane.png' %}">
|
|
11
|
+
<div>
|
|
12
|
+
<a target="_blank"
|
|
13
|
+
href="https://mail.google.com/mail/#search/from%3AOcado.Innovation.Ltd%40r1.dotdigital-email.com+subject%3APassword+reset+request"
|
|
14
|
+
class="button button--home button-email">Open in Gmail</a>
|
|
15
|
+
<a target="_blank" href="https://outlook.live.com/mail/" class="button button--home button-email">Open in
|
|
16
|
+
Outlook</a>
|
|
17
|
+
</div>
|
|
18
|
+
<p class="text-left"><a id="home_button" href="{% url 'home' %}">< back to homepage</a></p>
|
|
19
|
+
{% endblock form_content %}
|
|
@@ -10,7 +10,6 @@ from common.helpers.emails import (
|
|
|
10
10
|
send_dotmailer_consent_confirmation_email_to_user,
|
|
11
11
|
DotmailerUserType,
|
|
12
12
|
)
|
|
13
|
-
from django.core import mail
|
|
14
13
|
from django.test import Client
|
|
15
14
|
from django.urls import reverse
|
|
16
15
|
|
|
@@ -41,19 +40,15 @@ def patch_datetime_now(monkeypatch):
|
|
|
41
40
|
monkeypatch.setattr(datetime, "datetime", mydatetime)
|
|
42
41
|
|
|
43
42
|
|
|
44
|
-
@pytest.mark.django_db
|
|
45
|
-
def test_send_new_users_numbers_email():
|
|
46
|
-
client = Client()
|
|
47
|
-
response = client.get(reverse("send_new_users_report"))
|
|
48
|
-
assert response.status_code == 200
|
|
49
|
-
assert len(mail.outbox) == 1
|
|
50
|
-
|
|
51
|
-
|
|
52
43
|
def test_newsletter_calls_correct_requests(mocker, monkeypatch):
|
|
53
44
|
mocked_create_contact = mocker.patch("common.helpers.emails.create_contact")
|
|
54
|
-
mocked_add_to_address_book = mocker.patch(
|
|
45
|
+
mocked_add_to_address_book = mocker.patch(
|
|
46
|
+
"common.helpers.emails.add_contact_to_address_book"
|
|
47
|
+
)
|
|
55
48
|
|
|
56
|
-
add_to_dotmailer(
|
|
49
|
+
add_to_dotmailer(
|
|
50
|
+
"Ray", "Charles", "ray.charles@example.com", DotmailerUserType.TEACHER
|
|
51
|
+
)
|
|
57
52
|
|
|
58
53
|
mocked_create_contact.assert_called_once()
|
|
59
54
|
mocked_add_to_address_book.assert_called_once()
|
|
@@ -74,10 +69,15 @@ def test_delete_account(mocker):
|
|
|
74
69
|
|
|
75
70
|
delete_contact("example@mail.com")
|
|
76
71
|
|
|
77
|
-
mocked_delete.assert_called_once_with(
|
|
72
|
+
mocked_delete.assert_called_once_with(
|
|
73
|
+
DOTMAILER_DELETE_USER_BY_ID_URL,
|
|
74
|
+
auth=(DOTMAILER_USER, DOTMAILER_PASSWORD),
|
|
75
|
+
)
|
|
78
76
|
|
|
79
77
|
|
|
80
|
-
def test_newsletter_sends_correct_request_data(
|
|
78
|
+
def test_newsletter_sends_correct_request_data(
|
|
79
|
+
mocker, monkeypatch, patch_datetime_now
|
|
80
|
+
):
|
|
81
81
|
mocked_post = mocker.patch("common.helpers.emails.post")
|
|
82
82
|
|
|
83
83
|
expected_body1 = {
|
|
@@ -91,7 +91,13 @@ def test_newsletter_sends_correct_request_data(mocker, monkeypatch, patch_dateti
|
|
|
91
91
|
{"key": "FULLNAME", "value": "Ray Charles"},
|
|
92
92
|
],
|
|
93
93
|
},
|
|
94
|
-
"consentFields": [
|
|
94
|
+
"consentFields": [
|
|
95
|
+
{
|
|
96
|
+
"fields": [
|
|
97
|
+
{"key": "DATETIMECONSENTED", "value": FAKE_TIME.__str__()}
|
|
98
|
+
]
|
|
99
|
+
}
|
|
100
|
+
],
|
|
95
101
|
"preferences": [{"trout": True}],
|
|
96
102
|
}
|
|
97
103
|
|
|
@@ -109,51 +115,76 @@ def test_newsletter_sends_correct_request_data(mocker, monkeypatch, patch_dateti
|
|
|
109
115
|
create_contact("Ray", "Charles", "ray.charles@example.com")
|
|
110
116
|
|
|
111
117
|
mocked_post.assert_called_once_with(
|
|
112
|
-
DOTMAILER_CREATE_CONTACT_URL,
|
|
118
|
+
DOTMAILER_CREATE_CONTACT_URL,
|
|
119
|
+
auth=(DOTMAILER_USER, DOTMAILER_PASSWORD),
|
|
120
|
+
json=expected_body1,
|
|
113
121
|
)
|
|
114
122
|
|
|
115
|
-
add_contact_to_address_book(
|
|
123
|
+
add_contact_to_address_book(
|
|
124
|
+
"Ray", "Charles", "ray.charles@example.com", DotmailerUserType.TEACHER
|
|
125
|
+
)
|
|
116
126
|
|
|
117
127
|
assert mocked_post.call_count == 3
|
|
118
128
|
|
|
119
129
|
mocked_post.assert_any_call(
|
|
120
|
-
DOTMAILER_MAIN_ADDRESS_BOOK_URL,
|
|
130
|
+
DOTMAILER_MAIN_ADDRESS_BOOK_URL,
|
|
131
|
+
auth=(DOTMAILER_USER, DOTMAILER_PASSWORD),
|
|
132
|
+
json=expected_body2,
|
|
121
133
|
)
|
|
122
134
|
|
|
123
135
|
mocked_post.assert_any_call(
|
|
124
|
-
DOTMAILER_TEACHER_ADDRESS_BOOK_URL,
|
|
136
|
+
DOTMAILER_TEACHER_ADDRESS_BOOK_URL,
|
|
137
|
+
auth=(DOTMAILER_USER, DOTMAILER_PASSWORD),
|
|
138
|
+
json=expected_body2,
|
|
125
139
|
)
|
|
126
140
|
|
|
127
141
|
mocked_post.reset_mock()
|
|
128
142
|
|
|
129
|
-
add_contact_to_address_book(
|
|
143
|
+
add_contact_to_address_book(
|
|
144
|
+
"Ray", "Charles", "ray.charles@example.com", DotmailerUserType.STUDENT
|
|
145
|
+
)
|
|
130
146
|
|
|
131
147
|
assert mocked_post.call_count == 2
|
|
132
148
|
|
|
133
149
|
mocked_post.assert_any_call(
|
|
134
|
-
DOTMAILER_MAIN_ADDRESS_BOOK_URL,
|
|
150
|
+
DOTMAILER_MAIN_ADDRESS_BOOK_URL,
|
|
151
|
+
auth=(DOTMAILER_USER, DOTMAILER_PASSWORD),
|
|
152
|
+
json=expected_body2,
|
|
135
153
|
)
|
|
136
154
|
|
|
137
155
|
mocked_post.assert_any_call(
|
|
138
|
-
DOTMAILER_STUDENT_ADDRESS_BOOK_URL,
|
|
156
|
+
DOTMAILER_STUDENT_ADDRESS_BOOK_URL,
|
|
157
|
+
auth=(DOTMAILER_USER, DOTMAILER_PASSWORD),
|
|
158
|
+
json=expected_body2,
|
|
139
159
|
)
|
|
140
160
|
|
|
141
161
|
mocked_post.reset_mock()
|
|
142
162
|
|
|
143
|
-
add_contact_to_address_book(
|
|
163
|
+
add_contact_to_address_book(
|
|
164
|
+
"Ray",
|
|
165
|
+
"Charles",
|
|
166
|
+
"ray.charles@example.com",
|
|
167
|
+
DotmailerUserType.NO_ACCOUNT,
|
|
168
|
+
)
|
|
144
169
|
|
|
145
170
|
assert mocked_post.call_count == 2
|
|
146
171
|
|
|
147
172
|
mocked_post.assert_any_call(
|
|
148
|
-
DOTMAILER_MAIN_ADDRESS_BOOK_URL,
|
|
173
|
+
DOTMAILER_MAIN_ADDRESS_BOOK_URL,
|
|
174
|
+
auth=(DOTMAILER_USER, DOTMAILER_PASSWORD),
|
|
175
|
+
json=expected_body2,
|
|
149
176
|
)
|
|
150
177
|
|
|
151
178
|
mocked_post.assert_any_call(
|
|
152
|
-
DOTMAILER_NO_ACCOUNT_ADDRESS_BOOK_URL,
|
|
179
|
+
DOTMAILER_NO_ACCOUNT_ADDRESS_BOOK_URL,
|
|
180
|
+
auth=(DOTMAILER_USER, DOTMAILER_PASSWORD),
|
|
181
|
+
json=expected_body2,
|
|
153
182
|
)
|
|
154
183
|
|
|
155
184
|
|
|
156
|
-
def test_consent_calls_send_correct_request_data(
|
|
185
|
+
def test_consent_calls_send_correct_request_data(
|
|
186
|
+
mocker, monkeypatch, patch_datetime_now
|
|
187
|
+
):
|
|
157
188
|
mocked_post = mocker.patch("common.helpers.emails.post")
|
|
158
189
|
mocked_put = mocker.patch("common.helpers.emails.put")
|
|
159
190
|
|
|
@@ -181,21 +212,34 @@ def test_consent_calls_send_correct_request_data(mocker, monkeypatch, patch_date
|
|
|
181
212
|
{"key": "FULLNAME", "value": "Ray Charles"},
|
|
182
213
|
],
|
|
183
214
|
},
|
|
184
|
-
"consentFields": [
|
|
215
|
+
"consentFields": [
|
|
216
|
+
{
|
|
217
|
+
"fields": [
|
|
218
|
+
{"key": "DATETIMECONSENTED", "value": FAKE_TIME.__str__()}
|
|
219
|
+
]
|
|
220
|
+
}
|
|
221
|
+
],
|
|
185
222
|
}
|
|
186
223
|
|
|
187
|
-
expected_body2 = {
|
|
224
|
+
expected_body2 = {
|
|
225
|
+
"campaignID": DOTMAILER_THANKS_FOR_STAYING_CAMPAIGN_ID,
|
|
226
|
+
"contactIds": ["1"],
|
|
227
|
+
}
|
|
188
228
|
|
|
189
229
|
add_consent_record_to_dotmailer_user(user)
|
|
190
230
|
|
|
191
231
|
mocked_put.assert_called_once_with(
|
|
192
|
-
DOTMAILER_PUT_CONSENT_DATA_URL,
|
|
232
|
+
DOTMAILER_PUT_CONSENT_DATA_URL,
|
|
233
|
+
auth=(DOTMAILER_USER, DOTMAILER_PASSWORD),
|
|
234
|
+
json=expected_body1,
|
|
193
235
|
)
|
|
194
236
|
|
|
195
237
|
send_dotmailer_consent_confirmation_email_to_user(user)
|
|
196
238
|
|
|
197
239
|
mocked_post.assert_called_with(
|
|
198
|
-
DOTMAILER_SEND_CAMPAIGN_URL,
|
|
240
|
+
DOTMAILER_SEND_CAMPAIGN_URL,
|
|
241
|
+
auth=(DOTMAILER_USER, DOTMAILER_PASSWORD),
|
|
242
|
+
json=expected_body2,
|
|
199
243
|
)
|
|
200
244
|
|
|
201
245
|
|
|
@@ -212,9 +256,15 @@ def test_dotmailer_consent_form(mocker, monkeypatch):
|
|
|
212
256
|
c = Client()
|
|
213
257
|
consent_form_url = reverse("consent_form")
|
|
214
258
|
|
|
215
|
-
mocked_get_user_success = mocker.patch(
|
|
216
|
-
|
|
217
|
-
|
|
259
|
+
mocked_get_user_success = mocker.patch(
|
|
260
|
+
"portal.views.dotmailer.get_dotmailer_user_by_email"
|
|
261
|
+
)
|
|
262
|
+
mocked_add_consent = mocker.patch(
|
|
263
|
+
"portal.views.dotmailer.add_consent_record_to_dotmailer_user"
|
|
264
|
+
)
|
|
265
|
+
mocked_send_campaign = mocker.patch(
|
|
266
|
+
"portal.views.dotmailer.send_dotmailer_consent_confirmation_email_to_user"
|
|
267
|
+
)
|
|
218
268
|
|
|
219
269
|
get_consent_form_response = c.get(consent_form_url)
|
|
220
270
|
|
|
@@ -244,7 +294,10 @@ def test_dotmailer_consent_form(mocker, monkeypatch):
|
|
|
244
294
|
mocked_add_consent.assert_called_once()
|
|
245
295
|
mocked_send_campaign.assert_called_once()
|
|
246
296
|
|
|
247
|
-
mocker.patch(
|
|
297
|
+
mocker.patch(
|
|
298
|
+
"portal.views.dotmailer.add_consent_record_to_dotmailer_user",
|
|
299
|
+
side_effect=KeyError,
|
|
300
|
+
)
|
|
248
301
|
|
|
249
302
|
wrong_email_response = c.post(consent_form_url, data=good_request_data)
|
|
250
303
|
|
|
@@ -255,4 +308,7 @@ def test_dotmailer_consent_form(mocker, monkeypatch):
|
|
|
255
308
|
|
|
256
309
|
def _is_warning_message_showing(response):
|
|
257
310
|
messages = list(response.wsgi_request._messages)
|
|
258
|
-
assert
|
|
311
|
+
assert (
|
|
312
|
+
messages[0].message
|
|
313
|
+
== "Valid email address and consent required. Please try again."
|
|
314
|
+
)
|