Browse Source

web exts

main
gsd 4 months ago
parent
commit
cd23e7831f
  1. 28
      service.py
  2. 11
      webExtensions/webPing.py

28
service.py

@ -1,7 +1,7 @@
#sys imports #sys imports
import argparse import argparse
import traceback import traceback
import sys import sys, os
import asyncio import asyncio
from time import time from time import time
from typing import List, Dict from typing import List, Dict
@ -54,7 +54,7 @@ class MeshListener(MeshArgsParse):
#task #task
async def meshWorker(self, queue: asyncio.Queue): async def meshWorker(self, queue: asyncio.Queue):
logger.info("Start mesh queue listener") logger.info("Start mesh queue listener")
run = True run = not self.args.disable_mesh
while run: while run:
try: try:
await self.device.start() await self.device.start()
@ -82,6 +82,7 @@ class MeshListener(MeshArgsParse):
class MeshApi(MeshArgsParse): class MeshApi(MeshArgsParse):
app: FastAPI app: FastAPI
tasks: List tasks: List
context: str = "/api"
def __init__(self, args): def __init__(self, args):
super().__init__(args) super().__init__(args)
self.app = FastAPI(lifespan=self.lifespan) self.app = FastAPI(lifespan=self.lifespan)
@ -169,6 +170,7 @@ class MeshCenter(MeshListener, MeshApi, MongoDriver, MeshArgsParse):
MongoDriver.__init__(self, args) MongoDriver.__init__(self, args)
self.buildBackgroundTasks() self.buildBackgroundTasks()
self.bot = BotManager(self) self.bot = BotManager(self)
self.extensionLoader(['webExtensions'])
async def queueHandler(self): async def queueHandler(self):
logger.info("Start queue handler") logger.info("Start queue handler")
@ -200,12 +202,34 @@ class MeshCenter(MeshListener, MeshApi, MongoDriver, MeshArgsParse):
self.tasks.append(handlerTask) self.tasks.append(handlerTask)
def extensionLoader(self, search_paths = []):
logger.info("Search fastapiExt")
os.chdir(os.path.dirname(os.path.abspath(__file__)))
if type(search_paths) == str:
search_paths = [search_paths]
for path in search_paths:
logger.info(f"Try found extensions in {path}")
if not os.path.exists(path) or not os.path.isdir(path):
logger.info(f"Directory is not exists or not directory, skip")
continue
sys.path.insert(0, path)
for extension in os.listdir(path):
extension, ext = os.path.splitext(extension)
if ext != ".py":
continue
logger.info(f"Found web ext: {extension}")
__import__(extension).WebExtension(self)
sys.path.pop(0)
if __name__ == "__main__": if __name__ == "__main__":
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
#mesh #mesh
parser.add_argument("--transport", default="serial") parser.add_argument("--transport", default="serial")
parser.add_argument("--serial-port", default="/dev/tty.usbmodemD0CF1309DC141") parser.add_argument("--serial-port", default="/dev/tty.usbmodemD0CF1309DC141")
parser.add_argument("--serial-baudrate", default=115200) parser.add_argument("--serial-baudrate", default=115200)
parser.add_argument("--disable-mesh", action="store_true", default=True)
#fastapi #fastapi
parser.add_argument("--web-host", default="0.0.0.0") parser.add_argument("--web-host", default="0.0.0.0")
parser.add_argument("--web-port", default=8680) parser.add_argument("--web-port", default=8680)

11
webExtensions/webPing.py

@ -0,0 +1,11 @@
from fastapi import FastAPI
class WebExtension:
app: FastAPI
def __init__(self, core):
self.core = core
self.app = core.app
@self.app.get(f"{self.core.context}/ping")
async def pong():
return {"pong": True}
Loading…
Cancel
Save