Avoid issues with early evaluation of argument defaults

This commit is contained in:
XANTRONIX 2025-10-31 20:31:19 -04:00
parent 67c92cb547
commit 69f1ebc503
3 changed files with 24 additions and 12 deletions

View file

@ -1,6 +1,7 @@
#! /usr/bin/env python3
import sys
import argparse
from nexrad.db import Database
from nexrad.afos import AFOSMessageParser
@ -27,6 +28,9 @@ def each_chunk(fh, sep: str):
else:
yield part.strip()
ap = argparse.ArgumentParser(description='Ingest bulk AFOS text messages')
ap.add_argument('--poly-only', action='store_true', help='Ingest only AFOS messages with geographic bounding polygons')
db = Database.connect(sys.argv[1])
db.execute('begin transaction')

View file

@ -1,6 +1,8 @@
import enum
import sqlite3
from nexrad.util import default
class DatabaseOrder(enum.Enum):
DEFAULT = 0
ASC = 1
@ -210,13 +212,15 @@ class Database():
self.db.execute(sql, values)
def query_sql(self, table, sql, values=list()):
def query_sql(self, table, sql, values=None):
cr = DatabaseTableCursor(table, self.db.cursor())
cr.execute(sql, values)
cr.execute(sql, default(values, list()))
return cr
def query(self, table, values=dict(), order_by=list()):
def query(self, table, values=None, order_by=None):
values = default(values, dict())
order_by = default(order_by, list())
selectors = getattr(table, '__columns_read__', None)
if selectors is None:
@ -253,10 +257,12 @@ class Database():
return self.query_sql(table, sql, list(values.values()))
def get(self, table, values: dict=dict()):
return self.query(table, values).fetchone()
def get(self, table, values: dict=None):
return self.query(table, default(values, dict())).fetchone()
def _call(self, table, fn: str, column: str, values: dict=None) -> int:
values = default(values, dict())
def _call(self, table, fn: str, column: str, values: dict=dict()) -> int:
sql = f"select {fn}({column}) as ret from {table.__table__}"
if len(values) > 0:
@ -267,11 +273,11 @@ class Database():
return row[0] if row is not None else None
def min(self, table, column: str, values: dict=dict()) -> int:
return self._call(table, 'min', column, values)
def min(self, table, column: str, values: dict=None) -> int:
return self._call(table, 'min', column, default(values, dict()))
def max(self, table, column: str, values: dict=dict()) -> int:
return self._call(table, 'max', column, values)
def max(self, table, column: str, values: dict=None) -> int:
return self._call(table, 'max', column, default(values, dict()))
def count(self, table, values: dict=dict()) -> int:
return self._call(table, 'count', table.__key__, values)
def count(self, table, values: dict=None) -> int:
return self._call(table, 'count', table.__key__, default(values, dict()))

2
lib/nexrad/util.py Normal file
View file

@ -0,0 +1,2 @@
def default(a, b):
return b if a is None else a