47 lines
1.3 KiB
Python
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)
|