dependencies.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. """API 依赖注入 —— SearchAgent、PaperSearcher 等单例的获取与缓存."""
  2. from __future__ import annotations
  3. import os
  4. import threading
  5. from app.core.search import PaperSearcher
  6. from app.core.storage import PaperDatabase
  7. from ..settings import get_settings
  8. _singleton_lock = threading.Lock()
  9. _searcher: PaperSearcher | None = None
  10. _database: PaperDatabase | None = None
  11. def get_searcher() -> PaperSearcher:
  12. global _searcher
  13. if _searcher is not None:
  14. return _searcher
  15. with _singleton_lock:
  16. if _searcher is not None:
  17. return _searcher
  18. s = get_settings()
  19. _searcher = PaperSearcher(
  20. email=(s.openalex_mailto or s.ncbi_email) or None,
  21. api_key=s.ncbi_api_key or None,
  22. download_dir=s.downloads_dir,
  23. httpx_trust_env=s.papergraph_httpx_trust_env,
  24. )
  25. return _searcher
  26. def get_database() -> PaperDatabase:
  27. global _database
  28. if _database is not None:
  29. return _database
  30. with _singleton_lock:
  31. if _database is not None:
  32. return _database
  33. s = get_settings()
  34. db_path = os.path.join(s.data_dir, "papers.db")
  35. _database = PaperDatabase(db_path)
  36. return _database
  37. def get_db_path() -> str:
  38. return get_database().db_path