Move live websocket to old url (/gj/live)

This commit is contained in:
phil 2024-05-12 01:35:03 +02:00
parent ae19ba9f27
commit 0bf74b2bba
3 changed files with 45 additions and 35 deletions

View file

@ -3,7 +3,6 @@ Geographical json stores, served under /gj
Used for displaying features on maps Used for displaying features on maps
""" """
from json import JSONDecodeError
import logging import logging
from typing import Annotated from typing import Annotated
from asyncio import CancelledError from asyncio import CancelledError
@ -15,17 +14,14 @@ from fastapi import (
Response, Response,
Header, Header,
WebSocket, WebSocket,
WebSocketDisconnect,
status, status,
) )
from gisaf.models.authentication import User from gisaf.models.authentication import User
from gisaf.redis_tools import store as redis_store from gisaf.redis_tools import store as redis_store
from gisaf.live import live_server
from gisaf.registry import registry from gisaf.registry import registry
from gisaf.security import get_current_active_user from gisaf.security import get_current_active_user
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
api = APIRouter( api = APIRouter(
@ -59,37 +55,6 @@ class ConnectionManager:
manager = ConnectionManager() manager = ConnectionManager()
@api.websocket("/live/{store}")
async def live_layer(store: str, websocket: WebSocket):
"""
Websocket for live layer updates
"""
await websocket.accept()
try:
while True:
try:
msg_data = await websocket.receive_json()
except JSONDecodeError:
msg_text = await websocket.receive_text()
if msg_text == "close":
await websocket.close()
continue
# else:
if "message" in msg_data:
if msg_data["message"] == "subscribeLiveLayer":
live_server.add_subscription(websocket, store)
elif msg_data["message"] == "unsubscribeLiveLayer":
live_server.remove_subscription(websocket, store)
else:
logger.warning(
f"Got websocket message with no message field: {msg_data}"
)
except WebSocketDisconnect:
logger.debug("Websocket disconnected")
# logger.debug('websocket connection closed')
@api.get("/{store_name}") @api.get("/{store_name}")
async def get_geojson( async def get_geojson(
store_name, store_name,

43
src/gisaf/api/ws.py Normal file
View file

@ -0,0 +1,43 @@
from json import JSONDecodeError
import logging
from fastapi import WebSocket, APIRouter, WebSocketDisconnect
from gisaf.live import live_server
logger = logging.getLogger(__name__)
api = APIRouter(
tags=["websockets"],
responses={404: {"description": "Not found"}},
)
@api.websocket("/live/{store}")
async def live_layer(store: str, websocket: WebSocket):
"""
Websocket for live layer updates
"""
await websocket.accept()
try:
while True:
try:
msg_data = await websocket.receive_json()
except JSONDecodeError:
msg_text = await websocket.receive_text()
if msg_text == "close":
await websocket.close()
continue
# else:
if "message" in msg_data:
if msg_data["message"] == "subscribeLiveLayer":
live_server.add_subscription(websocket, store)
elif msg_data["message"] == "unsubscribeLiveLayer":
live_server.remove_subscription(websocket, store)
else:
logger.warning(
f"Got websocket message with no message field: {msg_data}"
)
except WebSocketDisconnect:
logger.debug("Websocket disconnected")
# logger.debug('websocket connection closed')

View file

@ -15,6 +15,7 @@ from gisaf.api.admin import api as admin_api
from gisaf.api.dashboard import api as dashboard_api from gisaf.api.dashboard import api as dashboard_api
from gisaf.api.map import api as map_api from gisaf.api.map import api as map_api
from gisaf.api.download import api as download_api from gisaf.api.download import api as download_api
from gisaf.api.ws import api as ws_api
from gisaf.plugins import manager as plugin_manager from gisaf.plugins import manager as plugin_manager
logging.basicConfig(level=conf.gisaf.debugLevel) logging.basicConfig(level=conf.gisaf.debugLevel)
@ -45,6 +46,7 @@ app = FastAPI(
app.include_router(api, prefix="/api") app.include_router(api, prefix="/api")
app.include_router(geoapi, prefix="/api/gj") app.include_router(geoapi, prefix="/api/gj")
app.include_router(ws_api, prefix="/gj")
app.include_router(admin_api, prefix="/api/admin") app.include_router(admin_api, prefix="/api/admin")
app.include_router(dashboard_api, prefix="/api/dashboard") app.include_router(dashboard_api, prefix="/api/dashboard")
app.include_router(map_api, prefix="/api/map") app.include_router(map_api, prefix="/api/map")