format code with autopep8

This commit is contained in:
2025-11-16 16:34:07 +01:00
parent f5741ecc62
commit 16bf9b54f2
6 changed files with 73 additions and 46 deletions

View File

@@ -12,6 +12,7 @@ cursor = connection.cursor()
password_context = CryptContext(schemes=["sha256_crypt"], deprecated="auto")
def init() -> None:
# create users table
cursor.execute('''
@@ -22,15 +23,20 @@ def init() -> None:
)
''')
def close() -> None:
connection.close()
def register(user: User) -> None:
password = password_context.hash(user.password)
cursor.execute("INSERT INTO users (name, password) VALUES (?, ?)", (user.name, password))
cursor.execute(
"INSERT INTO users (name, password) VALUES (?, ?)",
(user.name,
password))
connection.commit()
def get_user_by_token(request: Request) -> User:
token = request.headers.get("Authorization")
if not token or not token.startswith("Bearer "):
@@ -39,12 +45,17 @@ def get_user_by_token(request: Request) -> User:
detail="Not authenticated"
)
token = token.split(" ")[1]
payload = jwt.decode(token, key=settings.jwt_secret, algorithms=[settings.jwt_algorithm])
payload = jwt.decode(
token,
key=settings.jwt_secret,
algorithms=[
settings.jwt_algorithm])
connection = sqlite3.connect('database.db')
connection.row_factory = sqlite3.Row
cursor = connection.cursor()
cursor.execute("SELECT id, name, password FROM users WHERE id = ?", (payload["id"],))
cursor.execute(
"SELECT id, name, password FROM users WHERE id = ?", (payload["id"],))
row = cursor.fetchone()
connection.close()
@@ -56,8 +67,10 @@ def get_user_by_token(request: Request) -> User:
return User(**row)
def login(user: User) -> str:
cursor.execute("SELECT id, name, password FROM users WHERE name = ?", (user.name,))
cursor.execute(
"SELECT id, name, password FROM users WHERE name = ?", (user.name,))
row = cursor.fetchone()
if not row:
@@ -71,10 +84,14 @@ def login(user: User) -> str:
detail="Invalid credentials"
)
exp = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(hours=1)
exp = datetime.datetime.now(
datetime.timezone.utc) + datetime.timedelta(hours=1)
payload = {
"id": row["id"],
"exp": exp
}
return jwt.encode(payload=payload, key=settings.jwt_secret, algorithm=settings.jwt_algorithm)
return jwt.encode(
payload=payload,
key=settings.jwt_secret,
algorithm=settings.jwt_algorithm)

6
format.sh Executable file
View File

@@ -0,0 +1,6 @@
#!/usr/bin/env bash
which autopep8 &> /dev/null || { echo "autopep8 not found, please install it."; exit 1; }
autopep8 --in-place --aggressive --aggressive --recursive --exclude .venv,.git,__pycache__ .
echo "Code formatted with autopep8."

View File

@@ -3,6 +3,7 @@ from contextlib import asynccontextmanager
import database
import models
@asynccontextmanager
async def lifespan(app: FastAPI):
database.init()
@@ -12,19 +13,17 @@ async def lifespan(app: FastAPI):
app = FastAPI(lifespan=lifespan)
@app.get("/")
async def root():
return {"message": "Hello World"}
@app.get("/me")
async def me(user: models.User = Depends(database.get_user_by_token)):
return user
@app.post("/users")
async def register(user: models.User):
database.register(user)
return user
@app.post("/login")
async def login(user: models.User):
return database.login(user)

View File

@@ -1,5 +1,6 @@
from pydantic import BaseModel
class User(BaseModel):
name: str
password: str

View File

@@ -2,3 +2,4 @@ fastapi[standard]==0.121.2
passlib==1.7.4
pyjwt==2.10.1
pydantic-settings==2.12.0
autopep8==2.3.2

View File

@@ -1,9 +1,12 @@
from pydantic_settings import BaseSettings, SettingsConfigDict
class Settings(BaseSettings):
model_config = SettingsConfigDict(env_file='.env', env_file_encoding='utf-8')
model_config = SettingsConfigDict(
env_file='.env', env_file_encoding='utf-8')
jwt_secret: str
jwt_algorithm: str
settings = Settings()