ResponseGetData

preferred response class for all API requests

Response Error Classes


source

BlockedByVPN

 BlockedByVPN (res, ip_address:str=None)

base exception


source

ResponseGetData

 ResponseGetData (status:int, response:Any, is_success:bool,
                  auth:dict=None, parent_class:str=None,
                  traceback_details:<built-infunctionany>=None)

preferred response class for all API Requests

rgd = ResponseGetData(status=200, response="test", is_success=True)
rgd
ResponseGetData(status=200, response='test', is_success=True, parent_class=None)

Classmethods from Response objects by library

This code base supports two API request libraries, requests.request (synchronous) and aiohttp.ClientRequest (asynchronous) this can be extended as new libraries emerge with different performance characteristics.

Requests Library


source

ResponseGetData._from_requests_response

 ResponseGetData._from_requests_response (res:requests.models.Response)

returns ResponseGetData

Type Details
res Response requests response object
Returns ResponseGetData
# test _from_requests_response returns ResponseGetData class

url = f"https://domo-community.domo.com/api/content/v2/authentication"

tokenHeaders = {"Content-Type": "application/json"}

body = {
    "method": "password",
    "emailAddress": "jae@onyxreporting.com",
    "password": os.environ["DOMO_PASSWORD"],
}

res = requests.request(method="POST", url=url, json=body, headers=tokenHeaders)

print(res.status_code)

test_res = ResponseGetData._from_requests_response(res)
test_res.__dict__.keys()
200
dict_keys(['status', 'response', 'is_success', 'auth', 'parent_class', 'traceback_details'])

HTTPX Library


source

find_ip

 find_ip (html, html_tag:str='p')

Asyncio Response Handling


source

ResponseGetData._from_aiohttp_response

 ResponseGetData._from_aiohttp_response
                                         (res:aiohttp.client_reqrep.Client
                                         Response, auth:Optional[<built-
                                         infunctionany>]=None,
                                         process_stream:bool=False,
                                         stream_chunks:int=10,
                                         debug_api:bool=False,
                                         response_file_name:str=None, trac
                                         eback_details:domolibrary.client.
                                         Logger.TracebackDetails=None)

async method returns ResponseGetData

Type Default Details
res ClientResponse requests response object
auth Optional None
process_stream bool False
stream_chunks int 10
debug_api bool False
response_file_name str None
traceback_details TracebackDetails None
Returns ResponseGetData

sample implementation of RGD + trackeback

# test _from_aiohttp_response returns ResponseGetData class


class Foo:
    def __init__(self):
        pass

    async def get_data(self):
        url = f"https://domo-community.domo.com/api/content/v2/authentication"

        body = {
            "method": "password",
            "emailAddress": "jae@onyxreporting.com",
            "password": os.environ["DOMO_PASSWORD"],
        }

        session = aiohttp.ClientSession()
        res = await session.post(url=url, json=body)
        await session.close()

        print(res.status)

        traceback_details = dl.get_traceback(
            root_module="<module>",
            # drop entries from the top of stack to exclude the functions that retrieve the traceback
            num_stacks_to_drop=0,
            parent_class=self.__class__.__name__,
        )

        return await ResponseGetData._from_aiohttp_response(
            res, traceback_details=traceback_details
        )


test_foo = Foo()

res = await test_foo.get_data()

res.traceback_details.__dict__
200
{'function_trail': '<module> -> get_data',
 'function_name': 'get_data',
 'file_name': '/tmp/ipykernel_59532/1664391316.py',
 'parent_class': 'Foo',
 'traceback_stack': [<FrameSummary file /tmp/ipykernel_59532/1664391316.py, line 37 in <module>>,
  <FrameSummary file /tmp/ipykernel_59532/1664391316.py, line 23 in get_data>]}