From 229c91238bbd3b5a221bb092c3d32e4932bdbf9e Mon Sep 17 00:00:00 2001 From: Iain Learmonth Date: Fri, 6 May 2022 12:28:11 +0100 Subject: [PATCH] bridge: convert bridges to resources --- app/cli/db.py | 5 +++-- app/lists/bridgelines.py | 19 +++++++++++-------- app/models/bridges.py | 21 ++++++++++++++------- 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/app/cli/db.py b/app/cli/db.py index cd45361..18e8779 100644 --- a/app/cli/db.py +++ b/app/cli/db.py @@ -7,12 +7,13 @@ import sys from app import app from app.extensions import db from app.models.base import Group, MirrorList -from app.models.bridges import BridgeConf +from app.models.bridges import Bridge, BridgeConf from app.models.mirrors import Mirror, Origin, Proxy from app.models.alarms import Alarm, AlarmState models = { - "bridge": BridgeConf, + "bridge": Bridge, + "bridgeconf": BridgeConf, "alarm": Alarm, "group": Group, "list": MirrorList, diff --git a/app/lists/bridgelines.py b/app/lists/bridgelines.py index 8ed148b..ba22726 100644 --- a/app/lists/bridgelines.py +++ b/app/lists/bridgelines.py @@ -1,5 +1,5 @@ import builtins -from typing import List +from typing import List, Iterable from pydantic import BaseModel, Field @@ -26,15 +26,18 @@ class Bridgelines(BaseModel): title = "Bridgelines Version 1" -def bridgelines(): +def bridgelines(*, distribution_method: str = None): + bridges: Iterable[Bridge] = Bridge.query.filter( + Bridge.destroyed == None, + Bridge.deprecated == None, + Bridge.bridgeline != None + ).all() + if distribution_method is not None: + bridges = [b for b in bridges + if b.conf.distribution_method == distribution_method] return Bridgelines( version="1.0", - bridgelines=[ - b.bridgeline for b in Bridge.query.filter( - Bridge.destroyed == None, - Bridge.bridgeline != None - ) - ] + bridgelines=[b.bridgeline for b in bridges] ).dict() diff --git a/app/models/bridges.py b/app/models/bridges.py index aff7f24..6dfde32 100644 --- a/app/models/bridges.py +++ b/app/models/bridges.py @@ -1,19 +1,15 @@ from datetime import datetime from app import db -from app.models import AbstractResource +from app.models import AbstractConfiguration, AbstractResource -class BridgeConf(db.Model): - id = db.Column(db.Integer, primary_key=True) +class BridgeConf(AbstractConfiguration): group_id = db.Column(db.Integer, db.ForeignKey("group.id"), nullable=False) provider = db.Column(db.String(20), nullable=False) method = db.Column(db.String(20), nullable=False) description = db.Column(db.String(255)) number = db.Column(db.Integer()) - added = db.Column(db.DateTime(), default=datetime.utcnow, nullable=False) - updated = db.Column(db.DateTime(), default=datetime.utcnow, nullable=False) - destroyed = db.Column(db.DateTime(), nullable=True) group = db.relationship("Group", back_populates="bridgeconfs") bridges = db.relationship("Bridge", back_populates="conf") @@ -25,7 +21,12 @@ class BridgeConf(db.Model): if bridge.destroyed is None: bridge.destroyed = datetime.utcnow() bridge.updated = datetime.utcnow() - db.session.commit() + + @classmethod + def csv_header(cls): + return super().csv_header() + [ + "group_id", "provider", "method", "description", "number" + ] class Bridge(AbstractResource): @@ -38,3 +39,9 @@ class Bridge(AbstractResource): conf = db.relationship("BridgeConf", back_populates="bridges") alarms = db.relationship("Alarm", back_populates="bridge") + + @classmethod + def csv_header(cls): + return super().csv_header() + [ + "conf_id", "terraform_updated", "nickname", "fingerprint", "hashed_fingerprint", "bridgeline" + ]