feat(playout): use shared app for cli commands

This commit is contained in:
jo 2023-02-25 20:57:03 +01:00 committed by Kyle Robbertze
parent a71606d39c
commit 78c74f47ca
1 changed files with 37 additions and 14 deletions

View File

@ -18,69 +18,91 @@ from typing import Optional
import click import click
from libretime_api_client.v1 import ApiClient as LegacyClient from libretime_api_client.v1 import ApiClient as LegacyClient
from libretime_shared.cli import cli_logging_options from libretime_shared.cli import cli_config_options, cli_logging_options
from libretime_shared.config import DEFAULT_ENV_PREFIX from libretime_shared.config import DEFAULT_ENV_PREFIX
from libretime_shared.logging import setup_logger from libretime_shared.logging import setup_logger
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
from ..config import Config
def api_client():
return LegacyClient() class App:
config: Config
api_client: LegacyClient
def __init__(self, config: Config) -> None:
self.config = config
self.api_client = LegacyClient()
pass_app = click.make_pass_decorator(App)
@click.group(context_settings={"auto_envvar_prefix": DEFAULT_ENV_PREFIX}) @click.group(context_settings={"auto_envvar_prefix": DEFAULT_ENV_PREFIX})
@cli_logging_options() @cli_logging_options()
def cli(log_level: str, log_filepath: Optional[Path]): @cli_config_options()
@click.pass_context
def cli(
ctx: click.Context,
log_level: str,
log_filepath: Optional[Path],
config_filepath: Optional[Path],
):
""" """
A gateway between Liquidsoap and the API. A gateway between Liquidsoap and the API.
""" """
setup_logger(log_level, log_filepath, rotate=False) setup_logger(log_level, log_filepath, rotate=False)
ctx.obj = App(config=Config(config_filepath))
@cli.command() @cli.command()
@click.argument("media_id") @click.argument("media_id")
def media(media_id): @pass_app
def media(app: App, media_id):
""" """
Notify currently playing media. Notify currently playing media.
Replaces: notify --media-id=#{m['schedule_table_id']} Replaces: notify --media-id=#{m['schedule_table_id']}
""" """
logger.info("Sending currently playing media id '%s'", media_id) logger.info("Sending currently playing media id '%s'", media_id)
api_client().notify_media_item_start_playing(media_id) app.api_client.notify_media_item_start_playing(media_id)
@cli.command() @cli.command()
@click.argument("media_id") @click.argument("media_id")
@click.argument("data") @click.argument("data")
def webstream(media_id, data): @pass_app
def webstream(app: App, media_id, data):
""" """
Notify currently playing webstream. Notify currently playing webstream.
Replaces: notify --webstream='#{json_str}' --media-id=#{!current_dyn_id} Replaces: notify --webstream='#{json_str}' --media-id=#{!current_dyn_id}
""" """
logger.info("Sending currently playing webstream '%s' data '%s'", media_id, data) logger.info("Sending currently playing webstream '%s' data '%s'", media_id, data)
api_client().notify_webstream_data(data, media_id) app.api_client.notify_webstream_data(data, media_id)
@cli.command() @cli.command()
@click.argument("name") @click.argument("name")
@click.argument("status") @click.argument("status")
def live(name, status): @pass_app
def live(app: App, name, status):
""" """
Notify currently playing live input. Notify currently playing live input.
Replaces: notify --source-name=#{sourcename} --source-status=#{status} Replaces: notify --source-name=#{sourcename} --source-status=#{status}
""" """
logger.info("Sending currently playing live source '%s' status '%s'", name, status) logger.info("Sending currently playing live source '%s' status '%s'", name, status)
api_client().notify_source_status(name, status) app.api_client.notify_source_status(name, status)
@cli.command() @cli.command()
@click.argument("stream_id") @click.argument("stream_id")
@click.argument("time") @click.argument("time")
@click.option("--error", help="Error message if any occurred.") @click.option("--error", help="Error message if any occurred.")
def stream(stream_id, time, error): @pass_app
def stream(app: App, stream_id, time, error):
""" """
Notify about output stream status. Notify about output stream status.
@ -92,15 +114,16 @@ def stream(stream_id, time, error):
status = error status = error
logger.info("Sending output stream '%s' status '%s'", stream_id, status) logger.info("Sending output stream '%s' status '%s'", stream_id, status)
api_client().notify_liquidsoap_status(status, stream_id, time) app.api_client.notify_liquidsoap_status(status, stream_id, time)
@cli.command() @cli.command()
def started(): @pass_app
def started(app: App):
""" """
Notify liquidsoap startup status. Notify liquidsoap startup status.
Replaces: notify --liquidsoap-started Replaces: notify --liquidsoap-started
""" """
logger.debug("Notifying server that Liquidsoap has started") logger.debug("Notifying server that Liquidsoap has started")
api_client().notify_liquidsoap_started() app.api_client.notify_liquidsoap_started()