cfl-common 5.3.0__py3-none-any.whl → 8.9.15__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.
- cfl_common-8.9.15.dist-info/METADATA +47 -0
- cfl_common-8.9.15.dist-info/RECORD +99 -0
- {cfl_common-5.3.0.dist-info → cfl_common-8.9.15.dist-info}/WHEEL +1 -1
- common/app_settings.py +35 -5
- common/csp_config.py +85 -0
- common/fixtures/aimmo_characters.json +30 -30
- common/fixtures/aimmo_characters2.json +1 -1
- common/fixtures/aimmo_characters3.json +35 -0
- common/helpers/data_migration_loader.py +3 -4
- common/helpers/emails.py +228 -108
- common/helpers/generators.py +1 -1
- common/helpers/organisation.py +10 -0
- common/mail.py +201 -0
- common/migrations/0002_emailverification.py +1 -3
- common/migrations/0005_add_worksheets.py +2 -13
- common/migrations/0007_add_pdf_names_to_first_two_worksheets.py +2 -14
- common/migrations/0008_unlock_worksheet_3.py +1 -6
- common/migrations/0011_student_login_id.py +3 -3
- common/migrations/0012_usersession.py +39 -0
- common/migrations/0013_class_school.py +42 -0
- common/migrations/0014_login_type.py +29 -0
- common/migrations/0015_dailyactivity.py +31 -0
- common/migrations/0016_joinreleasestudent.py +42 -0
- common/migrations/0017_copy_email_to_username.py +18 -0
- common/migrations/0018_update_aimmo_character_image_path.py +15 -0
- common/migrations/0019_aimmocharacter_alt.py +16 -0
- common/migrations/0020_class_is_active_and_null_access_code.py +23 -0
- common/migrations/0021_school_is_active.py +28 -0
- common/migrations/0022_school_cleanup.py +29 -0
- common/migrations/0023_userprofile_aimmo_badges.py +22 -0
- common/migrations/0024_teacher_invited_by.py +25 -0
- common/migrations/0025_schoolteacherinvitation.py +47 -0
- common/migrations/0026_teacher_remove_join_request.py +22 -0
- common/migrations/0027_class_created_by.py +25 -0
- common/migrations/0028_coding_club_downloads.py +23 -0
- common/migrations/0029_dynamicelement.py +22 -0
- common/migrations/0030_add_maintenance_banner.py +25 -0
- common/migrations/0031_improve_admin_panel.py +56 -0
- common/migrations/0032_dailyactivity_level_control_submits.py +18 -0
- common/migrations/0033_password_reset_tracking_fields.py +23 -0
- common/migrations/0034_dailyactivity_daily_school_student_lockout_reset.py +18 -0
- common/migrations/0035_rename_lockout_fields.py +27 -0
- common/migrations/0036_rename_awaiting_email_verification_userprofile_is_verified.py +17 -0
- common/migrations/0037_migrate_email_verification.py +21 -0
- common/migrations/0038_delete_emailverification.py +16 -0
- common/migrations/0039_copy_email_to_username.py +18 -0
- common/migrations/0040_school_county.py +18 -0
- common/migrations/0041_populate_gb_counties.py +27 -0
- common/migrations/0042_totalactivity.py +25 -0
- common/migrations/0043_add_total_activity.py +30 -0
- common/migrations/0044_update_activity_models.py +33 -0
- common/migrations/0045_otp.py +23 -0
- common/migrations/0046_alter_school_country.py +19 -0
- common/migrations/0047_delete_school_postcode.py +16 -0
- common/migrations/0048_unique_school_names.py +42 -0
- common/migrations/0049_anonymise_orphan_users.py +29 -0
- common/migrations/0050_anonymise_orphan_schools.py +30 -0
- common/migrations/0051_verify_returning_users.py +26 -0
- common/migrations/0052_add_cse_fields.py +68 -0
- common/migrations/0053_clean_class_data.py +24 -0
- common/migrations/0054_delete_aimmo_models.py +20 -0
- common/migrations/0055_alter_schoolteacherinvitation_token.py +18 -0
- common/migrations/0056_set_non_school_teachers_as_non_admins.py +25 -0
- common/migrations/0057_teacher_teacher__is_admin.py +19 -0
- common/migrations/0058_userprofile_google_refresh_token_and_more.py +24 -0
- common/models.py +347 -63
- common/permissions.py +20 -8
- common/static/common/img/RR_logo.svg +336 -0
- common/static/common/img/brain.svg +1 -0
- common/templates/common/onetrust_cookies_consent_notice.html +6 -6
- common/tests/test_migration_anonymise_orphan_schools.py +30 -0
- common/tests/test_migration_anonymise_orphan_users.py +30 -0
- common/tests/test_migration_blocked_time.py +3 -11
- common/tests/test_migration_remove_teacher_title.py +1 -3
- common/tests/test_migration_unique_school_names.py +33 -0
- common/tests/test_migration_verify_returning_users.py +59 -0
- common/tests/test_models.py +49 -43
- common/tests/utils/classes.py +1 -3
- common/tests/utils/email.py +11 -49
- common/tests/utils/organisation.py +10 -14
- common/tests/utils/student.py +14 -67
- common/tests/utils/teacher.py +16 -38
- common/tests/utils/user.py +1 -3
- cfl_common-5.3.0.dist-info/METADATA +0 -20
- cfl_common-5.3.0.dist-info/RECORD +0 -48
- common/email_messages.py +0 -218
- common/fixtures/unlock_worksheet3.json +0 -20
- common/fixtures/worksheets.json +0 -98
- common/fixtures/worksheets2.json +0 -110
- common/tests/test_migration_aimmo_characters.py +0 -31
- common/tests/test_migration_worksheets.py +0 -49
- {cfl_common-5.3.0.dist-info → cfl_common-8.9.15.dist-info}/top_level.txt +0 -0
|
@@ -1,19 +1,8 @@
|
|
|
1
|
-
from common.helpers.data_migration_loader import load_data_from_file
|
|
2
1
|
from django.db import migrations
|
|
3
2
|
|
|
4
3
|
|
|
5
4
|
class Migration(migrations.Migration):
|
|
6
5
|
|
|
7
|
-
dependencies = [
|
|
8
|
-
("common", "0004_add_aimmocharacters"),
|
|
9
|
-
("aimmo", "0020_add_info_to_worksheet"),
|
|
10
|
-
]
|
|
6
|
+
dependencies = [("common", "0004_add_aimmocharacters")]
|
|
11
7
|
|
|
12
|
-
|
|
13
|
-
pass
|
|
14
|
-
|
|
15
|
-
operations = [
|
|
16
|
-
migrations.RunPython(
|
|
17
|
-
load_data_from_file("worksheets.json"), reverse_code=dummy_reverse_code
|
|
18
|
-
)
|
|
19
|
-
]
|
|
8
|
+
operations = [migrations.RunPython(migrations.RunPython.noop, reverse_code=migrations.RunPython.noop)]
|
|
@@ -1,20 +1,8 @@
|
|
|
1
|
-
from common.helpers.data_migration_loader import load_data_from_file
|
|
2
1
|
from django.db import migrations
|
|
3
2
|
|
|
4
3
|
|
|
5
4
|
class Migration(migrations.Migration):
|
|
6
5
|
|
|
7
|
-
dependencies = [
|
|
8
|
-
("common", "0006_update_aimmo_character_image_path"),
|
|
9
|
-
("aimmo", "0021_add_pdf_names_to_worksheet"),
|
|
10
|
-
]
|
|
6
|
+
dependencies = [("common", "0006_update_aimmo_character_image_path")]
|
|
11
7
|
|
|
12
|
-
|
|
13
|
-
pass
|
|
14
|
-
|
|
15
|
-
operations = [
|
|
16
|
-
migrations.RunPython(
|
|
17
|
-
load_data_from_file("worksheets2.json"),
|
|
18
|
-
reverse_code=dummy_reverse_code,
|
|
19
|
-
)
|
|
20
|
-
]
|
|
8
|
+
operations = [migrations.RunPython(migrations.RunPython.noop, reverse_code=migrations.RunPython.noop)]
|
|
@@ -8,9 +8,4 @@ class Migration(migrations.Migration):
|
|
|
8
8
|
("common", "0007_add_pdf_names_to_first_two_worksheets"),
|
|
9
9
|
]
|
|
10
10
|
|
|
11
|
-
operations = [
|
|
12
|
-
migrations.RunPython(
|
|
13
|
-
load_data_from_file("unlock_worksheet3.json"),
|
|
14
|
-
reverse_code=migrations.RunPython.noop,
|
|
15
|
-
)
|
|
16
|
-
]
|
|
11
|
+
operations = [migrations.RunPython(migrations.RunPython.noop, reverse_code=migrations.RunPython.noop)]
|
|
@@ -6,13 +6,13 @@ from django.db import migrations, models
|
|
|
6
6
|
class Migration(migrations.Migration):
|
|
7
7
|
|
|
8
8
|
dependencies = [
|
|
9
|
-
(
|
|
9
|
+
("common", "0010_remove_teacher_title"),
|
|
10
10
|
]
|
|
11
11
|
|
|
12
12
|
operations = [
|
|
13
13
|
migrations.AddField(
|
|
14
|
-
model_name=
|
|
15
|
-
name=
|
|
14
|
+
model_name="student",
|
|
15
|
+
name="login_id",
|
|
16
16
|
field=models.CharField(max_length=64, null=True),
|
|
17
17
|
),
|
|
18
18
|
]
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Generated by Django 2.2.24 on 2021-10-12 16:22
|
|
2
|
+
|
|
3
|
+
from django.conf import settings
|
|
4
|
+
from django.db import migrations, models
|
|
5
|
+
import django.db.models.deletion
|
|
6
|
+
import django.utils.timezone
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class Migration(migrations.Migration):
|
|
10
|
+
|
|
11
|
+
dependencies = [
|
|
12
|
+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
|
13
|
+
("common", "0011_student_login_id"),
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
operations = [
|
|
17
|
+
migrations.CreateModel(
|
|
18
|
+
name="UserSession",
|
|
19
|
+
fields=[
|
|
20
|
+
(
|
|
21
|
+
"id",
|
|
22
|
+
models.AutoField(
|
|
23
|
+
auto_created=True,
|
|
24
|
+
primary_key=True,
|
|
25
|
+
serialize=False,
|
|
26
|
+
verbose_name="ID",
|
|
27
|
+
),
|
|
28
|
+
),
|
|
29
|
+
("login_time", models.DateTimeField(default=django.utils.timezone.now)),
|
|
30
|
+
(
|
|
31
|
+
"user",
|
|
32
|
+
models.ForeignKey(
|
|
33
|
+
on_delete=django.db.models.deletion.CASCADE,
|
|
34
|
+
to=settings.AUTH_USER_MODEL,
|
|
35
|
+
),
|
|
36
|
+
),
|
|
37
|
+
],
|
|
38
|
+
),
|
|
39
|
+
]
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Generated by Django 2.2.24 on 2021-10-15 15:10
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
import django.db.models.deletion
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Migration(migrations.Migration):
|
|
8
|
+
|
|
9
|
+
dependencies = [
|
|
10
|
+
("common", "0012_usersession"),
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
operations = [
|
|
14
|
+
migrations.AddField(
|
|
15
|
+
model_name="class",
|
|
16
|
+
name="creation_time",
|
|
17
|
+
field=models.DateTimeField(null=True),
|
|
18
|
+
),
|
|
19
|
+
migrations.AddField(
|
|
20
|
+
model_name="school",
|
|
21
|
+
name="creation_time",
|
|
22
|
+
field=models.DateTimeField(null=True),
|
|
23
|
+
),
|
|
24
|
+
migrations.AddField(
|
|
25
|
+
model_name="usersession",
|
|
26
|
+
name="class_field",
|
|
27
|
+
field=models.ForeignKey(
|
|
28
|
+
null=True,
|
|
29
|
+
on_delete=django.db.models.deletion.SET_NULL,
|
|
30
|
+
to="common.Class",
|
|
31
|
+
),
|
|
32
|
+
),
|
|
33
|
+
migrations.AddField(
|
|
34
|
+
model_name="usersession",
|
|
35
|
+
name="school",
|
|
36
|
+
field=models.ForeignKey(
|
|
37
|
+
null=True,
|
|
38
|
+
on_delete=django.db.models.deletion.SET_NULL,
|
|
39
|
+
to="common.School",
|
|
40
|
+
),
|
|
41
|
+
),
|
|
42
|
+
]
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Generated by Django 2.2.24 on 2021-11-09 15:39
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
import django.utils.timezone
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Migration(migrations.Migration):
|
|
8
|
+
|
|
9
|
+
dependencies = [
|
|
10
|
+
("common", "0013_class_school"),
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
operations = [
|
|
14
|
+
migrations.AddField(
|
|
15
|
+
model_name="usersession",
|
|
16
|
+
name="login_type",
|
|
17
|
+
field=models.CharField(max_length=100, null=True),
|
|
18
|
+
),
|
|
19
|
+
migrations.AlterField(
|
|
20
|
+
model_name="class",
|
|
21
|
+
name="creation_time",
|
|
22
|
+
field=models.DateTimeField(default=django.utils.timezone.now, null=True),
|
|
23
|
+
),
|
|
24
|
+
migrations.AlterField(
|
|
25
|
+
model_name="school",
|
|
26
|
+
name="creation_time",
|
|
27
|
+
field=models.DateTimeField(default=django.utils.timezone.now, null=True),
|
|
28
|
+
),
|
|
29
|
+
]
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Generated by Django 2.2.24 on 2021-12-06 15:03
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
import django.utils.timezone
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Migration(migrations.Migration):
|
|
8
|
+
|
|
9
|
+
dependencies = [
|
|
10
|
+
("common", "0014_login_type"),
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
operations = [
|
|
14
|
+
migrations.CreateModel(
|
|
15
|
+
name="DailyActivity",
|
|
16
|
+
fields=[
|
|
17
|
+
(
|
|
18
|
+
"id",
|
|
19
|
+
models.AutoField(
|
|
20
|
+
auto_created=True,
|
|
21
|
+
primary_key=True,
|
|
22
|
+
serialize=False,
|
|
23
|
+
verbose_name="ID",
|
|
24
|
+
),
|
|
25
|
+
),
|
|
26
|
+
("date", models.DateField(default=django.utils.timezone.now)),
|
|
27
|
+
("csv_click_count", models.PositiveIntegerField(default=0)),
|
|
28
|
+
("login_cards_click_count", models.PositiveIntegerField(default=0)),
|
|
29
|
+
],
|
|
30
|
+
),
|
|
31
|
+
]
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Generated by Django 2.2.26 on 2022-02-10 17:13
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
import django.db.models.deletion
|
|
5
|
+
import django.utils.timezone
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class Migration(migrations.Migration):
|
|
9
|
+
|
|
10
|
+
dependencies = [
|
|
11
|
+
("common", "0015_dailyactivity"),
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
operations = [
|
|
15
|
+
migrations.CreateModel(
|
|
16
|
+
name="JoinReleaseStudent",
|
|
17
|
+
fields=[
|
|
18
|
+
(
|
|
19
|
+
"id",
|
|
20
|
+
models.AutoField(
|
|
21
|
+
auto_created=True,
|
|
22
|
+
primary_key=True,
|
|
23
|
+
serialize=False,
|
|
24
|
+
verbose_name="ID",
|
|
25
|
+
),
|
|
26
|
+
),
|
|
27
|
+
("action_type", models.CharField(max_length=64)),
|
|
28
|
+
(
|
|
29
|
+
"action_time",
|
|
30
|
+
models.DateTimeField(default=django.utils.timezone.now),
|
|
31
|
+
),
|
|
32
|
+
(
|
|
33
|
+
"student",
|
|
34
|
+
models.ForeignKey(
|
|
35
|
+
on_delete=django.db.models.deletion.CASCADE,
|
|
36
|
+
related_name="student",
|
|
37
|
+
to="common.Student",
|
|
38
|
+
),
|
|
39
|
+
),
|
|
40
|
+
],
|
|
41
|
+
),
|
|
42
|
+
]
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from django.db import migrations
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def copy_email_to_username(apps, schema):
|
|
5
|
+
Student = apps.get_model("common", "Student")
|
|
6
|
+
independent_students = Student.objects.filter(class_field__isnull=True, new_user__is_active=True)
|
|
7
|
+
for student in independent_students:
|
|
8
|
+
student.new_user.username = student.new_user.email
|
|
9
|
+
student.new_user.save()
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class Migration(migrations.Migration):
|
|
13
|
+
|
|
14
|
+
dependencies = [
|
|
15
|
+
("common", "0016_joinreleasestudent"),
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
operations = [migrations.RunPython(code=copy_email_to_username, reverse_code=migrations.RunPython.noop)]
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from common.helpers.data_migration_loader import load_data_from_file
|
|
2
|
+
from django.db import migrations, models
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Migration(migrations.Migration):
|
|
6
|
+
|
|
7
|
+
dependencies = [("common", "0017_copy_email_to_username")]
|
|
8
|
+
|
|
9
|
+
operations = [
|
|
10
|
+
migrations.AddField(
|
|
11
|
+
"AimmoCharacter",
|
|
12
|
+
"alt",
|
|
13
|
+
models.CharField(max_length=255, null=True),
|
|
14
|
+
),
|
|
15
|
+
]
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from common.helpers.data_migration_loader import load_data_from_file
|
|
2
|
+
from django.db import migrations, models
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Migration(migrations.Migration):
|
|
6
|
+
|
|
7
|
+
dependencies = [
|
|
8
|
+
("common", "0018_update_aimmo_character_image_path"),
|
|
9
|
+
]
|
|
10
|
+
|
|
11
|
+
operations = [
|
|
12
|
+
migrations.RunPython(
|
|
13
|
+
load_data_from_file("aimmo_characters3.json"),
|
|
14
|
+
reverse_code=migrations.RunPython.noop,
|
|
15
|
+
)
|
|
16
|
+
]
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Generated by Django 3.2.12 on 2022-04-07 16:46
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
|
|
8
|
+
dependencies = [
|
|
9
|
+
("common", "0019_aimmocharacter_alt"),
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
operations = [
|
|
13
|
+
migrations.AddField(
|
|
14
|
+
model_name="class",
|
|
15
|
+
name="is_active",
|
|
16
|
+
field=models.BooleanField(default=True),
|
|
17
|
+
),
|
|
18
|
+
migrations.AlterField(
|
|
19
|
+
model_name="class",
|
|
20
|
+
name="access_code",
|
|
21
|
+
field=models.CharField(max_length=5, null=True),
|
|
22
|
+
),
|
|
23
|
+
]
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Generated by Django 3.2.13 on 2022-04-29 17:00
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
|
|
8
|
+
dependencies = [
|
|
9
|
+
("common", "0020_class_is_active_and_null_access_code"),
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
operations = [
|
|
13
|
+
migrations.AddField(
|
|
14
|
+
model_name="school",
|
|
15
|
+
name="is_active",
|
|
16
|
+
field=models.BooleanField(default=True),
|
|
17
|
+
),
|
|
18
|
+
migrations.AlterField(
|
|
19
|
+
model_name="school",
|
|
20
|
+
name="postcode",
|
|
21
|
+
field=models.CharField(max_length=10, null=True),
|
|
22
|
+
),
|
|
23
|
+
migrations.AlterField(
|
|
24
|
+
model_name="school",
|
|
25
|
+
name="town",
|
|
26
|
+
field=models.CharField(max_length=200, null=True),
|
|
27
|
+
),
|
|
28
|
+
]
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Generated by Django 3.2.13 on 2022-05-03 11:01
|
|
2
|
+
|
|
3
|
+
from django.db import migrations
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
|
|
8
|
+
dependencies = [
|
|
9
|
+
("common", "0021_school_is_active"),
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
operations = [
|
|
13
|
+
migrations.RemoveField(
|
|
14
|
+
model_name="school",
|
|
15
|
+
name="latitude",
|
|
16
|
+
),
|
|
17
|
+
migrations.RemoveField(
|
|
18
|
+
model_name="school",
|
|
19
|
+
name="longitude",
|
|
20
|
+
),
|
|
21
|
+
migrations.RemoveField(
|
|
22
|
+
model_name="school",
|
|
23
|
+
name="town",
|
|
24
|
+
),
|
|
25
|
+
migrations.RemoveField(
|
|
26
|
+
model_name="userprofile",
|
|
27
|
+
name="can_view_aggregated_data",
|
|
28
|
+
),
|
|
29
|
+
]
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Generated by Django 3.2.13 on 2022-05-17 17:05
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
|
|
8
|
+
dependencies = [
|
|
9
|
+
("common", "0022_school_cleanup"),
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
operations = [
|
|
13
|
+
migrations.AlterModelOptions(
|
|
14
|
+
name="school",
|
|
15
|
+
options={},
|
|
16
|
+
),
|
|
17
|
+
migrations.AddField(
|
|
18
|
+
model_name="userprofile",
|
|
19
|
+
name="aimmo_badges",
|
|
20
|
+
field=models.CharField(blank=True, max_length=200, null=True),
|
|
21
|
+
),
|
|
22
|
+
]
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Generated by Django 3.2.13 on 2022-06-07 17:20
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
import django.db.models.deletion
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Migration(migrations.Migration):
|
|
8
|
+
|
|
9
|
+
dependencies = [
|
|
10
|
+
("common", "0023_userprofile_aimmo_badges"),
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
operations = [
|
|
14
|
+
migrations.AddField(
|
|
15
|
+
model_name="teacher",
|
|
16
|
+
name="invited_by",
|
|
17
|
+
field=models.ForeignKey(
|
|
18
|
+
blank=True,
|
|
19
|
+
null=True,
|
|
20
|
+
on_delete=django.db.models.deletion.SET_NULL,
|
|
21
|
+
related_name="invited_teachers",
|
|
22
|
+
to="common.teacher",
|
|
23
|
+
),
|
|
24
|
+
),
|
|
25
|
+
]
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Generated by Django 3.2.13 on 2022-06-15 10:22
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
import django.db.models.deletion
|
|
5
|
+
import django.utils.timezone
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class Migration(migrations.Migration):
|
|
9
|
+
|
|
10
|
+
dependencies = [
|
|
11
|
+
("common", "0024_teacher_invited_by"),
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
operations = [
|
|
15
|
+
migrations.CreateModel(
|
|
16
|
+
name="SchoolTeacherInvitation",
|
|
17
|
+
fields=[
|
|
18
|
+
("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
|
|
19
|
+
("token", models.CharField(max_length=32)),
|
|
20
|
+
("invited_teacher_first_name", models.CharField(max_length=150)),
|
|
21
|
+
("invited_teacher_last_name", models.CharField(max_length=150)),
|
|
22
|
+
("invited_teacher_email", models.EmailField(max_length=254)),
|
|
23
|
+
("invited_teacher_is_admin", models.BooleanField(default=False)),
|
|
24
|
+
("expiry", models.DateTimeField()),
|
|
25
|
+
("creation_time", models.DateTimeField(default=django.utils.timezone.now, null=True)),
|
|
26
|
+
("is_active", models.BooleanField(default=True)),
|
|
27
|
+
(
|
|
28
|
+
"from_teacher",
|
|
29
|
+
models.ForeignKey(
|
|
30
|
+
null=True,
|
|
31
|
+
on_delete=django.db.models.deletion.SET_NULL,
|
|
32
|
+
related_name="school_invitations",
|
|
33
|
+
to="common.teacher",
|
|
34
|
+
),
|
|
35
|
+
),
|
|
36
|
+
(
|
|
37
|
+
"school",
|
|
38
|
+
models.ForeignKey(
|
|
39
|
+
null=True,
|
|
40
|
+
on_delete=django.db.models.deletion.SET_NULL,
|
|
41
|
+
related_name="teacher_invitations",
|
|
42
|
+
to="common.school",
|
|
43
|
+
),
|
|
44
|
+
),
|
|
45
|
+
],
|
|
46
|
+
),
|
|
47
|
+
]
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Generated by Django 3.2.13 on 2022-06-22 15:33
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
|
|
8
|
+
dependencies = [
|
|
9
|
+
("common", "0025_schoolteacherinvitation"),
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
operations = [
|
|
13
|
+
migrations.RemoveField(
|
|
14
|
+
model_name="teacher",
|
|
15
|
+
name="pending_join_request",
|
|
16
|
+
),
|
|
17
|
+
migrations.AlterField(
|
|
18
|
+
model_name="teacher",
|
|
19
|
+
name="blocked_time",
|
|
20
|
+
field=models.DateTimeField(blank=True, null=True),
|
|
21
|
+
),
|
|
22
|
+
]
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Generated by Django 3.2.13 on 2022-07-13 16:04
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
import django.db.models.deletion
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Migration(migrations.Migration):
|
|
8
|
+
|
|
9
|
+
dependencies = [
|
|
10
|
+
("common", "0026_teacher_remove_join_request"),
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
operations = [
|
|
14
|
+
migrations.AddField(
|
|
15
|
+
model_name="class",
|
|
16
|
+
name="created_by",
|
|
17
|
+
field=models.ForeignKey(
|
|
18
|
+
blank=True,
|
|
19
|
+
null=True,
|
|
20
|
+
on_delete=django.db.models.deletion.SET_NULL,
|
|
21
|
+
related_name="created_classes",
|
|
22
|
+
to="common.teacher",
|
|
23
|
+
),
|
|
24
|
+
),
|
|
25
|
+
]
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Generated by Django 3.2.15 on 2022-09-08 15:27
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
|
|
8
|
+
dependencies = [
|
|
9
|
+
("common", "0027_class_created_by"),
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
operations = [
|
|
13
|
+
migrations.AddField(
|
|
14
|
+
model_name="dailyactivity",
|
|
15
|
+
name="primary_coding_club_downloads",
|
|
16
|
+
field=models.PositiveIntegerField(default=0),
|
|
17
|
+
),
|
|
18
|
+
migrations.AddField(
|
|
19
|
+
model_name="dailyactivity",
|
|
20
|
+
name="python_coding_club_downloads",
|
|
21
|
+
field=models.PositiveIntegerField(default=0),
|
|
22
|
+
),
|
|
23
|
+
]
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Generated by Django 3.2.15 on 2022-10-12 12:20
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
|
|
8
|
+
dependencies = [
|
|
9
|
+
("common", "0028_coding_club_downloads"),
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
operations = [
|
|
13
|
+
migrations.CreateModel(
|
|
14
|
+
name="DynamicElement",
|
|
15
|
+
fields=[
|
|
16
|
+
("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
|
|
17
|
+
("name", models.CharField(max_length=64, unique=True, editable=False)),
|
|
18
|
+
("active", models.BooleanField(default=False)),
|
|
19
|
+
("text", models.TextField(blank=True, null=True)),
|
|
20
|
+
],
|
|
21
|
+
),
|
|
22
|
+
]
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Generated by Django 2.0 on 2020-10-28 17:36
|
|
2
|
+
|
|
3
|
+
from django.db import migrations
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def add_maintenance_banner(apps, schema_editor):
|
|
7
|
+
"""
|
|
8
|
+
This creates the maintenance banner dynamic element which allows us to edit and turn on and off the maintenance
|
|
9
|
+
banner dynamically from the admin panel.
|
|
10
|
+
"""
|
|
11
|
+
DynamicElement = apps.get_model("common", "DynamicElement")
|
|
12
|
+
DynamicElement.objects.create(name="Maintenance banner")
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def remove_maintenance_banner(apps, schema_editor):
|
|
16
|
+
DynamicElement = apps.get_model("common", "DynamicElement")
|
|
17
|
+
maintenance_banner = DynamicElement.objects.get(name="Maintenance banner")
|
|
18
|
+
maintenance_banner.delete()
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class Migration(migrations.Migration):
|
|
22
|
+
|
|
23
|
+
dependencies = [("common", "0029_dynamicelement")]
|
|
24
|
+
|
|
25
|
+
operations = [migrations.RunPython(add_maintenance_banner, remove_maintenance_banner)]
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Generated by Django 3.2.16 on 2022-11-22 16:42
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
import django.db.models.deletion
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Migration(migrations.Migration):
|
|
8
|
+
|
|
9
|
+
dependencies = [
|
|
10
|
+
("common", "0030_add_maintenance_banner"),
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
operations = [
|
|
14
|
+
migrations.AlterModelOptions(
|
|
15
|
+
name="dailyactivity",
|
|
16
|
+
options={"verbose_name_plural": "Daily activities"},
|
|
17
|
+
),
|
|
18
|
+
migrations.AlterField(
|
|
19
|
+
model_name="student",
|
|
20
|
+
name="blocked_time",
|
|
21
|
+
field=models.DateTimeField(blank=True, null=True),
|
|
22
|
+
),
|
|
23
|
+
migrations.AlterField(
|
|
24
|
+
model_name="student",
|
|
25
|
+
name="class_field",
|
|
26
|
+
field=models.ForeignKey(
|
|
27
|
+
blank=True,
|
|
28
|
+
null=True,
|
|
29
|
+
on_delete=django.db.models.deletion.CASCADE,
|
|
30
|
+
related_name="students",
|
|
31
|
+
to="common.class",
|
|
32
|
+
),
|
|
33
|
+
),
|
|
34
|
+
migrations.AlterField(
|
|
35
|
+
model_name="student",
|
|
36
|
+
name="pending_class_request",
|
|
37
|
+
field=models.ForeignKey(
|
|
38
|
+
blank=True,
|
|
39
|
+
null=True,
|
|
40
|
+
on_delete=django.db.models.deletion.SET_NULL,
|
|
41
|
+
related_name="class_request",
|
|
42
|
+
to="common.class",
|
|
43
|
+
),
|
|
44
|
+
),
|
|
45
|
+
migrations.AlterField(
|
|
46
|
+
model_name="teacher",
|
|
47
|
+
name="school",
|
|
48
|
+
field=models.ForeignKey(
|
|
49
|
+
blank=True,
|
|
50
|
+
null=True,
|
|
51
|
+
on_delete=django.db.models.deletion.SET_NULL,
|
|
52
|
+
related_name="teacher_school",
|
|
53
|
+
to="common.school",
|
|
54
|
+
),
|
|
55
|
+
),
|
|
56
|
+
]
|