3
0

47 lines
1.3 KiB
Python

from __future__ import annotations
import logging
import uuid
import capport.database
import capport.comm.hub
import capport.comm.message
import capport.utils.cli
import capport.utils.ipneigh
import trio
from .app import app
_logger = logging.getLogger(__name__)
class ApiHubApp(capport.comm.hub.HubApplication):
async def mac_states_changed(self, *, from_peer_id: uuid.UUID, pending_updates: capport.database.PendingUpdates) -> None:
# TODO: support websocket notification updates to clients?
pass
async def _run_hub(*, task_status=trio.TASK_STATUS_IGNORED) -> None:
try:
async with capport.utils.ipneigh.connect() as mync:
app.my_nc = mync
_logger.info("Running hub for API")
myapp = ApiHubApp()
myhub = capport.comm.hub.Hub(config=app.my_config, app=myapp)
app.my_hub = myhub
await myhub.run(task_status=task_status)
finally:
app.my_hub = None
app.my_nc = None
_logger.info("Done running hub for API")
await app.shutdown()
@app.before_serving
async def init():
app.debug = app.my_config.debug
app.secret_key = app.my_config.cookie_secret
capport.utils.cli.init_logger(app.my_config)
await app.nursery.start(_run_hub)