Beispiel #1
0
    def create_search(self, query_expression):
        # validate credential and create search_id.  No query submission -- Sync call
        #
        respObj = Response()
        respObj.code = "401"
        respObj.error_type = ""
        respObj.status_code = 401
        if (self.get_accessToken()):
            self.query = query_expression
            response = self.build_searchId()
            if (response != None):
                respObj.code = "200"
                respObj.error_type = ""
                respObj.status_code = 200
                content = '{"search_id": "' + \
                    str(response) + \
                    '", "data": {"message":  "Search id generated."}}'
                respObj._content = bytes(content, 'utf-8')
            else:
                respObj.code = "404"
                respObj.error_type = "Not found"
                respObj.status_code = 404
                respObj.message = "Could not generate search id."
        else:
            respObj.error_type = "Unauthorized: Access token could not be generated."
            respObj.message = "Unauthorized: Access token could not be generated."
#
        return ResponseWrapper(respObj)
Beispiel #2
0
    def create_search(self, query_expression):
        respObj = Response()
        respObj.code = "401"
        respObj.error_type = ""
        respObj.status_code = 401
        # print("query="+query_expression)
        if (self.client.access_token):
            self.query = query_expression
            response = self.build_searchId()
            if (response != None):
                respObj.code = "200"
                respObj.error_type = ""
                respObj.status_code = 200
                content = '{"search_id": "' + \
                    str(response) + \
                    '", "data": {"message":  "Search id generated."}}'
                respObj._content = bytes(content, 'utf-8')
            else:
                respObj.code = "404"
                respObj.error_type = "Not found"
                respObj.status_code = 404
                respObj.message = "Could not generate search id."
        else:
            respObj.error_type = "Unauthorized: Access token could not be generated."
            respObj.message = "Unauthorized: Access token could not be generated."
#
        return ResponseWrapper(respObj)
Beispiel #3
0
 def ping(self):
     respObj = Response()
     if (self.getToken()):
         respObj.code = "200"
         respObj.error_type = ""
         respObj.status_code = 200
         content = '{"status":"OK", "data": {"message": "Service is up."}}'
         respObj._content = bytes(content, 'utf-8')
     else:
         respObj.code = "503"
         respObj.error_type = "Service Unavailable"
         respObj.status_code = 503
         content = '{"status":"Failed", "data": {"message": "Service is down."}}'
         respObj._content = bytes(content, 'utf-8')
     # return
     return ResponseWrapper(respObj)
Beispiel #4
0
    async def acall(self, summary, **kwargs):
        if self.is_expired():
            self.refresh_token()
        method = self.functions[summary]["method"]
        path = self.__url + self.functions[summary]["path"]
        url = path.format(**kwargs)
        params = kwargs.get("params", {})
        payload = kwargs.get("payload", {})
        limit = kwargs.get("limit", 100)

        if limit == 100:
            async with aiohttp.ClientSession(
                    headers=self.session.headers) as session:
                async with session.request(method,
                                           url=url,
                                           json=payload,
                                           params=params) as resp:
                    ret_resp = Response()
                    ret_resp.status_code = resp.status
                    ret_resp.error_type = resp.reason
                    ret_resp._content = await resp.read()
                    return ret_resp

        tasks = []
        for i in range(0, limit, 100):
            new_params = params.copy()
            new_kwargs = kwargs.copy()

            new_params["limit"] = 100
            new_params["offset"] = i
            del new_kwargs["params"]
            new_kwargs["limit"] = 100
            tasks.append(self.acall(summary, params=new_params, **new_kwargs))

        resps = await asyncio.gather(*tasks)
        resps_json = [resp.json() for resp in resps]
        results = []
        for resp in resps_json:
            if "results" in resp:
                # print(f"There are {len(resp['results'])} results in this response")
                results.extend(resp["results"])
                # print(len(results))

        if "paging" in resps_json[-1]:
            resp["paging"] = resps_json[-1]["paging"]

        if len(results) > limit:
            resp = {"results": results[:limit]}
            params["offset"] = limit
            resp["paging"] = {
                "nextPage": f"{url}?{urllib.parse.urlencode(params)}"
            }
        else:
            resp["results"] = results

        ret_resp = Response()
        ret_resp.status_code = 200
        ret_resp._content = json.dumps(resp).encode("utf-8")
        ret_resp.url = url
        return ret_resp
    def get_projects_response(self, project_data):
        the_response = Response()
        the_response.code = "expired"
        the_response.error_type = "expired"
        the_response.status_code = 200
        the_response._content = project_data.encode()

        return the_response
