lots of typing fixes

This commit is contained in:
Iain Learmonth 2022-05-16 11:44:03 +01:00
parent 51f580a304
commit 3665c34961
43 changed files with 260 additions and 178 deletions

View file

@ -3,6 +3,7 @@ import csv
import datetime
import logging
import sys
from typing import TYPE_CHECKING, Any
from app import app
from app.extensions import db
@ -11,6 +12,11 @@ from app.models.bridges import Bridge, BridgeConf
from app.models.mirrors import Mirror, Origin, Proxy
from app.models.alarms import Alarm, AlarmState
if TYPE_CHECKING:
_SubparserType = argparse._SubParsersAction[argparse.ArgumentParser]
else:
_SubparserType = Any
models = {
"bridge": Bridge,
"bridgeconf": BridgeConf,
@ -23,14 +29,14 @@ models = {
}
def export(model: db.Model):
def export(model: db.Model) -> None:
out = csv.writer(sys.stdout)
out.writerow(model.csv_header())
for r in model.query.all():
out.writerow(r.csv_row())
def impot(model: db.Model):
def impot(model: db.Model) -> None:
first = True
header = model.csv_header()
try:
@ -46,15 +52,15 @@ def impot(model: db.Model):
if header[i] in ["added", "updated", "destroyed", "deprecated", "last_updated", "terraform_updated"]:
# datetime fields
if line[i] == "":
line[i] = None
line[i] = None # type: ignore
else:
line[i] = datetime.datetime.strptime(line[i], "%Y-%m-%d %H:%M:%S.%f")
line[i] = datetime.datetime.strptime(line[i], "%Y-%m-%d %H:%M:%S.%f") # type: ignore
elif header[i] in ["eotk"]:
# boolean fields
line[i] = line[i] == "True"
line[i] = line[i] == "True" # type: ignore
elif header[i].endswith("_id") and line[i] == "":
# integer foreign keys
line[i] = None
line[i] = None # type: ignore
elif header[i] in ["alarm_state"]:
# alarm states
line[i] = getattr(AlarmState, line[i][len("AlarmState."):])
@ -69,7 +75,7 @@ def impot(model: db.Model):
class DbCliHandler:
@classmethod
def add_subparser_to(cls, subparsers: argparse._SubParsersAction) -> None:
def add_subparser_to(cls, subparsers: _SubparserType) -> None:
parser = subparsers.add_parser("db", help="database operations")
parser.add_argument("--export", choices=sorted(models.keys()),
help="export data to CSV format")
@ -77,10 +83,10 @@ class DbCliHandler:
help="import data from CSV format", dest="impot")
parser.set_defaults(cls=cls)
def __init__(self, args):
def __init__(self, args: argparse.Namespace) -> None:
self.args = args
def run(self):
def run(self) -> None:
with app.app_context():
if self.args.export:
export(models[self.args.export])