31 lines
980 B
Python
31 lines
980 B
Python
from typing import List, Optional, TypedDict
|
|
|
|
from sqlalchemy.orm import selectinload
|
|
|
|
from app.models.base import Pool
|
|
from app.models.bridges import Bridge
|
|
|
|
|
|
class BridgelinesDict(TypedDict):
|
|
version: str
|
|
bridgelines: List[str]
|
|
|
|
|
|
def bridgelines(
|
|
pool: Pool, *, distribution_method: Optional[str] = None
|
|
) -> BridgelinesDict:
|
|
# Fetch bridges with selectinload for related data
|
|
query = Bridge.query.options(selectinload(Bridge.conf)).filter(
|
|
Bridge.destroyed.is_(None),
|
|
Bridge.deprecated.is_(None),
|
|
Bridge.bridgeline.is_not(None),
|
|
)
|
|
|
|
if distribution_method is not None:
|
|
query = query.filter(Bridge.conf.has(distribution_method=distribution_method))
|
|
|
|
# Collect bridgelines specific to the pool
|
|
bridgelines = [b.bridgeline for b in query.all() if b.conf.pool_id == pool.id]
|
|
|
|
# Return dictionary directly, inlining the previous `to_dict` functionality
|
|
return {"version": "1.0", "bridgelines": bridgelines}
|