codeforlife-portal 1.0.0.post0.dev48__py2.py3-none-any.whl

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.
Files changed (289) hide show
  1. codeforlife_portal-1.0.0.post0.dev48.dist-info/DESCRIPTION.rst +3 -0
  2. codeforlife_portal-1.0.0.post0.dev48.dist-info/METADATA +53 -0
  3. codeforlife_portal-1.0.0.post0.dev48.dist-info/RECORD +289 -0
  4. codeforlife_portal-1.0.0.post0.dev48.dist-info/WHEEL +6 -0
  5. codeforlife_portal-1.0.0.post0.dev48.dist-info/metadata.json +1 -0
  6. codeforlife_portal-1.0.0.post0.dev48.dist-info/top_level.txt +4 -0
  7. deploy/__init__.py +36 -0
  8. deploy/captcha.py +38 -0
  9. deploy/mail.py +93 -0
  10. deploy/middleware/__init__.py +0 -0
  11. deploy/middleware/basicauth.py +24 -0
  12. deploy/middleware/exceptionlogging.py +8 -0
  13. deploy/permissions.py +2 -0
  14. deploy/settings.py +288 -0
  15. deploy/static/apple-touch-icon-120x120.png +0 -0
  16. deploy/static/apple-touch-icon-152x152.png +0 -0
  17. deploy/static/apple-touch-icon-180x180.png +0 -0
  18. deploy/static/apple-touch-icon-76x76.png +0 -0
  19. deploy/static/apple-touch-icon.png +0 -0
  20. deploy/static/robots.txt +2 -0
  21. deploy/templates/deploy/csrf_failure.html +18 -0
  22. deploy/urls.py +22 -0
  23. deploy/views.py +5 -0
  24. deploy/wsgi.py +14 -0
  25. portal/__init__.py +40 -0
  26. portal/_version.py +21 -0
  27. portal/app_settings.py +49 -0
  28. portal/autoconfig.py +169 -0
  29. portal/beta.py +44 -0
  30. portal/emailMessages.py +189 -0
  31. portal/forms/__init__.py +36 -0
  32. portal/forms/admin_login.py +46 -0
  33. portal/forms/auth_forms.py +72 -0
  34. portal/forms/home.py +51 -0
  35. portal/forms/organisation.py +123 -0
  36. portal/forms/play.py +238 -0
  37. portal/forms/registration.py +220 -0
  38. portal/forms/teach.py +513 -0
  39. portal/helpers/__init__.py +36 -0
  40. portal/helpers/email.py +109 -0
  41. portal/helpers/generators.py +79 -0
  42. portal/helpers/location.py +138 -0
  43. portal/helpers/password.py +44 -0
  44. portal/middleware/__init__.py +36 -0
  45. portal/middleware/ratelimit_login_attempts.py +57 -0
  46. portal/migrations/0001_squashed_0041_new_news.py +574 -0
  47. portal/migrations/0042_school_country.py +55 -0
  48. portal/migrations/0043_auto_20150430_0952.py +55 -0
  49. portal/migrations/0044_auto_20150430_0959.py +71 -0
  50. portal/migrations/0045_auto_20150430_1446.py +55 -0
  51. portal/migrations/0046_auto_20150723_1101.py +54 -0
  52. portal/migrations/__init__.py +36 -0
  53. portal/models.py +204 -0
  54. portal/permissions.py +70 -0
  55. portal/static/email_media/cfl_logo_blue_rounded.png +0 -0
  56. portal/static/email_media/cfllogo.png +0 -0
  57. portal/static/portal/css/colorbox.css +107 -0
  58. portal/static/portal/css/common.css +39 -0
  59. portal/static/portal/css/images/animated-overlay.gif +0 -0
  60. portal/static/portal/css/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  61. portal/static/portal/css/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  62. portal/static/portal/css/images/ui-bg_flat_10_000000_40x100.png +0 -0
  63. portal/static/portal/css/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  64. portal/static/portal/css/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  65. portal/static/portal/css/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  66. portal/static/portal/css/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  67. portal/static/portal/css/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  68. portal/static/portal/css/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  69. portal/static/portal/css/images/ui-icons_222222_256x240.png +0 -0
  70. portal/static/portal/css/images/ui-icons_228ef1_256x240.png +0 -0
  71. portal/static/portal/css/images/ui-icons_ef8c08_256x240.png +0 -0
  72. portal/static/portal/css/images/ui-icons_ffd27a_256x240.png +0 -0
  73. portal/static/portal/css/images/ui-icons_ffffff_256x240.png +0 -0
  74. portal/static/portal/css/jquery-ui.css +1251 -0
  75. portal/static/portal/css/jquery-ui.structure.css +833 -0
  76. portal/static/portal/css/jquery-ui.theme.css +439 -0
  77. portal/static/portal/css/list.css +274 -0
  78. portal/static/portal/css/noJS.css +100 -0
  79. portal/static/portal/css/reset.css +123 -0
  80. portal/static/portal/css/styles.css +1172 -0
  81. portal/static/portal/css/tables.css +147 -0
  82. portal/static/portal/img/2fa_authenticator_link.png +0 -0
  83. portal/static/portal/img/RR_logo_blank.png +0 -0
  84. portal/static/portal/img/RRlogo_on_green.png +0 -0
  85. portal/static/portal/img/RRlogo_on_green_small.png +0 -0
  86. portal/static/portal/img/RRlogo_on_less_green.png +0 -0
  87. portal/static/portal/img/RRlogo_on_less_green_small.png +0 -0
  88. portal/static/portal/img/avatars/default-avatar.jpeg +0 -0
  89. portal/static/portal/img/cfl_logo_blue.png +0 -0
  90. portal/static/portal/img/cfl_logo_blue_rounded.png +0 -0
  91. portal/static/portal/img/codeForLife_logo.svg +223 -0
  92. portal/static/portal/img/colorboxImages/border.png +0 -0
  93. portal/static/portal/img/colorboxImages/controls.png +0 -0
  94. portal/static/portal/img/colorboxImages/loading.gif +0 -0
  95. portal/static/portal/img/colorboxImages/loading_background.png +0 -0
  96. portal/static/portal/img/colorboxImages/overlay.png +0 -0
  97. portal/static/portal/img/dee_hi_res.png +0 -0
  98. portal/static/portal/img/dee_large.png +0 -0
  99. portal/static/portal/img/dee_red_box.png +0 -0
  100. portal/static/portal/img/favicon.ico +0 -0
  101. portal/static/portal/img/kirsty.png +0 -0
  102. portal/static/portal/img/kirsty_hi_res.png +0 -0
  103. portal/static/portal/img/kirsty_large.png +0 -0
  104. portal/static/portal/img/logged_in_blob.png +0 -0
  105. portal/static/portal/img/logged_out_blob.png +0 -0
  106. portal/static/portal/img/logo_white.png +0 -0
  107. portal/static/portal/img/movie_file.png +0 -0
  108. portal/static/portal/img/nigel.png +0 -0
  109. portal/static/portal/img/nigel_hi_res.png +0 -0
  110. portal/static/portal/img/nigel_large.png +0 -0
  111. portal/static/portal/img/padlock.png +0 -0
  112. portal/static/portal/img/pdfsmall.png +0 -0
  113. portal/static/portal/img/phil.png +0 -0
  114. portal/static/portal/img/phil_hi_res.png +0 -0
  115. portal/static/portal/img/phil_large.png +0 -0
  116. portal/static/portal/img/qr_code_scan.png +0 -0
  117. portal/static/portal/img/rrBG.jpg +0 -0
  118. portal/static/portal/img/rrBGIE.jpg +0 -0
  119. portal/static/portal/img/rrBGsmall.jpg +0 -0
  120. portal/static/portal/img/video_still.png +0 -0
  121. portal/static/portal/img/wes.png +0 -0
  122. portal/static/portal/img/wes_hi_res.png +0 -0
  123. portal/static/portal/img/wes_large.png +0 -0
  124. portal/static/portal/img/zip.png +0 -0
  125. portal/static/portal/js/common.js +92 -0
  126. portal/static/portal/js/deleteWorkspaces.js +51 -0
  127. portal/static/portal/js/fuzzySchoolLookup.js +83 -0
  128. portal/static/portal/js/jquery.placeholder.js +185 -0
  129. portal/static/portal/js/lib/jquery-ui.js +16150 -0
  130. portal/static/portal/js/lib/jquery-video-lightning.js +450 -0
  131. portal/static/portal/js/lib/jquery.colorbox.js +1090 -0
  132. portal/static/portal/js/lib/jquery.easy-ticker.js +208 -0
  133. portal/static/portal/js/lib/jquery.js +4 -0
  134. portal/static/portal/js/lib/magnific.js +3 -0
  135. portal/static/portal/js/lib/modernizr.custom.79639.js +4 -0
  136. portal/static/portal/js/organisation_manage.js +69 -0
  137. portal/static/portal/js/passwordStrength.js +101 -0
  138. portal/static/portal/js/play.js +92 -0
  139. portal/static/portal/js/teach_class.js +137 -0
  140. portal/templates/403.html +12 -0
  141. portal/templates/404.html +12 -0
  142. portal/templates/500.html +48 -0
  143. portal/templates/email.html +6 -0
  144. portal/templates/email.txt +1 -0
  145. portal/templates/portal/2FA_redirect.html +27 -0
  146. portal/templates/portal/about.html +65 -0
  147. portal/templates/portal/admin/aggregated_data.html +38 -0
  148. portal/templates/portal/admin/map.html +70 -0
  149. portal/templates/portal/base.html +169 -0
  150. portal/templates/portal/base_no_userprofile.html +9 -0
  151. portal/templates/portal/contact.html +64 -0
  152. portal/templates/portal/email_verification_failed.html +21 -0
  153. portal/templates/portal/email_verification_needed.html +26 -0
  154. portal/templates/portal/help-and-support.html +151 -0
  155. portal/templates/portal/home.html +250 -0
  156. portal/templates/portal/locked_out.html +14 -0
  157. portal/templates/portal/play/base.html +7 -0
  158. portal/templates/portal/play/student_details.html +95 -0
  159. portal/templates/portal/play/student_edit_account.html +111 -0
  160. portal/templates/portal/play/student_join_organisation.html +94 -0
  161. portal/templates/portal/play.html +196 -0
  162. portal/templates/portal/teach/base.html +6 -0
  163. portal/templates/portal/teach/organisation_create.html +116 -0
  164. portal/templates/portal/teach/organisation_manage.html +150 -0
  165. portal/templates/portal/teach/teacher_add_external_student.html +69 -0
  166. portal/templates/portal/teach/teacher_added_external_student.html +26 -0
  167. portal/templates/portal/teach/teacher_class.html +127 -0
  168. portal/templates/portal/teach/teacher_classes.html +104 -0
  169. portal/templates/portal/teach/teacher_dismiss_students.html +64 -0
  170. portal/templates/portal/teach/teacher_edit_account.html +143 -0
  171. portal/templates/portal/teach/teacher_edit_class.html +73 -0
  172. portal/templates/portal/teach/teacher_edit_student.html +110 -0
  173. portal/templates/portal/teach/teacher_home.html +146 -0
  174. portal/templates/portal/teach/teacher_lesson_plans.html +374 -0
  175. portal/templates/portal/teach/teacher_lesson_plans_python.html +233 -0
  176. portal/templates/portal/teach/teacher_move_all_classes.html +62 -0
  177. portal/templates/portal/teach/teacher_move_class.html +48 -0
  178. portal/templates/portal/teach/teacher_move_students.html +50 -0
  179. portal/templates/portal/teach/teacher_move_students_to_class.html +83 -0
  180. portal/templates/portal/teach/teacher_new_students.html +55 -0
  181. portal/templates/portal/teach/teacher_student_reset.html +30 -0
  182. portal/templates/portal/teach/teacher_students_reset.html +51 -0
  183. portal/templates/portal/teach.html +151 -0
  184. portal/templates/portal/terms.html +88 -0
  185. portal/templates/registration/login.html +49 -0
  186. portal/templates/registration/password_reset_complete.html +20 -0
  187. portal/templates/registration/password_reset_confirm.html +65 -0
  188. portal/templates/registration/password_reset_done.html +19 -0
  189. portal/templates/registration/password_reset_email.html +9 -0
  190. portal/templates/registration/student_password_reset_form.html +44 -0
  191. portal/templates/registration/teacher_password_reset_form.html +45 -0
  192. portal/templates/two_factor/_base.html +9 -0
  193. portal/templates/two_factor/core/setup_complete.html +15 -0
  194. portal/templates/two_factor/profile/profile.html +42 -0
  195. portal/templatetags/__init__.py +36 -0
  196. portal/templatetags/app_tags.py +119 -0
  197. portal/templatetags/table_tags.py +57 -0
  198. portal/tests/__init__.py +36 -0
  199. portal/tests/base_test.py +83 -0
  200. portal/tests/base_test_migration.py +67 -0
  201. portal/tests/pageObjects/__init__.py +36 -0
  202. portal/tests/pageObjects/portal/__init__.py +36 -0
  203. portal/tests/pageObjects/portal/about_page.py +43 -0
  204. portal/tests/pageObjects/portal/admin/__init__.py +36 -0
  205. portal/tests/pageObjects/portal/admin/admin_base_page.py +73 -0
  206. portal/tests/pageObjects/portal/admin/admin_data_page.py +45 -0
  207. portal/tests/pageObjects/portal/admin/admin_login_page.py +75 -0
  208. portal/tests/pageObjects/portal/admin/admin_map_page.py +45 -0
  209. portal/tests/pageObjects/portal/base_page.py +156 -0
  210. portal/tests/pageObjects/portal/contact_page.py +43 -0
  211. portal/tests/pageObjects/portal/email_verification_needed_page.py +49 -0
  212. portal/tests/pageObjects/portal/forbidden_page.py +44 -0
  213. portal/tests/pageObjects/portal/game_page.py +135 -0
  214. portal/tests/pageObjects/portal/help_and_support_page.py +43 -0
  215. portal/tests/pageObjects/portal/home_page.py +48 -0
  216. portal/tests/pageObjects/portal/play/__init__.py +36 -0
  217. portal/tests/pageObjects/portal/play/account_page.py +62 -0
  218. portal/tests/pageObjects/portal/play/dashboard_page.py +52 -0
  219. portal/tests/pageObjects/portal/play/join_school_or_club_page.py +51 -0
  220. portal/tests/pageObjects/portal/play/play_base_page.py +60 -0
  221. portal/tests/pageObjects/portal/play_page.py +187 -0
  222. portal/tests/pageObjects/portal/teach/__init__.py +36 -0
  223. portal/tests/pageObjects/portal/teach/account_page.py +80 -0
  224. portal/tests/pageObjects/portal/teach/add_independent_student_to_class_page.py +51 -0
  225. portal/tests/pageObjects/portal/teach/added_independent_student_to_class_page.py +50 -0
  226. portal/tests/pageObjects/portal/teach/class_page.py +193 -0
  227. portal/tests/pageObjects/portal/teach/class_settings_page.py +84 -0
  228. portal/tests/pageObjects/portal/teach/classes_page.py +76 -0
  229. portal/tests/pageObjects/portal/teach/dashboard_page.py +43 -0
  230. portal/tests/pageObjects/portal/teach/dismiss_students_page.py +65 -0
  231. portal/tests/pageObjects/portal/teach/move_class_page.py +63 -0
  232. portal/tests/pageObjects/portal/teach/move_students_disambiguate_page.py +55 -0
  233. portal/tests/pageObjects/portal/teach/move_students_page.py +63 -0
  234. portal/tests/pageObjects/portal/teach/new_students_page.py +55 -0
  235. portal/tests/pageObjects/portal/teach/organisation_create_page.py +90 -0
  236. portal/tests/pageObjects/portal/teach/organisation_manage_page.py +94 -0
  237. portal/tests/pageObjects/portal/teach/organisation_revoke_page.py +53 -0
  238. portal/tests/pageObjects/portal/teach/teach_base_page.py +83 -0
  239. portal/tests/pageObjects/portal/teach/thanks_for_reset_page.py +45 -0
  240. portal/tests/pageObjects/portal/teach_page.py +90 -0
  241. portal/tests/pageObjects/portal/terms_page.py +43 -0
  242. portal/tests/pageObjects/registration/__init__.py +36 -0
  243. portal/tests/pageObjects/registration/independent_student_login_form_page.py +53 -0
  244. portal/tests/pageObjects/registration/password_reset_form_page.py +61 -0
  245. portal/tests/pageObjects/registration/student_password_reset_form_page.py +58 -0
  246. portal/tests/pageObjects/registration/teacher_password_reset_form_page.py +59 -0
  247. portal/tests/test_admin.py +148 -0
  248. portal/tests/test_class.py +176 -0
  249. portal/tests/test_independent_student.py +129 -0
  250. portal/tests/test_independent_student_joins_a_class.py +75 -0
  251. portal/tests/test_location.py +224 -0
  252. portal/tests/test_migration_country.py +130 -0
  253. portal/tests/test_navigation.py +108 -0
  254. portal/tests/test_organisation.py +225 -0
  255. portal/tests/test_school_student.py +101 -0
  256. portal/tests/test_teacher.py +193 -0
  257. portal/tests/test_teacher_student.py +244 -0
  258. portal/tests/utils/__init__.py +36 -0
  259. portal/tests/utils/classes.py +97 -0
  260. portal/tests/utils/email.py +103 -0
  261. portal/tests/utils/messages.py +67 -0
  262. portal/tests/utils/organisation.py +81 -0
  263. portal/tests/utils/student.py +114 -0
  264. portal/tests/utils/teacher.py +73 -0
  265. portal/urls.py +175 -0
  266. portal/views/__init__.py +36 -0
  267. portal/views/admin.py +308 -0
  268. portal/views/email.py +77 -0
  269. portal/views/home.py +345 -0
  270. portal/views/organisation.py +379 -0
  271. portal/views/play.py +165 -0
  272. portal/views/registration.py +105 -0
  273. portal/views/teacher/__init__.py +36 -0
  274. portal/views/teacher/home.py +104 -0
  275. portal/views/teacher/teach.py +768 -0
  276. portal/wsgi.py +50 -0
  277. ratelimit/__init__.py +1 -0
  278. ratelimit/backends/__init__.py +8 -0
  279. ratelimit/backends/cache.py +42 -0
  280. ratelimit/decorators.py +59 -0
  281. reports/__init__.py +36 -0
  282. reports/admin.py +39 -0
  283. reports/migrations/0001_initial.py +65 -0
  284. reports/migrations/0002_hitsperlevelperday.py +62 -0
  285. reports/migrations/__init__.py +36 -0
  286. reports/models.py +53 -0
  287. reports/tests.py +39 -0
  288. reports/urls.py +87 -0
  289. reports/views.py +39 -0