def test_error_status_code_throw_apiresponseexception():
    test_response = Response()
    test_response.code = "expired"
    test_response.error_type = "expired"
    test_response.status_code = 400

    with pytest.raises(ApiRequestException):
        parse_response(test_response)
Beispiel #7
0
def __create_fake_responses(code):
    """Create fake response to test."""
    from requests.models import Response
    response = Response()
    response.code = "blah"
    response.error_type = "blah"
    response.status_code = code
    return response
    def client(self):
        the_response = Response()
        the_response.code = "expired"
        the_response.error_type = "expired"
        the_response.status_code = 200

        with patch('datagym.client.Client._request', return_value=the_response):
            from datagym import Client
            return Client("38641a09-cdf1-448e-bbc6-8e49109f7b63")
Beispiel #9
0
 def ping_box(self):
     # Subroto -- Guardium does not have ping facility
     # We test if we can get the access token if we can then success = true
     #
     respObj = Response()
     if (self.fetch_accessToken()):
         respObj.code = "200"
         respObj.error_type = ""
         respObj.status_code = 200
         content = '{"status":"OK", "data": {"message": "Service is up."}}'
         respObj._content = bytes(content, 'utf-8')
     else:
         respObj.code = "503"
         respObj.error_type = "Service Unavailable"
         respObj.status_code = 503
         content = '{"status":"Failed", "data": {"message": "Service is down."}}'
         respObj._content = bytes(content, 'utf-8')
     # return
     return ResponseWrapper(respObj)
Beispiel #10
0
def make_response(data):
    header, content = data.split(b"\r\n\r\n", 1)
    response = Response()
    response._content, _ = content.rsplit(b'\r\n', 1)
    status, headers = header.split(b'\r\n', 1)
    _, code, reason = status.split()
    response.code = reason
    response.error_type = reason
    response.status_code = int(code)
    return response
Beispiel #11
0
    def createResponse(self, resp, newContent):
        pp = pprint.PrettyPrinter(indent=1)
        respObj = Response()
        if (resp.code == 200):
            respObj.code = "200"
            respObj.status_code = 200
            content = json.dumps(newContent)  #put new content in response
            respObj._content = bytes(content, 'utf-8')
        elif (resp.code == 400):
            respObj.code = "400"
            respObj.error_type = "Bad Request"
            respObj.status_code = 400
            respObj.message = "Could not generate response."
        elif (resp.code == 500):
            respObj.code = "500"
            respObj.error_type = "Internal Server Error"
            respObj.status_code = 400
            respObj.message = "An internal server error occured. "

        return ResponseWrapper(respObj)
Beispiel #12
0
 def get_status(self, search_id):
     # It is a synchronous connector.
     # return {"code": 200, "status": "COMPLETED"}
     respObj = Response()
     respObj.code = "200"
     respObj.error_type = ""
     respObj.status_code = 200
     content = '{"search_id": "' + search_id + \
         '", "progress":"Completed", "status":"COMPLETED", "data": {"message":"Completed for the search id provided."}}'
     respObj._content = bytes(content, 'utf-8')
     return ResponseWrapper(respObj)
Beispiel #13
0
 def get_status(self, search_id):
     # Subroto we do not need to send anything to Guardium
     # We create response object and send "COMPLETED"
     # Note: we may have an issue with this simplistic approach
     respObj = Response()
     if (self.fetch_accessToken()):
         respObj.code = "200"
         respObj.error_type = ""
         respObj.status_code = 200
         content = '{"search_id": "' + search_id + \
             '", "progress":"Completed", "status":"COMPLETED", "data": {"message":"Completed for the search id provided."}}'
         respObj._content = bytes(content, 'utf-8')
     else:
         respObj.code = "503"
         respObj.error_type = "Service Unavailable"
         respObj.status_code = 503
         content = '{"status":"Failed", "data": {"message": "Could obtain status: Authentication issue / service unavailable."}}'
         respObj._content = bytes(content, 'utf-8')
     #
     return ResponseWrapper(respObj)
