File size: 2,031 Bytes
1ce499f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from sqlalchemy.orm import Session
from sqlalchemy import select, desc, or_
from app.models import SpaceObject, PairScore, PairScoreHistory, ScoringRun
def upsert_space_object(db:Session,payload):
    obj=db.get(SpaceObject,payload["object_id"])
    if obj:
        for k,v in payload.items(): setattr(obj,k,v)
        db.add(obj)
    else: db.add(SpaceObject(**payload))
def list_objects(db:Session,limit=100): return db.scalars(select(SpaceObject).limit(limit)).all()
def get_object(db:Session,object_id): return db.get(SpaceObject,object_id)
def save_pair_score(db:Session,payload):
    row=db.get(PairScore,payload["pair_id"])
    if row:
        for k,v in payload.items(): setattr(row,k,v)
        db.add(row)
    else: db.add(PairScore(**payload))
def insert_pair_history(db:Session,payload): db.add(PairScoreHistory(**payload))
def list_high_risk_pairs(db:Session,limit=50): return db.scalars(select(PairScore).order_by(desc(PairScore.final_score)).limit(limit)).all()
def get_pair(db:Session,pair_id): return db.get(PairScore,pair_id)
def get_pair_history(db:Session,pair_id,limit=20): return db.scalars(select(PairScoreHistory).where(PairScoreHistory.pair_id==pair_id).order_by(desc(PairScoreHistory.created_at)).limit(limit)).all()
def create_run(db:Session,payload): db.add(ScoringRun(**payload))
def latest_runs(db:Session,limit=10): return db.scalars(select(ScoringRun).order_by(desc(ScoringRun.created_at)).limit(limit)).all()
def get_run(db:Session,run_id): return db.get(ScoringRun,run_id)
def object_pairs(db:Session,object_id:str,limit=25):
    stmt=select(PairScore).where(or_(PairScore.primary_object_id==object_id, PairScore.secondary_object_id==object_id)).order_by(desc(PairScore.final_score)).limit(limit)
    return db.scalars(stmt).all()
def pairs_in_same_shell(db:Session,shell_key:str,exclude_pair_id:str,limit=20):
    stmt=select(PairScore).where(PairScore.shell_key==shell_key, PairScore.pair_id!=exclude_pair_id).order_by(desc(PairScore.final_score)).limit(limit)
    return db.scalars(stmt).all()