X-Git-Url: http://average.org/gitweb/?a=blobdiff_plain;f=loctrkd%2Fevstore.py;h=85e8c9d25767de36fbf4e30444c9caa6f7bd6d5c;hb=c9f23958d20dfc6578b9f76706bd8b3e687389b0;hp=b0265055dec85cd55785f626e6ae690aeb1599f5;hpb=ea3dc3f2096472d502d376e13050a59f97efd4a8;p=loctrkd.git diff --git a/loctrkd/evstore.py b/loctrkd/evstore.py index b026505..85e8c9d 100644 --- a/loctrkd/evstore.py +++ b/loctrkd/evstore.py @@ -1,8 +1,8 @@ """ sqlite event store """ from datetime import datetime -from json import dumps -from sqlite3 import connect, OperationalError +from json import dumps, loads +from sqlite3 import connect, OperationalError, Row from typing import Any, Dict, List, Tuple __all__ = "fetch", "initdb", "stow", "stowloc" @@ -32,14 +32,9 @@ SCHEMA = ( def initdb(dbname: str) -> None: global DB DB = connect(dbname) - try: - DB.execute( - """alter table events add column - is_incoming int not null default TRUE""" - ) - except OperationalError: - for stmt in SCHEMA: - DB.execute(stmt) + DB.row_factory = Row + for stmt in SCHEMA: + DB.execute(stmt) def stow(**kwargs: Any) -> None: @@ -91,23 +86,20 @@ def stowloc(**kwargs: Dict[str, Any]) -> None: DB.commit() -def fetch( - imei: str, matchlist: List[Tuple[bool, str]], backlog: int -) -> List[Tuple[bool, float, str, bytes]]: - # matchlist is a list of tuples (is_incoming, proto) - # returns a list of tuples (is_incoming, timestamp, packet) +def fetch(imei: str, backlog: int) -> List[Dict[str, Any]]: assert DB is not None - selector = " or ".join( - (f"(is_incoming = ? and proto = ?)" for _ in range(len(matchlist))) - ) cur = DB.cursor() cur.execute( - f"""select is_incoming, tstamp, proto, packet from events - where ({selector}) and imei = ? - order by tstamp desc limit ?""", - tuple(item for sublist in matchlist for item in sublist) - + (imei, backlog), + """select imei, devtime, accuracy, latitude, longitude, remainder + from reports where imei = ? + order by devtime desc limit ?""", + (imei, backlog), ) - result = list(cur) + result = [] + for row in cur: + dic = dict(row) + remainder = loads(dic.pop("remainder")) + dic.update(remainder) + result.append(dic) cur.close() return list(reversed(result))