Avoid issues with early evaluation of argument defaults
This commit is contained in:
parent
67c92cb547
commit
69f1ebc503
3 changed files with 24 additions and 12 deletions
|
|
@ -1,6 +1,7 @@
|
||||||
#! /usr/bin/env python3
|
#! /usr/bin/env python3
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
import argparse
|
||||||
|
|
||||||
from nexrad.db import Database
|
from nexrad.db import Database
|
||||||
from nexrad.afos import AFOSMessageParser
|
from nexrad.afos import AFOSMessageParser
|
||||||
|
|
@ -27,6 +28,9 @@ def each_chunk(fh, sep: str):
|
||||||
else:
|
else:
|
||||||
yield part.strip()
|
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 = Database.connect(sys.argv[1])
|
||||||
db.execute('begin transaction')
|
db.execute('begin transaction')
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
import enum
|
import enum
|
||||||
import sqlite3
|
import sqlite3
|
||||||
|
|
||||||
|
from nexrad.util import default
|
||||||
|
|
||||||
class DatabaseOrder(enum.Enum):
|
class DatabaseOrder(enum.Enum):
|
||||||
DEFAULT = 0
|
DEFAULT = 0
|
||||||
ASC = 1
|
ASC = 1
|
||||||
|
|
@ -210,13 +212,15 @@ class Database():
|
||||||
|
|
||||||
self.db.execute(sql, values)
|
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 = DatabaseTableCursor(table, self.db.cursor())
|
||||||
cr.execute(sql, values)
|
cr.execute(sql, default(values, list()))
|
||||||
|
|
||||||
return cr
|
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)
|
selectors = getattr(table, '__columns_read__', None)
|
||||||
|
|
||||||
if selectors is None:
|
if selectors is None:
|
||||||
|
|
@ -253,10 +257,12 @@ class Database():
|
||||||
|
|
||||||
return self.query_sql(table, sql, list(values.values()))
|
return self.query_sql(table, sql, list(values.values()))
|
||||||
|
|
||||||
def get(self, table, values: dict=dict()):
|
def get(self, table, values: dict=None):
|
||||||
return self.query(table, values).fetchone()
|
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__}"
|
sql = f"select {fn}({column}) as ret from {table.__table__}"
|
||||||
|
|
||||||
if len(values) > 0:
|
if len(values) > 0:
|
||||||
|
|
@ -267,11 +273,11 @@ class Database():
|
||||||
|
|
||||||
return row[0] if row is not None else None
|
return row[0] if row is not None else None
|
||||||
|
|
||||||
def min(self, table, column: str, values: dict=dict()) -> int:
|
def min(self, table, column: str, values: dict=None) -> int:
|
||||||
return self._call(table, 'min', column, values)
|
return self._call(table, 'min', column, default(values, dict()))
|
||||||
|
|
||||||
def max(self, table, column: str, values: dict=dict()) -> int:
|
def max(self, table, column: str, values: dict=None) -> int:
|
||||||
return self._call(table, 'max', column, values)
|
return self._call(table, 'max', column, default(values, dict()))
|
||||||
|
|
||||||
def count(self, table, values: dict=dict()) -> int:
|
def count(self, table, values: dict=None) -> int:
|
||||||
return self._call(table, 'count', table.__key__, values)
|
return self._call(table, 'count', table.__key__, default(values, dict()))
|
||||||
|
|
|
||||||
2
lib/nexrad/util.py
Normal file
2
lib/nexrad/util.py
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
def default(a, b):
|
||||||
|
return b if a is None else a
|
||||||
Loading…
Add table
Reference in a new issue