🚨 Made flake8 happy
This commit is contained in:
@@ -1,12 +1,12 @@
|
|||||||
from fastapi import FastAPI, Request
|
|
||||||
import sentry_sdk
|
import sentry_sdk
|
||||||
|
from fastapi import FastAPI, Request
|
||||||
|
from sentry_sdk.integrations.redis import RedisIntegration
|
||||||
from socketio import ASGIApp
|
from socketio import ASGIApp
|
||||||
|
|
||||||
from classquiz.db import database
|
|
||||||
from classquiz.config import settings
|
from classquiz.config import settings
|
||||||
|
from classquiz.db import database
|
||||||
from classquiz.routers import users, quiz, utils, stats, storage
|
from classquiz.routers import users, quiz, utils, stats, storage
|
||||||
from classquiz.socket_server import sio
|
from classquiz.socket_server import sio
|
||||||
from sentry_sdk.integrations.redis import RedisIntegration
|
|
||||||
|
|
||||||
settings = settings()
|
settings = settings()
|
||||||
if settings.sentry_dsn:
|
if settings.sentry_dsn:
|
||||||
|
|||||||
+2
-1
@@ -15,7 +15,8 @@ from passlib.hash import argon2
|
|||||||
|
|
||||||
from classquiz.cache import get_cache
|
from classquiz.cache import get_cache
|
||||||
from classquiz.config import settings
|
from classquiz.config import settings
|
||||||
from classquiz.db.models import *
|
from datetime import datetime
|
||||||
|
from classquiz.db.models import User, TokenData
|
||||||
|
|
||||||
settings = settings()
|
settings = settings()
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import ormar
|
|||||||
|
|
||||||
from classquiz.config import redis, settings
|
from classquiz.config import redis, settings
|
||||||
from classquiz.db.models import User
|
from classquiz.db.models import User
|
||||||
|
|
||||||
settings = settings()
|
settings = settings()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+3
-1
@@ -1,6 +1,8 @@
|
|||||||
import redis.asyncio as redis_lib
|
|
||||||
from functools import lru_cache
|
from functools import lru_cache
|
||||||
|
|
||||||
|
import redis.asyncio as redis_lib
|
||||||
from pydantic import BaseSettings, RedisDsn, PostgresDsn
|
from pydantic import BaseSettings, RedisDsn, PostgresDsn
|
||||||
|
|
||||||
from classquiz.storage import Storage
|
from classquiz.storage import Storage
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
from pydantic import BaseModel
|
|
||||||
from uuid import UUID
|
|
||||||
from typing import List, Any, Optional
|
from typing import List, Any, Optional
|
||||||
|
from uuid import UUID
|
||||||
|
|
||||||
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
|
||||||
class _CoverMetadata(BaseModel):
|
class _CoverMetadata(BaseModel):
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from aiohttp import ClientSession
|
from aiohttp import ClientSession
|
||||||
|
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
from classquiz.kahoot_importer import _Card, _Kahoot
|
from classquiz.kahoot_importer import _Card, _Kahoot
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
|
import html
|
||||||
import json
|
import json
|
||||||
import uuid
|
import uuid
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from aiohttp import ClientSession, FormData
|
from aiohttp import ClientSession
|
||||||
import html
|
|
||||||
|
from classquiz.config import settings, storage
|
||||||
from classquiz.db.models import Quiz, QuizAnswer, QuizQuestion, User
|
from classquiz.db.models import Quiz, QuizAnswer, QuizQuestion, User
|
||||||
from classquiz.kahoot_importer.get import get as get_quiz
|
from classquiz.kahoot_importer.get import get as get_quiz
|
||||||
from classquiz.config import settings, storage
|
|
||||||
|
|
||||||
settings = settings()
|
settings = settings()
|
||||||
|
|
||||||
@@ -65,7 +66,6 @@ async def import_quiz(quiz_id: str, user: User) -> Quiz | str:
|
|||||||
quiz_questions: list[dict] = []
|
quiz_questions: list[dict] = []
|
||||||
quiz_id = uuid.uuid4()
|
quiz_id = uuid.uuid4()
|
||||||
|
|
||||||
|
|
||||||
for q in quiz.kahoot.questions:
|
for q in quiz.kahoot.questions:
|
||||||
answers: list[QuizAnswer] = []
|
answers: list[QuizAnswer] = []
|
||||||
image = None
|
image = None
|
||||||
|
|||||||
@@ -1,15 +1,16 @@
|
|||||||
from uuid import UUID
|
from typing import List
|
||||||
from typing import List, Any, Optional
|
|
||||||
from aiohttp import ClientSession
|
|
||||||
from classquiz.kahoot_importer import _Entity
|
|
||||||
|
|
||||||
|
from aiohttp import ClientSession
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
from classquiz.kahoot_importer import _Entity
|
||||||
|
|
||||||
|
|
||||||
|
# noqa : E501
|
||||||
class _Response(BaseModel):
|
class _Response(BaseModel):
|
||||||
entities: List[_Entity]
|
entities: List[_Entity]
|
||||||
totalHits: int
|
totalHits: int
|
||||||
cursor: int
|
cursor: int | None
|
||||||
pageTimestamp: int
|
pageTimestamp: int
|
||||||
|
|
||||||
|
|
||||||
@@ -26,7 +27,7 @@ async def search(query: str | None, limit: int | None = 9, cursor: int | None =
|
|||||||
"""
|
"""
|
||||||
async with ClientSession() as session:
|
async with ClientSession() as session:
|
||||||
async with session.get(
|
async with session.get(
|
||||||
f"https://create.kahoot.it/rest/kahoots/?query={query}&limit={limit}&cursor={cursor}&searchCluster={search_cluster}&includeExtendedCounters=false&inventoryItemId={inventory_item_id}"
|
f"https://create.kahoot.it/rest/kahoots/?query={query}&limit={limit}&cursor={cursor}&searchCluster={search_cluster}&includeExtendedCounters=false&inventoryItemId={inventory_item_id}" # noqa : E501
|
||||||
|
|
||||||
) as response:
|
) as response:
|
||||||
# print(
|
# print(
|
||||||
|
|||||||
@@ -1,18 +1,17 @@
|
|||||||
import json
|
import json
|
||||||
|
import re
|
||||||
import uuid
|
import uuid
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from random import randint
|
from random import randint
|
||||||
|
|
||||||
from pydantic import ValidationError
|
|
||||||
|
|
||||||
from classquiz.kahoot_importer.import_quiz import import_quiz
|
|
||||||
from fastapi import APIRouter, Depends, HTTPException
|
from fastapi import APIRouter, Depends, HTTPException
|
||||||
from fastapi.responses import JSONResponse
|
from fastapi.responses import JSONResponse
|
||||||
import re
|
from pydantic import ValidationError
|
||||||
|
|
||||||
from classquiz.auth import get_current_user, get_current_user_optional
|
from classquiz.auth import get_current_user, get_current_user_optional
|
||||||
from classquiz.config import redis, settings, storage
|
from classquiz.config import redis, settings, storage
|
||||||
from classquiz.db.models import Quiz, QuizInput, User, PlayGame
|
from classquiz.db.models import Quiz, QuizInput, User, PlayGame
|
||||||
|
from classquiz.kahoot_importer.import_quiz import import_quiz
|
||||||
|
|
||||||
settings = settings()
|
settings = settings()
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,8 @@
|
|||||||
import os
|
from fastapi import APIRouter
|
||||||
|
|
||||||
from fastapi import APIRouter, Response
|
|
||||||
from fastapi.background import BackgroundTasks
|
|
||||||
from fastapi.responses import JSONResponse, RedirectResponse
|
|
||||||
from fastapi.security import OAuth2PasswordRequestForm
|
|
||||||
from pydantic import BaseModel
|
|
||||||
from classquiz.auth import *
|
|
||||||
from classquiz.config import redis
|
from classquiz.config import redis
|
||||||
from classquiz.db.models import *
|
from pydantic import BaseModel
|
||||||
|
from classquiz.db.models import Quiz, User
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
|
import re
|
||||||
|
|
||||||
from fastapi import APIRouter, HTTPException
|
from fastapi import APIRouter, HTTPException
|
||||||
from fastapi.responses import StreamingResponse
|
from fastapi.responses import StreamingResponse
|
||||||
|
|
||||||
from classquiz.config import settings, storage
|
from classquiz.config import settings, storage
|
||||||
import re
|
|
||||||
|
|
||||||
settings = settings()
|
settings = settings()
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,20 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
from email_validator import validate_email, EmailNotValidError
|
from email_validator import validate_email, EmailNotValidError
|
||||||
from fastapi import APIRouter, Response
|
from fastapi import APIRouter, Response, HTTPException, Request, Depends, status
|
||||||
|
from datetime import timedelta, datetime
|
||||||
from fastapi.background import BackgroundTasks
|
from fastapi.background import BackgroundTasks
|
||||||
from fastapi.responses import JSONResponse, RedirectResponse
|
from fastapi.responses import JSONResponse, RedirectResponse
|
||||||
from fastapi.security import OAuth2PasswordRequestForm
|
from fastapi.security import OAuth2PasswordRequestForm
|
||||||
|
|
||||||
from classquiz.auth import *
|
from classquiz.auth import get_password_hash, verify_password, authenticate_user, create_access_token, get_current_user
|
||||||
from classquiz.config import redis
|
|
||||||
from classquiz.cache import clear_cache_for_account
|
from classquiz.cache import clear_cache_for_account
|
||||||
from classquiz.db.models import *
|
from classquiz.config import redis, settings
|
||||||
|
import uuid
|
||||||
|
from pydantic import BaseModel
|
||||||
|
from classquiz.db.models import User, UserSession, UpdatePassword, Token
|
||||||
from classquiz.emails import send_register_email, send_forgotten_password_email
|
from classquiz.emails import send_register_email, send_forgotten_password_email
|
||||||
|
settings = settings()
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
route_user = User.get_pydantic(
|
route_user = User.get_pydantic(
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ from fastapi import APIRouter
|
|||||||
from fastapi.responses import Response
|
from fastapi.responses import Response
|
||||||
|
|
||||||
from classquiz.config import settings
|
from classquiz.config import settings
|
||||||
|
|
||||||
settings = settings()
|
settings = settings()
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
@@ -16,9 +17,7 @@ async def get_qr(quiz_pin: str):
|
|||||||
"""
|
"""
|
||||||
Get QR code for quiz
|
Get QR code for quiz
|
||||||
"""
|
"""
|
||||||
factory = qrcode.image.svg.SvgImage
|
qr = qrcode.QRCode(image_factory=qrcode.image.svg.SvgPathImage, version=1, box_size=20, border=0)
|
||||||
qr = qrcode.QRCode(image_factory=qrcode.image.svg.SvgPathImage, version=1
|
|
||||||
, box_size=20, border=0)
|
|
||||||
qr.add_data(f"{settings.root_address}/play?pin={quiz_pin}")
|
qr.add_data(f"{settings.root_address}/play?pin={quiz_pin}")
|
||||||
buf = io.BytesIO()
|
buf = io.BytesIO()
|
||||||
qr.make(fit=True)
|
qr.make(fit=True)
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import aiohttp
|
|||||||
import socketio
|
import socketio
|
||||||
|
|
||||||
from classquiz.config import redis, settings
|
from classquiz.config import redis, settings
|
||||||
from classquiz.db.models import GameSession, PlayGame
|
from classquiz.db.models import PlayGame
|
||||||
|
|
||||||
sio = socketio.AsyncServer(async_mode="asgi", cors_allowed_origins=[])
|
sio = socketio.AsyncServer(async_mode="asgi", cors_allowed_origins=[])
|
||||||
settings = settings()
|
settings = settings()
|
||||||
@@ -20,7 +20,7 @@ async def join_game(sid, data):
|
|||||||
if not resp_data["success"]:
|
if not resp_data["success"]:
|
||||||
print("CAPTCHA FAILED")
|
print("CAPTCHA FAILED")
|
||||||
return
|
return
|
||||||
except KeyError as e:
|
except KeyError:
|
||||||
print("CAPTCHA FAILED")
|
print("CAPTCHA FAILED")
|
||||||
return
|
return
|
||||||
redis_res = await redis.get(f"game:{data['game_pin']}")
|
redis_res = await redis.get(f"game:{data['game_pin']}")
|
||||||
@@ -89,8 +89,8 @@ async def set_question_number(sid, data):
|
|||||||
@sio.event
|
@sio.event
|
||||||
async def submit_answer(sid, data):
|
async def submit_answer(sid, data):
|
||||||
session = await sio.get_session(sid)
|
session = await sio.get_session(sid)
|
||||||
redis_res = await redis.get(f"game_session:{session['game_pin']}")
|
# redis_res = await redis.get(f"game_session:{session['game_pin']}")
|
||||||
game_session = GameSession(**json.loads(redis_res))
|
# game_session = GameSession(**json.loads(redis_res))
|
||||||
game_data = PlayGame(**json.loads(await redis.get(f"game:{session['game_pin']}")))
|
game_data = PlayGame(**json.loads(await redis.get(f"game:{session['game_pin']}")))
|
||||||
# print(game_session)
|
# print(game_session)
|
||||||
answer_right = False
|
answer_right = False
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
from .deta_storage import DetaStorage
|
|
||||||
from .local_storage import LocalStorage
|
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
|
from .deta_storage import DetaStorage
|
||||||
|
from .local_storage import LocalStorage
|
||||||
|
|
||||||
|
|
||||||
class Storage:
|
class Storage:
|
||||||
def __init__(self, backend: str, deta_key: Optional[str], deta_id: Optional[str], storage_path: Optional[str]):
|
def __init__(self, backend: str, deta_key: Optional[str], deta_id: Optional[str], storage_path: Optional[str]):
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
from aiohttp import ClientSession
|
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
|
|
||||||
|
from aiohttp import ClientSession
|
||||||
|
|
||||||
|
|
||||||
class DetaStorage:
|
class DetaStorage:
|
||||||
def __init__(self, deta_base_url: str, deta_id: str, deta_key: str):
|
def __init__(self, deta_base_url: str, deta_id: str, deta_key: str):
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import io
|
import io
|
||||||
import os
|
import os
|
||||||
|
|
||||||
import aiofiles
|
import aiofiles
|
||||||
import aiofiles.os
|
import aiofiles.os
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
from classquiz.kahoot_importer.get import get
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
from classquiz.kahoot_importer.get import get
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_get():
|
async def test_get():
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
from classquiz.kahoot_importer.search import search
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
from classquiz.kahoot_importer.search import search
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_search():
|
async def test_search():
|
||||||
res = await search(query="Python", limit=100)
|
res = await search(query="Python", limit=100)
|
||||||
|
print(res)
|
||||||
assert len(res.entities) == 100
|
assert len(res.entities) == 100
|
||||||
await search(query="Test Quiz", limit=100)
|
await search(query="Test Quiz", limit=100)
|
||||||
await search(query="Biologie", limit=100)
|
await search(query="Biologie", limit=100)
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from classquiz.config import settings
|
from classquiz.config import settings
|
||||||
from classquiz.storage import Storage
|
from classquiz.storage import Storage
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user