Source code for nick_derobertis_site.api.routers.software

from datetime import datetime
from typing import List, Optional, Sequence

from derobertis_cv.pldata.software import get_software_projects
from derobertis_cv.pldata.software.config import (
    EXCLUDED_SOFTWARE_PROJECTS,
    PROFESSIONAL_SOFTWARE_PROJECT_ORDER,
)
from derobertis_cv.pltemplates.software.project import SoftwareProject
from fastapi import APIRouter
from pydantic import BaseModel

router = APIRouter()


[docs] class APISoftwareModel(BaseModel): title: str description: str display_title: str created: Optional[datetime] = None updated: Optional[datetime] = None version: Optional[str] = None loc: Optional[int] = None commits: Optional[int] = None url: Optional[str] = None github_url: Optional[str] = None docs_url: Optional[str] = None logo_url: Optional[str] = None package_directory: Optional[str] = None logo_svg_text: Optional[str] = None logo_fa_icon_class_str: Optional[str] = None logo_base64: Optional[str] = None
[docs] @classmethod def from_cv_model(cls, model: SoftwareProject) -> "APISoftwareModel": return cls( title=model.title, description=model.description, display_title=model.display_title, created=model.created, updated=model.updated, version=model.version, loc=model.loc, commits=model.commits, url=model.url, github_url=model.github_url, docs_url=model.docs_url, logo_url=model.logo_url, package_directory=model.package_directory, logo_svg_text=model.logo_svg_text, logo_fa_icon_class_str=model.logo_fa_icon_class_str, logo_base64=model.logo_base64, )
[docs] @classmethod def list_from_cv_seq( cls, models: Sequence[SoftwareProject] ) -> List["APISoftwareModel"]: return [cls.from_cv_model(mod) for mod in models]
[docs] class APISoftwareStatisticsModel(BaseModel): count: int
ALL_PROJECT_CV_MODELS: List[SoftwareProject] = get_software_projects( exclude_projects=EXCLUDED_SOFTWARE_PROJECTS, order=PROFESSIONAL_SOFTWARE_PROJECT_ORDER, ) ALL_PROJECT_MODELS = APISoftwareModel.list_from_cv_seq(ALL_PROJECT_CV_MODELS) PROJECT_COUNT = len(ALL_PROJECT_MODELS) PROJECT_STATS = APISoftwareStatisticsModel(count=PROJECT_COUNT)
[docs] @router.get("/", tags=["software"], response_model=List[APISoftwareModel]) async def read_parent_skills(): return ALL_PROJECT_MODELS
[docs] @router.get("/stats", tags=["software"], response_model=APISoftwareStatisticsModel) async def read_skill_stats(): return PROJECT_STATS