]> www.average.org Git - loctrkd.git/blobdiff - loctrkd/__main__.py
abstract protocol selection in `common`
[loctrkd.git] / loctrkd / __main__.py
index 14c33f32728a5a0dbe63e5266f430d9577429341..8808c8a31c092fdc78dc2a674f5932740622a865 100644 (file)
@@ -11,32 +11,15 @@ from typing import Any, cast, List, Tuple, Type, Union
 import zmq
 
 from . import common
+from .protomodule import ProtoModule
 from .zmsg import Bcast, Resp
 
 log = getLogger("loctrkd")
 
 
-class ProtoModule:
-    @staticmethod
-    def proto_handled(proto: str) -> bool:
-        ...
-
-    @staticmethod
-    def class_by_prefix(prefix: str) -> Any:
-        ...
-
-
-pmods: List[ProtoModule] = []
-
-
 def main(
     conf: ConfigParser, opts: List[Tuple[str, str]], args: List[str]
 ) -> None:
-    global pmods
-    pmods = [
-        cast(ProtoModule, import_module("." + modnm, __package__))
-        for modnm in conf.get("collector", "protocols").split(",")
-    ]
     # Is this https://github.com/zeromq/pyzmq/issues/1627 still not fixed?!
     zctx = zmq.Context()  # type: ignore
     zpush = zctx.socket(zmq.PUSH)  # type: ignore
@@ -49,12 +32,8 @@ def main(
     imei = args[0]
     cmd = args[1]
     args = args[2:]
-    handled = False
-    for pmod in pmods:
-        if pmod.proto_handled(cmd):
-            handled = True
-            break
-    if not handled:
+    pmod = common.pmod_for_proto(cmd)
+    if pmod is None:
         raise NotImplementedError(f"No protocol can handle {cmd}")
     cls = pmod.class_by_prefix(cmd)
     if isinstance(cls, list):