@@ -0,0 +1,53 @@
1
+ Metadata-Version: 2.0
2
+ Name: codeforlife-portal
3
+ Version: 1.0.0.post0.dev48
4
+ Summary: UNKNOWN
5
+ Home-page: UNKNOWN
6
+ Author: UNKNOWN
7
+ Author-email: UNKNOWN
8
+ License: UNKNOWN
9
+ Platform: UNKNOWN
10
+ Requires-Dist: django (==1.8.2)
11
+ Requires-Dist: django-appconf (==1.0.1)
12
+ Requires-Dist: django-countries (==3.4.1)
13
+ Requires-Dist: djangorestframework (==3.1.3)
14
+ Requires-Dist: django-jquery (==1.9.1)
15
+ Requires-Dist: django-autoconfig (==0.3.6)
16
+ Requires-Dist: pyyaml (==3.10)
17
+ Requires-Dist: rapid-router (>=1.0.0.post.dev1)
18
+ Requires-Dist: six (==1.9.0)
19
+ Requires-Dist: docutils (==0.12)
20
+ Requires-Dist: django-recaptcha-field (==1.0b2)
21
+ Requires-Dist: reportlab (==3.2.0)
22
+ Requires-Dist: postcodes (==0.1)
23
+ Requires-Dist: django-formtools (==1.0)
24
+ Requires-Dist: django-two-factor-auth (==1.2.0)
25
+ Requires-Dist: urllib3 (==1.10.4)
26
+ Requires-Dist: requests (==2.7.0)
27
+ Requires-Dist: django-cms (==3.1.2)
28
+ Requires-Dist: django-classy-tags (==0.6.1)
29
+ Requires-Dist: django-treebeard (==3.0)
30
+ Requires-Dist: django-sekizai (==0.8.2)
31
+ Requires-Dist: djangocms-admin-style (==0.2.8)
32
+ Requires-Dist: djangocms-text-ckeditor (==2.6.0)
33
+ Requires-Dist: djangocms-link (==1.6.2)
34
+ Requires-Dist: djangocms-snippet (==1.5)
35
+ Requires-Dist: djangocms-style (==1.5)
36
+ Requires-Dist: djangocms-column (==1.5)
37
+ Requires-Dist: djangocms-grid (==1.2)
38
+ Requires-Dist: djangocms-oembed (==0.5)
39
+ Requires-Dist: djangocms-table (==1.2)
40
+ Requires-Dist: djangocms-file (==0.1)
41
+ Requires-Dist: djangocms-flash (==0.2.0)
42
+ Requires-Dist: djangocms-googlemap (==0.3)
43
+ Requires-Dist: djangocms-inherit (==0.1)
44
+ Requires-Dist: djangocms-picture (==0.1)
45
+ Requires-Dist: djangocms-teaser (==0.1)
46
+ Requires-Dist: djangocms-video (==0.1)
47
+ Requires-Dist: django-online-status (==0.1.0)
48
+ Requires-Dist: Pillow (==2.9.0)
49
+ Requires-Dist: django-reversion (==1.9.3)
50
+
51
+ UNKNOWN
52
+
53
+
@@ -0,0 +1,289 @@
1
+ deploy/__init__.py,sha256=W4VeGk0r7YdM-TwIsa9dfGs-uLd1ecQb0tK8w44viQA,1832
2
+ deploy/captcha.py,sha256=fM7h-SRraNbZmcQixFR-iKCkJOyGrCFp1jF35rLvv64,1856
3
+ deploy/mail.py,sha256=VJ49VvcNYu30imI9Z4wqjna2wp11-Y-tLOiekYxNnmc,3190
4
+ deploy/permissions.py,sha256=BDTlRgnG5RYUXys1_dLNoW57KTWuNC1YRFBUgkB-NAY,125
5
+ deploy/settings.py,sha256=VRc4InOMU-Evn2rqZQhIr7vwlEw6EYaKeZWiTQuNSi8,8689
6
+ deploy/urls.py,sha256=t87jHCgcL-YYPcvKgrhUap_6HKYD3sb0jpXq03Sq0H0,582
7
+ deploy/views.py,sha256=YZhPza6tLmEuxr9iojPt_vaHsga1jue-2U6-9pMmp5Q,131
8
+ deploy/wsgi.py,sha256=alJ1UPJIHzAaB1P2pv3R2DYZHmc7ai5IXzxlq9-SukU,399
9
+ deploy/middleware/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ deploy/middleware/basicauth.py,sha256=cFAQdZ5_TLH6_nwo-yT_Kt4B0Pks21jljyiUeHnf63w,1049
11
+ deploy/middleware/exceptionlogging.py,sha256=Buz96QLtowcnPq2dqOg6zEe3iBM0LHV30PXp4d8M6mM,268
12
+ deploy/static/apple-touch-icon-120x120.png,sha256=7GwelKO6CNbvjJJ1nqMvDGkPoQWqYomMKKP5EB5gmfM,24583
13
+ deploy/static/apple-touch-icon-152x152.png,sha256=V57OGP0VeeKHen_iYVa72sHe_rEaMAJzU1FAiHWWBwY,36276
14
+ deploy/static/apple-touch-icon-180x180.png,sha256=OIm3wwx0aL8fh1EIlMCKp2vVNpsuY-NDxV1QR73bf1g,47948
15
+ deploy/static/apple-touch-icon-76x76.png,sha256=pSelexi8JTX41EzfVbrsrxsZlEIQ0Br2Tg7u9e8iNbo,11676
16
+ deploy/static/apple-touch-icon.png,sha256=QjNQ8jDKI4BpfMMsrs2t3H0fXHa5KHV45fK_VSSLEZU,7842
17
+ deploy/static/robots.txt,sha256=5cS4RITuQhbpNzvpk4AyDCXdlIBfmfCoBYRvCHY2VT8,24
18
+ deploy/templates/deploy/csrf_failure.html,sha256=-pBRPn4Y7nUdYHGpTHCokT9Boi-isuwuivF8V2K1SgM,412
19
+ portal/__init__.py,sha256=G--madRjvBaQsBY33nqU_I83PVikJ6eSDvhCcr53Xv0,1925
20
+ portal/app_settings.py,sha256=Z5mNI4ve_TnaAcJbb9s_pQZC08VQ2j3JW6PlUCqSxRM,2379
21
+ portal/autoconfig.py,sha256=ZlGf9Obr4VaPl-8V7A8670uhAggGfkF0RSJLEsn7dQc,5877
22
+ portal/beta.py,sha256=-6j6r-DqBNGU2yUr79WUFgTfEnvL8bL-bYB3qM8kenA,2120
23
+ portal/emailMessages.py,sha256=lW2KI515nz3zksMo3Xq7XpwCHs44un_gqr9VsrUNLr4,8842
24
+ portal/models.py,sha256=U80TWvbrRIbGBl25kT7DO1vAhRWtY6ZecJepxSdlhxU,7647
25
+ portal/permissions.py,sha256=vcOwBvCfnz5dasotV1DnhRVy6jrvLnD67uRRgc2ZEL4,2764
26
+ portal/urls.py,sha256=MTwUefy9OUIzzBxvcT46ah-xsLG7ODS9pDI1nGFu6B0,9833
27
+ portal/wsgi.py,sha256=mZ7JDcGneB4V_0D5DH1bcvSYLUazUHjM71i7BP8QpPA,2231
28
+ portal/_version.py,sha256=nmQAfzgm6WGyUGfeHrmgH5BYSlFL_sA8FhGym8ZGM4U,482
29
+ portal/forms/__init__.py,sha256=W4VeGk0r7YdM-TwIsa9dfGs-uLd1ecQb0tK8w44viQA,1832
30
+ portal/forms/admin_login.py,sha256=6PWYtZJ8YdkOccFnqx9VGlcExSu9KwVVb4QgI41BP6U,2153
31
+ portal/forms/auth_forms.py,sha256=MVv5VZYcfizJVnhFCHw-Wyhd3JzRIehFd4_hwUZQ4s0,3708
32
+ portal/forms/home.py,sha256=Qe6HjCUbeTgthf-S4QuCeGEk4Cz9L0w8H3RHUZ2-_y0,2686
33
+ portal/forms/organisation.py,sha256=-KlTvuzXPM-_KERu0lqm-bFiCiSodqZx5Q6HPVjzQa0,5038
34
+ portal/forms/play.py,sha256=MrFc_i430A8fmn21hodpUwA2z6-n9h1OmLDMvFx8nag,9714
35
+ portal/forms/registration.py,sha256=kiBCVS1a1BnteTh2oJsETvIag7HXTOHFvSfO1Fp4BNQ,10354
36
+ portal/forms/teach.py,sha256=urK1mMbicp6tiPEp8_0YpbTpnrIlfGNBQzuUKAcmT60,19522
37
+ portal/helpers/__init__.py,sha256=W4VeGk0r7YdM-TwIsa9dfGs-uLd1ecQb0tK8w44viQA,1832
38
+ portal/helpers/email.py,sha256=dt-YuGUwQ21bhPalCb-oygw7waAdfTTxTmJqmvTu6h8,4835
39
+ portal/helpers/generators.py,sha256=7UVEPVL5EnI-z0lgUnbDxjiOuseQp5FHgXUDskY304g,3093
40
+ portal/helpers/location.py,sha256=6YgNchJjsgbterLvS3_1pIBiilQVA8TwHlZTC6eyNQg,5227
41
+ portal/helpers/password.py,sha256=bB3ERnEaiorkFylcniSvpm1YSSWAPD8N4EjwRMcQug0,2152
42
+ portal/middleware/__init__.py,sha256=W4VeGk0r7YdM-TwIsa9dfGs-uLd1ecQb0tK8w44viQA,1832
43
+ portal/middleware/ratelimit_login_attempts.py,sha256=5_0LBu0wLISDKx49gUs7nWJffdHLI1IrtUi0KbU3PdQ,2569
44
+ portal/migrations/0001_squashed_0041_new_news.py,sha256=oEKFweuhCWwI2pgDCzUaWh3vME1TYrJNAthbUXIQl1M,27922
45
+ portal/migrations/0042_school_country.py,sha256=YeXsQ_zeUc56t6kyPv9gSTGiuQCIosZYcJ3S-RzpkKo,2271
46
+ portal/migrations/0043_auto_20150430_0952.py,sha256=l79nq2n9luC6wNmwY1tcPLmJ-OwP3Q0bC1NPjQsGEYA,2279
47
+ portal/migrations/0044_auto_20150430_0959.py,sha256=WTBg2Ag9pF2tDRdmqyguiwyDGf0c2PknTN-7ete7R08,2942
48
+ portal/migrations/0045_auto_20150430_1446.py,sha256=KVqsfVNQjSsw7BsmeaU4YLSW9pPM1OxVkc2PG2aAM6s,2260
49
+ portal/migrations/0046_auto_20150723_1101.py,sha256=raO1OblDK6qyKVWOL1ghNSjCgYKqv-nzh47cZ6Ge5_I,2336
50
+ portal/migrations/__init__.py,sha256=W4VeGk0r7YdM-TwIsa9dfGs-uLd1ecQb0tK8w44viQA,1832
51
+ portal/templatetags/__init__.py,sha256=W4VeGk0r7YdM-TwIsa9dfGs-uLd1ecQb0tK8w44viQA,1832
52
+ portal/templatetags/app_tags.py,sha256=pyLmibR77tOM8CQvthYYsy8ZQYz60IPhHFEvSgQUfio,4325
53
+ portal/templatetags/table_tags.py,sha256=2U46OB08yifh9hXP1lIiJFxQvWhCDIRbLod1mHoOqtA,2277
54
+ portal/tests/__init__.py,sha256=W4VeGk0r7YdM-TwIsa9dfGs-uLd1ecQb0tK8w44viQA,1832
55
+ portal/tests/base_test.py,sha256=6U6_xfltIpzsBcdoJaEfvaez49V_gd8OYrJn7nuJ0Es,3260
56
+ portal/tests/base_test_migration.py,sha256=AzC4E_0hjAbmy-TxLkQOLmWQq90R208HPZw7Sv7HV10,3057
57
+ portal/tests/test_admin.py,sha256=DIzuTmZWFyRnu9-DF_dOdVCVvdrQOYD9C3sXFfwKzPk,6799
58
+ portal/tests/test_class.py,sha256=0-9a4rzeguADnx0KyI0cT1lXxXNKPKrM5-zhCrMbqWU,7377
59
+ portal/tests/test_independent_student.py,sha256=vQfhctgDqqF2XxEd9avU9oLo0a9IqdhwxNRiMa-V-Tc,4870
60
+ portal/tests/test_independent_student_joins_a_class.py,sha256=FQo9YcOCxJuijFjYeOLSDo77ZW0rNiaIxJCJzlCL9Nk,3302
61
+ portal/tests/test_location.py,sha256=DmAaG1Fzuqs54zGcoU-nTHHVNNVfJreHFl32bgkbkk4,10264
62
+ portal/tests/test_migration_country.py,sha256=v-LfBFY8ZfYRJbZAnuQN7wV-rJf37mbO49tO6ygn6IQ,5843
63
+ portal/tests/test_navigation.py,sha256=Y7HYFJrvY_CFiZsP1ejSFFTLFHm0bUoMNMIdka6gbdU,4172
64
+ portal/tests/test_organisation.py,sha256=nd8RNLtRbuD5WHCrYj0EQ98Tfe4syGcwoQmbjQ4u0hw,8392
65
+ portal/tests/test_school_student.py,sha256=dhFwCpK_Spq1BIuaRmynvaWLxZAJAbP90Ev1Ve9uP1s,4379
66
+ portal/tests/test_teacher.py,sha256=K6OzLfWEQ8jN1LmhuYPROzJ-r3OG9N0n8d0BZgjL7kc,7340
67
+ portal/tests/test_teacher_student.py,sha256=pA0y0U9OVhi3B2ynYJkjd6IWx6T-cFga9ahkMfku5Ko,11340
68
+ portal/tests/pageObjects/__init__.py,sha256=W4VeGk0r7YdM-TwIsa9dfGs-uLd1ecQb0tK8w44viQA,1832
69
+ portal/tests/pageObjects/portal/__init__.py,sha256=W4VeGk0r7YdM-TwIsa9dfGs-uLd1ecQb0tK8w44viQA,1832
70
+ portal/tests/pageObjects/portal/about_page.py,sha256=z-Vb5V98I51e-lAQKYDbGBwPm51vcIBYfWh48MHoV-Y,2024
71
+ portal/tests/pageObjects/portal/base_page.py,sha256=FaFOXvvbvCsMEBURMeHO5XdyPnQifHRT9PiFyeWpxho,6078
72
+ portal/tests/pageObjects/portal/contact_page.py,sha256=4Ze_rj7k37CqL0ezRw9Oz1OrfiKsb0M5-SDtsXoyiOM,2030
73
+ portal/tests/pageObjects/portal/email_verification_needed_page.py,sha256=qqKgZyr_E5H1Rf57y4yFp6s66C3KSqcCl0oOUJHbsGY,2246
74
+ portal/tests/pageObjects/portal/forbidden_page.py,sha256=oUb8V254PP6JrFklY4sfwrAHH8VkhCgXGthMHKfGfTM,2067
75
+ portal/tests/pageObjects/portal/game_page.py,sha256=x3QlywZD8ceARdgqjADfFg9iz1wmBfMEJLhUSq4FiS0,5454
76
+ portal/tests/pageObjects/portal/help_and_support_page.py,sha256=PWCXFikM9BLm9MmzEvFW50b4QplhKzSqRYzbSHnFbfk,2021
77
+ portal/tests/pageObjects/portal/home_page.py,sha256=Mb9TUKlAPKYkuUnVe2UtqqCPcVC-uRKEv5vSR01Y9gY,2199
78
+ portal/tests/pageObjects/portal/play_page.py,sha256=wi7CcDPlpBdZ_4LDowGAO4rdGohgsn43luIaPRD4BlM,8649
79
+ portal/tests/pageObjects/portal/teach_page.py,sha256=qBGqNsIXEwS3s7UQLXXgL2gBTwsbyrS1gQeJkDsy5NA,4184
80
+ portal/tests/pageObjects/portal/terms_page.py,sha256=hXYaJjdMjYTrpbEp9eeh93Motn9w_qzBBRJH5o9Yo3U,2024
81
+ portal/tests/pageObjects/portal/admin/__init__.py,sha256=W4VeGk0r7YdM-TwIsa9dfGs-uLd1ecQb0tK8w44viQA,1832
82
+ portal/tests/pageObjects/portal/admin/admin_base_page.py,sha256=MrQCLtXUC2XtMCTbN3cGFvpnRyb5TOvVzNN6ntMhcOQ,3121
83
+ portal/tests/pageObjects/portal/admin/admin_data_page.py,sha256=_iMO23Rp-LhgsJqVZPJsHdnIHaH2XwuETDluiQ2KkcQ,2122
84
+ portal/tests/pageObjects/portal/admin/admin_login_page.py,sha256=chQj0DwLRd6SAfqih9fKLgOzpAM8xLC9da4mMsYrEOw,3434
85
+ portal/tests/pageObjects/portal/admin/admin_map_page.py,sha256=nS_s2PDmzt-QmuF_dhpxH9CvrnuCeN2iL_p8FUe_N8Q,2119
86
+ portal/tests/pageObjects/portal/play/__init__.py,sha256=W4VeGk0r7YdM-TwIsa9dfGs-uLd1ecQb0tK8w44viQA,1832
87
+ portal/tests/pageObjects/portal/play/account_page.py,sha256=1dZDmY4B9dlG-3IVplkQfRH8McgT74JQv1LW4U3DOLA,2704
88
+ portal/tests/pageObjects/portal/play/dashboard_page.py,sha256=R3dTiNYRvIzyOlzCKedjCBZRgJfxUchYV-T9BxztXQ8,2333
89
+ portal/tests/pageObjects/portal/play/join_school_or_club_page.py,sha256=JgYH6Kki5IfagmojRE2DGj6WmwcDZ3D6OehnlyJ83Q8,2411
90
+ portal/tests/pageObjects/portal/play/play_base_page.py,sha256=duKE--dhl-SuQ9-0vzzwmq_hHzhsRuvO4IEE7IGvR2c,2628
91
+ portal/tests/pageObjects/portal/teach/__init__.py,sha256=W4VeGk0r7YdM-TwIsa9dfGs-uLd1ecQb0tK8w44viQA,1832
92
+ portal/tests/pageObjects/portal/teach/account_page.py,sha256=5mpY7fQ7Lshz-OT9MO4G0RnxYm2Ufxy1dr3BK-YeLLE,3524
93
+ portal/tests/pageObjects/portal/teach/add_independent_student_to_class_page.py,sha256=_ru9xQgIMGh19FnszmnCef3GWPOBj_87FbA28dIbkM0,2440
94
+ portal/tests/pageObjects/portal/teach/added_independent_student_to_class_page.py,sha256=C1COT2SkgkdUy3nZ9TgyK7R5pvG2ApD8yhPEvaM-qno,2373
95
+ portal/tests/pageObjects/portal/teach/class_page.py,sha256=BYzYHClrAfSHP7Ea-vvNezks6Z-kb8m0qgOPS3Yi06U,6774
96
+ portal/tests/pageObjects/portal/teach/class_settings_page.py,sha256=YAiHJp2CD5A1c9fV1RIJI1DCNEfmVl9fgm65aGBN4lA,3687
97
+ portal/tests/pageObjects/portal/teach/classes_page.py,sha256=41cDEvVPeN8zQtKdJMW4g0PVWqIHZEmMenNUfhsgna0,3542
98
+ portal/tests/pageObjects/portal/teach/dashboard_page.py,sha256=3xA9HzrGfXnBuA5eqwquRExoBf_i5vcyzN1JV50JcF8,2068
99
+ portal/tests/pageObjects/portal/teach/dismiss_students_page.py,sha256=_sn6Ww1XV5dGi-Q0k288kHGsSR3jK5M-SPAJkCK3fYo,3075
100
+ portal/tests/pageObjects/portal/teach/move_class_page.py,sha256=a8I99cWb62wkyKSwa3ee6b98RsTRkOEI0A4LEsFPkiI,2754
101
+ portal/tests/pageObjects/portal/teach/move_students_disambiguate_page.py,sha256=yv4bKWTiOPy-ApWWIid0CBsGSbbIR3QEF9kkP0eQ0Ks,2466
102
+ portal/tests/pageObjects/portal/teach/move_students_page.py,sha256=dq5GdGjwGTgYbZWjpH7WZfEYRWL94X2ETprQemEAljY,2812
103
+ portal/tests/pageObjects/portal/teach/new_students_page.py,sha256=AwBCd5yQ2fSEAY737iEJapK_iwz38_O8i0DGrPx5xJY,2504
104
+ portal/tests/pageObjects/portal/teach/organisation_create_page.py,sha256=QR4OccOzgNPowk1Z_8C-B7TtG8l0ueqHvg-BqebluAc,3918
105
+ portal/tests/pageObjects/portal/teach/organisation_manage_page.py,sha256=n606sjaB-Dh_mVszfH5bfzb_WXjw5uRty1rtJniq19Q,4231
106
+ portal/tests/pageObjects/portal/teach/organisation_revoke_page.py,sha256=odw5QTSKOgNes2AHtZjnDhL0WGujLEO6CWHDBVG-h1w,2523
107
+ portal/tests/pageObjects/portal/teach/teach_base_page.py,sha256=dk8r7YoylZMgjKsnM2DTR487FsA9svbW7MAdUgoUEzo,3409
108
+ portal/tests/pageObjects/portal/teach/thanks_for_reset_page.py,sha256=-beMvHljrxnlRIxlfQGwvQ9zO2TKEcjcWDTjKxvcGNw,2100
109
+ portal/tests/pageObjects/registration/__init__.py,sha256=W4VeGk0r7YdM-TwIsa9dfGs-uLd1ecQb0tK8w44viQA,1832
110
+ portal/tests/pageObjects/registration/independent_student_login_form_page.py,sha256=jXuk75h_OFcd2mM8gOUKJTgH4oAFqo4V19seVue0k1Q,2474
111
+ portal/tests/pageObjects/registration/password_reset_form_page.py,sha256=rPnZ6aO1EO26jspYK4CVoqWXLTEpXLATDjRxCHGs2YA,2619
112
+ portal/tests/pageObjects/registration/student_password_reset_form_page.py,sha256=-6UzuYZacuB5X4683IxrH5cXaOqxXjSJiDI263zH778,2625
113
+ portal/tests/pageObjects/registration/teacher_password_reset_form_page.py,sha256=bjvz1Ngf9sFkEnpHohzGcIn7FhQFk_oqG5NOe9UvFRk,2675
114
+ portal/tests/utils/__init__.py,sha256=W4VeGk0r7YdM-TwIsa9dfGs-uLd1ecQb0tK8w44viQA,1832
115
+ portal/tests/utils/classes.py,sha256=tEXXPtNlroVhw6pDlWBWQbej-2mySXYwW8upyCfT804,3381
116
+ portal/tests/utils/email.py,sha256=T7PB2qmZ2Kmk3YJxxnbVmTyVfY75nPBNK3FqxswnW6I,3504
117
+ portal/tests/utils/messages.py,sha256=vhzXnJyTgl4vpKpjdBTXyBtz_sM_qW6xJRYR0FOO69A,3131
118
+ portal/tests/utils/organisation.py,sha256=zP_T7P1tEUoocSaJDbZl-UyAIlqw5j6FTizXt0riqdY,3112
119
+ portal/tests/utils/student.py,sha256=sVoFLiyvCXpb-pfbdGcSTEz5ACZ4TPOe8aeP3R1vp_E,3987
120
+ portal/tests/utils/teacher.py,sha256=pdn7Bj5_Eje9XpihdIRwae_XpFIs0Fd-P6AV48uCtik,3078
121
+ portal/views/__init__.py,sha256=W4VeGk0r7YdM-TwIsa9dfGs-uLd1ecQb0tK8w44viQA,1832
122
+ portal/views/admin.py,sha256=7IqNTYsLERbutzsrA7AyJPRZU10i_lI2lenAJ3vxhh0,16076
123
+ portal/views/email.py,sha256=J6kQcSS2I0wEyIq8xV6XtM8FiN_JAsUsiQyFc7c3OvU,3149
124
+ portal/views/home.py,sha256=EmHfE2budZOu0ZKRH-nVJShj9AgaZEf53lnVZ9qT75Q,15162
125
+ portal/views/organisation.py,sha256=JDxEX_ZEc-9jIRRFzhmtsQePCPLNwy8FEZEwuH4Ouow,15690
126
+ portal/views/play.py,sha256=jPXXsxOFy4Aqj-B4ABCDaCh8T59T_9YdWiE3JfoslT4,7889
127
+ portal/views/registration.py,sha256=V291hTCp68FPTf4n1BCQGT-dfXr42xICLeez5IdGOmg,5391
128
+ portal/views/teacher/__init__.py,sha256=W4VeGk0r7YdM-TwIsa9dfGs-uLd1ecQb0tK8w44viQA,1832
129
+ portal/views/teacher/home.py,sha256=MUzCPCfoub2TGyF8TV1NgSkdbRU9lVjMUd_JDwXcIDk,5319
130
+ portal/views/teacher/teach.py,sha256=o2dAOyzI3m4ec-U99HNny4d8kek1C4n3eB_seRBOZhw,33938
131
+ portal/static/email_media/cfl_logo_blue_rounded.png,sha256=Xs6wCwCygLECaKYlqIuGDV9GD220ayHdKMkhuSAIH5o,17622
132
+ portal/static/email_media/cfllogo.png,sha256=Xs6wCwCygLECaKYlqIuGDV9GD220ayHdKMkhuSAIH5o,17622
133
+ portal/static/portal/css/colorbox.css,sha256=ACsjBsejRHRdsAD3lGRmt8V-Eji_ake6jIxV-2skpCQ,6397
134
+ portal/static/portal/css/common.css,sha256=7GpjPRPb7S_9JDTdXLPH3OXnyA1hKf1c_Pw_hpqlnWE,1814
135
+ portal/static/portal/css/jquery-ui.css,sha256=-QkFKnVEOLFyeLSFN-lLkrNaggSeLTS7v8fNCKvTwVE,33989
136
+ portal/static/portal/css/jquery-ui.structure.css,sha256=Y9Td2sc-lu_3jFY-Kud-tfHAnJQbPvqZCdhdBDZuZgg,15663
137
+ portal/static/portal/css/jquery-ui.theme.css,sha256=qJhTjuDWMYYbu_AzRMW6aTGphnPRVF-I1ymQBXCgTfk,17662
138
+ portal/static/portal/css/list.css,sha256=tPqnbFyhdEKL5L1xg0G7yLdXFLAWNXSUlPtpR6TP-P8,6235
139
+ portal/static/portal/css/noJS.css,sha256=K82kxAJ3hmZCqcHqAga2VWyn4V_jpLBS0TS68gSOSlk,2766
140
+ portal/static/portal/css/reset.css,sha256=NWYRxJgyE2VTdYh3rbMzwvyESpzFcqdH_YviaCmkGHg,3729
141
+ portal/static/portal/css/styles.css,sha256=iuR8HMEQEM0buV-RmyVCOXJIk2zjZvWTfq8Jixipeik,20310
142
+ portal/static/portal/css/tables.css,sha256=es0belHTZZYNFbRw2_G0HrLgXM_iK0J0cnlmNcB2lME,3975
143
+ portal/static/portal/css/images/animated-overlay.gif,sha256=x7zHb7I8BDCzbsRI63n4vDQSna6V2hDzwU7Q6s3y8bk,1738
144
+ portal/static/portal/css/images/ui-bg_diagonals-thick_18_b81900_40x40.png,sha256=wMNGFDHxxZGe9tRWT8FcwYzpCKFrrRbVlnKhG8Ezz8c,418
145
+ portal/static/portal/css/images/ui-bg_diagonals-thick_20_666666_40x40.png,sha256=x6TuNlJqHOR9CpvUDwiLamSSprn0yGSDOqC64zvzK8M,312
146
+ portal/static/portal/css/images/ui-bg_flat_10_000000_40x100.png,sha256=GJ97xqMB7mVKlxVO--CC_KjDhEr_TahPjVstYLQuwKs,205
147
+ portal/static/portal/css/images/ui-bg_glass_100_f6f6f6_1x400.png,sha256=OU52nJLwPUzXRp-SqbhPVpuihj75ud_PJj2IJ1PKVE8,262
148
+ portal/static/portal/css/images/ui-bg_glass_100_fdf5ce_1x400.png,sha256=Bh2kH78udid8mfkNrQZ1okTUaN1n-1a8F8rwbiN4fzo,348
149
+ portal/static/portal/css/images/ui-bg_glass_65_ffffff_1x400.png,sha256=YjtaQGrJtzwiVh9KeGAmNpSABboIMILl9NN1NR-RcHA,207
150
+ portal/static/portal/css/images/ui-bg_gloss-wave_35_f6a828_500x100.png,sha256=ZbJQAk2dtuvLy3BinPdVP9uaiFwpcMQHOGrOiYh6d3I,5815
151
+ portal/static/portal/css/images/ui-bg_highlight-soft_100_eeeeee_1x100.png,sha256=dmRHbfVtnh0YTRzsxYwcl8-zZMmGu20k8qo1qx5cZDM,278
152
+ portal/static/portal/css/images/ui-bg_highlight-soft_75_ffe45c_1x100.png,sha256=44tuVClIK7YhJWdhZalLx-jTuimWfHdun5Jr16xeCzI,328
153
+ portal/static/portal/css/images/ui-icons_222222_256x240.png,sha256=OxrANnY9OlnIhXhIauaY0io33S1GpVNIXh6ruf4lWz8,6922
154
+ portal/static/portal/css/images/ui-icons_228ef1_256x240.png,sha256=gLktNnaKSNdxmSXdOAOqTnJFaBd89LsHGEx8mMpR-p4,4549
155
+ portal/static/portal/css/images/ui-icons_ef8c08_256x240.png,sha256=Do6TwiUaXCF9EEp70EHJkJNuevjND_OhF_dvy3dnWkM,4549
156
+ portal/static/portal/css/images/ui-icons_ffd27a_256x240.png,sha256=DWXB4HJAfKHSLtHkvyB2qy8AipDK5_O4VScw_HvOKi4,4549
157
+ portal/static/portal/css/images/ui-icons_ffffff_256x240.png,sha256=mJkfAmJVnIMPOpRgjHT5WIfDc7Sp_ohvDeV_i7_NyHU,6299
158
+ portal/static/portal/img/2fa_authenticator_link.png,sha256=gs-dxfrH4g9qEDA-Gc4zTHrGuqqn8jfLytUqzN3t99Y,1307
159
+ portal/static/portal/img/RR_logo_blank.png,sha256=TeUlgydCPc1L3ZgwKuKGthonm_7dVVLbdpSOciZosYQ,219191
160
+ portal/static/portal/img/RRlogo_on_green.png,sha256=unO3pHim8IULIXWwuupMfMMIrxap1OaNMh_mobXZF6o,229229
161
+ portal/static/portal/img/RRlogo_on_green_small.png,sha256=jMVJ7B8cpuDWAP0AjgSkLzmbPOoS1HB-GRNsluXSANE,57143
162
+ portal/static/portal/img/RRlogo_on_less_green.png,sha256=AkjKmhv6_vE7yhMvmEoqpbtUEUb53g5fuer0JVOzzkI,204809
163
+ portal/static/portal/img/RRlogo_on_less_green_small.png,sha256=_2_1JYPYxDB0zm6vTeuzNn57uBDoQhKhUQ9oZoxuyj4,87171
164
+ portal/static/portal/img/cfl_logo_blue.png,sha256=viRo6JeJrlM079FxMAnNJ2XwKjHS1LyU13xuuPtT5RY,20741
165
+ portal/static/portal/img/cfl_logo_blue_rounded.png,sha256=Xs6wCwCygLECaKYlqIuGDV9GD220ayHdKMkhuSAIH5o,17622
166
+ portal/static/portal/img/codeForLife_logo.svg,sha256=P8ctjxPwGDxCl1W7lmMKwPFjcIKkQA4sLMkFdylAkPA,11759
167
+ portal/static/portal/img/dee_hi_res.png,sha256=usEyKp_M6iHTrfXe0MKnKTfm7aN51mUzF7eNf3r_xVk,78177
168
+ portal/static/portal/img/dee_large.png,sha256=rWZ8tQaQFua-e4wcdrjrSyXvaPgcNC_7u5cwGGnqWI4,387967
169
+ portal/static/portal/img/dee_red_box.png,sha256=ELUeGFVSNenggtgXwgd71HRCiw9Z9uzOXL2Tj2yLD1U,32520
170
+ portal/static/portal/img/favicon.ico,sha256=UlH5yK1qGvxAH6TLTjFUzwgHMGBM88EguQWE9E0XYqQ,3774
171
+ portal/static/portal/img/kirsty.png,sha256=4kgN0QLPdrFMrnEA_lnNXM4frT7Q1sqM45z9geRQ3Gc,36007
172
+ portal/static/portal/img/kirsty_hi_res.png,sha256=VoeeDkIVJNdP-R-UNlZoPCFr6o18azgwr-0KqcyNYvE,68366
173
+ portal/static/portal/img/kirsty_large.png,sha256=6K06daXTukSqLcjj8zPOFXKhTFOlkMm2sk2NDv_EisM,72009
174
+ portal/static/portal/img/logged_in_blob.png,sha256=WtakmJdMGKjT6-M3A0dU7tD9NIwllOJ8mveAMW6h4OA,342
175
+ portal/static/portal/img/logged_out_blob.png,sha256=Rt56CzGrfBvtK9RD-DgqJapyQHAxBbqNXwwK3CjDyDs,342
176
+ portal/static/portal/img/logo_white.png,sha256=fD25djRNO5r8JUfY0qM99lR4Pf9RM2HfKYrEH1Hb1Tw,1760
177
+ portal/static/portal/img/movie_file.png,sha256=66jbNL2hYJvrzNqzhbK9XZWuPcIhHWj_0VS1QRLy3Pw,814
178
+ portal/static/portal/img/nigel.png,sha256=mniYLZ-1POZiwWwY-CFl51END6NfwpMGTBlviLh4ktY,34002
179
+ portal/static/portal/img/nigel_hi_res.png,sha256=DkboT3QF6jd31Bh4KKP03uQWHxUh-e2KFjUNAoyt2Zs,50150
180
+ portal/static/portal/img/nigel_large.png,sha256=pzCZUb5Nf7qKMYm4FNylpIRdklrmDLDZFsxvao9phxM,48696
181
+ portal/static/portal/img/padlock.png,sha256=5dQ0vwIuVeNwaoluuB5T5bue7SKTzTVLpxnHGESfysE,107742
182
+ portal/static/portal/img/pdfsmall.png,sha256=dlA0RojgQhTEI_rdGEjwzhFXYmfN8EsN57JqSQ4y0D4,51798
183
+ portal/static/portal/img/phil.png,sha256=57uonMQ1oIMS7t-uOaZ7LJBBTSMo7QL3NnEH1SOZxOc,43913
184
+ portal/static/portal/img/phil_hi_res.png,sha256=w-OVN9Q2A1lTMjtiqMA9eZICnLybyHZM8eJDgdg6FxY,142625
185
+ portal/static/portal/img/phil_large.png,sha256=kRtcUHSxyr3ix1LaXl6HQKSZPZHxA0155qJKilGKd9k,64644
186
+ portal/static/portal/img/qr_code_scan.png,sha256=sf-er8DwEp3pdcqoZOEnXn2ZclEwkgc96obXXLgqSk0,268425
187
+ portal/static/portal/img/rrBG.jpg,sha256=JQFKlDOak12DwOmVSmJgTjRpmus4lRZU15FH9Klp4wM,46117
188
+ portal/static/portal/img/rrBGIE.jpg,sha256=rsY3gCFgMepv1lHGEDvXjN0j1VlRVMY1N_PFEwdJZQE,28002
189
+ portal/static/portal/img/rrBGsmall.jpg,sha256=c01PZTFAIpyi4MV6lu6otvDpaugfCF2Hv0dR_JKZK94,27935
190
+ portal/static/portal/img/video_still.png,sha256=J7LCt8Ty2TNU-D0t2unnG-LVVRLZC1WxqEi-HqShiTk,207746
191
+ portal/static/portal/img/wes.png,sha256=s8JOIWmAZXRH_meQmZ_EYEoVvj3ED8W7zXEoDw7hNTQ,22081
192
+ portal/static/portal/img/wes_hi_res.png,sha256=SVWhidHCQdXodNF--p1e-aD-oKawJsszWXzknasItnc,64737
193
+ portal/static/portal/img/wes_large.png,sha256=wrbeWhVBdFwie2uuK4k1MRXIrwv7DGNW7LBAflwsMeg,55424
194
+ portal/static/portal/img/zip.png,sha256=CDXFElPn9yE0m0JJWW-wqtgxft5F1KoAD7RIf9LWHPE,744
195
+ portal/static/portal/img/avatars/default-avatar.jpeg,sha256=ByW9rPi7Q-8P1-v9ThZrWnQWCLEIr6ZIEv0d8duU7BQ,2064
196
+ portal/static/portal/img/colorboxImages/border.png,sha256=Eb2D9kRqG0Gw2I3bLicfzJkSshDXf0DjTl4x4amvF0o,112
197
+ portal/static/portal/img/colorboxImages/controls.png,sha256=zQowXWoW0otiA3-wj5sGLdGgpqO5cNj5Xs69VvdAZ-k,2893
198
+ portal/static/portal/img/colorboxImages/loading.gif,sha256=NO9VJC_CTJTweQkCwJYB0ijpB0v3ofiMTeajm0DOOPo,9427
199
+ portal/static/portal/img/colorboxImages/loading_background.png,sha256=lZ7Mxrcb7-5nZXOS5_Ir4myrQISDZX-zKiGP7W_-AWs,157
200
+ portal/static/portal/img/colorboxImages/overlay.png,sha256=qy73bf_q55z4kktuaTaMhVrxDzVRCIjgmBQ5cbOmLtE,182
201
+ portal/static/portal/js/common.js,sha256=1bMys9XioM3XcC3ynVWzkZNXXjxqRedbxZi9Zukzjjw,3199
202
+ portal/static/portal/js/deleteWorkspaces.js,sha256=me83WI9qBkud5xSxNChZOw2SE5GXdNmNf-bd1V8ASbE,2160
203
+ portal/static/portal/js/fuzzySchoolLookup.js,sha256=Thk0MM9oFqmyTtZ41pQZfGluTkB8vnid6-rKMiM5O6g,3671
204
+ portal/static/portal/js/jquery.placeholder.js,sha256=bgf7YMB5_L4r1sElBMzAKZfHGaO-XiXaZ4a11UaOh_I,5297
205
+ portal/static/portal/js/organisation_manage.js,sha256=byU3oi4iIHjfg6BACgZwgnNALWTQ_EcVF8yBnNDce-s,3096
206
+ portal/static/portal/js/passwordStrength.js,sha256=X7io_txDpFio24qOOTF5tLRzFpiqjgy4KmkzmrhNTs4,4501
207
+ portal/static/portal/js/play.js,sha256=WmKotFmikFzmJ9BlWSNEpvomqP5M-cRAoxVG-dpV01A,3167
208
+ portal/static/portal/js/teach_class.js,sha256=D0w6SzqFMfSjcENsyJB09-66Qok5OxyrYKaTlruw7hw,4720
209
+ portal/static/portal/js/lib/jquery-ui.js,sha256=FAfNKdtF-doE7ngK77QHecODqzJlmr-tHZ7HnyasWAQ,461387
210
+ portal/static/portal/js/lib/jquery-video-lightning.js,sha256=Twz11pIePnmKQK4j8xwmD9IKuBHeM3euomUybwCd5Tw,19509
211
+ portal/static/portal/js/lib/jquery.colorbox.js,sha256=4-ZawxafV_4sijUG-zDB5Dpb1sSXJyTpS6djiQLI6P4,29200
212
+ portal/static/portal/js/lib/jquery.easy-ticker.js,sha256=Gj4dexfJvqsIds9qNMsAnomtSgN_VYOsdgOzKMoR77U,4278
213
+ portal/static/portal/js/lib/jquery.js,sha256=926a13vF1zr8PUIIqGC5RHpuakH8_YM2oO0w3TUlLoI,92593
214
+ portal/static/portal/js/lib/magnific.js,sha256=-5-Dl1iuVFegHiqiQuJ8tyxXVhyLBHIvKwQNAEEWgoo,21020
215
+ portal/static/portal/js/lib/modernizr.custom.79639.js,sha256=wzx-XaoCZEKlW-MfRO0FJiC0KGCB44c36sVf6OILv8U,8853
216
+ portal/templates/403.html,sha256=CJj4d7iWvkfDyaLqfYEh1N7S1GVUiz_huCXp3BN9r4U,249
217
+ portal/templates/404.html,sha256=yHhFeXu8OwY2jc7syn402LcBiOs7_qCXS4LXdHFJK1c,188
218
+ portal/templates/500.html,sha256=_FyXQsu0eNVbyWVTTlcL2rZ9B-sK1UtrCzCEzx9Pgh0,1477
219
+ portal/templates/email.html,sha256=CqW40eT9bNTXobHZaGu75gQFMiVLK7GdVsr3NczZijA,126
220
+ portal/templates/email.txt,sha256=i0XFIXcYFTx2IaXQaaRLd6lK8Mv2Gd0OxVrwKt8uUBQ,14
221
+ portal/templates/portal/2FA_redirect.html,sha256=kayd41hInPCui7FIudHFBa0IYNouX8zihc68x1WPddo,720
222
+ portal/templates/portal/about.html,sha256=dsJ9AsL-q-OS_9ud3IYAA7GU1IpGvWbuUBQpD9r5ykg,2862
223
+ portal/templates/portal/base.html,sha256=gT-wnMcajw208BX5nWvV4ZRB5YMyND6WejLN69Huyqc,6945
224
+ portal/templates/portal/base_no_userprofile.html,sha256=Ao_fetRySen1c6zudJtzNPlbDZwqrz0WnnkM_cbLeKA,318
225
+ portal/templates/portal/contact.html,sha256=kgafYS5xRuOn3t5_jO6FtFx2l8EtpjhwURNXfXIddCE,2059
226
+ portal/templates/portal/email_verification_failed.html,sha256=rebaAcXyBFa0ZaS-ePZPvVZGUEExpfnpYniolab4adM,564
227
+ portal/templates/portal/email_verification_needed.html,sha256=Q_VDw6NdPnexGeCuG42ureoNxH9gseyYCNIyZNHasFM,882
228
+ portal/templates/portal/help-and-support.html,sha256=3BuetPH4GSx_V8sfbC0HVx43O01MZVScIbiuiQ3Is1o,8412
229
+ portal/templates/portal/home.html,sha256=AYvrOFtyW_cIT4VUf_S80j4yB21fUQnh_uo1KSsFv-0,9382
230
+ portal/templates/portal/locked_out.html,sha256=sf2idEz56-SGzDnGlmeRb4iT43WtBEQEK_4gqbtvpZ0,344
231
+ portal/templates/portal/play.html,sha256=WPC-tQjxws744fGvm4SWYrK42SWLr3SYDthswERm77A,9381
232
+ portal/templates/portal/teach.html,sha256=XXsTizbTM8dNt_4vno2zi42p66sHORg166dOEQJjchQ,7110
233
+ portal/templates/portal/terms.html,sha256=W_FaES8tKoP1rFzl3n4DSomTxd3C2ptt8Syl13A7R9Q,16792
234
+ portal/templates/portal/admin/aggregated_data.html,sha256=rkQ70BLfgKHRlQ4Q5rd5uPI4jQZPIuMdcTJyXUHuHek,658
235
+ portal/templates/portal/admin/map.html,sha256=IZk-VOqV4ee51KVYd7Jq-ylf8upNEyMAPXyXExk2Q0E,1793
236
+ portal/templates/portal/play/base.html,sha256=PWeA8RTDQJmk3jO2lVh_G1LEgcwo9SLFlx28F9MxAcE,186
237
+ portal/templates/portal/play/student_details.html,sha256=YJDfKdmHckq7LCmbhRnD0-4bQOxMUVPSGGAxx712yGM,4438
238
+ portal/templates/portal/play/student_edit_account.html,sha256=jv-UAyhSczNbhLkgtgKk3mZHKUDmu6RMQvipga_Ir0c,4915
239
+ portal/templates/portal/play/student_join_organisation.html,sha256=Pqcg3zLAWlIH-rKvvyAsoEAZv6hk4q6GNvFHVCyg0v4,3832
240
+ portal/templates/portal/teach/base.html,sha256=QYD0XT45efFxDIUyblNTomcLHFCbFHbcK-kEjlibjwQ,190
241
+ portal/templates/portal/teach/organisation_create.html,sha256=SdTrWqT3bCBpJetZ7DYz4FtPYF3kGll66PJOnGZwFwY,4745
242
+ portal/templates/portal/teach/organisation_manage.html,sha256=yWd2ik7NKcI4rCFeXnuy4mD8V2G8PGFbn2JjB9GwF3g,6833
243
+ portal/templates/portal/teach/teacher_add_external_student.html,sha256=7J5X0qbGN2XPHyMxQMKuXQdglQ6FvZ4Pg2WLv2ikeQQ,2618
244
+ portal/templates/portal/teach/teacher_added_external_student.html,sha256=EINjdPyPxF-Er2wu8JCU-WupPTGoFIJUYf_my7aMNOA,1216
245
+ portal/templates/portal/teach/teacher_class.html,sha256=1F1sOmtOCaIDaJtBnyhvVLMjbq_l8eP65uu4nksoRmQ,6512
246
+ portal/templates/portal/teach/teacher_classes.html,sha256=des1xqPl3BJbbUS-lsm01yLb9grWPsUgzCT-5llTTB0,4725
247
+ portal/templates/portal/teach/teacher_dismiss_students.html,sha256=6o9tlKddTqTCKfxfJPQGTz00bn0n_zBtUkHYWTDS06c,2970
248
+ portal/templates/portal/teach/teacher_edit_account.html,sha256=SeHiTKvPGoPHX4wB7kjA3ox8YLLwKRILR-TA7RmdeKE,5970
249
+ portal/templates/portal/teach/teacher_edit_class.html,sha256=WfoQGIdqvRQWxFyCPh_VEYsyXnrqWL7AzjultrQ8S-4,2877
250
+ portal/templates/portal/teach/teacher_edit_student.html,sha256=rzGc1MaMuKxEPLJDBZvg9DRCeSACn21OBCbgEdcxVLM,4502
251
+ portal/templates/portal/teach/teacher_home.html,sha256=jD9Qe70I3I02KzpfPFy0wEr3pWDEwkyAncfjEE5NoGE,7872
252
+ portal/templates/portal/teach/teacher_lesson_plans.html,sha256=ooHx8mDRGfe5L8i2wWkJ9Mq2fTRmGQa5e-DsF4EUyXg,21884
253
+ portal/templates/portal/teach/teacher_lesson_plans_python.html,sha256=kOsD-vGzXHOVEVhSn8VYwJ_kXrHcivEgfGEY-VZe6uQ,12528
254
+ portal/templates/portal/teach/teacher_move_all_classes.html,sha256=LQK1i5Qo-9zCQR8WD2Qseaosj2mGd8f4oPbOzHXGDEw,2317
255
+ portal/templates/portal/teach/teacher_move_class.html,sha256=wNtBh1lKEW_TUXJd82RH1-9YPRNAdaMHAxymo-Kktsg,1565
256
+ portal/templates/portal/teach/teacher_move_students.html,sha256=_12eTnzaq_aFap6aLcTHrVYhBVrHfUwe95khCHRBUfs,1589
257
+ portal/templates/portal/teach/teacher_move_students_to_class.html,sha256=3W5s_AyDIPC-hKS4HoknVtetwoNOERYUyGaJHAmWFYo,3511
258
+ portal/templates/portal/teach/teacher_new_students.html,sha256=Pu2Rb9dsAulmMPG_48MwM0gZFQ14B0zx0uJy5kNqeDU,2270
259
+ portal/templates/portal/teach/teacher_student_reset.html,sha256=qYRvWZyANG6YzWuP_wvN1SOrjHdR1uKzjPrCn7nN4go,1310
260
+ portal/templates/portal/teach/teacher_students_reset.html,sha256=LxFuAOaePxRKWoHw1Jr9wR3-qZq_-U_wJFx9Xdt5qYM,1888
261
+ portal/templates/registration/login.html,sha256=Du2GnmLaxcuFeyHj6MmqkxR3GWwbsY0wxWIqk1tWyO4,1582
262
+ portal/templates/registration/password_reset_complete.html,sha256=6ZExMrnoLO9WBvU70-FCJ_-DW1QQ4n8leCQ36n679c0,458
263
+ portal/templates/registration/password_reset_confirm.html,sha256=l4N_TOxvXJ6qWUsPEbX6Rp-LiNyni3_XBHxhxj3mgUk,2282
264
+ portal/templates/registration/password_reset_done.html,sha256=_vUiO3_mKKe9fvmikpBsALCXOL-iV8v0n930AYxfOnI,438
265
+ portal/templates/registration/password_reset_email.html,sha256=Lcxpq5pvrViEVVXC9GPxd-VXP8-DOXuglE2vfAZ-ztk,341
266
+ portal/templates/registration/student_password_reset_form.html,sha256=qr5_qHYugFEaABQw4vBFA2pHKoeTHePqjvAx2ajpbY8,1410
267
+ portal/templates/registration/teacher_password_reset_form.html,sha256=Fm_e7YW39Tc-AiEUbgA0u9CaT_-fxSt4tW_sYOkgIus,1330
268
+ portal/templates/two_factor/_base.html,sha256=ecs0Vw_8Iqf6ryWc3bB1KJyb29gCX3Y-2qh6eSVgKeU,223
269
+ portal/templates/two_factor/core/setup_complete.html,sha256=bXWeIXGc67G66iXok2rXI8sWP63y9679LHYSx1UPb-o,491
270
+ portal/templates/two_factor/profile/profile.html,sha256=23jotj50hwIYexw1UzbHeAE0mvgk5Gq70fYNLqM30VY,1775
271
+ ratelimit/__init__.py,sha256=iwhKnzeBJLKxpRVjvzwiRE63_zNpIBfaKLITauVph-0,24
272
+ ratelimit/decorators.py,sha256=4ALlxnqim6ItPWe_ALyCqEReEMQrE092Xe_dU-Dw6wo,1859
273
+ ratelimit/backends/__init__.py,sha256=i0bUBumCOYbvPn0u7bkOXLMOu_-Rzd9av7x7EhmCBnM,249
274
+ ratelimit/backends/cache.py,sha256=KEaWXrK3rsBWUD_jktb0MzCQGVmqFIpnQLgoD_wdYw8,1222
275
+ reports/__init__.py,sha256=W4VeGk0r7YdM-TwIsa9dfGs-uLd1ecQb0tK8w44viQA,1832
276
+ reports/admin.py,sha256=uiPe8rCM3MuwdKRxpDnqmdEMQukPoFgOQTAaYrV8Vjg,1895
277
+ reports/models.py,sha256=RfdYkN0RH-yOGcNWG-BoYzbYFbz10ELguElvzTa1RRg,2506
278
+ reports/tests.py,sha256=lbf1rbo9GRWtuCeBDX2RUpp6beyatGWyE9woYB7wfu0,1892
279
+ reports/urls.py,sha256=N9BAPNsJbax_vn7XLVwndIHRFh8tN17W5Ow6g-NlyDU,3901
280
+ reports/views.py,sha256=Qwwu7hcK8S2uxKpbxcsNRnp2ke9-pBGeQOIHGEm64z4,1895
281
+ reports/migrations/0001_initial.py,sha256=CR5tlX8xtkehewORIbSZE2w5P8St4gR1xLWlUVg40HQ,2812
282
+ reports/migrations/0002_hitsperlevelperday.py,sha256=EMkfANeaMPTB7L4OrTXY2lwLxzhh2ZAVoNupOaJscZI,2568
283
+ reports/migrations/__init__.py,sha256=W4VeGk0r7YdM-TwIsa9dfGs-uLd1ecQb0tK8w44viQA,1832
284
+ codeforlife_portal-1.0.0.post0.dev48.dist-info/top_level.txt,sha256=C9YsSRHAv7e7yPSiI00MYzyVT8JnUZzBbOqvGZWEKPc,32
285
+ codeforlife_portal-1.0.0.post0.dev48.dist-info/METADATA,sha256=Ip0dcrig4k3NYiZur1BNPCi4VgmC5bUUJhhCphWUCgU,1784
286
+ codeforlife_portal-1.0.0.post0.dev48.dist-info/DESCRIPTION.rst,sha256=OCTuuN6LcWulhHS3d5rfjdsQtW22n7HENFRh6jC6ego,10
287
+ codeforlife_portal-1.0.0.post0.dev48.dist-info/metadata.json,sha256=6xeIipft7UPA07SqK6rCL5VLmUyA_7Hd444-qqo3fSw,1532
288
+ codeforlife_portal-1.0.0.post0.dev48.dist-info/WHEEL,sha256=AvR0WeTpDaxT645bl5FQxUK6NPsTls2ttpcGJg3j1Xg,110
289
+ codeforlife_portal-1.0.0.post0.dev48.dist-info/RECORD,,
@@ -0,0 +1,6 @@
1
+ Wheel-Version: 1.0
2
+ Generator: bdist_wheel (0.24.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py2-none-any
5
+ Tag: py3-none-any
6
+
@@ -0,0 +1 @@
1
+ {"name": "codeforlife-portal", "run_requires": [{"requires": ["django (==1.8.2)", "django-appconf (==1.0.1)", "django-countries (==3.4.1)", "djangorestframework (==3.1.3)", "django-jquery (==1.9.1)", "django-autoconfig (==0.3.6)", "pyyaml (==3.10)", "rapid-router (>=1.0.0.post.dev1)", "six (==1.9.0)", "docutils (==0.12)", "django-recaptcha-field (==1.0b2)", "reportlab (==3.2.0)", "postcodes (==0.1)", "django-formtools (==1.0)", "django-two-factor-auth (==1.2.0)", "urllib3 (==1.10.4)", "requests (==2.7.0)", "django-cms (==3.1.2)", "django-classy-tags (==0.6.1)", "django-treebeard (==3.0)", "django-sekizai (==0.8.2)", "djangocms-admin-style (==0.2.8)", "djangocms-text-ckeditor (==2.6.0)", "djangocms-link (==1.6.2)", "djangocms-snippet (==1.5)", "djangocms-style (==1.5)", "djangocms-column (==1.5)", "djangocms-grid (==1.2)", "djangocms-oembed (==0.5)", "djangocms-table (==1.2)", "djangocms-file (==0.1)", "djangocms-flash (==0.2.0)", "djangocms-googlemap (==0.3)", "djangocms-inherit (==0.1)", "djangocms-picture (==0.1)", "djangocms-teaser (==0.1)", "djangocms-video (==0.1)", "django-online-status (==0.1.0)", "Pillow (==2.9.0)", "django-reversion (==1.9.3)"]}], "generator": "bdist_wheel (0.24.0)", "test_requires": [{"requires": ["django-setuptest", "django-selenium-clean (==0.2.1)", "responses (==0.4.0)", "selenium (==2.48.0)"]}], "summary": "UNKNOWN", "metadata_version": "2.0", "version": "1.0.0.post0.dev48", "extensions": {"python.details": {"document_names": {"description": "DESCRIPTION.rst"}}}, "extras": []}
@@ -0,0 +1,4 @@
1
+ deploy
2
+ portal
3
+ ratelimit
4
+ reports
deploy/__init__.py ADDED
@@ -0,0 +1,36 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Code for Life
3
+ #
4
+ # Copyright (C) 2015, Ocado Limited
5
+ #
6
+ # This program is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU Affero General Public License as
8
+ # published by the Free Software Foundation, either version 3 of the
9
+ # License, or (at your option) any later version.
10
+ #
11
+ # This program is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU Affero General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Affero General Public License
17
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
18
+ #
19
+ # ADDITIONAL TERMS – Section 7 GNU General Public Licence
20
+ #
21
+ # This licence does not grant any right, title or interest in any “Ocado” logos,
22
+ # trade names or the trademark “Ocado” or any other trademarks or domain names
23
+ # owned by Ocado Innovation Limited or the Ocado group of companies or any other
24
+ # distinctive brand features of “Ocado” as may be secured from time to time. You
25
+ # must not distribute any modification of this program using the trademark
26
+ # “Ocado” or claim any affiliation or association with Ocado or its employees.
27
+ #
28
+ # You are not authorised to use the name Ocado (or any of its trade names) or
29
+ # the names of any author or contributor in advertising or for publicity purposes
30
+ # pertaining to the distribution of this program, without the prior written
31
+ # authorisation of Ocado.
32
+ #
33
+ # Any propagation, distribution or conveyance of this program must include this
34
+ # copyright notice and these terms. You must not misrepresent the origins of this
35
+ # program; modified versions of the program must be marked as such and not
36
+ # identified as the original program.
deploy/captcha.py ADDED
@@ -0,0 +1,38 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Code for Life
3
+ #
4
+ # Copyright (C) 2015, Ocado Limited
5
+ #
6
+ # This program is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU Affero General Public License as
8
+ # published by the Free Software Foundation, either version 3 of the
9
+ # License, or (at your option) any later version.
10
+ #
11
+ # This program is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU Affero General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Affero General Public License
17
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
18
+ #
19
+ # ADDITIONAL TERMS – Section 7 GNU General Public Licence
20
+ #
21
+ # This licence does not grant any right, title or interest in any “Ocado” logos,
22
+ # trade names or the trademark “Ocado” or any other trademarks or domain names
23
+ # owned by Ocado Innovation Limited or the Ocado group of companies or any other
24
+ # distinctive brand features of “Ocado” as may be secured from time to time. You
25
+ # must not distribute any modification of this program using the trademark
26
+ # “Ocado” or claim any affiliation or association with Ocado or its employees.
27
+ #
28
+ # You are not authorised to use the name Ocado (or any of its trade names) or
29
+ # the names of any author or contributor in advertising or for publicity purposes
30
+ # pertaining to the distribution of this program, without the prior written
31
+ # authorisation of Ocado.
32
+ #
33
+ # Any propagation, distribution or conveyance of this program must include this
34
+ # copyright notice and these terms. You must not misrepresent the origins of this
35
+ # program; modified versions of the program must be marked as such and not
36
+ # identified as the original program.
37
+
38
+ CAPTCHA_ENABLED = True
deploy/mail.py ADDED
@@ -0,0 +1,93 @@
1
+ from email.MIMEBase import MIMEBase
2
+
3
+ from django.core.mail.backends.base import BaseEmailBackend
4
+ from django.core.mail import EmailMultiAlternatives
5
+ from django.core.exceptions import ImproperlyConfigured
6
+
7
+ from google.appengine.api import mail as aeemail
8
+ from google.appengine.runtime import apiproxy_errors
9
+
10
+
11
+ def _send_deferred(message, fail_silently=False):
12
+ try:
13
+ message.send()
14
+ except (aeemail.Error, apiproxy_errors.Error):
15
+ if not fail_silently:
16
+ raise
17
+
18
+
19
+ class EmailBackend(BaseEmailBackend):
20
+ can_defer = False
21
+
22
+ def send_messages(self, email_messages):
23
+ num_sent = 0
24
+ for message in email_messages:
25
+ if self._send(message):
26
+ num_sent += 1
27
+ return num_sent
28
+
29
+ def _copy_message(self, message):
30
+ """
31
+ Creates and returns App Engine EmailMessage class from message.
32
+ """
33
+ gmsg = aeemail.EmailMessage(sender=message.from_email,
34
+ to=message.to,
35
+ subject=message.subject,
36
+ body=message.body)
37
+ if message.extra_headers.get('Reply-To', None):
38
+ gmsg.reply_to = message.extra_headers['Reply-To']
39
+ if message.cc:
40
+ gmsg.cc = list(message.cc)
41
+ if message.bcc:
42
+ gmsg.bcc = list(message.bcc)
43
+ if message.attachments:
44
+ # Must be populated with (filename, filecontents) tuples.
45
+ attachments = []
46
+ for attachment in message.attachments:
47
+ if isinstance(attachment, MIMEBase):
48
+ attachments.append((attachment.get_filename(),
49
+ attachment.get_payload(decode=True)))
50
+ else:
51
+ attachments.append((attachment[0], attachment[1]))
52
+ gmsg.attachments = attachments
53
+ # Look for HTML alternative content.
54
+ if isinstance(message, EmailMultiAlternatives):
55
+ for content, mimetype in message.alternatives:
56
+ if mimetype == 'text/html':
57
+ gmsg.html = content
58
+ break
59
+ return gmsg
60
+
61
+ def _send(self, message):
62
+ try:
63
+ message = self._copy_message(message)
64
+ except (ValueError, aeemail.InvalidEmailError), err:
65
+ import logging
66
+ logging.warn(err)
67
+ if not self.fail_silently:
68
+ raise
69
+ return False
70
+ if self.can_defer:
71
+ self._defer_message(message)
72
+ return True
73
+ try:
74
+ message.send()
75
+ except (aeemail.Error, apiproxy_errors.Error):
76
+ if not self.fail_silently:
77
+ raise
78
+ return False
79
+ return True
80
+
81
+ def _defer_message(self, message):
82
+ from google.appengine.ext import deferred
83
+ from django.conf import settings
84
+ queue_name = getattr(settings, 'EMAIL_QUEUE_NAME', 'default')
85
+ deferred.defer(_send_deferred,
86
+ message,
87
+ fail_silently=self.fail_silently,
88
+ _queue=queue_name)
89
+
90
+
91
+ class AsyncEmailBackend(EmailBackend):
92
+ can_defer = True
93
+
File without changes
@@ -0,0 +1,24 @@
1
+ from django.http import HttpResponse
2
+ from django.conf import settings
3
+ import os
4
+
5
+ class BasicAuthMiddleware:
6
+ def unauthed(self):
7
+ response = HttpResponse("""<html><title>Auth required</title><body>
8
+ <h1>Authorization Required</h1></body></html>""", content_type="text/html")
9
+ response['WWW-Authenticate'] = 'Basic realm="' + os.getenv('APPLICATION_ID', '') + '"'
10
+ response.status_code = 401
11
+ return response
12
+
13
+ def process_request(self, request):
14
+ if request.META.has_key('HTTP_AUTHORIZATION'):
15
+ authmeth, auth = request.META['HTTP_AUTHORIZATION'].split(' ', 1)
16
+ if authmeth.lower() == 'basic':
17
+ auth = auth.strip().decode('base64')
18
+ username, password = auth.split(':', 1)
19
+ if username != settings.BASICAUTH_USERNAME or password != settings.BASICAUTH_PASSWORD:
20
+ return self.unauthed()
21
+ else:
22
+ return self.unauthed()
23
+ else:
24
+ return self.unauthed()
@@ -0,0 +1,8 @@
1
+ import logging
2
+
3
+
4
+ class ExceptionLoggingMiddleware(object):
5
+ def process_exception(self, request, exception):
6
+ logging.exception("Exception occurred while handling %s request to %s",
7
+ request.method, request.path)
8
+ return None
deploy/permissions.py ADDED
@@ -0,0 +1,2 @@
1
+ def is_authorised_to_view_aggregated_data(u):
2
+ return hasattr(u, 'userprofile') and u.userprofile.can_view_aggregated_data