from fastapi import HTTPException, Request from folkugat_web.model import temes as model from folkugat_web.services.temes import query as temes_q from folkugat_web.services.temes.links import guess_link_type from folkugat_web.templates import templates def title(request: Request, logged_in: bool, tema: model.Tema | None = None, tema_id: int | None = None): if tema is None: if tema_id is None: raise ValueError("Either 'tema' or 'tema_id' must be given!") tema = temes_q.get_tema_by_id(tema_id) if not tema: raise HTTPException(status_code=404, detail="Could not find tune") return templates.TemplateResponse( "fragments/tema/title.html", { "request": request, "logged_in": logged_in, "tema": tema, } ) def title_editor(request: Request, logged_in: bool, tema_id: int): tema = temes_q.get_tema_by_id(tema_id) if not tema: raise HTTPException(status_code=404, detail="Could not find tune") return templates.TemplateResponse( "fragments/tema/editor/title.html", { "request": request, "logged_in": logged_in, "tema": tema, } ) def lyric(request: Request, logged_in: bool, tema_id: int, lyric_id: int): tema = temes_q.get_tema_by_id(tema_id) if not tema: raise HTTPException(status_code=404, detail="Could not find tune") lyric = tema.lyrics.get(lyric_id) return templates.TemplateResponse( "fragments/tema/lyric.html", { "request": request, "logged_in": logged_in, "tema": tema, "lyric_id": lyric_id, "lyric": lyric, } ) def lyric_editor(request: Request, logged_in: bool, tema_id: int, lyric_id: int): tema = temes_q.get_tema_by_id(tema_id) if not tema: raise HTTPException(status_code=404, detail="Could not find tune") lyric = tema.lyrics.get(lyric_id) return templates.TemplateResponse( "fragments/tema/editor/lyric.html", { "request": request, "logged_in": logged_in, "tema": tema, "lyric_id": lyric_id, "lyric": lyric, } ) def link(request: Request, logged_in: bool, tema_id: int, link_id: int): tema = temes_q.get_tema_by_id(tema_id) if not tema: raise HTTPException(status_code=404, detail="Could not find tune") link = tema.links.get(link_id) return templates.TemplateResponse( "fragments/tema/link.html", { "request": request, "logged_in": logged_in, "tema": tema, "link_id": link_id, "link": link, "LinkType": model.LinkType, "ContentType": model.ContentType, }, headers={ "HX-Trigger": f"reload-tema-{tema_id}-score" } ) def link_editor(request: Request, logged_in: bool, tema_id: int, link_id: int): tema = temes_q.get_tema_by_id(tema_id) if not tema: raise HTTPException(status_code=404, detail="Could not find tune") link = tema.links.get(link_id) return templates.TemplateResponse( "fragments/tema/editor/link.html", { "request": request, "logged_in": logged_in, "tema": tema, "link_id": link_id, "link": link, "LinkType": model.LinkType, "ContentType": model.ContentType, } ) def link_editor_url(request: Request, logged_in: bool, tema_id: int, link_id: int): tema = temes_q.get_tema_by_id(tema_id) if not tema: raise HTTPException(status_code=404, detail="Could not find tune") link = tema.links.get(link_id) return templates.TemplateResponse( "fragments/tema/editor/link_url.html", { "request": request, "logged_in": logged_in, "tema": tema, "link_id": link_id, "link": link, "LinkType": model.LinkType, "ContentType": model.ContentType, } ) def link_editor_file(request: Request, logged_in: bool, tema_id: int, link_id: int): tema = temes_q.get_tema_by_id(tema_id) if not tema: raise HTTPException(status_code=404, detail="Could not find tune") link = tema.links.get(link_id) return templates.TemplateResponse( "fragments/tema/editor/link_file.html", { "request": request, "logged_in": logged_in, "tema": tema, "link_id": link_id, "link": link, "LinkType": model.LinkType, "ContentType": model.ContentType, } ) def link_icon(request: Request, logged_in: bool, tema_id: int, link_id: int, url: str, content_type: model.ContentType): link = model.Link( id=link_id, content_type=content_type, link_type=guess_link_type(url), url=url, ) return templates.TemplateResponse( "fragments/tema/link_icon.html", { "request": request, "logged_in": logged_in, "tema_id": tema_id, "link_id": link_id, "link": link, "LinkType": model.LinkType, "ContentType": model.ContentType, } ) def score(request: Request, logged_in: bool, tema_id: int): tema = temes_q.get_tema_by_id(tema_id) if not tema: raise HTTPException(status_code=404, detail="Could not find tune") return templates.TemplateResponse( "fragments/tema/score.html", { "request": request, "logged_in": logged_in, "tema": tema, "LinkType": model.LinkType, } ) def property_(request: Request, logged_in: bool, tema_id: int, property_id: int): tema = temes_q.get_tema_by_id(tema_id) if not tema: raise HTTPException(status_code=404, detail="Could not find tune") prop = tema.properties.get(property_id) return templates.TemplateResponse( "fragments/tema/property.html", { "request": request, "logged_in": logged_in, "tema": tema, "property_id": property_id, "property": prop, "PropertyField": model.PropertyField, } ) def property_editor(request: Request, logged_in: bool, tema_id: int, property_id: int): tema = temes_q.get_tema_by_id(tema_id) if not tema: raise HTTPException(status_code=404, detail="Could not find tune") prop = tema.properties.get(property_id) return templates.TemplateResponse( "fragments/tema/editor/property.html", { "request": request, "logged_in": logged_in, "tema": tema, "property_id": property_id, "property": prop, "PropertyField": model.PropertyField, } ) def visibility(request: Request, logged_in: bool, tema: model.Tema): return templates.TemplateResponse( "fragments/tema/visibility.html", { "request": request, "logged_in": logged_in, "tema": tema, } )