Added kahoot-import

This commit is contained in:
Mawoka
2022-03-08 21:42:44 +01:00
parent 5c5386fdf8
commit 4f4b38d8b0
5 changed files with 47 additions and 9 deletions
+7 -2
View File
@@ -9,7 +9,12 @@ class _Response(BaseModel):
kahoot: _Kahoot
async def get(game_id: str) -> _Response:
async def get(game_id: str) -> _Response | None:
async with ClientSession() as session:
async with session.get(f"https://create.kahoot.it/rest/kahoots/{game_id}/card/?includeKahoot=true") as response:
return _Response(**await response.json())
if response.status == 200:
return _Response(**await response.json())
elif response.status == 404:
return None
else:
raise Exception(f"Unexpected response status: {response.status}")
-3
View File
@@ -1,3 +0,0 @@
from aiohttp import ClientSession
import pydantic
+30
View File
@@ -0,0 +1,30 @@
import json
import uuid
from datetime import datetime
from aiohttp import ClientSession
import pydantic
from classquiz.db.models import Quiz, QuizAnswer, QuizQuestion, User
from classquiz.kahoot_importer.get import get as get_quiz
async def import_quiz(quiz_id: str, user: User) -> Quiz | str:
"""
Imports a quiz from Kahoot.
:param quiz_id: The ID of the quiz to import.
:return: True if the import was successful, False otherwise.
"""
quiz = await get_quiz(quiz_id)
if quiz is None:
return "quiz not found"
quiz_questions: list[dict] = []
for q in quiz.kahoot.questions:
answers: list[QuizAnswer] = []
for a in q.choices:
answers.append((QuizAnswer(right=a.correct, answer=a.answer)))
quiz_questions.append(QuizQuestion(question=q.question, answers=answers, time=str(q.time / 1000)).dict())
quiz_data = Quiz(id=uuid.uuid4(), public=False, title=quiz.kahoot.title, description=quiz.kahoot.description,
created_at=datetime.now(), updated_at=datetime.now(), user_id=user.id,
questions=json.dumps(quiz_questions))
return await quiz_data.save()