56 lines
1.2 KiB
Python
56 lines
1.2 KiB
Python
"""Matrix Webhook app."""
|
|
|
|
import asyncio
|
|
import logging
|
|
from signal import SIGINT, SIGTERM
|
|
|
|
from aiohttp import web
|
|
|
|
from . import conf, handler, utils
|
|
|
|
LOGGER = logging.getLogger("matrix_webhook.app")
|
|
|
|
|
|
async def main(event):
|
|
"""
|
|
Launch main coroutine.
|
|
|
|
matrix client login & start web server
|
|
"""
|
|
LOGGER.info(f"Log in {conf.MATRIX_ID=} on {conf.MATRIX_URL=}")
|
|
await utils.CLIENT.login(conf.MATRIX_PW)
|
|
|
|
server = web.Server(handler.matrix_webhook)
|
|
runner = web.ServerRunner(server)
|
|
await runner.setup()
|
|
LOGGER.info(f"Binding on {conf.SERVER_ADDRESS=}")
|
|
site = web.TCPSite(runner, *conf.SERVER_ADDRESS)
|
|
await site.start()
|
|
|
|
# Run until we get a shutdown request
|
|
await event.wait()
|
|
|
|
# Cleanup
|
|
await runner.cleanup()
|
|
await utils.CLIENT.close()
|
|
|
|
|
|
def terminate(event, signal):
|
|
"""Close handling stuff."""
|
|
event.set()
|
|
asyncio.get_event_loop().remove_signal_handler(signal)
|
|
|
|
|
|
def run():
|
|
"""Launch everything."""
|
|
LOGGER.info("Starting...")
|
|
loop = asyncio.get_event_loop()
|
|
event = asyncio.Event()
|
|
|
|
for sig in (SIGINT, SIGTERM):
|
|
loop.add_signal_handler(sig, terminate, event, sig)
|
|
|
|
loop.run_until_complete(main(event))
|
|
|
|
LOGGER.info("Closing...")
|
|
loop.close()
|