Support a TOML configuration file
The new config file currently only configures the same options that were already available through environment variables. However I have ideas for additional features that would be much nicer to support using a structured configuration format like TOML rather than environment variables, so config files exist now! The previous environment variables are still supported and will be used if you don't have a config file. I plan to keep supporting the MPD_HOST and MPD_PORT environment variables forever since they're shared with other MPD clients such as mpc, but I may eventually drop the environment variables specific to mpd-now-playable in a future release.
This commit is contained in:
parent
796e3df87d
commit
dc037a0a4b
12 changed files with 305 additions and 33 deletions
28
src/mpd_now_playable/config/fields.py
Normal file
28
src/mpd_now_playable/config/fields.py
Normal file
|
@ -0,0 +1,28 @@
|
|||
from dataclasses import field
|
||||
from typing import NewType, Optional, TypeVar
|
||||
|
||||
from apischema import schema
|
||||
from apischema.conversions import deserializer
|
||||
from apischema.metadata import none_as_undefined
|
||||
from yarl import URL
|
||||
|
||||
__all__ = ("Host", "Port", "optional")
|
||||
|
||||
T = TypeVar("T")
|
||||
|
||||
Host = NewType("Host", str)
|
||||
schema(format="hostname")(Host)
|
||||
|
||||
Port = NewType("Port", int)
|
||||
schema(min=1, max=65535)(Port)
|
||||
|
||||
schema(format="uri")(URL)
|
||||
|
||||
|
||||
def optional() -> Optional[T]:
|
||||
return field(default=None, metadata=none_as_undefined)
|
||||
|
||||
|
||||
@deserializer
|
||||
def from_yarl(url: str) -> URL:
|
||||
return URL(url)
|
Loading…
Add table
Add a link
Reference in a new issue