make fetch_updates api v2 work

This commit is contained in:
Laura Klünder 2023-12-03 20:42:26 +01:00
parent 19380e0b80
commit ef223ee09c
2 changed files with 42 additions and 1 deletions

View file

@ -0,0 +1,41 @@
from typing import Type, Optional, Sequence
from django.db.models import Model
from c3nav.api.exceptions import API404
from c3nav.mapdata.api import optimize_query
from c3nav.mapdata.schemas.filters import FilterSchema
def mapdata_list_endpoint(request,
model: Type[Model],
filters: Optional[FilterSchema] = None,
order_by: Sequence[str] = ('pk',)):
# todo: request permissions based on api key
# validate filters
if filters:
filters.validate(request)
# get the queryset and filter it
qs = optimize_query(
model.qs_for_request(request) if hasattr(model, 'qs_for_request') else model.objects.all()
)
if filters:
qs = filters.filter_qs(qs)
# order_by
qs = qs.order_by(*order_by)
# todo: can access geometry… using defer?
return qs
def mapdata_retrieve_endpoint(request, model: Type[Model], **lookups):
try:
return optimize_query(
model.qs_for_request(request) if hasattr(model, 'qs_for_request') else model.objects.all()
).get(**lookups)
except model.DoesNotExist:
raise API404("%s not found" % model.__name__.lower())

View file

@ -67,4 +67,4 @@ def fetch_updates(request, response: HttpResponse):
response['Access-Control-Allow-Credentials'] = 'true'
set_tile_access_cookie(request, response)
return response
return result