Update backend models, controllers, and session

This commit is contained in:
2026-01-16 22:31:24 +13:00
parent d41faddfca
commit 9c43a0a22b
16 changed files with 916 additions and 64 deletions

View File

@@ -4,19 +4,21 @@ import gc
import machine
from microdot import Microdot, send_file
from microdot.websocket import with_websocket
from microdot.session import Session
import aioespnow
import network
from controllers.preset import preset
import controllers.preset as preset
import controllers.profile as profile
import controllers.group as group
import controllers.sequence as sequence
import controllers.tab as tab
import controllers.palette as palette
import controllers.scene as scene
import controllers.pattern as pattern
async def main():
async def main(port=80):
settings = Settings()
print("Starting")
@@ -29,13 +31,37 @@ async def main():
app = Microdot()
# Initialize sessions with a secret key from settings
secret_key = settings.get('session_secret_key', 'led-controller-secret-key-change-in-production')
Session(app, secret_key=secret_key)
# Mount model controllers as subroutes
app.mount('/presets', preset.controller)
app.mount('/profiles', profile.controller)
app.mount('/groups', group.controller)
app.mount('/sequences', sequence.controller)
app.mount('/tabs', tab.controller)
app.mount('/palettes', palette.controller)
# Verify controllers are Microdot instances before mounting
controllers_to_mount = [
('/presets', preset, 'preset'),
('/profiles', profile, 'profile'),
('/groups', group, 'group'),
('/sequences', sequence, 'sequence'),
('/tabs', tab, 'tab'),
('/palettes', palette, 'palette'),
('/scenes', scene, 'scene'),
]
# Mount model controllers as subroutes
app.mount(preset.controller, '/presets')
app.mount(profile.controller, '/profiles')
app.mount(group.controller, '/groups')
app.mount(sequence.controller, '/sequences')
app.mount(tab.controller, '/tabs')
app.mount(palette.controller, '/palettes')
app.mount(scene.controller, '/scenes')
app.mount(pattern.controller, '/patterns')
# Serve index.html at root
@app.route('/')
def index(request):
"""Serve the main web UI."""
return send_file('templates/index.html')
# Static file route
@app.route("/static/<path:path>")
@@ -59,7 +85,7 @@ async def main():
server = asyncio.create_task(app.start_server(host="0.0.0.0", port=80))
server = asyncio.create_task(app.start_server(host="0.0.0.0", port=port))
wdt = machine.WDT(timeout=10000)
wdt.feed()
@@ -71,4 +97,5 @@ async def main():
await asyncio.sleep_ms(500)
# cleanup before ending the application
asyncio.run(main())
if __name__ == "__main__":
asyncio.run(main())