# Shared The `libretime_shared` package contains reusable functions and classes for the LibreTime project. ## Usage This library assumes that: - You will use [`Click`](https://github.com/pallets/click) to build a CLI for your app. - You will use [`Loguru`](https://github.com/delgan/loguru) to log messages from your app. - You will use [`Pydantic`](https://github.com/samuelcolvin/pydantic/) to validate objects in your app. ### Configuration First define a schema for your configuration in order to validate it. A schema is a class that inherit from `pydantic.BaseModel`. Some existing schemas can be reused such as `libretime_shared.config.RabbitMQ` or `libretime_shared.config.Database`. Load your configuration using a subclass of `libretime_shared.config.BaseConfig`. ```py from pydantic import BaseModel from libretime_shared.config import RabbitMQConfig, BaseConfig class AnalyzerConfig(BaseModel): bpm_enabled: bool = False bpm_track_max_length: int class Config(BaseConfig): rabbitmq: RabbitMQConfig analyzer: AnalyzerConfig config = Config(filepath="/etc/libretime/config.yml") ``` ### App Create an app class that inherit from `libretime_shared.app.AbstractApp`. ```py from libretime_shared.app import AbstractApp class LiquidsoapApp(AbstractApp): name = "liquidsoap" def __init__(self, some_arg, **kwargs): super().__init__(**kwargs) self.some_arg = some_arg def run(self): ... app = LiquidsoapApp(**kwargs) app.run() ``` ### CLI Decorate your CLI commands with the shared decorators to add extra flags. ```py import click from libretime_shared.cli import cli_logging_options, cli_config_options from .app import App @click.group() def cli(): pass @cli.command() @cli_config_options() @cli_logging_options() def run(**kwargs): app = App(**kwargs) return app.run() ```