mirror of https://github.com/LedFx/LedFx.git
78 lines
2.0 KiB
Python
78 lines
2.0 KiB
Python
import logging
|
|
import os
|
|
import sys
|
|
|
|
import aiohttp_jinja2
|
|
import jinja2
|
|
from aiohttp import web
|
|
|
|
import ledfx_frontend
|
|
from ledfx.api import RestApi
|
|
|
|
try:
|
|
base_path = sys._MEIPASS
|
|
except BaseException:
|
|
base_path = os.path.abspath(".")
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
|
|
class HttpServer(object):
|
|
def __init__(self, ledfx, host, port):
|
|
"""Initialize the HTTP server"""
|
|
|
|
self.app = web.Application()
|
|
self.api = RestApi(ledfx)
|
|
templates_path = os.path.abspath(
|
|
os.path.dirname(ledfx_frontend.__file__)
|
|
)
|
|
aiohttp_jinja2.setup(
|
|
self.app, loader=jinja2.FileSystemLoader(templates_path)
|
|
)
|
|
self.register_routes()
|
|
|
|
self._ledfx = ledfx
|
|
self.host = host
|
|
self.port = port
|
|
|
|
@aiohttp_jinja2.template("index.html")
|
|
async def index(self, request):
|
|
return {}
|
|
|
|
def register_routes(self):
|
|
self.api.register_routes(self.app)
|
|
self.app.router.add_static(
|
|
"/static",
|
|
path=ledfx_frontend.where() + "/static",
|
|
name="static",
|
|
)
|
|
|
|
self.app.router.add_route("get", "/", self.index)
|
|
self.app.router.add_route("get", "/{extra:.+}", self.index)
|
|
|
|
async def start(self):
|
|
self.handler = self.app.make_handler(loop=self._ledfx.loop)
|
|
|
|
try:
|
|
self.server = await self._ledfx.loop.create_server(
|
|
self.handler, self.host, self.port
|
|
)
|
|
except OSError as error:
|
|
_LOGGER.error(
|
|
"Failed to create HTTP server at port %d: %s",
|
|
self.port,
|
|
error,
|
|
)
|
|
|
|
self.base_url = ("http://{}:{}").format(self.host, self.port)
|
|
print(("Started webinterface at {}").format(self.base_url))
|
|
|
|
async def stop(self):
|
|
if self.server:
|
|
self.server.close()
|
|
await self.server.wait_closed()
|
|
await self.app.shutdown()
|
|
if self.handler:
|
|
await self.handler.shutdown(10)
|
|
await self.app.cleanup()
|