Source code for betty.app.config
"""
Provide application configuration.
"""
from __future__ import annotations
from typing import final, TYPE_CHECKING
from typing_extensions import override
from betty import fs
from betty.assertion import (
assert_record,
OptionalField,
assert_str,
assert_setattr,
assert_locale,
)
from betty.config import Configuration
if TYPE_CHECKING:
from betty.serde.dump import Dump, DumpMapping
CONFIGURATION_FILE_PATH = fs.HOME_DIRECTORY_PATH / "app.json"
[docs]
@final
class AppConfiguration(Configuration):
"""
Provide configuration for :py:class:`betty.app.App`.
"""
[docs]
def __init__(
self,
*,
locale: str | None = None,
):
super().__init__()
self._locale: str | None = locale
@property
def locale(self) -> str | None:
"""
The application locale.
"""
return self._locale
@locale.setter
def locale(self, locale: str) -> None:
self._locale = assert_locale()(locale)
[docs]
@override
def load(self, dump: Dump) -> None:
assert_record(
OptionalField("locale", assert_str() | assert_setattr(self, "locale"))
)(dump)
[docs]
@override
def dump(self) -> DumpMapping[Dump]:
return {"locale": self.locale}