Source code for gnomish_army_knife.database
"""
A module implementing a database interface for the package.
"""
# built-in
from contextlib import ExitStack
from pathlib import Path
# third-party
from vcorelib.logging import LoggerMixin
# internal
from gnomish_army_knife.database.combat_log import CombatLogState
from gnomish_army_knife.database.writer import ArenaMatchWriter
[docs]
class ArenaMatchDb(LoggerMixin):
"""A class implementing a top-level program database interface."""
ext = "json"
def __init__(self, stack: ExitStack, root: Path) -> None:
"""Initialize this instance."""
LoggerMixin.__init__(self)
self.root = root
self.logger.info("Loading state from '%s'.", self.root)
# Load file-processing state.
self.logs = stack.enter_context(
CombatLogState.file_cache(self.combat_log_state_path)
)
[docs]
def create_writer(self) -> ArenaMatchWriter:
"""Create an arena-match writer interface."""
return ArenaMatchWriter(self.matchdb_path)
[docs]
def data_path(self, name: str) -> Path:
"""Get the path to a data file."""
return self.root.joinpath(f"{name}.{self.ext}")
@property
def matchdb_path(self) -> Path:
"""The path to the matchdb directory."""
return self.root.joinpath("matchdb")
@property
def combat_log_state_path(self) -> Path:
"""Get the path to the combat-log state data."""
return self.data_path("combat_log_state")