Added cardsets, packs, packtypes, players
This commit is contained in:
parent
0872362869
commit
6325698a10
@ -4,7 +4,7 @@ import os
|
||||
|
||||
from fastapi import FastAPI
|
||||
|
||||
from.routers_v2 import current, teams, rarity
|
||||
from.routers_v2 import current, teams, rarity, cardsets, players, packtypes, packs
|
||||
|
||||
app = FastAPI(
|
||||
responses={404: {'description': 'Not found'}}
|
||||
@ -13,3 +13,7 @@ app = FastAPI(
|
||||
app.include_router(current.router)
|
||||
app.include_router(teams.router)
|
||||
app.include_router(rarity.router)
|
||||
app.include_router(cardsets.router)
|
||||
app.include_router(players.router)
|
||||
app.include_router(packtypes.router)
|
||||
app.include_router(packs.router)
|
||||
|
||||
204
app/routers_v2/cardsets.py
Normal file
204
app/routers_v2/cardsets.py
Normal file
@ -0,0 +1,204 @@
|
||||
from fastapi import APIRouter, Depends, HTTPException, Response
|
||||
from typing import Optional
|
||||
import logging
|
||||
import pydantic
|
||||
from pandas import DataFrame
|
||||
|
||||
from ..db_engine import db, Cardset, model_to_dict, fn, Event
|
||||
from ..dependencies import oauth2_scheme, valid_token, LOG_DATA
|
||||
|
||||
logging.basicConfig(
|
||||
filename=LOG_DATA['filename'],
|
||||
format=LOG_DATA['format'],
|
||||
level=LOG_DATA['log_level']
|
||||
)
|
||||
|
||||
router = APIRouter(
|
||||
prefix='/api/v2/cardsets',
|
||||
tags=['cardsets']
|
||||
)
|
||||
|
||||
|
||||
class CardsetModel(pydantic.BaseModel):
|
||||
name: str
|
||||
description: str
|
||||
event_id: Optional[int] = None
|
||||
in_packs: Optional[bool] = True
|
||||
total_cards: int = 0
|
||||
for_purchase: Optional[bool] = True
|
||||
ranked_legal: Optional[bool] = True
|
||||
|
||||
|
||||
@router.get('')
|
||||
async def get_cardsets(
|
||||
name: Optional[str] = None, in_desc: Optional[str] = None, event_id: Optional[int] = None,
|
||||
in_packs: Optional[bool] = None, ranked_legal: Optional[bool] = None, csv: Optional[bool] = None):
|
||||
all_cardsets = Cardset.select()
|
||||
|
||||
if all_cardsets.count() == 0:
|
||||
db.close()
|
||||
raise HTTPException(status_code=404, detail=f'There are no cardsets to filter')
|
||||
|
||||
if name is not None:
|
||||
all_cardsets = all_cardsets.where(fn.Lower(Cardset.name) == name.lower())
|
||||
if in_desc is not None:
|
||||
all_cardsets = all_cardsets.where(fn.Lower(Cardset.description).contains(in_desc.lower()))
|
||||
if event_id is not None:
|
||||
try:
|
||||
this_event = Event.get_by_id(event_id)
|
||||
all_cardsets = all_cardsets.where(Cardset.event == this_event)
|
||||
except Exception as e:
|
||||
logging.error(f'Failed to find event {event_id}: {e}')
|
||||
raise HTTPException(status_code=404, detail=f'Event id {event_id} not found')
|
||||
if in_packs is not None:
|
||||
all_cardsets = all_cardsets.where(Cardset.in_packs == in_packs)
|
||||
if ranked_legal is not None:
|
||||
all_cardsets = all_cardsets.where(Cardset.ranked_legal == ranked_legal)
|
||||
|
||||
if all_cardsets.count() == 0:
|
||||
db.close()
|
||||
raise HTTPException(status_code=404, detail=f'No cardsets found')
|
||||
|
||||
if csv:
|
||||
data_list = [[
|
||||
'id', 'name', 'description', 'event_id', 'in_packs', 'for_purchase', 'total_cards', 'ranked_legal'
|
||||
]]
|
||||
for line in all_cardsets:
|
||||
data_list.append(
|
||||
[
|
||||
line.id, line.name, line.description, line.event.id if line.event else '', line.in_packs,
|
||||
line.for_purchase, line.total_cards, line.ranked_legal
|
||||
]
|
||||
)
|
||||
return_val = DataFrame(data_list).to_csv(header=False, index=False)
|
||||
|
||||
db.close()
|
||||
return Response(content=return_val, media_type='text/csv')
|
||||
|
||||
else:
|
||||
return_val = {'count': all_cardsets.count(), 'cardsets': []}
|
||||
for x in all_cardsets:
|
||||
return_val['cardsets'].append(model_to_dict(x))
|
||||
|
||||
db.close()
|
||||
return return_val
|
||||
|
||||
|
||||
@router.get('/{cardset_id}')
|
||||
async def get_one_cardset(cardset_id, csv: Optional[bool] = False):
|
||||
try:
|
||||
this_cardset = Cardset.get_by_id(cardset_id)
|
||||
except Exception:
|
||||
db.close()
|
||||
raise HTTPException(status_code=404, detail=f'No cardset found with id {cardset_id}')
|
||||
|
||||
if csv:
|
||||
data_list = [
|
||||
['id', 'name', 'description'],
|
||||
[this_cardset.id, this_cardset.name, this_cardset.description]
|
||||
]
|
||||
return_val = DataFrame(data_list).to_csv(header=False, index=False)
|
||||
|
||||
db.close()
|
||||
return Response(content=return_val, media_type='text/csv')
|
||||
else:
|
||||
return_val = model_to_dict(this_cardset)
|
||||
db.close()
|
||||
return return_val
|
||||
|
||||
|
||||
@router.post('')
|
||||
async def post_cardsets(cardset: CardsetModel, token: str = Depends(oauth2_scheme)):
|
||||
if not valid_token(token):
|
||||
logging.warning(f'Bad Token: {token}')
|
||||
db.close()
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail='You are not authorized to post cardsets. This event has been logged.'
|
||||
)
|
||||
|
||||
dupe_set = Cardset.get_or_none(Cardset.name == cardset.name)
|
||||
if dupe_set:
|
||||
db.close()
|
||||
raise HTTPException(status_code=400, detail=f'There is already a cardset using {cardset.name}')
|
||||
|
||||
this_cardset = Cardset(**cardset.__dict__)
|
||||
|
||||
saved = this_cardset.save()
|
||||
if saved == 1:
|
||||
return_val = model_to_dict(this_cardset)
|
||||
db.close()
|
||||
return return_val
|
||||
else:
|
||||
raise HTTPException(
|
||||
status_code=418,
|
||||
detail='Well slap my ass and call me a teapot; I could not save that cardset'
|
||||
)
|
||||
|
||||
|
||||
@router.patch('/{cardset_id}')
|
||||
async def patch_cardsets(
|
||||
cardset_id, name: Optional[str] = None, description: Optional[str] = None, in_packs: Optional[bool] = None,
|
||||
for_purchase: Optional[bool] = None, total_cards: Optional[int] = None, ranked_legal: Optional[bool] = None,
|
||||
token: str = Depends(oauth2_scheme)):
|
||||
if not valid_token(token):
|
||||
logging.warning(f'Bad Token: {token}')
|
||||
db.close()
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail='You are not authorized to patch cardsets. This event has been logged.'
|
||||
)
|
||||
try:
|
||||
this_cardset = Cardset.get_by_id(cardset_id)
|
||||
except Exception:
|
||||
db.close()
|
||||
raise HTTPException(status_code=404, detail=f'No cardset found with id {cardset_id}')
|
||||
|
||||
if name is not None:
|
||||
this_cardset.name = name
|
||||
if description is not None:
|
||||
this_cardset.description = description
|
||||
if in_packs is not None:
|
||||
this_cardset.in_packs = in_packs
|
||||
if for_purchase is not None:
|
||||
this_cardset.for_purchase = for_purchase
|
||||
if total_cards is not None:
|
||||
this_cardset.total_cards = total_cards
|
||||
if ranked_legal is not None:
|
||||
this_cardset.ranked_legal = ranked_legal
|
||||
|
||||
if this_cardset.save() == 1:
|
||||
return_val = model_to_dict(this_cardset)
|
||||
db.close()
|
||||
return return_val
|
||||
else:
|
||||
raise HTTPException(
|
||||
status_code=418,
|
||||
detail='Well slap my ass and call me a teapot; I could not save that rarity'
|
||||
)
|
||||
|
||||
|
||||
@router.delete('/{cardset_id}')
|
||||
async def delete_cardsets(cardset_id, token: str = Depends(oauth2_scheme)):
|
||||
if not valid_token(token):
|
||||
logging.warning(f'Bad Token: {token}')
|
||||
db.close()
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail='You are not authorized to delete cardsets. This event has been logged.'
|
||||
)
|
||||
try:
|
||||
this_cardset = Cardset.get_by_id(cardset_id)
|
||||
except Exception:
|
||||
db.close()
|
||||
raise HTTPException(status_code=404, detail=f'No cardset found with id {cardset_id}')
|
||||
|
||||
count = this_cardset.delete_instance()
|
||||
db.close()
|
||||
|
||||
if count == 1:
|
||||
raise HTTPException(status_code=200, detail=f'Cardset {cardset_id} has been deleted')
|
||||
else:
|
||||
raise HTTPException(status_code=500, detail=f'Cardset {cardset_id} was not deleted')
|
||||
|
||||
|
||||
259
app/routers_v2/packs.py
Normal file
259
app/routers_v2/packs.py
Normal file
@ -0,0 +1,259 @@
|
||||
from datetime import datetime
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException, Response
|
||||
from typing import Optional, List
|
||||
import logging
|
||||
import pydantic
|
||||
from pandas import DataFrame
|
||||
|
||||
from ..db_engine import db, Cardset, model_to_dict, fn, Pack, Team, PackType
|
||||
from ..dependencies import oauth2_scheme, valid_token, LOG_DATA
|
||||
|
||||
logging.basicConfig(
|
||||
filename=LOG_DATA['filename'],
|
||||
format=LOG_DATA['format'],
|
||||
level=LOG_DATA['log_level']
|
||||
)
|
||||
|
||||
router = APIRouter(
|
||||
prefix='/api/v2/packs',
|
||||
tags=['packs']
|
||||
)
|
||||
|
||||
|
||||
class PackPydantic(pydantic.BaseModel):
|
||||
team_id: int
|
||||
pack_type_id: int
|
||||
pack_team_id: Optional[int] = None
|
||||
pack_cardset_id: Optional[int] = None
|
||||
open_time: Optional[str] = None
|
||||
|
||||
|
||||
class PackModel(pydantic.BaseModel):
|
||||
packs: List[PackPydantic]
|
||||
|
||||
|
||||
@router.get('')
|
||||
async def get_packs(
|
||||
team_id: Optional[int] = None, pack_type_id: Optional[int] = None, opened: Optional[bool] = None,
|
||||
limit: Optional[int] = None, new_to_old: Optional[bool] = None, pack_team_id: Optional[int] = None,
|
||||
pack_cardset_id: Optional[int] = None, exact_match: Optional[bool] = False, csv: Optional[bool] = None):
|
||||
all_packs = Pack.select()
|
||||
|
||||
if all_packs.count() == 0:
|
||||
db.close()
|
||||
raise HTTPException(status_code=404, detail=f'There are no packs to filter')
|
||||
|
||||
if team_id is not None:
|
||||
try:
|
||||
this_team = Team.get_by_id(team_id)
|
||||
except Exception:
|
||||
db.close()
|
||||
raise HTTPException(status_code=404, detail=f'No team found with id {team_id}')
|
||||
all_packs = all_packs.where(Pack.team == this_team)
|
||||
if pack_type_id is not None:
|
||||
try:
|
||||
this_pack_type = PackType.get_by_id(pack_type_id)
|
||||
except Exception:
|
||||
db.close()
|
||||
raise HTTPException(status_code=404, detail=f'No pack type found with id {pack_type_id}')
|
||||
all_packs = all_packs.where(Pack.pack_type == this_pack_type)
|
||||
|
||||
if pack_team_id is not None:
|
||||
try:
|
||||
this_pack_team = Team.get_by_id(pack_team_id)
|
||||
except Exception:
|
||||
db.close()
|
||||
raise HTTPException(status_code=404, detail=f'No team found with id {pack_team_id}')
|
||||
all_packs = all_packs.where(Pack.pack_team == this_pack_team)
|
||||
elif exact_match:
|
||||
all_packs = all_packs.where(Pack.pack_team == None)
|
||||
|
||||
if pack_cardset_id is not None:
|
||||
try:
|
||||
this_pack_cardset = Cardset.get_by_id(pack_cardset_id)
|
||||
except Exception:
|
||||
db.close()
|
||||
raise HTTPException(status_code=404, detail=f'No cardset found with id {pack_cardset_id}')
|
||||
all_packs = all_packs.where(Pack.pack_cardset == this_pack_cardset)
|
||||
elif exact_match:
|
||||
all_packs = all_packs.where(Pack.pack_cardset == None)
|
||||
|
||||
if opened is not None:
|
||||
all_packs = all_packs.where(Pack.open_time.is_null(not opened))
|
||||
if limit is not None:
|
||||
all_packs = all_packs.limit(limit)
|
||||
if new_to_old is not None:
|
||||
all_packs = all_packs.order_by(-Pack.id)
|
||||
|
||||
# if all_packs.count() == 0:
|
||||
# db.close()
|
||||
# raise HTTPException(status_code=404, detail=f'No packs found')
|
||||
|
||||
if csv:
|
||||
data_list = [['id', 'team', 'pack_type', 'open_time']]
|
||||
for line in all_packs:
|
||||
data_list.append(
|
||||
[
|
||||
line.id, line.team.abbrev, line.pack_type.name,
|
||||
datetime.fromtimestamp(line.open_time) if line.open_time else None
|
||||
]
|
||||
)
|
||||
return_val = DataFrame(data_list).to_csv(header=False, index=False)
|
||||
|
||||
db.close()
|
||||
return Response(content=return_val, media_type='text/csv')
|
||||
|
||||
else:
|
||||
return_val = {'count': all_packs.count(), 'packs': []}
|
||||
for x in all_packs:
|
||||
return_val['packs'].append(model_to_dict(x))
|
||||
|
||||
db.close()
|
||||
return return_val
|
||||
|
||||
|
||||
@router.get('/{pack_id}')
|
||||
async def get_one_pack(pack_id, csv: Optional[bool] = False):
|
||||
try:
|
||||
this_pack = Pack.get_by_id(pack_id)
|
||||
except Exception:
|
||||
db.close()
|
||||
raise HTTPException(status_code=404, detail=f'No pack found with id {pack_id}')
|
||||
|
||||
if csv:
|
||||
data_list = [
|
||||
['id', 'team', 'pack_type', 'open_time'],
|
||||
[this_pack.id, this_pack.team.abbrev, this_pack.pack_type.name,
|
||||
datetime.fromtimestamp(this_pack.open_time) if this_pack.open_time else None]
|
||||
]
|
||||
return_val = DataFrame(data_list).to_csv(header=False, index=False)
|
||||
|
||||
db.close()
|
||||
return Response(content=return_val, media_type='text/csv')
|
||||
|
||||
else:
|
||||
return_val = model_to_dict(this_pack)
|
||||
db.close()
|
||||
return return_val
|
||||
|
||||
|
||||
@router.post('')
|
||||
async def post_pack(packs: PackModel, token: str = Depends(oauth2_scheme)):
|
||||
if not valid_token(token):
|
||||
logging.warning(f'Bad Token: {token}')
|
||||
db.close()
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail='You are not authorized to post packs. This event has been logged.'
|
||||
)
|
||||
|
||||
new_packs = []
|
||||
for x in packs.packs:
|
||||
this_player = Pack(
|
||||
team_id=x.team_id,
|
||||
pack_type_id=x.pack_type_id,
|
||||
pack_team_id=x.pack_team_id,
|
||||
pack_cardset_id=x.pack_cardset_id,
|
||||
open_time=x.open_time if x.open_time != "" else None
|
||||
)
|
||||
new_packs.append(this_player)
|
||||
|
||||
with db.atomic():
|
||||
Pack.bulk_create(new_packs, batch_size=15)
|
||||
db.close()
|
||||
|
||||
raise HTTPException(status_code=200, detail=f'{len(new_packs)} packs have been added')
|
||||
|
||||
|
||||
@router.post('/one')
|
||||
async def post_one_pack(pack: PackPydantic, token: str = Depends(oauth2_scheme)):
|
||||
if not valid_token(token):
|
||||
logging.warning(f'Bad Token: {token}')
|
||||
db.close()
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail='You are not authorized to post packs. This event has been logged.'
|
||||
)
|
||||
|
||||
this_pack = Pack(
|
||||
team_id=pack.team_id,
|
||||
pack_type_id=pack.pack_type_id,
|
||||
pack_team_id=pack.pack_team_id,
|
||||
pack_cardset_id=pack.pack_cardset_id,
|
||||
open_time=pack.open_time
|
||||
)
|
||||
|
||||
saved = this_pack.save()
|
||||
if saved == 1:
|
||||
return_val = model_to_dict(this_pack)
|
||||
db.close()
|
||||
return return_val
|
||||
else:
|
||||
raise HTTPException(
|
||||
status_code=418,
|
||||
detail='Well slap my ass and call me a teapot; I could not save that cardset'
|
||||
)
|
||||
|
||||
|
||||
@router.patch('/{pack_id}')
|
||||
async def patch_pack(
|
||||
pack_id, team_id: Optional[int] = None, pack_type_id: Optional[int] = None, open_time: Optional[int] = None,
|
||||
pack_team_id: Optional[int] = None, pack_cardset_id: Optional[int] = None, token: str = Depends(oauth2_scheme)):
|
||||
if not valid_token(token):
|
||||
logging.warning(f'Bad Token: {token}')
|
||||
db.close()
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail='You are not authorized to patch packs. This event has been logged.'
|
||||
)
|
||||
try:
|
||||
this_pack = Pack.get_by_id(pack_id)
|
||||
except Exception:
|
||||
db.close()
|
||||
raise HTTPException(status_code=404, detail=f'No pack found with id {pack_id}')
|
||||
|
||||
if team_id is not None:
|
||||
this_pack.team_id = team_id
|
||||
if pack_type_id is not None:
|
||||
this_pack.pack_type_id = pack_type_id
|
||||
if pack_team_id is not None:
|
||||
this_pack.pack_team_id = pack_team_id
|
||||
if pack_cardset_id is not None:
|
||||
this_pack.pack_cardset_id = pack_cardset_id
|
||||
if open_time is not None:
|
||||
this_pack.open_time = open_time
|
||||
|
||||
if this_pack.save() == 1:
|
||||
return_val = model_to_dict(this_pack)
|
||||
db.close()
|
||||
return return_val
|
||||
else:
|
||||
raise HTTPException(
|
||||
status_code=418,
|
||||
detail='Well slap my ass and call me a teapot; I could not save that rarity'
|
||||
)
|
||||
|
||||
|
||||
@router.delete('/{pack_id}')
|
||||
async def delete_pack(pack_id, token: str = Depends(oauth2_scheme)):
|
||||
if not valid_token(token):
|
||||
logging.warning(f'Bad Token: {token}')
|
||||
db.close()
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail='You are not authorized to delete packs. This event has been logged.'
|
||||
)
|
||||
try:
|
||||
this_pack = Pack.get_by_id(pack_id)
|
||||
except Exception:
|
||||
db.close()
|
||||
raise HTTPException(status_code=404, detail=f'No packs found with id {pack_id}')
|
||||
|
||||
count = this_pack.delete_instance()
|
||||
db.close()
|
||||
|
||||
if count == 1:
|
||||
raise HTTPException(status_code=200, detail=f'Pack {pack_id} has been deleted')
|
||||
else:
|
||||
raise HTTPException(status_code=500, detail=f'Pack {pack_id} was not deleted')
|
||||
194
app/routers_v2/packtypes.py
Normal file
194
app/routers_v2/packtypes.py
Normal file
@ -0,0 +1,194 @@
|
||||
from fastapi import APIRouter, Depends, HTTPException, Response
|
||||
from typing import Optional
|
||||
import logging
|
||||
import pydantic
|
||||
from pandas import DataFrame
|
||||
|
||||
from ..db_engine import db, PackType, model_to_dict, fn
|
||||
from ..dependencies import oauth2_scheme, valid_token, LOG_DATA
|
||||
|
||||
logging.basicConfig(
|
||||
filename=LOG_DATA['filename'],
|
||||
format=LOG_DATA['format'],
|
||||
level=LOG_DATA['log_level']
|
||||
)
|
||||
|
||||
router = APIRouter(
|
||||
prefix='/api/v2/packtypes',
|
||||
tags=['packtypes']
|
||||
)
|
||||
|
||||
|
||||
class PacktypeModel(pydantic.BaseModel):
|
||||
name: str
|
||||
card_count: int
|
||||
description: str
|
||||
cost: int
|
||||
available: Optional[bool] = True
|
||||
|
||||
|
||||
@router.get('')
|
||||
async def get_packtypes(
|
||||
name: Optional[str] = None, card_count: Optional[int] = None, in_desc: Optional[str] = None,
|
||||
available: Optional[bool] = None, csv: Optional[bool] = None):
|
||||
all_packtypes = PackType.select()
|
||||
|
||||
if all_packtypes.count() == 0:
|
||||
db.close()
|
||||
raise HTTPException(status_code=404, detail=f'There are no packtypes to filter')
|
||||
|
||||
if name is not None:
|
||||
all_packtypes = all_packtypes.where(fn.Lower(PackType.name) == name.lower())
|
||||
if card_count is not None:
|
||||
all_packtypes = all_packtypes.where(PackType.card_count == card_count)
|
||||
if in_desc is not None:
|
||||
all_packtypes = all_packtypes.where(fn.Lower(PackType.description).contains(in_desc.lower()))
|
||||
if available is not None:
|
||||
all_packtypes = all_packtypes.where(PackType.available == available)
|
||||
|
||||
# if all_packtypes.count() == 0:
|
||||
# db.close()
|
||||
# raise HTTPException(status_code=404, detail=f'No packtypes found')
|
||||
|
||||
if csv:
|
||||
data_list = [['id', 'name', 'card_count', 'description']]
|
||||
for line in all_packtypes:
|
||||
data_list.append(
|
||||
[
|
||||
line.id, line.name, line.card_count, line.description
|
||||
]
|
||||
)
|
||||
return_val = DataFrame(data_list).to_csv(header=False, index=False)
|
||||
|
||||
db.close()
|
||||
return Response(content=return_val, media_type='text/csv')
|
||||
|
||||
else:
|
||||
return_val = {'count': all_packtypes.count(), 'packtypes': []}
|
||||
for x in all_packtypes:
|
||||
return_val['packtypes'].append(model_to_dict(x))
|
||||
|
||||
db.close()
|
||||
return return_val
|
||||
|
||||
|
||||
@router.get('/{packtype_id}')
|
||||
async def get_one_packtype(packtype_id, csv: Optional[bool] = False):
|
||||
try:
|
||||
this_packtype = PackType.get_by_id(packtype_id)
|
||||
except Exception:
|
||||
db.close()
|
||||
raise HTTPException(status_code=404, detail=f'No packtype found with id {packtype_id}')
|
||||
|
||||
if csv:
|
||||
data_list = [
|
||||
['id', 'name', 'card_count', 'description'],
|
||||
[this_packtype.id, this_packtype.name, this_packtype.card_count, this_packtype.description]
|
||||
]
|
||||
return_val = DataFrame(data_list).to_csv(header=False, index=False)
|
||||
|
||||
db.close()
|
||||
return Response(content=return_val, media_type='text/csv')
|
||||
|
||||
else:
|
||||
return_val = model_to_dict(this_packtype)
|
||||
db.close()
|
||||
return return_val
|
||||
|
||||
|
||||
@router.post('')
|
||||
async def post_packtypes(packtype: PacktypeModel, token: str = Depends(oauth2_scheme)):
|
||||
if not valid_token(token):
|
||||
logging.warning(f'Bad Token: {token}')
|
||||
db.close()
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail='You are not authorized to post packtypes. This event has been logged.'
|
||||
)
|
||||
|
||||
dupe_packtype = PackType.get_or_none(PackType.name == packtype.name)
|
||||
if dupe_packtype:
|
||||
db.close()
|
||||
raise HTTPException(status_code=400, detail=f'There is already a packtype using {packtype.name}')
|
||||
|
||||
this_packtype = PackType(
|
||||
name=packtype.name,
|
||||
card_count=packtype.card_count,
|
||||
description=packtype.description,
|
||||
cost=packtype.cost,
|
||||
available=packtype.available
|
||||
)
|
||||
|
||||
saved = this_packtype.save()
|
||||
if saved == 1:
|
||||
return_val = model_to_dict(this_packtype)
|
||||
db.close()
|
||||
return return_val
|
||||
else:
|
||||
raise HTTPException(
|
||||
status_code=418,
|
||||
detail='Well slap my ass and call me a teapot; I could not save that cardset'
|
||||
)
|
||||
|
||||
|
||||
@router.patch('/{packtype_id}')
|
||||
async def patch_packtype(
|
||||
packtype_id, name: Optional[str] = None, card_count: Optional[int] = None, description: Optional[str] = None,
|
||||
cost: Optional[int] = None, available: Optional[bool] = None, token: str = Depends(oauth2_scheme)):
|
||||
if not valid_token(token):
|
||||
logging.warning(f'Bad Token: {token}')
|
||||
db.close()
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail='You are not authorized to patch packtypes. This event has been logged.'
|
||||
)
|
||||
try:
|
||||
this_packtype = PackType.get_by_id(packtype_id)
|
||||
except Exception:
|
||||
db.close()
|
||||
raise HTTPException(status_code=404, detail=f'No packtype found with id {packtype_id}')
|
||||
|
||||
if name is not None:
|
||||
this_packtype.name = name
|
||||
if card_count is not None:
|
||||
this_packtype.card_count = card_count
|
||||
if description is not None:
|
||||
this_packtype.description = description
|
||||
if cost is not None:
|
||||
this_packtype.cost = cost
|
||||
if available is not None:
|
||||
this_packtype.available = available
|
||||
|
||||
if this_packtype.save() == 1:
|
||||
return_val = model_to_dict(this_packtype)
|
||||
db.close()
|
||||
return return_val
|
||||
else:
|
||||
raise HTTPException(
|
||||
status_code=418,
|
||||
detail='Well slap my ass and call me a teapot; I could not save that rarity'
|
||||
)
|
||||
|
||||
|
||||
@router.delete('/{packtype_id}')
|
||||
async def delete_packtype(packtype_id, token: str = Depends(oauth2_scheme)):
|
||||
if not valid_token(token):
|
||||
logging.warning(f'Bad Token: {token}')
|
||||
db.close()
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail='You are not authorized to delete packtypes. This event has been logged.'
|
||||
)
|
||||
try:
|
||||
this_packtype = PackType.get_by_id(packtype_id)
|
||||
except Exception:
|
||||
db.close()
|
||||
raise HTTPException(status_code=404, detail=f'No packtype found with id {packtype_id}')
|
||||
|
||||
count = this_packtype.delete_instance()
|
||||
db.close()
|
||||
|
||||
if count == 1:
|
||||
raise HTTPException(status_code=200, detail=f'Packtype {packtype_id} has been deleted')
|
||||
else:
|
||||
raise HTTPException(status_code=500, detail=f'Packtype {packtype_id} was not deleted')
|
||||
540
app/routers_v2/players.py
Normal file
540
app/routers_v2/players.py
Normal file
@ -0,0 +1,540 @@
|
||||
from fastapi import APIRouter, Depends, HTTPException, Response, Query
|
||||
from typing import Optional, List
|
||||
import logging
|
||||
import pydantic
|
||||
from pandas import DataFrame
|
||||
|
||||
from ..db_engine import db, Player, model_to_dict, fn, chunked, Paperdex, Cardset, Rarity
|
||||
from ..dependencies import oauth2_scheme, valid_token, LOG_DATA
|
||||
|
||||
logging.basicConfig(
|
||||
filename=LOG_DATA['filename'],
|
||||
format=LOG_DATA['format'],
|
||||
level=LOG_DATA['log_level']
|
||||
)
|
||||
|
||||
router = APIRouter(
|
||||
prefix='/api/v2/players',
|
||||
tags=['players']
|
||||
)
|
||||
|
||||
|
||||
class PlayerPydantic(pydantic.BaseModel):
|
||||
player_id: int
|
||||
p_name: str
|
||||
cost: int
|
||||
image: str
|
||||
image2: Optional[str] = None
|
||||
mlbclub: str
|
||||
franchise: str
|
||||
cardset_id: int
|
||||
set_num: int
|
||||
rarity_id: int
|
||||
pos_1: str
|
||||
pos_2: Optional[str] = None
|
||||
pos_3: Optional[str] = None
|
||||
pos_4: Optional[str] = None
|
||||
pos_5: Optional[str] = None
|
||||
pos_6: Optional[str] = None
|
||||
pos_7: Optional[str] = None
|
||||
pos_8: Optional[str] = None
|
||||
headshot: Optional[str] = None
|
||||
vanity_card: Optional[str] = None
|
||||
strat_code: Optional[str] = None
|
||||
bbref_id: Optional[str] = None
|
||||
fangr_id: Optional[str] = None
|
||||
description: str
|
||||
quantity: Optional[int] = 999
|
||||
|
||||
|
||||
class PlayerModel(pydantic.BaseModel):
|
||||
players: List[PlayerPydantic]
|
||||
|
||||
|
||||
@router.get('')
|
||||
async def get_players(
|
||||
name: Optional[str] = None, value: Optional[int] = None, min_cost: Optional[int] = None,
|
||||
max_cost: Optional[int] = None, has_image2: Optional[bool] = None, mlbclub: Optional[str] = None,
|
||||
franchise: Optional[str] = None, cardset_id: list = Query(default=None), rarity_id: list = Query(default=None),
|
||||
pos_include: list = Query(default=None), pos_exclude: list = Query(default=None), has_headshot: Optional[bool] = None,
|
||||
has_vanity_card: Optional[bool] = None, strat_code: Optional[str] = None, bbref_id: Optional[str] = None,
|
||||
fangr_id: Optional[str] = None, inc_dex: Optional[bool] = True, in_desc: Optional[str] = None,
|
||||
flat: Optional[bool] = False, sort_by: Optional[str] = False, cardset_id_exclude: list = Query(default=None),
|
||||
limit: Optional[int] = None, csv: Optional[bool] = None):
|
||||
all_players = Player.select()
|
||||
if all_players.count() == 0:
|
||||
db.close()
|
||||
raise HTTPException(status_code=404, detail=f'There are no players to filter')
|
||||
|
||||
if name is not None:
|
||||
all_players = all_players.where(fn.Lower(Player.p_name) == name.lower())
|
||||
if value is not None:
|
||||
all_players = all_players.where(Player.cost == value)
|
||||
if min_cost is not None:
|
||||
all_players = all_players.where(Player.cost >= min_cost)
|
||||
if max_cost is not None:
|
||||
all_players = all_players.where(Player.cost <= max_cost)
|
||||
if has_image2 is not None:
|
||||
all_players = all_players.where(Player.image2.is_null(not has_image2))
|
||||
if mlbclub is not None:
|
||||
all_players = all_players.where(fn.Lower(Player.mlbclub) == mlbclub.lower())
|
||||
if franchise is not None:
|
||||
all_players = all_players.where(fn.Lower(Player.franchise) == franchise.lower())
|
||||
if cardset_id is not None:
|
||||
all_players = all_players.where(Player.cardset_id << cardset_id)
|
||||
if cardset_id_exclude is not None:
|
||||
all_players = all_players.where(Player.cardset_id.not_in(cardset_id_exclude))
|
||||
if rarity_id is not None:
|
||||
all_players = all_players.where(Player.rarity_id << rarity_id)
|
||||
if pos_include is not None:
|
||||
p_list = [x.upper() for x in pos_include]
|
||||
all_players = all_players.where(
|
||||
(Player.pos_1 << p_list) | (Player.pos_2 << p_list) | (Player.pos_3 << p_list) | (Player.pos_4 << p_list) |
|
||||
(Player.pos_5 << p_list) | (Player.pos_6 << p_list) | (Player.pos_7 << p_list) | (Player.pos_8 << p_list)
|
||||
)
|
||||
if has_headshot is not None:
|
||||
all_players = all_players.where(Player.headshot.is_null(not has_headshot))
|
||||
if has_vanity_card is not None:
|
||||
all_players = all_players.where(Player.vanity_card.is_null(not has_vanity_card))
|
||||
if strat_code is not None:
|
||||
all_players = all_players.where(Player.strat_code == strat_code)
|
||||
if bbref_id is not None:
|
||||
all_players = all_players.where(Player.bbref_id == bbref_id)
|
||||
if fangr_id is not None:
|
||||
all_players = all_players.where(Player.fangr_id == fangr_id)
|
||||
if in_desc is not None:
|
||||
all_players = all_players.where(fn.Lower(Player.description).contains(in_desc.lower()))
|
||||
|
||||
if sort_by is not None:
|
||||
if sort_by == 'cost-desc':
|
||||
all_players = all_players.order_by(-Player.cost)
|
||||
elif sort_by == 'cost-asc':
|
||||
all_players = all_players.order_by(Player.cost)
|
||||
elif sort_by == 'name-asc':
|
||||
all_players = all_players.order_by(Player.p_name)
|
||||
elif sort_by == 'name-desc':
|
||||
all_players = all_players.order_by(-Player.p_name)
|
||||
elif sort_by == 'rarity-desc':
|
||||
all_players = all_players.order_by(Player.rarity)
|
||||
elif sort_by == 'rarity-asc':
|
||||
all_players = all_players.order_by(-Player.rarity)
|
||||
|
||||
final_players = []
|
||||
# logging.info(f'pos_exclude: {type(pos_exclude)} - {pos_exclude} - is None: {pos_exclude is None}')
|
||||
for x in all_players:
|
||||
if pos_exclude is not None and set([x.upper() for x in pos_exclude]).intersection(x.get_all_pos()):
|
||||
pass
|
||||
else:
|
||||
final_players.append(x)
|
||||
|
||||
if limit is not None and len(final_players) >= limit:
|
||||
break
|
||||
|
||||
# if len(final_players) == 0:
|
||||
# db.close()
|
||||
# raise HTTPException(status_code=404, detail=f'No players found')
|
||||
|
||||
if csv:
|
||||
all_players.order_by(-Player.rarity.value, Player.p_name)
|
||||
data_list = [['id', 'name', 'value', 'image', 'image2', 'mlbclub', 'franchise', 'cardset', 'rarity', 'pos_1',
|
||||
'pos_2', 'pos_3', 'pos_4', 'pos_5', 'pos_6', 'pos_7', 'pos_8', 'headshot', 'vanity_card',
|
||||
'strat_code', 'bbref_id', 'description', 'for_purchase', 'ranked_legal']]
|
||||
for line in final_players:
|
||||
data_list.append(
|
||||
[
|
||||
line.player_id, line.p_name, line.cost, line.image, line.image2, line.mlbclub, line.franchise,
|
||||
line.cardset, line.rarity, 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.headshot, line.vanity_card, line.strat_code, line.bbref_id,
|
||||
line.description, line.cardset.for_purchase, line.cardset.ranked_legal
|
||||
# line.description, line.cardset.in_packs, line.quantity
|
||||
]
|
||||
)
|
||||
return_val = DataFrame(data_list).to_csv(header=False, index=False)
|
||||
|
||||
db.close()
|
||||
return Response(content=return_val, media_type='text/csv')
|
||||
|
||||
else:
|
||||
return_val = {'count': len(final_players), 'players': []}
|
||||
for x in final_players:
|
||||
|
||||
this_record = model_to_dict(x, recurse=not flat)
|
||||
|
||||
if inc_dex:
|
||||
this_dex = Paperdex.select().where(Paperdex.player == x)
|
||||
this_record['paperdex'] = {'count': this_dex.count(), 'paperdex': []}
|
||||
for y in this_dex:
|
||||
this_record['paperdex']['paperdex'].append(model_to_dict(y, recurse=False))
|
||||
|
||||
return_val['players'].append(this_record)
|
||||
|
||||
# return_val['players'].append(model_to_dict(x, recurse=not flat))
|
||||
|
||||
db.close()
|
||||
return return_val
|
||||
|
||||
|
||||
@router.get('/random')
|
||||
async def get_random_player(
|
||||
min_cost: Optional[int] = None, max_cost: Optional[int] = None, in_packs: Optional[bool] = None,
|
||||
min_rarity: Optional[int] = None, max_rarity: Optional[int] = None, limit: Optional[int] = None,
|
||||
pos_include: Optional[str] = None, pos_exclude: Optional[str] = None, franchise: Optional[str] = None,
|
||||
mlbclub: Optional[str] = None, cardset_id: list = Query(default=None), pos_inc: list = Query(default=None),
|
||||
pos_exc: list = Query(default=None), csv: Optional[bool] = None):
|
||||
all_players = (Player
|
||||
.select()
|
||||
.join(Cardset)
|
||||
.switch(Player)
|
||||
.join(Rarity)
|
||||
.order_by(fn.Random()))
|
||||
|
||||
if min_cost is not None:
|
||||
all_players = all_players.where(Player.cost >= min_cost)
|
||||
if max_cost is not None:
|
||||
all_players = all_players.where(Player.cost <= max_cost)
|
||||
if in_packs is not None:
|
||||
if in_packs:
|
||||
all_players = all_players.where(Player.cardset.in_packs)
|
||||
if min_rarity is not None:
|
||||
all_players = all_players.where(Player.rarity.value >= min_rarity)
|
||||
if max_rarity is not None:
|
||||
all_players = all_players.where(Player.rarity.value <= max_rarity)
|
||||
if pos_include is not None:
|
||||
all_players = all_players.where(
|
||||
(fn.lower(Player.pos_1) == pos_include.lower()) | (fn.lower(Player.pos_2) == pos_include.lower()) |
|
||||
(fn.lower(Player.pos_3) == pos_include.lower()) | (fn.lower(Player.pos_4) == pos_include.lower()) |
|
||||
(fn.lower(Player.pos_5) == pos_include.lower()) | (fn.lower(Player.pos_6) == pos_include.lower()) |
|
||||
(fn.lower(Player.pos_7) == pos_include.lower()) | (fn.lower(Player.pos_8) == pos_include.lower())
|
||||
)
|
||||
if franchise is not None:
|
||||
all_players = all_players.where(fn.Lower(Player.franchise) == franchise.lower())
|
||||
if mlbclub is not None:
|
||||
all_players = all_players.where(fn.Lower(Player.mlbclub) == mlbclub.lower())
|
||||
if cardset_id is not None:
|
||||
all_players = all_players.where(Player.cardset_id << cardset_id)
|
||||
if pos_inc is not None:
|
||||
p_list = [x.upper() for x in pos_inc]
|
||||
all_players = all_players.where(
|
||||
(Player.pos_1 << p_list) | (Player.pos_2 << p_list) | (Player.pos_3 << p_list) | (Player.pos_4 << p_list) |
|
||||
(Player.pos_5 << p_list) | (Player.pos_6 << p_list) | (Player.pos_7 << p_list) | (Player.pos_8 << p_list)
|
||||
)
|
||||
# if pos_exc is not None:
|
||||
# p_list = [x.upper() for x in pos_exc]
|
||||
# logging.info(f'starting query: {all_players}\n\np_list: {p_list}\n\n')
|
||||
# all_players = all_players.where(
|
||||
# Player.pos_1.not_in(p_list) & Player.pos_2.not_in(p_list) & Player.pos_3.not_in(p_list) &
|
||||
# Player.pos_4.not_in(p_list) & Player.pos_5.not_in(p_list) & Player.pos_6.not_in(p_list) &
|
||||
# Player.pos_7.not_in(p_list) & Player.pos_8.not_in(p_list)
|
||||
# )
|
||||
# logging.info(f'post pos query: {all_players}')
|
||||
|
||||
if pos_exclude is not None and pos_exc is None:
|
||||
final_players = [x for x in all_players if pos_exclude not in x.get_all_pos()]
|
||||
elif pos_exc is not None and pos_exclude is None:
|
||||
final_players = []
|
||||
p_list = [x.upper() for x in pos_exc]
|
||||
for x in all_players:
|
||||
if limit is not None and len(final_players) >= limit:
|
||||
break
|
||||
if not set(p_list).intersection(x.get_all_pos()):
|
||||
final_players.append(x)
|
||||
else:
|
||||
final_players = all_players
|
||||
|
||||
if limit is not None:
|
||||
final_players = final_players[:limit]
|
||||
|
||||
# if len(final_players) == 0:
|
||||
# db.close()
|
||||
# raise HTTPException(status_code=404, detail=f'No players found')
|
||||
|
||||
if csv:
|
||||
data_list = [['id', 'name', 'cost', 'image', 'image2', 'mlbclub', 'franchise', 'cardset', 'rarity', 'pos_1',
|
||||
'pos_2', 'pos_3', 'pos_4', 'pos_5', 'pos_6', 'pos_7', 'pos_8', 'headshot', 'vanity_card',
|
||||
'strat_code', 'bbref_id', 'description']]
|
||||
for line in final_players:
|
||||
data_list.append(
|
||||
[
|
||||
line.id, line.p_name, line.cost, line.image, line.image2,
|
||||
line.mlbclub, line.franchise, line.cardset.name, line.rarity.name,
|
||||
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.headshot, line.vanity_card,
|
||||
line.strat_code, line.bbref_id, line.description
|
||||
]
|
||||
)
|
||||
return_val = DataFrame(data_list).to_csv(header=False, index=False)
|
||||
|
||||
db.close()
|
||||
return Response(content=return_val, media_type='text/csv')
|
||||
|
||||
else:
|
||||
return_val = {'count': len(final_players), 'players': []}
|
||||
for x in final_players:
|
||||
this_record = model_to_dict(x)
|
||||
|
||||
this_dex = Paperdex.select().where(Paperdex.player == x)
|
||||
this_record['paperdex'] = {'count': this_dex.count(), 'paperdex': []}
|
||||
for y in this_dex:
|
||||
this_record['paperdex']['paperdex'].append(model_to_dict(y, recurse=False))
|
||||
|
||||
return_val['players'].append(this_record)
|
||||
# return_val['players'].append(model_to_dict(x))
|
||||
|
||||
db.close()
|
||||
return return_val
|
||||
|
||||
|
||||
@router.get('/{player_id}')
|
||||
async def get_one_player(player_id, csv: Optional[bool] = False):
|
||||
try:
|
||||
this_player = Player.get_by_id(player_id)
|
||||
except Exception:
|
||||
db.close()
|
||||
raise HTTPException(status_code=404, detail=f'No player found with id {player_id}')
|
||||
|
||||
if csv:
|
||||
data_list = [['id', 'name', 'cost', 'image', 'image2', 'mlbclub', 'franchise', 'cardset', 'rarity', 'pos_1',
|
||||
'pos_2', 'pos_3', 'pos_4', 'pos_5', 'pos_6', 'pos_7', 'pos_8', 'headshot', 'vanity_card',
|
||||
'strat_code', 'bbref_id', 'description']]
|
||||
return_val = DataFrame(data_list).to_csv(header=False, index=False)
|
||||
data_list.append(
|
||||
[
|
||||
this_player.id, this_player.p_name, this_player.cost, this_player.image, this_player.image2,
|
||||
this_player.mlbclub, this_player.franchise, this_player.cardset.name, this_player.rarity.name,
|
||||
this_player.pos_1, this_player.pos_2, this_player.pos_3, this_player.pos_4, this_player.pos_5,
|
||||
this_player.pos_6, this_player.pos_7, this_player.pos_8, this_player.headshot, this_player.vanity_card,
|
||||
this_player.strat_code, this_player.bbref_id, this_player.description
|
||||
]
|
||||
)
|
||||
|
||||
db.close()
|
||||
return Response(content=return_val, media_type='text/csv')
|
||||
else:
|
||||
return_val = model_to_dict(this_player)
|
||||
this_dex = Paperdex.select().where(Paperdex.player == this_player)
|
||||
return_val['paperdex'] = {'count': this_dex.count(), 'paperdex': []}
|
||||
for x in this_dex:
|
||||
return_val['paperdex']['paperdex'].append(model_to_dict(x, recurse=False))
|
||||
db.close()
|
||||
return return_val
|
||||
|
||||
|
||||
@router.patch('/{player_id}')
|
||||
async def v1_players_patch(
|
||||
player_id, name: Optional[str] = None, image: Optional[str] = None, image2: Optional[str] = None,
|
||||
mlbclub: Optional[str] = None, franchise: Optional[str] = None, cardset_id: Optional[int] = None,
|
||||
rarity_id: Optional[int] = None, pos_1: Optional[str] = None, pos_2: Optional[str] = None,
|
||||
pos_3: Optional[str] = None, pos_4: Optional[str] = None, pos_5: Optional[str] = None,
|
||||
pos_6: Optional[str] = None, pos_7: Optional[str] = None, pos_8: Optional[str] = None,
|
||||
headshot: Optional[str] = None, vanity_card: Optional[str] = None, strat_code: Optional[str] = None,
|
||||
bbref_id: Optional[str] = None, description: Optional[str] = None, cost: Optional[int] = None,
|
||||
fangr_id: Optional[str] = None, token: str = Depends(oauth2_scheme)):
|
||||
if not valid_token(token):
|
||||
logging.warning(f'Bad Token: {token}')
|
||||
db.close()
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail='You are not authorized to patch players. This event has been logged.'
|
||||
)
|
||||
|
||||
try:
|
||||
this_player = Player.get_by_id(player_id)
|
||||
except Exception:
|
||||
db.close()
|
||||
raise HTTPException(status_code=404, detail=f'No player found with id {player_id}')
|
||||
|
||||
if cost is not None:
|
||||
this_player.cost = cost
|
||||
if name is not None:
|
||||
this_player.p_name = name
|
||||
if image is not None:
|
||||
this_player.image = image
|
||||
if image2 is not None:
|
||||
if image2.lower() == 'false':
|
||||
this_player.image2 = None
|
||||
else:
|
||||
this_player.image2 = image2
|
||||
if mlbclub is not None:
|
||||
this_player.mlbclub = mlbclub
|
||||
if franchise is not None:
|
||||
this_player.franchise = franchise
|
||||
if cardset_id is not None:
|
||||
try:
|
||||
this_cardset = Cardset.get_by_id(cardset_id)
|
||||
except Exception:
|
||||
db.close()
|
||||
raise HTTPException(status_code=404, detail=f'No cardset found with id {cardset_id}')
|
||||
this_player.cardset = this_cardset
|
||||
if rarity_id is not None:
|
||||
try:
|
||||
this_rarity = Rarity.get_by_id(rarity_id)
|
||||
except Exception:
|
||||
db.close()
|
||||
raise HTTPException(status_code=404, detail=f'No rarity found with id {rarity_id}')
|
||||
this_player.rarity = this_rarity
|
||||
if pos_1 is not None:
|
||||
if pos_1 == 'False':
|
||||
this_player.pos_1 = None
|
||||
else:
|
||||
this_player.pos_1 = pos_1
|
||||
if pos_2 is not None:
|
||||
if pos_2 == 'False':
|
||||
this_player.pos_2 = None
|
||||
else:
|
||||
this_player.pos_2 = pos_2
|
||||
if pos_3 is not None:
|
||||
if pos_3 == 'False':
|
||||
this_player.pos_3 = None
|
||||
else:
|
||||
this_player.pos_3 = pos_3
|
||||
if pos_4 is not None:
|
||||
if pos_4 == 'False':
|
||||
this_player.pos_4 = None
|
||||
else:
|
||||
this_player.pos_4 = pos_4
|
||||
if pos_5 is not None:
|
||||
if pos_5 == 'False':
|
||||
this_player.pos_5 = None
|
||||
else:
|
||||
this_player.pos_5 = pos_5
|
||||
if pos_6 is not None:
|
||||
if pos_6 == 'False':
|
||||
this_player.pos_6 = None
|
||||
else:
|
||||
this_player.pos_6 = pos_6
|
||||
if pos_7 is not None:
|
||||
if pos_7 == 'False':
|
||||
this_player.pos_7 = None
|
||||
else:
|
||||
this_player.pos_7 = pos_7
|
||||
if pos_8 is not None:
|
||||
if pos_8 == 'False':
|
||||
this_player.pos_8 = None
|
||||
else:
|
||||
this_player.pos_8 = pos_8
|
||||
if headshot is not None:
|
||||
this_player.headshot = headshot
|
||||
if vanity_card is not None:
|
||||
this_player.vanity_card = vanity_card
|
||||
if strat_code is not None:
|
||||
this_player.strat_code = strat_code
|
||||
if bbref_id is not None:
|
||||
this_player.bbref_id = bbref_id
|
||||
if fangr_id is not None:
|
||||
this_player.fangr_id = fangr_id
|
||||
if description is not None:
|
||||
this_player.description = description
|
||||
|
||||
if this_player.save() == 1:
|
||||
return_val = model_to_dict(this_player)
|
||||
db.close()
|
||||
return return_val
|
||||
else:
|
||||
raise HTTPException(
|
||||
status_code=418,
|
||||
detail='Well slap my ass and call me a teapot; I could not save that rarity'
|
||||
)
|
||||
|
||||
|
||||
@router.put('')
|
||||
async def v1_players_put(players: PlayerModel, token: str = Depends(oauth2_scheme)):
|
||||
if not valid_token(token):
|
||||
logging.warning(f'Bad Token: {token}')
|
||||
db.close()
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail='You are not authorized to post players. This event has been logged.'
|
||||
)
|
||||
|
||||
new_players = []
|
||||
for x in players.players:
|
||||
# this_player = Player(
|
||||
# player_id=x.player_id,
|
||||
# p_name=x.p_name,
|
||||
# cost=x.cost,
|
||||
# image=x.image,
|
||||
# image2=x.image2,
|
||||
# mlbclub=x.mlbclub,
|
||||
# franchise=x.franchise,
|
||||
# cardset_id=x.cardset_id,
|
||||
# rarity_id=x.rarity_id,
|
||||
# set_num=x.set_num,
|
||||
# pos_1=x.pos_1,
|
||||
# pos_2=x.pos_2,
|
||||
# pos_3=x.pos_3,
|
||||
# pos_4=x.pos_4,
|
||||
# pos_5=x.pos_5,
|
||||
# pos_6=x.pos_6,
|
||||
# pos_7=x.pos_7,
|
||||
# pos_8=x.pos_8,
|
||||
# headshot=x.headshot,
|
||||
# vanity_card=x.vanity_card,
|
||||
# strat_code=x.strat_code,
|
||||
# fangr_id=x.fangr_id,
|
||||
# bbref_id=x.bbref_id,
|
||||
# description=x.description
|
||||
# )
|
||||
# new_players.append(this_player)
|
||||
new_players.append({
|
||||
'player_id': x.player_id,
|
||||
'p_name': x.p_name,
|
||||
'cost': x.cost,
|
||||
'image': x.image,
|
||||
'image2': x.image2,
|
||||
'mlbclub': x.mlbclub.title(),
|
||||
'franchise': x.franchise.title(),
|
||||
'cardset_id': x.cardset_id,
|
||||
'rarity_id': x.rarity_id,
|
||||
'set_num': x.set_num,
|
||||
'pos_1': x.pos_1,
|
||||
'pos_2': x.pos_2,
|
||||
'pos_3': x.pos_3,
|
||||
'pos_4': x.pos_4,
|
||||
'pos_5': x.pos_5,
|
||||
'pos_6': x.pos_6,
|
||||
'pos_7': x.pos_7,
|
||||
'pos_8': x.pos_8,
|
||||
'headshot': x.headshot,
|
||||
'vanity_card': x.vanity_card,
|
||||
'strat_code': x.strat_code,
|
||||
'fangr_id': x.fangr_id,
|
||||
'bbref_id': x.bbref_id,
|
||||
'description': x.description
|
||||
})
|
||||
|
||||
logging.info(f'new_players: {new_players}')
|
||||
|
||||
with db.atomic():
|
||||
# Player.bulk_create(new_players, batch_size=15)
|
||||
for batch in chunked(new_players, 15):
|
||||
logging.info(f'batch: {batch}')
|
||||
Player.insert_many(batch).on_conflict_replace().execute()
|
||||
db.close()
|
||||
|
||||
# sheets.update_all_players(SHEETS_AUTH)
|
||||
raise HTTPException(status_code=200, detail=f'{len(new_players)} players have been added')
|
||||
|
||||
|
||||
@router.delete('/{player_id}')
|
||||
async def v1_players_delete(player_id, token: str = Depends(oauth2_scheme)):
|
||||
if not valid_token(token):
|
||||
logging.warning(f'Bad Token: {token}')
|
||||
db.close()
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail='You are not authorized to delete players. This event has been logged.'
|
||||
)
|
||||
|
||||
try:
|
||||
this_player = Player.get_by_id(player_id)
|
||||
except Exception:
|
||||
db.close()
|
||||
raise HTTPException(status_code=404, detail=f'No player found with id {player_id}')
|
||||
|
||||
count = this_player.delete_instance()
|
||||
db.close()
|
||||
|
||||
if count == 1:
|
||||
raise HTTPException(status_code=200, detail=f'Player {player_id} has been deleted')
|
||||
else:
|
||||
raise HTTPException(status_code=500, detail=f'Player {player_id} was not deleted')
|
||||
Loading…
Reference in New Issue
Block a user