rapid-router 7.6.8__py2.py3-none-any.whl → 7.6.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.
- game/__init__.py +1 -1
- game/messages.py +12 -1
- game/tests/test_scoreboard.py +31 -36
- game/views/scoreboard.py +9 -1
- {rapid_router-7.6.8.dist-info → rapid_router-7.6.10.dist-info}/METADATA +23 -23
- {rapid_router-7.6.8.dist-info → rapid_router-7.6.10.dist-info}/RECORD +9 -9
- {rapid_router-7.6.8.dist-info → rapid_router-7.6.10.dist-info}/WHEEL +0 -0
- {rapid_router-7.6.8.dist-info → rapid_router-7.6.10.dist-info}/licenses/LICENSE.md +0 -0
- {rapid_router-7.6.8.dist-info → rapid_router-7.6.10.dist-info}/top_level.txt +0 -0
game/__init__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "7.6.
|
|
1
|
+
__version__ = "7.6.10"
|
game/messages.py
CHANGED
|
@@ -47,11 +47,22 @@ def no_permission_title():
|
|
|
47
47
|
|
|
48
48
|
def no_permission_scoreboard():
|
|
49
49
|
return (
|
|
50
|
-
"
|
|
50
|
+
"The scoreboard is only visible to school students and teachers. Log in if you "
|
|
51
51
|
"think you should be able to see it."
|
|
52
52
|
)
|
|
53
53
|
|
|
54
54
|
|
|
55
|
+
def no_classes_title():
|
|
56
|
+
return "No classes"
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def no_classes_scoreboard():
|
|
60
|
+
return (
|
|
61
|
+
"The scoreboard can only be used by teachers who have classes assigned to them. "
|
|
62
|
+
"It seems you don't have any classes, please create one so you can use this feature."
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
|
|
55
66
|
""" Strings used on the level moderation page. """
|
|
56
67
|
|
|
57
68
|
|
game/tests/test_scoreboard.py
CHANGED
|
@@ -5,7 +5,10 @@ from datetime import datetime, timedelta
|
|
|
5
5
|
|
|
6
6
|
from common.models import Class, Teacher, Student
|
|
7
7
|
from common.tests.utils.classes import create_class_directly
|
|
8
|
-
from common.tests.utils.organisation import
|
|
8
|
+
from common.tests.utils.organisation import (
|
|
9
|
+
create_organisation_directly,
|
|
10
|
+
join_teacher_to_organisation,
|
|
11
|
+
)
|
|
9
12
|
from common.tests.utils.student import (
|
|
10
13
|
create_school_student_directly,
|
|
11
14
|
create_independent_student_directly,
|
|
@@ -39,8 +42,7 @@ class ScoreboardTestCase(TestCase):
|
|
|
39
42
|
episode1 = Episode.objects.get(id=1)
|
|
40
43
|
episode2 = Episode.objects.get(id=2)
|
|
41
44
|
level_ids = [
|
|
42
|
-
f"{x}"
|
|
43
|
-
for x in range(1, len(episode1.levels) + len(episode2.levels) + 1)
|
|
45
|
+
f"{x}" for x in range(1, len(episode1.levels) + len(episode2.levels) + 1)
|
|
44
46
|
]
|
|
45
47
|
level1 = Level.objects.get(name="1")
|
|
46
48
|
level13 = Level.objects.get(name="13")
|
|
@@ -119,9 +121,7 @@ class ScoreboardTestCase(TestCase):
|
|
|
119
121
|
|
|
120
122
|
# Check data for custom levels matches
|
|
121
123
|
assert shared_headers == SharedHeaders
|
|
122
|
-
assert shared_level_headers == [
|
|
123
|
-
f"{shared_level.name} ({shared_level.owner})"
|
|
124
|
-
]
|
|
124
|
+
assert shared_level_headers == [f"{shared_level.name} ({shared_level.owner})"]
|
|
125
125
|
|
|
126
126
|
assert len(shared_student_data) == 1
|
|
127
127
|
|
|
@@ -234,9 +234,7 @@ class ScoreboardTestCase(TestCase):
|
|
|
234
234
|
)
|
|
235
235
|
|
|
236
236
|
c = Client()
|
|
237
|
-
c.login(
|
|
238
|
-
username=admin_teacher.user.user.email, password="secretpa$sword2"
|
|
239
|
-
)
|
|
237
|
+
c.login(username=admin_teacher.user.user.email, password="secretpa$sword2")
|
|
240
238
|
|
|
241
239
|
url = reverse("scoreboard")
|
|
242
240
|
response = c.get(url)
|
|
@@ -306,8 +304,22 @@ class ScoreboardTestCase(TestCase):
|
|
|
306
304
|
url = reverse("scoreboard")
|
|
307
305
|
response = c.get(url)
|
|
308
306
|
|
|
307
|
+
assert "The scoreboard is only visible to school students and teachers" in str(
|
|
308
|
+
response.content
|
|
309
|
+
)
|
|
310
|
+
|
|
311
|
+
def test_teacher_without_classes_cannot_see_scoreboard(self):
|
|
312
|
+
email, password = signup_teacher_directly()
|
|
313
|
+
create_organisation_directly(email)
|
|
314
|
+
|
|
315
|
+
c = Client()
|
|
316
|
+
c.login(username=email, password=password)
|
|
317
|
+
|
|
318
|
+
url = reverse("scoreboard")
|
|
319
|
+
response = c.get(url)
|
|
320
|
+
|
|
309
321
|
assert (
|
|
310
|
-
"
|
|
322
|
+
"The scoreboard can only be used by teachers who have classes assigned to them."
|
|
311
323
|
in str(response.content)
|
|
312
324
|
)
|
|
313
325
|
|
|
@@ -332,18 +344,11 @@ class ScoreboardCsvTestCase(TestCase):
|
|
|
332
344
|
shared_levels = [shared_level1, shared_level2]
|
|
333
345
|
|
|
334
346
|
shared_levels_headers = list(
|
|
335
|
-
[
|
|
336
|
-
shared_level_to_name(level, level.owner)
|
|
337
|
-
for level in shared_levels
|
|
338
|
-
]
|
|
347
|
+
[shared_level_to_name(level, level.owner) for level in shared_levels]
|
|
339
348
|
)
|
|
340
349
|
|
|
341
|
-
shared_level_rows[0] = self.shared_student_row(
|
|
342
|
-
|
|
343
|
-
)
|
|
344
|
-
shared_level_rows[1] = self.shared_student_row(
|
|
345
|
-
students[1], shared_levels
|
|
346
|
-
)
|
|
350
|
+
shared_level_rows[0] = self.shared_student_row(students[0], shared_levels)
|
|
351
|
+
shared_level_rows[1] = self.shared_student_row(students[1], shared_levels)
|
|
347
352
|
|
|
348
353
|
# Create students' improvement table data
|
|
349
354
|
improvement_data = []
|
|
@@ -369,13 +374,10 @@ class ScoreboardCsvTestCase(TestCase):
|
|
|
369
374
|
) = self.actual_data(response.content.decode("utf-8"), len(students))
|
|
370
375
|
|
|
371
376
|
# Check the headers and the number or rows match expectations
|
|
372
|
-
assert actual_scoreboard_header == self.expected_scoreboard_header(
|
|
373
|
-
levels
|
|
374
|
-
)
|
|
377
|
+
assert actual_scoreboard_header == self.expected_scoreboard_header(levels)
|
|
375
378
|
assert len(actual_scoreboard_rows) == len(student_rows)
|
|
376
|
-
assert (
|
|
377
|
-
|
|
378
|
-
== self.expected_shared_levels_header(shared_levels)
|
|
379
|
+
assert actual_shared_levels_header == self.expected_shared_levels_header(
|
|
380
|
+
shared_levels
|
|
379
381
|
)
|
|
380
382
|
assert len(actual_shared_levels_rows) == len(shared_level_rows)
|
|
381
383
|
|
|
@@ -491,18 +493,13 @@ class ScoreboardCsvTestCase(TestCase):
|
|
|
491
493
|
|
|
492
494
|
def expected_scoreboard_header(self, levels):
|
|
493
495
|
level_strings = list(map(str, levels))
|
|
494
|
-
all_header_strings =
|
|
495
|
-
CSVHeaders + level_strings + ["Areas for improvement"]
|
|
496
|
-
)
|
|
496
|
+
all_header_strings = CSVHeaders + level_strings + ["Areas for improvement"]
|
|
497
497
|
joined = ",".join(all_header_strings)
|
|
498
498
|
return joined
|
|
499
499
|
|
|
500
500
|
def expected_shared_levels_header(self, shared_levels):
|
|
501
501
|
level_strings = list(
|
|
502
|
-
[
|
|
503
|
-
shared_level_to_name(level, level.owner)
|
|
504
|
-
for level in shared_levels
|
|
505
|
-
]
|
|
502
|
+
[shared_level_to_name(level, level.owner) for level in shared_levels]
|
|
506
503
|
)
|
|
507
504
|
all_header_strings = CSVSharedHeaders + level_strings
|
|
508
505
|
joined = ",".join(all_header_strings)
|
|
@@ -524,9 +521,7 @@ class ScoreboardCsvTestCase(TestCase):
|
|
|
524
521
|
scoreboard_header = split[scoreboard_header_row]
|
|
525
522
|
scoreboard_rows = split[scoreboard_rows_start:scoreboard_rows_end]
|
|
526
523
|
shared_levels_header = split[shared_levels_header_row]
|
|
527
|
-
shared_levels_rows = split[
|
|
528
|
-
shared_levels_rows_start:shared_levels_rows_end
|
|
529
|
-
]
|
|
524
|
+
shared_levels_rows = split[shared_levels_rows_start:shared_levels_rows_end]
|
|
530
525
|
|
|
531
526
|
return (
|
|
532
527
|
scoreboard_header,
|
game/views/scoreboard.py
CHANGED
|
@@ -313,7 +313,7 @@ def scoreboard(request, language):
|
|
|
313
313
|
episode_ids = set(all_episode_ids)
|
|
314
314
|
|
|
315
315
|
if is_teacher_with_no_classes_assigned(user, users_classes):
|
|
316
|
-
return
|
|
316
|
+
return render_no_classes_error(request)
|
|
317
317
|
|
|
318
318
|
if not is_valid_request(user, class_ids):
|
|
319
319
|
raise Http404
|
|
@@ -430,6 +430,14 @@ def render_no_permission_error(request):
|
|
|
430
430
|
)
|
|
431
431
|
|
|
432
432
|
|
|
433
|
+
def render_no_classes_error(request):
|
|
434
|
+
return renderError(
|
|
435
|
+
request,
|
|
436
|
+
messages.no_classes_title(),
|
|
437
|
+
messages.no_classes_scoreboard(),
|
|
438
|
+
)
|
|
439
|
+
|
|
440
|
+
|
|
433
441
|
def is_teacher_with_no_classes_assigned(user, users_classes):
|
|
434
442
|
return user.is_teacher() and len(users_classes) == 0
|
|
435
443
|
|
|
@@ -1,39 +1,39 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rapid-router
|
|
3
|
-
Version: 7.6.
|
|
3
|
+
Version: 7.6.10
|
|
4
4
|
Classifier: Programming Language :: Python
|
|
5
5
|
Classifier: Programming Language :: Python :: 3.12
|
|
6
6
|
Classifier: Framework :: Django
|
|
7
7
|
License-File: LICENSE.md
|
|
8
|
-
Requires-Dist: asgiref==3.
|
|
9
|
-
Requires-Dist: asttokens==3.0.
|
|
10
|
-
Requires-Dist: certifi==2025.
|
|
8
|
+
Requires-Dist: asgiref==3.11.0; python_version >= "3.9"
|
|
9
|
+
Requires-Dist: asttokens==3.0.1; python_version >= "3.8"
|
|
10
|
+
Requires-Dist: certifi==2025.11.12; python_version >= "3.7"
|
|
11
11
|
Requires-Dist: cffi==2.0.0; platform_python_implementation != "PyPy"
|
|
12
|
-
Requires-Dist: cfl-common==8.9.
|
|
12
|
+
Requires-Dist: cfl-common==8.9.9
|
|
13
13
|
Requires-Dist: charset-normalizer==3.4.4; python_version >= "3.7"
|
|
14
14
|
Requires-Dist: cryptography==44.0.1; python_version >= "3.7" and python_full_version not in "3.9.0, 3.9.1"
|
|
15
15
|
Requires-Dist: decorator==5.2.1; python_version >= "3.8"
|
|
16
16
|
Requires-Dist: diff-match-patch==20241021; python_version >= "3.7"
|
|
17
|
-
Requires-Dist: django==5.1.
|
|
17
|
+
Requires-Dist: django==5.1.15; python_version >= "3.10"
|
|
18
18
|
Requires-Dist: django-countries==7.6.1
|
|
19
19
|
Requires-Dist: django-csp==3.8
|
|
20
20
|
Requires-Dist: django-formtools==2.5.1; python_version >= "3.8"
|
|
21
21
|
Requires-Dist: django-import-export==4.2.0; python_version >= "3.9"
|
|
22
22
|
Requires-Dist: django-otp==1.6.3; python_version >= "3.7"
|
|
23
|
-
Requires-Dist: django-phonenumber-field==8.
|
|
23
|
+
Requires-Dist: django-phonenumber-field==8.4.0; python_version >= "3.10"
|
|
24
24
|
Requires-Dist: django-pipeline==4.0.0; python_version >= "3.9"
|
|
25
25
|
Requires-Dist: django-reverse-js==0.1.8; python_version >= "3.10"
|
|
26
26
|
Requires-Dist: django-two-factor-auth==1.17.0; python_version >= "3.8"
|
|
27
27
|
Requires-Dist: djangorestframework==3.16.0; python_version >= "3.9"
|
|
28
28
|
Requires-Dist: executing==2.2.1; python_version >= "3.8"
|
|
29
29
|
Requires-Dist: idna==3.11; python_version >= "3.8"
|
|
30
|
-
Requires-Dist: ipython==9.
|
|
30
|
+
Requires-Dist: ipython==9.8.0; python_version >= "3.11"
|
|
31
31
|
Requires-Dist: ipython-pygments-lexers==1.1.1; python_version >= "3.8"
|
|
32
32
|
Requires-Dist: jedi==0.19.2; python_version >= "3.6"
|
|
33
33
|
Requires-Dist: libsass==0.23.0; python_version >= "3.8"
|
|
34
34
|
Requires-Dist: matplotlib-inline==0.2.1; python_version >= "3.9"
|
|
35
35
|
Requires-Dist: more-itertools==8.7.0; python_version >= "3.5"
|
|
36
|
-
Requires-Dist: numpy==2.3.
|
|
36
|
+
Requires-Dist: numpy==2.3.5; python_version >= "3.11"
|
|
37
37
|
Requires-Dist: pandas==2.3.3; python_version >= "3.9"
|
|
38
38
|
Requires-Dist: parso==0.8.5; python_version >= "3.6"
|
|
39
39
|
Requires-Dist: pexpect==4.9.0; sys_platform != "win32" and sys_platform != "emscripten"
|
|
@@ -52,7 +52,7 @@ Requires-Dist: qrcode==7.4.2; python_version >= "3.7"
|
|
|
52
52
|
Requires-Dist: requests==2.32.5; python_version >= "3.9"
|
|
53
53
|
Requires-Dist: setuptools==80.9.0; python_version >= "3.9"
|
|
54
54
|
Requires-Dist: six==1.17.0; python_version >= "2.7" and python_version not in "3.0, 3.1, 3.2, 3.3"
|
|
55
|
-
Requires-Dist: sqlparse==0.5.
|
|
55
|
+
Requires-Dist: sqlparse==0.5.4; python_version >= "3.8"
|
|
56
56
|
Requires-Dist: stack-data==0.6.3
|
|
57
57
|
Requires-Dist: tablib==3.7.0; python_version >= "3.9"
|
|
58
58
|
Requires-Dist: traitlets==5.14.3; python_version >= "3.8"
|
|
@@ -63,25 +63,25 @@ Requires-Dist: wcwidth==0.2.14; python_version >= "3.6"
|
|
|
63
63
|
Requires-Dist: wheel==0.45.1; python_version >= "3.8"
|
|
64
64
|
Provides-Extra: dev
|
|
65
65
|
Requires-Dist: amqp==5.3.1; python_version >= "3.6" and extra == "dev"
|
|
66
|
-
Requires-Dist: asgiref==3.
|
|
66
|
+
Requires-Dist: asgiref==3.11.0; python_version >= "3.9" and extra == "dev"
|
|
67
67
|
Requires-Dist: attrs==25.4.0; python_version >= "3.9" and extra == "dev"
|
|
68
|
-
Requires-Dist: billiard==4.2.
|
|
68
|
+
Requires-Dist: billiard==4.2.4; python_version >= "3.7" and extra == "dev"
|
|
69
69
|
Requires-Dist: black==25.11.0; python_version >= "3.9" and extra == "dev"
|
|
70
70
|
Requires-Dist: boto3==1.36.14; python_version >= "3.8" and extra == "dev"
|
|
71
71
|
Requires-Dist: botocore==1.36.26; python_version >= "3.8" and extra == "dev"
|
|
72
72
|
Requires-Dist: celery[sqs]==5.4.0; python_version >= "3.8" and extra == "dev"
|
|
73
|
-
Requires-Dist: certifi==2025.
|
|
73
|
+
Requires-Dist: certifi==2025.11.12; python_version >= "3.7" and extra == "dev"
|
|
74
74
|
Requires-Dist: cffi==2.0.0; platform_python_implementation != "PyPy" and extra == "dev"
|
|
75
|
-
Requires-Dist: cfl-common==8.9.
|
|
75
|
+
Requires-Dist: cfl-common==8.9.9; extra == "dev"
|
|
76
76
|
Requires-Dist: charset-normalizer==3.4.4; python_version >= "3.7" and extra == "dev"
|
|
77
|
-
Requires-Dist: click==8.3.
|
|
77
|
+
Requires-Dist: click==8.3.1; python_version >= "3.10" and extra == "dev"
|
|
78
78
|
Requires-Dist: click-didyoumean==0.3.1; python_full_version >= "3.6.2" and extra == "dev"
|
|
79
79
|
Requires-Dist: click-plugins==1.1.1.2; extra == "dev"
|
|
80
80
|
Requires-Dist: click-repl==0.3.0; python_version >= "3.6" and extra == "dev"
|
|
81
|
-
Requires-Dist: codeforlife-portal==8.9.
|
|
81
|
+
Requires-Dist: codeforlife-portal==8.9.9; extra == "dev"
|
|
82
82
|
Requires-Dist: cryptography==44.0.1; (python_version >= "3.7" and python_full_version not in "3.9.0, 3.9.1") and extra == "dev"
|
|
83
83
|
Requires-Dist: diff-match-patch==20241021; python_version >= "3.7" and extra == "dev"
|
|
84
|
-
Requires-Dist: django==5.1.
|
|
84
|
+
Requires-Dist: django==5.1.15; python_version >= "3.10" and extra == "dev"
|
|
85
85
|
Requires-Dist: django-classy-tags==4.1.0; python_version >= "3.8" and extra == "dev"
|
|
86
86
|
Requires-Dist: django-countries==7.6.1; extra == "dev"
|
|
87
87
|
Requires-Dist: django-csp==3.8; extra == "dev"
|
|
@@ -89,7 +89,7 @@ Requires-Dist: django-extensions==4.1; python_version >= "3.9" and extra == "dev
|
|
|
89
89
|
Requires-Dist: django-formtools==2.5.1; python_version >= "3.8" and extra == "dev"
|
|
90
90
|
Requires-Dist: django-import-export==4.2.0; python_version >= "3.9" and extra == "dev"
|
|
91
91
|
Requires-Dist: django-otp==1.6.3; python_version >= "3.7" and extra == "dev"
|
|
92
|
-
Requires-Dist: django-phonenumber-field==8.
|
|
92
|
+
Requires-Dist: django-phonenumber-field==8.4.0; python_version >= "3.10" and extra == "dev"
|
|
93
93
|
Requires-Dist: django-pipeline==4.0.0; python_version >= "3.9" and extra == "dev"
|
|
94
94
|
Requires-Dist: django-preventconcurrentlogins==0.8.2; extra == "dev"
|
|
95
95
|
Requires-Dist: django-ratelimit==3.0.1; python_version >= "3.4" and extra == "dev"
|
|
@@ -100,7 +100,7 @@ Requires-Dist: django-test-migrations==1.4.0; (python_version >= "3.9" and pytho
|
|
|
100
100
|
Requires-Dist: django-treebeard==4.7.1; python_version >= "3.8" and extra == "dev"
|
|
101
101
|
Requires-Dist: django-two-factor-auth==1.17.0; python_version >= "3.8" and extra == "dev"
|
|
102
102
|
Requires-Dist: djangorestframework==3.16.0; python_version >= "3.9" and extra == "dev"
|
|
103
|
-
Requires-Dist: execnet==2.1.
|
|
103
|
+
Requires-Dist: execnet==2.1.2; python_version >= "3.8" and extra == "dev"
|
|
104
104
|
Requires-Dist: gunicorn==23.0.0; python_version >= "3.7" and extra == "dev"
|
|
105
105
|
Requires-Dist: h11==0.16.0; python_version >= "3.8" and extra == "dev"
|
|
106
106
|
Requires-Dist: idna==3.11; python_version >= "3.8" and extra == "dev"
|
|
@@ -108,12 +108,12 @@ Requires-Dist: importlib-metadata==4.13.0; python_version >= "3.7" and extra ==
|
|
|
108
108
|
Requires-Dist: iniconfig==2.3.0; python_version >= "3.10" and extra == "dev"
|
|
109
109
|
Requires-Dist: isort==7.0.0; python_full_version >= "3.10.0" and extra == "dev"
|
|
110
110
|
Requires-Dist: jmespath==1.0.1; python_version >= "3.7" and extra == "dev"
|
|
111
|
-
Requires-Dist: kombu[sqs]==5.6.
|
|
111
|
+
Requires-Dist: kombu[sqs]==5.6.1; python_version >= "3.9" and extra == "dev"
|
|
112
112
|
Requires-Dist: libsass==0.23.0; python_version >= "3.8" and extra == "dev"
|
|
113
113
|
Requires-Dist: markupsafe==3.0.3; python_version >= "3.9" and extra == "dev"
|
|
114
114
|
Requires-Dist: more-itertools==8.7.0; python_version >= "3.5" and extra == "dev"
|
|
115
115
|
Requires-Dist: mypy-extensions==1.1.0; python_version >= "3.8" and extra == "dev"
|
|
116
|
-
Requires-Dist: numpy==2.3.
|
|
116
|
+
Requires-Dist: numpy==2.3.5; python_version >= "3.11" and extra == "dev"
|
|
117
117
|
Requires-Dist: outcome==1.3.0.post0; python_version >= "3.7" and extra == "dev"
|
|
118
118
|
Requires-Dist: packaging==25.0; python_version >= "3.8" and extra == "dev"
|
|
119
119
|
Requires-Dist: pandas==2.3.3; python_version >= "3.9" and extra == "dev"
|
|
@@ -151,7 +151,7 @@ Requires-Dist: setuptools==80.9.0; python_version >= "3.9" and extra == "dev"
|
|
|
151
151
|
Requires-Dist: six==1.17.0; (python_version >= "2.7" and python_version not in "3.0, 3.1, 3.2, 3.3") and extra == "dev"
|
|
152
152
|
Requires-Dist: sniffio==1.3.1; python_version >= "3.7" and extra == "dev"
|
|
153
153
|
Requires-Dist: sortedcontainers==2.4.0; extra == "dev"
|
|
154
|
-
Requires-Dist: sqlparse==0.5.
|
|
154
|
+
Requires-Dist: sqlparse==0.5.4; python_version >= "3.8" and extra == "dev"
|
|
155
155
|
Requires-Dist: tablib==3.7.0; python_version >= "3.9" and extra == "dev"
|
|
156
156
|
Requires-Dist: trio==0.32.0; python_version >= "3.10" and extra == "dev"
|
|
157
157
|
Requires-Dist: trio-websocket==0.12.2; python_version >= "3.8" and extra == "dev"
|
|
@@ -166,7 +166,7 @@ Requires-Dist: websocket-client==1.9.0; python_version >= "3.9" and extra == "de
|
|
|
166
166
|
Requires-Dist: werkzeug==3.1.3; python_version >= "3.9" and extra == "dev"
|
|
167
167
|
Requires-Dist: wheel==0.45.1; python_version >= "3.8" and extra == "dev"
|
|
168
168
|
Requires-Dist: whitenoise==6.9.0; python_version >= "3.9" and extra == "dev"
|
|
169
|
-
Requires-Dist: wsproto==1.2
|
|
169
|
+
Requires-Dist: wsproto==1.3.2; python_version >= "3.10" and extra == "dev"
|
|
170
170
|
Requires-Dist: zipp==3.23.0; python_version >= "3.9" and extra == "dev"
|
|
171
171
|
Dynamic: classifier
|
|
172
172
|
Dynamic: license-file
|
|
@@ -3,7 +3,7 @@ example_project/rapid_router_test_settings.py,sha256=-8pBDGeDSM0ziu5BLUXVqB9J97A
|
|
|
3
3
|
example_project/settings.py,sha256=I_upxXh1PBbeX0aKttLeqjGbjPCDTfgMVJgBv7vcc0g,4599
|
|
4
4
|
example_project/urls.py,sha256=XHug_cpNy21yOef3E1-wWT5VkTuxpl6ZXIlCj6jDjWA,422
|
|
5
5
|
example_project/wsgi.py,sha256=U1W6WzZxZaIdYZ5tks7w9fqp5WS5qvn2iThsVcskrWw,829
|
|
6
|
-
game/__init__.py,sha256=
|
|
6
|
+
game/__init__.py,sha256=y0E_DLQhFzBI491rSPVDBKe66iDbOF6-gbiRI2QxPZY,23
|
|
7
7
|
game/admin.py,sha256=BLwwaqQYuqmMdwqnvhdan19iGxdcoBX4CXFk_ROG5-M,1431
|
|
8
8
|
game/app_settings.py,sha256=mlg-1AiP7AR5JNOHAXXLuCrYWaZMmSihvSYk9c2c8YY,857
|
|
9
9
|
game/cache.py,sha256=dtOiFl6Z4I2Q9-8Hz24ZI-5C0asXYSQhF2Be5q74N8g,2227
|
|
@@ -11,7 +11,7 @@ game/character.py,sha256=bdJ74jDN9zZnj-XaNYbCWmM8XiZY5q4zpqmHLcvE-ts,2397
|
|
|
11
11
|
game/decor.py,sha256=VDY-kadOd0TSDo5znI5P3YzB3BFADCotIlp1g_eDOwQ,10096
|
|
12
12
|
game/forms.py,sha256=7J9Ivn97qw4FC5B7WonDzi4Q5WHhF1I62eQWorUDv_o,2143
|
|
13
13
|
game/level_management.py,sha256=wAKbu8JAVTHoM6YD6L3c7tPityKtWLGRNG32OX5SYRw,6289
|
|
14
|
-
game/messages.py,sha256=
|
|
14
|
+
game/messages.py,sha256=x2YCLgQ9vnDQ5AA8hvf-ImxMuKsJcryfW5a-vPMQ2R4,102853
|
|
15
15
|
game/models.py,sha256=h_NS_6LL8uFoKVjg2CCZ53sE-FBv9QWM_dhCh4fIr5E,11446
|
|
16
16
|
game/permissions.py,sha256=3dWQ_YYMNVm6OhI9gyZe36EiqsoyU5RzyxdIlfbZ2pM,7624
|
|
17
17
|
game/python_den_urls.py,sha256=SgAoCwKeck-c8gGZadjKNhtq_-6PVc3m_he4NDSDw0Q,794
|
|
@@ -782,7 +782,7 @@ game/tests/test_level_selection.py,sha256=IbrIPKDozvQ-05JAmLxHw9DsTfTwTBF2VJQPU8
|
|
|
782
782
|
game/tests/test_models.py,sha256=L1F5yHtVdDmVuhw7uGDBiOOTYi9rgZVIjzd248-eqLc,2592
|
|
783
783
|
game/tests/test_python_den_worksheet.py,sha256=YSKMESqX4OJMNpwFCOp03pp-UV1rseVBKmGDcCy5QJ4,2691
|
|
784
784
|
game/tests/test_random_road.py,sha256=vehN177IFKGwW2RvVOtR0X9N86cEyMmIpdhBg1mrJwo,7340
|
|
785
|
-
game/tests/test_scoreboard.py,sha256=
|
|
785
|
+
game/tests/test_scoreboard.py,sha256=mlcst9uD5e4T2UbEv8zUBZqR3612-npOOGCvt2K7aRY,20291
|
|
786
786
|
game/tests/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
787
787
|
game/tests/migrations/test_migration_fix_episodes_order.py,sha256=JdZpcjxggMbCnTG_kNxFsavHtOjY3CA031s2T5WDuXA,1135
|
|
788
788
|
game/tests/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -801,11 +801,11 @@ game/views/level_editor.py,sha256=qJlHPs85hFCJoXrkwql37UduGs0MKxpAtwm5EpzEwi0,18
|
|
|
801
801
|
game/views/level_moderation.py,sha256=GwnvXlHRxGNjgjr3pcCCmnxCHEX4UCJlsGw2VA6rncA,5303
|
|
802
802
|
game/views/level_selection.py,sha256=UI345nDv5iTRQ7VttiLKLzezJlaSlaKOnhlALZgMU9Q,9896
|
|
803
803
|
game/views/level_solutions.py,sha256=oYwx0p1LuY7609H2lid7lAq3QvcD6_K9cy5U_i6CwWg,96714
|
|
804
|
-
game/views/scoreboard.py,sha256=
|
|
804
|
+
game/views/scoreboard.py,sha256=h-IPKNKTpFH2Ryr1huyh765BgE0nYtPrqIf9hpU1dmc,17077
|
|
805
805
|
game/views/scoreboard_csv.py,sha256=yx4tOwx5QsHyU1S1BUPUqRBWIh5idq8QVtBID-NqZto,1768
|
|
806
806
|
game/views/worksheet.py,sha256=R7DgR3OhgITkmPHzkv0WLu_bkHvt3RGkcD7ySx3ippg,705
|
|
807
|
-
rapid_router-7.6.
|
|
808
|
-
rapid_router-7.6.
|
|
809
|
-
rapid_router-7.6.
|
|
810
|
-
rapid_router-7.6.
|
|
811
|
-
rapid_router-7.6.
|
|
807
|
+
rapid_router-7.6.10.dist-info/licenses/LICENSE.md,sha256=9AbRlCDqD2D1tPibimysFv3zg3AIc49-eyv9aEsyq9w,115
|
|
808
|
+
rapid_router-7.6.10.dist-info/METADATA,sha256=YN-pPzxrX9Exh0X5RmatWP3u4494JvDLTDwfx1c5SIs,11819
|
|
809
|
+
rapid_router-7.6.10.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
|
|
810
|
+
rapid_router-7.6.10.dist-info/top_level.txt,sha256=rKP4ryr1t8Wcnx8grJHDViM3T5cMYH_0vygDjC04ArA,21
|
|
811
|
+
rapid_router-7.6.10.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|