Enable ruff, black, and pytest in pre-commit

This commit is contained in:
Jack Jackson 2024-02-14 22:43:25 -08:00
parent 7e54b9dc65
commit c36c4bd3b8
9 changed files with 54 additions and 30 deletions

View File

@ -1,5 +1,8 @@
name: 'Lint and Test'
on: push
# Shouldn't really be needed, what with the pre-commit setup (see `DEVELOPMENT.md`) -
# but, doesn't hurt!
name: 'Lint And Test'
on:
push:
jobs:
lint_and_test:
@ -12,5 +15,7 @@ jobs:
python-version: '3.x'
cache: 'pip'
- run: 'python3 -m pip install -r requirements.txt'
- run: 'python3 -m pip install -r requirements-dev.txt'
- run: 'ruff check .'
- run: 'black --check .'
- run: 'pytest .'

View File

@ -4,3 +4,9 @@ In increasing complexity:
* `./basic-run.sh` - just raw-dog it
* `docker compose up --build`
# Pre-commit
This repo uses [pre-commit](https://pre-commit.com/). Install the tool with `pip install pre-commit` (or just `pip install -r requirements-dev.txt`), then install the hooks with `pre-commit install`
Not yet configured to run this in CI, as I'm the only contributor :P but I definitely should if I start getting contributions!

View File

@ -10,15 +10,15 @@ from .players import list_players
api_router = APIRouter(prefix="/deck", tags=["deck"])
html_router = APIRouter(
prefix="/deck",
include_in_schema=False,
default_response_class=HTMLResponse)
prefix="/deck", include_in_schema=False, default_response_class=HTMLResponse
)
########
# API Routes
########
@api_router.post("/", response_model=schemas.Deck, status_code=201)
def create_deck(deck: schemas.DeckCreate, db: Session = Depends(get_db)):
db_player = crud.get_player_by_id(db, deck.owner_id)
@ -53,6 +53,7 @@ def delete_deck(deck_id: str, db=Depends(get_db)):
# HTML Routes
########
@html_router.get("/create")
def deck_create_html(request: Request, db=Depends(get_db)):
players = list_players(db=db)

View File

@ -11,14 +11,14 @@ from ..sql.database import get_db
api_router = APIRouter(prefix="/game", tags=["game"])
html_router = APIRouter(
prefix="/game",
include_in_schema=False,
default_response_class=HTMLResponse)
prefix="/game", include_in_schema=False, default_response_class=HTMLResponse
)
########
# API Routes
########
@api_router.post("/", response_model=schemas.Game, status_code=201)
def create_game(game: schemas.GameCreate, db: Session = Depends(get_db)):
return crud.create_game(db=db, game=game)
@ -46,23 +46,29 @@ def delete_game(game_id: str, db=Depends(get_db)):
# HTML Routes
########
@html_router.get("/create", response_class=HTMLResponse)
def game_create_html(request: Request, db=Depends(get_db)):
players = list_players(db=db)
return jinja_templates.TemplateResponse(
request, "games/create.html", {
request,
"games/create.html",
{
"players": players,
# `json.dumps` is necessary because otherwise
# the keys are surrounded with single-quotes,
# on which JavaScript's `JSON.parse` will choke.
"player_decks": json.dumps({
str(player.id): [{
key: getattr(deck, key)
for key in ['id', 'name']
} for deck in player.decks]
for player in players
})
})
"player_decks": json.dumps(
{
str(player.id): [
{key: getattr(deck, key) for key in ["id", "name"]}
for deck in player.decks
]
for player in players
}
),
},
)
# TODO - pagination
@ -80,4 +86,4 @@ def game_html(request: Request, game_id: str, db=Depends(get_db)):
game_info = read_game(game_id, db)
return jinja_templates.TemplateResponse(
request, "games/detail.html", {"game": game_info}
)
)

View File

@ -8,9 +8,8 @@ from ..sql.database import get_db
api_router = APIRouter(prefix="/player", tags=["player"])
html_router = APIRouter(
prefix="/player",
include_in_schema=False,
default_response_class=HTMLResponse)
prefix="/player", include_in_schema=False, default_response_class=HTMLResponse
)
########
# API Routes
@ -44,15 +43,18 @@ def delete_player(player_id: str, db=Depends(get_db)):
# HTML Routes
########
@html_router.get("/create")
def player_create_html(request: Request, db=Depends(get_db)):
return jinja_templates.TemplateResponse(request, "players/create.html")
@html_router.get("/list", response_class=HTMLResponse)
def player_list_html(request: Request, db=Depends(get_db)):
players = list_players(db=db)
return jinja_templates.TemplateResponse(
request, "players/list.html", {"players": players})
request, "players/list.html", {"players": players}
)
# This must be after the static-path routes, lest it take priority over them

View File

@ -1,6 +1,7 @@
from . import models
from .database import SessionLocal
def prime_database():
db = SessionLocal()
win_types = db.query(models.WinType).all()

View File

@ -25,7 +25,7 @@ class Deck(Base):
class WinType(Base):
__tablename__ = 'wintypes'
__tablename__ = "wintypes"
id = Column(Integer, primary_key=True)
name = Column(String, nullable=False)

10
requirements-dev.txt Normal file
View File

@ -0,0 +1,10 @@
# Meta tool for running pre-commits
pre-commit
# Linting
ruff
black
# Testing
httpx
pytest

View File

@ -2,10 +2,3 @@ fastapi
uvicorn
sqlalchemy
Jinja2
# Linting
ruff
# Testing
httpx
pytest