Parametr select u vypisu, telo udalosti v calendarView

- calendar/view: include_body a body_type (html, text), telo udalosti
  rovnou ve vypisu bez dalsiho volani
- select u vypisu mailu, udalosti, calendarView, jedne udalosti a skupin;
  nahrazuje vychozi sadu poli
- app/graph_fields.py: vychozi sady a seznamy dostupnych poli, Swagger
  je zobrazuje v popisu parametru
- README: endpointy, popis select, zaznam zmen
This commit is contained in:
JiriUhlir
2026-09-23 06:51:05 +02:00
parent d80193da8b
commit fb97a8bf63
4 changed files with 121 additions and 24 deletions
+35 -5
View File
@@ -6,6 +6,15 @@ from fastapi import APIRouter, Body, Depends, Header, HTTPException, Query, Resp
from .config import Settings
from .credentials import get_request_settings
from .graph_client import MicrosoftGraphClient
from .graph_fields import (
EVENT_DEFAULT_SELECT,
EVENT_FIELDS,
GROUP_DEFAULT_SELECT,
GROUP_FIELDS,
MESSAGE_DEFAULT_SELECT,
MESSAGE_FIELDS,
select_description,
)
from .schemas import (
CalendarEventRequest,
CalendarEventUpdateRequest,
@@ -48,6 +57,11 @@ def get_planner_service(graph: MicrosoftGraphClient = Depends(get_graph_client))
return PlannerService(graph)
EVENT_SELECT_QUERY = Query(None, description=select_description(EVENT_DEFAULT_SELECT, EVENT_FIELDS))
MESSAGE_SELECT_QUERY = Query(None, description=select_description(MESSAGE_DEFAULT_SELECT, MESSAGE_FIELDS))
GROUP_SELECT_QUERY = Query(None, description=select_description(GROUP_DEFAULT_SELECT, GROUP_FIELDS))
@router.get("/status")
def microsoft365_status(request_settings: Settings = Depends(get_request_settings)) -> dict[str, Any]:
return {
@@ -103,9 +117,10 @@ async def list_messages(
user_id: str,
folder: str = "Inbox",
top: int = Query(25, ge=1, le=100),
select: str | None = MESSAGE_SELECT_QUERY,
service: MailService = Depends(get_mail_service),
) -> Any:
return await service.list_messages(user_id=user_id, folder=folder, top=top)
return await service.list_messages(user_id=user_id, folder=folder, top=top, select=select)
@router.post("/users/{user_id}/mail/send", status_code=status.HTTP_202_ACCEPTED)
@@ -129,9 +144,10 @@ async def get_calendar(user_id: str, service: CalendarService = Depends(get_cale
async def list_events(
user_id: str,
top: int = Query(25, ge=1, le=100),
select: str | None = EVENT_SELECT_QUERY,
service: CalendarService = Depends(get_calendar_service),
) -> Any:
return await service.list_events(user_id=user_id, top=top)
return await service.list_events(user_id=user_id, top=top, select=select)
@router.post("/users/{user_id}/calendar/events", status_code=status.HTTP_201_CREATED)
@@ -150,9 +166,21 @@ async def list_calendar_view(
end: str = Query(..., description="ISO 8601 with offset, e.g. 2026-09-08T18:00:00+02:00."),
top: int = Query(25, ge=1, le=100),
time_zone: str | None = Query(None, description="Time zone for returned dates, e.g. Europe/Prague."),
include_body: bool = Query(False, description="Also return body and bodyPreview of each event."),
body_type: str = Query("html", pattern="^(html|text)$", description="Body format when include_body is true."),
select: str | None = EVENT_SELECT_QUERY,
service: CalendarService = Depends(get_calendar_service),
) -> Any:
return await service.list_calendar_view(user_id=user_id, start=start, end=end, top=top, time_zone=time_zone)
return await service.list_calendar_view(
user_id=user_id,
start=start,
end=end,
top=top,
time_zone=time_zone,
include_body=include_body,
body_type=body_type,
select=select,
)
@router.post("/users/{user_id}/calendar/schedule")
@@ -168,9 +196,10 @@ async def get_schedule(
async def get_event(
user_id: str,
event_id: str,
select: str | None = EVENT_SELECT_QUERY,
service: CalendarService = Depends(get_calendar_service),
) -> Any:
return await service.get_event(user_id=user_id, event_id=event_id)
return await service.get_event(user_id=user_id, event_id=event_id, select=select)
@router.patch("/users/{user_id}/calendar/events/{event_id}")
@@ -215,9 +244,10 @@ async def upload_small_file(
@router.get("/groups")
async def list_groups(
top: int = Query(25, ge=1, le=999),
select: str | None = GROUP_SELECT_QUERY,
service: GroupsService = Depends(get_groups_service),
) -> Any:
return await service.list_groups(top=top)
return await service.list_groups(top=top, select=select)
@router.get("/teams/{team_id}/channels")