From 2ec904d8998fc58c3d74c04d56ec8e9d9f27bb69 Mon Sep 17 00:00:00 2001 From: Johan Dahlin Date: Sun, 21 Dec 2025 20:21:58 +0100 Subject: [PATCH] vault backup: 2025-12-21 20:21:58 --- content/.obsidian/workspace.json | 79 ++++-- .../Gamla tentor/2022-01-15/10.md | 2 +- .../Gamla tentor/2022-01-15/11.md | 2 +- .../Gamla tentor/2022-01-15/12.md | 2 +- .../Gamla tentor/2022-01-15/13.md | 2 +- .../Gamla tentor/2022-01-15/14.md | 2 +- .../Gamla tentor/2022-01-15/15.md | 4 +- .../Gamla tentor/2022-01-15/16.md | 2 +- .../Gamla tentor/2022-01-15/17.md | 2 +- .../Gamla tentor/2022-01-15/18.md | 2 +- .../Gamla tentor/2022-01-15/19.md | 2 +- .../Gamla tentor/2022-01-15/2.md | 2 +- .../Gamla tentor/2022-01-15/20.md | 3 +- .../Gamla tentor/2022-01-15/21.md | 2 +- .../Gamla tentor/2022-01-15/22.md | 2 +- .../Gamla tentor/2022-01-15/23.md | 2 +- .../Gamla tentor/2022-01-15/24.md | 7 +- .../Gamla tentor/2022-01-15/25.md | 3 +- .../Gamla tentor/2022-01-15/26.md | 2 +- .../Gamla tentor/2022-01-15/27.md | 2 +- .../Gamla tentor/2022-01-15/28.md | 2 +- .../Gamla tentor/2022-01-15/29.md | 2 +- .../Gamla tentor/2022-01-15/3.md | 3 +- .../Gamla tentor/2022-01-15/30.md | 13 +- .../Gamla tentor/2022-01-15/4.md | 2 +- .../Gamla tentor/2022-01-15/5.md | 2 +- .../Gamla tentor/2022-01-15/6.md | 2 +- .../Gamla tentor/2022-01-15/7.md | 2 +- .../Gamla tentor/2022-01-15/8.md | 4 +- .../Gamla tentor/2022-01-15/9.md | 2 +- .../Gamla tentor/2022-06-01/1.md | 25 +- .../Gamla tentor/2022-06-01/10.md | 14 +- .../Gamla tentor/2022-06-01/11.md | 16 +- .../Gamla tentor/2022-06-01/12.md | 2 +- .../Gamla tentor/2022-06-01/13.md | 2 +- .../Gamla tentor/2022-06-01/14.md | 4 +- .../Gamla tentor/2022-06-01/15.md | 9 +- .../Gamla tentor/2022-06-01/16.md | 7 +- .../Gamla tentor/2022-06-01/17.md | 2 +- .../Gamla tentor/2022-06-01/18.md | 14 +- .../Gamla tentor/2022-06-01/19.md | 2 +- .../Gamla tentor/2022-06-01/2.md | 2 +- .../Gamla tentor/2022-06-01/20.md | 2 +- .../Gamla tentor/2022-06-01/21.md | 13 +- .../Gamla tentor/2022-06-01/22.md | 6 +- .../Gamla tentor/2022-06-01/23.md | 2 +- .../Gamla tentor/2022-06-01/24.md | 13 +- .../Gamla tentor/2022-06-01/25.md | 2 +- .../Gamla tentor/2022-06-01/26.md | 2 +- .../Gamla tentor/2022-06-01/27.md | 5 +- .../Gamla tentor/2022-06-01/28.md | 8 +- .../Gamla tentor/2022-06-01/29.md | 6 +- .../Gamla tentor/2022-06-01/3.md | 2 +- .../Gamla tentor/2022-06-01/30.md | 16 +- .../Gamla tentor/2022-06-01/4.md | 23 +- .../Gamla tentor/2022-06-01/5.md | 5 +- .../Gamla tentor/2022-06-01/6.md | 5 +- .../Gamla tentor/2022-06-01/7.md | 5 +- .../Gamla tentor/2022-06-01/8.md | 2 +- .../Gamla tentor/2022-06-01/9.md | 2 +- .../Gamla tentor/2023-01-11/1.md | 2 +- .../Gamla tentor/2023-01-11/10.md | 8 +- .../Gamla tentor/2023-01-11/11.md | 4 +- .../Gamla tentor/2023-01-11/12.md | 6 +- .../Gamla tentor/2023-01-11/14.md | 9 +- .../Gamla tentor/2023-01-11/15.md | 5 +- .../Gamla tentor/2023-01-11/16.md | 2 +- .../Gamla tentor/2023-01-11/17.md | 2 +- .../Gamla tentor/2023-01-11/18.md | 28 +- .../Gamla tentor/2023-01-11/19.md | 2 +- .../Gamla tentor/2023-01-11/2.md | 2 +- .../Gamla tentor/2023-01-11/20.md | 2 +- .../Gamla tentor/2023-01-11/21.md | 8 +- .../Gamla tentor/2023-01-11/22.md | 8 +- .../Gamla tentor/2023-01-11/23.md | 8 +- .../Gamla tentor/2023-01-11/24.md | 2 +- .../Gamla tentor/2023-01-11/25.md | 2 +- .../Gamla tentor/2023-01-11/26.md | 2 +- .../Gamla tentor/2023-01-11/27.md | 8 +- .../Gamla tentor/2023-01-11/28.md | 2 +- .../Gamla tentor/2023-01-11/29.md | 8 +- .../Gamla tentor/2023-01-11/3.md | 2 +- .../Gamla tentor/2023-01-11/30.md | 8 +- .../Gamla tentor/2023-01-11/4.md | 2 +- .../Gamla tentor/2023-01-11/5.md | 2 +- .../Gamla tentor/2023-01-11/6.md | 2 +- .../Gamla tentor/2023-01-11/7.md | 2 +- .../Gamla tentor/2023-01-11/8.md | 2 +- .../Gamla tentor/2023-01-11/9.md | 2 +- content/Anatomi & Histologi 2/Statistik.md | 8 +- quiz/IMPLEMENTATION_SUMMARY.md | 143 ++++++++++ quiz/__pycache__/settings.cpython-314.pyc | Bin 0 -> 2034 bytes quiz/db.sqlite3 | Bin 0 -> 77824 bytes quiz/db.sqlite3-shm | Bin 0 -> 32768 bytes quiz/db.sqlite3-wal | Bin 0 -> 4128272 bytes quiz/manage.py | 23 ++ quiz/pyproject.toml | 17 ++ quiz/quiz/__init__.py | 2 + .../quiz/__pycache__/__init__.cpython-314.pyc | Bin 0 -> 222 bytes quiz/quiz/__pycache__/apps.cpython-314.pyc | Bin 0 -> 1095 bytes .../__pycache__/middleware.cpython-314.pyc | Bin 0 -> 1410 bytes quiz/quiz/__pycache__/models.cpython-314.pyc | Bin 0 -> 3884 bytes quiz/quiz/__pycache__/urls.cpython-314.pyc | Bin 0 -> 535 bytes quiz/quiz/__pycache__/views.cpython-314.pyc | Bin 0 -> 3315 bytes quiz/quiz/apps.py | 18 ++ quiz/quiz/management/__init__.py | 2 + .../__pycache__/__init__.cpython-314.pyc | Bin 0 -> 181 bytes quiz/quiz/management/commands/__init__.py | 2 + .../__pycache__/__init__.cpython-314.pyc | Bin 0 -> 177 bytes .../import_questions.cpython-314.pyc | Bin 0 -> 2456 bytes .../management/commands/import_questions.py | 37 +++ quiz/quiz/middleware.py | 21 ++ quiz/quiz/migrations/0001_initial.py | 63 +++++ quiz/quiz/migrations/__init__.py | 1 + .../__pycache__/0001_initial.cpython-314.pyc | Bin 0 -> 3114 bytes .../__pycache__/__init__.cpython-314.pyc | Bin 0 -> 168 bytes quiz/quiz/models.py | 47 ++++ quiz/quiz/urls.py | 11 + quiz/quiz/utils/__init__.py | 0 .../__pycache__/__init__.cpython-314.pyc | Bin 0 -> 163 bytes .../__pycache__/importer.cpython-314.pyc | Bin 0 -> 12256 bytes .../utils/__pycache__/watcher.cpython-314.pyc | Bin 0 -> 9273 bytes quiz/quiz/utils/importer.py | 248 ++++++++++++++++++ quiz/quiz/utils/watcher.py | 132 ++++++++++ quiz/quiz/views.py | 67 +++++ quiz/settings.py | 75 ++++++ quiz/templates/base.html | 21 ++ quiz/templates/index.html | 10 + quiz/templates/partials/complete.html | 6 + quiz/templates/partials/question.html | 14 + quiz/templates/stats.html | 11 + quiz/wsgi.py | 17 ++ 132 files changed, 1283 insertions(+), 233 deletions(-) create mode 100644 quiz/IMPLEMENTATION_SUMMARY.md create mode 100644 quiz/__pycache__/settings.cpython-314.pyc create mode 100644 quiz/db.sqlite3 create mode 100644 quiz/db.sqlite3-shm create mode 100644 quiz/db.sqlite3-wal create mode 100755 quiz/manage.py create mode 100644 quiz/pyproject.toml create mode 100644 quiz/quiz/__init__.py create mode 100644 quiz/quiz/__pycache__/__init__.cpython-314.pyc create mode 100644 quiz/quiz/__pycache__/apps.cpython-314.pyc create mode 100644 quiz/quiz/__pycache__/middleware.cpython-314.pyc create mode 100644 quiz/quiz/__pycache__/models.cpython-314.pyc create mode 100644 quiz/quiz/__pycache__/urls.cpython-314.pyc create mode 100644 quiz/quiz/__pycache__/views.cpython-314.pyc create mode 100644 quiz/quiz/apps.py create mode 100644 quiz/quiz/management/__init__.py create mode 100644 quiz/quiz/management/__pycache__/__init__.cpython-314.pyc create mode 100644 quiz/quiz/management/commands/__init__.py create mode 100644 quiz/quiz/management/commands/__pycache__/__init__.cpython-314.pyc create mode 100644 quiz/quiz/management/commands/__pycache__/import_questions.cpython-314.pyc create mode 100644 quiz/quiz/management/commands/import_questions.py create mode 100644 quiz/quiz/middleware.py create mode 100644 quiz/quiz/migrations/0001_initial.py create mode 100644 quiz/quiz/migrations/__init__.py create mode 100644 quiz/quiz/migrations/__pycache__/0001_initial.cpython-314.pyc create mode 100644 quiz/quiz/migrations/__pycache__/__init__.cpython-314.pyc create mode 100644 quiz/quiz/models.py create mode 100644 quiz/quiz/urls.py create mode 100644 quiz/quiz/utils/__init__.py create mode 100644 quiz/quiz/utils/__pycache__/__init__.cpython-314.pyc create mode 100644 quiz/quiz/utils/__pycache__/importer.cpython-314.pyc create mode 100644 quiz/quiz/utils/__pycache__/watcher.cpython-314.pyc create mode 100644 quiz/quiz/utils/importer.py create mode 100644 quiz/quiz/utils/watcher.py create mode 100644 quiz/quiz/views.py create mode 100644 quiz/settings.py create mode 100644 quiz/templates/base.html create mode 100644 quiz/templates/index.html create mode 100644 quiz/templates/partials/complete.html create mode 100644 quiz/templates/partials/question.html create mode 100644 quiz/templates/stats.html create mode 100644 quiz/wsgi.py diff --git a/content/.obsidian/workspace.json b/content/.obsidian/workspace.json index 2b7f89e..3a84831 100644 --- a/content/.obsidian/workspace.json +++ b/content/.obsidian/workspace.json @@ -23,6 +23,26 @@ } } ] + }, + { + "id": "a3f459e33e387813", + "type": "tabs", + "children": [ + { + "id": "088f03735e333992", + "type": "leaf", + "pinned": true, + "state": { + "type": "pdf", + "state": { + "file": "Anatomi & Histologi 2/Gamla tentor/2023-01-11/!2023-01-11-0044-PRX.pdf" + }, + "pinned": true, + "icon": "lucide-file-text", + "title": "!2023-01-11-0044-PRX" + } + } + ] } ], "direction": "vertical" @@ -174,7 +194,8 @@ } ], "direction": "horizontal", - "width": 212.5 + "width": 212.5, + "collapsed": true }, "left-ribbon": { "hiddenItems": { @@ -192,37 +213,39 @@ }, "active": "baa45c5e57825965", "lastOpenFiles": [ - "Anatomi & Histologi 2/Schema.md", + "Anatomi & Histologi 2/Gamla tentor/2023-01-11/1.md", + "Anatomi & Histologi 2/Gamla tentor/2023-05-31/1.md", "Anatomi & Histologi 2/Statistik.md", - "Anatomi & Histologi 2/Gamla tentor/2024-01-10/1.md", - "Anatomi & Histologi 2/Gamla tentor/2025-08-08/31.md", - "Anatomi & Histologi 2/Gamla tentor/2025-08-08/30.md", - "Anatomi & Histologi 2/Gamla tentor/2025-08-08/29.md", - "Anatomi & Histologi 2/Gamla tentor/2025-08-08/28.md", - "Anatomi & Histologi 2/Gamla tentor/2025-08-08/27.md", - "Anatomi & Histologi 2/Gamla tentor/2025-08-08/26.md", - "Anatomi & Histologi 2/Gamla tentor/2025-08-08/25.md", - "Anatomi & Histologi 2/Gamla tentor/2025-08-08/24.md", - "Anatomi & Histologi 2/Gamla tentor/2025-08-08/23.md", - "Anatomi & Histologi 2/Gamla tentor/2025-08-08/22.md", - "Anatomi & Histologi 2/Gamla tentor/2025-08-08/21.md", - "Anatomi & Histologi 2/Gamla tentor/2025-08-08/20.md", - "Anatomi & Histologi 2/Gamla tentor/2025-08-08/19.md", - "Anatomi & Histologi 2/Gamla tentor/2025-08-08/18.md", - "Anatomi & Histologi 2/Gamla tentor/2025-08-08/17.md", - "Anatomi & Histologi 2/Gamla tentor/2025-08-08/16.md", - "Anatomi & Histologi 2/Gamla tentor/2025-08-08/15.md", - "Anatomi & Histologi 2/Gamla tentor/2025-08-08/14.md", - "Anatomi & Histologi 2/Gamla tentor/2025-08-08/13.md", - "Anatomi & Histologi 2/Gamla tentor/2025-08-08/12.md", - "Anatomi & Histologi 2/Gamla tentor/2025-08-08/11.md", - "Anatomi & Histologi 2/Gamla tentor/2025-08-08/10.md", - "Anatomi & Histologi 2/Gamla tentor/2025-08-08/9.md", + "Anatomi & Histologi 2/Gamla tentor/2023-01-11/29.md", + "Anatomi & Histologi 2/Gamla tentor/2023-01-11/30.md", + "Anatomi & Histologi 2/Gamla tentor/2023-01-11/28.md", + "Anatomi & Histologi 2/Gamla tentor/2023-01-11/27.md", + "Anatomi & Histologi 2/Gamla tentor/2023-01-11/26.md", + "Anatomi & Histologi 2/Gamla tentor/2023-01-11/!2023-01-11-0044-PRX.pdf", + "Anatomi & Histologi 2/Gamla tentor/2023-01-11/25.md", + "Anatomi & Histologi 2/Gamla tentor/2023-01-11/24.md", + "Anatomi & Histologi 2/Gamla tentor/2023-01-11/23.md", + "Anatomi & Histologi 2/Gamla tentor/2023-01-11/22.md", + "Anatomi & Histologi 2/Gamla tentor/2023-01-11/21.md", + "Anatomi & Histologi 2/Gamla tentor/2023-01-11/20.md", + "Anatomi & Histologi 2/Gamla tentor/2023-01-11/19.md", + "Anatomi & Histologi 2/Gamla tentor/2023-01-11/18.md", + "Anatomi & Histologi 2/Gamla tentor/2023-01-11/17.md", + "Anatomi & Histologi 2/Gamla tentor/2023-01-11/16.md", + "Anatomi & Histologi 2/Gamla tentor/2023-01-11/15.md", + "Anatomi & Histologi 2/Gamla tentor/2023-01-11/14.md", + "Anatomi & Histologi 2/Gamla tentor/2023-01-11/13.md", + "Anatomi & Histologi 2/Gamla tentor/2023-01-11/12.md", + "Anatomi & Histologi 2/Gamla tentor/2023-01-11/11.md", + "Anatomi & Histologi 2/Gamla tentor/2023-01-11/10.md", + "Anatomi & Histologi 2/Gamla tentor/2023-01-11/9.md", + "Anatomi & Histologi 2/Gamla tentor/2023-01-11/8.md", + "Anatomi & Histologi 2/Gamla tentor/2022-06-01/!2022-06-01-0101-MGY.pdf", + "Anatomi & Histologi 2/Gamla tentor/2022-01-15/!2022-01-15-0032-BWD.pdf", "attachments/image-121.png", "Anatomi & Histologi 2/Gamla tentor/2024-01-10/!2024-01-10-0009-RYY.pdf", "z-Tech/tag_exam_questions_v2.sh", "z-Tech/tag_exam_questions.sh", - "Anatomi & Histologi 2/Gamla tentor/2022-01-15/!2022-01-15-0032-BWD.pdf", "Anatomi & Histologi 2/Gamla tentor/2025-08-08/!2025-08-08-0030-SHJ.pdf", "attachments/image-120.png", "attachments/image-119.png", @@ -236,8 +259,6 @@ "Anatomi & Histologi 2/Gamla tentor/2025-06-03/!2025-06-03-0003-UJR.pdf", "Anatomi & Histologi 2/Gamla tentor/2025-02-08/!2025-02-08-0003-ESW.pdf", "Anatomi & Histologi 2/Gamla tentor/2025-01-15/!2025-01-15-0021-HRY.pdf", - "Anatomi & Histologi 2/Gamla tentor/2024-05-29/!2024-05-29-0125-GZX.pdf", - "Anatomi & Histologi 2/Gamla tentor/tentor-utan-svar.pdf", "Untitled.canvas", "Biokemi/Metabolism/👋 Introduktion till metabolismen/Untitled.canvas", "Biokemi/Metabolism/📋 Metabolismen översikt.canvas", diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/10.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/10.md index e359ad6..77fa9c4 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/10.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/10.md @@ -11,5 +11,5 @@ Vad Ă€r korrekta om destination av nervcellers axon? - D: Axon frĂ„n stora nervceller i ryggmĂ€rgens framhorn terminerar pĂ„ skelettmuskulatur ```spoiler-block: -TODO +A och D ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/11.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/11.md index 8aaa8b3..3c07c53 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/11.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/11.md @@ -11,5 +11,5 @@ Vilka pĂ„stĂ„enden Ă€r korrekta för axoner vars nervcellskroppar ligger i ryggm - D: Dess axon gĂ„r ut i sympatiska grĂ€nsstrĂ€ngen ```spoiler-block: -TODO +B och D ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/12.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/12.md index b1c9d84..c2ee230 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/12.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/12.md @@ -11,5 +11,5 @@ Vilka av följande pĂ„stĂ„enden Ă€r korrekta? - D: Det finns fler dermatom Ă€n det finns ryggmĂ€rgssegment ```spoiler-block: -TODO +B och C ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/13.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/13.md index 3ca5f22..a4dd139 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/13.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/13.md @@ -11,5 +11,5 @@ Vilka av följande pĂ„stĂ„enden Ă€r korrekta? - D: Dura mater Ă€r den yttersta hinnan och den delas in i tvĂ„ olika blad ```spoiler-block: -TODO +A och D ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/14.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/14.md index 6e4188f..7bca4e6 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/14.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/14.md @@ -11,5 +11,5 @@ Vilka av följande pĂ„stĂ„enden Ă€r korrekta? - D: Liquor cerebrospinalis produceras av plexus choroideus, en vĂ€vnad bestĂ„ende av sĂ„vĂ€l pia mater och ependymceller. ```spoiler-block: -TODO +C och D ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/15.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/15.md index 11948ec..d135ca5 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/15.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/15.md @@ -2,7 +2,7 @@ tags: - ah2 - provfrĂ„ga - - frĂ„getyp/mcq + - frĂ„getyp/scq - histologi - preparat - bild @@ -18,5 +18,5 @@ Du tittar pĂ„ en silverinfĂ€rgning av hjĂ€rnstammen. Vilken celltyp Ă€r inringad - D: astrocyt ```spoiler-block: -TODO +B ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/16.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/16.md index dc097bc..f491805 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/16.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/16.md @@ -14,5 +14,5 @@ Vilka alternativ Ă€r korrekta för sensorisk och motorisk cortex ? - D: I sensorisk cortex dominerar lager 2 och 4 ```spoiler-block: -TODO +C och D ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/17.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/17.md index a70e9eb..024b992 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/17.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/17.md @@ -15,5 +15,5 @@ Vilka av följande pĂ„stĂ„enden Ă€r korrekta? - D: Schwannceller myeliniserar dendriter i PNS medan oligodendrocyter myeliniserar dendriter i CNS ```spoiler-block: -TODO +A och B ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/18.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/18.md index 857304b..dcb7ab4 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/18.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/18.md @@ -15,5 +15,5 @@ Vilka av följande pĂ„stĂ„enden Ă€r korrekta avseende _cortex cerebelli_? - D: StjĂ€rnceller, korgceller och purkinjeceller Ă€r olika celltyper man Ă„terfinner i cortex cerebelli och alla dessa tre Ă€r nervceller ```spoiler-block: -TODO +A och D ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/19.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/19.md index 336349b..fb9ae6a 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/19.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/19.md @@ -11,5 +11,5 @@ Vilka av följande pĂ„stĂ„enden Ă€r korrekta gĂ€llande ögat? - D: I fovea centralis Ă„terfinns stavar och tappar ```spoiler-block: -TODO +B och C ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/2.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/2.md index d9544de..5f5a54c 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/2.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/2.md @@ -11,5 +11,5 @@ Vilka av följande pĂ„stĂ„enden om cerebrum Ă€r mest korrekta? - D: Du Ă€ter lunch och kĂ€nner att hur gott maten luktar, dĂ„ Ă€r Insula starkt aktiverad ```spoiler-block: -TODO +A och B ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/20.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/20.md index 4c23a3b..34c0c13 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/20.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/20.md @@ -17,5 +17,6 @@ a) Vilken siffra pekar pĂ„ gula flĂ€cken? b) Vilken siffra pekar pĂ„ choroidea? ```spoiler-block: -TODO +a) 7 +b) 6 ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/21.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/21.md index 6988b1e..a8dc016 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/21.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/21.md @@ -11,5 +11,5 @@ Vilka av följande pĂ„stĂ„enden Ă€r korrekta? - D: Processus ciliare Ă„terfinns pĂ„ ciliarkroppen och dĂ€r produceras kammarvĂ€tska ```spoiler-block: -TODO +A och D ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/22.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/22.md index f215e67..705445b 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/22.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/22.md @@ -11,5 +11,5 @@ Vilka av följande Ă€r viktiga för hornhinnans (corneas) genomskinlighet? - D: Ett yttre flerskiktat förhornat epitel ```spoiler-block: -TODO +B och C ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/23.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/23.md index 5be302b..749d1c7 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/23.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/23.md @@ -16,5 +16,5 @@ Vilka pĂ„stĂ„enden stĂ€mmer pĂ„ Ciliarutskotten? - D: Ă€r beklĂ€dda med tvĂ„ lager epitelceller ```spoiler-block: -TODO +C och D ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/24.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/24.md index 3b8ae9a..835a9dd 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/24.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/24.md @@ -12,9 +12,10 @@ date: 2022-01-15 ![[image-3.png]] Bilden visar en del av retina med glaskroppen uppĂ„t. Matcha de olika strukturerna med rĂ€tt siffra: (0.5p per rĂ€tt svar, inga avdrag för fel svar) -- Mullerglias cellkĂ€rnor (1, 2, 4, 3, 5). -- Stavarnas och tapparnas fotoreceptorer (1, 3, 5, 4, 2) +- a) Mullerglias cellkĂ€rnor (1, 2, 4, 3, 5). +- b) Stavarnas och tapparnas fotoreceptorer (1, 3, 5, 4, 2) ```spoiler-block: -TODO +a) 4 +b) 2 ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/25.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/25.md index 74e88c3..e74fc88 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/25.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/25.md @@ -17,5 +17,6 @@ a) Vilken siffra pekar pĂ„ incus? (1..19) b) Vilken siffra pekar pĂ„ tuba auditiva? (1..19) ```spoiler-block: -TODO +a) 7 +b) 18 ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/26.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/26.md index 8ef3322..7cf45a5 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/26.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/26.md @@ -11,5 +11,5 @@ Vilka av följande pĂ„stĂ„enden om örat Ă€r korrekta? - D: Ganglion spirale Ă€r ett stort klumpformat ganglion bakom cochlean. ```spoiler-block: -TODO +B och C ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/27.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/27.md index 333c72d..c2ba7bd 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/27.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/27.md @@ -11,5 +11,5 @@ Vilka av följande pĂ„stĂ„enden om örat Ă€r korrekta? - D: canalis semicircularis, vestibulum och cochlea Ă€r alla delar av benlabyrinten ```spoiler-block: -TODO +B och D ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/28.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/28.md index df86423..39d2bf8 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/28.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/28.md @@ -16,5 +16,5 @@ Vilka pĂ„stĂ„enden Ă€r korrekt om cristae ampullaris? - D: Aktivering av sensoriska afferenter sker via transmittorfrisĂ€ttning frĂ„n hĂ„rcellerna ```spoiler-block: -TODO +B och D ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/29.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/29.md index 18961fc..a518fd2 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/29.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/29.md @@ -11,5 +11,5 @@ Vilka pĂ„stĂ„enden Ă€r korrekta om makula i innerörat ? - D: Är omgiven av perilymfa ```spoiler-block: -TODO +B och C ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/3.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/3.md index a208d6b..514ddf9 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/3.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/3.md @@ -26,5 +26,6 @@ b) Vilket funktionellt centra Ă„terfinns dĂ€r? - Somatosensoriskt centrum ```spoiler-block: -TODO +a) Lobus parietalis +b) Somatosensoriskt centrum ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/30.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/30.md index 5e8d0dc..a6daf6e 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/30.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/30.md @@ -15,11 +15,14 @@ Bilden visar en del av innerörat med förstorning av cortiska organet till hög (0.25p för varje rĂ€tt svar - inga avdrag för fel svar): -- Scala tympani: (A, B, C) -- Stria vascularis: (1, 2, 3, 4). -- Reissners membran: (1, 2, 3, 4) -- Yttre hĂ„rcell : (5, 6, 7, 8) +- a) Scala tympani: (A, B, C) +- b) Stria vascularis: (1, 2, 3, 4). +- c) Reissners membran: (1, 2, 3, 4) +- d) Yttre hĂ„rcell : (5, 6, 7, 8) ```spoiler-block: -TODO +a) C +b) 3 +c) 1 +d) 8 ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/4.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/4.md index 198397e..6b78b0a 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/4.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/4.md @@ -11,5 +11,5 @@ Vilka av följande pĂ„stĂ„enden Ă€r korrekta? - D: Corpus pineale ligger bakom thalamus, i mittlinjen, och Ă€r delaktig i dygnsrytmreglering ```spoiler-block: -TODO +A och D ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/5.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/5.md index f9883a8..95122e4 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/5.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/5.md @@ -11,5 +11,5 @@ Vilka av följande pĂ„stĂ„enden om limbiska systemet Ă€r korrekta? - D: Amygdala har som sin viktigaste funktion minnesinlagring ```spoiler-block: -TODO +A och C ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/6.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/6.md index 29f588d..4a2cd08 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/6.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/6.md @@ -11,5 +11,5 @@ Vilka av följande pĂ„stĂ„enden om _truncus encephali_ Ă€r korrekta? - D: Pyramiden (pyramis) ses ventralt pĂ„ mesencephalons yta ```spoiler-block: -TODO +A och B ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/7.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/7.md index c1a4be3..075dc16 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/7.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/7.md @@ -11,5 +11,5 @@ Vilka av följande pĂ„stĂ„enden om _truncus encephali_ Ă€r korrekta? - D: FrĂ„n Pons gĂ„r det horisontella nervfibrer till cerebellum, via peduncullus cerebellaris superior, medius et inferior. ```spoiler-block: -TODO +A och B ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/8.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/8.md index bc56bb6..d137948 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/8.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/8.md @@ -2,7 +2,7 @@ tags: - ah2 - provfrĂ„ga - - frĂ„getyp/mcq + - frĂ„getyp/scq - anatomi - bild date: 2022-01-15 @@ -19,5 +19,5 @@ Vilken bokstav pĂ„ denna bild sitter pĂ„ Mesencephalon? - F ```spoiler-block: -TODO +F ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/9.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/9.md index 8689e4d..9315da1 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/9.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-01-15/9.md @@ -11,5 +11,5 @@ Vilka av följande pĂ„stĂ„enden Ă€r korrekta? - D: Cerebellum binds till hjĂ€rnstammen via capsula interna ```spoiler-block: -TODO +A och B ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/1.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/1.md index 860de54..e8ca43a 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/1.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/1.md @@ -5,18 +5,21 @@ date: 2022-06-01 Nedan nĂ€mns 4 funktioner, vĂ€lj rĂ€tt cell till rĂ€tt funktion (vissa celler blir sĂ„ledes över) (alla ska vara rĂ€tt för att fĂ„ poĂ€ng) -- ExtracellulĂ€r miljö -- Fagocyterande -- Myelin i CNS -- VentrikelvĂ€ggar och Plexus choroideus +- a) ExtracellulĂ€r miljö +- b) Fagocyterande +- c) Myelin i CNS +- d) VentrikelvĂ€ggar och Plexus choroideus -- Schwanncell -- Oligodendrocyt -- Satellitcell -- Mikroglia -- Astrocyt -- Ependymceller +1. Schwanncell +2. Oligodendrocyt +3. Satellitcell +4. Mikroglia +5. Astrocyt +6. Ependymceller ```spoiler-block: -TODO +a) 5 +b) 6 +c) 2 +d) 1 ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/10.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/10.md index bc77b1d..8c31aef 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/10.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/10.md @@ -2,7 +2,7 @@ tags: - ah2 - provfrĂ„ga - - frĂ„getyp/textalternativ + - frĂ„getyp/scq - histologi - preparat - bild @@ -10,12 +10,12 @@ date: 2022-06-01 --- ![[image-8.png]] Vilken del av CNS syns i bild? -- Cerebellum -- Diencephalon -- Medulla spinalis -- Cerebrum -- Pons +- A: Cerebellum +- B: Diencephalon +- C: Medulla spinalis +- D: Cerebrum +- E: Pons ```spoiler-block: -TODO +A ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/11.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/11.md index 7bdc221..2c0bd1a 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/11.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/11.md @@ -2,7 +2,7 @@ tags: - ah2 - provfrĂ„ga - - frĂ„getyp/textalternativ + - frĂ„getyp/scq - histologi - preparat - bild @@ -10,13 +10,13 @@ date: 2022-06-01 --- ![[image-9.png]] Vilket lager pekar stjĂ€rnan pĂ„? Lamina molekylaris -- Lamina multiformis -- vit substans -- Lamina membrana limitans -- Lamina pyramidalis -- Lamina granularis -- Lamina molekylaris +- A: Lamina multiformis +- B: vit substans +- C: Lamina membrana limitans +- D: Lamina pyramidalis +- E: Lamina granularis +- F: Lamina molekylaris ```spoiler-block: -TODO +F ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/12.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/12.md index 49c29f9..6043f99 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/12.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/12.md @@ -11,5 +11,5 @@ Vilka tvĂ„ pĂ„stĂ„enden Ă€r korrekta avseende motorik? - D: Pyramidbanan förmedlar viljemĂ€ssig finmotorik ```spoiler-block: -TODO +B och D ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/13.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/13.md index b19faa0..087f1a9 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/13.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/13.md @@ -11,5 +11,5 @@ Vilka tvĂ„ pĂ„stĂ„enden Ă€r korrekta avseende sensorik? - D: Om du kapar bakstrĂ€ngsbanan förlorar den patienten all kĂ€nsel ```spoiler-block: -TODO +A och B ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/14.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/14.md index f3b25e0..4526790 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/14.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/14.md @@ -8,8 +8,8 @@ tags: date: 2022-06-01 --- ![[image-10.png]] -Vilken siffra pekar pĂ„ den bana som förmedlar tvĂ„-punktsdiskrimination och vibration? +Vilken siffra pekar pĂ„ den bana som förmedlar tvĂ„-punktsdiskrimination och vibration? (1, 2, 3, 4, 5) ```spoiler-block: -TODO +1 ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/15.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/15.md index 3ef8683..d226fdd 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/15.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/15.md @@ -8,13 +8,12 @@ tags: date: 2022-06-01 --- ![[image-11.png]] -a) Vilken siffra markerar arachnoidea? - -b) Vilken siffra markerar cortex cerebri +a) Vilken siffra markerar arachnoidea? (1..10) (0.5 p) - +b) Vilken siffra markerar cortex cerebri (1..10) (0.5 p) ```spoiler-block: -TODO +a) 8 +b) 10 ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/16.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/16.md index 62c53ee..bfb2e48 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/16.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/16.md @@ -10,11 +10,12 @@ date: 2022-06-01 ![[image-12.png]] Ovan visas ett horisontalsnitt av höger hemisfĂ€r. Vilken siffra pekar pĂ„ -a) nucleus caudatus? +a) nucleus caudatus? (1..11) -b) nucleus lentiformis? +b) nucleus lentiformis? (1..11) (0,5 p per rĂ€tt svar, inga avdrag för fel) ```spoiler-block: -TODO +a) 9 +b) 6 ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/17.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/17.md index 0b7b122..916b550 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/17.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/17.md @@ -18,5 +18,5 @@ I bild visas ett nedre motorneuron i ryggmĂ€rgens framhorn. Vilka bokstĂ€ver pek - E: A till I ```spoiler-block: -TODO +A ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/18.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/18.md index c8db640..8b2442d 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/18.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/18.md @@ -2,7 +2,7 @@ tags: - ah2 - provfrĂ„ga - - frĂ„getyp/textalternativ + - frĂ„getyp/scq - histologi - preparat - bild @@ -10,12 +10,12 @@ date: 2022-06-01 --- ![[image-14.png]] Vilka celler Ă€r specialfĂ€rgade i detta preparat frĂ„n CNS? -- oligodendrocyter -- stjĂ€rnceller -- Astrocyter -- korgceller -- mikroglia +- A: oligodendrocyter +- B: stjĂ€rnceller +- C: Astrocyter +- D: korgceller +- E: mikroglia ```spoiler-block: -TODO +C ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/19.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/19.md index 2605341..fe643a8 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/19.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/19.md @@ -11,5 +11,5 @@ Vilka tvĂ„ pĂ„stĂ„enden Ă€r korrekta avseende ögat? - D: I retina Ă„terfinns flest stavar och tappar i gula flĂ€cken ```spoiler-block: -TODO +A och B ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/2.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/2.md index cabe2c5..75288ee 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/2.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/2.md @@ -11,5 +11,5 @@ Vilka tvĂ„ pĂ„stĂ„enden Ă€r korrekta avseende neuronet? - D: De övre motorneuronen sitter i cortex cerebri, lobus frontalis ```spoiler-block: -TODO +C och D ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/20.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/20.md index 0b835e1..7f2a336 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/20.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/20.md @@ -11,5 +11,5 @@ Vilka tvĂ„ pĂ„stĂ„enden Ă€r korrekta avseende ögat? - D: Choroidea övergĂ„r anteriort i corpus ciliare och iris ```spoiler-block: -TODO +C och D ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/21.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/21.md index 87e01ae..e899d55 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/21.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/21.md @@ -10,14 +10,13 @@ date: 2022-06-01 --- ![[image-15.png]] Vilka siffror pekar pĂ„ - -a) Cornea? - -b) Retina? - -c) Corpus vitreum +a) Cornea? (1..15) +b) Retina? (1..15) +c) Corpus vitreum (1..15) (alla rĂ€tt ger 1p, annars inga poĂ€ng) ```spoiler-block: -TODO +a) 1 +b) 11 +c) 14 ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/22.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/22.md index 3010691..59eceab 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/22.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/22.md @@ -6,8 +6,10 @@ Vad Ă€r rĂ€tt om iris: **VĂ€lj tvĂ„ alternativ:** - A: Iris Ă€r den anteriora (frĂ€mre) förlĂ€ngningen av ciliarkroppen -- B: Baksidan av iris (mot linsen) har pigmenterat epitel kontraktion av dilatormuskeln drar ihop pupillen framsidan av iris beklĂ€ds av flerskiktat skivepitel +- B: Baksidan av iris (mot linsen) har pigmenterat epitel +- C: kontraktion av dilatormuskeln drar ihop pupillen +- D: framsidan av iris beklĂ€ds av flerskiktat skivepitel ```spoiler-block: -TODO +A och B ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/23.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/23.md index 8a34dd0..6fd301f 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/23.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/23.md @@ -11,5 +11,5 @@ Vad Ă€r rĂ€tt om retinas bipolĂ€ra neuron? - D: De bipolĂ€ra neuronen fĂ„r stöd frĂ„n oligodendrocyter ```spoiler-block: -TODO +A och B ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/24.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/24.md index 30247aa..e905e72 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/24.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/24.md @@ -11,11 +11,14 @@ date: 2022-06-01 --- ![[image-16.png]] **Fyll i rĂ€tt siffra _(0,25p för varje rĂ€tt svar, inget avdrag för fel svar)_:** -- Vilken siffra markerar choroidea? -- Vilken siffra markerar pigementepitelet? -- Vilken siffra markerar sclera? -- Vilken siffra markerar lagret dĂ€r de bipolĂ€ra neuronen har sin cellkĂ€rna? +- a) Vilken siffra markerar choroidea? (1..8) +- b) Vilken siffra markerar pigementepitelet? (1..8) +- c) Vilken siffra markerar sclera? (1..8) +- d) Vilken siffra markerar lagret dĂ€r de bipolĂ€ra neuronen har sin cellkĂ€rna? (1..8) ```spoiler-block: -TODO +a) 3 +b) 4 +c) 1 +d) 7 ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/25.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/25.md index e042f56..7ffc87f 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/25.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/25.md @@ -11,5 +11,5 @@ Vilka tvĂ„ pĂ„stĂ„enden Ă€r korrekta avseende örat? - D: I Utriculus och Sacculus Ă„terfinns de omrĂ„den som registrerar linjĂ€r acceleration och lĂ€ge (dvs gravitation). ```spoiler-block: -TODO +A och B ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/26.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/26.md index d4752fe..0fd9928 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/26.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/26.md @@ -11,5 +11,5 @@ Vilka tvĂ„ pĂ„stĂ„enden Ă€r korrekta avseende örat? - D: De centrala ljudbanorna gĂ„r frĂ„n hjĂ€rnstammen upp till thalamus och vidare till temporalloben ```spoiler-block: -TODO +B och D ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/27.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/27.md index b1da33b..f72e310 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/27.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/27.md @@ -9,8 +9,11 @@ date: 2022-06-01 --- ![[image-17.png]] Vilka siffror pekar pĂ„ örats luftförande rum? +a) svar (1..13) +b) och (1..13) (skriv en siffra i varje ruta, bĂ„da ska vara rĂ€tt för att ge poĂ€ng) ```spoiler-block: -TODO +a) 12 +b) 13 ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/28.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/28.md index 5772ee9..a70daa1 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/28.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/28.md @@ -5,9 +5,11 @@ date: 2022-06-01 Vad Ă€r rĂ€tt om Cortiska organet? **VĂ€lj tvĂ„ alternativ:** -- A: Det innehĂ„ller hĂ„rceller, stödjeceller och pelarceller hĂ„rcellernas apikala yta omges av endolymfa -- B: Det ligger i scala vestibuli hĂ„rcellernas apikala yta omges av perilymfa +- A: Det innehĂ„ller hĂ„rceller, stödjeceller och pelarceller +- B: hĂ„rcellernas apikala yta omges av endolymfa +- C: Det ligger i scala vestibuli +- D: hĂ„rcellernas apikala yta omges av perilymfa ```spoiler-block: -TODO +A och B ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/29.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/29.md index e4d8abf..4821c31 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/29.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/29.md @@ -6,8 +6,10 @@ Vad Ă€r rĂ€tt om crista ampullaris **VĂ€lj tvĂ„ alternativ:** - A: Registrerar rotation -- B: Finns i utriculus och sacculus har en geleaktig cupula registrerar gravitation +- B: Finns i utriculus och sacculus +- C: har en geleaktig cupula +- D: registrerar gravitation ```spoiler-block: -TODO +A och C ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/3.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/3.md index 4a2c1bc..1ad4384 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/3.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/3.md @@ -14,5 +14,5 @@ Vilka tvĂ„ cellager Ă€r förstorade i motorisk cortex jfr övriga cortex cerebri - F: Lamina granularis interna ```spoiler-block: -TODO +B och E ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/30.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/30.md index 1bfa957..6060aad 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/30.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/30.md @@ -12,14 +12,14 @@ date: 2022-06-01 ![[image-18.png]] **Fyll i rĂ€tt siffra _(0,25p för varje rĂ€tt svar, inget avdrag för fel svar)_:** -a) vestibularismembraet (Reissners membran) - -b) Axonbuntar - -c) stria vascularis - -d) tektorialmembranet +a) vestibularismembraet (Reissners membran) (1..9) +b) Axonbuntar (1..9) +c) stria vascularis (1..9) +d) tektorialmembranet (1..9) ```spoiler-block: -TODO +a) 2 +b) 8 +c) 3 +d) 5 ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/4.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/4.md index b8cca61..3bf72aa 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/4.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/4.md @@ -5,13 +5,22 @@ date: 2022-06-01 Placera varje funktion i rĂ€tt lob (alla ska vara rĂ€tt för att fĂ„ poĂ€ng) -Motorik Hörsel ANS Syn somatosensorisk -Lobus parietalis -Lobus occipitalis -Lobus temporalis -Lobus insularis (insula) -Lobus frontalis +- Motorik +- Hörsel +- ANS +- Syn +- somatosensorisk + +- Lobus parietalis +- Lobus occipitalis +- Lobus temporalis +- Lobus insularis (insula) +- Lobus frontalis ```spoiler-block: -TODO +Motorik: Lobus frontalis +Hörsel: Lobus temporalis +ANS: Lobus insularis (insula) +Syn: Lobus occipitalis +somatosensorisk: Lobus parietalis ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/5.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/5.md index 6b4b1ed..24b731e 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/5.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/5.md @@ -9,12 +9,11 @@ date: 2022-06-01 --- ![[image-6.png]] Vilken siffra markerar - a) corpus callosum? - b) center för övre endokrin styrning? (0.5p för varje rĂ€tt svar, inga avdrag för fel) ```spoiler-block: -TODO +a) 12 +b) 10 ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/6.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/6.md index 84307c2..cb9ee39 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/6.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/6.md @@ -9,12 +9,11 @@ date: 2022-06-01 --- ![[image-7.png]] Vilken bokstav pekar pĂ„ - a) sulcus centralis - b) den del av CNS som arbetar mest med koordination och balans? (0.5p för varje rĂ€tt svar, inga avdrag för fel) ```spoiler-block: -TODO +a) A +b) E ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/7.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/7.md index 0e5fc70..a9e10cb 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/7.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/7.md @@ -1,5 +1,5 @@ --- -tags: [ah2, provfrĂ„ga, frĂ„getyp/mcq, anatomi, öra] +tags: [ah2, provfrĂ„ga, frĂ„getyp/scq, anatomi, öra] date: 2022-06-01 --- a) Var Ă„terfinns nucleus ruber? (0,5p) @@ -19,5 +19,6 @@ b) Vad Ă€r dess (alltsĂ„ nucleus rubers) funktion? (0.5p) - D: KĂ€nsel ```spoiler-block: -TODO +a) B +b) C ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/8.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/8.md index 72f2b3b..b12b0c7 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/8.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/8.md @@ -11,5 +11,5 @@ Vilka tvĂ„ pĂ„stĂ„enden Ă€r korrekta avseende hjĂ€rnstammen? - D: Pyramis och Oliva kan ses vid ventral vy av hjĂ€rnstammens nedre tredjedel ```spoiler-block: -TODO +B och D ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/9.md b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/9.md index 0820d5a..7099cd3 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/9.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2022-06-01/9.md @@ -11,5 +11,5 @@ Vilka tvĂ„ pĂ„stĂ„ende Ă€r korrekta avseende ventrikelsystemet? - D: Plexus choroideus byggs upp av pia mater, ependymceller och blodkĂ€rl och hĂ€r produceras cerebrospinalvĂ€tska ```spoiler-block: -TODO +C och D ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/1.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/1.md index f6e82b2..10d1ce5 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/1.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/1.md @@ -11,5 +11,5 @@ Vilka tvĂ„ av följande pĂ„stĂ„ende Ă€r korrekta avseende meninges? - D: Dura mater bestĂ„r av stram bindvĂ€v och bildar ett fysisk skydd kring hjĂ€rnan. ```spoiler-block: -TODO +B och D ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/10.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/10.md index 25bc7b5..52aac9e 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/10.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/10.md @@ -10,11 +10,11 @@ date: 2023-01-11 ![[image-19.png]] Vilken bokstav markerar -a) en stor grupp av kĂ€rnor som tar emot afferens till storhjĂ€rnan - -b) corpus callosum? +a) en stor grupp av kĂ€rnor som tar emot afferens till storhjĂ€rnan (A..H) +b) corpus callosum? (A..H) (0,5 p per rĂ€tt svar) ```spoiler-block: -TODO +a) C +b) A ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/11.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/11.md index 3267402..1782bb7 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/11.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/11.md @@ -8,9 +8,9 @@ tags: date: 2023-01-11 --- ![[image-20.png]] -Vilken siffra markerar nucleus lentiformis pĂ„ detta horisontalsnitt av höger storhjĂ€rnshalva +Vilken siffra markerar nucleus lentiformis pĂ„ detta horisontalsnitt av höger storhjĂ€rnshalva (1..11) (anteriort Ă€r till vĂ€nster i bild och lateralt Ă€r uppĂ„t i bild)? 6 (1p) ```spoiler-block: -TODO +6 ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/12.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/12.md index 258f7f7..d377658 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/12.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/12.md @@ -8,9 +8,9 @@ tags: date: 2023-01-11 --- ![[image-21.png]] -Vilken siffra markerar var det sitter viktiga autonoma centra för kontroll av andning, blodtryck och -8 hjĂ€rtfrekvensreglering? (1p) +Vilken siffra markerar var det sitter viktiga autonoma centra för kontroll av andning, blodtryck och hjĂ€rtfrekvensreglering? (1..13) +(1p) ```spoiler-block: -TODO +8 ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/14.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/14.md index c963352..2fcff77 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/14.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/14.md @@ -9,12 +9,11 @@ date: 2023-01-11 --- ![[image-23.png]] Vilken siffra markerar lokalisation av: - -a) gyrus precentralis? - -b) hypothalamus? +a) gyrus precentralis? (1..13) +b) hypothalamus? (1..13) (0,5 p per rĂ€tt svar) ```spoiler-block: -TODO +a) 1 +b) 10 ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/15.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/15.md index 0b1aec2..8dc1af9 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/15.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/15.md @@ -10,8 +10,9 @@ date: 2023-01-11 ![[image-24.png]] Okej, denna frĂ„ga Ă€r lite svĂ„rare. Bild A visar en frisk ryggmĂ€rg (DC = dorsal column/bakstrĂ€ng, AH = anterior horn/framhorn), övriga bilder visar olika typer av skador, dĂ€r rött markerar skadans utbredning. -Vilken bokstav markerar hĂ€r en sjukdomsprocess som borde ge upphov till nedsatt tvĂ„punktsdiskrimination och nedsatt proprioception pĂ„ bĂ€gge sidor nedom skadan, utan att pĂ„verka vare sig motorik eller smĂ€rtkĂ€nsel? _(1p)_ +Vilken bokstav markerar hĂ€r en sjukdomsprocess som borde ge upphov till nedsatt tvĂ„punktsdiskrimination och nedsatt proprioception pĂ„ bĂ€gge sidor nedom skadan, utan att pĂ„verka vare sig motorik eller smĂ€rtkĂ€nsel? (A..H) +(1p) ```spoiler-block: -TODO +C ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/16.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/16.md index 25a1a2b..dff22a6 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/16.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/16.md @@ -11,5 +11,5 @@ Vilka pĂ„stĂ„enden stĂ€mmer pĂ„ gliaceller i CNS? - D: Ependymceller Ă€r neuromuskulĂ€ra celler som kontraherar för att stimulera flöde av likvor ```spoiler-block: -TODO +A och C ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/17.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/17.md index 6878219..f37f35d 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/17.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/17.md @@ -11,5 +11,5 @@ Vilka pĂ„stĂ„enden stĂ€mmer pĂ„ uppbyggnad av cerebellums cortex? - D: Korncellernas cellkroppar finns i lamina molekylaris ```spoiler-block: -TODO +A och C ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/18.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/18.md index d08104e..eb80ec0 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/18.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/18.md @@ -9,16 +9,28 @@ tags: date: 2023-01-11 --- Rektangeln markerar en del av motorcortex i en rĂ„tthjĂ€rna. Namnge de olika lagren genom att dra rĂ€tt namn till rĂ€tt siffra (alla rĂ€tt = 1p) - ![[image-25.png]] -Lamina molekylaris -Lamina granularis externa -Lamina pyramidalis extern -Lamina granularis interna -Lamina pyramidalis interna -Lamina multiformis +1) +2) +3) +4) +5) +6) + +- Lamina granularis externa +- Lamina granularis interna +- Lamina molekylaris +- Lamina multiformis +- Lamina pyramidalis extern +- Lamina pyramidalis interna ```spoiler-block: -TODO +1) Lamina molekylaris +2) Lamina granularis externa +3) Lamina pyramidalis extern +4) Lamina granularis interna +5) Lamina pyramidalis interna +6) Lamina multiformis + ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/19.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/19.md index 167da23..80b5858 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/19.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/19.md @@ -11,5 +11,5 @@ Vilka tvĂ„ av följande pĂ„stĂ„ende Ă€r korrekta avseende ögats anatomi? - D: I retina Ă„terfinns ett pigmentlager, vilket ger upphov till pupillens svarta fĂ€rg ```spoiler-block: -TODO +B och D ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/2.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/2.md index 7ec945b..9292065 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/2.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/2.md @@ -11,5 +11,5 @@ Vilka tvĂ„ av följande pĂ„stĂ„ende Ă€r korrekta ? - D: Prefrontalkortex sitter anteriort i frontalloben och hĂ€r Ă„terfinns frĂ€mst tolkning av syn, hörsel och kĂ€nsel. ```spoiler-block: -TODO +A och B ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/20.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/20.md index 016167f..548c2e8 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/20.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/20.md @@ -11,5 +11,5 @@ Vilka tvĂ„ av följande pĂ„stĂ„ende Ă€r korrekta avseende ögats anatomi? - D: Visuell afferens börjar, via interneuron, att bearbetas redan i retina ```spoiler-block: -TODO +A och D ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/21.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/21.md index 520593e..9aa4a50 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/21.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/21.md @@ -11,11 +11,11 @@ date: 2023-01-11 ![[image-26.png]] Vilken siffra/bokstav markerar -a) cornea - -b) synnervens intrĂ€de? +a) cornea (1..15) +b) synnervens intrĂ€de? (1..15) (0,5p per rĂ€tt svar) ```spoiler-block: -TODO +a) 1 +b) 15 ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/22.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/22.md index 375d810..9bb6994 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/22.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/22.md @@ -10,11 +10,11 @@ tags: date: 2023-01-11 --- ![[image-27.png]] -a) Vilken siffra markerar gangliecellerna? - -b) Vilken siffra markerar stavarna och tapparnas cellkĂ€rnor? +a) Vilken siffra markerar gangliecellerna? (1..5) +b) Vilken siffra markerar stavarna och tapparnas cellkĂ€rnor? (1..5) (bĂ„da ska vara rĂ€tt för att fĂ„ poĂ€ng = 1p) ```spoiler-block: -TODO +a) 5 +b) 3 ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/23.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/23.md index 4e2b77f..affda94 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/23.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/23.md @@ -12,11 +12,11 @@ date: 2023-01-11 ![[image-28.png]] Bilden visar en anterior del av ögat. Vilken siffra markerar -a) en struktur som reglerar pupillens storlek? - -b) en struktur som tĂ€cks av ett flerskiktat orförhornat skivepitel? +a) en struktur som reglerar pupillens storlek? (1..5) +b) en struktur som tĂ€cks av ett flerskiktat orförhornat skivepitel? (1..5) (0,5p per rĂ€tt svar) ```spoiler-block: -TODO +a) 5 +b) 3 ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/24.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/24.md index 0c6b8e0..1c9d831 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/24.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/24.md @@ -10,5 +10,5 @@ Vilka tvĂ„ pĂ„stĂ„enden stĂ€mmer pĂ„ ögats lins? - C: Har glattmuskulatur som styr ackommodation ```spoiler-block: -TODO +A och B ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/25.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/25.md index 5ec5ad9..4db8fcd 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/25.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/25.md @@ -11,5 +11,5 @@ Vilka tvĂ„ av följande pĂ„stĂ„ende Ă€r korrekta avseende örats anatomi? - D: Örat delas in i tre delar, dĂ€r alla Ă€r helt inneslutna i temporalbenet. ```spoiler-block: -TODO +A och C ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/26.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/26.md index 3b894e7..a030b15 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/26.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/26.md @@ -11,5 +11,5 @@ Vilka tvĂ„ av följande pĂ„stĂ„ende Ă€r korrekta avseende örats anatomi? - D: I bĂ„ggĂ„ngarna finns crista ampullaris och i vestibulum finns macula ```spoiler-block: -TODO +A och D ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/27.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/27.md index f2b67fa..97bad3e 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/27.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/27.md @@ -11,11 +11,11 @@ date: 2023-01-11 ![[image-29.png]] Vilken siffra markerar -a) stapes - -b) den struktur cortiska organet Ă„terfinns i? +a) stapes (1..19) +b) den struktur cortiska organet Ă„terfinns i? (1..19) (0,5 p per rĂ€tt svar) ```spoiler-block: -TODO +a) 16 +b) 19 ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/28.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/28.md index ad2c046..ad764b3 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/28.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/28.md @@ -10,5 +10,5 @@ Vilka tvĂ„ pĂ„stĂ„enden stĂ€mmer pĂ„ mellanörat? - C: Hörselbenen omges av ett perikondrium ```spoiler-block: -TODO +A och C ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/29.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/29.md index 51baf74..11a9cb2 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/29.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/29.md @@ -10,11 +10,11 @@ tags: date: 2023-01-11 --- ![[image-30.png]] -a) Vilket utrymme innehĂ„ller vĂ€tska med högst koncentration av K+-joner? (ange bokstav)? - -b) Vilken siffra markerar en "inre hĂ„rcell"? +a) Vilket utrymme innehĂ„ller vĂ€tska med högst koncentration av K+-joner? (ange bokstav)? (A, B, C) +b) Vilken siffra markerar en "inre hĂ„rcell"? (1..8) (0,5p per rĂ€tt svar) ```spoiler-block: -TODO +a) B +b) 5 ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/3.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/3.md index 373f003..93d8807 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/3.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/3.md @@ -11,5 +11,5 @@ Vilka tvĂ„ av följande pĂ„stĂ„ende Ă€r korrekta avseende cerebrum? - D: Capsula interna bildas av projektionsbanor, bland annat pyramidbanan ```spoiler-block: -TODO +A och D ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/30.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/30.md index f312515..bdf10d0 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/30.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/30.md @@ -10,11 +10,11 @@ tags: date: 2023-01-11 --- ![[image-31.png]] -a) Vilken siffra pekar pĂ„ strukturen som separerar scala media frĂ„n scala vestibuli ? - -b) Vilken siffra pekar pĂ„ nervcellerna (somat) som innerverar hĂ„rcellerna? +a) Vilken siffra pekar pĂ„ strukturen som separerar scala media frĂ„n scala vestibuli ? (1..9) +b) Vilken siffra pekar pĂ„ nervcellerna (somat) som innerverar hĂ„rcellerna? (1..9) (0,5p per rĂ€tt svar) ```spoiler-block: -TODO +a) 2 +b) 7 ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/4.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/4.md index cfc2966..56c3403 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/4.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/4.md @@ -11,5 +11,5 @@ Vilka tvĂ„ av följande pĂ„stĂ„ende Ă€r korrekta avseende diencephalon? - D: Tallkottkörteln sitter posteriort om thalamus och ncl subthalamicus sitter inferiort om thalamus ```spoiler-block: -TODO +B och D ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/5.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/5.md index f7fbb36..ba12d9b 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/5.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/5.md @@ -11,5 +11,5 @@ Vilka tvĂ„ av följande pĂ„stĂ„ende Ă€r korrekta avseende truncus encephali? - D: Pyramidbanan passerar genom hela hjĂ€rnstammen ```spoiler-block: -TODO +C och D ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/6.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/6.md index 219833e..50b6a23 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/6.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/6.md @@ -11,5 +11,5 @@ Vilka tvĂ„ av följande pĂ„stĂ„ende Ă€r korrekta avseende cerebellum? - D: Cortex cerebelli Ă€r mycket tĂ€tt veckat och har faktiskt i princip lika mĂ„nga neuron som, den volymmĂ€ssigt större, cerebrum ```spoiler-block: -TODO +A och D ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/7.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/7.md index 2b3d715..7603468 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/7.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/7.md @@ -11,5 +11,5 @@ Vilka tvĂ„ av följande pĂ„stĂ„ende Ă€r korrekta avseende medulla spinalis anato - D: De stora bansystemen bildar tre kolumner genom hela ryggmĂ€rgen ```spoiler-block: -TODO +B och C ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/8.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/8.md index b1da564..8e938b6 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/8.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/8.md @@ -11,5 +11,5 @@ Vilka tvĂ„ av följande pĂ„stĂ„ende Ă€r korrekta avseende CNS funktionella anato - D: En motorisk enhet utgörs av de muskelfibrer som innerveras av en spinalnerv ```spoiler-block: -TODO +B och C ``` diff --git a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/9.md b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/9.md index 962f9f0..89c1fe1 100644 --- a/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/9.md +++ b/content/Anatomi & Histologi 2/Gamla tentor/2023-01-11/9.md @@ -11,5 +11,5 @@ Vilka tvĂ„ av följande pĂ„stĂ„ende Ă€r korrekta avseende CNS funktionella anato - D: Syn förmedlas via andra kranialnerven och lukt via första kranialnerven ```spoiler-block: -TODO +B och D ``` diff --git a/content/Anatomi & Histologi 2/Statistik.md b/content/Anatomi & Histologi 2/Statistik.md index f9d333f..e785766 100644 --- a/content/Anatomi & Histologi 2/Statistik.md +++ b/content/Anatomi & Histologi 2/Statistik.md @@ -1,10 +1,10 @@ ### Tentor | Datum | OCR | Split | Bilder | Hotspot | Taggad | Svar | Granska | -| ---------- | :-: | :---: | :----: | :-----: | :----: | ---- | ------- | -| 2022-01-15 | ✅ | ✅ | ✅ | | ✅ | | | -| 2022-06-01 | ✅ | ✅ | ✅ | | ✅ | | | -| 2023-01-11 | ✅ | ✅ | ✅ | | ✅ | | | +| ---------- | :-: | :---: | :----: | :-----: | :----: | :--: | ------- | +| 2022-01-15 | ✅ | ✅ | ✅ | | ✅ | ✅ | | +| 2022-06-01 | ✅ | ✅ | ✅ | | ✅ | ✅ | | +| 2023-01-11 | ✅ | ✅ | ✅ | | ✅ | ✅ | | | 2023-05-31 | ✅ | ✅ | ✅ | | ✅ | | | | 2024-01-10 | ✅ | ✅ | ✅ | | ✅ | | | | 2024-05-29 | ✅ | ✅ | ✅ | | ✅ | | | diff --git a/quiz/IMPLEMENTATION_SUMMARY.md b/quiz/IMPLEMENTATION_SUMMARY.md new file mode 100644 index 0000000..3a20cf1 --- /dev/null +++ b/quiz/IMPLEMENTATION_SUMMARY.md @@ -0,0 +1,143 @@ +# Auto-Import Implementation Summary + +## What was implemented: + +### 1. Dependencies (pyproject.toml) +- Created `pyproject.toml` in `quiz/` directory +- Added Django and watchdog dependencies +- Configured for `uv` package manager + +### 2. Question Importer (quiz/utils/importer.py) +- `ImportStats` class: Tracks import statistics including: + - Total files found + - MCQ vs non-MCQ questions + - Questions with answers vs TODO placeholders + - Created vs updated counts + - Per-folder completion statistics +- `parse_markdown_question()`: Parses markdown files to extract: + - Question text + - Options (supports both `- A:` and `- A` formats) + - Correct answer from spoiler blocks + - Skips questions with "TODO" answers +- `import_question_file()`: Imports a single question file +- `import_questions()`: Bulk import with statistics +- `delete_question_by_path()`: Removes deleted questions from database + +### 3. File System Watcher (quiz/utils/watcher.py) +- `QuestionFileHandler`: Handles file system events with: + - 2-second debounce for file changes + - Auto-import on file create/modify + - Auto-delete on file removal + - Real-time console feedback +- `QuestionWatcher`: Main watcher class using watchdog Observer +- `start_watcher_thread()`: Starts watcher in background daemon thread + - Performs initial full import on startup + - Displays comprehensive statistics + - Continues watching for changes + +### 4. Django Integration +- Updated `QuizAppConfig.ready()` in `apps.py`: + - Automatically starts watcher thread on Django startup + - Runs in daemon thread (doesn't block shutdown) + - Only runs in main process (not reloader) +- Updated `import_questions` management command: + - Uses refactored importer + - Shows detailed statistics output +- Added `QUESTION_WATCH_PATH` setting to `settings.py` + +## Current Statistics: +``` +Total .md files found: 312 +MCQ questions found: 162 +Non-MCQ skipped: 152 +Questions with answers: 6 +Questions with TODO: 154 +Overall completion: 3.7% + +Completion by Exam Folder: +2022-01-15 2/ 25 MCQ ( 8.0%) +2022-06-01 4/ 19 MCQ ( 21.1%) +2023-01-11 0/ 17 MCQ ( 0.0%) +2023-05-31 0/ 10 MCQ ( 0.0%) +2024-01-10 0/ 14 MCQ ( 0.0%) +2024-05-29 0/ 14 MCQ ( 0.0%) +2025-01-15 0/ 16 MCQ ( 0.0%) +2025-02-08 0/ 16 MCQ ( 0.0%) +2025-06-03 0/ 16 MCQ ( 0.0%) +2025-08-08 0/ 15 MCQ ( 0.0%) +``` + +## How it works: + +1. **On Django startup**: + - Background thread starts automatically + - Performs initial import of all questions + - Displays comprehensive statistics + - Begins watching for file changes + +2. **When you edit a question in Obsidian**: + - Watcher detects file change + - Waits 2 seconds (debounce multiple saves) + - Automatically imports/updates the question + - Shows console feedback + +3. **When you delete a question file**: + - Watcher detects deletion + - Removes question from database + +4. **Manual import**: + - Run: `python3 manage.py import_questions` + - Shows same detailed statistics + +## Future considerations: + +### Multi-select questions support: +Currently the `Question.correct_answer` field is `max_length=1`, which only supports single answers. Many questions have "VĂ€lj tvĂ„ alternativ" and answers like "B och D" or "B, D". + +To support multi-select: +1. Update `Question.correct_answer` to `max_length=50` +2. Create Django migration +3. Update `parse_markdown_question()` to extract multiple letters (e.g., "B och D" → "B,D") +4. Update `views.py` answer validation to compare sorted comma-separated values +5. Update quiz UI to allow selecting multiple options + +### Answer format normalization: +Need to standardize multi-select answer format in Obsidian: +- Current: "B och D", "B, D", "BD" +- Recommended: "B,D" (sorted, comma-separated, no spaces) + +### Question types not yet supported: +- `frĂ„getyp/hotspot`: Image-based clickable questions +- `frĂ„getyp/dnd-text`: Drag-and-drop text matching +- `frĂ„getyp/textfĂ€lt`: Free text input questions +- `frĂ„getyp/sammansatt`: Multi-part questions + +These are currently skipped during import. + +## Testing the implementation: + +1. **Start Django server**: + ```bash + cd /Users/johandahlin/dev/medical-notes/quiz + python3 manage.py runserver + ``` + You'll see the initial import statistics on startup. + +2. **Test auto-import**: + - Open a question in Obsidian with "TODO" in spoiler block + - Replace "TODO" with a letter (e.g., "B") + - Save the file + - Check Django console for auto-import message + +3. **Test manual import**: + ```bash + python3 manage.py import_questions + ``` + +4. **Check database**: + ```bash + python3 manage.py shell + >>> from quiz.models import Question + >>> Question.objects.count() + ``` + diff --git a/quiz/__pycache__/settings.cpython-314.pyc b/quiz/__pycache__/settings.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..edfaa224cc9a9683a4f834251cec9548073ca253 GIT binary patch literal 2034 zcmb7FPjk~o6qjsSR%BZU2NLtIIHd!1Ao8>Xrb8*MVk@x+$2M!3v~+?-u{MsVEE#DH zjV|@EnH~~O!F8!jHDR`&(3tFGyMVvzCc&84KC1W(P96*_xru~_U(JCi$a2@ z$oF-jU@meL^;fVNeTN#ddGRYvQC$j9h`LJwx=16M%%Nha5Jus%)M|K!T4m-5Citqc z!8|_B4>#5LxOA{a(N(%CzA3Lxz9|D?z|4n+JpLVc5x|akfc>OEQ7HBf>?q(y?COcP zL^UxwJ4#3tc&|bufy`&gd<5`F1Thc?iPb0&E{)|zqQMa$f}i6#l+)Hnhi1E{z&-3|vy4`fr z9z@8rn_ha|antuZrk~c^ZOd%v$aHMJoS`vO)zJp#Yf26%s&-TP%Fh^w+&Rv+jWdiBQSs?d1ax#gc;TCK%9_ErOJwu*9w)ITEp}#rZ4#ufm5mD zS{{xr$hn(JIqzo&4kQFyZA(W`TGJcfK-=)7p<)ocI#hd@$rnKlPmJ&$=HzNs3xq0; zR;p^TQm)}-!?6+k7HK5D2J}3~B`yuPu6HbiS*5&GEGz!Wp$B8_l~eD&Wg>VPGi7;M z@p+;eN#dq$BCX-HTDoocsVb0{mgV$4r{mhXrL`Obezqc)KJ~e*he$>nS)T$nAE{vDeLJCgRTx z?X^t9u;4@8h0bdJu zjtsX=_;3vR{^6;{9G7%|lO%oP6($q*KO9Cps-{6Y|4}!R0oOWBfA)VMU3k9(J>*}0 zEe|bnX1xi$w^<+QGASI@G{b3V8V)(6THB-*EpyEc9y`owT5wrJ7j>cMSPvj(+vGZI zgt-N|rUdnmqtJd}x}+1sO^Dnu;kisej(DWYk;?{ap;)e|q&G=tlD4T~ez};>my{J5 zC^!x(6;-Q)Qm#^7#1pErTrJ6}LYgfvt8(Cm;0aqT<^mLs4c7q;C-cgpTra7bTvsdF zVo@pOFII31!dJ3&54v9Vo@iaEGADcOdoqHOa-H*+7xjst?;`W`bJKJ}+?(UZMX6pxu+g+ZBCt}qk+A#SFX01m{;7CvU%d9){n nkm~Y1VQM$^M40Ku`W!WNWsgb{@4V1u$uym#f2Sth49V2rgsV)V literal 0 HcmV?d00001 diff --git a/quiz/db.sqlite3 b/quiz/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..f79847d4f12eda1c0ab62c06b7fb82d436049281 GIT binary patch literal 77824 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 FFbg)eP@ez* literal 0 HcmV?d00001 diff --git a/quiz/db.sqlite3-wal b/quiz/db.sqlite3-wal new file mode 100644 index 0000000000000000000000000000000000000000..f9e7391e00e1d0fc5416a36db4db7570777b4ecc GIT binary patch literal 4128272 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�*!r?$eW9~T5B-Wg(?x#z^F!d>(l}y^PZ10$Q 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 literal 0 HcmV?d00001 diff --git a/quiz/manage.py b/quiz/manage.py new file mode 100755 index 0000000..ad61a15 --- /dev/null +++ b/quiz/manage.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() + diff --git a/quiz/pyproject.toml b/quiz/pyproject.toml new file mode 100644 index 0000000..b99bf42 --- /dev/null +++ b/quiz/pyproject.toml @@ -0,0 +1,17 @@ +[project] +name = "quiz" +version = "0.1.0" +description = "Medical quiz application with auto-import from Obsidian" +requires-python = ">=3.13" +dependencies = [ + "django>=6.0.0", + "watchdog>=6.0.0", +] + +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[tool.uv] +dev-dependencies = [] + diff --git a/quiz/quiz/__init__.py b/quiz/quiz/__init__.py new file mode 100644 index 0000000..63d0683 --- /dev/null +++ b/quiz/quiz/__init__.py @@ -0,0 +1,2 @@ +default_app_config = 'quiz.apps.QuizAppConfig' + diff --git a/quiz/quiz/__pycache__/__init__.cpython-314.pyc b/quiz/quiz/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6c43d9d6d1d1e57dfed5a7b3d34b4a3aa5aa4b66 GIT binary patch literal 222 zcmdPq4BO~JtQN2qHLPab5~v*qxTaWw*@EV(6(i z!wHZ633@RhG2!Z;V8j?4!^x933`9NprY#1&I?23wZ|1%4&HLufwXV(-g7J8Inq_r_ zzAEE%m@Vb_Iw*Ctj2x|mgj)5IHmwVN2=$|3V=Us^r#=%cUfgB7U2U%ea}73s1mEo!pt1M0i}+fsJ+IR z0~-DvbEj0CIdHUz7M`O|K0>H6g3zV^!YQ9u2tcn(D;qvH#45E2R6fSmt05QGGa}qo$|1%g)(UZ-R(Kc( z9{6!eJUb!3lZf}el1)jfk#$-7UVs;nO~GW3hw+8O%r-aryNM- K`hj3+1pWrU01aLM literal 0 HcmV?d00001 diff --git a/quiz/quiz/__pycache__/middleware.cpython-314.pyc b/quiz/quiz/__pycache__/middleware.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9a7f48e6411e17cadcc98b1708b761b8082f4054 GIT binary patch literal 1410 zcmZ`&OK;Oa5Z+Ck#7!Lxl%_!~!aNjk5e=;>aX|=fAfQB+C>LOHZkL{?G3DDQm=ln27$R|8( zl9mbmItVM|26gCpa*isxpA3@&#L0~iCqE5QNGj)OhlpMHOyOYDSi2&*XeFkMp#iCX z0+PeaZK{fZuZk zUw&TxeXvy9RhHXTQO8w&%MF4ht0lOrxU}5RLra^7XhBUEt|zTIS8~saLQ8TfefZzz zOB3ap$O@u)KePnD)Aa>-9MAlrW|q^llyF122%1nqC5XM{3#qKTzVy{Zxs}Z&X&L1_ zA$or|2rK03&M;9Ua|kp?XI|0RnCFTKE*GOvayu7mk_Weh4n7j&>-G3l1BWUb3sD;y za@&C)Havc}(cvEUdpwMwvj$vwIc1$+gPK@eigm{P&{vGbqyJ8FV$(Q)^|0s)*%&+e zPT$)Hnf%p_28yH`10Y=?v$TmWTd4VG|C#Mb_MaamWNf>*!j?pEoX%AHw~P5tt;O86 z;%25M_OpeWgIg4EoXt7pWVWXFAg7qVIvM`TGE17~e`4r#7J)dz;tyu4#9)gT4RK%Kyl#N9!PuRy8)O!fvE(7aa`P|(bBQr8YB44dF);!x z9%f7`eB{hkO89eK*n9BY1-%EZl<*oO7DMib;Z3By~s;IF)vGS{wp@tS9l=f5}ry QKakq@;!Zl=C%}@JpTSZ_3jhEB literal 0 HcmV?d00001 diff --git a/quiz/quiz/__pycache__/models.cpython-314.pyc b/quiz/quiz/__pycache__/models.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..372c6a7df4c0cc0b82880254b553050db193bc45 GIT binary patch literal 3884 zcmb_fO>h%O7VeQo(&*3nF_HnxMuyl#aV%rw4TL3B5*rtR!XXpKhXi{vmIf?VmP}78 zU@Dc;X&0)p1=Jqkum|U`75lW_(^5Hc%N`X)DY>R zsLpxmirmn%RTEC}!kk=F22IxsG-a;o22IZkG+kU%0Zs1BC!31msLr1oN|bM<_5j4b{%{J zH%Y4Vl+@5tRB#3JsxIc6Bh0V5VR;@){=hWo?1sbgE$g?nyivH$mMnLvkh@tjHY6*c zmsn9N6mMyIHk)Zo#V15B!=r4cp;0C(nIl((r8cQbuO8m*2#|3Hn04H7q1oh_nP&l(cX}CeiW6>(Hq4jy^z(H^0~rj*7#&}*~sQHdVZu( zWQI9LH=4D>LXTP(pQ z!Bj-kGI`xJVe2eozO)tTsYeE@k-^Q0TI6*3;!m>VO8-DW(C+3Oox%G(47Y(d@O7QDTnbwGS!ml!KlS4+$P94&WCE1-ISDnV6YT|kwP>IKaDEaknDVKTsI zZU;O(OWj~+L!ut2s22pFSZUIwjVicRPL-FTQQnUz#7-12C;>ah;R9rc%#7QNBF65TlM#T>+dU1ZN+-)vB7F=a5GYioh;An zMQ!VSoz)@}0>%A^;(oDtwAhAXJVPwoPeHVyxaavOp5G_v^1zIKgu;;<6>YnO0B#S= zKENa%#GW!hS_}y6X0nMUZ-Of1E7qlYSO_p0RuzDZ*K)tRf(W%dMP8c_*u4-`A@vx{ zumaS`^8><2MUR5PHfJ=ZCfj&gwrrGOPTW@7!DQ9RT&fJFT$W#$N?$gZZYhv1I5#Xe zSYiMRj}6N$t( zU8F|tdf}3>${A#NCf|C0@~x@!6!F68D^{4oSH4X263;5nVdMzvpulioVk#Gm48`i9 zWHpprJGeRb&xL<1RMd}Zp{wN!Tfy#nu&)~ITaVO&!{zCAqGI|O`!5i0>?gP68b=C_ zi~XUAHq^B!cod>)8wHR3pD5Vz4mFPnqrr@%%0^rsm;?(yzk}rD;@bA+O;A$E|=imBtXW=O?X0C7YLhVV3Op^+4y>K2 z98T{`TD+xj(tZw&|DCj*{sQ(Ancq*FPy;K?a=g*V!Wt5ASAZL;>lpl7h&mH)LcZS{eQKd82tDycJw8;84{Z+A;uGa} zdDefa8hPp4$WZwrzuOK~qeGihwdm{ROBjkqF%*qrC|Z;-7A;D`S-6rJ_zUu8Z|H^V z#dLO2#8}s5{96-V;=aLS;_KdncS|`d{sPX?%b)@gjF=Ze{NR)%>E9%=<912uyRY3p zd++QHf#yzFk^1j`a{tqNpY9N7?!>*)_}#htSMOcjA<*18=$96y2k}RVhlw8vw)sMT E0gzhSiU0rr literal 0 HcmV?d00001 diff --git a/quiz/quiz/__pycache__/urls.cpython-314.pyc b/quiz/quiz/__pycache__/urls.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..61721551d2201ff49e8324423a1751822fc8c1e9 GIT binary patch literal 535 zcmZ8eze@u#82!>quC28eT~rW69HfZNu=TO+MQaG)B_%&q{05(w7F@v*Fti6A z(r6xz5XKm!AA?g9N%G>k#%R}&otM^EdNg{_=FYzX=A?2O21kS z>pUA@glhRM4XYx9JArOgu_2KN`MH@q<+?8TxvqB;u5=U&Q&!1wJJR()s2-PwC>>~J zK;rKJ5wv-qq#kO@f2{rd$V#PaXZvpEq%v>GLA78?VKWe?aV?Q8CDX?lau)HP%916q zLgvfnP03E#t7SwLq zk#Uos=#i3ct#vL;VXGa7NsDjGNt3 qTo_D0OfBBgA>K^M?9KjNWr#OYJae;p+Z*Dg_adp}u1m6F!@dAYjEkE9 literal 0 HcmV?d00001 diff --git a/quiz/quiz/__pycache__/views.cpython-314.pyc b/quiz/quiz/__pycache__/views.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c04a4d9a75ec3462844c81181f3f13734e26aaa7 GIT binary patch literal 3315 zcmbVOL2Mhx6`keok}Hy;EG|jgu~adpC5A06#Fg8DJ93RH_`RW1 z*YTE)bK(8Ch}L`HA}^a;S(Bt(^AIxSGvt0vww4LW5knM}H`=Y9>qrTB)j* z)+$;xr{V{>4XkSAQsr`0H?fg}r`%$qSR*>!y{&nm;kS+P+B>euj!9&&D#5?;CWr>w zPyEP9j9G~>Cy})hSvxV_xU(N0apGw!o_6BnR(yPK=960=-D<|i?f7d>e8!5;*zvi> z?E^pRdtv9*mUM1s{6ORf{EeAI35BEE>75(9XYJ6Hrf}ss?17FUhq{L$=LLAJ{|7nn z`d!3O>+RO_`lld9ffrZ!$qqIFb6xzLin%T-JnIMnW`r)j29ESzuZw3uR=T5H1v^8i zFzC$zjENJSGo+5|{Yn53$@Sn*BJ>_^$b(%`QoYlIOozXuhd7<#}7ija&P%At!dpid}MISu2*^yVZ}*} zXiK~zE%}tbB_Zcif|DH|j-W!^o4C~VVG1RC@6@HOHxnU0Qeo#I1nZCd0(3g^OWik& zQb-q)~rsLo*D>dfGO;IpvsPmdv^VJ)fp-MHf2> zAPM0%xdM@2)gHq{cfi0Eh_;Xp+9utgWC)xgcBbn`&q#p!+df+MFaIpxS{OHS`zZ^~&~ zo_tq2kWlnR=hAfx{syl%e))|MafE~=Bpe}a3F%gU>`~!ip*48^>+tZ-?^@w=J3ofx z5)B>%koeLe3W)y0D1xE8c4)LIjQ;Cz7=>d_C~1X~hlqoXkIwQpI13M|e;X8qe~u@A zK8^k|eeoA5{_~3*$YX@3(UuWD$q4_$E1Lh6mmnN)`BQRJPv+oGt6XUA@(B99>v@F- zS_wceu|TT{)|P$u(9~muREXC@=5ogg7GXt^RQk!a<@Q11q7n3QqVEUn_LAZ3x^RY$ZCI+1e-jVrE5D5Kihr43?Q z8_~kkAmemVjtUxNP6AnE8<1--G)0Gh4+7FjpT9Kp^Nn4Th?%h8Xo)nsqv>o|b zW2P0BA1ypw_`{vX8?8wEQT1VUS9rH-M=m>&YgXi%9eJfOL(7{p+wqn(xINjDVvq4& z{nPs&zq51qgW|67_u;FbmA)9X6Y~cFfmJ@i6O|83EVncLZb)4(RabRzfLUW?ch7V* z#+pvdavd&6bE-SkQMU^=6@xQNrcS8qU?qJi*T12wxMH-!1#=}$pe&OTN?_)MCy4Fc z&b!hLSW>UxY4TGT2WTVX1_ zSU)R2BQY-}F(W54Pd_EKOg}d@B{MlOM>j9OB(+$-ur#v@OvD!y!3CIieWE_{7Y}$XLV-WB~xcj4qh~ literal 0 HcmV?d00001 diff --git a/quiz/quiz/management/commands/__init__.py b/quiz/quiz/management/commands/__init__.py new file mode 100644 index 0000000..16d8208 --- /dev/null +++ b/quiz/quiz/management/commands/__init__.py @@ -0,0 +1,2 @@ +# Management commands + diff --git a/quiz/quiz/management/commands/__pycache__/__init__.cpython-314.pyc b/quiz/quiz/management/commands/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d4f6fb4319f4bf932357ca04c550dab2965019b8 GIT binary patch literal 177 zcmdPq zSU)R2BQY-}F(W54Pd_EKOg}d@B{MlOM>j9OB(+$-ur#v@LgXgqC8nq5rskFCC+Ft^ vc`3#E@$s2?nI-Y@dIgoYIBatBQ%ZAE?TT1|#)BMC3}Sp@W@Kb6Vg|AR)FUju literal 0 HcmV?d00001 diff --git a/quiz/quiz/management/commands/__pycache__/import_questions.cpython-314.pyc b/quiz/quiz/management/commands/__pycache__/import_questions.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6d8f69dd78f24b32aa7dbfe7bf4db454204bcb02 GIT binary patch literal 2456 zcmcImO;FoL6kb`DEU*oB5=el=i2Tr+f=yC7O8Ux|1Bt07nPH~6^v0A<+GF2ZGNvAS=(OF#+xJ#)_x*ft z-|DTla4UlG`S`f`ogbl}nNS~s$84PfW&zzm3O9kqIm-1i-Z$YJ=P6&~`3e8HK!sk^ zf%=f*-;WgGIyb_*`>CjiM^HTQ3lrm<6Fj34( zgHY4XlZ<-2Q8OcNn~}5F&dC=wd`q|Q=H;wu86@M|VLJdkgd=U81ZDxHxm4Ym9ZCwiw!KH; z6raMs3n^uz7m@-l2qkG~C~I4~flC7!J5P-~O`gtc)Xtf5zdUXdYFqY)Zsj0}~rZPR$1cl>m|U^oHY$ZAE4I{sP1 zDon!vjw#re2s*b)-6y%nVrBe*xDIvuOJeD&8MKjZl>jq z0)MT}qSQ8Y+e;|r!Pi(pD9sNB8*;&)_NSPYrZM8lZ+P>}2M8TRX_S(h6hTbwIIsQ{ zG(&a1F{dDw=Am$De+X{l34X+jygozG@kjo>&1kbl1jSslDePwR+TObU^tll)rv>33 zL@uN{>L)bjdOjPmrG->y<9nUEflhvnkUsXGWV@?=YGYQ!-R%Mbf!(t4zab#iGf|&i zwBs#~=rx!&ugSThTxyqf+aNOBRoS=)oo2Gs*gv3&ol`|F{|@`a@f z)zG0z=+FcG(cHtiYAjKSC7#4q#P9E|+%G4mS7TS!LRWtZ?b(n*%fY2!RqCopT@Q{v z8hAKR?H;Uj50;bTPdlGV<GJU_tFf!kL!WK@oqGBB zr>imLd1wl=yZtSigesF%HLv9iRdrfbHD~KZi}4{9o^H+ZzO<`q*2ILub7ACdRmH5) zVU|~X42aXAstge`qiU35^JWoV5jZ5Osu@co1l|^!F)T|};m;tvV-dEoR(GlfA7 0: + self.stdout.write(self.style.WARNING(f'Completed with {stats.errors} errors')) + else: + self.stdout.write(self.style.SUCCESS('Import completed successfully!')) + + diff --git a/quiz/quiz/middleware.py b/quiz/quiz/middleware.py new file mode 100644 index 0000000..9852285 --- /dev/null +++ b/quiz/quiz/middleware.py @@ -0,0 +1,21 @@ +from .models import User + + +class LazyAuthMiddleware: + """ + Middleware that automatically creates and authenticates users based on session key. + No login required - users are created transparently on first visit. + """ + def __init__(self, get_response): + self.get_response = get_response + + def __call__(self, request): + if not request.session.session_key: + request.session.create() + + session_key = request.session.session_key + user, created = User.objects.get_or_create(session_key=session_key) + request.user = user + + return self.get_response(request) + diff --git a/quiz/quiz/migrations/0001_initial.py b/quiz/quiz/migrations/0001_initial.py new file mode 100644 index 0000000..ea80603 --- /dev/null +++ b/quiz/quiz/migrations/0001_initial.py @@ -0,0 +1,63 @@ +# Generated by Django + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='User', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('session_key', models.CharField(max_length=40, unique=True)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ], + ), + migrations.CreateModel( + name='Question', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('file_path', models.CharField(max_length=500, unique=True)), + ('text', models.TextField()), + ('correct_answer', models.CharField(max_length=1)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ], + ), + migrations.CreateModel( + name='QuizResult', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('selected_answer', models.CharField(max_length=1)), + ('is_correct', models.BooleanField()), + ('answered_at', models.DateTimeField(auto_now_add=True)), + ('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='quiz.question')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='results', to='quiz.user')), + ], + ), + migrations.CreateModel( + name='Option', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('letter', models.CharField(max_length=1)), + ('text', models.TextField()), + ('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='options', to='quiz.question')), + ], + ), + migrations.AlterUniqueTogether( + name='quizresult', + unique_together={('user', 'question')}, + ), + migrations.AlterUniqueTogether( + name='option', + unique_together={('question', 'letter')}, + ), + ] + diff --git a/quiz/quiz/migrations/__init__.py b/quiz/quiz/migrations/__init__.py new file mode 100644 index 0000000..b7693a2 --- /dev/null +++ b/quiz/quiz/migrations/__init__.py @@ -0,0 +1 @@ +# Migrations diff --git a/quiz/quiz/migrations/__pycache__/0001_initial.cpython-314.pyc b/quiz/quiz/migrations/__pycache__/0001_initial.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..970224a0978d8324547ee03ff0ac28d8fb29bff7 GIT binary patch literal 3114 zcmcguO-vg{6y9Ci>mLlP`Hcg{Cb%?)){tO=Tvb*02|rCj$(A4`608<>fKAP=*&UOF zL(8G+tx}F0bL}lXm7dD6$HlR#f!clkvDB_K92{lk)vT#S}+ETk3`(V^!Bo!f)vc%9-|5p+nrcnlHSpm?&vIa)rS2XpvZ7b?iTs$?-5=pZKcL&{p;s;gIxxn) zMg{@dQ4a~Y&=_0Ar9EOp)#_B1;SXflcp6Kw>3=Mn0ePVw%S=THF$<@8TVch>n@GfS zMl80Rk(t&v{?hz8GSl{fnQ1>~EFFNm_@2CUo)Je)g~bbi>#pZ(xp^V+u6{wNqq|f` zmwZMkPT9b~NPCXzIH3y}sBnI_C) zigJdt{7A|nZ3Ax-zM!ew1w=v>kCKd2Y~>J5e<;a{0v2A!4Zp6UoMMu|odPoHY$w5W zHHW0Uj5pO2n2yAY(IZTn)^x)_Ygm#s^C2=)tkDeFBB4TFp`_g-0!|!o1PR?KsJkLE z3pq@hO_T#m3UX{oNHwL3JJR6l91kP_tQ``&joVO$UWv)l>{6CSe8Tk)|MRO+}_bFEDACbb8`8ec2lHc%*9%QP(;2~KXx zhP!N>f^ZkrEmYZAgsQpA@Pw}CkgT~y>>>N1o{+YDyOO|GoI!#N! z$B~|=yqy>>CWa3t4sj`Q%MxxMM`HUsc6_85A31C*#iuP{rtJ5&HJ$kU!BAPKaou&M z>+bz^yC+@jNgwnbDy5#AmT(K$?04AFR56-*9v!rV&yFL#Pp{d1BgMXvgY8n^xFt-~ zIle}9uvm&uSi)qv(N7tLfKf*cqu7~@ENbI6vG)Jw(j)nfeW^LWM*Mk@)) z6cd@lWGOLY3A4wMuKguDmM+H92OWPze~;SPxufiyofVI=qMf~el)Z0BS}CSmLcS8; zKruS-Z0WaqzuvP)Zyb%@ut(>QM(6F(rK8a$3u%`5eJT1wnPDR1+$nKH&x|9wf6eY1 zEOre(+b(rwE#Zqgd3`@=)c^{Q*ctAGVR~jc%4d!%2YocJ0my5Mlh^)YpdZq79J^w5 zUp?`8V8iV$cO!Zn8?m}G?#4ZKxP|}mYvX#gKT|vjy7wxrtUA}&y}8lX%C!6OoUYzD zBU`m~u8!+!9CRe`r8`BwGNwSJ->N2^H)RjYvafiCP5s3rPWUmFe-g5V zSU)R2BQY-}F(W54Pd_EKOg}d@B{MlOM>j9OB(+$-ur#v@LgZ$q7bTWt=I0gb$H!;p oWtPOp>lIYq;;_lhPbtkwwJTx;nhLVF7{vI*%*e=C#0+Es01LP&NdN!< literal 0 HcmV?d00001 diff --git a/quiz/quiz/models.py b/quiz/quiz/models.py new file mode 100644 index 0000000..dafd814 --- /dev/null +++ b/quiz/quiz/models.py @@ -0,0 +1,47 @@ +from django.db import models + + +class User(models.Model): + session_key = models.CharField(max_length=40, unique=True) + created_at = models.DateTimeField(auto_now_add=True) + + def __str__(self): + return f"User {self.session_key[:8]}" + + +class Question(models.Model): + file_path = models.CharField(max_length=500, unique=True) + text = models.TextField() + correct_answer = models.CharField(max_length=1) + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + def __str__(self): + return self.text[:50] + + +class Option(models.Model): + question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name='options') + letter = models.CharField(max_length=1) + text = models.TextField() + + class Meta: + unique_together = ['question', 'letter'] + + def __str__(self): + return f"{self.letter}. {self.text[:30]}" + + +class QuizResult(models.Model): + user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='results') + question = models.ForeignKey(Question, on_delete=models.CASCADE) + selected_answer = models.CharField(max_length=1) + is_correct = models.BooleanField() + answered_at = models.DateTimeField(auto_now_add=True) + + class Meta: + unique_together = ['user', 'question'] + + def __str__(self): + return f"{self.user} - {self.question.text[:30]} - {'✓' if self.is_correct else '✗'}" + diff --git a/quiz/quiz/urls.py b/quiz/quiz/urls.py new file mode 100644 index 0000000..3b2d602 --- /dev/null +++ b/quiz/quiz/urls.py @@ -0,0 +1,11 @@ +from django.urls import path + +from .views import index, get_next_question, submit_answer, stats + +urlpatterns = [ + path('', index, name='index'), + path('next/', get_next_question, name='next_question'), + path('submit/', submit_answer, name='submit_answer'), + path('stats/', stats, name='stats'), +] + diff --git a/quiz/quiz/utils/__init__.py b/quiz/quiz/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/quiz/quiz/utils/__pycache__/__init__.cpython-314.pyc b/quiz/quiz/utils/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3dbff2da6d1b197492a1ae79e3bab89691186fcd GIT binary patch literal 163 zcmdPqLBOc4DTM8E(el<}Dj$Y@{)Vo+w#Wb|9fP{ah}e+Eh3a?lSgPAw|d z&&tn8%u7kk$jQvpPf0D)&rMCqOis+v&C4%IE!HnA&8&hDr6rj;#rpB_nR%Hd@$q^E hmA5!-a`RJ4b5iY!Sb+wDtSkmGJ~1;gG8QodSpc^}CYb;L literal 0 HcmV?d00001 diff --git a/quiz/quiz/utils/__pycache__/importer.cpython-314.pyc b/quiz/quiz/utils/__pycache__/importer.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f8c80fd65cd36ceead399f3300202ce68bf31890 GIT binary patch literal 12256 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 literal 0 HcmV?d00001 diff --git a/quiz/quiz/utils/importer.py b/quiz/quiz/utils/importer.py new file mode 100644 index 0000000..8edcffa --- /dev/null +++ b/quiz/quiz/utils/importer.py @@ -0,0 +1,248 @@ +import re +from pathlib import Path +from collections import defaultdict +from typing import Tuple +from quiz.models import Question, Option + + +class ImportStats: + """Track import statistics by exam folder""" + + def __init__(self): + self.total_files = 0 + self.mcq_questions = 0 + self.non_mcq_skipped = 0 + self.questions_with_answers = 0 + self.questions_with_todo = 0 + self.created = 0 + self.updated = 0 + self.errors = 0 + self.by_folder = defaultdict(lambda: { + 'total': 0, + 'mcq': 0, + 'answered': 0, + 'todo': 0 + }) + + def format_output(self) -> str: + """Format statistics for console output""" + lines = [] + lines.append("\n" + "="*70) + lines.append("QUESTION IMPORT STATISTICS") + lines.append("="*70) + lines.append(f"Total .md files found: {self.total_files}") + lines.append(f"MCQ questions found: {self.mcq_questions}") + lines.append(f"Non-MCQ skipped: {self.non_mcq_skipped}") + lines.append(f"Questions with answers: {self.questions_with_answers}") + lines.append(f"Questions with TODO: {self.questions_with_todo}") + lines.append(f"Created in database: {self.created}") + lines.append(f"Updated in database: {self.updated}") + if self.errors > 0: + lines.append(f"Errors: {self.errors}") + + if self.mcq_questions > 0: + completion_pct = (self.questions_with_answers / self.mcq_questions * 100) + lines.append(f"Overall completion: {completion_pct:.1f}%") + + lines.append("\n" + "-"*70) + lines.append("COMPLETION BY EXAM FOLDER") + lines.append("-"*70) + + sorted_folders = sorted(self.by_folder.items()) + for folder, stats in sorted_folders: + if stats['mcq'] > 0: + pct = (stats['answered'] / stats['mcq'] * 100) + lines.append(f"{folder:20} {stats['answered']:3}/{stats['mcq']:3} MCQ ({pct:5.1f}%)") + + lines.append("="*70 + "\n") + return "\n".join(lines) + + +def parse_markdown_question(file_path: Path, content: str) -> Tuple[bool, dict]: + """ + Parse a markdown file and extract question data. + + Returns: + (is_mcq, question_data) where question_data contains: + - text: question text + - options: list of (letter, text) tuples + - correct_answer: the correct answer letter(s) + - has_answer: whether it has an answer (not TODO) + """ + lines = content.split('\n') + + # Check for MCQ tags in frontmatter + is_mcq = False + in_frontmatter = False + for line in lines: + if line.strip() == '---': + in_frontmatter = not in_frontmatter + continue + if in_frontmatter and ('frĂ„getyp/mcq' in line or 'frĂ„getyp/scq' in line): + is_mcq = True + break + + if not is_mcq: + return False, {} + + # Extract question text (first non-empty line after frontmatter) + question_text = None + in_frontmatter = False + frontmatter_done = False + + for line in lines: + if line.strip() == '---': + if not in_frontmatter: + in_frontmatter = True + else: + in_frontmatter = False + frontmatter_done = True + continue + + if frontmatter_done and line.strip() and not line.startswith('![['): + # Skip "VĂ€lj ett/tvĂ„ alternativ:" lines + if 'VĂ€lj' in line and 'alternativ' in line: + continue + if not line.startswith('-') and not line.startswith('```'): + question_text = line.strip().replace('**', '') + break + + if not question_text: + return True, {} + + # Extract options (pattern: "- A:" or "- A" or just "- A:") + options_data = [] + for line in lines: + # Match "- A: text" or "- A: " or just "- A" + match = re.match(r'^-\s*([A-Z]):\s*(.*)$', line.strip()) + if not match: + # Also try "- A" without colon + match = re.match(r'^-\s*([A-Z])$', line.strip()) + + if match: + letter = match.group(1) + text = match.group(2) if len(match.groups()) > 1 else "" + options_data.append((letter, text.strip())) + + if len(options_data) < 2: + return True, {} + + # Extract answer from spoiler block + correct_answer = None + has_answer = False + in_spoiler = False + + for line in lines: + if line.strip().startswith('```spoiler-block:'): + in_spoiler = True + continue + if in_spoiler: + if line.strip() == '```': + break + stripped = line.strip() + if stripped and stripped != 'TODO': + # Extract single letter answer (e.g., "B" or "F") + answer_match = re.match(r'^([A-Z])$', stripped) + if answer_match: + correct_answer = answer_match.group(1) + has_answer = True + break + elif stripped == 'TODO': + break + + return True, { + 'text': question_text, + 'options': options_data, + 'correct_answer': correct_answer, + 'has_answer': has_answer + } + + +def import_question_file(file_path: Path, base_path: Path, stats: ImportStats): + """Import a single question file""" + try: + content = file_path.read_text(encoding='utf-8') + is_mcq, question_data = parse_markdown_question(file_path, content) + + # Track folder stats + relative_path = file_path.relative_to(base_path) + folder_name = relative_path.parts[0] if len(relative_path.parts) > 1 else 'root' + stats.by_folder[folder_name]['total'] += 1 + + if not is_mcq: + stats.non_mcq_skipped += 1 + return + + stats.mcq_questions += 1 + stats.by_folder[folder_name]['mcq'] += 1 + + if not question_data or not question_data.get('text'): + stats.non_mcq_skipped += 1 + return + + if not question_data['has_answer']: + stats.questions_with_todo += 1 + stats.by_folder[folder_name]['todo'] += 1 + return # Skip questions without answers + + stats.questions_with_answers += 1 + stats.by_folder[folder_name]['answered'] += 1 + + # Import to database + file_path_str = str(file_path.relative_to(base_path.parent)) + + question, created = Question.objects.update_or_create( + file_path=file_path_str, + defaults={ + 'text': question_data['text'], + 'correct_answer': question_data['correct_answer'], + } + ) + + if created: + stats.created += 1 + else: + stats.updated += 1 + + # Update options + question.options.all().delete() + for letter, text in question_data['options']: + Option.objects.create(question=question, letter=letter, text=text) + + except Exception as e: + stats.errors += 1 + print(f"Error importing {file_path}: {e}") + + +def import_questions(folder_path: Path, base_path: Path = None) -> ImportStats: + """ + Import all questions from a folder. + + Args: + folder_path: Path to the folder containing question markdown files + base_path: Base path for relative path calculations (defaults to folder_path) + + Returns: + ImportStats object with import statistics + """ + if base_path is None: + base_path = folder_path + + stats = ImportStats() + + for md_file in folder_path.rglob('*.md'): + stats.total_files += 1 + import_question_file(md_file, base_path, stats) + + return stats + + +def delete_question_by_path(file_path: Path, base_path: Path): + """Delete a question from the database by file path""" + try: + file_path_str = str(file_path.relative_to(base_path.parent)) + Question.objects.filter(file_path=file_path_str).delete() + print(f"Deleted question: {file_path_str}") + except Exception as e: + print(f"Error deleting question {file_path}: {e}") + diff --git a/quiz/quiz/utils/watcher.py b/quiz/quiz/utils/watcher.py new file mode 100644 index 0000000..90aff6e --- /dev/null +++ b/quiz/quiz/utils/watcher.py @@ -0,0 +1,132 @@ +import time +import threading +from pathlib import Path +from watchdog.observers import Observer +from watchdog.events import FileSystemEventHandler, FileSystemEvent +from django.conf import settings +from quiz.utils.importer import import_question_file, delete_question_by_path, ImportStats + + +class QuestionFileHandler(FileSystemEventHandler): + """Handle file system events for question markdown files""" + + def __init__(self, base_path: Path, watch_path: Path): + super().__init__() + self.base_path = base_path + self.watch_path = watch_path + self.pending_events = {} + self.debounce_seconds = 2 + self.lock = threading.Lock() + + def _debounced_import(self, file_path: Path): + """Import file after debounce delay""" + time.sleep(self.debounce_seconds) + + with self.lock: + if file_path in self.pending_events: + del self.pending_events[file_path] + + if file_path.exists(): + print(f"\n[Auto-import] Processing: {file_path.name}") + stats = ImportStats() + import_question_file(file_path, self.watch_path, stats) + + if stats.created > 0: + print(f"[Auto-import] ✓ Created question from {file_path.name}") + elif stats.updated > 0: + print(f"[Auto-import] ✓ Updated question from {file_path.name}") + elif stats.questions_with_todo > 0: + print(f"[Auto-import] ⊘ Skipped {file_path.name} (TODO answer)") + elif stats.non_mcq_skipped > 0: + print(f"[Auto-import] ⊘ Skipped {file_path.name} (not MCQ)") + + def _handle_file_change(self, file_path: Path): + """Handle file creation or modification with debouncing""" + if not file_path.suffix == '.md': + return + + with self.lock: + # Cancel pending import if exists + if file_path in self.pending_events: + self.pending_events[file_path].cancel() + + # Schedule new import + timer = threading.Timer(self.debounce_seconds, self._debounced_import, args=[file_path]) + self.pending_events[file_path] = timer + timer.start() + + def on_created(self, event: FileSystemEvent): + """Handle file creation""" + if not event.is_directory: + self._handle_file_change(Path(event.src_path)) + + def on_modified(self, event: FileSystemEvent): + """Handle file modification""" + if not event.is_directory: + self._handle_file_change(Path(event.src_path)) + + def on_deleted(self, event: FileSystemEvent): + """Handle file deletion""" + if not event.is_directory and event.src_path.endswith('.md'): + file_path = Path(event.src_path) + print(f"\n[Auto-import] Deleting: {file_path.name}") + delete_question_by_path(file_path, self.watch_path) + + +class QuestionWatcher: + """Watch for changes in question markdown files and auto-import""" + + def __init__(self, watch_path: Path, base_path: Path = None): + self.watch_path = watch_path + self.base_path = base_path or watch_path + self.observer = None + self.running = False + + def start(self): + """Start watching for file changes""" + if self.running: + return + + self.observer = Observer() + event_handler = QuestionFileHandler(self.base_path, self.watch_path) + self.observer.schedule(event_handler, str(self.watch_path), recursive=True) + self.observer.start() + self.running = True + print(f"[QuestionWatcher] Started watching: {self.watch_path}") + + def stop(self): + """Stop watching for file changes""" + if self.observer and self.running: + self.observer.stop() + self.observer.join() + self.running = False + print("[QuestionWatcher] Stopped") + + +def start_watcher_thread(): + """Start the question watcher in a background thread""" + from quiz.utils.importer import import_questions + + def run_watcher(): + # Get watch path from settings + watch_path_str = getattr(settings, 'QUESTION_WATCH_PATH', 'content/Anatomi & Histologi 2/Gamla tentor') + watch_path = settings.BASE_DIR.parent / watch_path_str + + if not watch_path.exists(): + print(f"[QuestionWatcher] Warning: Watch path does not exist: {watch_path}") + return + + # Initial import + print("\n[QuestionWatcher] Starting initial import...") + stats = import_questions(watch_path, watch_path) + print(stats.format_output()) + + # Start watching for changes + watcher = QuestionWatcher(watch_path, watch_path) + watcher.start() + + # Start in daemon thread so it doesn't block shutdown + thread = threading.Thread(target=run_watcher, name="QuestionWatcher", daemon=True) + thread.start() + print("[QuestionWatcher] Background thread started") + diff --git a/quiz/quiz/views.py b/quiz/quiz/views.py new file mode 100644 index 0000000..c26475e --- /dev/null +++ b/quiz/quiz/views.py @@ -0,0 +1,67 @@ +from django.http import HttpResponse +from django.shortcuts import render +from django.views.decorators.http import require_http_methods + +from .models import Question, QuizResult + + +def index(request): + total_questions = Question.objects.count() + answered_count = QuizResult.objects.filter(user=request.user).count() + + context = { + 'total_questions': total_questions, + 'answered_count': answered_count, + } + return render(request, 'index.html', context) + + +def get_next_question(request): + answered_ids = QuizResult.objects.filter(user=request.user).values_list('question_id', flat=True) + next_question = Question.objects.exclude(id__in=answered_ids).first() + + if not next_question: + return render(request, 'partials/complete.html') + + return render(request, 'partials/question.html', {'question': next_question}) + + +@require_http_methods(["POST"]) +def submit_answer(request): + question_id = request.POST.get('question_id') + selected_answer = request.POST.get('answer') + + if not question_id or not selected_answer: + return HttpResponse("Invalid submission", status=400) + + try: + question = Question.objects.get(id=question_id) + except Question.DoesNotExist: + return HttpResponse("Question not found", status=404) + + is_correct = selected_answer == question.correct_answer + + QuizResult.objects.update_or_create( + user=request.user, + question=question, + defaults={ + 'selected_answer': selected_answer, + 'is_correct': is_correct, + } + ) + + return get_next_question(request) + + +def stats(request): + results = QuizResult.objects.filter(user=request.user) + total = results.count() + correct = results.filter(is_correct=True).count() + + context = { + 'total': total, + 'correct': correct, + 'percentage': round((correct / total * 100) if total > 0 else 0, 1), + } + return render(request, 'stats.html', context) + diff --git a/quiz/settings.py b/quiz/settings.py new file mode 100644 index 0000000..6d2fbb4 --- /dev/null +++ b/quiz/settings.py @@ -0,0 +1,75 @@ +""" +Django settings for quiz application +""" +import os +from pathlib import Path + +# Build paths inside the project +BASE_DIR = Path(__file__).resolve().parent + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = os.environ.get('SECRET_KEY', 'django-insecure-change-this-in-production') + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = os.environ.get('DEBUG', 'True') == 'True' + +ALLOWED_HOSTS = os.environ.get('ALLOWED_HOSTS', '*').split(',') + +# Application definition +INSTALLED_APPS = [ + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.staticfiles', + 'quiz.apps.QuizAppConfig', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'quiz.middleware.LazyAuthMiddleware', +] + +ROOT_URLCONF = 'quiz.urls' + +TEMPLATES = [{ + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [BASE_DIR / 'templates'], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.messages.context_processors.messages', + ], + }, +}] + +# Database +# https://docs.djangoproject.com/en/stable/ref/settings/#databases +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + 'OPTIONS': { + 'init_command': "PRAGMA journal_mode=WAL;", + } + } +} + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/stable/howto/static-files/ +STATIC_URL = '/static/' +STATIC_ROOT = BASE_DIR / 'static' + +# Default primary key field type +# https://docs.djangoproject.com/en/stable/ref/settings/#default-auto-field +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' + +# Internationalization +USE_TZ = True + +# Question import settings +QUESTION_WATCH_PATH = 'content/Anatomi & Histologi 2/Gamla tentor' + diff --git a/quiz/templates/base.html b/quiz/templates/base.html new file mode 100644 index 0000000..b169252 --- /dev/null +++ b/quiz/templates/base.html @@ -0,0 +1,21 @@ + + + + + + Quiz + + + + + {% block content %}{% endblock %} + + + diff --git a/quiz/templates/index.html b/quiz/templates/index.html new file mode 100644 index 0000000..5f820d5 --- /dev/null +++ b/quiz/templates/index.html @@ -0,0 +1,10 @@ +{% extends "base.html" %} +{% block content %} +

