codeforlife-portal 7.4.4__py2.py3-none-any.whl → 7.4.5__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.
Potentially problematic release.
This version of codeforlife-portal might be problematic. Click here for more details.
- {codeforlife_portal-7.4.4.dist-info → codeforlife_portal-7.4.5.dist-info}/METADATA +2 -2
- {codeforlife_portal-7.4.4.dist-info → codeforlife_portal-7.4.5.dist-info}/RECORD +9 -9
- portal/__init__.py +1 -1
- portal/urls.py +47 -33
- portal/views/cron/user.py +36 -36
- portal/views/home.py +1 -1
- {codeforlife_portal-7.4.4.dist-info → codeforlife_portal-7.4.5.dist-info}/LICENSE.md +0 -0
- {codeforlife_portal-7.4.4.dist-info → codeforlife_portal-7.4.5.dist-info}/WHEEL +0 -0
- {codeforlife_portal-7.4.4.dist-info → codeforlife_portal-7.4.5.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: codeforlife-portal
|
|
3
|
-
Version: 7.4.
|
|
3
|
+
Version: 7.4.5
|
|
4
4
|
Classifier: Programming Language :: Python
|
|
5
5
|
Classifier: Programming Language :: Python :: 3.12
|
|
6
6
|
Classifier: Framework :: Django
|
|
@@ -21,7 +21,7 @@ Requires-Dist: django-classy-tags==2.0.0
|
|
|
21
21
|
Requires-Dist: libsass==0.23.0
|
|
22
22
|
Requires-Dist: phonenumbers==8.12.12
|
|
23
23
|
Requires-Dist: more-itertools==8.7.0
|
|
24
|
-
Requires-Dist: cfl-common==7.4.
|
|
24
|
+
Requires-Dist: cfl-common==7.4.5
|
|
25
25
|
Requires-Dist: django-ratelimit==3.0.1
|
|
26
26
|
Requires-Dist: django-preventconcurrentlogins==0.8.2
|
|
27
27
|
Requires-Dist: django-csp==3.7
|
|
@@ -108,7 +108,7 @@ example_project/portal_test_settings.py,sha256=_gI7-HMoPJ-cDGO6n5UlEIHKHuTR5SC_X
|
|
|
108
108
|
example_project/settings.py,sha256=HgGSG0n6Xggd0NieFVoJgn8vKGqyRbCddoB3CRuoT-Y,5640
|
|
109
109
|
example_project/urls.py,sha256=3SsP5jvPAXV5xmduka4zbSZB5PbXggjsalu1ojY5KIo,434
|
|
110
110
|
example_project/wsgi.py,sha256=U1W6WzZxZaIdYZ5tks7w9fqp5WS5qvn2iThsVcskrWw,829
|
|
111
|
-
portal/__init__.py,sha256=
|
|
111
|
+
portal/__init__.py,sha256=ERwVBgQCBJgucxhtakk-dQufB6Ee4T6nwO2NL91sBGg,22
|
|
112
112
|
portal/admin.py,sha256=on1-zNRnZvf2cwBN6GVRVYRhkaksrCgfzX8XPWtkvz8,6062
|
|
113
113
|
portal/app_settings.py,sha256=DhWLQOwM0zVOXE3O5TNKbMM9K6agfLuCsHOdr1J7xEI,651
|
|
114
114
|
portal/backends.py,sha256=2Dss6_WoQwPuDzJUF1yEaTQTNG4eUrD12ujJQ5cp5Tc,812
|
|
@@ -116,7 +116,7 @@ portal/beta.py,sha256=0TCC-9_KZoM1nuzJ9FiuKR5n9JITdMYenHGQtRvn9UU,255
|
|
|
116
116
|
portal/context_processors.py,sha256=Q68UhmArLPRchS2KmfVR4hKrijllXal3sO5cHYWC2Fc,222
|
|
117
117
|
portal/handlers.py,sha256=gF99OfQrGcIGDnUyONhvylZNU8sl6XHYEurwu0fuiss,422
|
|
118
118
|
portal/models.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
119
|
-
portal/urls.py,sha256=
|
|
119
|
+
portal/urls.py,sha256=AoreM8d6hjGgeZBbxiGVK-o6kYrfpfUVO72tPK55uMo,18239
|
|
120
120
|
portal/wsgi.py,sha256=3yRcNxBQG30NhzrVi93bX-DrbXtsIQBc70HiW5wbOyE,401
|
|
121
121
|
portal/forms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
122
122
|
portal/forms/admin.py,sha256=Cdl8-wvasAzvMfgUlFYzQjYeuyC7gIsSiy8V_-jMp7w,2080
|
|
@@ -609,14 +609,14 @@ portal/views/admin.py,sha256=4Xt3zEyQH7sUwQSrwuRtoCodWidjOzd7gJUwWU96pXY,957
|
|
|
609
609
|
portal/views/api.py,sha256=lCwiclR98G-yTgK55u8IjkueIH8iremeiZSa3jAvO-M,6990
|
|
610
610
|
portal/views/dotmailer.py,sha256=x49p89TtwA1MLysRLtq5yRRzVtIpzGoU__Xb5hPuHak,3208
|
|
611
611
|
portal/views/email.py,sha256=V3wXRxIjeZ4OJBVqGCQrPn-GQWKZK1PCXbR1f2Zpa_4,2174
|
|
612
|
-
portal/views/home.py,sha256=
|
|
612
|
+
portal/views/home.py,sha256=eqtjyvZ8oQGCnQ5Y91jOc1KBDKJ77kZFouI32klotho,9717
|
|
613
613
|
portal/views/legal.py,sha256=nUunsTHnhMcXBcDlg1GmUal86k9Vhinne4A2FWfq78M,342
|
|
614
614
|
portal/views/organisation.py,sha256=sPDbiM7hdtpF8GKyh_4n4VPl2a-WnAgnF4q9aSvQCVI,3341
|
|
615
615
|
portal/views/play_landing_page.py,sha256=FFmjUFub3ZdlbMqkB8yX3jAImCzqrUqgb8AZcpKywZ4,308
|
|
616
616
|
portal/views/registration.py,sha256=L9AzIG2nOU946cSOXmUMQRtDo3uxApHX-0ceXopbOCw,10888
|
|
617
617
|
portal/views/teach.py,sha256=nzlyTcgq9ImAjnqrF3esqi212qBLH5Ww1LKE2gSjoRY,210
|
|
618
618
|
portal/views/cron/__init__.py,sha256=5rxXyhJmLOExRdrYZ1VJttTsyRIPRybzdftbUDwFByI,20
|
|
619
|
-
portal/views/cron/user.py,sha256=
|
|
619
|
+
portal/views/cron/user.py,sha256=U4PfsLbUnGUB_s9h6gdRba3y6c9rexjxK-hk1ptumQk,10845
|
|
620
620
|
portal/views/login/__init__.py,sha256=xSCtyFPSI87BRUybBgqa86ekFEolX5gUDbBSfBUMTyI,399
|
|
621
621
|
portal/views/login/independent_student.py,sha256=3dFULhwMAlX4VDrJl-Znril6a9M5xKBSHO1eWvujfS0,2662
|
|
622
622
|
portal/views/login/student.py,sha256=dt6cMfWepBJsVCRcADltfYSHVpyeP1WGLKSogMJ22E0,5539
|
|
@@ -631,8 +631,8 @@ portal/views/two_factor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
|
|
|
631
631
|
portal/views/two_factor/core.py,sha256=O_wcBeFqdPYSGNGv-pT_vbs5-Dj1Z-Jfkd6f9-E5yZI,760
|
|
632
632
|
portal/views/two_factor/form.py,sha256=lnHNKI-BMlpncTuW3zUzjPaJJNuEra2I_nOam0eOKFY,257
|
|
633
633
|
portal/views/two_factor/profile.py,sha256=tkl_ludo8arMtd5LKNmohM66vpC_YQiP-0nspTSJiJ4,383
|
|
634
|
-
codeforlife_portal-7.4.
|
|
635
|
-
codeforlife_portal-7.4.
|
|
636
|
-
codeforlife_portal-7.4.
|
|
637
|
-
codeforlife_portal-7.4.
|
|
638
|
-
codeforlife_portal-7.4.
|
|
634
|
+
codeforlife_portal-7.4.5.dist-info/LICENSE.md,sha256=9AbRlCDqD2D1tPibimysFv3zg3AIc49-eyv9aEsyq9w,115
|
|
635
|
+
codeforlife_portal-7.4.5.dist-info/METADATA,sha256=23UXanFqJpSCw-eMUQ4dYO4uuaksgG9Hpq3x8M_0BYc,3317
|
|
636
|
+
codeforlife_portal-7.4.5.dist-info/WHEEL,sha256=fS9sRbCBHs7VFcwJLnLXN1MZRR0_TVTxvXKzOnaSFs8,110
|
|
637
|
+
codeforlife_portal-7.4.5.dist-info/top_level.txt,sha256=8e5pdsuIoTqEAMqpelHBjGjLbffcBtgOoggmd2q7nMw,41
|
|
638
|
+
codeforlife_portal-7.4.5.dist-info/RECORD,,
|
portal/__init__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "7.4.
|
|
1
|
+
__version__ = "7.4.5"
|
portal/urls.py
CHANGED
|
@@ -223,53 +223,63 @@ urlpatterns = [
|
|
|
223
223
|
),
|
|
224
224
|
url(r"^$", home, name="home"),
|
|
225
225
|
url(r"^home-learning", home_learning, name="home-learning"),
|
|
226
|
-
url(
|
|
226
|
+
url(
|
|
227
|
+
r"^register_form",
|
|
228
|
+
# register_view,
|
|
229
|
+
home,
|
|
230
|
+
name="register",
|
|
231
|
+
),
|
|
227
232
|
url(
|
|
228
233
|
r"^login/teacher/$",
|
|
229
|
-
# The ratelimit decorator checks how often a POST request is performed on that view.
|
|
230
|
-
# It checks against the username value specifically. If the number of requests
|
|
231
|
-
# exceeds the specified rate, then the user will be blocked (if block = True).
|
|
232
|
-
ratelimit(
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
)(TeacherLoginView.as_view()),
|
|
234
|
+
# # The ratelimit decorator checks how often a POST request is performed on that view.
|
|
235
|
+
# # It checks against the username value specifically. If the number of requests
|
|
236
|
+
# # exceeds the specified rate, then the user will be blocked (if block = True).
|
|
237
|
+
# ratelimit(
|
|
238
|
+
# group=RATELIMIT_LOGIN_GROUP,
|
|
239
|
+
# key="post:auth-username",
|
|
240
|
+
# method=RATELIMIT_METHOD,
|
|
241
|
+
# rate=RATELIMIT_LOGIN_RATE,
|
|
242
|
+
# block=True,
|
|
243
|
+
# )(TeacherLoginView.as_view()),
|
|
244
|
+
home,
|
|
239
245
|
name="teacher_login",
|
|
240
246
|
),
|
|
241
247
|
url(
|
|
242
248
|
rf"^login/student/(?P<access_code>{ACCESS_CODE_REGEX})/(?:(?P<login_type>classform)/)?$",
|
|
243
|
-
ratelimit(
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
)(StudentLoginView.as_view()),
|
|
249
|
+
# ratelimit(
|
|
250
|
+
# group=RATELIMIT_LOGIN_GROUP,
|
|
251
|
+
# key=school_student_key,
|
|
252
|
+
# method=RATELIMIT_METHOD,
|
|
253
|
+
# rate=RATELIMIT_LOGIN_RATE_SCHOOL_STUDENT,
|
|
254
|
+
# block=True,
|
|
255
|
+
# is_teacher=False,
|
|
256
|
+
# )(StudentLoginView.as_view()),
|
|
257
|
+
home,
|
|
251
258
|
name="student_login",
|
|
252
259
|
),
|
|
253
260
|
url(
|
|
254
261
|
r"^login/student/$",
|
|
255
|
-
StudentClassCodeView.as_view(),
|
|
262
|
+
# StudentClassCodeView.as_view(),
|
|
263
|
+
home,
|
|
256
264
|
name="student_login_access_code",
|
|
257
265
|
),
|
|
258
266
|
url(
|
|
259
267
|
r"^u/(?P<user_id>[0-9]+)/(?P<login_id>[a-z0-9]+)/$",
|
|
260
|
-
student_direct_login,
|
|
268
|
+
# student_direct_login,
|
|
269
|
+
home,
|
|
261
270
|
name="student_direct_login",
|
|
262
271
|
),
|
|
263
272
|
url(
|
|
264
273
|
r"^login/independent/$",
|
|
265
|
-
ratelimit(
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
)(IndependentStudentLoginView.as_view()),
|
|
274
|
+
# ratelimit(
|
|
275
|
+
# group=RATELIMIT_LOGIN_GROUP,
|
|
276
|
+
# key="post:username",
|
|
277
|
+
# method=RATELIMIT_METHOD,
|
|
278
|
+
# rate=RATELIMIT_LOGIN_RATE,
|
|
279
|
+
# block=True,
|
|
280
|
+
# is_teacher=False,
|
|
281
|
+
# )(IndependentStudentLoginView.as_view()),
|
|
282
|
+
home,
|
|
273
283
|
name="independent_student_login",
|
|
274
284
|
),
|
|
275
285
|
url(r"^login_form", old_login_form_redirect, name="old_login_form"),
|
|
@@ -290,17 +300,20 @@ urlpatterns = [
|
|
|
290
300
|
),
|
|
291
301
|
url(
|
|
292
302
|
rf"^verify_email/(?P<token>{JWT_REGEX})/$",
|
|
293
|
-
verify_email,
|
|
303
|
+
# verify_email,
|
|
304
|
+
home,
|
|
294
305
|
name="verify_email",
|
|
295
306
|
),
|
|
296
307
|
url(
|
|
297
308
|
r"^user/password/reset/student/$",
|
|
298
|
-
student_password_reset,
|
|
309
|
+
# student_password_reset,
|
|
310
|
+
home,
|
|
299
311
|
name="student_password_reset",
|
|
300
312
|
),
|
|
301
313
|
url(
|
|
302
314
|
r"^user/password/reset/teacher/$",
|
|
303
|
-
teacher_password_reset,
|
|
315
|
+
# teacher_password_reset,
|
|
316
|
+
home,
|
|
304
317
|
name="teacher_password_reset",
|
|
305
318
|
),
|
|
306
319
|
url(
|
|
@@ -310,7 +323,8 @@ urlpatterns = [
|
|
|
310
323
|
),
|
|
311
324
|
url(
|
|
312
325
|
r"^user/password/reset/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$",
|
|
313
|
-
password_reset_check_and_confirm,
|
|
326
|
+
# password_reset_check_and_confirm,
|
|
327
|
+
home,
|
|
314
328
|
name="password_reset_check_and_confirm",
|
|
315
329
|
),
|
|
316
330
|
url(
|
portal/views/cron/user.py
CHANGED
|
@@ -172,42 +172,42 @@ class SecondVerifyEmailReminderView(CronMixin, APIView):
|
|
|
172
172
|
|
|
173
173
|
class AnonymiseUnverifiedAccounts(CronMixin, APIView):
|
|
174
174
|
def get(self, request):
|
|
175
|
-
user_count = User.objects.filter(is_active=True).count()
|
|
176
|
-
|
|
177
|
-
teacher_queryset, independent_student_queryset = get_unverified_users(
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
)
|
|
181
|
-
teacher_count = teacher_queryset.count()
|
|
182
|
-
indy_count = independent_student_queryset.count()
|
|
183
|
-
|
|
184
|
-
user_queryset = teacher_queryset.union(independent_student_queryset)
|
|
185
|
-
|
|
186
|
-
for user in user_queryset.iterator(chunk_size=100):
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
user_count -= User.objects.filter(is_active=True).count()
|
|
194
|
-
logging.info(f"{user_count} unverified users anonymised.")
|
|
195
|
-
|
|
196
|
-
activity_today = DailyActivity.objects.get_or_create(
|
|
197
|
-
|
|
198
|
-
)[0]
|
|
199
|
-
activity_today.anonymised_unverified_teachers = teacher_count
|
|
200
|
-
activity_today.anonymised_unverified_independents = indy_count
|
|
201
|
-
activity_today.save()
|
|
202
|
-
|
|
203
|
-
TotalActivity.objects.update(
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
)
|
|
175
|
+
# user_count = User.objects.filter(is_active=True).count()
|
|
176
|
+
#
|
|
177
|
+
# teacher_queryset, independent_student_queryset = get_unverified_users(
|
|
178
|
+
# USER_DELETE_UNVERIFIED_ACCOUNT_DAYS,
|
|
179
|
+
# same_day=False,
|
|
180
|
+
# )
|
|
181
|
+
# teacher_count = teacher_queryset.count()
|
|
182
|
+
# indy_count = independent_student_queryset.count()
|
|
183
|
+
#
|
|
184
|
+
# user_queryset = teacher_queryset.union(independent_student_queryset)
|
|
185
|
+
#
|
|
186
|
+
# for user in user_queryset.iterator(chunk_size=100):
|
|
187
|
+
# try:
|
|
188
|
+
# anonymise(user)
|
|
189
|
+
# except Exception as ex:
|
|
190
|
+
# logging.error(f"Failed to anonymise user with id: {user.id}")
|
|
191
|
+
# logging.exception(ex)
|
|
192
|
+
#
|
|
193
|
+
# user_count -= User.objects.filter(is_active=True).count()
|
|
194
|
+
# logging.info(f"{user_count} unverified users anonymised.")
|
|
195
|
+
#
|
|
196
|
+
# activity_today = DailyActivity.objects.get_or_create(
|
|
197
|
+
# date=datetime.now().date()
|
|
198
|
+
# )[0]
|
|
199
|
+
# activity_today.anonymised_unverified_teachers = teacher_count
|
|
200
|
+
# activity_today.anonymised_unverified_independents = indy_count
|
|
201
|
+
# activity_today.save()
|
|
202
|
+
#
|
|
203
|
+
# TotalActivity.objects.update(
|
|
204
|
+
# anonymised_unverified_teachers=F("anonymised_unverified_teachers")
|
|
205
|
+
# + teacher_count,
|
|
206
|
+
# anonymised_unverified_independents=F(
|
|
207
|
+
# "anonymised_unverified_independents"
|
|
208
|
+
# )
|
|
209
|
+
# + indy_count,
|
|
210
|
+
# )
|
|
211
211
|
|
|
212
212
|
return Response()
|
|
213
213
|
|
portal/views/home.py
CHANGED
|
@@ -255,7 +255,7 @@ def coding_club(request):
|
|
|
255
255
|
|
|
256
256
|
def download_student_pack(request, student_pack_type):
|
|
257
257
|
if request.method == "POST":
|
|
258
|
-
count_student_pack_downloads_click(int(student_pack_type))
|
|
258
|
+
# count_student_pack_downloads_click(int(student_pack_type))
|
|
259
259
|
link = cloud_storage("club_packs/PrimaryCodingClub.zip")
|
|
260
260
|
return redirect(link)
|
|
261
261
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|