Beispiel #14
0
def download_page(pURL, max_retry=3, attempt=0):
    try:
        r = requests.get(pURL)
        return r
    except requests.ConnectionError:
        logging.warning("Connection Error for URL: {}".format(pURL))
        response = Response()
        response.code = "Connection Error"
        response.error_type = "Connection"
        response.status_code = 451
        response._content = b'{"error":"Connection Error"}'
        return response
    except requests.Timeout:
        if attempt < max_retry:
            download_page(pURL, max_retry, attemp + 1)
        else:
            logging.warning("Connection Timeout for URL: {}".format(pURL))
            response = Response()
            response.code = "Timeout"
            response.error_type = "Connection"
            response.status_code = 400
            response._content = b'{"error":"Timeout"}'
            return response
    except requests.TooManyRedirects:
        logging.warning("Too Many Redirects for URL: {}".format(pURL))
        response = Response()
        response.code = "Too many redirects"
        response.error_type = "Redirects"
        response.status_code = 309
        response._content = b'{"error":"Too many redirects"}'
        return response
    except requests.RequestException as e:
        logging.warning("Generic Request Exception for URL: {}".format(pURL))
        response = Response()
        response.code = "Unknown error"
        response.error_type = "Generic"
        response.status_code = 450
        response._content = b'{"error":"Unknown error"}'
        return response
Beispiel #15
0
    async def acall(self, summary, **kwargs):
        if self.is_expired():
            self.refresh_token()
        method = self.functions[summary]['method']
        path = self.__url + self.functions[summary]['path']
        url = path.format(**kwargs)
        params = kwargs.get('params',  {})
        payload = kwargs.get('payload', {})
        limit = kwargs.get('limit', 100)

        if limit == 100:
            async with aiohttp.ClientSession(headers=self.session.headers) as session:
                async with session.request(method, url=url, json=payload, params=params) as resp:
                    ret_resp = Response()
                    ret_resp.status_code = resp.status
                    ret_resp.error_type = resp.reason
                    ret_resp._content = await resp.read()
                    
                    return ret_resp

        tasks = []
        for i in range(0,limit,100):
            new_params = params.copy()
            new_params['limit'] = 100
            new_params['offset'] = i
            tasks.append(self.acall(summary, params=new_params))


        resps = await asyncio.gather(*tasks)
        resps_json = [resp.json() for resp in resps]
        results = []
        for resp in resps_json:
            if 'results' in resp:
                #print(f"There are {len(resp['results'])} results in this response")
                results.extend(resp['results'])
                #print(len(results))
        
        if len(results) > limit:
            resp = {'results':results[:limit]}
            params['offset'] = limit
            resp['paging'] = {'nextPage': f'{url}?{urllib.parse.urlencode(params)}'}
        else:
            resp = {'results':results}

        ret_resp = Response()
        ret_resp.status_code = 200
        ret_resp._content = json.dumps(resp).encode('utf-8')
        return ret_resp
Beispiel #16
0
    def test_result_fail(self):
        # generate intended response object
        expected_response = Response()
        expected_response.code = "expired"
        expected_response.error_type = "expired"
        expected_response.status_code = 400
        expected_response._content = b'{ "error" : "Can not connect to API" }'

        objectified_response = ApiResult(expected_response)

        # check values of objects are equal
        self.assertEqual(ApiCall().get_result("").error_message,
                         objectified_response.error_message)
        self.assertEqual(ApiCall().get_result("").result,
                         objectified_response.result)
        self.assertEqual(ApiCall().get_result("").is_success,
                         objectified_response.is_success)
Beispiel #17
0
from requests.models import Response

resp = Response()
resp.code = "expired"
resp.error_type = "expired"
resp.status_code = 200
resp._content = b'["Under-Review","IGO-Complete","Passed","Failed","Resequence-Pool","Repool-Sample","Recapture-Sample","New-Library-Needed","Required-Additional-Reads"]'
Beispiel #18
0
def create_dummy_response(response_code=None, error=None):
    dummy_response = Response()
    dummy_response.status_code = response_code
    dummy_response.error_type = error
    return dummy_response