evaluation.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. from __future__ import annotations
  2. from sqlalchemy import select
  3. from sqlalchemy.orm import Session
  4. from app.db.models.evaluation import (
  5. EvaluationIndicator,
  6. EvaluationRun,
  7. EvaluationScore,
  8. )
  9. from app.db.repositories.base import create_model
  10. def list_indicators(
  11. db: Session,
  12. *,
  13. mine_id: str | None = None,
  14. ) -> list[EvaluationIndicator]:
  15. statement = select(EvaluationIndicator).where(EvaluationIndicator.enabled.is_(True))
  16. if mine_id:
  17. statement = statement.where(
  18. (EvaluationIndicator.mine_id == mine_id)
  19. | (EvaluationIndicator.mine_id.is_(None))
  20. )
  21. return list(
  22. db.scalars(
  23. statement.order_by(
  24. EvaluationIndicator.dimension,
  25. EvaluationIndicator.sort_order,
  26. EvaluationIndicator.code,
  27. )
  28. ).all()
  29. )
  30. def list_runs(
  31. db: Session,
  32. mine_id: str,
  33. *,
  34. limit: int = 50,
  35. ) -> list[EvaluationRun]:
  36. return list(
  37. db.scalars(
  38. select(EvaluationRun)
  39. .where(EvaluationRun.mine_id == mine_id)
  40. .order_by(EvaluationRun.created_at.desc())
  41. .limit(limit)
  42. ).all()
  43. )
  44. def get_run(db: Session, run_id: str) -> EvaluationRun | None:
  45. return db.get(EvaluationRun, run_id)
  46. def list_scores(db: Session, run_id: str) -> list[EvaluationScore]:
  47. return list(
  48. db.scalars(
  49. select(EvaluationScore)
  50. .where(EvaluationScore.run_id == run_id)
  51. .order_by(EvaluationScore.weighted_score.desc())
  52. ).all()
  53. )
  54. def create_run(db: Session, data: dict) -> EvaluationRun:
  55. return create_model(db, EvaluationRun, data)
  56. def update_run(db: Session, run: EvaluationRun, data: dict) -> EvaluationRun:
  57. for key, value in data.items():
  58. setattr(run, key, value)
  59. db.add(run)
  60. db.commit()
  61. db.refresh(run)
  62. return run
  63. def create_score(db: Session, data: dict) -> EvaluationScore:
  64. return create_model(db, EvaluationScore, data)