Add sketch of relays, jinja templating.

This commit is contained in:
Eli Ribble 2023-05-12 15:09:15 -07:00
parent 0d1020a3d5
commit 320591277f
5 changed files with 35 additions and 6 deletions

View File

@ -2,7 +2,6 @@ import argparse
import asyncio import asyncio
import logging import logging
import pnpdevice.discovery
import pnpdevice.server import pnpdevice.server
LOGGER = logging.getLogger(__name__) LOGGER = logging.getLogger(__name__)
@ -10,8 +9,13 @@ LOGGER = logging.getLogger(__name__)
def main(): def main():
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbose", action="store_true", help="Enable verbose logging") 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() args = parser.parse_args()
logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO) 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)

9
pnpdevice/relays.py Normal file
View File

@ -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."

View File

@ -1,14 +1,26 @@
from aiohttp import web from aiohttp import web
import aiohttp_jinja2
import jinja2
import pnpdevice.discovery import pnpdevice.discovery
import pnpdevice.relays
async def hello(request): def html(text: str) -> web.Response:
return web.Response(text="Hello, world") return web.Response(content_type="text/html", text=f"<html>{text}</html>")
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" "Run the embedded web server"
app = web.Application() app = web.Application()
aiohttp_jinja2.setup(app,
loader=jinja2.FileSystemLoader("templates"))
app.on_startup.append(pnpdevice.discovery.handle) app.on_startup.append(pnpdevice.discovery.handle)
app.add_routes([web.get("/", hello)]) app.add_routes([web.get("/", index)])
web.run_app(app) web.run_app(app)

View File

@ -5,6 +5,7 @@ authors = [
] ]
dependencies = [ dependencies = [
"aiohttp", "aiohttp",
"aiohttp_jinja2",
"zeroconf", "zeroconf",
] ]
dynamic = ["version", "description"] dynamic = ["version", "description"]

View File

@ -0,0 +1,3 @@
<html>
<h1>Pools'n'Pumps Device</h1>
</html>