Compare commits
3 commits
9ebe7933cb
...
6a18d811a0
| Author | SHA1 | Date | |
|---|---|---|---|
| 6a18d811a0 | |||
| 4d953d477c | |||
| ab02e49807 |
2 changed files with 26 additions and 19 deletions
|
|
@ -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()))
|
||||||
|
|
|
||||||
|
|
@ -37,19 +37,18 @@ class Server():
|
||||||
|
|
||||||
try:
|
try:
|
||||||
sock, addr = listener.accept()
|
sock, addr = listener.accept()
|
||||||
except ssl.SSLError:
|
except:
|
||||||
return
|
return
|
||||||
|
|
||||||
def spawn():
|
def spawn():
|
||||||
session = Session(self, sock)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
session = Session(self, sock)
|
||||||
session.handle()
|
session.handle()
|
||||||
|
except:
|
||||||
|
sock.close()
|
||||||
|
|
||||||
thread = threading.Thread(target=spawn)
|
thread = threading.Thread(target=spawn)
|
||||||
thread.start()
|
thread.start()
|
||||||
except (ssl.SSLEOFError, ssl.SSLError):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
hosts = re.split(r'\s*,\s*', self.config.get('listen', 'host'))
|
hosts = re.split(r'\s*,\s*', self.config.get('listen', 'host'))
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue