Skip to content

Commit 95cf471

Browse files
committed
Add foreground CLI main to rest_server so docker entrypoint actually blocks
1 parent 70812b1 commit 95cf471

1 file changed

Lines changed: 44 additions & 0 deletions

File tree

je_auto_control/utils/rest_api/rest_server.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,3 +396,47 @@ def start_rest_api_server(host: str = "127.0.0.1", port: int = 9939,
396396

397397

398398
__all__ = ["RestApiServer", "start_rest_api_server"]
399+
400+
401+
def _main(argv: Optional[list] = None) -> int:
402+
"""Foreground entrypoint used by ``python -m je_auto_control.utils.rest_api.rest_server``.
403+
404+
Starts a :class:`RestApiServer` and blocks the main thread until
405+
SIGINT/SIGTERM. Token comes from ``AC_TOKEN`` if not given on the
406+
CLI so the container ENTRYPOINT can pass it via ``-e AC_TOKEN=…``.
407+
"""
408+
import argparse
409+
import os
410+
import signal
411+
import time
412+
413+
parser = argparse.ArgumentParser(prog="rest_server")
414+
parser.add_argument("--host", default="127.0.0.1")
415+
parser.add_argument("--port", type=int, default=9939)
416+
parser.add_argument("--token", default=os.environ.get("AC_TOKEN"))
417+
parser.add_argument("--no-audit", action="store_true")
418+
args = parser.parse_args(argv)
419+
420+
server = start_rest_api_server(
421+
host=args.host, port=args.port,
422+
token=args.token, enable_audit=not args.no_audit,
423+
)
424+
425+
stop_event = threading.Event()
426+
427+
def _handle_signal(_signum, _frame):
428+
stop_event.set()
429+
430+
signal.signal(signal.SIGINT, _handle_signal)
431+
signal.signal(signal.SIGTERM, _handle_signal)
432+
433+
try:
434+
while not stop_event.is_set():
435+
time.sleep(0.5)
436+
finally:
437+
server.stop()
438+
return 0
439+
440+
441+
if __name__ == "__main__":
442+
raise SystemExit(_main())

0 commit comments

Comments
 (0)