57 lines
1.3 KiB
Python
57 lines
1.3 KiB
Python
from aprslib import parse
|
|
from aprslib.parsing.common import _parse_header
|
|
|
|
class APRSPacket(object):
|
|
format = 'raw'
|
|
fromcall = 'N0CALL'
|
|
tocall = 'N0CALL'
|
|
path = []
|
|
|
|
def __init__(self, data=None):
|
|
if data:
|
|
self.load(data)
|
|
|
|
def __repr__(self):
|
|
return "<%s(%s)>" % (
|
|
self.__class__.__name__,
|
|
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)
|
|
|
|
if self.path:
|
|
header += "," + ",".join(self.path)
|
|
|
|
return header
|
|
|
|
def _serialize_body(self):
|
|
return getattr(self, '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)
|