From 320591277f5e2773bfc1780220724b4409d1544d Mon Sep 17 00:00:00 2001 From: Eli Ribble Date: Fri, 12 May 2023 15:09:15 -0700 Subject: [PATCH] Add sketch of relays, jinja templating. --- pnpdevice/main.py | 8 ++++++-- pnpdevice/relays.py | 9 +++++++++ pnpdevice/server.py | 20 ++++++++++++++++---- pyproject.toml | 1 + templates/index.template.html | 3 +++ 5 files changed, 35 insertions(+), 6 deletions(-) create mode 100644 pnpdevice/relays.py create mode 100644 templates/index.template.html diff --git a/pnpdevice/main.py b/pnpdevice/main.py index ecc00d3..872da9e 100644 --- a/pnpdevice/main.py +++ b/pnpdevice/main.py @@ -2,7 +2,6 @@ import argparse import asyncio import logging -import pnpdevice.discovery import pnpdevice.server LOGGER = logging.getLogger(__name__) @@ -10,8 +9,13 @@ LOGGER = logging.getLogger(__name__) def main(): parser = argparse.ArgumentParser() parser.add_argument("-v", "--verbose", action="store_true", help="Enable verbose logging") + parser.add_argument("-s", "--simulate", action="store_true", help="When present, simulate the state of the relays") args = parser.parse_args() logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO) - pnpdevice.server.run() + if args.simulate: + relays = pnpdevice.relays.RelaysFake() + else: + relays = pnpdevice.relays.RelaysReal() + pnpdevice.server.run(relays) diff --git a/pnpdevice/relays.py b/pnpdevice/relays.py new file mode 100644 index 0000000..3d69d46 --- /dev/null +++ b/pnpdevice/relays.py @@ -0,0 +1,9 @@ + +class Relays: + "Class for interacting with relays." + +class RelaysFake(Relays): + "Class for fake relays, useful for testing." + +class RelaysReal(Relays): + "Class for controlling real relays." diff --git a/pnpdevice/server.py b/pnpdevice/server.py index b4c42b9..13abca3 100644 --- a/pnpdevice/server.py +++ b/pnpdevice/server.py @@ -1,14 +1,26 @@ from aiohttp import web +import aiohttp_jinja2 +import jinja2 import pnpdevice.discovery +import pnpdevice.relays -async def hello(request): - return web.Response(text="Hello, world") +def html(text: str) -> web.Response: + return web.Response(content_type="text/html", text=f"{text}") -def run(): +@aiohttp_jinja2.template("index.template.html") +async def index(request): + return {} + +async def status(request): + return html("Status") + +def run(relays: pnpdevice.relays.Relays): "Run the embedded web server" app = web.Application() + aiohttp_jinja2.setup(app, + loader=jinja2.FileSystemLoader("templates")) app.on_startup.append(pnpdevice.discovery.handle) - app.add_routes([web.get("/", hello)]) + app.add_routes([web.get("/", index)]) web.run_app(app) diff --git a/pyproject.toml b/pyproject.toml index 31a23db..b913c3a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,6 +5,7 @@ authors = [ ] dependencies = [ "aiohttp", + "aiohttp_jinja2", "zeroconf", ] dynamic = ["version", "description"] diff --git a/templates/index.template.html b/templates/index.template.html new file mode 100644 index 0000000..2bf74db --- /dev/null +++ b/templates/index.template.html @@ -0,0 +1,3 @@ + +

Pools'n'Pumps Device

+