From 50335ddf40e4674c688deba8b0152347baa2b303 Mon Sep 17 00:00:00 2001 From: Rossen Georgiev Date: Sun, 24 Jan 2016 11:56:23 +0000 Subject: [PATCH] packet or dict can be loaded into packet objects --- aprslib/packets/base.py | 45 ++++++++++++++++++++++++++++--------- aprslib/packets/position.py | 1 + 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/aprslib/packets/base.py b/aprslib/packets/base.py index b04a9fd..8058f27 100644 --- a/aprslib/packets/base.py +++ b/aprslib/packets/base.py @@ -1,10 +1,15 @@ - +from aprslib import parse +from aprslib.parsing.common import _parse_header class APRSPacket(object): - def __init__(self, fromcall, tocall, path=[]): - self.fromcall = fromcall - self.tocall = tocall - self.path = path + format = 'raw' + fromcall = 'N0CALL' + tocall = 'N0CALL' + path = [] + + def __init__(self, data=None): + if data: + self.load(data) def __repr__(self): return "<%s(%s)>" % ( @@ -12,6 +17,15 @@ class APRSPacket(object): repr(str(self)), ) + def __str__(self): + return "%s:%s" % ( + self._serialize_header(), + self._serialize_body(), + ) + + def __eq__(self, other): + return str(self) == str(other) + def _serialize_header(self): header = "%s>%s" % (self.fromcall, self.tocall) @@ -23,9 +37,20 @@ class APRSPacket(object): def _serialize_body(self): return getattr(self, 'body', '') - def __str__(self): - return "%s:%s" % ( - self._serialize_header(), - self._serialize_body(), - ) + def load(self, obj): + if not isinstance(obj, dict): + if self.format == 'raw': + header, self.body = obj.split(":", 1) + obj = _parse_header(header) + else: + obj = parse(obj) + + for k, v in obj.items(): + if k == 'format': + continue + if k == 'to' or k == 'from': + k += 'call' + + if hasattr(self, k): + setattr(self, k, v) diff --git a/aprslib/packets/position.py b/aprslib/packets/position.py index 275e6d3..664193e 100644 --- a/aprslib/packets/position.py +++ b/aprslib/packets/position.py @@ -4,6 +4,7 @@ from aprslib.util import latitude_to_ddm, longitude_to_ddm, comment_altitude class PositionReport(APRSPacket): + format = 'uncompressed' latitude = 0 longitude = 0 symbol_table = '/'