2
0

add --config CLI parameter

This commit is contained in:
Stefan Bühler 2023-11-15 09:20:36 +01:00
parent 1acb693e2b
commit ab804354de
3 changed files with 41 additions and 4 deletions

View File

@ -1,5 +1,8 @@
from __future__ import annotations
import argparse
import dataclasses
import hypercorn.config
import hypercorn.trio.run
import hypercorn.utils
@ -19,8 +22,21 @@ def run(config: hypercorn.config.Config) -> None:
sock.close()
@dataclasses.dataclass
class CliArguments:
config: str | None
def __init__(self):
parser = argparse.ArgumentParser()
parser.add_argument('--config', '-c')
args = parser.parse_args()
self.config = args.config
def main() -> None:
_config = capport.config.Config.load_default_once()
args = CliArguments()
_config = capport.config.Config.load_default_once(filename=args.config)
hypercorn_config = hypercorn.config.Config()
hypercorn_config.application_path = 'capport.api.app'

View File

@ -12,6 +12,7 @@ _cached_config: typing.Optional[Config] = None
@dataclasses.dataclass
class Config:
_source_filename: str
controllers: typing.List[str]
server_names: typing.List[str]
comm_secret: str
@ -21,10 +22,14 @@ class Config:
debug: bool
@staticmethod
def load_default_once() -> Config:
def load_default_once(filename: typing.Optional[str] = None) -> Config:
global _cached_config
if not _cached_config:
_cached_config = Config.load()
_cached_config = Config.load(filename)
elif not filename is None and filename != _cached_config._source_filename:
raise RuntimeError(
f"Already loaded different config from {_cached_config._source_filename!r} instead of {filename!r}",
)
return _cached_config
@staticmethod
@ -38,6 +43,7 @@ class Config:
data = yaml.safe_load(f)
controllers = list(map(str, data['controllers']))
return Config(
_source_filename=filename,
controllers=controllers,
server_names=data.get('server-names', []),
comm_secret=str(data.get('comm-secret', None) or data['secret']),

View File

@ -1,5 +1,7 @@
from __future__ import annotations
import argparse
import dataclasses
import typing
import uuid
@ -61,8 +63,21 @@ async def amain(config: capport.config.Config) -> None:
await sn.send('STATUS=Kernel fully synchronized')
@dataclasses.dataclass
class CliArguments:
config: str | None
def __init__(self):
parser = argparse.ArgumentParser()
parser.add_argument('--config', '-c')
args = parser.parse_args()
self.config = args.config
def main() -> None:
config = capport.config.Config.load_default_once()
args = CliArguments()
config = capport.config.Config.load_default_once(filename=args.config)
capport.utils.cli.init_logger(config)
try:
trio.run(amain, config)