Source code for vodem.util
import datetime
import logging
import re
from .exceptions import DecodeError
logging.basicConfig()
[docs]def decode_number(message):
logging.getLogger(__name__).debug(message)
try:
if message == '':
return 0
return int(message, 10)
except Exception as ex:
raise DecodeError(ex)
[docs]def decode_result(message):
logging.getLogger(__name__).debug(message)
try:
if message == 'success':
return True
if message == 'failure':
return False
raise ValueError("unable to decode")
except Exception as ex:
raise DecodeError(ex)
[docs]def decode_sms_tag(message):
logging.getLogger(__name__).debug(message)
try:
return int(message)
except Exception as ex:
raise DecodeError(ex)
[docs]def decode_sms_id(message):
logging.getLogger(__name__).debug(message)
try:
return int(message)
except Exception as ex:
raise DecodeError(ex)
[docs]def decode_sms_cmd_status_info(message):
logging.getLogger(__name__).debug(message)
try:
return int(message)
except Exception as ex:
raise DecodeError(ex)
[docs]def decode_sms_message(message):
logging.getLogger(__name__).debug(message)
def decode(characters):
return '{0}'.format(chr(int(characters, 16)))
try:
return ''.join([decode(x) for x in re.findall('....', message)])
except Exception as ex:
raise DecodeError(ex)
[docs]def encode_sms_message(message):
logging.getLogger(__name__).debug(message)
def encode(character):
return '{0:0=4x}'.format(ord(character))
try:
return ''.join([encode(x) for x in message])
except Exception as ex:
raise DecodeError(ex)
[docs]def decode_time(message):
logging.getLogger(__name__).debug(message)
try:
message, _ = _decode_utcoffset(message)
return datetime.datetime.strptime(message, '%y,%m,%d,%H,%M,%S,')
except Exception as ex:
raise DecodeError(ex)
[docs]def encode_time(message):
logging.getLogger(__name__).debug(message)
try:
return '{0}{1}'.format(message.strftime('%y;%m;%d;%H;%M;%S;'), '+0')
except Exception as ex:
raise DecodeError(ex)
[docs]def decode_wan_manual_contents_long(message):
logging.getLogger(__name__).debug(message)
def strip_chars(bad):
""" This should't need to exist """
return (
bad[0],
re.sub(r'\"', '', bad[1]),
re.sub(r'\"', '', bad[2]),
re.sub(r'\D', '', bad[3]),
bad[4]
)
# I have nothing nice to say here about vendor.js:1323
try:
expr = re.compile(r'\(([^,]*),([^,]*),([^,]*),([^,]*),([^,]*)\),')
matches = expr.findall(message)
matches = [strip_chars(match) for match in matches]
return matches
except Exception as ex:
raise DecodeError(ex)
def _decode_utcoffset(message):
logging.getLogger(__name__).debug(message)
try:
expr = re.compile(r'^((?:[0-9]{2}\,){6})([+-]?[0-9]{1,2}$)')
tstr, tzstr = expr.match(message).groups()
return (tstr, tzstr)
except Exception as ex:
raise DecodeError(ex)