Exemplo n.º 1
0
    def post(self, method, data, retries=None, stream=False):
        '''
        Performs POST request to server with given parameters. Raise error if can not connect to server.
        :param method: str
        :param data: dict
        :param retries: int (number of attempts to access the server)
        :param stream: bool
        :return: Request class object
        '''
        if retries is None:
            retries = self.retry_count

        for retry_idx in range(retries):
            url = self.server_address + '/public/api/v3/' + method
            response = None
            try:
                if type(data) is bytes:
                    response = requests.post(url,
                                             data=data,
                                             headers=self.headers,
                                             stream=stream)
                elif type(data) is MultipartEncoderMonitor or type(
                        data) is MultipartEncoder:
                    response = requests.post(
                        url,
                        data=data,
                        headers={
                            **self.headers, 'Content-Type': data.content_type
                        },
                        stream=stream)
                else:
                    json_body = data
                    if type(data) is dict:
                        json_body = {**data, **self.additional_fields}
                    response = requests.post(url,
                                             json=json_body,
                                             headers=self.headers,
                                             stream=stream)

                if response.status_code != requests.codes.ok:
                    Api._raise_for_status(response)
                return response
            except requests.RequestException as exc:
                process_requests_exception(self.logger,
                                           exc,
                                           method,
                                           url,
                                           verbose=True,
                                           swallow_exc=True,
                                           sleep_sec=self.retry_sleep_sec,
                                           response=response,
                                           retry_info={
                                               "retry_idx": retry_idx + 1,
                                               "retry_limit": retries
                                           })
            except Exception as exc:
                process_unhandled_request(self.logger, exc)
        raise requests.exceptions.RetryError(
            "Retry limit exceeded ({!r})".format(url))
Exemplo n.º 2
0
    def get(self,
            method,
            params,
            retries=None,
            stream=False,
            use_public_api=True):
        '''
        Performs GET request to server with given parameters. Raise error if can not connect to server.
        :param method: str
        :param params: dict
        :param retries: int (number of attempts to access the server)
        :param stream: bool
        :param use_public_api: bool
        :return: Request class object
        '''
        if retries is None:
            retries = self.retry_count

        for retry_idx in range(retries):
            url = self.server_address + '/public/api/v3/' + method
            if use_public_api is False:
                url = os.path.join(self.server_address, method)
            response = None
            try:
                json_body = params
                if type(params) is dict:
                    json_body = {**params, **self.additional_fields}
                response = requests.get(url,
                                        params=json_body,
                                        headers=self.headers,
                                        stream=stream)

                if response.status_code != requests.codes.ok:
                    Api._raise_for_status(response)
                return response
            except requests.RequestException as exc:
                process_requests_exception(self.logger,
                                           exc,
                                           method,
                                           url,
                                           verbose=True,
                                           swallow_exc=True,
                                           sleep_sec=self.retry_sleep_sec,
                                           response=response,
                                           retry_info={
                                               "retry_idx": retry_idx + 2,
                                               "retry_limit": retries
                                           })
            except Exception as exc:
                process_unhandled_request(self.logger, exc)
Exemplo n.º 3
0
    def post(self, method, data, retries=None, stream=False):
        if retries is None:
            retries = self.retry_count

        for retry_idx in range(retries):
            url = self.server_address + '/public/api/v3/' + method
            response = None
            try:
                if type(data) is bytes:
                    response = requests.post(url,
                                             data=data,
                                             headers=self.headers,
                                             stream=stream)
                elif type(data) is MultipartEncoderMonitor or type(
                        data) is MultipartEncoder:
                    response = requests.post(
                        url,
                        data=data,
                        headers={
                            **self.headers, 'Content-Type': data.content_type
                        },
                        stream=stream)
                else:
                    json_body = data
                    if type(data) is dict:
                        json_body = {**data, **self.additional_fields}
                    response = requests.post(url,
                                             json=json_body,
                                             headers=self.headers,
                                             stream=stream)

                if response.status_code != requests.codes.ok:
                    Api._raise_for_status(response)
                return response
            except requests.RequestException as exc:
                process_requests_exception(self.logger,
                                           exc,
                                           method,
                                           url,
                                           verbose=True,
                                           swallow_exc=True,
                                           sleep_sec=self.retry_sleep_sec,
                                           response=response,
                                           retry_info={
                                               "retry_idx": retry_idx + 2,
                                               "retry_limit": retries
                                           })
            except Exception as exc:
                process_unhandled_request(self.logger, exc)
        Api._raise_for_status(response)
Exemplo n.º 4
0
    def _send_request(self, api_method_name, request_data, timeout, in_stream, addit_headers):
        url = os.path.join(self.server_address, api_method_name)
        if not addit_headers:
            addit_headers = {}
        cur_header = {**self.headers, **addit_headers}
        not_log_request = api_method_name != 'Log'
        server_reply = None
        try:
            server_reply = requests.post(url, headers=cur_header, data=request_data, stream=in_stream, timeout=timeout)
            server_reply.raise_for_status()
        except requests.RequestException as exc:
            process_requests_exception(self.logger, exc, api_method_name, url,
                                       verbose=not_log_request, swallow_exc=False, response=server_reply)
        except Exception as exc:
            process_unhandled_request(self.logger, exc)

        return server_reply
Exemplo n.º 5
0
    def get(self,
            method,
            params,
            retries=None,
            stream=False,
            use_public_api=True):
        if retries is None:
            retries = self.retry_count

        for retry_idx in range(retries):
            url = self.server_address + '/public/api/v3/' + method
            if use_public_api is False:
                url = os.path.join(self.server_address, method)
            response = None
            try:
                json_body = params
                if type(params) is dict:
                    json_body = {**params, **self.additional_fields}
                response = requests.get(url,
                                        params=json_body,
                                        headers=self.headers,
                                        stream=stream)

                if response.status_code != requests.codes.ok:
                    Api._raise_for_status(response)
                return response
            except requests.RequestException as exc:
                process_requests_exception(self.logger,
                                           exc,
                                           method,
                                           url,
                                           verbose=True,
                                           swallow_exc=True,
                                           sleep_sec=self.retry_sleep_sec,
                                           response=response,
                                           retry_info={
                                               "retry_idx": retry_idx + 2,
                                               "retry_limit": retries
                                           })
            except Exception as exc:
                process_unhandled_request(self.logger, exc)