codeforlife-portal 6.44.8__py2.py3-none-any.whl → 6.44.10__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.
- cfl_common/common/migrations/0052_add_cse_fields.py +68 -0
- cfl_common/common/models.py +148 -36
- {codeforlife_portal-6.44.8.dist-info → codeforlife_portal-6.44.10.dist-info}/METADATA +3 -3
- {codeforlife_portal-6.44.8.dist-info → codeforlife_portal-6.44.10.dist-info}/RECORD +8 -7
- portal/__init__.py +1 -1
- {codeforlife_portal-6.44.8.dist-info → codeforlife_portal-6.44.10.dist-info}/LICENSE.md +0 -0
- {codeforlife_portal-6.44.8.dist-info → codeforlife_portal-6.44.10.dist-info}/WHEEL +0 -0
- {codeforlife_portal-6.44.8.dist-info → codeforlife_portal-6.44.10.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Generated by Django 3.2.25 on 2024-05-22 11:30
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
|
|
8
|
+
dependencies = [
|
|
9
|
+
('common', '0051_verify_returning_users'),
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
operations = [
|
|
13
|
+
migrations.AddField(
|
|
14
|
+
model_name='schoolteacherinvitation',
|
|
15
|
+
name='_invited_teacher_email',
|
|
16
|
+
field=models.BinaryField(blank=True, null=True),
|
|
17
|
+
),
|
|
18
|
+
migrations.AddField(
|
|
19
|
+
model_name='schoolteacherinvitation',
|
|
20
|
+
name='_invited_teacher_first_name',
|
|
21
|
+
field=models.BinaryField(blank=True, null=True),
|
|
22
|
+
),
|
|
23
|
+
migrations.AddField(
|
|
24
|
+
model_name='schoolteacherinvitation',
|
|
25
|
+
name='_invited_teacher_last_name',
|
|
26
|
+
field=models.BinaryField(blank=True, null=True),
|
|
27
|
+
),
|
|
28
|
+
migrations.AddField(
|
|
29
|
+
model_name='userprofile',
|
|
30
|
+
name='_email',
|
|
31
|
+
field=models.BinaryField(blank=True, null=True),
|
|
32
|
+
),
|
|
33
|
+
migrations.AddField(
|
|
34
|
+
model_name='userprofile',
|
|
35
|
+
name='_first_name',
|
|
36
|
+
field=models.BinaryField(blank=True, null=True),
|
|
37
|
+
),
|
|
38
|
+
migrations.AddField(
|
|
39
|
+
model_name='userprofile',
|
|
40
|
+
name='_last_name',
|
|
41
|
+
field=models.BinaryField(blank=True, null=True),
|
|
42
|
+
),
|
|
43
|
+
migrations.AddField(
|
|
44
|
+
model_name='userprofile',
|
|
45
|
+
name='_username',
|
|
46
|
+
field=models.BinaryField(blank=True, null=True),
|
|
47
|
+
),
|
|
48
|
+
migrations.AddField(
|
|
49
|
+
model_name='userprofile',
|
|
50
|
+
name='email',
|
|
51
|
+
field=models.CharField(blank=True, max_length=200, null=True),
|
|
52
|
+
),
|
|
53
|
+
migrations.AddField(
|
|
54
|
+
model_name='userprofile',
|
|
55
|
+
name='first_name',
|
|
56
|
+
field=models.CharField(blank=True, max_length=200, null=True),
|
|
57
|
+
),
|
|
58
|
+
migrations.AddField(
|
|
59
|
+
model_name='userprofile',
|
|
60
|
+
name='last_name',
|
|
61
|
+
field=models.CharField(blank=True, max_length=200, null=True),
|
|
62
|
+
),
|
|
63
|
+
migrations.AddField(
|
|
64
|
+
model_name='userprofile',
|
|
65
|
+
name='username',
|
|
66
|
+
field=models.CharField(blank=True, max_length=200, null=True),
|
|
67
|
+
),
|
|
68
|
+
]
|
cfl_common/common/models.py
CHANGED
|
@@ -16,12 +16,25 @@ class UserProfile(models.Model):
|
|
|
16
16
|
developer = models.BooleanField(default=False)
|
|
17
17
|
is_verified = models.BooleanField(default=False)
|
|
18
18
|
|
|
19
|
-
# Holds the user's earned kurono badges. This information has to be on the
|
|
20
|
-
# deleted every time the Game gets
|
|
21
|
-
#
|
|
22
|
-
#
|
|
19
|
+
# Holds the user's earned kurono badges. This information has to be on the
|
|
20
|
+
# UserProfile as the Avatar objects are deleted every time the Game gets
|
|
21
|
+
# deleted.
|
|
22
|
+
# This is a string showing which badges in which worksheets have been
|
|
23
|
+
# earned. The format is "X:Y" where X is the worksheet ID and Y is the
|
|
24
|
+
# badge ID. This repeats for all badges and each pair is comma-separated.
|
|
23
25
|
aimmo_badges = models.CharField(max_length=200, null=True, blank=True)
|
|
24
26
|
|
|
27
|
+
# TODO: Make not nullable once data has been transferred
|
|
28
|
+
first_name = models.CharField(max_length=200, null=True, blank=True)
|
|
29
|
+
_first_name = models.BinaryField(null=True, blank=True)
|
|
30
|
+
last_name = models.CharField(max_length=200, null=True, blank=True)
|
|
31
|
+
_last_name = models.BinaryField(null=True, blank=True)
|
|
32
|
+
email = models.CharField(max_length=200, null=True, blank=True)
|
|
33
|
+
_email = models.BinaryField(null=True, blank=True)
|
|
34
|
+
# TODO: Make not nullable once data has been transferred
|
|
35
|
+
username = models.CharField(max_length=200, null=True, blank=True)
|
|
36
|
+
_username = models.BinaryField(null=True, blank=True)
|
|
37
|
+
|
|
25
38
|
def __str__(self):
|
|
26
39
|
return f"{self.user.first_name} {self.user.last_name}"
|
|
27
40
|
|
|
@@ -38,7 +51,9 @@ class SchoolModelManager(models.Manager):
|
|
|
38
51
|
|
|
39
52
|
class School(models.Model):
|
|
40
53
|
name = models.CharField(max_length=200, unique=True)
|
|
41
|
-
country = CountryField(
|
|
54
|
+
country = CountryField(
|
|
55
|
+
blank_label="(select country)", null=True, blank=True
|
|
56
|
+
)
|
|
42
57
|
# TODO: Create an Address model to house address details
|
|
43
58
|
county = models.CharField(max_length=50, blank=True, null=True)
|
|
44
59
|
creation_time = models.DateTimeField(default=timezone.now, null=True)
|
|
@@ -61,7 +76,11 @@ class School(models.Model):
|
|
|
61
76
|
|
|
62
77
|
def admins(self):
|
|
63
78
|
teachers = self.teacher_school.all()
|
|
64
|
-
return
|
|
79
|
+
return (
|
|
80
|
+
[teacher for teacher in teachers if teacher.is_admin]
|
|
81
|
+
if teachers
|
|
82
|
+
else None
|
|
83
|
+
)
|
|
65
84
|
|
|
66
85
|
def anonymise(self):
|
|
67
86
|
self.name = uuid4().hex
|
|
@@ -72,7 +91,11 @@ class School(models.Model):
|
|
|
72
91
|
class TeacherModelManager(models.Manager):
|
|
73
92
|
def factory(self, first_name, last_name, email, password):
|
|
74
93
|
user = User.objects.create_user(
|
|
75
|
-
username=email,
|
|
94
|
+
username=email,
|
|
95
|
+
email=email,
|
|
96
|
+
password=password,
|
|
97
|
+
first_name=first_name,
|
|
98
|
+
last_name=last_name,
|
|
76
99
|
)
|
|
77
100
|
|
|
78
101
|
user_profile = UserProfile.objects.create(user=user)
|
|
@@ -86,12 +109,28 @@ class TeacherModelManager(models.Manager):
|
|
|
86
109
|
|
|
87
110
|
class Teacher(models.Model):
|
|
88
111
|
user = models.OneToOneField(UserProfile, on_delete=models.CASCADE)
|
|
89
|
-
new_user = models.OneToOneField(
|
|
90
|
-
|
|
112
|
+
new_user = models.OneToOneField(
|
|
113
|
+
User,
|
|
114
|
+
related_name="new_teacher",
|
|
115
|
+
null=True,
|
|
116
|
+
blank=True,
|
|
117
|
+
on_delete=models.CASCADE,
|
|
118
|
+
)
|
|
119
|
+
school = models.ForeignKey(
|
|
120
|
+
School,
|
|
121
|
+
related_name="teacher_school",
|
|
122
|
+
null=True,
|
|
123
|
+
blank=True,
|
|
124
|
+
on_delete=models.SET_NULL,
|
|
125
|
+
)
|
|
91
126
|
is_admin = models.BooleanField(default=False)
|
|
92
127
|
blocked_time = models.DateTimeField(null=True, blank=True)
|
|
93
128
|
invited_by = models.ForeignKey(
|
|
94
|
-
"self",
|
|
129
|
+
"self",
|
|
130
|
+
related_name="invited_teachers",
|
|
131
|
+
null=True,
|
|
132
|
+
blank=True,
|
|
133
|
+
on_delete=models.SET_NULL,
|
|
95
134
|
)
|
|
96
135
|
|
|
97
136
|
objects = TeacherModelManager()
|
|
@@ -99,7 +138,10 @@ class Teacher(models.Model):
|
|
|
99
138
|
def teaches(self, userprofile):
|
|
100
139
|
if hasattr(userprofile, "student"):
|
|
101
140
|
student = userprofile.student
|
|
102
|
-
return
|
|
141
|
+
return (
|
|
142
|
+
not student.is_independent()
|
|
143
|
+
and student.class_field.teacher == self
|
|
144
|
+
)
|
|
103
145
|
|
|
104
146
|
def has_school(self):
|
|
105
147
|
return self.school is not (None or "")
|
|
@@ -119,11 +161,32 @@ class SchoolTeacherInvitationModelManager(models.Manager):
|
|
|
119
161
|
|
|
120
162
|
class SchoolTeacherInvitation(models.Model):
|
|
121
163
|
token = models.CharField(max_length=32)
|
|
122
|
-
school = models.ForeignKey(
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
164
|
+
school = models.ForeignKey(
|
|
165
|
+
School,
|
|
166
|
+
related_name="teacher_invitations",
|
|
167
|
+
null=True,
|
|
168
|
+
on_delete=models.SET_NULL,
|
|
169
|
+
)
|
|
170
|
+
from_teacher = models.ForeignKey(
|
|
171
|
+
Teacher,
|
|
172
|
+
related_name="school_invitations",
|
|
173
|
+
null=True,
|
|
174
|
+
on_delete=models.SET_NULL,
|
|
175
|
+
)
|
|
176
|
+
invited_teacher_first_name = models.CharField(
|
|
177
|
+
max_length=150
|
|
178
|
+
) # Same as User model
|
|
179
|
+
# TODO: Make not nullable once data has been transferred
|
|
180
|
+
_invited_teacher_first_name = models.BinaryField(null=True, blank=True)
|
|
181
|
+
invited_teacher_last_name = models.CharField(
|
|
182
|
+
max_length=150
|
|
183
|
+
) # Same as User model
|
|
184
|
+
# TODO: Make not nullable once data has been transferred
|
|
185
|
+
_invited_teacher_last_name = models.BinaryField(null=True, blank=True)
|
|
186
|
+
# TODO: Switch to a CharField to be able to hold hashed value
|
|
126
187
|
invited_teacher_email = models.EmailField() # Same as User model
|
|
188
|
+
# TODO: Make not nullable once data has been transferred
|
|
189
|
+
_invited_teacher_email = models.BinaryField(null=True, blank=True)
|
|
127
190
|
invited_teacher_is_admin = models.BooleanField(default=False)
|
|
128
191
|
expiry = models.DateTimeField()
|
|
129
192
|
creation_time = models.DateTimeField(default=timezone.now, null=True)
|
|
@@ -168,7 +231,9 @@ class ClassModelManager(models.Manager):
|
|
|
168
231
|
|
|
169
232
|
class Class(models.Model):
|
|
170
233
|
name = models.CharField(max_length=200)
|
|
171
|
-
teacher = models.ForeignKey(
|
|
234
|
+
teacher = models.ForeignKey(
|
|
235
|
+
Teacher, related_name="class_teacher", on_delete=models.CASCADE
|
|
236
|
+
)
|
|
172
237
|
access_code = models.CharField(max_length=5, null=True)
|
|
173
238
|
classmates_data_viewable = models.BooleanField(default=False)
|
|
174
239
|
always_accept_requests = models.BooleanField(default=False)
|
|
@@ -176,7 +241,11 @@ class Class(models.Model):
|
|
|
176
241
|
creation_time = models.DateTimeField(default=timezone.now, null=True)
|
|
177
242
|
is_active = models.BooleanField(default=True)
|
|
178
243
|
created_by = models.ForeignKey(
|
|
179
|
-
Teacher,
|
|
244
|
+
Teacher,
|
|
245
|
+
null=True,
|
|
246
|
+
blank=True,
|
|
247
|
+
related_name="created_classes",
|
|
248
|
+
on_delete=models.SET_NULL,
|
|
180
249
|
)
|
|
181
250
|
|
|
182
251
|
objects = ClassModelManager()
|
|
@@ -188,7 +257,9 @@ class Class(models.Model):
|
|
|
188
257
|
def active_game(self):
|
|
189
258
|
games = self.game_set.filter(game_class=self, is_archived=False)
|
|
190
259
|
if len(games) >= 1:
|
|
191
|
-
assert
|
|
260
|
+
assert (
|
|
261
|
+
len(games) == 1
|
|
262
|
+
) # there should NOT be more than one active game
|
|
192
263
|
return games[0]
|
|
193
264
|
return None
|
|
194
265
|
|
|
@@ -198,8 +269,13 @@ class Class(models.Model):
|
|
|
198
269
|
|
|
199
270
|
def get_requests_message(self):
|
|
200
271
|
if self.always_accept_requests:
|
|
201
|
-
external_requests_message =
|
|
202
|
-
|
|
272
|
+
external_requests_message = (
|
|
273
|
+
"This class is currently set to always accept requests."
|
|
274
|
+
)
|
|
275
|
+
elif (
|
|
276
|
+
self.accept_requests_until is not None
|
|
277
|
+
and (self.accept_requests_until - timezone.now()) >= timedelta()
|
|
278
|
+
):
|
|
203
279
|
external_requests_message = (
|
|
204
280
|
"This class is accepting external requests until "
|
|
205
281
|
+ self.accept_requests_until.strftime("%d-%m-%Y %H:%M")
|
|
@@ -207,7 +283,9 @@ class Class(models.Model):
|
|
|
207
283
|
+ timezone.get_current_timezone_name()
|
|
208
284
|
)
|
|
209
285
|
else:
|
|
210
|
-
external_requests_message =
|
|
286
|
+
external_requests_message = (
|
|
287
|
+
"This class is not currently accepting external requests."
|
|
288
|
+
)
|
|
211
289
|
|
|
212
290
|
return external_requests_message
|
|
213
291
|
|
|
@@ -229,7 +307,9 @@ class UserSession(models.Model):
|
|
|
229
307
|
login_time = models.DateTimeField(default=timezone.now)
|
|
230
308
|
school = models.ForeignKey(School, null=True, on_delete=models.SET_NULL)
|
|
231
309
|
class_field = models.ForeignKey(Class, null=True, on_delete=models.SET_NULL)
|
|
232
|
-
login_type = models.CharField(
|
|
310
|
+
login_type = models.CharField(
|
|
311
|
+
max_length=100, null=True
|
|
312
|
+
) # for student login
|
|
233
313
|
|
|
234
314
|
def __str__(self):
|
|
235
315
|
return f"{self.user} login: {self.login_time} type: {self.login_type}"
|
|
@@ -243,13 +323,24 @@ class StudentModelManager(models.Manager):
|
|
|
243
323
|
return random_username
|
|
244
324
|
|
|
245
325
|
def schoolFactory(self, klass, name, password, login_id=None):
|
|
246
|
-
user = User.objects.create_user(
|
|
326
|
+
user = User.objects.create_user(
|
|
327
|
+
username=self.get_random_username(),
|
|
328
|
+
password=password,
|
|
329
|
+
first_name=name,
|
|
330
|
+
)
|
|
247
331
|
user_profile = UserProfile.objects.create(user=user)
|
|
248
332
|
|
|
249
|
-
return Student.objects.create(
|
|
333
|
+
return Student.objects.create(
|
|
334
|
+
class_field=klass,
|
|
335
|
+
user=user_profile,
|
|
336
|
+
new_user=user,
|
|
337
|
+
login_id=login_id,
|
|
338
|
+
)
|
|
250
339
|
|
|
251
340
|
def independentStudentFactory(self, name, email, password):
|
|
252
|
-
user = User.objects.create_user(
|
|
341
|
+
user = User.objects.create_user(
|
|
342
|
+
username=email, email=email, password=password, first_name=name
|
|
343
|
+
)
|
|
253
344
|
|
|
254
345
|
user_profile = UserProfile.objects.create(user=user)
|
|
255
346
|
|
|
@@ -257,13 +348,29 @@ class StudentModelManager(models.Manager):
|
|
|
257
348
|
|
|
258
349
|
|
|
259
350
|
class Student(models.Model):
|
|
260
|
-
class_field = models.ForeignKey(
|
|
351
|
+
class_field = models.ForeignKey(
|
|
352
|
+
Class,
|
|
353
|
+
related_name="students",
|
|
354
|
+
null=True,
|
|
355
|
+
blank=True,
|
|
356
|
+
on_delete=models.CASCADE,
|
|
357
|
+
)
|
|
261
358
|
# hashed uuid used for the unique direct login url
|
|
262
359
|
login_id = models.CharField(max_length=64, null=True)
|
|
263
360
|
user = models.OneToOneField(UserProfile, on_delete=models.CASCADE)
|
|
264
|
-
new_user = models.OneToOneField(
|
|
361
|
+
new_user = models.OneToOneField(
|
|
362
|
+
User,
|
|
363
|
+
related_name="new_student",
|
|
364
|
+
null=True,
|
|
365
|
+
blank=True,
|
|
366
|
+
on_delete=models.CASCADE,
|
|
367
|
+
)
|
|
265
368
|
pending_class_request = models.ForeignKey(
|
|
266
|
-
Class,
|
|
369
|
+
Class,
|
|
370
|
+
related_name="class_request",
|
|
371
|
+
null=True,
|
|
372
|
+
blank=True,
|
|
373
|
+
on_delete=models.SET_NULL,
|
|
267
374
|
)
|
|
268
375
|
blocked_time = models.DateTimeField(null=True, blank=True)
|
|
269
376
|
|
|
@@ -309,7 +416,9 @@ class JoinReleaseStudent(models.Model):
|
|
|
309
416
|
JOIN = "join"
|
|
310
417
|
RELEASE = "release"
|
|
311
418
|
|
|
312
|
-
student = models.ForeignKey(
|
|
419
|
+
student = models.ForeignKey(
|
|
420
|
+
Student, related_name="student", on_delete=models.CASCADE
|
|
421
|
+
)
|
|
313
422
|
# either "release" or "join"
|
|
314
423
|
action_type = models.CharField(max_length=64)
|
|
315
424
|
action_time = models.DateTimeField(default=timezone.now)
|
|
@@ -317,8 +426,9 @@ class JoinReleaseStudent(models.Model):
|
|
|
317
426
|
|
|
318
427
|
class DailyActivity(models.Model):
|
|
319
428
|
"""
|
|
320
|
-
A model to record sets of daily activity. Currently used to record the
|
|
321
|
-
student details download clicks, through the CSV and login
|
|
429
|
+
A model to record sets of daily activity. Currently used to record the
|
|
430
|
+
amount of student details download clicks, through the CSV and login
|
|
431
|
+
cards methods, per day.
|
|
322
432
|
"""
|
|
323
433
|
|
|
324
434
|
date = models.DateField(default=timezone.now)
|
|
@@ -342,8 +452,8 @@ class DailyActivity(models.Model):
|
|
|
342
452
|
|
|
343
453
|
class TotalActivity(models.Model):
|
|
344
454
|
"""
|
|
345
|
-
A model to record total activity. Meant to only have one entry which
|
|
346
|
-
An example of this is total ever registrations.
|
|
455
|
+
A model to record total activity. Meant to only have one entry which
|
|
456
|
+
records all total activity. An example of this is total ever registrations.
|
|
347
457
|
"""
|
|
348
458
|
|
|
349
459
|
teacher_registrations = models.PositiveIntegerField(default=0)
|
|
@@ -361,9 +471,11 @@ class TotalActivity(models.Model):
|
|
|
361
471
|
|
|
362
472
|
class DynamicElement(models.Model):
|
|
363
473
|
"""
|
|
364
|
-
This model is meant to allow us to quickly update some elements
|
|
365
|
-
|
|
366
|
-
|
|
474
|
+
This model is meant to allow us to quickly update some elements
|
|
475
|
+
dynamically on the website without having to redeploy everytime. For
|
|
476
|
+
example, if a maintenance banner needs to be added, we check the box in
|
|
477
|
+
the Django admin panel, edit the text and it'll show immediately on the
|
|
478
|
+
website.
|
|
367
479
|
"""
|
|
368
480
|
|
|
369
481
|
name = models.CharField(max_length=64, unique=True, editable=False)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: codeforlife-portal
|
|
3
|
-
Version: 6.44.
|
|
3
|
+
Version: 6.44.10
|
|
4
4
|
Classifier: Programming Language :: Python
|
|
5
5
|
Classifier: Programming Language :: Python :: 3.8
|
|
6
6
|
Classifier: Framework :: Django
|
|
@@ -18,14 +18,14 @@ Requires-Dist: aimmo >=2
|
|
|
18
18
|
Requires-Dist: reportlab ==3.6.13
|
|
19
19
|
Requires-Dist: django-formtools ==2.2
|
|
20
20
|
Requires-Dist: django-otp ==1.0.2
|
|
21
|
-
Requires-Dist: requests ==2.32.
|
|
21
|
+
Requires-Dist: requests ==2.32.2
|
|
22
22
|
Requires-Dist: django-treebeard ==4.3.1
|
|
23
23
|
Requires-Dist: django-sekizai ==2.0.0
|
|
24
24
|
Requires-Dist: django-classy-tags ==2.0.0
|
|
25
25
|
Requires-Dist: libsass ==0.23.0
|
|
26
26
|
Requires-Dist: phonenumbers ==8.12.12
|
|
27
27
|
Requires-Dist: more-itertools ==8.7.0
|
|
28
|
-
Requires-Dist: cfl-common ==6.44.
|
|
28
|
+
Requires-Dist: cfl-common ==6.44.10
|
|
29
29
|
Requires-Dist: django-ratelimit ==3.0.1
|
|
30
30
|
Requires-Dist: django-preventconcurrentlogins ==0.8.2
|
|
31
31
|
Requires-Dist: django-csp ==3.7
|
|
@@ -6,7 +6,7 @@ cfl_common/common/apps.py,sha256=49UXZ3bSkFKvIEOL4zM7y1sAhccQJyRtsoOg5XVd_8Y,129
|
|
|
6
6
|
cfl_common/common/context_processors.py,sha256=X0iuX5qu9kMWa7q8osE9CJ2LgM7pPOYQFGdjm8X3rk0,236
|
|
7
7
|
cfl_common/common/csp_config.py,sha256=sZT6s9zMT5FFIqNODsURT0ifxbDgXpDlki8UxaBq2iE,2940
|
|
8
8
|
cfl_common/common/mail.py,sha256=XPImcfZKcW5mxov04_0jc3xkx_u1SJE6Hhn8K2kPgoA,6354
|
|
9
|
-
cfl_common/common/models.py,sha256=
|
|
9
|
+
cfl_common/common/models.py,sha256=1e_3zHf8h_K812-2cQymRLZAKoA73_5-t4LQGPQlifE,16946
|
|
10
10
|
cfl_common/common/permissions.py,sha256=gC6RQGZI2QDBbglx-xr_V4Hl2C2nf1V2_uPmEuoEcJo,2416
|
|
11
11
|
cfl_common/common/utils.py,sha256=Nn2Npao9Uqad5Js_IdHwF-ow6wrPNpBLW4AO1LxoEBc,1727
|
|
12
12
|
cfl_common/common/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -65,6 +65,7 @@ cfl_common/common/migrations/0048_unique_school_names.py,sha256=pu5xiuesvFNGngD-
|
|
|
65
65
|
cfl_common/common/migrations/0049_anonymise_orphan_users.py,sha256=tw9xMrDMRPDCO8HWjBVlnQF8r1YVCKZnVr2wZ3He6og,847
|
|
66
66
|
cfl_common/common/migrations/0050_anonymise_orphan_schools.py,sha256=_KCkSkoObTpLplX6gXvlV3JXpddn7neyJEa8YKFWeW0,869
|
|
67
67
|
cfl_common/common/migrations/0051_verify_returning_users.py,sha256=WMpoTA24WgimLEVmKXuPqZ3aZdClRhY5vuGtYseeJp0,758
|
|
68
|
+
cfl_common/common/migrations/0052_add_cse_fields.py,sha256=NhUkkcu2EBzJFhewCTccQ63AoANkGq1CXbFWIGJG9jk,2232
|
|
68
69
|
cfl_common/common/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
69
70
|
cfl_common/common/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
70
71
|
cfl_common/common/tests/test_migration_aimmo_characters.py,sha256=pdCCsns90Qz05QqmaBUYK18jKe9aP-symtZjkKG4rag,1079
|
|
@@ -105,7 +106,7 @@ example_project/portal_test_settings.py,sha256=frp_XMpd-z1g3VFCRxB2w7AaFW2ivRVKn
|
|
|
105
106
|
example_project/settings.py,sha256=XRZZvASoIl5a9xe3masTq_CUBleuJq9ByHx8f_e2UFc,5613
|
|
106
107
|
example_project/urls.py,sha256=OVeRQ-TCpzHISBRuzqD0yd3ewF7H5U3c-f2p2alfUD0,430
|
|
107
108
|
example_project/wsgi.py,sha256=U1W6WzZxZaIdYZ5tks7w9fqp5WS5qvn2iThsVcskrWw,829
|
|
108
|
-
portal/__init__.py,sha256=
|
|
109
|
+
portal/__init__.py,sha256=DAOvnlpkYOeLySc4ozoUqbAuehzkrm5oNyavRwvs7H4,24
|
|
109
110
|
portal/admin.py,sha256=on1-zNRnZvf2cwBN6GVRVYRhkaksrCgfzX8XPWtkvz8,6062
|
|
110
111
|
portal/app_settings.py,sha256=DhWLQOwM0zVOXE3O5TNKbMM9K6agfLuCsHOdr1J7xEI,651
|
|
111
112
|
portal/backends.py,sha256=2Dss6_WoQwPuDzJUF1yEaTQTNG4eUrD12ujJQ5cp5Tc,812
|
|
@@ -642,8 +643,8 @@ portal/views/two_factor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
|
|
|
642
643
|
portal/views/two_factor/core.py,sha256=O_wcBeFqdPYSGNGv-pT_vbs5-Dj1Z-Jfkd6f9-E5yZI,760
|
|
643
644
|
portal/views/two_factor/form.py,sha256=lnHNKI-BMlpncTuW3zUzjPaJJNuEra2I_nOam0eOKFY,257
|
|
644
645
|
portal/views/two_factor/profile.py,sha256=tkl_ludo8arMtd5LKNmohM66vpC_YQiP-0nspTSJiJ4,383
|
|
645
|
-
codeforlife_portal-6.44.
|
|
646
|
-
codeforlife_portal-6.44.
|
|
647
|
-
codeforlife_portal-6.44.
|
|
648
|
-
codeforlife_portal-6.44.
|
|
649
|
-
codeforlife_portal-6.44.
|
|
646
|
+
codeforlife_portal-6.44.10.dist-info/LICENSE.md,sha256=9AbRlCDqD2D1tPibimysFv3zg3AIc49-eyv9aEsyq9w,115
|
|
647
|
+
codeforlife_portal-6.44.10.dist-info/METADATA,sha256=Sfk3uOefLkZtSMygjh3kRTpcYdv5Kh-PgalkF64N6rQ,3476
|
|
648
|
+
codeforlife_portal-6.44.10.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
|
|
649
|
+
codeforlife_portal-6.44.10.dist-info/top_level.txt,sha256=8e5pdsuIoTqEAMqpelHBjGjLbffcBtgOoggmd2q7nMw,41
|
|
650
|
+
codeforlife_portal-6.44.10.dist-info/RECORD,,
|
portal/__init__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "6.44.
|
|
1
|
+
__version__ = "6.44.10"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|