From 25e2a8013e8c4feea9820bc8d277c4fe3dd11a08 Mon Sep 17 00:00:00 2001 From: Jakob Ketterl Date: Tue, 28 Sep 2021 00:27:01 +0200 Subject: [PATCH] parser typing --- csdr/chain/digimodes.py | 5 ++--- owrx/audio/chopper.py | 11 +++++++++-- owrx/js8.py | 5 +++-- owrx/wsjt.py | 9 +++++---- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/csdr/chain/digimodes.py b/csdr/chain/digimodes.py index ccabce0..7060b69 100644 --- a/csdr/chain/digimodes.py +++ b/csdr/chain/digimodes.py @@ -1,5 +1,5 @@ from csdr.chain.demodulator import ServiceDemodulator, SecondaryDemodulator, DialFrequencyReceiver, SecondarySelectorChain -from owrx.audio.chopper import AudioChopper +from owrx.audio.chopper import AudioChopper, AudioChopperParser from owrx.aprs.kiss import KissDeframer from owrx.aprs import Ax25Parser, AprsParser from pycsdr.modules import Convert, FmDemod, Agc, TimingRecovery, DBPskDecoder, VaricodeDecoder @@ -10,8 +10,7 @@ from owrx.pocsag import PocsagParser class AudioChopperDemodulator(ServiceDemodulator, DialFrequencyReceiver): - # TODO parser typing - def __init__(self, mode: str, parser): + def __init__(self, mode: str, parser: AudioChopperParser): self.chopper = AudioChopper(mode, parser) workers = [Convert(Format.FLOAT, Format.SHORT), self.chopper] super().__init__(workers) diff --git a/owrx/audio/chopper.py b/owrx/audio/chopper.py index bd0cbd4..92ccbb8 100644 --- a/owrx/audio/chopper.py +++ b/owrx/audio/chopper.py @@ -1,10 +1,12 @@ from owrx.modes import Modes, AudioChopperMode +from owrx.audio import AudioChopperProfile from itertools import groupby from owrx.audio import ProfileSourceSubscriber from owrx.audio.wav import AudioWriter from owrx.audio.queue import QueueJob from csdr.module import ThreadModule from pycsdr.types import Format +from abc import ABC, abstractmethod import pickle import logging @@ -13,9 +15,14 @@ logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) +class AudioChopperParser(ABC): + @abstractmethod + def parse(self, profile: AudioChopperProfile, frequency: int, line: bytes): + pass + + class AudioChopper(ThreadModule, ProfileSourceSubscriber): - # TODO parser typing - def __init__(self, mode_str: str, parser): + def __init__(self, mode_str: str, parser: AudioChopperParser): self.parser = parser self.dialFrequency = None self.doRun = True diff --git a/owrx/js8.py b/owrx/js8.py index 8edbb95..412a94c 100644 --- a/owrx/js8.py +++ b/owrx/js8.py @@ -1,4 +1,5 @@ from owrx.audio import AudioChopperProfile, ConfigWiredProfileSource +from owrx.audio.chopper import AudioChopperParser import re from js8py import Js8 from js8py.frames import Js8FrameHeartbeat, Js8FrameCompound @@ -81,10 +82,10 @@ class Js8TurboProfile(Js8Profile): return "C" -class Js8Parser: +class Js8Parser(AudioChopperParser): decoderRegex = re.compile(" ?") - def parse(self, profile, freq, raw_msg): + def parse(self, profile: AudioChopperProfile, freq: int, raw_msg: bytes): try: band = None if freq is not None: diff --git a/owrx/wsjt.py b/owrx/wsjt.py index fdda33d..e79abef 100644 --- a/owrx/wsjt.py +++ b/owrx/wsjt.py @@ -4,6 +4,7 @@ from owrx.map import Map, LocatorLocation from owrx.metrics import Metrics, CounterMetric from owrx.reporting import ReportingEngine from owrx.audio import AudioChopperProfile, StaticProfileSource, ConfigWiredProfileSource +from owrx.audio.chopper import AudioChopperParser from abc import ABC, ABCMeta, abstractmethod from owrx.config import Config from enum import Enum @@ -244,8 +245,8 @@ class Q65Profile(WsjtProfile): return ["jt9", "--q65", "-p", str(self.interval), "-b", self.mode.name, "-d", str(self.decoding_depth()), file] -class WsjtParser: - def parse(self, profile, freq, raw_msg): +class WsjtParser(AudioChopperParser): + def parse(self, profile: WsjtProfile, freq: int, raw_msg: bytes): try: band = None if freq is not None: @@ -310,9 +311,9 @@ class Decoder(ABC): def parse_timestamp(self, instring): dateformat = self.profile.getTimestampFormat() - remain = instring[len(dateformat) + 1 :] + remain = instring[len(dateformat) + 1:] try: - ts = datetime.strptime(instring[0 : len(dateformat)], dateformat) + ts = datetime.strptime(instring[0: len(dateformat)], dateformat) return remain, int( datetime.combine(datetime.utcnow().date(), ts.time()).replace(tzinfo=timezone.utc).timestamp() * 1000 )