Best Python code snippet using localstack_python
endpoint.py
Source:endpoint.py
...241 # they currently have no reference to the operation or service model242 # The parsers should probably take the operation model instead of243 # output shape but we can't change that now244 if http_response.status_code >= 300:245 self._add_modeled_error_fields(246 response_dict, parsed_response,247 operation_model, parser,248 )249 history_recorder.record('PARSED_RESPONSE', parsed_response)250 return (http_response, parsed_response), None251 def _add_modeled_error_fields(252 self, response_dict, parsed_response,253 operation_model, parser,254 ):255 error_code = parsed_response.get("Error", {}).get("Code")256 if error_code is None:257 return258 service_model = operation_model.service_model259 error_shape = service_model.shape_for_error_code(error_code)260 if error_shape is None:261 return262 modeled_parse = parser.parse(response_dict, error_shape)263 # TODO: avoid naming conflicts with ResponseMetadata and Error264 parsed_response.update(modeled_parse)265 def _needs_retry(self, attempts, operation_model, request_dict,...
client.py
Source:client.py
...45 def stream(self) -> Iterable[bytes]:46 return self.iterator47 def close(self):48 pass49def _add_modeled_error_fields(50 response_dict: Dict,51 parsed_response: Dict,52 operation_model: OperationModel,53 parser: ResponseParser,54):55 """56 This function adds additional error shape members (other than message, code, and type) to an already parsed error57 response dict.58 Port of botocore's Endpoint#_add_modeled_error_fields.59 """60 error_code = parsed_response.get("Error", {}).get("Code")61 if error_code is None:62 return63 service_model = operation_model.service_model64 error_shape = service_model.shape_for_error_code(error_code)65 if error_shape is None:66 return67 modeled_parse = parser.parse(response_dict, error_shape)68 parsed_response.update(modeled_parse)69def _cbor_timestamp_parser(value):70 return datetime.fromtimestamp(value / 1000)71def _cbor_blob_parser(value):72 return bytes(value)73@hooks.on_infra_start()74def _patch_botocore_json_parser():75 from botocore.parsers import BaseJSONParser76 @patch(BaseJSONParser._parse_body_as_json)77 def _parse_body_as_json(fn, self, body_contents):78 """79 botocore does not support CBOR encoded response parsing. Since we use the botocore parsers80 to parse responses from external backends (like kinesalite), we need to patch botocore to81 try CBOR decoding in case the JSON decoding fails.82 """83 try:84 return fn(self, body_contents)85 except UnicodeDecodeError as json_exception:86 import cbor287 try:88 LOG.debug("botocore failed decoding JSON. Trying to decode as CBOR.")89 return cbor2.loads(body_contents)90 except Exception as cbor_exception:91 LOG.debug("CBOR fallback decoding failed.")92 raise cbor_exception from json_exception93def parse_response(94 operation: OperationModel, response: Response, include_response_metadata: bool = True95) -> ServiceResponse:96 """97 Parses an HTTP Response object into an AWS response object using botocore. It does this by adapting the98 procedure of ``botocore.endpoint.convert_to_response_dict`` to work with Werkzeug's server-side response object.99 :param operation: the operation of the original request100 :param response: the HTTP response object containing the response of the operation101 :param include_response_metadata: True if the ResponseMetadata (typical for boto response dicts) should be included102 :return: a parsed dictionary as it is returned by botocore103 """104 # this is what botocore.endpoint.convert_to_response_dict normally does105 response_dict = {106 "headers": dict(response.headers.items()), # boto doesn't like werkzeug headers107 "status_code": response.status_code,108 "context": {109 "operation_name": operation.name,110 },111 }112 if response_dict["status_code"] >= 301:113 response_dict["body"] = response.data114 elif operation.has_event_stream_output:115 # TODO test this116 response_dict["body"] = _RawStream(response)117 elif operation.has_streaming_output:118 # for s3.GetObject for example, the Body attribute is actually a stream, not the raw bytes value119 response_dict["body"] = _ResponseStream(response)120 else:121 response_dict["body"] = response.data122 factory = ResponseParserFactory()123 if response.content_type and response.content_type.startswith("application/x-amz-cbor"):124 # botocore cannot handle CBOR encoded responses (because it never sends them), we need to modify the parser125 factory.set_parser_defaults(126 timestamp_parser=_cbor_timestamp_parser, blob_parser=_cbor_blob_parser127 )128 parser = factory.create_parser(operation.service_model.protocol)129 parsed_response = parser.parse(response_dict, operation.output_shape)130 if response.status_code >= 301:131 # Add possible additional error shape members132 _add_modeled_error_fields(response_dict, parsed_response, operation, parser)133 if not include_response_metadata:134 parsed_response.pop("ResponseMetadata", None)135 return parsed_response136def parse_service_exception(137 response: Response, parsed_response: Dict138) -> Optional[ServiceException]:139 """140 Creates a ServiceException (one ASF can handle) from a parsed response (one that botocore would return).141 It does not automatically raise the exception (see #raise_service_exception).142 :param response: Un-parsed response143 :param parsed_response: Parsed response144 :return: ServiceException or None (if it's not an error response)145 """146 if response.status_code < 301 or "Error" not in parsed_response:...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!