def stringify_body(meta_data, request_or_response): headers = meta_data['{}_headers'.format(request_or_response)] body = meta_data.get('{}_body'.format(request_or_response)) if isinstance(body, CaseInsensitiveDict): body = json.dumps(dict(body), ensure_ascii=False) elif isinstance(body, (dict, list)): body = json.dumps(body, indent=2, ensure_ascii=False) elif isinstance(body, bytes): resp_content_type = headers.get("Content-Type", "") try: if "image" in resp_content_type: meta_data["response_data_type"] = "image" body = "data:{};base64,{}".format( resp_content_type, b64encode(body).decode('utf-8') ) else: body = escape(body.decode("utf-8")) except UnicodeDecodeError: pass elif not isinstance(body, (basestring, numeric_types, Iterable)): # class instance, e.g. MultipartEncoder() body = repr(body) meta_data['{}_body'.format(request_or_response)] = body
def stringify_body(meta_data, request_or_response): headers = meta_data['{}_headers'.format(request_or_response)] body = meta_data.get('{}_body'.format(request_or_response)) if isinstance(body, CaseInsensitiveDict): body = json.dumps(dict(body), ensure_ascii=False) elif isinstance(body, (dict, list)): body = json.dumps(body, indent=2, ensure_ascii=False) elif isinstance(body, bytes): resp_content_type = headers.get("Content-Type", "") try: if "image" in resp_content_type: meta_data["response_data_type"] = "image" body = "data:{};base64,{}".format( resp_content_type, b64encode(body).decode('utf-8')) else: body = escape(body.decode("utf-8")) except UnicodeDecodeError: pass elif not isinstance(body, (basestring, numeric_types, Iterable)): # class instance, e.g. MultipartEncoder() body = repr(body) meta_data['{}_body'.format(request_or_response)] = body
def stringify_data(meta_data, request_or_response): headers = meta_data[request_or_response]["headers"] request_or_response_dict = meta_data[request_or_response] for key, value in request_or_response_dict.items(): if isinstance(value, list): value = json.dumps(value, indent=2, ensure_ascii=False) elif isinstance(value, bytes): try: encoding = meta_data["response"].get("encoding") if not encoding or encoding == "None": encoding = "utf-8" content_type = meta_data["response"]["content_type"] if "image" in content_type: meta_data["response"]["content_type"] = "image" value = "data:{};base64,{}".format( content_type, b64encode(value).decode(encoding) ) else: value = escape(value.decode(encoding)) except UnicodeDecodeError: pass elif not isinstance(value, (basestring, numeric_types, Iterable)): # class instance, e.g. MultipartEncoder() value = repr(value) meta_data[request_or_response][key] = value
def __stringify_response(response_data): """ stringfy HTTP response data Args: response_data (dict): { "status_code": 404, "headers": { "Content-Type": "application/json", "Content-Length": "30", "Server": "Werkzeug/0.14.1 Python/3.7.0", "Date": "Tue, 27 Nov 2018 06:19:27 GMT" }, "encoding": "None", "content_type": "application/json", "ok": false, "url": "http://127.0.0.1:5000/api/users/9001", "reason": "NOT FOUND", "cookies": {}, "json": { "success": false, "data": {} } } """ for key, value in response_data.items(): if isinstance(value, list): value = json.dumps(value, indent=2, ensure_ascii=False) elif isinstance(value, bytes): try: encoding = response_data.get("encoding") if not encoding or encoding == "None": encoding = "utf-8" if key == "content" and "image" in response_data["content_type"]: # display image value = "data:{};base64,{}".format( response_data["content_type"], b64encode(value).decode(encoding) ) else: value = escape(value.decode(encoding)) except UnicodeDecodeError: pass elif not isinstance(value, (basestring, numeric_types, Iterable)): # class instance, e.g. MultipartEncoder() value = repr(value) elif isinstance(value, requests.cookies.RequestsCookieJar): value = value.get_dict() response_data[key] = value
def dumps_json(value): """ dumps json value to indented string Args: value (dict): raw json data Returns: str: indented json dump string """ return json.dumps(value, indent=2, ensure_ascii=False)
def __stringify_request(request_data): """ stringfy HTTP request data Args: request_data (dict): HTTP request data in dict. { "url": "http://127.0.0.1:5000/api/get-token", "method": "POST", "headers": { "User-Agent": "python-requests/2.20.0", "Accept-Encoding": "gzip, deflate", "Accept": "*/*", "Connection": "keep-alive", "user_agent": "iOS/10.3", "device_sn": "TESTCASE_CREATE_XXX", "os_platform": "ios", "app_version": "2.8.6", "Content-Type": "application/json", "Content-Length": "52" }, "json": { "sign": "cb9d60acd09080ea66c8e63a1c78c6459ea00168" }, "verify": false } """ for key, value in request_data.items(): if isinstance(value, list): value = json.dumps(value, indent=2, ensure_ascii=False) elif isinstance(value, bytes): try: encoding = "utf-8" value = escape(value.decode(encoding)) except UnicodeDecodeError: pass elif not isinstance(value, (basestring, numeric_types, Iterable)): # class instance, e.g. MultipartEncoder() value = repr(value) elif isinstance(value, requests.cookies.RequestsCookieJar): value = value.get_dict() request_data[key] = value
def make_json_serializable(raw_json): serializable_json = {} for key, value in raw_json.items(): if isinstance(value, bytes): value = value.decode("utf-8") elif isinstance(value, CaseInsensitiveDict): value = dict(value) elif not isinstance(value, (basestring, numeric_types, Iterable)): # class instance, e.g. MultipartEncoder() value = repr(value) serializable_json[key] = value keyorder = [ "url", "method", "request_headers", "request_body", "request_time", "status_code", "response_headers", "response_body", "content_size", "response_time(ms)", "elapsed(ms)" ] serializable_ordered_json = OrderedDict( sorted(serializable_json.items(), key=lambda x: keyorder.index(x[0]))) return json.dumps(serializable_ordered_json, indent=2, ensure_ascii=False)