mirror of
https://github.com/lnbits/lnbits-legend.git
synced 2024-11-19 09:54:21 +01:00
7a37e72915
* replace async_wrap with run_sync formatting remove unused fn properly raise exception, not for timeout though * [TEST] proper startup and shutdown (#1860) * add proper startup / shutdown in tests * fix event loop issues because uvloop was installed in server.py which is not the main entry point when tests are ran. this caused the loops referenced by the locks and queues to be a different one than the one used to run the tests (only an issue in python 3.9) * give openapi more time, does not matter anyway, regtest takes way longer --------- Co-authored-by: jacksn <jkranawetter05@gmail.com> remove uvloop * fix test * dont touch pyproject * fix: install uvloop in conftest not using uvloop at all causes tests to take way longer --------- Co-authored-by: jacksn <jkranawetter05@gmail.com>
97 lines
2.7 KiB
Python
97 lines
2.7 KiB
Python
import multiprocessing as mp
|
|
import time
|
|
from pathlib import Path
|
|
|
|
import click
|
|
import uvicorn
|
|
from uvicorn.supervisors import ChangeReload
|
|
|
|
from lnbits.settings import set_cli_settings, settings
|
|
|
|
|
|
@click.command(
|
|
context_settings=dict(
|
|
ignore_unknown_options=True,
|
|
allow_extra_args=True,
|
|
)
|
|
)
|
|
@click.option("--port", default=settings.port, help="Port to listen on")
|
|
@click.option("--host", default=settings.host, help="Host to run LNBits on")
|
|
@click.option(
|
|
"--forwarded-allow-ips",
|
|
default=settings.forwarded_allow_ips,
|
|
help="Allowed proxy servers",
|
|
)
|
|
@click.option("--ssl-keyfile", default=None, help="Path to SSL keyfile")
|
|
@click.option("--ssl-certfile", default=None, help="Path to SSL certificate")
|
|
@click.pass_context
|
|
def main(
|
|
ctx,
|
|
port: int,
|
|
host: str,
|
|
forwarded_allow_ips: str,
|
|
ssl_keyfile: str,
|
|
ssl_certfile: str,
|
|
):
|
|
"""Launched with `poetry run lnbits` at root level"""
|
|
|
|
# create data dir if it does not exist
|
|
Path(settings.lnbits_data_folder).mkdir(parents=True, exist_ok=True)
|
|
|
|
# create extension dir if it does not exist
|
|
Path(settings.lnbits_path, "extensions").mkdir(parents=True, exist_ok=True)
|
|
|
|
set_cli_settings(host=host, port=port, forwarded_allow_ips=forwarded_allow_ips)
|
|
|
|
# this beautiful beast parses all command line arguments and
|
|
# passes them to the uvicorn server
|
|
d = dict()
|
|
for a in ctx.args:
|
|
item = a.split("=")
|
|
if len(item) > 1: # argument like --key=value
|
|
print(a, item)
|
|
d[item[0].strip("--").replace("-", "_")] = (
|
|
int(item[1]) # need to convert to int if it's a number
|
|
if item[1].isdigit()
|
|
else item[1]
|
|
)
|
|
else:
|
|
d[a.strip("--")] = True # argument like --key
|
|
|
|
while True:
|
|
config = uvicorn.Config(
|
|
"lnbits.__main__:app",
|
|
loop="uvloop",
|
|
port=port,
|
|
host=host,
|
|
forwarded_allow_ips=forwarded_allow_ips,
|
|
ssl_keyfile=ssl_keyfile,
|
|
ssl_certfile=ssl_certfile,
|
|
**d
|
|
)
|
|
|
|
server = uvicorn.Server(config=config)
|
|
|
|
if config.should_reload:
|
|
sock = config.bind_socket()
|
|
run = ChangeReload(config, target=server.run, sockets=[sock]).run
|
|
else:
|
|
run = server.run
|
|
|
|
process = mp.Process(target=run)
|
|
process.start()
|
|
server_restart.wait()
|
|
server_restart.clear()
|
|
server.should_exit = True
|
|
server.force_exit = True
|
|
time.sleep(3)
|
|
process.terminate()
|
|
process.join()
|
|
time.sleep(1)
|
|
|
|
|
|
server_restart = mp.Event()
|
|
|
|
if __name__ == "__main__":
|
|
main()
|