2023-06-21 17:37:34 +00:00
|
|
|
import time
|
|
|
|
import uuid
|
|
|
|
import json
|
2023-06-22 09:30:51 +00:00
|
|
|
from loguru import logger
|
2023-06-21 17:37:34 +00:00
|
|
|
from datetime import datetime, timedelta
|
|
|
|
from sqlalchemy import func, or_, and_, not_, Boolean
|
|
|
|
from sqlalchemy.orm import noload
|
|
|
|
from overseer.flask import db, SQLITE_MODE
|
2023-06-22 00:32:08 +00:00
|
|
|
from overseer.utils import hash_api_key
|
2023-06-22 09:30:51 +00:00
|
|
|
from sqlalchemy.orm import joinedload
|
|
|
|
from overseer.classes.instance import Instance, Endorsement
|
2023-06-21 17:37:34 +00:00
|
|
|
|
2023-06-22 09:30:51 +00:00
|
|
|
def get_all_instances(min_endorsements = 0, min_guarantors = 1):
|
|
|
|
query = db.session.query(
|
|
|
|
Instance
|
|
|
|
).outerjoin(
|
|
|
|
Instance.endorsements,
|
|
|
|
Instance.guarantors,
|
|
|
|
).options(
|
|
|
|
joinedload(Instance.guarantors),
|
|
|
|
joinedload(Instance.endorsements),
|
|
|
|
).group_by(
|
|
|
|
Instance.id
|
|
|
|
).having(
|
|
|
|
db.func.count(Instance.endorsements) >= min_endorsements,
|
|
|
|
).having(
|
|
|
|
db.func.count(Instance.guarantors) >= min_guarantors,
|
|
|
|
)
|
|
|
|
return query.all()
|
2023-06-21 17:37:34 +00:00
|
|
|
|
2023-06-22 09:30:51 +00:00
|
|
|
|
|
|
|
def get_all_endorsed_instances_by_approving_id(approving_id):
|
|
|
|
query = db.session.query(
|
|
|
|
Instance
|
|
|
|
).outerjoin(
|
|
|
|
Instance.endorsements,
|
|
|
|
).options(
|
|
|
|
joinedload(Instance.endorsements),
|
|
|
|
).filter(
|
|
|
|
Endorsement.approving_id == approving_id
|
|
|
|
).group_by(
|
|
|
|
Instance.id
|
|
|
|
)
|
|
|
|
return query.all()
|
|
|
|
|
|
|
|
def get_all_approving_instances_by_endorsed_id(endorsed_id):
|
|
|
|
query = db.session.query(
|
|
|
|
Instance
|
|
|
|
).outerjoin(
|
|
|
|
Instance.approvals,
|
|
|
|
).options(
|
|
|
|
joinedload(Instance.approvals),
|
|
|
|
).filter(
|
|
|
|
Endorsement.endorsed_id == endorsed_id
|
|
|
|
).group_by(
|
|
|
|
Instance.id
|
|
|
|
)
|
|
|
|
return query.all()
|
2023-06-22 00:32:08 +00:00
|
|
|
|
|
|
|
|
|
|
|
def find_instance_by_api_key(api_key):
|
|
|
|
instance = Instance.query.filter_by(api_key=hash_api_key(api_key)).first()
|
|
|
|
return instance
|
|
|
|
|
|
|
|
def find_instance_by_domain(domain):
|
|
|
|
instance = Instance.query.filter_by(domain=domain).first()
|
|
|
|
return instance
|
|
|
|
|
|
|
|
def find_authenticated_instance(domain,api_key):
|
|
|
|
instance = Instance.query.filter_by(domain=domain, api_key=hash_api_key(api_key)).first()
|
2023-06-22 09:30:51 +00:00
|
|
|
return instance
|
|
|
|
|
|
|
|
def get_endorsement(instance_id, endorsing_instance_id):
|
|
|
|
query = Endorsement.query.filter_by(
|
|
|
|
endorsed_id=instance_id,
|
|
|
|
approving_id=endorsing_instance_id,
|
|
|
|
)
|
|
|
|
return query.first()
|