aprs-python/aprslib/packets/base.py

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)