rapid-router 7.6.7__py2.py3-none-any.whl → 7.6.9__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.7.dist-info → rapid_router-7.6.9.dist-info}/METADATA +33 -33
- {rapid_router-7.6.7.dist-info → rapid_router-7.6.9.dist-info}/RECORD +9 -9
- {rapid_router-7.6.7.dist-info → rapid_router-7.6.9.dist-info}/WHEEL +0 -0
- {rapid_router-7.6.7.dist-info → rapid_router-7.6.9.dist-info}/licenses/LICENSE.md +0 -0
- {rapid_router-7.6.7.dist-info → rapid_router-7.6.9.dist-info}/top_level.txt +0 -0
game/__init__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "7.6.
|
|
1
|
+
__version__ = "7.6.9"
|
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,47 +1,47 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rapid-router
|
|
3
|
-
Version: 7.6.
|
|
3
|
+
Version: 7.6.9
|
|
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.
|
|
8
|
+
Requires-Dist: asgiref==3.10.0; python_version >= "3.9"
|
|
9
9
|
Requires-Dist: asttokens==3.0.0; python_version >= "3.8"
|
|
10
|
-
Requires-Dist: certifi==2025.
|
|
11
|
-
Requires-Dist: cffi==
|
|
12
|
-
Requires-Dist: cfl-common==8.9.
|
|
13
|
-
Requires-Dist: charset-normalizer==3.4.
|
|
10
|
+
Requires-Dist: certifi==2025.10.5; python_version >= "3.7"
|
|
11
|
+
Requires-Dist: cffi==2.0.0; platform_python_implementation != "PyPy"
|
|
12
|
+
Requires-Dist: cfl-common==8.9.8
|
|
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.14; 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
|
-
Requires-Dist: django-otp==1.6.
|
|
23
|
-
Requires-Dist: django-phonenumber-field==8.
|
|
22
|
+
Requires-Dist: django-otp==1.6.3; python_version >= "3.7"
|
|
23
|
+
Requires-Dist: django-phonenumber-field==8.3.0; python_version >= "3.9"
|
|
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
|
-
Requires-Dist: idna==3.
|
|
30
|
-
Requires-Dist: ipython==9.
|
|
29
|
+
Requires-Dist: idna==3.11; python_version >= "3.8"
|
|
30
|
+
Requires-Dist: ipython==9.7.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.
|
|
37
|
-
Requires-Dist: pandas==2.3.
|
|
36
|
+
Requires-Dist: numpy==2.3.4; python_version >= "3.11"
|
|
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"
|
|
40
40
|
Requires-Dist: pgeocode==0.4.0; python_version >= "3.8"
|
|
41
41
|
Requires-Dist: prompt-toolkit==3.0.52; python_version >= "3.8"
|
|
42
42
|
Requires-Dist: ptyprocess==0.7.0
|
|
43
43
|
Requires-Dist: pure-eval==0.2.3
|
|
44
|
-
Requires-Dist: pycparser==2.
|
|
44
|
+
Requires-Dist: pycparser==2.23; implementation_name != "PyPy"
|
|
45
45
|
Requires-Dist: pygments==2.19.2; python_version >= "3.8"
|
|
46
46
|
Requires-Dist: pyhamcrest==2.0.2; python_version >= "3.5"
|
|
47
47
|
Requires-Dist: pyjwt==2.6.0; python_version >= "3.7"
|
|
@@ -63,33 +63,33 @@ 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.10.0; python_version >= "3.9" and extra == "dev"
|
|
67
67
|
Requires-Dist: attrs==25.4.0; python_version >= "3.9" and extra == "dev"
|
|
68
68
|
Requires-Dist: billiard==4.2.2; python_version >= "3.7" and extra == "dev"
|
|
69
|
-
Requires-Dist: black==25.
|
|
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.
|
|
74
|
-
Requires-Dist: cffi==
|
|
75
|
-
Requires-Dist: cfl-common==8.9.
|
|
76
|
-
Requires-Dist: charset-normalizer==3.4.
|
|
73
|
+
Requires-Dist: certifi==2025.10.5; python_version >= "3.7" and extra == "dev"
|
|
74
|
+
Requires-Dist: cffi==2.0.0; platform_python_implementation != "PyPy" and extra == "dev"
|
|
75
|
+
Requires-Dist: cfl-common==8.9.8; extra == "dev"
|
|
76
|
+
Requires-Dist: charset-normalizer==3.4.4; python_version >= "3.7" and extra == "dev"
|
|
77
77
|
Requires-Dist: click==8.3.0; 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.8; 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.14; 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"
|
|
88
88
|
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
|
-
Requires-Dist: django-otp==1.6.
|
|
92
|
-
Requires-Dist: django-phonenumber-field==8.
|
|
91
|
+
Requires-Dist: django-otp==1.6.3; python_version >= "3.7" and extra == "dev"
|
|
92
|
+
Requires-Dist: django-phonenumber-field==8.3.0; python_version >= "3.9" 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"
|
|
@@ -103,29 +103,29 @@ Requires-Dist: djangorestframework==3.16.0; python_version >= "3.9" and extra ==
|
|
|
103
103
|
Requires-Dist: execnet==2.1.1; 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
|
-
Requires-Dist: idna==3.
|
|
106
|
+
Requires-Dist: idna==3.11; python_version >= "3.8" and extra == "dev"
|
|
107
107
|
Requires-Dist: importlib-metadata==4.13.0; python_version >= "3.7" and extra == "dev"
|
|
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.
|
|
111
|
+
Requires-Dist: kombu[sqs]==5.6.0; 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.4; 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
|
-
Requires-Dist: pandas==2.3.
|
|
119
|
+
Requires-Dist: pandas==2.3.3; python_version >= "3.9" and extra == "dev"
|
|
120
120
|
Requires-Dist: pathspec==0.12.1; python_version >= "3.8" and extra == "dev"
|
|
121
121
|
Requires-Dist: pgeocode==0.4.0; python_version >= "3.8" and extra == "dev"
|
|
122
122
|
Requires-Dist: phonenumbers==8.12.12; extra == "dev"
|
|
123
|
-
Requires-Dist: pillow==
|
|
123
|
+
Requires-Dist: pillow==12.0.0; python_version >= "3.10" and extra == "dev"
|
|
124
124
|
Requires-Dist: platformdirs==4.5.0; python_version >= "3.10" and extra == "dev"
|
|
125
125
|
Requires-Dist: pluggy==1.6.0; python_version >= "3.9" and extra == "dev"
|
|
126
126
|
Requires-Dist: prompt-toolkit==3.0.52; python_version >= "3.8" and extra == "dev"
|
|
127
127
|
Requires-Dist: psycopg2-binary==2.9.9; python_version >= "3.7" and extra == "dev"
|
|
128
|
-
Requires-Dist: pycparser==2.
|
|
128
|
+
Requires-Dist: pycparser==2.23; implementation_name != "PyPy" and extra == "dev"
|
|
129
129
|
Requires-Dist: pycurl==7.45.7; python_version >= "3.5" and extra == "dev"
|
|
130
130
|
Requires-Dist: pygments==2.19.2; python_version >= "3.8" and extra == "dev"
|
|
131
131
|
Requires-Dist: pyjwt==2.6.0; python_version >= "3.7" and extra == "dev"
|
|
@@ -138,7 +138,7 @@ Requires-Dist: pytest-order==1.3.0; python_version >= "3.7" and extra == "dev"
|
|
|
138
138
|
Requires-Dist: pytest-xdist==3.8.0; python_version >= "3.9" and extra == "dev"
|
|
139
139
|
Requires-Dist: python-dateutil==2.9.0.post0; (python_version >= "2.7" and python_version not in "3.0, 3.1, 3.2, 3.3") and extra == "dev"
|
|
140
140
|
Requires-Dist: python-dotenv==1.0.1; python_version >= "3.8" and extra == "dev"
|
|
141
|
-
Requires-Dist: pytokens==0.
|
|
141
|
+
Requires-Dist: pytokens==0.3.0; python_version >= "3.8" and extra == "dev"
|
|
142
142
|
Requires-Dist: pytz==2025.2; extra == "dev"
|
|
143
143
|
Requires-Dist: pyyaml==6.0.2; python_version >= "3.8" and extra == "dev"
|
|
144
144
|
Requires-Dist: qrcode==7.4.2; python_version >= "3.7" and extra == "dev"
|
|
@@ -153,12 +153,12 @@ Requires-Dist: sniffio==1.3.1; python_version >= "3.7" and extra == "dev"
|
|
|
153
153
|
Requires-Dist: sortedcontainers==2.4.0; extra == "dev"
|
|
154
154
|
Requires-Dist: sqlparse==0.5.3; python_version >= "3.8" and extra == "dev"
|
|
155
155
|
Requires-Dist: tablib==3.7.0; python_version >= "3.9" and extra == "dev"
|
|
156
|
-
Requires-Dist: trio==0.
|
|
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"
|
|
158
158
|
Requires-Dist: typing-extensions==4.15.0; python_version >= "3.9" and extra == "dev"
|
|
159
159
|
Requires-Dist: tzdata==2025.2; python_version >= "2" and extra == "dev"
|
|
160
160
|
Requires-Dist: urllib3==2.5.0; python_version >= "3.9" and extra == "dev"
|
|
161
|
-
Requires-Dist: uvicorn==0.
|
|
161
|
+
Requires-Dist: uvicorn==0.38.0; python_version >= "3.9" and extra == "dev"
|
|
162
162
|
Requires-Dist: uvicorn-worker==0.2.0; python_version >= "3.8" and extra == "dev"
|
|
163
163
|
Requires-Dist: vine==5.1.0; python_version >= "3.6" and extra == "dev"
|
|
164
164
|
Requires-Dist: wcwidth==0.2.14; python_version >= "3.6" and extra == "dev"
|
|
@@ -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=Z3P2ZGpGR-5lolBtaNOKA5Qk6p37X25re0WlAHgvu8Q,22
|
|
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.9.dist-info/licenses/LICENSE.md,sha256=9AbRlCDqD2D1tPibimysFv3zg3AIc49-eyv9aEsyq9w,115
|
|
808
|
+
rapid_router-7.6.9.dist-info/METADATA,sha256=w6n9qKLd1SVY2V2Vo1Fhc11nzsEcH-q988qIAxUNJh8,11820
|
|
809
|
+
rapid_router-7.6.9.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
|
|
810
|
+
rapid_router-7.6.9.dist-info/top_level.txt,sha256=rKP4ryr1t8Wcnx8grJHDViM3T5cMYH_0vygDjC04ArA,21
|
|
811
|
+
rapid_router-7.6.9.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|