main.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import logging
  2. from pathlib import Path
  3. from typing import List
  4. import arklog
  5. import sys
  6. from signal import SIGINT, SIGTERM, signal
  7. import dacite
  8. import toml
  9. from graph_exploring_tool import __version__
  10. from graph_exploring_tool.configuration import Configuration
  11. from graph_exploring_tool.graphical.interface import interface
  12. from graph_exploring_tool.query import QueryTemplate
  13. def handler(signal_code, _) -> None:
  14. """Signal handler."""
  15. logging.debug(f"Shutting down because signal {signal_code} was received.")
  16. sys.exit(5)
  17. def load_palette(palette_directory: Path) -> List:
  18. """"""
  19. for query_path in palette_directory.rglob("*.toml"):
  20. logging.debug(f"Loading palette query '{query_path}'.")
  21. query_configuration = toml.loads(query_path.read_text(encoding="utf-8"))
  22. yield dacite.from_dict(data_class=QueryTemplate, data=query_configuration)
  23. def launch():
  24. """"""
  25. signal(SIGINT, handler)
  26. signal(SIGTERM, handler)
  27. arklog.set_config_logging()
  28. logging.info(f"Graph Exploring Tool {__version__}.")
  29. data_dir = Path(__file__).resolve().parent.parent / Path("data")
  30. logging.debug(f"Looking for configuration in '{data_dir}'.")
  31. try:
  32. configuration = toml.loads((data_dir / Path("configuration.toml")).read_text(encoding="utf-8"))
  33. configuration = dacite.from_dict(data_class=Configuration, data=configuration, )
  34. except FileNotFoundError as e:
  35. logging.error(f"Configuration 'configuration.toml' not found. {e}")
  36. return 8
  37. logging.debug("Configuration:")
  38. logging.debug(f" -> {configuration.example_prefix=}")
  39. logging.debug(f" -> {configuration.example_query=}")
  40. logging.debug(f" -> {configuration.endpoint_sparql=}")
  41. logging.debug(f" -> {configuration.prefixes=}")
  42. prefix_duplicates = configuration.check_for_duplicate_prefixes()
  43. for duplicate in prefix_duplicates:
  44. logging.warning(f"Duplicate prefix '{duplicate}'.")
  45. palette = load_palette(data_dir / Path("palette"))
  46. return interface(configuration=configuration, palette=palette)
  47. if __name__ == "__main__":
  48. launch()