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
|
||||
|
||||
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')
|
||||
|
||||
|
|
|
|||
|
|
@ -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
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