Initial commit
This commit is contained in:
0
folkugat_web/fragments/__init__.py
Normal file
0
folkugat_web/fragments/__init__.py
Normal file
45
folkugat_web/fragments/live.py
Normal file
45
folkugat_web/fragments/live.py
Normal file
@@ -0,0 +1,45 @@
|
||||
from fastapi import Request
|
||||
from folkugat_web.model import sessions as model
|
||||
from folkugat_web.services import sessions as service
|
||||
from folkugat_web.templates import templates
|
||||
|
||||
|
||||
def sessio_en_directe(request: Request):
|
||||
session = service.get_live_session()
|
||||
return templates.TemplateResponse(
|
||||
"fragments/marquee.html",
|
||||
{
|
||||
"request": request,
|
||||
"session": session,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def start_live_session(request: Request, session_id: int):
|
||||
service.set_live_session(session_id=session_id)
|
||||
session = model.Session(id=session_id)
|
||||
return templates.TemplateResponse(
|
||||
"fragments/sessions/live/stop.html",
|
||||
{
|
||||
"request": request,
|
||||
"session": session,
|
||||
},
|
||||
headers={
|
||||
"HX-Trigger": "reload-marquee"
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def stop_live_session(request: Request, session_id: int):
|
||||
service.stop_live_sessions()
|
||||
session = model.Session(id=session_id)
|
||||
return templates.TemplateResponse(
|
||||
"fragments/sessions/live/start.html",
|
||||
{
|
||||
"request": request,
|
||||
"session": session,
|
||||
},
|
||||
headers={
|
||||
"HX-Trigger": "reload-marquee"
|
||||
}
|
||||
)
|
||||
35
folkugat_web/fragments/nota.py
Normal file
35
folkugat_web/fragments/nota.py
Normal file
@@ -0,0 +1,35 @@
|
||||
from folkugat_web.config import nota as config
|
||||
from folkugat_web.templates import templates
|
||||
|
||||
|
||||
def input(request, value=None):
|
||||
return templates.TemplateResponse(
|
||||
"fragments/nota/input.html",
|
||||
{
|
||||
"request": request,
|
||||
"value": value,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def footer(request, value, logged_in):
|
||||
response = templates.TemplateResponse(
|
||||
"fragments/nota/footer.html",
|
||||
{
|
||||
"request": request,
|
||||
"value": config.LOGGED_IN_FOOTER if logged_in else value,
|
||||
"logged_in": logged_in,
|
||||
}
|
||||
)
|
||||
return response
|
||||
|
||||
|
||||
def nota(request):
|
||||
response = templates.TemplateResponse(
|
||||
"fragments/nota/nota.html",
|
||||
{
|
||||
"request": request,
|
||||
}
|
||||
)
|
||||
response.headers["HX-Refresh"] = "true"
|
||||
return response
|
||||
144
folkugat_web/fragments/sessions.py
Normal file
144
folkugat_web/fragments/sessions.py
Normal file
@@ -0,0 +1,144 @@
|
||||
from typing import Optional
|
||||
|
||||
from fastapi import Request
|
||||
from fastapi.responses import HTMLResponse
|
||||
from folkugat_web.config import calendari as config
|
||||
from folkugat_web.model import sessions as model
|
||||
from folkugat_web.model.pagines import Pages
|
||||
from folkugat_web.services import sessions as service
|
||||
from folkugat_web.templates import templates
|
||||
|
||||
|
||||
def sessions_pagina(request, logged_in):
|
||||
return templates.TemplateResponse(
|
||||
"fragments/sessions/pagina.html",
|
||||
{
|
||||
"request": request,
|
||||
"logged_in": logged_in,
|
||||
"Pages": Pages,
|
||||
"menu_selected_id": Pages.Sessions,
|
||||
"calendar_list_id": config.CALENDAR_LIST_ID,
|
||||
"history_list_id": config.HISTORY_LIST_ID,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def sessions_calendari(request: Request, limit: int, logged_in: bool):
|
||||
sessions = service.get_next_sessions(limit=limit+1)
|
||||
has_more_sessions = len(sessions) > limit
|
||||
sessions = sessions[:limit]
|
||||
next_session_id = sessions[0].id if sessions else None
|
||||
return _sessions_list(
|
||||
request=request,
|
||||
sessions=sessions,
|
||||
has_more_sessions=has_more_sessions,
|
||||
paging_config=config.CALENDARI_PAGING_CONFIG,
|
||||
list_id=config.CALENDAR_LIST_ID,
|
||||
next_session_id=next_session_id,
|
||||
get_sessions_url="/api/sessions/upcoming",
|
||||
limit=limit,
|
||||
logged_in=logged_in
|
||||
)
|
||||
|
||||
|
||||
def sessions_historial(request: Request, limit: int, logged_in: bool):
|
||||
sessions = service.get_sessions_history(limit=limit+1)
|
||||
has_more_sessions = len(sessions) > limit
|
||||
sessions = sessions[:limit]
|
||||
return _sessions_list(
|
||||
request=request,
|
||||
sessions=sessions,
|
||||
has_more_sessions=has_more_sessions,
|
||||
paging_config=config.HISTORY_PAGING_CONFIG,
|
||||
list_id=config.HISTORY_LIST_ID,
|
||||
get_sessions_url="/api/sessions/history",
|
||||
limit=limit,
|
||||
logged_in=logged_in
|
||||
)
|
||||
|
||||
|
||||
def _sessions_list(request: Request, sessions: list[model.Session], has_more_sessions: bool,
|
||||
paging_config: config.PagingConfig, list_id: str, get_sessions_url: str,
|
||||
limit: int, logged_in: bool, next_session_id: Optional[int] = None):
|
||||
if has_more_sessions:
|
||||
more_sessions = limit + paging_config.step
|
||||
else:
|
||||
more_sessions = None
|
||||
|
||||
if len(sessions) > paging_config.initial_items:
|
||||
less_sessions = max(paging_config.initial_items, len(sessions) - paging_config.step)
|
||||
else:
|
||||
less_sessions = None
|
||||
|
||||
return templates.TemplateResponse(
|
||||
"fragments/sessions/session_list.html",
|
||||
{
|
||||
"request": request,
|
||||
"logged_in": logged_in,
|
||||
"get_sessions_url": get_sessions_url,
|
||||
"sessions": sessions,
|
||||
"session_list_id": list_id,
|
||||
"next_session_id": next_session_id,
|
||||
"more_sessions": more_sessions,
|
||||
"less_sessions": less_sessions,
|
||||
"limit": limit,
|
||||
"date_names": service.get_date_names,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def sessio(request: Request, session_id: int, logged_in: bool):
|
||||
session = service.get_session(session_id=session_id)
|
||||
return templates.TemplateResponse(
|
||||
"fragments/sessions/sessio.html",
|
||||
{
|
||||
"request": request,
|
||||
"logged_in": logged_in,
|
||||
"Pages": Pages,
|
||||
"session": session,
|
||||
"date_names": service.get_date_names,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def sessions_editor_row(request: Request, session_date: Optional[model.Session] = None, session_id: Optional[int] = None):
|
||||
if session_date is None:
|
||||
if session_id is None:
|
||||
raise ValueError("Must either give session or session_id")
|
||||
session_date = service.get_session(session_id=session_id)
|
||||
return templates.TemplateResponse(
|
||||
"fragments/sessions/session_row.html",
|
||||
{
|
||||
"request": request,
|
||||
"session": session_date,
|
||||
"date_names": service.get_date_names,
|
||||
"logged_in": True,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def sessions_editor_row_editing(request, session_id: int):
|
||||
session = service.get_session(session_id)
|
||||
return templates.TemplateResponse(
|
||||
"fragments/sessions/session_row_editing.html",
|
||||
{
|
||||
"request": request,
|
||||
"session": session,
|
||||
"date_names": service.get_date_names,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def sessions_editor_insert_row(request, session_date: Optional[model.Session] = None):
|
||||
session_date = service.insert_session(session_date or service.new_session())
|
||||
return sessions_editor_row(request, session_date=session_date)
|
||||
|
||||
|
||||
def sessions_editor_post_row(request, session_date: model.Session):
|
||||
service.set_session(session_date)
|
||||
return sessions_editor_row(request, session_date=session_date)
|
||||
|
||||
|
||||
def sessions_editor_delete_row(session_id: int):
|
||||
service.delete_session(session_id)
|
||||
return HTMLResponse()
|
||||
73
folkugat_web/fragments/tema.py
Normal file
73
folkugat_web/fragments/tema.py
Normal file
@@ -0,0 +1,73 @@
|
||||
from typing import Optional
|
||||
|
||||
from fastapi import Request
|
||||
from folkugat_web.model import temes as model
|
||||
from folkugat_web.services.temes import query as temes_q
|
||||
from folkugat_web.templates import templates
|
||||
|
||||
|
||||
def title(request: Request, logged_in: bool, tema: Optional[model.Tema] = None, tema_id: Optional[int] = 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)
|
||||
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)
|
||||
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_idx: int):
|
||||
tema = temes_q.get_tema_by_id(tema_id)
|
||||
if tema is None:
|
||||
raise ValueError(f"No tune exists for tema_id: {tema_id}")
|
||||
if len(tema.lyrics) < lyric_idx:
|
||||
raise ValueError(f'Lyric index out of bounds')
|
||||
lyric = tema.lyrics[lyric_idx]
|
||||
|
||||
return templates.TemplateResponse(
|
||||
"fragments/tema/lyric.html",
|
||||
{
|
||||
"request": request,
|
||||
"logged_in": logged_in,
|
||||
"tema": tema,
|
||||
"lyric_idx": lyric_idx,
|
||||
"lyric": lyric,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def lyric_editor(request: Request, logged_in: bool, tema_id: int, lyric_idx: int):
|
||||
tema = temes_q.get_tema_by_id(tema_id)
|
||||
if tema is None:
|
||||
raise ValueError(f"No tune exists for tema_id: {tema_id}")
|
||||
if len(tema.lyrics) < lyric_idx:
|
||||
raise ValueError(f'Lyric index out of bounds')
|
||||
lyric = tema.lyrics[lyric_idx]
|
||||
|
||||
return templates.TemplateResponse(
|
||||
"fragments/tema/editor/lyric.html",
|
||||
{
|
||||
"request": request,
|
||||
"logged_in": logged_in,
|
||||
"tema": tema,
|
||||
"lyric_idx": lyric_idx,
|
||||
"lyric": lyric,
|
||||
}
|
||||
)
|
||||
54
folkugat_web/fragments/temes.py
Normal file
54
folkugat_web/fragments/temes.py
Normal file
@@ -0,0 +1,54 @@
|
||||
from fastapi import Request
|
||||
from folkugat_web.model import temes as model
|
||||
from folkugat_web.model.pagines import Pages
|
||||
from folkugat_web.services.temes import query as temes_q
|
||||
from folkugat_web.services.temes import search as temes_s
|
||||
from folkugat_web.templates import templates
|
||||
|
||||
|
||||
def temes_pagina(request: Request, logged_in: bool):
|
||||
return templates.TemplateResponse(
|
||||
"fragments/temes/pagina.html",
|
||||
{
|
||||
"request": request,
|
||||
"logged_in": logged_in,
|
||||
"Pages": Pages,
|
||||
"menu_selected_id": Pages.Temes,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def temes_busca_result(request: Request, tema: model.Tema, logged_in: bool):
|
||||
return templates.TemplateResponse(
|
||||
"fragments/temes/result.html",
|
||||
{
|
||||
"request": request,
|
||||
"logged_in": logged_in,
|
||||
"tema": tema,
|
||||
"LinkSubtype": model.LinkSubtype,
|
||||
"LinkType": model.LinkType,
|
||||
}
|
||||
).body.decode('utf-8')
|
||||
|
||||
|
||||
def temes_busca(request: Request, query: str, logged_in: bool):
|
||||
temes = temes_s.busca_temes(query)
|
||||
return '\n'.join(
|
||||
[temes_busca_result(request, tema, logged_in)
|
||||
for tema in temes]
|
||||
)
|
||||
|
||||
|
||||
def tema(request: Request, tema_id: int, logged_in: bool):
|
||||
tema = temes_q.get_tema_by_id(tema_id)
|
||||
return templates.TemplateResponse(
|
||||
"fragments/tema/pagina.html",
|
||||
{
|
||||
"request": request,
|
||||
"logged_in": logged_in,
|
||||
"Pages": Pages,
|
||||
"LinkSubtype": model.LinkSubtype,
|
||||
"LinkType": model.LinkType,
|
||||
"tema": tema,
|
||||
}
|
||||
)
|
||||
Reference in New Issue
Block a user