From 4380c2631965a5d532cde677aabdd13f88fa97d7 Mon Sep 17 00:00:00 2001 From: Cal Corum Date: Sun, 14 Jul 2024 13:23:37 -0500 Subject: [PATCH] Add Swagger support --- app/dependencies.py | 2 ++ app/main.py | 27 +++++++++++++++++---------- app/routers_v3/awards.py | 8 ++++---- app/routers_v3/battingstats.py | 6 +++--- app/routers_v3/current.py | 8 ++++---- app/routers_v3/decisions.py | 15 ++++++++++----- app/routers_v3/divisions.py | 8 ++++---- app/routers_v3/draftdata.py | 4 ++-- app/routers_v3/draftlist.py | 8 ++++---- app/routers_v3/draftpicks.py | 13 +++++++++---- app/routers_v3/injuries.py | 8 ++++---- app/routers_v3/keepers.py | 8 ++++---- app/routers_v3/managers.py | 8 ++++---- app/routers_v3/pitchingstats.py | 6 +++--- app/routers_v3/players.py | 13 +++++++------ app/routers_v3/results.py | 8 ++++---- app/routers_v3/schedules.py | 8 ++++---- app/routers_v3/standings.py | 6 +++--- app/routers_v3/stratgame.py | 24 ++++++++++++------------ app/routers_v3/stratplay.py | 16 ++++++++++------ app/routers_v3/teams.py | 12 ++++++------ app/routers_v3/transactions.py | 8 ++++---- 22 files changed, 124 insertions(+), 100 deletions(-) diff --git a/app/dependencies.py b/app/dependencies.py index 615288f..78af6db 100644 --- a/app/dependencies.py +++ b/app/dependencies.py @@ -28,6 +28,8 @@ logging.basicConfig( oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") +priv_help = False if not os.environ.get('PRIVATE_IN_SCHEMA') else os.environ.get('PRIVATE_IN_SCHEMA').upper() +PRIVATE_IN_SCHEMA = True if priv_help == 'TRUE' else False def valid_token(token): diff --git a/app/main.py b/app/main.py index a6f3e46..511a031 100644 --- a/app/main.py +++ b/app/main.py @@ -3,6 +3,9 @@ import logging import os from fastapi import Depends, FastAPI, Request +from fastapi.openapi.docs import get_swagger_ui_html +from fastapi.openapi.utils import get_openapi + # from fastapi.openapi.docs import get_swagger_ui_html # from fastapi.openapi.utils import get_openapi @@ -19,7 +22,10 @@ logging.basicConfig( ) app = FastAPI( - responses={404: {'description': 'Not found'}} + root_path='/api', + responses={404: {'description': 'Not found'}}, + docs_url='/api/docs', + redoc_url='/api/redoc' ) @@ -50,15 +56,16 @@ app.include_router(divisions.router) logging.info(f'Loaded all routers.') -# @app.get("/docs", include_in_schema=False) -# async def get_docs(req: Request): -# print(req.scope) -# return get_swagger_ui_html(openapi_url=req.scope.get('root_path')+'/openapi.json', title='Swagger') -# -# -# @app.get("/openapi.json", include_in_schema=False) -# async def openapi(): -# return get_openapi(title='SBa Dev API', version=f'0.1.1', routes=app.routes) + +@app.get("/api/docs", include_in_schema=False) +async def get_docs(req: Request): + print(req.scope) + return get_swagger_ui_html(openapi_url=req.scope.get('root_path')+'/openapi.json', title='Swagger') + + +@app.get("/api/openapi.json", include_in_schema=False) +async def openapi(): + return get_openapi(title='SBa API Docs', version=f'0.1.1', routes=app.routes) # @app.get("/api") diff --git a/app/routers_v3/awards.py b/app/routers_v3/awards.py index 337877f..9df7a41 100644 --- a/app/routers_v3/awards.py +++ b/app/routers_v3/awards.py @@ -4,7 +4,7 @@ import logging import pydantic from ..db_engine import db, Award, Team, Player, Manager, model_to_dict, chunked, fn -from ..dependencies import oauth2_scheme, valid_token, LOG_DATA +from ..dependencies import oauth2_scheme, valid_token, LOG_DATA, PRIVATE_IN_SCHEMA logging.basicConfig( filename=LOG_DATA['filename'], @@ -82,7 +82,7 @@ async def get_one_award(award_id: int, short_output: Optional[bool] = False): return model_to_dict(this_award, recurse=not short_output) -@router.patch('/{award_id}') +@router.patch('/{award_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def patch_award( award_id: int, name: Optional[str] = None, season: Optional[int] = None, timing: Optional[str] = None, image: Optional[str] = None, manager1_id: Optional[int] = None, manager2_id: Optional[int] = None, @@ -122,7 +122,7 @@ async def patch_award( raise HTTPException(status_code=500, detail=f'Unable to patch award {award_id}') -@router.post('') +@router.post('', include_in_schema=PRIVATE_IN_SCHEMA) async def post_award(award_list: AwardList, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'patch_player - Bad Token: {token}') @@ -149,7 +149,7 @@ async def post_award(award_list: AwardList, token: str = Depends(oauth2_scheme)) return f'Inserted {len(new_awards)} awards' -@router.delete('/{award_id}') +@router.delete('/{award_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def delete_award(award_id: int, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'patch_player - Bad Token: {token}') diff --git a/app/routers_v3/battingstats.py b/app/routers_v3/battingstats.py index 3b3b6fe..18f4db7 100644 --- a/app/routers_v3/battingstats.py +++ b/app/routers_v3/battingstats.py @@ -4,7 +4,7 @@ import logging import pydantic from ..db_engine import db, BattingStat, Team, Player, Current, model_to_dict, chunked, fn, per_season_weeks -from ..dependencies import oauth2_scheme, valid_token, LOG_DATA +from ..dependencies import oauth2_scheme, valid_token, LOG_DATA, PRIVATE_IN_SCHEMA logging.basicConfig( filename=LOG_DATA['filename'], @@ -267,7 +267,7 @@ async def get_totalstats( # pass # Keep Career Stats table and recalculate after posting stats -@router.patch('/{stat_id}') +@router.patch('/{stat_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def patch_batstats(stat_id: int, new_stats: BatStatModel, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'patch_batstats - Bad Token: {token}') @@ -282,7 +282,7 @@ async def patch_batstats(stat_id: int, new_stats: BatStatModel, token: str = Dep return r_stat -@router.post('') +@router.post('', include_in_schema=PRIVATE_IN_SCHEMA) async def post_batstats(s_list: BatStatList, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'post_batstats - Bad Token: {token}') diff --git a/app/routers_v3/current.py b/app/routers_v3/current.py index 2b7b260..d5ab6be 100644 --- a/app/routers_v3/current.py +++ b/app/routers_v3/current.py @@ -4,7 +4,7 @@ import logging import pydantic from ..db_engine import db, Current, model_to_dict -from ..dependencies import oauth2_scheme, valid_token, LOG_DATA +from ..dependencies import oauth2_scheme, valid_token, LOG_DATA, PRIVATE_IN_SCHEMA logging.basicConfig( filename=LOG_DATA['filename'], @@ -48,7 +48,7 @@ async def get_current(season: Optional[int] = None): return None -@router.patch('/{current_id}') +@router.patch('/{current_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def patch_current( current_id: int, season: Optional[int] = None, week: Optional[int] = None, freeze: Optional[bool] = None, transcount: Optional[int] = None, bstatcount: Optional[int] = None, pstatcount: Optional[int] = None, @@ -95,7 +95,7 @@ async def patch_current( raise HTTPException(status_code=500, detail=f'Unable to patch current {current_id}') -@router.post('') +@router.post('', include_in_schema=PRIVATE_IN_SCHEMA) async def post_current(new_current: CurrentModel, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'patch_current - Bad Token: {token}') @@ -112,7 +112,7 @@ async def post_current(new_current: CurrentModel, token: str = Depends(oauth2_sc raise HTTPException(status_code=500, detail=f'Unable to post season {new_current.season} current') -@router.delete('/{current_id}') +@router.delete('/{current_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def delete_current(current_id: int, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'patch_current - Bad Token: {token}') diff --git a/app/routers_v3/decisions.py b/app/routers_v3/decisions.py index bcaa877..cc5f9f1 100644 --- a/app/routers_v3/decisions.py +++ b/app/routers_v3/decisions.py @@ -5,7 +5,7 @@ import logging import pydantic from ..db_engine import db, Decision, StratGame, Player, model_to_dict, chunked, fn, Team -from ..dependencies import oauth2_scheme, valid_token, LOG_DATA +from ..dependencies import oauth2_scheme, valid_token, LOG_DATA, PRIVATE_IN_SCHEMA logging.basicConfig( filename=LOG_DATA['filename'], @@ -42,6 +42,11 @@ class DecisionList(pydantic.BaseModel): decisions: List[DecisionModel] +class DecisionReturnList(pydantic.BaseModel): + count: int + decisions: list[DecisionModel] + + @router.get('') async def get_decisions( season: list = Query(default=None), week: list = Query(default=None), game_num: list = Query(default=None), @@ -120,7 +125,7 @@ async def get_decisions( return return_dec -@router.patch('/{decision_id}') +@router.patch('/{decision_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def patch_decision( decision_id: int, win: Optional[int] = None, loss: Optional[int] = None, hold: Optional[int] = None, save: Optional[int] = None, b_save: Optional[int] = None, irunners: Optional[int] = None, @@ -163,7 +168,7 @@ async def patch_decision( raise HTTPException(status_code=500, detail=f'Unable to patch decision {decision_id}') -@router.post('') +@router.post('', include_in_schema=PRIVATE_IN_SCHEMA) async def post_decisions(dec_list: DecisionList, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'post_decisions - Bad Token: {token}') @@ -186,7 +191,7 @@ async def post_decisions(dec_list: DecisionList, token: str = Depends(oauth2_sch return f'Inserted {len(new_dec)} decisions' -@router.delete('/{decision_id}') +@router.delete('/{decision_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def delete_decision(decision_id: int, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'delete_decision - Bad Token: {token}') @@ -206,7 +211,7 @@ async def delete_decision(decision_id: int, token: str = Depends(oauth2_scheme)) raise HTTPException(status_code=500, detail=f'Decision {decision_id} could not be deleted') -@router.delete('/game/{game_id}') +@router.delete('/game/{game_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def delete_decisions_game(game_id: int, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'delete_decisions_game - Bad Token: {token}') diff --git a/app/routers_v3/divisions.py b/app/routers_v3/divisions.py index 7a19929..2f01222 100644 --- a/app/routers_v3/divisions.py +++ b/app/routers_v3/divisions.py @@ -4,7 +4,7 @@ import logging import pydantic from ..db_engine import db, Division, Team, model_to_dict, chunked, fn -from ..dependencies import oauth2_scheme, valid_token, LOG_DATA +from ..dependencies import oauth2_scheme, valid_token, LOG_DATA, PRIVATE_IN_SCHEMA logging.basicConfig( filename=LOG_DATA['filename'], @@ -61,7 +61,7 @@ async def get_one_division(division_id: int): return r_div -@router.patch('/{division_id}') +@router.patch('/{division_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def patch_division( division_id: int, div_name: Optional[str] = None, div_abbrev: Optional[str] = None, lg_name: Optional[str] = None, lg_abbrev: Optional[str] = None, token: str = Depends(oauth2_scheme)): @@ -92,7 +92,7 @@ async def patch_division( raise HTTPException(status_code=500, detail=f'Unable to patch division {division_id}') -@router.post('') +@router.post('', include_in_schema=PRIVATE_IN_SCHEMA) async def post_division(new_division: DivisionModel, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'post_division - Bad Token: {token}') @@ -109,7 +109,7 @@ async def post_division(new_division: DivisionModel, token: str = Depends(oauth2 raise HTTPException(status_code=500, detail=f'Unable to post division') -@router.delete('/{division_id}') +@router.delete('/{division_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def delete_division(division_id: int, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'delete_division - Bad Token: {token}') diff --git a/app/routers_v3/draftdata.py b/app/routers_v3/draftdata.py index 8f4d003..53596c3 100644 --- a/app/routers_v3/draftdata.py +++ b/app/routers_v3/draftdata.py @@ -6,7 +6,7 @@ import logging import pydantic from ..db_engine import db, DraftData, model_to_dict -from ..dependencies import oauth2_scheme, valid_token, LOG_DATA +from ..dependencies import oauth2_scheme, valid_token, LOG_DATA, PRIVATE_IN_SCHEMA logging.basicConfig( filename=LOG_DATA['filename'], @@ -41,7 +41,7 @@ async def get_draftdata(): raise HTTPException(status_code=404, detail=f'No draft data found') -@router.patch('/{data_id}') +@router.patch('/{data_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def patch_draftdata( data_id: int, currentpick: Optional[int] = None, timer: Optional[bool] = None, pick_deadline: Optional[datetime.datetime] = None, result_channel: Optional[int] = None, diff --git a/app/routers_v3/draftlist.py b/app/routers_v3/draftlist.py index 3d0d560..4647a13 100644 --- a/app/routers_v3/draftlist.py +++ b/app/routers_v3/draftlist.py @@ -4,7 +4,7 @@ import logging import pydantic from ..db_engine import db, DraftList, Team, model_to_dict, chunked -from ..dependencies import oauth2_scheme, valid_token, LOG_DATA +from ..dependencies import oauth2_scheme, valid_token, LOG_DATA, PRIVATE_IN_SCHEMA logging.basicConfig( filename=LOG_DATA['filename'], @@ -30,7 +30,7 @@ class DraftListList(pydantic.BaseModel): draft_list: List[DraftListModel] -@router.get('') +@router.get('', include_in_schema=PRIVATE_IN_SCHEMA) async def get_draftlist( season: Optional[int], team_id: list = Query(default=None), token: str = Depends(oauth2_scheme)): if not valid_token(token): @@ -53,7 +53,7 @@ async def get_draftlist( return r_list -@router.get('/team/{team_id}') +@router.get('/team/{team_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def get_team_draftlist(team_id: int, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'post_draftlist - Bad Token: {token}') @@ -73,7 +73,7 @@ async def get_team_draftlist(team_id: int, token: str = Depends(oauth2_scheme)): return r_list -@router.post('') +@router.post('', include_in_schema=PRIVATE_IN_SCHEMA) async def post_draftlist(draft_list: DraftListList, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'post_draftlist - Bad Token: {token}') diff --git a/app/routers_v3/draftpicks.py b/app/routers_v3/draftpicks.py index aff3111..6e6d4e5 100644 --- a/app/routers_v3/draftpicks.py +++ b/app/routers_v3/draftpicks.py @@ -4,7 +4,7 @@ import logging import pydantic from ..db_engine import db, DraftPick, Team, model_to_dict, chunked -from ..dependencies import oauth2_scheme, valid_token, LOG_DATA +from ..dependencies import oauth2_scheme, valid_token, LOG_DATA, PRIVATE_IN_SCHEMA logging.basicConfig( filename=LOG_DATA['filename'], @@ -31,6 +31,11 @@ class DraftPickList(pydantic.BaseModel): picks: List[DraftPickModel] +class DraftPickReturnList(pydantic.BaseModel): + count: int + picks: list[DraftPickModel] + + @router.get('') async def get_picks( season: int, owner_team_abbrev: list = Query(default=None), orig_team_abbrev: list = Query(default=None), @@ -114,7 +119,7 @@ async def get_one_pick(pick_id: int, short_output: Optional[bool] = False): return r_pick -@router.patch('/{pick_id}') +@router.patch('/{pick_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def patch_pick(pick_id: int, new_pick: DraftPickModel, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'patch_pick - Bad Token: {token}') @@ -129,7 +134,7 @@ async def patch_pick(pick_id: int, new_pick: DraftPickModel, token: str = Depend return r_pick -@router.post('') +@router.post('', include_in_schema=PRIVATE_IN_SCHEMA) async def post_picks(p_list: DraftPickList, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'post_picks - Bad Token: {token}') @@ -155,7 +160,7 @@ async def post_picks(p_list: DraftPickList, token: str = Depends(oauth2_scheme)) return f'Inserted {len(new_picks)} picks' -@router.delete('/{pick_id}') +@router.delete('/{pick_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def delete_pick(pick_id: int, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'delete_pick - Bad Token: {token}') diff --git a/app/routers_v3/injuries.py b/app/routers_v3/injuries.py index 0d1451d..00ccba4 100644 --- a/app/routers_v3/injuries.py +++ b/app/routers_v3/injuries.py @@ -4,7 +4,7 @@ import logging import pydantic from ..db_engine import db, Injury, Player, model_to_dict, fn -from ..dependencies import oauth2_scheme, valid_token, LOG_DATA +from ..dependencies import oauth2_scheme, valid_token, LOG_DATA, PRIVATE_IN_SCHEMA logging.basicConfig( filename=LOG_DATA['filename'], @@ -67,7 +67,7 @@ async def get_injuries( return return_injuries -@router.patch('/{injury_id}') +@router.patch('/{injury_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def patch_injury(injury_id: int, is_active: Optional[bool] = None, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'patch_injury - Bad Token: {token}') @@ -90,7 +90,7 @@ async def patch_injury(injury_id: int, is_active: Optional[bool] = None, token: raise HTTPException(status_code=500, detail=f'Unable to patch injury {injury_id}') -@router.post(f'') +@router.post(f'', include_in_schema=PRIVATE_IN_SCHEMA) async def post_injury(new_injury: InjuryModel, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'post_injury - Bad Token: {token}') @@ -107,7 +107,7 @@ async def post_injury(new_injury: InjuryModel, token: str = Depends(oauth2_schem raise HTTPException(status_code=500, detail=f'Unable to post injury') -@router.delete('/{injury_id}') +@router.delete('/{injury_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def delete_injury(injury_id: int, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'delete_injury - Bad Token: {token}') diff --git a/app/routers_v3/keepers.py b/app/routers_v3/keepers.py index ce144b2..b6e7828 100644 --- a/app/routers_v3/keepers.py +++ b/app/routers_v3/keepers.py @@ -4,7 +4,7 @@ import logging import pydantic from ..db_engine import db, Keeper, Player, model_to_dict, chunked, fn -from ..dependencies import oauth2_scheme, valid_token, LOG_DATA +from ..dependencies import oauth2_scheme, valid_token, LOG_DATA, PRIVATE_IN_SCHEMA logging.basicConfig( filename=LOG_DATA['filename'], @@ -50,7 +50,7 @@ async def get_keepers( return return_keepers -@router.patch('/{keeper_id}') +@router.patch('/{keeper_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def patch_keeper( keeper_id: int, season: Optional[int] = None, team_id: Optional[int] = None, player_id: Optional[int] = None, token: str = Depends(oauth2_scheme)): @@ -78,7 +78,7 @@ async def patch_keeper( raise HTTPException(status_code=500, detail=f'Unable to patch keeper {keeper_id}') -@router.post('') +@router.post('', include_in_schema=PRIVATE_IN_SCHEMA) async def post_keepers(k_list: KeeperList, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'post_keepers - Bad Token: {token}') @@ -96,7 +96,7 @@ async def post_keepers(k_list: KeeperList, token: str = Depends(oauth2_scheme)): return f'Inserted {len(new_keepers)} keepers' -@router.delete('/{keeper_id}') +@router.delete('/{keeper_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def delete_keeper(keeper_id: int, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'delete_keeper - Bad Token: {token}') diff --git a/app/routers_v3/managers.py b/app/routers_v3/managers.py index 1b046c8..bf080aa 100644 --- a/app/routers_v3/managers.py +++ b/app/routers_v3/managers.py @@ -4,7 +4,7 @@ import logging import pydantic from ..db_engine import db, Manager, Team, Current, model_to_dict, fn -from ..dependencies import oauth2_scheme, valid_token, LOG_DATA +from ..dependencies import oauth2_scheme, valid_token, LOG_DATA, PRIVATE_IN_SCHEMA logging.basicConfig( filename=LOG_DATA['filename'], @@ -90,7 +90,7 @@ async def get_one_manager(manager_id: int, short_output: Optional[bool] = False) raise HTTPException(status_code=404, detail=f'Manager {manager_id} not found') -@router.patch('/{manager_id}') +@router.patch('/{manager_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def patch_manager( manager_id: int, name: Optional[str] = None, image: Optional[str] = None, headline: Optional[str] = None, bio: Optional[str] = None, token: str = Depends(oauth2_scheme)): @@ -121,7 +121,7 @@ async def patch_manager( raise HTTPException(status_code=500, detail=f'Unable to patch manager {this_manager}') -@router.post('') +@router.post('', include_in_schema=PRIVATE_IN_SCHEMA) async def post_manager(new_manager: ManagerModel, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'post_manager - Bad Token: {token}') @@ -138,7 +138,7 @@ async def post_manager(new_manager: ManagerModel, token: str = Depends(oauth2_sc raise HTTPException(status_code=500, detail=f'Unable to post manager {this_manager.name}') -@router.delete('/{manager_id}') +@router.delete('/{manager_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def delete_manager(manager_id: int, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'delete_manager - Bad Token: {token}') diff --git a/app/routers_v3/pitchingstats.py b/app/routers_v3/pitchingstats.py index 635cc55..ba2d388 100644 --- a/app/routers_v3/pitchingstats.py +++ b/app/routers_v3/pitchingstats.py @@ -7,7 +7,7 @@ import logging import pydantic from ..db_engine import db, PitchingStat, Team, Player, Current, model_to_dict, chunked, fn, per_season_weeks -from ..dependencies import oauth2_scheme, valid_token, LOG_DATA +from ..dependencies import oauth2_scheme, valid_token, LOG_DATA, PRIVATE_IN_SCHEMA logging.basicConfig( filename=LOG_DATA['filename'], @@ -232,7 +232,7 @@ async def get_totalstats( return return_stats -@router.patch('/{stat_id}') +@router.patch('/{stat_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def patch_pitstats(stat_id: int, new_stats: PitStatModel, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'patch_pitstats - Bad Token: {token}') @@ -247,7 +247,7 @@ async def patch_pitstats(stat_id: int, new_stats: PitStatModel, token: str = Dep return r_stat -@router.post('') +@router.post('', include_in_schema=PRIVATE_IN_SCHEMA) async def post_pitstats(s_list: PitStatList, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'post_pitstats - Bad Token: {token}') diff --git a/app/routers_v3/players.py b/app/routers_v3/players.py index 48bac0f..a0cd8fb 100644 --- a/app/routers_v3/players.py +++ b/app/routers_v3/players.py @@ -5,7 +5,7 @@ import pydantic from pandas import DataFrame from ..db_engine import db, Player, model_to_dict, chunked, fn, complex_data_to_csv -from ..dependencies import oauth2_scheme, valid_token, LOG_DATA +from ..dependencies import oauth2_scheme, valid_token, LOG_DATA, PRIVATE_IN_SCHEMA logging.basicConfig( filename=LOG_DATA['filename'], @@ -99,7 +99,8 @@ async def get_players( line.name, line.wara, line.image, line.image2, line.team.abbrev, line.season, line.pitcher_injury, line.pos_1, line.pos_2, line.pos_3, line.pos_4, line.pos_5, line.pos_6, line.pos_7, line.pos_8, line.last_game, line.last_game2, line.il_return, line.demotion_week, line.headshot, - line.vanity_card, line.strat_code.replace(",", "-_-"), line.bbref_id, line.injury_rating, line.id + line.vanity_card, line.strat_code.replace(",", "-_-") if line.strat_code is not None else "", + line.bbref_id, line.injury_rating, line.id ] ) return_players = { @@ -133,7 +134,7 @@ async def get_one_player(player_id: int, short_output: Optional[bool] = False): return r_player -@router.put('/{player_id}') +@router.put('/{player_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def put_player( player_id: int, new_player: PlayerModel, token: str = Depends(oauth2_scheme)): if not valid_token(token): @@ -150,7 +151,7 @@ async def put_player( return r_player -@router.patch('/{player_id}') +@router.patch('/{player_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def patch_player( player_id: int, token: str = Depends(oauth2_scheme), name: Optional[str] = None, wara: Optional[float] = None, image: Optional[str] = None, image2: Optional[str] = None, @@ -230,7 +231,7 @@ async def patch_player( raise HTTPException(status_code=500, detail=f'Unable to patch player {player_id}') -@router.post('') +@router.post('', include_in_schema=PRIVATE_IN_SCHEMA) async def post_players(p_list: PlayerList, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'post_players - Bad Token: {token}') @@ -256,7 +257,7 @@ async def post_players(p_list: PlayerList, token: str = Depends(oauth2_scheme)): return f'Inserted {len(new_players)} players' -@router.delete('/{player_id}') +@router.delete('/{player_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def delete_player(player_id: int, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'delete_player - Bad Token: {token}') diff --git a/app/routers_v3/results.py b/app/routers_v3/results.py index 2ea62a4..399e454 100644 --- a/app/routers_v3/results.py +++ b/app/routers_v3/results.py @@ -4,7 +4,7 @@ import logging import pydantic from ..db_engine import db, Result, Team, model_to_dict, chunked -from ..dependencies import oauth2_scheme, valid_token, LOG_DATA +from ..dependencies import oauth2_scheme, valid_token, LOG_DATA, PRIVATE_IN_SCHEMA logging.basicConfig( filename=LOG_DATA['filename'], @@ -89,7 +89,7 @@ async def get_one_result(result_id: int, short_output: Optional[bool] = False): return r_result -@router.patch('/{result_id}') +@router.patch('/{result_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def patch_result( result_id: int, week_num: Optional[int] = None, game_num: Optional[int] = None, away_team_id: Optional[int] = None, home_team_id: Optional[int] = None, away_score: Optional[int] = None, @@ -136,7 +136,7 @@ async def patch_result( raise HTTPException(status_code=500, detail=f'Unable to patch result {result_id}') -@router.post('') +@router.post('', include_in_schema=PRIVATE_IN_SCHEMA) async def post_results(result_list: ResultList, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'patch_player - Bad Token: {token}') @@ -159,7 +159,7 @@ async def post_results(result_list: ResultList, token: str = Depends(oauth2_sche return f'Inserted {len(new_results)} results' -@router.delete('/{result_id}') +@router.delete('/{result_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def delete_result(result_id: int, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'delete_result - Bad Token: {token}') diff --git a/app/routers_v3/schedules.py b/app/routers_v3/schedules.py index 17d2fb8..e4ee525 100644 --- a/app/routers_v3/schedules.py +++ b/app/routers_v3/schedules.py @@ -4,7 +4,7 @@ import logging import pydantic from ..db_engine import db, Schedule, Team, model_to_dict, chunked -from ..dependencies import oauth2_scheme, valid_token, LOG_DATA +from ..dependencies import oauth2_scheme, valid_token, LOG_DATA, PRIVATE_IN_SCHEMA logging.basicConfig( filename=LOG_DATA['filename'], @@ -84,7 +84,7 @@ async def get_one_schedule(schedule_id: int): return r_sched -@router.patch('/{schedule_id}') +@router.patch('/{schedule_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def patch_schedule( schedule_id: int, week: list = Query(default=None), awayteam_id: Optional[int] = None, hometeam_id: Optional[int] = None, gamecount: Optional[int] = None, season: Optional[int] = None, @@ -121,7 +121,7 @@ async def patch_schedule( raise HTTPException(status_code=500, detail=f'Unable to patch schedule {schedule_id}') -@router.post('') +@router.post('', include_in_schema=PRIVATE_IN_SCHEMA) async def post_schedules(sched_list: ScheduleList, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'post_schedules - Bad Token: {token}') @@ -144,7 +144,7 @@ async def post_schedules(sched_list: ScheduleList, token: str = Depends(oauth2_s return f'Inserted {len(new_sched)} schedules' -@router.delete('/{schedule_id}') +@router.delete('/{schedule_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def delete_schedule(schedule_id: int, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'delete_schedule - Bad Token: {token}') diff --git a/app/routers_v3/standings.py b/app/routers_v3/standings.py index 8985758..f09bd51 100644 --- a/app/routers_v3/standings.py +++ b/app/routers_v3/standings.py @@ -4,7 +4,7 @@ import logging import pydantic from ..db_engine import db, Standings, Team, Division, model_to_dict, chunked, fn -from ..dependencies import oauth2_scheme, valid_token, LOG_DATA +from ..dependencies import oauth2_scheme, valid_token, LOG_DATA, PRIVATE_IN_SCHEMA logging.basicConfig( filename=LOG_DATA['filename'], @@ -68,7 +68,7 @@ async def get_team_standings(team_id: int): return model_to_dict(this_stan) -@router.patch('/{stan_id}') +@router.patch('/{stan_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def patch_standings( stan_id, wins: Optional[int] = None, losses: Optional[int] = None, token: str = Depends(oauth2_scheme)): if not valid_token(token): @@ -92,7 +92,7 @@ async def patch_standings( return model_to_dict(this_stan) -@router.post('/s{season}/recalculate') +@router.post('/s{season}/recalculate', include_in_schema=PRIVATE_IN_SCHEMA) async def recalculate_standings(season: int, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'recalculate_standings - Bad Token: {token}') diff --git a/app/routers_v3/stratgame.py b/app/routers_v3/stratgame.py index a2bfa6d..19ac1dd 100644 --- a/app/routers_v3/stratgame.py +++ b/app/routers_v3/stratgame.py @@ -1,11 +1,11 @@ from fastapi import APIRouter, Depends, HTTPException, Query -from typing import List, Optional, Literal +from typing import List, Optional, Literal, Any import copy import logging import pydantic from ..db_engine import db, StratGame, Team, model_to_dict, chunked, fn -from ..dependencies import oauth2_scheme, valid_token, LOG_DATA +from ..dependencies import oauth2_scheme, valid_token, LOG_DATA, PRIVATE_IN_SCHEMA logging.basicConfig( filename=LOG_DATA['filename'], @@ -45,7 +45,7 @@ async def get_games( team1_id: list = Query(default=None), team2_id: list = Query(default=None), played: Optional[bool] = None, away_manager_id: list = Query(default=None), home_manager_id: list = Query(default=None), manager1_id: list = Query(default=None), manager2_id: list = Query(default=None), - division_id: Optional[int] = None, short_output: Optional[bool] = False, sort: Optional[str] = None): + division_id: Optional[int] = None, short_output: Optional[bool] = False, sort: Optional[str] = None) -> Any: all_games = StratGame.select() if season is not None: @@ -108,7 +108,7 @@ async def get_games( @router.get('/{game_id}') -async def get_one_game(game_id: int): +async def get_one_game(game_id: int) -> Any: this_game = StratGame.get_or_none(StratGame.id == game_id) if not this_game: db.close() @@ -119,11 +119,11 @@ async def get_one_game(game_id: int): return g_result -@router.patch('/{game_id}') +@router.patch('/{game_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def patch_game( game_id: int, game_num: Optional[int] = None, away_score: Optional[int] = None, home_score: Optional[int] = None, away_manager_id: Optional[int] = None, home_manager_id: Optional[int] = None, - token: str = Depends(oauth2_scheme), scorecard_url: Optional[str] = None): + token: str = Depends(oauth2_scheme), scorecard_url: Optional[str] = None) -> Any: if not valid_token(token): logging.warning(f'patch_game - Bad Token: {token}') raise HTTPException(status_code=401, detail='Unauthorized') @@ -155,8 +155,8 @@ async def patch_game( raise HTTPException(status_code=500, detail=f'Unable to patch game {game_id}') -@router.post('') -async def post_games(game_list: GameList, token: str = Depends(oauth2_scheme)): +@router.post('', include_in_schema=PRIVATE_IN_SCHEMA) +async def post_games(game_list: GameList, token: str = Depends(oauth2_scheme)) -> Any: if not valid_token(token): logging.warning(f'post_games - Bad Token: {token}') raise HTTPException(status_code=401, detail='Unauthorized') @@ -178,8 +178,8 @@ async def post_games(game_list: GameList, token: str = Depends(oauth2_scheme)): return f'Inserted {len(new_games)} games' -@router.post('/wipe/{game_id}') -async def wipe_game(game_id: int, token: str = Depends(oauth2_scheme)): +@router.post('/wipe/{game_id}', include_in_schema=PRIVATE_IN_SCHEMA) +async def wipe_game(game_id: int, token: str = Depends(oauth2_scheme)) -> Any: if not valid_token(token): logging.warning(f'wipe_game - Bad Token: {token}') raise HTTPException(status_code=401, detail='Unauthorized') @@ -204,8 +204,8 @@ async def wipe_game(game_id: int, token: str = Depends(oauth2_scheme)): raise HTTPException(status_code=500, detail=f'Unable to wipe game {game_id}') -@router.delete('/{game_id}') -async def delete_game(game_id: int, token: str = Depends(oauth2_scheme)): +@router.delete('/{game_id}', include_in_schema=PRIVATE_IN_SCHEMA) +async def delete_game(game_id: int, token: str = Depends(oauth2_scheme)) -> Any: if not valid_token(token): logging.warning(f'delete_game - Bad Token: {token}') raise HTTPException(status_code=401, detail='Unauthorized') diff --git a/app/routers_v3/stratplay.py b/app/routers_v3/stratplay.py index f533df8..d3d685e 100644 --- a/app/routers_v3/stratplay.py +++ b/app/routers_v3/stratplay.py @@ -5,7 +5,7 @@ from pydantic import BaseModel, validator from ..db_engine import db, StratPlay, StratGame, Team, Player, Decision, model_to_dict, chunked, fn, SQL, \ complex_data_to_csv -from ..dependencies import oauth2_scheme, valid_token, LOG_DATA +from ..dependencies import oauth2_scheme, valid_token, LOG_DATA, PRIVATE_IN_SCHEMA logging.basicConfig( filename=LOG_DATA['filename'], @@ -256,6 +256,10 @@ async def get_plays( all_plays = all_plays.order_by(-fn.ABS(StratPlay.wpa)) elif sort == 'wpa-asc': all_plays = all_plays.order_by(fn.ABS(StratPlay.wpa)) + elif sort == 're24-desc': + all_plays = all_plays.order_by(-fn.ABS(StratPlay.re24_primary)) + elif sort == 're24-asc': + all_plays = all_plays.order_by(fn.ABS(StratPlay.re24_primary)) elif sort == 'newest': all_plays = all_plays.order_by(StratPlay.game_id.desc(), StratPlay.play_num.desc()) elif sort == 'oldest': @@ -1025,7 +1029,7 @@ async def get_one_play(play_id: int): return r_play -@router.patch('/{play_id}') +@router.patch('/{play_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def patch_play(play_id: int, new_play: PlayModel, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'patch_play - Bad Token: {token}') @@ -1041,7 +1045,7 @@ async def patch_play(play_id: int, new_play: PlayModel, token: str = Depends(oau return r_play -@router.post('') +@router.post('', include_in_schema=PRIVATE_IN_SCHEMA) async def post_plays(p_list: PlayList, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'post_plays - Bad Token: {token}') @@ -1080,7 +1084,7 @@ async def post_plays(p_list: PlayList, token: str = Depends(oauth2_scheme)): return f'Inserted {len(new_plays)} plays' -@router.delete('/{play_id}') +@router.delete('/{play_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def delete_play(play_id: int, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'delete_play - Bad Token: {token}') @@ -1100,7 +1104,7 @@ async def delete_play(play_id: int, token: str = Depends(oauth2_scheme)): raise HTTPException(status_code=500, detail=f'Play {play_id} could not be deleted') -@router.delete('/game/{game_id}') +@router.delete('/game/{game_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def delete_plays_game(game_id: int, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'delete_plays_game - Bad Token: {token}') @@ -1120,7 +1124,7 @@ async def delete_plays_game(game_id: int, token: str = Depends(oauth2_scheme)): raise HTTPException(status_code=500, detail=f'No plays matching Game ID {game_id} were deleted') -@router.post('/erun-check') +@router.post('/erun-check', include_in_schema=PRIVATE_IN_SCHEMA) async def post_erun_check(token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'post_erun_check - Bad Token: {token}') diff --git a/app/routers_v3/teams.py b/app/routers_v3/teams.py index 3e167e4..1473f93 100644 --- a/app/routers_v3/teams.py +++ b/app/routers_v3/teams.py @@ -4,8 +4,8 @@ import copy import logging import pydantic -from ..db_engine import db, Team, Manager, Division, model_to_dict, chunked, fn, query_to_csv -from ..dependencies import oauth2_scheme, valid_token, LOG_DATA +from ..db_engine import db, Team, Manager, Division, model_to_dict, chunked, fn, query_to_csv, Player +from ..dependencies import oauth2_scheme, valid_token, LOG_DATA, PRIVATE_IN_SCHEMA logging.basicConfig( filename=LOG_DATA['filename'], @@ -88,7 +88,7 @@ async def get_one_team(team_id: int): return r_team -@router.get('/{team_id}/roster/{which}') +@router.get('/{team_id}/roster/{which}', include_in_schema=PRIVATE_IN_SCHEMA) async def get_team_roster(team_id: int, which: Literal['current', 'next'], sort: Optional[str] = None): try: this_team = Team.get_by_id(team_id) @@ -124,7 +124,7 @@ async def get_team_roster(team_id: int, which: Literal['current', 'next'], sort: return full_roster -@router.patch('/{team_id}') +@router.patch('/{team_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def patch_team( team_id: int, manager1_id: Optional[int] = None, manager2_id: Optional[int] = None, gmid: Optional[int] = None, gmid2: Optional[int] = None, mascot: Optional[str] = None, stadium: Optional[str] = None, @@ -202,7 +202,7 @@ async def patch_team( raise HTTPException(status_code=500, detail=f'Unable to patch team {team_id}') -@router.post('') +@router.post('', include_in_schema=PRIVATE_IN_SCHEMA) async def post_team(team_list: TeamList, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'post_team - Bad Token: {token}') @@ -239,7 +239,7 @@ async def post_team(team_list: TeamList, token: str = Depends(oauth2_scheme)): return f'Inserted {len(new_teams)} teams' -@router.get('/{team_id}') +@router.get('/{team_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def delete_team(team_id: int, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'delete_team - Bad Token: {token}') diff --git a/app/routers_v3/transactions.py b/app/routers_v3/transactions.py index 7a16132..fee5d8c 100644 --- a/app/routers_v3/transactions.py +++ b/app/routers_v3/transactions.py @@ -5,7 +5,7 @@ import logging import pydantic from ..db_engine import db, Transaction, Team, Player, model_to_dict, chunked, fn -from ..dependencies import oauth2_scheme, valid_token, LOG_DATA +from ..dependencies import oauth2_scheme, valid_token, LOG_DATA, PRIVATE_IN_SCHEMA logging.basicConfig( filename=LOG_DATA['filename'], @@ -91,7 +91,7 @@ async def get_transactions( return return_trans -@router.patch('/{move_id}') +@router.patch('/{move_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def patch_transactions( move_id, token: str = Depends(oauth2_scheme), frozen: Optional[bool] = None, cancelled: Optional[bool] = None): if not valid_token(token): @@ -116,7 +116,7 @@ async def patch_transactions( raise HTTPException(status_code=200, detail=f'Updated {these_moves.count()} transactions') -@router.post('') +@router.post('', include_in_schema=PRIVATE_IN_SCHEMA) async def post_transactions(moves: TransactionList, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'post_transactions - Bad Token: {token}') @@ -142,7 +142,7 @@ async def post_transactions(moves: TransactionList, token: str = Depends(oauth2_ raise HTTPException(status_code=200, detail=f'{len(all_moves)} transactions have been added') -@router.delete('/{move_id}') +@router.delete('/{move_id}', include_in_schema=PRIVATE_IN_SCHEMA) async def delete_transactions(move_id, token: str = Depends(oauth2_scheme)): if not valid_token(token): logging.warning(f'delete_transactions - Bad Token: {token}')