From 0d1020a3d5a74006bf1f3b8879f61ca286f2eb10 Mon Sep 17 00:00:00 2001 From: Eli Ribble Date: Fri, 12 May 2023 14:47:42 -0700 Subject: [PATCH] Add aiohttp web server. We switch to having the server kick off the mDNS discovery process because aiohttp recommends it and it fits well enough that I don't mind. --- pnpdevice/discovery.py | 4 ++-- pnpdevice/main.py | 14 ++------------ pnpdevice/server.py | 14 ++++++++++++++ pyproject.toml | 3 ++- 4 files changed, 20 insertions(+), 15 deletions(-) create mode 100644 pnpdevice/server.py diff --git a/pnpdevice/discovery.py b/pnpdevice/discovery.py index a17f906..2792724 100644 --- a/pnpdevice/discovery.py +++ b/pnpdevice/discovery.py @@ -23,14 +23,14 @@ def get_ip() -> str: LOGGER.info("IP address seems to be %s", ip) return ip -async def handle(): +async def handle(*args): "Handle requests for discovery" ip = get_ip() info = AsyncServiceInfo( "_http._tcp.local.", "pnpdevice._http._tcp.local.", addresses=[socket.inet_aton("127.0.0.1")], - port=13344, + port=80, server=ip, ) aiozc = AsyncZeroconf(ip_version=IPVersion.V4Only) diff --git a/pnpdevice/main.py b/pnpdevice/main.py index 68df5b0..ecc00d3 100644 --- a/pnpdevice/main.py +++ b/pnpdevice/main.py @@ -3,15 +3,10 @@ import asyncio import logging import pnpdevice.discovery +import pnpdevice.server LOGGER = logging.getLogger(__name__) -async def run(): - asyncio.ensure_future(pnpdevice.discovery.handle()) - while True: - await asyncio.sleep(1) - LOGGER.info("Tick.") - def main(): parser = argparse.ArgumentParser() parser.add_argument("-v", "--verbose", action="store_true", help="Enable verbose logging") @@ -19,9 +14,4 @@ def main(): logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO) - loop = asyncio.get_event_loop() - try: - loop.run_until_complete(run()) - except KeyboardInterrupt: - LOGGER.info("Shutting down") - + pnpdevice.server.run() diff --git a/pnpdevice/server.py b/pnpdevice/server.py new file mode 100644 index 0000000..b4c42b9 --- /dev/null +++ b/pnpdevice/server.py @@ -0,0 +1,14 @@ +from aiohttp import web + +import pnpdevice.discovery + +async def hello(request): + return web.Response(text="Hello, world") + +def run(): + "Run the embedded web server" + app = web.Application() + app.on_startup.append(pnpdevice.discovery.handle) + app.add_routes([web.get("/", hello)]) + web.run_app(app) + diff --git a/pyproject.toml b/pyproject.toml index 79e4d59..31a23db 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,8 @@ authors = [ { name = "Eli Ribble", email = "eli@theribbles.org"} ] dependencies = [ - "zeroconf" + "aiohttp", + "zeroconf", ] dynamic = ["version", "description"]