import logging from pathlib import Path from typing import List import arklog import sys from signal import SIGINT, SIGTERM, signal import dacite import toml from graph_exploring_tool import __version__ from graph_exploring_tool.configuration import Configuration from graph_exploring_tool.graphical.interface import interface from graph_exploring_tool.query import QueryTemplate def handler(signal_code, _) -> None: """Signal handler.""" logging.debug(f"Shutting down because signal {signal_code} was received.") sys.exit(5) def load_palette(palette_directory: Path) -> List: """""" for query_path in palette_directory.rglob("*.toml"): logging.debug(f"Loading palette query '{query_path}'.") query_configuration = toml.loads(query_path.read_text(encoding="utf-8")) yield dacite.from_dict(data_class=QueryTemplate, data=query_configuration) def launch(): """""" signal(SIGINT, handler) signal(SIGTERM, handler) arklog.set_config_logging() logging.info(f"Graph Exploring Tool {__version__}.") data_dir = Path(__file__).resolve().parent.parent / Path("data") logging.debug(f"Looking for configuration in '{data_dir}'.") try: configuration = toml.loads((data_dir / Path("configuration.toml")).read_text(encoding="utf-8")) configuration = dacite.from_dict(data_class=Configuration, data=configuration, ) except FileNotFoundError as e: logging.error(f"Configuration not found. {e}") return 8 logging.debug("Configuration:") logging.debug(f" -> {configuration.example_prefix=}") logging.debug(f" -> {configuration.example_query=}") logging.debug(f" -> {configuration.endpoint_sparql=}") logging.debug(f" -> {configuration.prefixes=}") prefix_duplicates = configuration.check_for_duplicate_prefixes() for duplicate in prefix_duplicates: logging.warning(f"Duplicate prefix '{duplicate}'.") palette = load_palette(data_dir / Path("palette")) return interface(configuration=configuration, palette=palette) if __name__ == "__main__": launch()