Avoid issues with early default value assignment

This commit is contained in:
XANTRONIX 2025-10-31 17:18:53 -04:00
parent 4d953d477c
commit 6a18d811a0

View file

@ -3,6 +3,9 @@ import psycopg
from xenu_nntp.config import Config from xenu_nntp.config import Config
def default(a, b):
return b if a is None else a
class DatabaseOrder(enum.Enum): class DatabaseOrder(enum.Enum):
DEFAULT = 0 DEFAULT = 0
ASC = 1 ASC = 1
@ -145,13 +148,16 @@ 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: list=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: dict=None, order_by: list=None):
values = default(values, dict())
order_by = default(order_by, list())
sql = "select %s from %s" % ( sql = "select %s from %s" % (
', '.join(table.columns), ', '.join(table.columns),
table.name table.name
@ -181,10 +187,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.name}" sql = f"select {fn}({column}) as ret from {table.name}"
if len(values) > 0: if len(values) > 0:
@ -195,11 +203,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()))