Source code for nick_derobertis_site.api.routers.awards
from typing import List, Optional, Sequence
from derobertis_cv.models.award import AwardModel
from derobertis_cv.pldata.awards import get_awards
from fastapi import APIRouter
from pydantic import BaseModel
router = APIRouter()
[docs]
class APIAwardModel(BaseModel):
title: str
logo_svg_text: Optional[str] = None
logo_fa_icon_class_str: Optional[str] = None
received: Optional[str] = None
extra_info: Optional[str] = None
award_parts: Optional[Sequence[str]] = None
[docs]
@classmethod
def from_cv_award_model(cls, model: AwardModel) -> "APIAwardModel":
kwargs = dict(
title=model.title,
logo_svg_text=model.logo_svg_text,
logo_fa_icon_class_str=model.logo_fa_icon_class_str,
received=model.received,
extra_info=model.extra_info,
award_parts=model.award_parts,
)
return cls(**kwargs)
[docs]
@classmethod
def list_from_cv_awards(cls, models: Sequence[AwardModel]) -> List["APIAwardModel"]:
return [cls.from_cv_award_model(mod) for mod in models]
[docs]
class APIAwardStatisticsModel(BaseModel):
count: int
SELECT_AWARD_NAMES = [
"Warrington College of Business Ph.D. Student Teaching Award",
"CFA Global Investment Research Challenge – Global Semi-Finalist",
"Graduate Management Admission Test (GMAT) Score",
"Finance Student of the Year",
]
ALL_AWARD_CV_MODELS = get_awards()
SELECTED_AWARD_CV_MODELS = get_awards(
include_awards=SELECT_AWARD_NAMES, order=SELECT_AWARD_NAMES
)
ALL_SKILL_MODELS = APIAwardModel.list_from_cv_awards(ALL_AWARD_CV_MODELS)
SELECTED_SKILL_MODELS = APIAwardModel.list_from_cv_awards(SELECTED_AWARD_CV_MODELS)
AWARD_COUNT = len(ALL_SKILL_MODELS)
[docs]
@router.get("/", tags=["awards"], response_model=List[APIAwardModel])
async def read_all_awards():
return ALL_SKILL_MODELS
[docs]
@router.get("/selected", tags=["awards"], response_model=List[APIAwardModel])
async def read_selected_awards():
return SELECTED_SKILL_MODELS
[docs]
@router.get("/stats", tags=["awards"], response_model=APIAwardStatisticsModel)
async def read_skill_stats():
mod = APIAwardStatisticsModel(count=AWARD_COUNT)
return mod