diff --git a/classquiz/__init__.py b/classquiz/__init__.py index 2285731..df402ff 100644 --- a/classquiz/__init__.py +++ b/classquiz/__init__.py @@ -1,9 +1,9 @@ from fastapi import FastAPI -from classquiz.socket_server import sio from socketio import ASGIApp -from classquiz.routers import users, quiz, utils from classquiz.db import database +from classquiz.routers import users, quiz, utils +from classquiz.socket_server import sio app = FastAPI() app.state.database = database diff --git a/classquiz/auth.py b/classquiz/auth.py index 34465ac..2b94144 100644 --- a/classquiz/auth.py +++ b/classquiz/auth.py @@ -1,21 +1,21 @@ +from datetime import timedelta +from typing import Dict +from typing import Optional +from typing import Union + +from fastapi import Depends +from fastapi import HTTPException +from fastapi import Request +from fastapi import status +from fastapi.openapi.models import OAuthFlows as OAuthFlowsModel +from fastapi.security import OAuth2 +from fastapi.security.utils import get_authorization_scheme_param +from jose import JWTError, jwt +from passlib.hash import argon2 + +from classquiz.cache import get_cache from classquiz.config import settings from classquiz.db.models import * -from typing import Union -from jose import JWTError, jwt -from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm -from passlib.hash import argon2 -from datetime import datetime, timedelta -from classquiz.cache import get_cache -from fastapi import APIRouter, Depends, HTTPException, status -from fastapi.security import OAuth2 -from fastapi.openapi.models import OAuthFlows as OAuthFlowsModel -from fastapi import Request -from fastapi.security.utils import get_authorization_scheme_param -from fastapi import HTTPException -from fastapi import status -from typing import Optional -from typing import Dict -import pydantic # pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") pwd_context = argon2 diff --git a/classquiz/cache.py b/classquiz/cache.py index ba085ef..8cef3f9 100644 --- a/classquiz/cache.py +++ b/classquiz/cache.py @@ -1,9 +1,11 @@ +import uuid +from json import loads +from typing import Union + +import ormar + from classquiz.config import redis, settings from classquiz.db.models import User -import ormar -import uuid -from typing import Union -from json import loads, dumps async def cache_account(criteria: str, content: str) -> Union[User, None]: diff --git a/classquiz/config.py b/classquiz/config.py index 059d1bb..3f24a1f 100644 --- a/classquiz/config.py +++ b/classquiz/config.py @@ -1,5 +1,5 @@ -from pydantic import BaseSettings, RedisDsn, PostgresDsn import redis.asyncio as redis_lib +from pydantic import BaseSettings, RedisDsn, PostgresDsn class Settings(BaseSettings): diff --git a/classquiz/db/__init__.py b/classquiz/db/__init__.py index 77383ea..f8bcf9c 100644 --- a/classquiz/db/__init__.py +++ b/classquiz/db/__init__.py @@ -1,5 +1,6 @@ import databases import sqlalchemy + from classquiz.config import settings database = databases.Database(settings.db_url) diff --git a/classquiz/db/models.py b/classquiz/db/models.py index f3bd3a4..f248481 100644 --- a/classquiz/db/models.py +++ b/classquiz/db/models.py @@ -1,9 +1,10 @@ import uuid from datetime import datetime -from typing import Optional -from pydantic import BaseModel, Json -from . import metadata, database + import ormar +from pydantic import BaseModel, Json + +from . import metadata, database class User(ormar.Model): diff --git a/classquiz/emails/__init__.py b/classquiz/emails/__init__.py index 35af7a7..a91f3c3 100644 --- a/classquiz/emails/__init__.py +++ b/classquiz/emails/__init__.py @@ -1,11 +1,12 @@ -from jinja2 import Environment, PackageLoader, select_autoescape -from classquiz.db.models import User - -from email.mime.multipart import MIMEMultipart -from classquiz.config import settings -from email.mime.text import MIMEText import smtplib import ssl +from email.mime.multipart import MIMEMultipart +from email.mime.text import MIMEText + +from jinja2 import Environment, PackageLoader, select_autoescape + +from classquiz.config import settings +from classquiz.db.models import User jinja = Environment( loader=PackageLoader('classquiz.emails', 'templates'), diff --git a/classquiz/routers/quiz.py b/classquiz/routers/quiz.py index 53bafcd..dbd5230 100644 --- a/classquiz/routers/quiz.py +++ b/classquiz/routers/quiz.py @@ -1,15 +1,14 @@ import json -import os +import uuid from datetime import datetime +from random import randint from fastapi import APIRouter, Depends, HTTPException from fastapi.responses import JSONResponse -from classquiz.config import redis from classquiz.auth import get_current_user, get_current_user_optional +from classquiz.config import redis from classquiz.db.models import Quiz, QuizInput, User, PlayGame -from random import randint -import uuid router = APIRouter() diff --git a/classquiz/routers/users.py b/classquiz/routers/users.py index 6b82c45..0beec49 100644 --- a/classquiz/routers/users.py +++ b/classquiz/routers/users.py @@ -1,14 +1,15 @@ import os -from fastapi import APIRouter, HTTPException, Response from email_validator import validate_email, EmailNotValidError -from classquiz.auth import * +from fastapi import APIRouter, Response from fastapi.background import BackgroundTasks -from classquiz.emails import send_mail -from classquiz.config import redis from fastapi.responses import JSONResponse, RedirectResponse +from fastapi.security import OAuth2PasswordRequestForm +from classquiz.auth import * +from classquiz.config import redis from classquiz.db.models import * +from classquiz.emails import send_mail router = APIRouter() diff --git a/classquiz/routers/utils.py b/classquiz/routers/utils.py index 201fa76..6a206cc 100644 --- a/classquiz/routers/utils.py +++ b/classquiz/routers/utils.py @@ -3,9 +3,10 @@ import io import qrcode import qrcode.image.svg from fastapi import APIRouter -from classquiz.config import settings from fastapi.responses import Response +from classquiz.config import settings + router = APIRouter() diff --git a/classquiz/socket_server/__init__.py b/classquiz/socket_server/__init__.py index a4a66b3..c9109d8 100644 --- a/classquiz/socket_server/__init__.py +++ b/classquiz/socket_server/__init__.py @@ -1,11 +1,12 @@ -import socketio import json -from classquiz.config import redis, settings -from classquiz.db.models import GameSession, GameAnser1, GameAnser2, PlayGame -import aiohttp -from redis.commands.json.path import Path -sio = socketio.AsyncServer(async_mode="asgi", cors_allowed_origins="*") +import aiohttp +import socketio + +from classquiz.config import redis, settings +from classquiz.db.models import GameSession, PlayGame + +sio = socketio.AsyncServer(async_mode="asgi", cors_allowed_origins=[]) @sio.event @@ -62,7 +63,8 @@ async def register_as_admin(sid, data): game_pin = data["game_pin"] game_id = data["game_id"] if (await redis.get(f"game_session:{game_pin}")) is None: - await redis.set(f"game_session:{game_pin}", json.dumps({"admin": sid, "game_id": game_id, "players": []}), ex=18000) + await redis.set(f"game_session:{game_pin}", json.dumps({"admin": sid, "game_id": game_id, "players": []}), + ex=18000) await sio.emit("registered_as_admin", {"game_id": game_id, "game": await redis.get(f"game:{data['game_pin']}")}, room=sid) @@ -107,7 +109,8 @@ async def submit_answer(sid, data): if answers is None: await redis.set(f"game_session:{session['game_pin']}:{data['question_index']}", json.dumps( - [{"username": session["username"], "answer": data["answer"], "right": answer_right}]), ex=18000) + [{"username": session["username"], "answer": data["answer"], "right": answer_right}]), + ex=18000) else: answers = json.loads(answers) answers.append({"username": session["username"], "answer": data["answer"], "right": answer_right})