Source code for acdcli.api.common

import requests
import re

from requests.exceptions import ConnectionError

try:
    from requests.exceptions import ReadTimeout as ReadTimeoutError
except ImportError:
    try:
        from requests.packages.urllib3.exceptions import ReadTimeoutError
    except ImportError:
        class ReadTimeoutError(Exception):
            pass

# status codes that indicate request success
OK_CODES = [requests.codes.OK]


[docs]class RequestError(Exception): """Catch-all exception class for various connection and ACD server errors."""
[docs] class CODE(object): CONN_EXCEPTION = 1000 FAILED_SUBREQUEST = 1002 INCOMPLETE_RESULT = 1003 REFRESH_FAILED = 1004 INVALID_TOKEN = 1005
codes = requests.codes
[docs] def __init__(self, status_code: int, msg: str): self.status_code = status_code if msg: self.msg = msg else: self.msg = '[acd_api] no body received.'
def __str__(self): return 'RequestError: ' + str(self.status_code) + ', ' + self.msg
[docs]def catch_conn_exception(func): """Request connection exception decorator :raises RequestError""" def decorated(*args, **kwargs): try: return func(*args, **kwargs) except (ConnectionError, ReadTimeoutError) as e: raise RequestError(RequestError.CODE.CONN_EXCEPTION, e.__str__()) return decorated
[docs]def is_valid_id(id: str) -> bool: return bool(id) and len(id) == 22 and re.match('^[a-zA-Z0-9_-]*$', id)