Source code for rasenmaeher_api.web.api.people.views

"""People API views."""  # pylint: disable=too-many-lines
from typing import List
import logging


from fastapi import APIRouter, Depends
from libpvarki.schemas.generic import OperationResultResponse

from .schema import (
    CallSignPerson,
    PeopleListOut,
)
from ..middleware.mtls import MTLSorJWT
from ..middleware.user import ValidUser
from ....db import Person
from ....db.errors import BackendError

[docs] LOGGER = logging.getLogger(__name__)
[docs] router = APIRouter(dependencies=[Depends(MTLSorJWT(auto_error=True))])
@router.get( "/list", response_model=PeopleListOut, dependencies=[Depends(ValidUser(auto_error=True, require_roles=["admin"]))] )
[docs] async def request_people_list() -> PeopleListOut: """ /list Return people/list. Returns a list of dicts, callsign_list = [ { "callsign":'x', "roles": ["str"] 'extra':'x' } ] """ result_list: List[CallSignPerson] = [] async for dbperson in Person.list(): if dbperson.callsign == "anon_admin": # Skip the "dummy" user for anon_admin continue roles = await dbperson.roles_set() listitem = CallSignPerson(callsign=dbperson.callsign, roles=list(roles), extra=dbperson.extra) result_list.append(listitem) return PeopleListOut(callsign_list=result_list)
@router.delete( "/{callsign}", response_model=OperationResultResponse, dependencies=[Depends(ValidUser(auto_error=True, require_roles=["admin"]))], )
[docs] async def delete_person(callsign: str) -> OperationResultResponse: """delete==revoke a callsign""" person = await Person.by_callsign(callsign) try: deleted = await person.delete() return OperationResultResponse(success=deleted) except BackendError as exc: LOGGER.error("Backend failure: {}".format(exc)) return OperationResultResponse(success=False, error=str(exc))