parser typing
This commit is contained in:
		| @@ -1,5 +1,5 @@ | |||||||
| from csdr.chain.demodulator import ServiceDemodulator, SecondaryDemodulator, DialFrequencyReceiver, SecondarySelectorChain | 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.kiss import KissDeframer | ||||||
| from owrx.aprs import Ax25Parser, AprsParser | from owrx.aprs import Ax25Parser, AprsParser | ||||||
| from pycsdr.modules import Convert, FmDemod, Agc, TimingRecovery, DBPskDecoder, VaricodeDecoder | from pycsdr.modules import Convert, FmDemod, Agc, TimingRecovery, DBPskDecoder, VaricodeDecoder | ||||||
| @@ -10,8 +10,7 @@ from owrx.pocsag import PocsagParser | |||||||
|  |  | ||||||
|  |  | ||||||
| class AudioChopperDemodulator(ServiceDemodulator, DialFrequencyReceiver): | class AudioChopperDemodulator(ServiceDemodulator, DialFrequencyReceiver): | ||||||
|     # TODO parser typing |     def __init__(self, mode: str, parser: AudioChopperParser): | ||||||
|     def __init__(self, mode: str, parser): |  | ||||||
|         self.chopper = AudioChopper(mode, parser) |         self.chopper = AudioChopper(mode, parser) | ||||||
|         workers = [Convert(Format.FLOAT, Format.SHORT), self.chopper] |         workers = [Convert(Format.FLOAT, Format.SHORT), self.chopper] | ||||||
|         super().__init__(workers) |         super().__init__(workers) | ||||||
|   | |||||||
| @@ -1,10 +1,12 @@ | |||||||
| from owrx.modes import Modes, AudioChopperMode | from owrx.modes import Modes, AudioChopperMode | ||||||
|  | from owrx.audio import AudioChopperProfile | ||||||
| from itertools import groupby | from itertools import groupby | ||||||
| from owrx.audio import ProfileSourceSubscriber | from owrx.audio import ProfileSourceSubscriber | ||||||
| from owrx.audio.wav import AudioWriter | from owrx.audio.wav import AudioWriter | ||||||
| from owrx.audio.queue import QueueJob | from owrx.audio.queue import QueueJob | ||||||
| from csdr.module import ThreadModule | from csdr.module import ThreadModule | ||||||
| from pycsdr.types import Format | from pycsdr.types import Format | ||||||
|  | from abc import ABC, abstractmethod | ||||||
| import pickle | import pickle | ||||||
|  |  | ||||||
| import logging | import logging | ||||||
| @@ -13,9 +15,14 @@ logger = logging.getLogger(__name__) | |||||||
| logger.setLevel(logging.INFO) | logger.setLevel(logging.INFO) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class AudioChopperParser(ABC): | ||||||
|  |     @abstractmethod | ||||||
|  |     def parse(self, profile: AudioChopperProfile, frequency: int, line: bytes): | ||||||
|  |         pass | ||||||
|  |  | ||||||
|  |  | ||||||
| class AudioChopper(ThreadModule, ProfileSourceSubscriber): | class AudioChopper(ThreadModule, ProfileSourceSubscriber): | ||||||
|     # TODO parser typing |     def __init__(self, mode_str: str, parser: AudioChopperParser): | ||||||
|     def __init__(self, mode_str: str, parser): |  | ||||||
|         self.parser = parser |         self.parser = parser | ||||||
|         self.dialFrequency = None |         self.dialFrequency = None | ||||||
|         self.doRun = True |         self.doRun = True | ||||||
|   | |||||||
| @@ -1,4 +1,5 @@ | |||||||
| from owrx.audio import AudioChopperProfile, ConfigWiredProfileSource | from owrx.audio import AudioChopperProfile, ConfigWiredProfileSource | ||||||
|  | from owrx.audio.chopper import AudioChopperParser | ||||||
| import re | import re | ||||||
| from js8py import Js8 | from js8py import Js8 | ||||||
| from js8py.frames import Js8FrameHeartbeat, Js8FrameCompound | from js8py.frames import Js8FrameHeartbeat, Js8FrameCompound | ||||||
| @@ -81,10 +82,10 @@ class Js8TurboProfile(Js8Profile): | |||||||
|         return "C" |         return "C" | ||||||
|  |  | ||||||
|  |  | ||||||
| class Js8Parser: | class Js8Parser(AudioChopperParser): | ||||||
|     decoderRegex = re.compile(" ?<Decode(Started|Debug|Finished)>") |     decoderRegex = re.compile(" ?<Decode(Started|Debug|Finished)>") | ||||||
|  |  | ||||||
|     def parse(self, profile, freq, raw_msg): |     def parse(self, profile: AudioChopperProfile, freq: int, raw_msg: bytes): | ||||||
|         try: |         try: | ||||||
|             band = None |             band = None | ||||||
|             if freq is not None: |             if freq is not None: | ||||||
|   | |||||||
| @@ -4,6 +4,7 @@ from owrx.map import Map, LocatorLocation | |||||||
| from owrx.metrics import Metrics, CounterMetric | from owrx.metrics import Metrics, CounterMetric | ||||||
| from owrx.reporting import ReportingEngine | from owrx.reporting import ReportingEngine | ||||||
| from owrx.audio import AudioChopperProfile, StaticProfileSource, ConfigWiredProfileSource | from owrx.audio import AudioChopperProfile, StaticProfileSource, ConfigWiredProfileSource | ||||||
|  | from owrx.audio.chopper import AudioChopperParser | ||||||
| from abc import ABC, ABCMeta, abstractmethod | from abc import ABC, ABCMeta, abstractmethod | ||||||
| from owrx.config import Config | from owrx.config import Config | ||||||
| from enum import Enum | 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] |         return ["jt9", "--q65", "-p", str(self.interval), "-b", self.mode.name, "-d", str(self.decoding_depth()), file] | ||||||
|  |  | ||||||
|  |  | ||||||
| class WsjtParser: | class WsjtParser(AudioChopperParser): | ||||||
|     def parse(self, profile, freq, raw_msg): |     def parse(self, profile: WsjtProfile, freq: int, raw_msg: bytes): | ||||||
|         try: |         try: | ||||||
|             band = None |             band = None | ||||||
|             if freq is not None: |             if freq is not None: | ||||||
| @@ -310,9 +311,9 @@ class Decoder(ABC): | |||||||
|  |  | ||||||
|     def parse_timestamp(self, instring): |     def parse_timestamp(self, instring): | ||||||
|         dateformat = self.profile.getTimestampFormat() |         dateformat = self.profile.getTimestampFormat() | ||||||
|         remain = instring[len(dateformat) + 1 :] |         remain = instring[len(dateformat) + 1:] | ||||||
|         try: |         try: | ||||||
|             ts = datetime.strptime(instring[0 : len(dateformat)], dateformat) |             ts = datetime.strptime(instring[0: len(dateformat)], dateformat) | ||||||
|             return remain, int( |             return remain, int( | ||||||
|                 datetime.combine(datetime.utcnow().date(), ts.time()).replace(tzinfo=timezone.utc).timestamp() * 1000 |                 datetime.combine(datetime.utcnow().date(), ts.time()).replace(tzinfo=timezone.utc).timestamp() * 1000 | ||||||
|             ) |             ) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Jakob Ketterl
					Jakob Ketterl