]> average.org Git - loctrkd.git/blobdiff - loctrkd/common.py
evstore: do not use unixepoch() - for older sqlite
[loctrkd.git] / loctrkd / common.py
index 1257a7267008cc62b4327d01a5b8e3fec43c05bc..026f5f3100cc6729c946bdc56581152219daf05f 100644 (file)
@@ -11,7 +11,7 @@ from sys import argv, stderr, stdout
 from typing import Any, cast, Dict, List, Optional, Tuple, Union
 from types import SimpleNamespace
 
 from typing import Any, cast, Dict, List, Optional, Tuple, Union
 from types import SimpleNamespace
 
-from .protomodule import ProtoModule
+from .protomodule import ProtoClass, ProtoModule
 
 CONF = "/etc/loctrkd.conf"
 pmods: List[ProtoModule] = []
 
 CONF = "/etc/loctrkd.conf"
 pmods: List[ProtoModule] = []
@@ -71,6 +71,22 @@ def pmod_for_proto(proto: str) -> Optional[ProtoModule]:
     return None
 
 
     return None
 
 
+def pmod_by_name(pmodname: str) -> Optional[ProtoModule]:
+    for pmod in pmods:
+        if pmod.PMODNAME == pmodname:
+            return pmod
+    return None
+
+
+def make_response(
+    pmodname: str, cmd: str, imei: str, **kwargs: Any
+) -> Optional[ProtoClass.Out]:
+    pmod = pmod_by_name(pmodname)
+    if pmod is None:
+        return None
+    return pmod.make_response(cmd, imei, **kwargs)
+
+
 def parse_message(proto: str, packet: bytes, is_incoming: bool = True) -> Any:
     pmod = pmod_for_proto(proto)
     return pmod.parse_message(packet, is_incoming) if pmod else None
 def parse_message(proto: str, packet: bytes, is_incoming: bool = True) -> Any:
     pmod = pmod_for_proto(proto)
     return pmod.parse_message(packet, is_incoming) if pmod else None
@@ -87,7 +103,9 @@ class Report:
         return (
             self.__class__.__name__
             + "("
         return (
             self.__class__.__name__
             + "("
-            + ", ".join([f"{k}={v}" for k, v in self.__dict__.items()])
+            + ", ".join(
+                [f"{k}={v.__repr__()}" for k, v in self.__dict__.items()]
+            )
             + ")"
         )
 
             + ")"
         )
 
@@ -104,11 +122,11 @@ class CoordReport(Report):
         self,
         *,
         devtime: str,
         self,
         *,
         devtime: str,
-        battery_percentage: int,
-        accuracy: float,
-        altitude: float,
-        speed: float,
-        direction: float,
+        battery_percentage: Optional[int],
+        accuracy: Optional[float],
+        altitude: Optional[float],
+        speed: Optional[float],
+        direction: Optional[float],
         latitude: float,
         longitude: float,
     ) -> None:
         latitude: float,
         longitude: float,
     ) -> None:
@@ -129,7 +147,7 @@ class HintReport(Report):
         self,
         *,
         devtime: str,
         self,
         *,
         devtime: str,
-        battery_percentage: int,
+        battery_percentage: Optional[int],
         mcc: int,
         mnc: int,
         gsm_cells: List[Tuple[int, int, int]],
         mcc: int,
         mnc: int,
         gsm_cells: List[Tuple[int, int, int]],