From 9b7944c14d703f59d42c6d8000514750cd43154f Mon Sep 17 00:00:00 2001
From: Marijn Doeve
Date: Wed, 11 Dec 2024 23:22:09 +0100
Subject: [PATCH] More!
---
Makefile | 6 +-
tvdt/{elimination => backoffice}/__init__.py | 0
tvdt/{elimination => backoffice}/apps.py | 4 +-
tvdt/backoffice/converters.py | 14 +
.../backoffice/templates/backoffice/base.html | 36 +
.../templates/backoffice/index.html | 45 +
tvdt/backoffice/templates/backoffice/nav.html | 51 +
.../backoffice/templates/backoffice/quiz.html | 92 ++
.../templates/backoffice/season.html | 25 +
tvdt/{elimination => backoffice}/tests.py | 0
tvdt/backoffice/urls.py | 21 +
tvdt/backoffice/views/__init__.py | 3 +
tvdt/backoffice/views/home.py | 10 +
tvdt/backoffice/views/quiz.py | 13 +
tvdt/backoffice/views/season.py | 12 +
tvdt/elimination/migrations/__init__.py | 0
.../templates/elimination/home.html | 45 -
tvdt/elimination/urls.py | 11 -
tvdt/elimination/views/__init__.py | 1 -
tvdt/elimination/views/home.py | 5 -
tvdt/locale/nl/LC_MESSAGES/django.po | 101 +-
tvdt/poetry.lock | 338 +++++-
tvdt/pyproject.toml | 5 +-
tvdt/quiz/admin.py | 9 +-
tvdt/quiz/context_processors.py | 2 +
tvdt/quiz/converters.py | 2 +-
tvdt/quiz/fixtures/krtek.json | 1019 ++++++++++++++++-
tvdt/quiz/locale/nl/LC_MESSAGES/django.po | 74 +-
tvdt/quiz/migrations/0002_season_owner.py | 24 +
...unt_alter_correction_candidate_and_more.py | 39 +
tvdt/quiz/migrations/0004_quiz_dropouts.py | 18 +
tvdt/quiz/models/answer.py | 3 +
tvdt/quiz/models/correction.py | 5 +-
tvdt/quiz/models/question.py | 30 +
tvdt/quiz/models/quiz.py | 36 +
tvdt/quiz/models/season.py | 11 +-
tvdt/quiz/static/quiz/de_mol/background.png | Bin 0 -> 330116 bytes
tvdt/quiz/static/quiz/de_mol/green.png | Bin 0 -> 406098 bytes
tvdt/quiz/static/quiz/de_mol/red.png | Bin 0 -> 411538 bytes
.../quiz/{ => wie_is_de_mol}/background.png | Bin
tvdt/quiz/static/quiz/wie_is_de_mol/green.png | Bin 0 -> 507638 bytes
tvdt/quiz/static/quiz/wie_is_de_mol/red.png | Bin 0 -> 455932 bytes
tvdt/quiz/templates/quiz/base.html | 61 +-
tvdt/quiz/templates/quiz/enter_name.html | 5 +-
tvdt/quiz/templates/quiz/question.html | 22 +-
tvdt/quiz/templates/quiz/select_season.html | 5 +-
tvdt/quiz/urls.py | 5 +-
tvdt/quiz/views/questionview.py | 2 +-
tvdt/quiz/views/selectseasonview.py | 2 +-
tvdt/templates/base.html | 33 -
tvdt/templates/messages.html | 13 +
tvdt/tvdt/settings.py | 43 +-
tvdt/tvdt/urls.py | 2 +-
53 files changed, 2054 insertions(+), 249 deletions(-)
rename tvdt/{elimination => backoffice}/__init__.py (100%)
rename tvdt/{elimination => backoffice}/apps.py (60%)
create mode 100644 tvdt/backoffice/converters.py
create mode 100644 tvdt/backoffice/templates/backoffice/base.html
create mode 100644 tvdt/backoffice/templates/backoffice/index.html
create mode 100644 tvdt/backoffice/templates/backoffice/nav.html
create mode 100644 tvdt/backoffice/templates/backoffice/quiz.html
create mode 100644 tvdt/backoffice/templates/backoffice/season.html
rename tvdt/{elimination => backoffice}/tests.py (100%)
create mode 100644 tvdt/backoffice/urls.py
create mode 100644 tvdt/backoffice/views/__init__.py
create mode 100644 tvdt/backoffice/views/home.py
create mode 100644 tvdt/backoffice/views/quiz.py
create mode 100644 tvdt/backoffice/views/season.py
delete mode 100644 tvdt/elimination/migrations/__init__.py
delete mode 100644 tvdt/elimination/templates/elimination/home.html
delete mode 100644 tvdt/elimination/urls.py
delete mode 100644 tvdt/elimination/views/__init__.py
delete mode 100644 tvdt/elimination/views/home.py
create mode 100644 tvdt/quiz/context_processors.py
create mode 100644 tvdt/quiz/migrations/0002_season_owner.py
create mode 100644 tvdt/quiz/migrations/0003_correction_amount_alter_correction_candidate_and_more.py
create mode 100644 tvdt/quiz/migrations/0004_quiz_dropouts.py
create mode 100644 tvdt/quiz/static/quiz/de_mol/background.png
create mode 100644 tvdt/quiz/static/quiz/de_mol/green.png
create mode 100644 tvdt/quiz/static/quiz/de_mol/red.png
rename tvdt/quiz/static/quiz/{ => wie_is_de_mol}/background.png (100%)
create mode 100644 tvdt/quiz/static/quiz/wie_is_de_mol/green.png
create mode 100644 tvdt/quiz/static/quiz/wie_is_de_mol/red.png
delete mode 100644 tvdt/templates/base.html
create mode 100644 tvdt/templates/messages.html
diff --git a/Makefile b/Makefile
index b62310b..178e130 100644
--- a/Makefile
+++ b/Makefile
@@ -31,7 +31,9 @@ migrate: ## Migrate the database to the latest version
@${DOCKER_EXEC} python manage.py migrate
.PHONY: compilemessages
-compilemessages: ## Compile translations
+messages: ## Compile translations
+ @echo ✨ Finding translations
+ @${DOCKER_EXEC} python manage.py makemessages -l nl
@echo ✨ Compiling translations
@${DOCKER_EXEC} python manage.py compilemessages --ignore .venv
@@ -50,7 +52,7 @@ _clean:
@echo ✨ Stopping containers
@docker compose down -v
@echo ✨ Removing compiled files
- @rm -f tvdt/**/locale/*/LC_MESSAGES/django.mo
+ @rm -f tvdt/*/locale/*/LC_MESSAGES/django.mo tvdt/locale/*/LC_MESSAGES/django.mo
.PHONY: clean
clean: _clean init
diff --git a/tvdt/elimination/__init__.py b/tvdt/backoffice/__init__.py
similarity index 100%
rename from tvdt/elimination/__init__.py
rename to tvdt/backoffice/__init__.py
diff --git a/tvdt/elimination/apps.py b/tvdt/backoffice/apps.py
similarity index 60%
rename from tvdt/elimination/apps.py
rename to tvdt/backoffice/apps.py
index 9cb489d..e3254c3 100644
--- a/tvdt/elimination/apps.py
+++ b/tvdt/backoffice/apps.py
@@ -1,6 +1,6 @@
from django.apps import AppConfig
-class EliminationConfig(AppConfig):
+class BackofficeConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
- name = "elimination"
+ name = "backoffice"
diff --git a/tvdt/backoffice/converters.py b/tvdt/backoffice/converters.py
new file mode 100644
index 0000000..250a73a
--- /dev/null
+++ b/tvdt/backoffice/converters.py
@@ -0,0 +1,14 @@
+from quiz.models import Quiz
+
+
+class QuizConverter:
+ regex = r"\d+"
+
+ def to_python(self, value: str) -> Quiz:
+ try:
+ return Quiz.objects.get(id=value)
+ except Quiz.DoesNotExist:
+ raise ValueError
+
+ def to_url(self, value: Quiz | int) -> str:
+ return str(value.id) if isinstance(value, Quiz) else value
diff --git a/tvdt/backoffice/templates/backoffice/base.html b/tvdt/backoffice/templates/backoffice/base.html
new file mode 100644
index 0000000..7765e22
--- /dev/null
+++ b/tvdt/backoffice/templates/backoffice/base.html
@@ -0,0 +1,36 @@
+{% load i18n %}
+{% load static %}
+
+
+
+
+
+
+
+
+ {% block title %}
+ {% translate "Tijd voor de test" %}
+ {% endblock title %}
+
+
+
+ {% block nav %}
+ {% include "backoffice/nav.html" %}
+ {% endblock nav %}
+
+
+ {% include "messages.html" %}
+ {% block body %}
+ {% endblock body %}
+
+
+
+ {% block script %}
+ {% endblock script %}
+
diff --git a/tvdt/backoffice/templates/backoffice/index.html b/tvdt/backoffice/templates/backoffice/index.html
new file mode 100644
index 0000000..d61e80b
--- /dev/null
+++ b/tvdt/backoffice/templates/backoffice/index.html
@@ -0,0 +1,45 @@
+{% extends "backoffice/base.html" %}
+{% load i18n %}
+{% block body %}
+ {% translate "Your Seasons" %}
+
+{% endblock body %}
diff --git a/tvdt/backoffice/templates/backoffice/nav.html b/tvdt/backoffice/templates/backoffice/nav.html
new file mode 100644
index 0000000..6f03737
--- /dev/null
+++ b/tvdt/backoffice/templates/backoffice/nav.html
@@ -0,0 +1,51 @@
+{% load i18n %}
+
diff --git a/tvdt/backoffice/templates/backoffice/quiz.html b/tvdt/backoffice/templates/backoffice/quiz.html
new file mode 100644
index 0000000..e880f0e
--- /dev/null
+++ b/tvdt/backoffice/templates/backoffice/quiz.html
@@ -0,0 +1,92 @@
+{% extends "backoffice/base.html" %}
+{% load i18n %}
+{% block body %}
+
+
{% translate "Quiz" %}: {{ quiz.season.name }} - {{ quiz.name }}
+
+
+
+
{% translate "Questions" %}
+
+
+ {% for question in quiz.questions.all %}
+
+
+
+
+ {% for answer in question.answers.all %}
+
{{ answer.text }}
+ {% empty %}
+ {% translate "There are no answers for this question" %}
+ {% endfor %}
+
+
+
+ {% empty %}
+ EMPTY
+ {% endfor %}
+
+
+
+
+
{% translate "Score" %}
+
+
+
{% translate "Number of dropouts:" %} {{ quiz.dropouts }}
+
+
+
+ | {% translate "Candidate" %} |
+ {% translate "Correct Answers" %} |
+ {% translate "Corrections" %} |
+ {% translate "Score" %} |
+ {% translate "Time" %} |
+
+
+
+ {% with result=quiz.get_score %}
+ {% for candidate in result %}
+
+ | {{ candidate.name }} |
+ {{ candidate.correct }} |
+ {{ candidate.corrections }} |
+ {{ candidate.score }} |
+ {{ candidate.time }} |
+
+ {% empty %}
+ {% endfor %}
+
+
+ {% endwith %}
+
+{% endblock body %}
+{% block script %}
+
+{% endblock script %}
diff --git a/tvdt/backoffice/templates/backoffice/season.html b/tvdt/backoffice/templates/backoffice/season.html
new file mode 100644
index 0000000..9b824a9
--- /dev/null
+++ b/tvdt/backoffice/templates/backoffice/season.html
@@ -0,0 +1,25 @@
+{% extends "backoffice/base.html" %}
+{% load i18n %}
+{% block body %}
+
+
{% translate "Season" %}: {{ season.name }}
+
+
+
+
{% translate "Quizzes" %}
+
+ {% for quiz in season.quizzes.all %}
+
{{ quiz.name }}
+ {% empty %}
+ {% endfor %}
+
+
+
+
{% translate "Candidates" %}
+
+ {% for candidate in season.candidates.all %}- {{ candidate.name }}
{% endfor %}
+
+
+
+{% endblock body %}
diff --git a/tvdt/elimination/tests.py b/tvdt/backoffice/tests.py
similarity index 100%
rename from tvdt/elimination/tests.py
rename to tvdt/backoffice/tests.py
diff --git a/tvdt/backoffice/urls.py b/tvdt/backoffice/urls.py
new file mode 100644
index 0000000..1190c97
--- /dev/null
+++ b/tvdt/backoffice/urls.py
@@ -0,0 +1,21 @@
+from django.contrib.auth.decorators import login_required
+from django.urls import path, register_converter
+
+from tvdt.converters import SeasonCodeConverter
+
+from .converters import QuizConverter
+from .views import BackofficeIndexView, QuizView, SeasonView
+
+register_converter(SeasonCodeConverter, "season")
+register_converter(QuizConverter, "quiz")
+
+app_name = "backoffice"
+urlpatterns = [
+ path("", login_required(BackofficeIndexView.as_view()), name="index"),
+ path(
+ "/",
+ login_required(SeasonView.as_view()),
+ name="season",
+ ),
+ path("/", login_required(QuizView.as_view()), name="quiz"),
+]
diff --git a/tvdt/backoffice/views/__init__.py b/tvdt/backoffice/views/__init__.py
new file mode 100644
index 0000000..6bcb9a9
--- /dev/null
+++ b/tvdt/backoffice/views/__init__.py
@@ -0,0 +1,3 @@
+from .home import BackofficeIndexView
+from .quiz import QuizView
+from .season import SeasonView
diff --git a/tvdt/backoffice/views/home.py b/tvdt/backoffice/views/home.py
new file mode 100644
index 0000000..23f8f51
--- /dev/null
+++ b/tvdt/backoffice/views/home.py
@@ -0,0 +1,10 @@
+from django.http import HttpRequest
+from django.views.generic import TemplateView
+
+
+class BackofficeIndexView(TemplateView):
+ template_name = "backoffice/index.html"
+
+ def get(self, request: HttpRequest, *args, **kwargs):
+ seasons = request.user.seasons.all()
+ return self.render_to_response({"seasons": seasons})
diff --git a/tvdt/backoffice/views/quiz.py b/tvdt/backoffice/views/quiz.py
new file mode 100644
index 0000000..7144121
--- /dev/null
+++ b/tvdt/backoffice/views/quiz.py
@@ -0,0 +1,13 @@
+from django.http import HttpRequest
+from django.views import View
+from django.views.generic.base import TemplateResponseMixin
+
+from quiz.models import Quiz
+
+
+class QuizView(View, TemplateResponseMixin):
+ template_name = "backoffice/quiz.html"
+
+ def get(self, request: HttpRequest, quiz: Quiz, *args, **kwargs):
+
+ return self.render_to_response({"quiz": quiz})
diff --git a/tvdt/backoffice/views/season.py b/tvdt/backoffice/views/season.py
new file mode 100644
index 0000000..de3c0e9
--- /dev/null
+++ b/tvdt/backoffice/views/season.py
@@ -0,0 +1,12 @@
+from django.http import HttpRequest
+from django.views import View
+from django.views.generic.base import TemplateResponseMixin
+
+from quiz.models import Season
+
+
+class SeasonView(View, TemplateResponseMixin):
+ template_name = "backoffice/season.html"
+
+ def get(self, request: HttpRequest, season: Season, *args, **kwargs):
+ return self.render_to_response({"season": season})
diff --git a/tvdt/elimination/migrations/__init__.py b/tvdt/elimination/migrations/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/tvdt/elimination/templates/elimination/home.html b/tvdt/elimination/templates/elimination/home.html
deleted file mode 100644
index cf701d6..0000000
--- a/tvdt/elimination/templates/elimination/home.html
+++ /dev/null
@@ -1,45 +0,0 @@
-{% extends 'base.html' %}
-
-{% block nav %}
-
-{% endblock %}
\ No newline at end of file
diff --git a/tvdt/elimination/urls.py b/tvdt/elimination/urls.py
deleted file mode 100644
index f38c331..0000000
--- a/tvdt/elimination/urls.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from django.urls import path, register_converter
-
-from tvdt.converters import SeasonCodeConverter
-
-from .views import EliminationHomeView
-
-register_converter(SeasonCodeConverter, "season")
-urlpatterns = [
- path("", EliminationHomeView.as_view()),
- path("", EliminationHomeView.as_view()),
-]
diff --git a/tvdt/elimination/views/__init__.py b/tvdt/elimination/views/__init__.py
deleted file mode 100644
index 6e26cad..0000000
--- a/tvdt/elimination/views/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from .home import EliminationHomeView
diff --git a/tvdt/elimination/views/home.py b/tvdt/elimination/views/home.py
deleted file mode 100644
index 9fba12a..0000000
--- a/tvdt/elimination/views/home.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from django.views.generic import TemplateView
-
-
-class EliminationHomeView(TemplateView):
- template_name = "elimination/home.html"
diff --git a/tvdt/locale/nl/LC_MESSAGES/django.po b/tvdt/locale/nl/LC_MESSAGES/django.po
index 4fb05aa..b06f02e 100644
--- a/tvdt/locale/nl/LC_MESSAGES/django.po
+++ b/tvdt/locale/nl/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-11-24 12:18+0100\n"
+"POT-Creation-Date: 2024-12-11 23:22+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -18,10 +18,105 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: tvdt/settings.py:147
+#: backoffice/templates/backoffice/base.html:18
+msgid "Tijd voor de test"
+msgstr "Tijd voor de test"
+
+#: backoffice/templates/backoffice/index.html:4
+msgid "Your Seasons"
+msgstr "Jouw seizoenen"
+
+#: backoffice/templates/backoffice/index.html:8
+msgid "Name"
+msgstr "Naam"
+
+#: backoffice/templates/backoffice/index.html:9
+msgid "Active Quiz"
+msgstr "Actieve test"
+
+#: backoffice/templates/backoffice/index.html:10
+msgid "Season Code"
+msgstr "Seizoenscode"
+
+#: backoffice/templates/backoffice/index.html:11
+msgid "Preregister?"
+msgstr "Voorregistreren?"
+
+#: backoffice/templates/backoffice/index.html:12
+#: backoffice/templates/backoffice/index.html:37
+msgid "Manage"
+msgstr "Beheer"
+
+#: backoffice/templates/backoffice/index.html:23
+msgid "No active quiz"
+msgstr "Geen actieve test"
+
+#: backoffice/templates/backoffice/quiz.html:5
+msgid "Quiz"
+msgstr "Test"
+
+#: backoffice/templates/backoffice/quiz.html:9
+msgid "Questions"
+msgstr "Vragen"
+
+#: backoffice/templates/backoffice/quiz.html:36
+msgid "There are no answers for this question"
+msgstr "Er zijn geen antwoorden voor deze vraag"
+
+#: backoffice/templates/backoffice/quiz.html:48
+#: backoffice/templates/backoffice/quiz.html:66
+msgid "Score"
+msgstr "Score"
+
+#: backoffice/templates/backoffice/quiz.html:52
+msgid "Start Elimination"
+msgstr "Start eliminatie"
+
+#: backoffice/templates/backoffice/quiz.html:55
+msgid "Prepare Custom Elimination"
+msgstr "Aangepaste eliminatie voorbereiden"
+
+#: backoffice/templates/backoffice/quiz.html:56
+msgid "Load Prepared Elimination"
+msgstr "Aangepaste eliminatie inladen"
+
+#: backoffice/templates/backoffice/quiz.html:59
+msgid "Number of dropouts:"
+msgstr "Aantal afvallers:"
+
+#: backoffice/templates/backoffice/quiz.html:63
+msgid "Candidate"
+msgstr "Kandidaat"
+
+#: backoffice/templates/backoffice/quiz.html:64
+msgid "Correct Answers"
+msgstr "Goede antwoorden"
+
+#: backoffice/templates/backoffice/quiz.html:65
+msgid "Corrections"
+msgstr "Jokers"
+
+#: backoffice/templates/backoffice/quiz.html:67
+msgid "Time"
+msgstr "Tijd"
+
+#: backoffice/templates/backoffice/season.html:5
+msgid "Season"
+msgstr "Seizoen"
+
+#: backoffice/templates/backoffice/season.html:9
+
+msgid "Quizzes"
+msgstr "Tests"
+
+#: backoffice/templates/backoffice/season.html:21
+msgid "Candidates"
+msgstr "Kandidaten"
+
+#: tvdt/settings.py:173
msgid "Dutch"
msgstr "Nederlands"
-#: tvdt/settings.py:147
+#: tvdt/settings.py:173
msgid "English"
msgstr "Engels"
diff --git a/tvdt/poetry.lock b/tvdt/poetry.lock
index 544ae03..dbce903 100644
--- a/tvdt/poetry.lock
+++ b/tvdt/poetry.lock
@@ -356,6 +356,21 @@ ssh = ["bcrypt (>=3.1.5)"]
test = ["certifi (>=2024)", "cryptography-vectors (==44.0.0)", "pretend (>=0.7)", "pytest (>=7.4.0)", "pytest-benchmark (>=4.0)", "pytest-cov (>=2.10.1)", "pytest-xdist (>=3.5.0)"]
test-randomorder = ["pytest-randomly"]
+[[package]]
+name = "cssbeautifier"
+version = "1.15.1"
+description = "CSS unobfuscator and beautifier."
+optional = false
+python-versions = "*"
+files = [
+ {file = "cssbeautifier-1.15.1.tar.gz", hash = "sha256:9f7064362aedd559c55eeecf6b6bed65e05f33488dcbe39044f0403c26e1c006"},
+]
+
+[package.dependencies]
+editorconfig = ">=0.12.2"
+jsbeautifier = "*"
+six = ">=1.13.0"
+
[[package]]
name = "dj-database-url"
version = "2.3.0"
@@ -490,6 +505,58 @@ files = [
django = "*"
typing-extensions = "*"
+[[package]]
+name = "djlint"
+version = "1.36.3"
+description = "HTML Template Linter and Formatter"
+optional = false
+python-versions = ">=3.9"
+files = [
+ {file = "djlint-1.36.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2ae7c620b58e16d6bf003bd7de3f71376a7a3daa79dc02e77f3726d5a75243f2"},
+ {file = "djlint-1.36.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e155ce0970d4a28d0a2e9f2e106733a2ad05910eee90e056b056d48049e4a97b"},
+ {file = "djlint-1.36.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8e8bb0406e60cc696806aa6226df137618f3889c72f2dbdfa76c908c99151579"},
+ {file = "djlint-1.36.3-cp310-cp310-win_amd64.whl", hash = "sha256:76d32faf988ad58ef2e7a11d04046fc984b98391761bf1b61f9a6044da53d414"},
+ {file = "djlint-1.36.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:32f7a5834000fff22e94d1d35f95aaf2e06f2af2cae18af0ed2a4e215d60e730"},
+ {file = "djlint-1.36.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3eb1b9c0be499e63e8822a051e7e55f188ff1ab8172a85d338a8ae21c872060e"},
+ {file = "djlint-1.36.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c2e0dd1f26eb472b8c84eb70d6482877b6497a1fd031d7534864088f016d5ea"},
+ {file = "djlint-1.36.3-cp311-cp311-win_amd64.whl", hash = "sha256:a06b531ab9d049c46ad4d2365d1857004a1a9dd0c23c8eae94aa0d233c6ec00d"},
+ {file = "djlint-1.36.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e66361a865e5e5a4bbcb40f56af7f256fd02cbf9d48b763a40172749cc294084"},
+ {file = "djlint-1.36.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:36e102b80d83e9ac2e6be9a9ded32fb925945f6dbc7a7156e4415de1b0aa0dba"},
+ {file = "djlint-1.36.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9ac4b7370d80bd82281e57a470de8923ac494ffb571b89d8787cef57c738c69a"},
+ {file = "djlint-1.36.3-cp312-cp312-win_amd64.whl", hash = "sha256:107cc56bbef13d60cc0ae774a4d52881bf98e37c02412e573827a3e549217e3a"},
+ {file = "djlint-1.36.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2a9f51971d6e63c41ea9b3831c928e1f21ae6fe57e87a3452cfe672d10232433"},
+ {file = "djlint-1.36.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:080c98714b55d8f0fef5c42beaee8247ebb2e3d46b0936473bd6c47808bb6302"},
+ {file = "djlint-1.36.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f65a80e0b5cb13d357ea51ca6570b34c2d9d18974c1e57142de760ea27d49ed0"},
+ {file = "djlint-1.36.3-cp313-cp313-win_amd64.whl", hash = "sha256:95ef6b67ef7f2b90d9434bba37d572031079001dc8524add85c00ef0386bda1e"},
+ {file = "djlint-1.36.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8e2317a32094d525bc41cd11c8dc064bf38d1b442c99cc3f7c4a2616b5e6ce6e"},
+ {file = "djlint-1.36.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e82266c28793cd15f97b93535d72bfbc77306eaaf6b210dd90910383a814ee6c"},
+ {file = "djlint-1.36.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01b2101c2d1b079e8d545e6d9d03487fcca14d2371e44cbfdedee15b0bf4567c"},
+ {file = "djlint-1.36.3-cp39-cp39-win_amd64.whl", hash = "sha256:15cde63ef28beb5194ff4137883025f125676ece1b574b64a3e1c6daed734639"},
+ {file = "djlint-1.36.3-py3-none-any.whl", hash = "sha256:0c05cd5b76785de2c41a2420c06ffd112800bfc0f9c0f399cc7cea7c42557f4c"},
+ {file = "djlint-1.36.3.tar.gz", hash = "sha256:d85735da34bc7ac93ad8ef9b4822cc2a23d5f0ce33f25438737b8dca1d404f78"},
+]
+
+[package.dependencies]
+click = ">=8.0.1"
+colorama = ">=0.4.4"
+cssbeautifier = ">=1.14.4"
+jsbeautifier = ">=1.14.4"
+json5 = ">=0.9.11"
+pathspec = ">=0.12"
+pyyaml = ">=6"
+regex = ">=2023"
+tqdm = ">=4.62.2"
+
+[[package]]
+name = "editorconfig"
+version = "0.12.4"
+description = "EditorConfig File Locator and Interpreter for Python"
+optional = false
+python-versions = "*"
+files = [
+ {file = "EditorConfig-0.12.4.tar.gz", hash = "sha256:24857fa1793917dd9ccf0c7810a07e05404ce9b823521c7dce22a4fb5d125f80"},
+]
+
[[package]]
name = "environs"
version = "11.2.1"
@@ -534,17 +601,6 @@ setproctitle = ["setproctitle"]
testing = ["coverage", "eventlet", "gevent", "pytest", "pytest-cov"]
tornado = ["tornado (>=0.2)"]
-[[package]]
-name = "h11"
-version = "0.14.0"
-description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"},
- {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"},
-]
-
[[package]]
name = "idna"
version = "3.10"
@@ -573,6 +629,34 @@ files = [
[package.extras]
colors = ["colorama (>=0.4.6)"]
+[[package]]
+name = "jsbeautifier"
+version = "1.15.1"
+description = "JavaScript unobfuscator and beautifier."
+optional = false
+python-versions = "*"
+files = [
+ {file = "jsbeautifier-1.15.1.tar.gz", hash = "sha256:ebd733b560704c602d744eafc839db60a1ee9326e30a2a80c4adb8718adc1b24"},
+]
+
+[package.dependencies]
+editorconfig = ">=0.12.2"
+six = ">=1.13.0"
+
+[[package]]
+name = "json5"
+version = "0.10.0"
+description = "A Python implementation of the JSON5 data format."
+optional = false
+python-versions = ">=3.8.0"
+files = [
+ {file = "json5-0.10.0-py3-none-any.whl", hash = "sha256:19b23410220a7271e8377f81ba8aacba2fdd56947fbb137ee5977cbe1f5e8dfa"},
+ {file = "json5-0.10.0.tar.gz", hash = "sha256:e66941c8f0a02026943c52c2eb34ebeb2a6f819a0be05920a6f5243cd30fd559"},
+]
+
+[package.extras]
+dev = ["build (==1.2.2.post1)", "coverage (==7.5.3)", "mypy (==1.13.0)", "pip (==24.3.1)", "pylint (==3.2.3)", "ruff (==0.7.3)", "twine (==5.1.1)", "uv (==0.5.1)"]
+
[[package]]
name = "marshmallow"
version = "3.23.1"
@@ -772,6 +856,171 @@ files = [
[package.extras]
cli = ["click (>=5.0)"]
+[[package]]
+name = "pyyaml"
+version = "6.0.2"
+description = "YAML parser and emitter for Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"},
+ {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"},
+ {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"},
+ {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"},
+ {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"},
+ {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"},
+ {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"},
+ {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"},
+ {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"},
+ {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"},
+ {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"},
+ {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"},
+ {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"},
+ {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"},
+ {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"},
+ {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"},
+ {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"},
+ {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"},
+ {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"},
+ {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"},
+ {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"},
+ {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"},
+ {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"},
+ {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"},
+ {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"},
+ {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"},
+ {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"},
+ {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"},
+ {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"},
+ {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"},
+ {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"},
+ {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"},
+ {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"},
+ {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"},
+ {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"},
+ {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"},
+ {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"},
+ {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"},
+ {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"},
+ {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"},
+ {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"},
+ {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"},
+ {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"},
+ {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"},
+ {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"},
+ {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"},
+ {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"},
+ {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"},
+ {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"},
+ {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"},
+ {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"},
+ {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"},
+ {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"},
+]
+
+[[package]]
+name = "regex"
+version = "2024.11.6"
+description = "Alternative regular expression module, to replace re."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"},
+ {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"},
+ {file = "regex-2024.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164d8b7b3b4bcb2068b97428060b2a53be050085ef94eca7f240e7947f1b080e"},
+ {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3660c82f209655a06b587d55e723f0b813d3a7db2e32e5e7dc64ac2a9e86fde"},
+ {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d22326fcdef5e08c154280b71163ced384b428343ae16a5ab2b3354aed12436e"},
+ {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac758ef6aebfc8943560194e9fd0fa18bcb34d89fd8bd2af18183afd8da3a2"},
+ {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:997d6a487ff00807ba810e0f8332c18b4eb8d29463cfb7c820dc4b6e7562d0cf"},
+ {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02a02d2bb04fec86ad61f3ea7f49c015a0681bf76abb9857f945d26159d2968c"},
+ {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f02f93b92358ee3f78660e43b4b0091229260c5d5c408d17d60bf26b6c900e86"},
+ {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06eb1be98df10e81ebaded73fcd51989dcf534e3c753466e4b60c4697a003b67"},
+ {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:040df6fe1a5504eb0f04f048e6d09cd7c7110fef851d7c567a6b6e09942feb7d"},
+ {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabbfc59f2c6edba2a6622c647b716e34e8e3867e0ab975412c5c2f79b82da2"},
+ {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8447d2d39b5abe381419319f942de20b7ecd60ce86f16a23b0698f22e1b70008"},
+ {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:da8f5fc57d1933de22a9e23eec290a0d8a5927a5370d24bda9a6abe50683fe62"},
+ {file = "regex-2024.11.6-cp310-cp310-win32.whl", hash = "sha256:b489578720afb782f6ccf2840920f3a32e31ba28a4b162e13900c3e6bd3f930e"},
+ {file = "regex-2024.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:5071b2093e793357c9d8b2929dfc13ac5f0a6c650559503bb81189d0a3814519"},
+ {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638"},
+ {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7"},
+ {file = "regex-2024.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20"},
+ {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114"},
+ {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3"},
+ {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f"},
+ {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0"},
+ {file = "regex-2024.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55"},
+ {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89"},
+ {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d"},
+ {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34"},
+ {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d"},
+ {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45"},
+ {file = "regex-2024.11.6-cp311-cp311-win32.whl", hash = "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9"},
+ {file = "regex-2024.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60"},
+ {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a"},
+ {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9"},
+ {file = "regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2"},
+ {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4"},
+ {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577"},
+ {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3"},
+ {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e"},
+ {file = "regex-2024.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe"},
+ {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e"},
+ {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29"},
+ {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39"},
+ {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51"},
+ {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad"},
+ {file = "regex-2024.11.6-cp312-cp312-win32.whl", hash = "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54"},
+ {file = "regex-2024.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b"},
+ {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84"},
+ {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4"},
+ {file = "regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0"},
+ {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0"},
+ {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7"},
+ {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7"},
+ {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c"},
+ {file = "regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3"},
+ {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07"},
+ {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e"},
+ {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6"},
+ {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4"},
+ {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d"},
+ {file = "regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff"},
+ {file = "regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a"},
+ {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3a51ccc315653ba012774efca4f23d1d2a8a8f278a6072e29c7147eee7da446b"},
+ {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ad182d02e40de7459b73155deb8996bbd8e96852267879396fb274e8700190e3"},
+ {file = "regex-2024.11.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba9b72e5643641b7d41fa1f6d5abda2c9a263ae835b917348fc3c928182ad467"},
+ {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40291b1b89ca6ad8d3f2b82782cc33807f1406cf68c8d440861da6304d8ffbbd"},
+ {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdf58d0e516ee426a48f7b2c03a332a4114420716d55769ff7108c37a09951bf"},
+ {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a36fdf2af13c2b14738f6e973aba563623cb77d753bbbd8d414d18bfaa3105dd"},
+ {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1cee317bfc014c2419a76bcc87f071405e3966da434e03e13beb45f8aced1a6"},
+ {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50153825ee016b91549962f970d6a4442fa106832e14c918acd1c8e479916c4f"},
+ {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea1bfda2f7162605f6e8178223576856b3d791109f15ea99a9f95c16a7636fb5"},
+ {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:df951c5f4a1b1910f1a99ff42c473ff60f8225baa1cdd3539fe2819d9543e9df"},
+ {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:072623554418a9911446278f16ecb398fb3b540147a7828c06e2011fa531e773"},
+ {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f654882311409afb1d780b940234208a252322c24a93b442ca714d119e68086c"},
+ {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:89d75e7293d2b3e674db7d4d9b1bee7f8f3d1609428e293771d1a962617150cc"},
+ {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:f65557897fc977a44ab205ea871b690adaef6b9da6afda4790a2484b04293a5f"},
+ {file = "regex-2024.11.6-cp38-cp38-win32.whl", hash = "sha256:6f44ec28b1f858c98d3036ad5d7d0bfc568bdd7a74f9c24e25f41ef1ebfd81a4"},
+ {file = "regex-2024.11.6-cp38-cp38-win_amd64.whl", hash = "sha256:bb8f74f2f10dbf13a0be8de623ba4f9491faf58c24064f32b65679b021ed0001"},
+ {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5704e174f8ccab2026bd2f1ab6c510345ae8eac818b613d7d73e785f1310f839"},
+ {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:220902c3c5cc6af55d4fe19ead504de80eb91f786dc102fbd74894b1551f095e"},
+ {file = "regex-2024.11.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7e351589da0850c125f1600a4c4ba3c722efefe16b297de54300f08d734fbf"},
+ {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5056b185ca113c88e18223183aa1a50e66507769c9640a6ff75859619d73957b"},
+ {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e34b51b650b23ed3354b5a07aab37034d9f923db2a40519139af34f485f77d0"},
+ {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5670bce7b200273eee1840ef307bfa07cda90b38ae56e9a6ebcc9f50da9c469b"},
+ {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08986dce1339bc932923e7d1232ce9881499a0e02925f7402fb7c982515419ef"},
+ {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93c0b12d3d3bc25af4ebbf38f9ee780a487e8bf6954c115b9f015822d3bb8e48"},
+ {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:764e71f22ab3b305e7f4c21f1a97e1526a25ebdd22513e251cf376760213da13"},
+ {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f056bf21105c2515c32372bbc057f43eb02aae2fda61052e2f7622c801f0b4e2"},
+ {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:69ab78f848845569401469da20df3e081e6b5a11cb086de3eed1d48f5ed57c95"},
+ {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:86fddba590aad9208e2fa8b43b4c098bb0ec74f15718bb6a704e3c63e2cef3e9"},
+ {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:684d7a212682996d21ca12ef3c17353c021fe9de6049e19ac8481ec35574a70f"},
+ {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a03e02f48cd1abbd9f3b7e3586d97c8f7a9721c436f51a5245b3b9483044480b"},
+ {file = "regex-2024.11.6-cp39-cp39-win32.whl", hash = "sha256:41758407fc32d5c3c5de163888068cfee69cb4c2be844e7ac517a52770f9af57"},
+ {file = "regex-2024.11.6-cp39-cp39-win_amd64.whl", hash = "sha256:b2837718570f95dd41675328e111345f9b7095d821bac435aac173ac80b19983"},
+ {file = "regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519"},
+]
+
[[package]]
name = "requests"
version = "2.32.3"
@@ -811,6 +1060,17 @@ requests = ">=2.0.0"
[package.extras]
rsa = ["oauthlib[signedtoken] (>=3.0.0)"]
+[[package]]
+name = "six"
+version = "1.16.0"
+description = "Python 2 and 3 compatibility utilities"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
+files = [
+ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
+ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
+]
+
[[package]]
name = "sqlparse"
version = "0.5.2"
@@ -826,6 +1086,27 @@ files = [
dev = ["build", "hatch"]
doc = ["sphinx"]
+[[package]]
+name = "tqdm"
+version = "4.67.1"
+description = "Fast, Extensible Progress Meter"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"},
+ {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"},
+]
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+
+[package.extras]
+dev = ["nbval", "pytest (>=6)", "pytest-asyncio (>=0.24)", "pytest-cov", "pytest-timeout"]
+discord = ["requests"]
+notebook = ["ipywidgets (>=6)"]
+slack = ["slack-sdk"]
+telegram = ["requests"]
+
[[package]]
name = "types-pyyaml"
version = "6.0.12.20240917"
@@ -876,40 +1157,7 @@ h2 = ["h2 (>=4,<5)"]
socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"]
zstd = ["zstandard (>=0.18.0)"]
-[[package]]
-name = "uvicorn"
-version = "0.32.1"
-description = "The lightning-fast ASGI server."
-optional = false
-python-versions = ">=3.8"
-files = [
- {file = "uvicorn-0.32.1-py3-none-any.whl", hash = "sha256:82ad92fd58da0d12af7482ecdb5f2470a04c9c9a53ced65b9bbb4a205377602e"},
- {file = "uvicorn-0.32.1.tar.gz", hash = "sha256:ee9519c246a72b1c084cea8d3b44ed6026e78a4a309cbedae9c37e4cb9fbb175"},
-]
-
-[package.dependencies]
-click = ">=7.0"
-h11 = ">=0.8"
-
-[package.extras]
-standard = ["colorama (>=0.4)", "httptools (>=0.6.3)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"]
-
-[[package]]
-name = "uvicorn-worker"
-version = "0.2.0"
-description = "Uvicorn worker for Gunicorn! ✨"
-optional = false
-python-versions = ">=3.8"
-files = [
- {file = "uvicorn_worker-0.2.0-py3-none-any.whl", hash = "sha256:65dcef25ab80a62e0919640f9582216ee05b3bb1dc2f0e58b354ca0511c398fb"},
- {file = "uvicorn_worker-0.2.0.tar.gz", hash = "sha256:f6894544391796be6eeed37d48cae9d7739e5a105f7e37061eccef2eac5a0295"},
-]
-
-[package.dependencies]
-gunicorn = ">=20.1.0"
-uvicorn = ">=0.14.0"
-
[metadata]
lock-version = "2.0"
python-versions = "^3.12"
-content-hash = "a469b765e346d3759fd0995215051afaa141e0ddf4fb967e88df5e87dabd56d2"
+content-hash = "b6a1e4f297c97ec3cfa8b4e89d67034e06f3f1a67a72006f1b438770781d43d2"
diff --git a/tvdt/pyproject.toml b/tvdt/pyproject.toml
index 483a244..5e7c24d 100644
--- a/tvdt/pyproject.toml
+++ b/tvdt/pyproject.toml
@@ -16,9 +16,9 @@ psycopg2 = "^2.9.10"
mypy = "^1.11.0"
black = "^24.10.0"
isort = "^5.13.2"
+djlint = "^1.36.3"
[tool.poetry.group.prod.dependencies]
-uvicorn-worker = "^0.2.0"
gunicorn = "^23.0.0"
[tool.isort]
@@ -29,3 +29,6 @@ plugins = ["mypy_django_plugin.main"]
[tool.django-stubs]
django_settings_module = "tvdt.settings"
+
+[tool.djlint]
+profile="django"
diff --git a/tvdt/quiz/admin.py b/tvdt/quiz/admin.py
index b3ec7f3..2057a5d 100644
--- a/tvdt/quiz/admin.py
+++ b/tvdt/quiz/admin.py
@@ -1,6 +1,6 @@
from django.contrib import admin
-from .models import Answer, Candidate, GivenAnswer, Question, Quiz, Season
+from .models import Answer, Candidate, Correction, GivenAnswer, Question, Quiz, Season
class CandidatesAdmin(admin.StackedInline):
@@ -30,6 +30,8 @@ class AnswerInline(admin.TabularInline):
@admin.register(Question)
class QuestionAdmin(admin.ModelAdmin):
+ list_display = ["question", "quiz__season__name", "quiz__name", "_order"]
+ ordering = ["quiz__season", "quiz", "_order"]
inlines = [AnswerInline]
@@ -41,3 +43,8 @@ class CandidateAdmin(admin.ModelAdmin):
@admin.register(GivenAnswer)
class GivenAnswerAdmin(admin.ModelAdmin):
pass
+
+
+@admin.register(Correction)
+class CorrextionAdmin(admin.ModelAdmin):
+ pass
diff --git a/tvdt/quiz/context_processors.py b/tvdt/quiz/context_processors.py
new file mode 100644
index 0000000..6c84987
--- /dev/null
+++ b/tvdt/quiz/context_processors.py
@@ -0,0 +1,2 @@
+def get_theme(request) -> dict:
+ return {"theme": "wie_is_de_mol"}
diff --git a/tvdt/quiz/converters.py b/tvdt/quiz/converters.py
index 00e213c..ef47a91 100644
--- a/tvdt/quiz/converters.py
+++ b/tvdt/quiz/converters.py
@@ -16,7 +16,7 @@ class CandidateConverter:
raise ValueError
try:
- season = Season.objects.aget(season_code=season_code)
+ season = Season.objects.get(season_code=season_code)
candidate = Candidate.objects.get(name=name, season=season)
return candidate
diff --git a/tvdt/quiz/fixtures/krtek.json b/tvdt/quiz/fixtures/krtek.json
index 8419a50..4360c3b 100644
--- a/tvdt/quiz/fixtures/krtek.json
+++ b/tvdt/quiz/fixtures/krtek.json
@@ -890,6 +890,864 @@
"candidates": []
}
},
+{
+ "model": "quiz.answer",
+ "pk": 83,
+ "fields": {
+ "text": "Man",
+ "question": 16,
+ "is_right_answer": false,
+ "_order": 1,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 84,
+ "fields": {
+ "text": "Vrouw",
+ "question": 16,
+ "is_right_answer": true,
+ "_order": 2,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 85,
+ "fields": {
+ "text": "Nee",
+ "question": 17,
+ "is_right_answer": false,
+ "_order": 0,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 86,
+ "fields": {
+ "text": "De Krtek is vegetariër",
+ "question": 17,
+ "is_right_answer": true,
+ "_order": 1,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 87,
+ "fields": {
+ "text": "De Krtek is flexitariër",
+ "question": 17,
+ "is_right_answer": false,
+ "_order": 2,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 88,
+ "fields": {
+ "text": "De Krtek heeft een allergie",
+ "question": 17,
+ "is_right_answer": false,
+ "_order": 3,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 89,
+ "fields": {
+ "text": "De Krtek heeft een intolerantie",
+ "question": 17,
+ "is_right_answer": false,
+ "_order": 4,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 90,
+ "fields": {
+ "text": "De Krtek eet geen rundvlees",
+ "question": 17,
+ "is_right_answer": false,
+ "_order": 5,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 91,
+ "fields": {
+ "text": "De Krtek eet geen waterdieren",
+ "question": 17,
+ "is_right_answer": false,
+ "_order": 6,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 92,
+ "fields": {
+ "text": "Amy, Karel en Floyd",
+ "question": 18,
+ "is_right_answer": false,
+ "_order": 0,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 93,
+ "fields": {
+ "text": "Flip en Majoor",
+ "question": 18,
+ "is_right_answer": false,
+ "_order": 1,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 94,
+ "fields": {
+ "text": "Benji",
+ "question": 18,
+ "is_right_answer": false,
+ "_order": 2,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 95,
+ "fields": {
+ "text": "Sini",
+ "question": 18,
+ "is_right_answer": false,
+ "_order": 3,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 96,
+ "fields": {
+ "text": "De huisdieren van de Krtek hebben geen naam",
+ "question": 18,
+ "is_right_answer": false,
+ "_order": 4,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 97,
+ "fields": {
+ "text": "De Krtek heeft geen huisdieren",
+ "question": 18,
+ "is_right_answer": true,
+ "_order": 5,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 98,
+ "fields": {
+ "text": "Koffie",
+ "question": 19,
+ "is_right_answer": false,
+ "_order": 0,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 99,
+ "fields": {
+ "text": "Thee",
+ "question": 19,
+ "is_right_answer": false,
+ "_order": 1,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 100,
+ "fields": {
+ "text": "Water",
+ "question": 19,
+ "is_right_answer": true,
+ "_order": 2,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 101,
+ "fields": {
+ "text": "Melk",
+ "question": 19,
+ "is_right_answer": false,
+ "_order": 3,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 102,
+ "fields": {
+ "text": "Sap",
+ "question": 19,
+ "is_right_answer": false,
+ "_order": 4,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 103,
+ "fields": {
+ "text": "Niks",
+ "question": 19,
+ "is_right_answer": false,
+ "_order": 5,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 104,
+ "fields": {
+ "text": "Denemarken",
+ "question": 20,
+ "is_right_answer": false,
+ "_order": 0,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 105,
+ "fields": {
+ "text": "Drenthe",
+ "question": 20,
+ "is_right_answer": false,
+ "_order": 1,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 106,
+ "fields": {
+ "text": "Mallorca",
+ "question": 20,
+ "is_right_answer": false,
+ "_order": 2,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 107,
+ "fields": {
+ "text": "Marokko",
+ "question": 20,
+ "is_right_answer": false,
+ "_order": 3,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 108,
+ "fields": {
+ "text": "Oostenrijk",
+ "question": 20,
+ "is_right_answer": false,
+ "_order": 4,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 109,
+ "fields": {
+ "text": "Turkije",
+ "question": 20,
+ "is_right_answer": false,
+ "_order": 5,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 110,
+ "fields": {
+ "text": "Zweden",
+ "question": 20,
+ "is_right_answer": true,
+ "_order": 6,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 111,
+ "fields": {
+ "text": "Het eerste groepje",
+ "question": 21,
+ "is_right_answer": true,
+ "_order": 0,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 112,
+ "fields": {
+ "text": "Het tweede groepje",
+ "question": 21,
+ "is_right_answer": false,
+ "_order": 1,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 113,
+ "fields": {
+ "text": "Het derde groepje",
+ "question": 21,
+ "is_right_answer": false,
+ "_order": 2,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 114,
+ "fields": {
+ "text": "Het vierde groepje",
+ "question": 21,
+ "is_right_answer": false,
+ "_order": 3,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 115,
+ "fields": {
+ "text": "Het vijfde groepje",
+ "question": 21,
+ "is_right_answer": false,
+ "_order": 4,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 116,
+ "fields": {
+ "text": "Nee",
+ "question": 22,
+ "is_right_answer": false,
+ "_order": 0,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 117,
+ "fields": {
+ "text": "Het universum",
+ "question": 22,
+ "is_right_answer": true,
+ "_order": 1,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 118,
+ "fields": {
+ "text": "Toeval",
+ "question": 22,
+ "is_right_answer": false,
+ "_order": 2,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 119,
+ "fields": {
+ "text": "De Krtek is hindoeïstisch",
+ "question": 22,
+ "is_right_answer": false,
+ "_order": 3,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 120,
+ "fields": {
+ "text": "Ja",
+ "question": 23,
+ "is_right_answer": true,
+ "_order": 0,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 121,
+ "fields": {
+ "text": "Nee",
+ "question": 23,
+ "is_right_answer": false,
+ "_order": 1,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 122,
+ "fields": {
+ "text": "Tussen 0:00 en 0:59 uur",
+ "question": 24,
+ "is_right_answer": false,
+ "_order": 0,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 123,
+ "fields": {
+ "text": "Tussen 1:00 en 1:59 uur",
+ "question": 24,
+ "is_right_answer": true,
+ "_order": 1,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 124,
+ "fields": {
+ "text": "Tussen 2:00 en 2:59 uur",
+ "question": 24,
+ "is_right_answer": false,
+ "_order": 2,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 125,
+ "fields": {
+ "text": "Na 3:00",
+ "question": 24,
+ "is_right_answer": false,
+ "_order": 3,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 126,
+ "fields": {
+ "text": "1",
+ "question": 25,
+ "is_right_answer": false,
+ "_order": 0,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 127,
+ "fields": {
+ "text": "2",
+ "question": 25,
+ "is_right_answer": false,
+ "_order": 1,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 128,
+ "fields": {
+ "text": "3",
+ "question": 25,
+ "is_right_answer": false,
+ "_order": 2,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 129,
+ "fields": {
+ "text": "Geen",
+ "question": 25,
+ "is_right_answer": true,
+ "_order": 3,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 130,
+ "fields": {
+ "text": "Digimon",
+ "question": 26,
+ "is_right_answer": true,
+ "_order": 0,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 131,
+ "fields": {
+ "text": "Floris",
+ "question": 26,
+ "is_right_answer": false,
+ "_order": 1,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 132,
+ "fields": {
+ "text": "Het huis Anubis",
+ "question": 26,
+ "is_right_answer": false,
+ "_order": 2,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 133,
+ "fields": {
+ "text": "Sesamstraat",
+ "question": 26,
+ "is_right_answer": false,
+ "_order": 3,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 134,
+ "fields": {
+ "text": "Spongebob Squarepants",
+ "question": 26,
+ "is_right_answer": false,
+ "_order": 4,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 135,
+ "fields": {
+ "text": "Teletubbies",
+ "question": 26,
+ "is_right_answer": false,
+ "_order": 5,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 136,
+ "fields": {
+ "text": "In koffer(s)",
+ "question": 27,
+ "is_right_answer": true,
+ "_order": 0,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 137,
+ "fields": {
+ "text": "In losse tas(sen)",
+ "question": 27,
+ "is_right_answer": false,
+ "_order": 1,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 138,
+ "fields": {
+ "text": "In een rugzak",
+ "question": 27,
+ "is_right_answer": false,
+ "_order": 2,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 139,
+ "fields": {
+ "text": "Een vork die door een metalen pan krast",
+ "question": 28,
+ "is_right_answer": false,
+ "_order": 0,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 140,
+ "fields": {
+ "text": "Smakkende mensen",
+ "question": 28,
+ "is_right_answer": false,
+ "_order": 1,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 141,
+ "fields": {
+ "text": "Een vork die over een bord schraapt",
+ "question": 28,
+ "is_right_answer": false,
+ "_order": 2,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 142,
+ "fields": {
+ "text": "Schuren met schuurpapier",
+ "question": 28,
+ "is_right_answer": false,
+ "_order": 3,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 143,
+ "fields": {
+ "text": "Nagels op een krijtbord",
+ "question": 28,
+ "is_right_answer": false,
+ "_order": 4,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 144,
+ "fields": {
+ "text": "Servies dat tegen elkaar klettert",
+ "question": 28,
+ "is_right_answer": false,
+ "_order": 5,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 145,
+ "fields": {
+ "text": "Het geroekoe van een duif",
+ "question": 28,
+ "is_right_answer": true,
+ "_order": 6,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 146,
+ "fields": {
+ "text": "Piepschuim",
+ "question": 28,
+ "is_right_answer": false,
+ "_order": 7,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 147,
+ "fields": {
+ "text": "Ja",
+ "question": 29,
+ "is_right_answer": false,
+ "_order": 0,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 148,
+ "fields": {
+ "text": "Nee",
+ "question": 29,
+ "is_right_answer": true,
+ "_order": 1,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 149,
+ "fields": {
+ "text": "Claudia",
+ "question": 30,
+ "is_right_answer": true,
+ "_order": 0,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 150,
+ "fields": {
+ "text": "Eelco",
+ "question": 30,
+ "is_right_answer": false,
+ "_order": 1,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 151,
+ "fields": {
+ "text": "Elise",
+ "question": 30,
+ "is_right_answer": false,
+ "_order": 2,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 152,
+ "fields": {
+ "text": "Gert-Jan",
+ "question": 30,
+ "is_right_answer": false,
+ "_order": 3,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 153,
+ "fields": {
+ "text": "Iris",
+ "question": 30,
+ "is_right_answer": false,
+ "_order": 4,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 154,
+ "fields": {
+ "text": "Jari",
+ "question": 30,
+ "is_right_answer": false,
+ "_order": 5,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 155,
+ "fields": {
+ "text": "Lara",
+ "question": 30,
+ "is_right_answer": false,
+ "_order": 6,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 156,
+ "fields": {
+ "text": "Lotte",
+ "question": 30,
+ "is_right_answer": false,
+ "_order": 7,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 157,
+ "fields": {
+ "text": "Myrthe",
+ "question": 30,
+ "is_right_answer": false,
+ "_order": 8,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 158,
+ "fields": {
+ "text": "Remy",
+ "question": 30,
+ "is_right_answer": false,
+ "_order": 9,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 159,
+ "fields": {
+ "text": "Robbert",
+ "question": 30,
+ "is_right_answer": false,
+ "_order": 10,
+ "candidates": []
+ }
+},
+{
+ "model": "quiz.answer",
+ "pk": 160,
+ "fields": {
+ "text": "Tom",
+ "question": 30,
+ "is_right_answer": false,
+ "_order": 11,
+ "candidates": []
+ }
+},
{
"model": "quiz.question",
"pk": 1,
@@ -1040,6 +1898,156 @@
"_order": 14
}
},
+{
+ "model": "quiz.question",
+ "pk": 16,
+ "fields": {
+ "question": "Is de Krtek een man of een vrouw?",
+ "quiz": 2,
+ "enabled": true,
+ "_order": 0
+ }
+},
+{
+ "model": "quiz.question",
+ "pk": 17,
+ "fields": {
+ "question": "Heeft de Krtek dieetwensen of allergieën?",
+ "quiz": 2,
+ "enabled": true,
+ "_order": 1
+ }
+},
+{
+ "model": "quiz.question",
+ "pk": 18,
+ "fields": {
+ "question": "Hoe heet het huisdier/de huisdieren van de Krtek?",
+ "quiz": 2,
+ "enabled": true,
+ "_order": 2
+ }
+},
+{
+ "model": "quiz.question",
+ "pk": 19,
+ "fields": {
+ "question": "Wat dronk de Krtek deze ochtend bij het ontbijt?",
+ "quiz": 2,
+ "enabled": true,
+ "_order": 3
+ }
+},
+{
+ "model": "quiz.question",
+ "pk": 20,
+ "fields": {
+ "question": "Waar ging de eerste vakantie die de Krtek zich nog herinnert heen?",
+ "quiz": 2,
+ "enabled": true,
+ "_order": 4
+ }
+},
+{
+ "model": "quiz.question",
+ "pk": 21,
+ "fields": {
+ "question": "Met welk groepje ging de Krtek als eerste het Douanespel in?",
+ "quiz": 2,
+ "enabled": true,
+ "_order": 5
+ }
+},
+{
+ "model": "quiz.question",
+ "pk": 22,
+ "fields": {
+ "question": "Gelooft de Krtek ergens in?",
+ "quiz": 2,
+ "enabled": true,
+ "_order": 6
+ }
+},
+{
+ "model": "quiz.question",
+ "pk": 23,
+ "fields": {
+ "question": "At de Krtek op vrijdagavond heksenkaas tijdens het diner?",
+ "quiz": 2,
+ "enabled": true,
+ "_order": 7
+ }
+},
+{
+ "model": "quiz.question",
+ "pk": 24,
+ "fields": {
+ "question": "Hoe laat ging de Krtek gisteravond naar bed?",
+ "quiz": 2,
+ "enabled": true,
+ "_order": 8
+ }
+},
+{
+ "model": "quiz.question",
+ "pk": 25,
+ "fields": {
+ "question": "Hoeveel batterijen heeft de krtek naar het bord gebracht bij het douanespel?",
+ "quiz": 2,
+ "enabled": true,
+ "_order": 9
+ }
+},
+{
+ "model": "quiz.question",
+ "pk": 26,
+ "fields": {
+ "question": "Wat keek de Krtek als kind graag op TV?",
+ "quiz": 2,
+ "enabled": true,
+ "_order": 10
+ }
+},
+{
+ "model": "quiz.question",
+ "pk": 27,
+ "fields": {
+ "question": "Waarin zat op de heenreis de bagage van de Krtek (voornamelijk)?",
+ "quiz": 2,
+ "enabled": true,
+ "_order": 11
+ }
+},
+{
+ "model": "quiz.question",
+ "pk": 28,
+ "fields": {
+ "question": "Van welk geluid gaan de haren van de Krtek overeind staan?",
+ "quiz": 2,
+ "enabled": true,
+ "_order": 12
+ }
+},
+{
+ "model": "quiz.question",
+ "pk": 29,
+ "fields": {
+ "question": "Wilde de Krtek penningmeester worden?",
+ "quiz": 2,
+ "enabled": true,
+ "_order": 13
+ }
+},
+{
+ "model": "quiz.question",
+ "pk": 30,
+ "fields": {
+ "question": "Wie is de Krtek?",
+ "quiz": 2,
+ "enabled": true,
+ "_order": 14
+ }
+},
{
"model": "quiz.candidate",
"pk": 1,
@@ -1168,6 +2176,14 @@
"season": 1
}
},
+{
+ "model": "quiz.quiz",
+ "pk": 2,
+ "fields": {
+ "name": "Test 2",
+ "season": 1
+ }
+},
{
"model": "quiz.season",
"pk": 1,
@@ -1175,7 +2191,8 @@
"name": "Krtek",
"active_quiz": 1,
"season_code": "12345",
- "preregister_candidates": true
+ "preregister_candidates": true,
+ "owner": []
}
}
]
diff --git a/tvdt/quiz/locale/nl/LC_MESSAGES/django.po b/tvdt/quiz/locale/nl/LC_MESSAGES/django.po
index 20884a6..5f1c4f1 100644
--- a/tvdt/quiz/locale/nl/LC_MESSAGES/django.po
+++ b/tvdt/quiz/locale/nl/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-11-25 19:18+0100\n"
+"POT-Creation-Date: 2024-12-11 23:22+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -19,36 +19,36 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: quiz/apps.py:8 quiz/models/correction.py:17 quiz/models/given_answer.py:19
-#: quiz/models/question.py:20 quiz/models/quiz.py:24
+#: quiz/models/question.py:23 quiz/models/quiz.py:60
msgid "quiz"
msgstr "test"
-#: quiz/models/answer.py:7
+#: quiz/models/answer.py:10
msgid "text"
msgstr "tekst"
-#: quiz/models/answer.py:12 quiz/models/question.py:15
-#: quiz/models/question.py:28
+#: quiz/models/answer.py:15 quiz/models/question.py:18
+#: quiz/models/question.py:58
msgid "question"
msgstr "vraag"
-#: quiz/models/answer.py:14
+#: quiz/models/answer.py:17
msgid "is right answer"
msgstr "is goede antwoord"
-#: quiz/models/answer.py:16 quiz/models/candidate.py:50
+#: quiz/models/answer.py:19 quiz/models/candidate.py:50
msgid "candidates"
msgstr "kandidaten"
-#: quiz/models/answer.py:20 quiz/models/given_answer.py:25
+#: quiz/models/answer.py:23 quiz/models/given_answer.py:25
msgid "answer"
msgstr "antwoord"
-#: quiz/models/answer.py:21
+#: quiz/models/answer.py:24
msgid "answers"
msgstr "antwoorden"
-#: quiz/models/candidate.py:18 quiz/models/quiz.py:7 quiz/models/season.py:12
+#: quiz/models/candidate.py:18 quiz/models/quiz.py:12 quiz/models/season.py:12
msgid "name"
msgstr "naam"
@@ -57,11 +57,15 @@ msgstr "naam"
msgid "candidate"
msgstr "kandidaat"
-#: quiz/models/correction.py:22
+#: quiz/models/correction.py:19
+msgid "amount"
+msgstr "aantal"
+
+#: quiz/models/correction.py:23
msgid "correction"
msgstr "joker"
-#: quiz/models/correction.py:23
+#: quiz/models/correction.py:24
msgid "corrections"
msgstr "jokers"
@@ -73,19 +77,35 @@ msgstr "gegeven antwoord"
msgid "given answers"
msgstr "gegeven antwoorden"
-#: quiz/models/question.py:22
+#: quiz/models/question.py:25
msgid "enabled"
msgstr "actief"
-#: quiz/models/question.py:29
+#: quiz/models/question.py:42
+msgid "Error: Question has no answers"
+msgstr "Fout: Raar genoeg heeft deze vraag geen antwoorden..."
+
+#: quiz/models/question.py:47
+msgid "Error: This question has no right answer!"
+msgstr "Fout: Raar genoeg heeft deze vraag geen antwoorden..."
+
+#: quiz/models/question.py:50
+msgid "Warning: This question has multiple correct answers"
+msgstr "Waarschuwing: Raar genoeg heeft deze vraag geen antwoorden..."
+
+#: quiz/models/question.py:59
msgid "questions"
msgstr "vraag"
-#: quiz/models/quiz.py:12 quiz/models/season.py:38
+#: quiz/models/quiz.py:17 quiz/models/season.py:43
msgid "season"
msgstr "seizoen"
-#: quiz/models/quiz.py:25
+#: quiz/models/quiz.py:21
+msgid "dropouts"
+msgstr "afvallers"
+
+#: quiz/models/quiz.py:61
msgid "quizzes"
msgstr "tests"
@@ -101,27 +121,31 @@ msgstr "seizoencode"
msgid "preregister candidates"
msgstr "kandidaten voorregistreren"
-#: quiz/models/season.py:39
+#: quiz/models/season.py:30
+msgid "owners"
+msgstr "eigenaren"
+
+#: quiz/models/season.py:44
msgid "seasons"
msgstr "seizoenen"
-#: quiz/templates/quiz/question.html:11
-msgid "Weirdly enough this question has no answers..."
-msgstr "Raar genoeg heeft deze vraag geen antwoorden..."
-
-#: quiz/templates/quiz/select_season.html:4
+#: quiz/templates/quiz/base.html:16
msgid "Tijd voor de test"
msgstr "Tijd voor de test"
-#: quiz/views/enternameview.py:14
+#: quiz/templates/quiz/question.html:15
+msgid "Weirdly enough this question has no answers..."
+msgstr "Raar genoeg heeft deze vraag geen antwoorden..."
+
+#: quiz/views/enternameview.py:15
msgid "Name"
msgstr "Naam"
-#: quiz/views/enternameview.py:27
+#: quiz/views/enternameview.py:28
msgid "This season has no active quiz."
msgstr "Dit seizoen heeft geen actieve test."
-#: quiz/views/enternameview.py:39
+#: quiz/views/enternameview.py:40
msgid "Candidate does not exist"
msgstr "Kandidaat bestaat niet"
diff --git a/tvdt/quiz/migrations/0002_season_owner.py b/tvdt/quiz/migrations/0002_season_owner.py
new file mode 100644
index 0000000..46f11c8
--- /dev/null
+++ b/tvdt/quiz/migrations/0002_season_owner.py
@@ -0,0 +1,24 @@
+# Generated by Django 5.1.3 on 2024-11-30 18:21
+
+from django.conf import settings
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ("quiz", "0001_initial"),
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name="season",
+ name="owner",
+ field=models.ManyToManyField(
+ related_name="seasons",
+ to=settings.AUTH_USER_MODEL,
+ verbose_name="owners",
+ ),
+ ),
+ ]
diff --git a/tvdt/quiz/migrations/0003_correction_amount_alter_correction_candidate_and_more.py b/tvdt/quiz/migrations/0003_correction_amount_alter_correction_candidate_and_more.py
new file mode 100644
index 0000000..56240a2
--- /dev/null
+++ b/tvdt/quiz/migrations/0003_correction_amount_alter_correction_candidate_and_more.py
@@ -0,0 +1,39 @@
+# Generated by Django 5.1.3 on 2024-12-01 14:23
+
+import django.db.models.deletion
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ("quiz", "0002_season_owner"),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name="correction",
+ name="amount",
+ field=models.FloatField(default=1, verbose_name="amount"),
+ ),
+ migrations.AlterField(
+ model_name="correction",
+ name="candidate",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="corrections",
+ to="quiz.candidate",
+ verbose_name="candidate",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="correction",
+ name="quiz",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="corrections",
+ to="quiz.quiz",
+ verbose_name="quiz",
+ ),
+ ),
+ ]
diff --git a/tvdt/quiz/migrations/0004_quiz_dropouts.py b/tvdt/quiz/migrations/0004_quiz_dropouts.py
new file mode 100644
index 0000000..1503e30
--- /dev/null
+++ b/tvdt/quiz/migrations/0004_quiz_dropouts.py
@@ -0,0 +1,18 @@
+# Generated by Django 5.1.3 on 2024-12-01 16:57
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ("quiz", "0003_correction_amount_alter_correction_candidate_and_more"),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name="quiz",
+ name="dropouts",
+ field=models.PositiveSmallIntegerField(default=1, verbose_name="dropouts"),
+ ),
+ ]
diff --git a/tvdt/quiz/models/answer.py b/tvdt/quiz/models/answer.py
index f92af4f..5cb12a0 100644
--- a/tvdt/quiz/models/answer.py
+++ b/tvdt/quiz/models/answer.py
@@ -1,8 +1,11 @@
+from typing import final
+
from django.db import models
from django.utils.translation import gettext_lazy as _
from django_stubs_ext.db.models import TypedModelMeta
+@final
class Answer(models.Model):
text = models.CharField(max_length=64, verbose_name=_("text"))
question = models.ForeignKey(
diff --git a/tvdt/quiz/models/correction.py b/tvdt/quiz/models/correction.py
index 3575c1d..eed4a57 100644
--- a/tvdt/quiz/models/correction.py
+++ b/tvdt/quiz/models/correction.py
@@ -7,15 +7,16 @@ class Correction(models.Model):
candidate = models.ForeignKey(
"Candidate",
on_delete=models.CASCADE,
- related_name="corrections_used",
+ related_name="corrections",
verbose_name=_("candidate"),
)
quiz = models.ForeignKey(
"Quiz",
on_delete=models.CASCADE,
- related_name="corrections_used",
+ related_name="corrections",
verbose_name=_("quiz"),
)
+ amount = models.FloatField(verbose_name=_("amount"), default=1)
class Meta(TypedModelMeta):
unique_together = ("candidate", "quiz")
diff --git a/tvdt/quiz/models/question.py b/tvdt/quiz/models/question.py
index 87e55e0..8b961d3 100644
--- a/tvdt/quiz/models/question.py
+++ b/tvdt/quiz/models/question.py
@@ -1,7 +1,10 @@
from django.db import models
+from django.db.models import QuerySet
from django.utils.translation import gettext_lazy as _
from django_stubs_ext.db.models import TypedModelMeta
+from quiz.models import Answer
+
class NoActiveTestForSeason(Exception):
pass
@@ -21,6 +24,33 @@ class Question(models.Model):
)
enabled = models.BooleanField(default=True, verbose_name=_("enabled"))
+ @property
+ def order(self):
+ return self._order
+
+ @property
+ def right_answer(self) -> QuerySet[Answer]:
+ return self.answers.filter(is_right_answer=True)
+
+ @property
+ def has_right_answer(self) -> bool:
+ return self.answers.filter(is_right_answer=True).count() > 0
+
+ @property
+ def errors(self) -> str | None:
+ if self.answers.count() == 0:
+ return _("Error: Question has no answers")
+
+ n_correct_answers = self.answers.filter(is_right_answer=True).count()
+
+ if n_correct_answers == 0:
+ return _("Error: This question has no right answer!")
+
+ if n_correct_answers > 1:
+ return _("Warning: This question has multiple correct answers")
+
+ return None
+
def __str__(self) -> str:
return f"{self._order + 1}. {self.question} ({self.quiz}) ({self.answers.count()} answers, {self.answers.filter(is_right_answer=True).count()} correct)"
diff --git a/tvdt/quiz/models/quiz.py b/tvdt/quiz/models/quiz.py
index 7812fe8..ded9c1e 100644
--- a/tvdt/quiz/models/quiz.py
+++ b/tvdt/quiz/models/quiz.py
@@ -1,7 +1,12 @@
from django.db import models
+from django.db.models import F, OuterRef, Subquery
+from django.db.models.aggregates import Count, Max, Min
+from django.db.models.functions import Coalesce
from django.utils.translation import gettext_lazy as _
from django_stubs_ext.db.models import TypedModelMeta
+from quiz.models import Candidate, Correction
+
class Quiz(models.Model):
name = models.CharField(max_length=64, verbose_name=_("name"))
@@ -12,11 +17,42 @@ class Quiz(models.Model):
verbose_name=_("season"),
)
+ dropouts = models.PositiveSmallIntegerField(
+ verbose_name=_("dropouts"),
+ default=1,
+ )
+
def is_valid_quiz(self) -> bool:
return True
# Check > 0 active questions
# Check every question 1 right answer
+ def get_score(self):
+ time_query = (
+ Candidate.objects.filter(id=OuterRef("id"), answers__quiz=self)
+ .annotate(time=Max("answers__created") - Min("answers__created"))
+ .values("time")
+ )
+ corrections = Correction.objects.filter(
+ quiz=self, candidate=OuterRef("id")
+ ).values("amount")
+
+ scores = (
+ Candidate.objects.filter(
+ answers__answer__is_right_answer=True,
+ answers__quiz=self,
+ )
+ .values("id", "name")
+ .annotate(
+ correct=Count("answers"),
+ corrections=Coalesce(Subquery(corrections), 0.0),
+ score=F("correct") + F("corrections"),
+ time=Subquery(time_query),
+ )
+ .order_by("-score", "time")
+ )
+ return scores
+
def __str__(self) -> str:
return f"{self.season.name} - {self.name}"
diff --git a/tvdt/quiz/models/season.py b/tvdt/quiz/models/season.py
index 96710cb..1141d86 100644
--- a/tvdt/quiz/models/season.py
+++ b/tvdt/quiz/models/season.py
@@ -1,12 +1,12 @@
-import random
-import string
-
+from django.contrib.auth import get_user_model
from django.db import models
from django.utils.translation import gettext_lazy as _
from django_stubs_ext.db.models import TypedModelMeta
from ..helpers import generate_season_code
+User = get_user_model()
+
class Season(models.Model):
name = models.CharField(max_length=64, verbose_name=_("name"))
@@ -25,6 +25,11 @@ class Season(models.Model):
preregister_candidates = models.BooleanField(
default=True, verbose_name=_("preregister candidates")
)
+ owner = models.ManyToManyField(
+ User,
+ verbose_name=_("owners"),
+ related_name="seasons",
+ )
def renew_season_code(self) -> str:
self.season_code = generate_season_code()
diff --git a/tvdt/quiz/static/quiz/de_mol/background.png b/tvdt/quiz/static/quiz/de_mol/background.png
new file mode 100644
index 0000000000000000000000000000000000000000..3042bd8c9cca1e292ec18f897e73596aea2cdae0
GIT binary patch
literal 330116
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