Quiz Application

+
+
+
+

Besvarade frÄgor: {{ answered_count }} / {{ total_questions }}

+
+{% endblock %} + diff --git a/quiz/templates/partials/complete.html b/quiz/templates/partials/complete.html new file mode 100644 index 0000000..38a8737 --- /dev/null +++ b/quiz/templates/partials/complete.html @@ -0,0 +1,6 @@ +
+

Quiz Completed!

+

Du har besvarat alla frÄgor.

+ Se dina resultat +
+ diff --git a/quiz/templates/partials/question.html b/quiz/templates/partials/question.html new file mode 100644 index 0000000..a46e535 --- /dev/null +++ b/quiz/templates/partials/question.html @@ -0,0 +1,14 @@ +
+

{{ question.text }}

+
+ {% csrf_token %} + + {% for option in question.options.all %} +
+ + +
+ {% endfor %} +
+
+ diff --git a/quiz/templates/stats.html b/quiz/templates/stats.html new file mode 100644 index 0000000..76a840b --- /dev/null +++ b/quiz/templates/stats.html @@ -0,0 +1,11 @@ +{% extends "base.html" %} +{% block content %} +

Dina Resultat

+
+

Totalt besvarade: {{ total }}

+

RĂ€tt svar: {{ correct }}

+

Procent: {{ percentage }}%

+
+Tillbaka till quiz +{% endblock %} + diff --git a/quiz/wsgi.py b/quiz/wsgi.py new file mode 100644 index 0000000..148cc66 --- /dev/null +++ b/quiz/wsgi.py @@ -0,0 +1,17 @@ +""" +WSGI config for quiz project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/stable/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings') + +application = get_wsgi_application() +