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) try: return bytes.fromhex(message).decode('utf-16-be') except Exception as ex: raise DecodeError(ex)
[docs]def encode_sms_message(message): logging.getLogger(__name__).debug(message) try: return bytes.hex(message.encode('utf-16-be')) except Exception as ex: raise DecodeError(ex)
[docs]def encoding_of(message): logging.getLogger(__name__).debug(message) try: are_utf16 = [len(encode_sms_message(m)) == 8 for m in message] if any(are_utf16): return 'UNICODE' else: return 'GSM7_default' except UnicodeDecodeError 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)
[docs]def try_decode(decoder, key, safe=False, default=None): try: return decoder(key) except DecodeError: if safe: return default else: raise
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)