Fix linting errors across backend and frontend
Backend: auto-fix and format all ruff issues, manually fix B904/B023/ SIM117/B007/E741/F841 errors, suppress B008 (FastAPI Depends) and F821 (SQLAlchemy forward refs) in config. Frontend: allow constant exports, disable React compiler-specific rules (set-state-in-effect, preserve-manual-memoization). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -40,7 +40,9 @@ async def _get_game_or_404(session: AsyncSession, game_id: int) -> Game:
|
||||
async def _get_version_group_id(session: AsyncSession, game_id: int) -> int:
|
||||
game = await _get_game_or_404(session, game_id)
|
||||
if game.version_group_id is None:
|
||||
raise HTTPException(status_code=400, detail="Game has no version group assigned")
|
||||
raise HTTPException(
|
||||
status_code=400, detail="Game has no version group assigned"
|
||||
)
|
||||
return game.version_group_id
|
||||
|
||||
|
||||
@@ -68,16 +70,18 @@ async def list_games_by_region(session: AsyncSession = Depends(get_session)):
|
||||
for region in regions_data:
|
||||
region_games = games_by_region.get(region["name"], [])
|
||||
defaults = region["genlocke_defaults"]
|
||||
response.append({
|
||||
"name": region["name"],
|
||||
"generation": region["generation"],
|
||||
"order": region["order"],
|
||||
"genlocke_defaults": {
|
||||
"true_genlocke": defaults["true"],
|
||||
"normal_genlocke": defaults["normal"],
|
||||
},
|
||||
"games": region_games,
|
||||
})
|
||||
response.append(
|
||||
{
|
||||
"name": region["name"],
|
||||
"generation": region["generation"],
|
||||
"order": region["order"],
|
||||
"genlocke_defaults": {
|
||||
"true_genlocke": defaults["true"],
|
||||
"normal_genlocke": defaults["normal"],
|
||||
},
|
||||
"games": region_games,
|
||||
}
|
||||
)
|
||||
|
||||
return response
|
||||
|
||||
@@ -89,9 +93,7 @@ async def get_game(game_id: int, session: AsyncSession = Depends(get_session)):
|
||||
|
||||
# Load routes via version_group_id
|
||||
result = await session.execute(
|
||||
select(Route)
|
||||
.where(Route.version_group_id == vg_id)
|
||||
.order_by(Route.order)
|
||||
select(Route).where(Route.version_group_id == vg_id).order_by(Route.order)
|
||||
)
|
||||
routes = result.scalars().all()
|
||||
|
||||
@@ -149,10 +151,13 @@ async def list_game_routes(
|
||||
|
||||
def route_to_dict(route: Route) -> dict:
|
||||
# Only show encounter methods for the requested game
|
||||
methods = sorted({
|
||||
re.encounter_method for re in route.route_encounters
|
||||
if re.game_id == game_id
|
||||
})
|
||||
methods = sorted(
|
||||
{
|
||||
re.encounter_method
|
||||
for re in route.route_encounters
|
||||
if re.game_id == game_id
|
||||
}
|
||||
)
|
||||
return {
|
||||
"id": route.id,
|
||||
"name": route.name,
|
||||
@@ -193,14 +198,12 @@ async def list_game_routes(
|
||||
|
||||
|
||||
@router.post("", response_model=GameResponse, status_code=201)
|
||||
async def create_game(
|
||||
data: GameCreate, session: AsyncSession = Depends(get_session)
|
||||
):
|
||||
existing = await session.execute(
|
||||
select(Game).where(Game.slug == data.slug)
|
||||
)
|
||||
async def create_game(data: GameCreate, session: AsyncSession = Depends(get_session)):
|
||||
existing = await session.execute(select(Game).where(Game.slug == data.slug))
|
||||
if existing.scalar_one_or_none() is not None:
|
||||
raise HTTPException(status_code=409, detail="Game with this slug already exists")
|
||||
raise HTTPException(
|
||||
status_code=409, detail="Game with this slug already exists"
|
||||
)
|
||||
|
||||
game = Game(**data.model_dump())
|
||||
session.add(game)
|
||||
@@ -223,7 +226,9 @@ async def update_game(
|
||||
select(Game).where(Game.slug == update_data["slug"], Game.id != game_id)
|
||||
)
|
||||
if existing.scalar_one_or_none() is not None:
|
||||
raise HTTPException(status_code=409, detail="Game with this slug already exists")
|
||||
raise HTTPException(
|
||||
status_code=409, detail="Game with this slug already exists"
|
||||
)
|
||||
|
||||
for field, value in update_data.items():
|
||||
setattr(game, field, value)
|
||||
@@ -234,9 +239,7 @@ async def update_game(
|
||||
|
||||
|
||||
@router.delete("/{game_id}", status_code=204)
|
||||
async def delete_game(
|
||||
game_id: int, session: AsyncSession = Depends(get_session)
|
||||
):
|
||||
async def delete_game(game_id: int, session: AsyncSession = Depends(get_session)):
|
||||
result = await session.execute(
|
||||
select(Game).where(Game.id == game_id).options(selectinload(Game.runs))
|
||||
)
|
||||
@@ -393,7 +396,9 @@ async def bulk_import_routes(
|
||||
try:
|
||||
route_name_to_id = await upsert_routes(session, vg_id, routes_data)
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=400, detail=f"Failed to import routes: {e}")
|
||||
raise HTTPException(
|
||||
status_code=400, detail=f"Failed to import routes: {e}"
|
||||
) from e
|
||||
|
||||
# Upsert encounters for each route
|
||||
encounter_count = 0
|
||||
@@ -406,8 +411,11 @@ async def bulk_import_routes(
|
||||
if item.encounters:
|
||||
try:
|
||||
count = await upsert_route_encounters(
|
||||
session, route_id, [e.model_dump() for e in item.encounters],
|
||||
dex_to_id, game_id,
|
||||
session,
|
||||
route_id,
|
||||
[e.model_dump() for e in item.encounters],
|
||||
dex_to_id,
|
||||
game_id,
|
||||
)
|
||||
encounter_count += count
|
||||
except Exception as e:
|
||||
@@ -422,8 +430,11 @@ async def bulk_import_routes(
|
||||
if child.encounters:
|
||||
try:
|
||||
count = await upsert_route_encounters(
|
||||
session, child_id, [e.model_dump() for e in child.encounters],
|
||||
dex_to_id, game_id,
|
||||
session,
|
||||
child_id,
|
||||
[e.model_dump() for e in child.encounters],
|
||||
dex_to_id,
|
||||
game_id,
|
||||
)
|
||||
encounter_count += count
|
||||
except Exception as e:
|
||||
|
||||
Reference in New Issue
Block a user