more schema for positioning API
This commit is contained in:
parent
210d079bb7
commit
67e5b0f8a1
1 changed files with 28 additions and 13 deletions
|
@ -1,36 +1,51 @@
|
|||
from typing import Annotated
|
||||
from typing import Annotated, Optional
|
||||
|
||||
from ninja import Field as APIField
|
||||
from ninja import Router as APIRouter
|
||||
from ninja import Router as APIRouter, Schema
|
||||
from pydantic import NegativeInt
|
||||
|
||||
from c3nav.api.newauth import auth_responses
|
||||
from c3nav.api.utils import NonEmptyStr
|
||||
from c3nav.mapdata.models import Source
|
||||
from c3nav.mapdata.schemas.models import CustomLocationSchema
|
||||
from c3nav.mapdata.schemas.responses import BoundsSchema
|
||||
from c3nav.routing.rangelocator import RangeLocator
|
||||
|
||||
BSSIDSchema = Annotated[str, APIField(pattern=r"^[a-z0-9]{2}(:[a-z0-9]{2}){5}$", title="BSSID")]
|
||||
|
||||
positioning_api_router = APIRouter(tags=["positioning"])
|
||||
|
||||
|
||||
class LocateRequestItemSchema(Schema):
|
||||
ssid: NonEmptyStr
|
||||
bssid: BSSIDSchema
|
||||
rssi: NegativeInt
|
||||
distance: Optional[float] = None
|
||||
|
||||
|
||||
class LocateRequestSchema(Schema):
|
||||
items: list[LocateRequestItemSchema]
|
||||
|
||||
|
||||
class PositioningResult(Schema):
|
||||
location: Optional[CustomLocationSchema]
|
||||
|
||||
|
||||
@positioning_api_router.post('/locate/', summary="locate based on wifi scans",
|
||||
response={200: BoundsSchema, **auth_responses})
|
||||
def locate():
|
||||
response={200: PositioningResult, **auth_responses})
|
||||
def locate(locate_data: LocateRequestSchema):
|
||||
# todo: implement
|
||||
return {
|
||||
"bounds": Source.max_bounds(),
|
||||
}
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
@positioning_api_router.get('/locate-test/', summary="get dummy location for debugging",
|
||||
response={200: BoundsSchema, **auth_responses})
|
||||
response={200: PositioningResult, **auth_responses})
|
||||
def locate_test():
|
||||
# todo: implement
|
||||
return {
|
||||
"bounds": Source.max_bounds(),
|
||||
}
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
BeaconsXYZ = dict[
|
||||
Annotated[str, APIField(pattern=r"^[a-z0-9]{2}(:[a-z0-9]{2}){5}$", title="BSSID")],
|
||||
BSSIDSchema,
|
||||
Annotated[
|
||||
tuple[
|
||||
Annotated[int, APIField(title="X (in cm)")],
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue