def send_request_data(rendered_data):
    """ Helper that sends a request's rendered data to the server
    and parses its response.

    @param rendered_data: The data to send to the server
    @type  rendered_data: Str

    @return: The response from the server
    @rtype : HttpResponse

    """
    # Set max retries and retry sleep time to be used in case
    # a status code from the retry list is encountered.
    MAX_RETRIES = 5
    RETRY_SLEEP_SEC = 5
    RETRY_CODES = ['409', '429']

    num_retries = 0
    while num_retries < MAX_RETRIES:
        try:
            # Establish connection to server
            sock = HttpSock(Settings().connection_settings)
        except TransportLayerException as error:
            _RAW_LOGGING(str(error))
            return HttpResponse()

        # Send the request and receive the response
        success, response = sock.sendRecv(
            rendered_data,
            Settings().max_request_execution_time)

        status_code = response.status_code

        if status_code and status_code in RESTLER_BUG_CODES:
            return response

        if not success or not status_code:
            _RAW_LOGGING(response.to_str)
            return HttpResponse()

        if status_code in RETRY_CODES:
            time.sleep(RETRY_SLEEP_SEC)
            num_retries += 1
            if num_retries < MAX_RETRIES:
                _RAW_LOGGING("Retrying request")
                continue
            else:
                return response

        return response
 def _500(self, message="") -> HttpResponse:
     response_str = self._get_response_str(
         '500',
         description='Internal Server Error',
         body={
             "code": "InternalServerError",
             "message": message
         })
     return HttpResponse(response_str)
 def _405(self, method) -> HttpResponse:
     response_str = self._get_response_str(
         '405',
         description='Method Not Allowed',
         body={"error": f"Method, {method}, not supported"})
     return HttpResponse(response_str)
 def _403(self) -> HttpResponse:
     response_str = self._get_response_str(
         '403',
         description='Forbidden',
         body={"User not authorized or no auth token specified."})
     return HttpResponse(response_str)
 def _404(self, dyn_object="") -> HttpResponse:
     response_str = self._get_response_str('404',
                                           description="Not Found",
                                           body={"Resource": dyn_object})
     return HttpResponse(response_str)
 def _400(self, message) -> HttpResponse:
     response_str = self._get_response_str('400',
                                           description='Bad Request',
                                           body={"error": message})
     return HttpResponse(response_str)
 def _202(self, body: dict) -> HttpResponse:
     response_str = self._get_response_str('202',
                                           description='Accepted',
                                           body=body)
     return HttpResponse(response_str)
 def _201(self, body: dict) -> HttpResponse:
     response_str = self._get_response_str('201',
                                           description='Created',
                                           body=body)
     return HttpResponse(response_str)
 def _200(self, body: dict) -> HttpResponse:
     response_str = self._get_response_str('200',
                                           description='OK',
                                           body=body)
     return HttpResponse(response_str)
    def test_custom_non_bug_codes(self):
        user_args = {"custom_non_bug_codes": ["200", "4?4", "3*"]}
        try:
            settings = RestlerSettings(user_args)
            settings.validate_options()
        except:
            assert False

        response200 = HttpResponse('HTTP/1.1 200 response')
        response201 = HttpResponse('HTTP/1.1 201 response')
        response400 = HttpResponse('HTTP/1.1 400 response')
        response404 = HttpResponse('HTTP/1.1 404 response')
        response414 = HttpResponse('HTTP/1.1 414 response')
        response300 = HttpResponse('HTTP/1.1 300 response')
        response301 = HttpResponse('HTTP/1.1 301 response')
        response500 = HttpResponse('HTTP/1.1 500 response')

        self.assertFalse(response200.has_bug_code())
        self.assertTrue(response201.has_bug_code())
        self.assertTrue(response400.has_bug_code())
        self.assertFalse(response404.has_bug_code())
        self.assertFalse(response414.has_bug_code())
        self.assertFalse(response300.has_bug_code())
        self.assertFalse(response301.has_bug_code())
        self.assertTrue(response500.has_bug_code())

        settings.TEST_DeleteInstance()

        user_args["custom_non_bug_codes"].append("500")
        try:
            settings = RestlerSettings(user_args)
            settings.validate_options()
        except:
            assert False

        self.assertFalse(response500.has_bug_code())