mirror of
https://github.com/fastapi/fastapi.git
synced 2025-12-24 22:59:32 -05:00
* 🌐 Refactor file structure to support internationalization * ✅ Update tests changed after i18n * 🔀 Merge Typer style from master * 🔧 Update MkConfig with Typer-styles * 🎨 Format mkdocs.yml with cannonical form * 🎨 Format mkdocs.yml * 🔧 Update MkDocs config * ➕ Add docs translation scripts dependencies * ✨ Add Typer scripts to handle translations * ✨ Add missing translation snippet to include * ✨ Update contributing docs, add docs for translations * 🙈 Add docs_build to gitignore * 🔧 Update scripts with new locations and docs scripts * 👷 Update docs deploy action with translations * 📝 Add note about languages not supported in the theme * ✨ Add first translation, for Spanish
80 lines
2.2 KiB
Python
80 lines
2.2 KiB
Python
import time
|
|
from typing import List
|
|
|
|
from fastapi import Depends, FastAPI, HTTPException
|
|
|
|
from . import crud, database, models, schemas
|
|
from .database import db_state_default
|
|
|
|
database.db.connect()
|
|
database.db.create_tables([models.User, models.Item])
|
|
database.db.close()
|
|
|
|
app = FastAPI()
|
|
|
|
sleep_time = 10
|
|
|
|
|
|
async def reset_db_state():
|
|
database.db._state._state.set(db_state_default.copy())
|
|
database.db._state.reset()
|
|
|
|
|
|
def get_db(db_state=Depends(reset_db_state)):
|
|
try:
|
|
database.db.connect()
|
|
yield
|
|
finally:
|
|
if not database.db.is_closed():
|
|
database.db.close()
|
|
|
|
|
|
@app.post("/users/", response_model=schemas.User, dependencies=[Depends(get_db)])
|
|
def create_user(user: schemas.UserCreate):
|
|
db_user = crud.get_user_by_email(email=user.email)
|
|
if db_user:
|
|
raise HTTPException(status_code=400, detail="Email already registered")
|
|
return crud.create_user(user=user)
|
|
|
|
|
|
@app.get("/users/", response_model=List[schemas.User], dependencies=[Depends(get_db)])
|
|
def read_users(skip: int = 0, limit: int = 100):
|
|
users = crud.get_users(skip=skip, limit=limit)
|
|
return users
|
|
|
|
|
|
@app.get(
|
|
"/users/{user_id}", response_model=schemas.User, dependencies=[Depends(get_db)]
|
|
)
|
|
def read_user(user_id: int):
|
|
db_user = crud.get_user(user_id=user_id)
|
|
if db_user is None:
|
|
raise HTTPException(status_code=404, detail="User not found")
|
|
return db_user
|
|
|
|
|
|
@app.post(
|
|
"/users/{user_id}/items/",
|
|
response_model=schemas.Item,
|
|
dependencies=[Depends(get_db)],
|
|
)
|
|
def create_item_for_user(user_id: int, item: schemas.ItemCreate):
|
|
return crud.create_user_item(item=item, user_id=user_id)
|
|
|
|
|
|
@app.get("/items/", response_model=List[schemas.Item], dependencies=[Depends(get_db)])
|
|
def read_items(skip: int = 0, limit: int = 100):
|
|
items = crud.get_items(skip=skip, limit=limit)
|
|
return items
|
|
|
|
|
|
@app.get(
|
|
"/slowusers/", response_model=List[schemas.User], dependencies=[Depends(get_db)]
|
|
)
|
|
def read_slow_users(skip: int = 0, limit: int = 100):
|
|
global sleep_time
|
|
sleep_time = max(0, sleep_time - 1)
|
|
time.sleep(sleep_time) # Fake long processing request
|
|
users = crud.get_users(skip=skip, limit=limit)
|
|
return users
|