)]}'
{"tempest/lib/services/network/base.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"ec3ba90820c9011a1e5068965b30b38105d91080","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        req_uri \u003d self.uri_prefix + uri"},{"line_number":68,"context_line":"        req_post_data \u003d json.dumps(post_data)"},{"line_number":69,"context_line":"        resp, body \u003d self.put(req_uri, req_post_data)"},{"line_number":70,"context_line":"        body \u003d json.loads(body)"},{"line_number":71,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":72,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_aed29732","line":70,"range":{"start_line":70,"start_character":8,"end_line":70,"end_character":31},"updated":"2016-06-04 01:23:36.000000000","message":"or do we need to do the same change here?","commit_id":"6adfb6adb3d0f4f522f1f43537e020a54f2b74ea"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"a71f5108e05a64ed70672d320e5578a3c07ab4b4","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        req_uri \u003d self.uri_prefix + uri"},{"line_number":68,"context_line":"        req_post_data \u003d json.dumps(post_data)"},{"line_number":69,"context_line":"        resp, body \u003d self.put(req_uri, req_post_data)"},{"line_number":70,"context_line":"        body \u003d json.loads(body)"},{"line_number":71,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":72,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_2a509bd3","line":70,"range":{"start_line":70,"start_character":8,"end_line":70,"end_character":31},"in_reply_to":"7aa08908_aed29732","updated":"2016-07-21 07:37:11.000000000","message":"Yes. The check is needed here as well.","commit_id":"6adfb6adb3d0f4f522f1f43537e020a54f2b74ea"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"e5e182ecdcf2cab7cf24f3b2e189074dc54c579b","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        req_uri \u003d self.uri_prefix + uri"},{"line_number":59,"context_line":"        req_post_data \u003d json.dumps(post_data)"},{"line_number":60,"context_line":"        resp, body \u003d self.post(req_uri, req_post_data)"},{"line_number":61,"context_line":"        if body:"},{"line_number":62,"context_line":"            body \u003d json.loads(body)"},{"line_number":63,"context_line":"        self.expected_success(201, resp.status)"},{"line_number":64,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_06076f82","line":61,"range":{"start_line":61,"start_character":8,"end_line":61,"end_character":16},"updated":"2016-07-21 17:55:46.000000000","message":"How about coding here like\n\n if body is not None:\n\nto converting \"{}\" to {}?","commit_id":"92c2917563c832ed0865e3db40602f1a21ffd61f"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"4c09f39f26d9956adab8a3723c0adf05d08e5605","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        req_uri \u003d self.uri_prefix + uri"},{"line_number":59,"context_line":"        req_post_data \u003d json.dumps(post_data)"},{"line_number":60,"context_line":"        resp, body \u003d self.post(req_uri, req_post_data)"},{"line_number":61,"context_line":"        if body:"},{"line_number":62,"context_line":"            body \u003d json.loads(body)"},{"line_number":63,"context_line":"        self.expected_success(201, resp.status)"},{"line_number":64,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_86b23f4a","line":61,"updated":"2016-07-21 17:43:46.000000000","message":"if the expected response is 201, shouldn\u0027t we expect a body [1]? I would think so.\n\n[1] https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.5","commit_id":"92c2917563c832ed0865e3db40602f1a21ffd61f"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"e2a46f3c4cfd32105fb458bbccb13c228fd26d73","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        req_uri \u003d self.uri_prefix + uri"},{"line_number":59,"context_line":"        req_post_data \u003d json.dumps(post_data)"},{"line_number":60,"context_line":"        resp, body \u003d self.post(req_uri, req_post_data)"},{"line_number":61,"context_line":"        if body:"},{"line_number":62,"context_line":"            body \u003d json.loads(body)"},{"line_number":63,"context_line":"        self.expected_success(201, resp.status)"},{"line_number":64,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_e659feff","line":61,"in_reply_to":"bacf61ea_05dee810","updated":"2016-07-29 06:00:16.000000000","message":"@Akihiro: Thanks. I think so.\n\n@Ohmichi: The body is not None but \"\" in current issue. It\u0027s empty string so current code is the best.","commit_id":"92c2917563c832ed0865e3db40602f1a21ffd61f"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"31a37c932a3e19f323bfdc3be6a0c11579b3f8a0","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        req_uri \u003d self.uri_prefix + uri"},{"line_number":59,"context_line":"        req_post_data \u003d json.dumps(post_data)"},{"line_number":60,"context_line":"        resp, body \u003d self.post(req_uri, req_post_data)"},{"line_number":61,"context_line":"        if body:"},{"line_number":62,"context_line":"            body \u003d json.loads(body)"},{"line_number":63,"context_line":"        self.expected_success(201, resp.status)"},{"line_number":64,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_19a19046","line":61,"in_reply_to":"bacf61ea_0f2f9488","updated":"2016-08-02 02:38:08.000000000","message":"Done","commit_id":"92c2917563c832ed0865e3db40602f1a21ffd61f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"69304e0a5fef136aed1dd759ecb316a216c272ee","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        req_uri \u003d self.uri_prefix + uri"},{"line_number":59,"context_line":"        req_post_data \u003d json.dumps(post_data)"},{"line_number":60,"context_line":"        resp, body \u003d self.post(req_uri, req_post_data)"},{"line_number":61,"context_line":"        if body:"},{"line_number":62,"context_line":"            body \u003d json.loads(body)"},{"line_number":63,"context_line":"        self.expected_success(201, resp.status)"},{"line_number":64,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_32e909b8","line":61,"in_reply_to":"bacf61ea_19a19046","updated":"2016-08-02 04:50:47.000000000","message":"I think we should be very explicit here about expected expty body or not.\n\nSome APIs return empty body and some do not so if we allow this check in this common function then, we cannot detect if any API (expected to return body) start returning the empty body and cause backward incompatible behavior. \n\nTo have strict validation here for all case, this function should take param (expect_empty_body) saying that body can be empty or not and load it in json accordingly.\n\nDefault this param to false and explicitly pass true for case where body can be empty. \n\nThis way we can tests API strictly.","commit_id":"92c2917563c832ed0865e3db40602f1a21ffd61f"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"415ffc3ae08c1deda793dab1b010c47cfb615676","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        req_uri \u003d self.uri_prefix + uri"},{"line_number":59,"context_line":"        req_post_data \u003d json.dumps(post_data)"},{"line_number":60,"context_line":"        resp, body \u003d self.post(req_uri, req_post_data)"},{"line_number":61,"context_line":"        if body:"},{"line_number":62,"context_line":"            body \u003d json.loads(body)"},{"line_number":63,"context_line":"        self.expected_success(201, resp.status)"},{"line_number":64,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_82fd00b3","line":61,"in_reply_to":"bacf61ea_32e909b8","updated":"2016-08-02 08:30:44.000000000","message":"Why does tempest need to detect it here? If the API test need to detect it, it can be done in their tests. This check never change the body and this method just returns it to caller. If any API (expected to return body) returns the empty body, the API test accepts empty body and detects the error.","commit_id":"92c2917563c832ed0865e3db40602f1a21ffd61f"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e5094e251bc591f0f825b9f4a9175edd140564a0","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        req_uri \u003d self.uri_prefix + uri"},{"line_number":59,"context_line":"        req_post_data \u003d json.dumps(post_data)"},{"line_number":60,"context_line":"        resp, body \u003d self.post(req_uri, req_post_data)"},{"line_number":61,"context_line":"        if body:"},{"line_number":62,"context_line":"            body \u003d json.loads(body)"},{"line_number":63,"context_line":"        self.expected_success(201, resp.status)"},{"line_number":64,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_9d2eeff8","line":61,"in_reply_to":"bacf61ea_82fd00b3","updated":"2016-08-02 13:49:15.000000000","message":"I think It is now up to the policy of the tempest team.\n\nI think we have two options:\n\n- The one option is to depend on the API test which checks the return value. This is what Hirofumi mentioned above.\n- The other option is to add some argument which indicates whether the API returns a valid JSON body or an empty content. tempst.lib can check the expected body.\n\n@Ghanshyam, Ken thought?","commit_id":"92c2917563c832ed0865e3db40602f1a21ffd61f"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"a77064203f5e4b47589c85e5b9e103de63cc3429","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        req_uri \u003d self.uri_prefix + uri"},{"line_number":59,"context_line":"        req_post_data \u003d json.dumps(post_data)"},{"line_number":60,"context_line":"        resp, body \u003d self.post(req_uri, req_post_data)"},{"line_number":61,"context_line":"        if body:"},{"line_number":62,"context_line":"            body \u003d json.loads(body)"},{"line_number":63,"context_line":"        self.expected_success(201, resp.status)"},{"line_number":64,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_6312795a","line":61,"in_reply_to":"bacf61ea_9d2eeff8","updated":"2016-08-02 14:51:01.000000000","message":"@Akihiro: That\u0027s right. Thank you for your help.","commit_id":"92c2917563c832ed0865e3db40602f1a21ffd61f"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"52e0223fc27e3277edada656f6eb10d4ccc87bbc","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        req_uri \u003d self.uri_prefix + uri"},{"line_number":59,"context_line":"        req_post_data \u003d json.dumps(post_data)"},{"line_number":60,"context_line":"        resp, body \u003d self.post(req_uri, req_post_data)"},{"line_number":61,"context_line":"        if body:"},{"line_number":62,"context_line":"            body \u003d json.loads(body)"},{"line_number":63,"context_line":"        self.expected_success(201, resp.status)"},{"line_number":64,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_05dee810","line":61,"in_reply_to":"bacf61ea_af90cb96","updated":"2016-07-28 16:07:37.000000000","message":"After following the above comments, I think the discussion point is whether we allow a fallback behavior (try-except or others) or we should specify more strict behavior (e.g., via a parameter).\n\nIf it is a usual client, a fall-back behavior sounds good, but a tempest client is for testing, I would like to know the stance of tempest library from the tempest team.","commit_id":"92c2917563c832ed0865e3db40602f1a21ffd61f"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f461f4b9e8556eefd6244b94703a4550cea12f0a","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        req_uri \u003d self.uri_prefix + uri"},{"line_number":59,"context_line":"        req_post_data \u003d json.dumps(post_data)"},{"line_number":60,"context_line":"        resp, body \u003d self.post(req_uri, req_post_data)"},{"line_number":61,"context_line":"        if body:"},{"line_number":62,"context_line":"            body \u003d json.loads(body)"},{"line_number":63,"context_line":"        self.expected_success(201, resp.status)"},{"line_number":64,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_0f2f9488","line":61,"in_reply_to":"bacf61ea_e659feff","updated":"2016-08-01 18:30:11.000000000","message":"Thanks for your response, Hirofumi.\nI see, so it would be nice to write it as NOTE here to avoid misunderstanding like me ;)","commit_id":"92c2917563c832ed0865e3db40602f1a21ffd61f"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"a789dde41ac3315c5075de05075658cca0db4668","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        req_uri \u003d self.uri_prefix + uri"},{"line_number":59,"context_line":"        req_post_data \u003d json.dumps(post_data)"},{"line_number":60,"context_line":"        resp, body \u003d self.post(req_uri, req_post_data)"},{"line_number":61,"context_line":"        if body:"},{"line_number":62,"context_line":"            body \u003d json.loads(body)"},{"line_number":63,"context_line":"        self.expected_success(201, resp.status)"},{"line_number":64,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_ef08fadb","line":61,"in_reply_to":"dada55a8_403f7eb3","updated":"2016-07-22 15:45:40.000000000","message":"RFC is just a generalization. Actually we have both cases, which are API(status 201 and a response body) and another API(status 201 and no response body).\n\n\n@Ohmichi: I\u0027m not sure what you suggested. When response body is \u0027\u0027, \u0027if body is not None\u0027 passes it and then json.loads() causes error. And also \u0027if body\u0027 passes \"{}\" as you intend.","commit_id":"92c2917563c832ed0865e3db40602f1a21ffd61f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"aa6203ba3b61ee5cf57da5fa652ce05e8ca367fb","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        req_uri \u003d self.uri_prefix + uri"},{"line_number":59,"context_line":"        req_post_data \u003d json.dumps(post_data)"},{"line_number":60,"context_line":"        resp, body \u003d self.post(req_uri, req_post_data)"},{"line_number":61,"context_line":"        if body:"},{"line_number":62,"context_line":"            body \u003d json.loads(body)"},{"line_number":63,"context_line":"        self.expected_success(201, resp.status)"},{"line_number":64,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_403f7eb3","line":61,"in_reply_to":"dada55a8_6652ab68","updated":"2016-07-22 00:27:21.000000000","message":"Actually there might be case where 201 does not return body as in dhcp-agent-network-add. \n\nProblem here is we have common base method doing all this checking very generically. \n\nI think we should take param in this method which states explicitly that it expect empty body and not to do json.load\n\nWwith that\n - we can handle situation for exceptional APIs where body is empty for 201/200(special cases)\n - Strict verification for other APIs where body is must for 201/200","commit_id":"92c2917563c832ed0865e3db40602f1a21ffd61f"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"e82545d3927859981b7b18730adb7898544df302","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        req_uri \u003d self.uri_prefix + uri"},{"line_number":59,"context_line":"        req_post_data \u003d json.dumps(post_data)"},{"line_number":60,"context_line":"        resp, body \u003d self.post(req_uri, req_post_data)"},{"line_number":61,"context_line":"        if body:"},{"line_number":62,"context_line":"            body \u003d json.loads(body)"},{"line_number":63,"context_line":"        self.expected_success(201, resp.status)"},{"line_number":64,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_af90cb96","line":61,"in_reply_to":"dada55a8_85567e04","updated":"2016-07-27 21:25:50.000000000","message":"I just wanted to clarify the json.loads() is skipped only if body is None on the code readability.\nand the above try-except seems gross for me.\n\nI am fine some APIs are against some RFCs because of just RFC(Request For Comments).","commit_id":"92c2917563c832ed0865e3db40602f1a21ffd61f"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"e5e182ecdcf2cab7cf24f3b2e189074dc54c579b","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        req_uri \u003d self.uri_prefix + uri"},{"line_number":59,"context_line":"        req_post_data \u003d json.dumps(post_data)"},{"line_number":60,"context_line":"        resp, body \u003d self.post(req_uri, req_post_data)"},{"line_number":61,"context_line":"        if body:"},{"line_number":62,"context_line":"            body \u003d json.loads(body)"},{"line_number":63,"context_line":"        self.expected_success(201, resp.status)"},{"line_number":64,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_6652ab68","line":61,"in_reply_to":"dada55a8_86b23f4a","updated":"2016-07-21 17:55:46.000000000","message":"humm, we *should* expect a body on 201, right?","commit_id":"92c2917563c832ed0865e3db40602f1a21ffd61f"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"de8d4226e1ddfe764e164477d5498471ac64a70e","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        req_uri \u003d self.uri_prefix + uri"},{"line_number":59,"context_line":"        req_post_data \u003d json.dumps(post_data)"},{"line_number":60,"context_line":"        resp, body \u003d self.post(req_uri, req_post_data)"},{"line_number":61,"context_line":"        if body:"},{"line_number":62,"context_line":"            body \u003d json.loads(body)"},{"line_number":63,"context_line":"        self.expected_success(201, resp.status)"},{"line_number":64,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_85567e04","line":61,"in_reply_to":"dada55a8_ef08fadb","updated":"2016-07-22 16:17:39.000000000","message":"Or the following?\n\n try:\n     body \u003d json.loads(body)\n except (ValueError, TypeError):\n     pass","commit_id":"92c2917563c832ed0865e3db40602f1a21ffd61f"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"e5e182ecdcf2cab7cf24f3b2e189074dc54c579b","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        req_uri \u003d self.uri_prefix + uri"},{"line_number":68,"context_line":"        req_post_data \u003d json.dumps(post_data)"},{"line_number":69,"context_line":"        resp, body \u003d self.put(req_uri, req_post_data)"},{"line_number":70,"context_line":"        if body:"},{"line_number":71,"context_line":"            body \u003d json.loads(body)"},{"line_number":72,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":73,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_a64823b4","line":70,"range":{"start_line":70,"start_character":8,"end_line":70,"end_character":16},"updated":"2016-07-21 17:55:46.000000000","message":"ditto","commit_id":"92c2917563c832ed0865e3db40602f1a21ffd61f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"69304e0a5fef136aed1dd759ecb316a216c272ee","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        req_uri \u003d self.uri_prefix + uri"},{"line_number":68,"context_line":"        req_post_data \u003d json.dumps(post_data)"},{"line_number":69,"context_line":"        resp, body \u003d self.put(req_uri, req_post_data)"},{"line_number":70,"context_line":"        if body:"},{"line_number":71,"context_line":"            body \u003d json.loads(body)"},{"line_number":72,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":73,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_92fb9578","line":70,"range":{"start_line":70,"start_character":8,"end_line":70,"end_character":16},"in_reply_to":"dada55a8_a64823b4","updated":"2016-08-02 04:50:47.000000000","message":"ditto","commit_id":"92c2917563c832ed0865e3db40602f1a21ffd61f"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"41ba7a6391a9c900b128644a5ee62b7547ec519e","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        req_uri \u003d self.uri_prefix + uri"},{"line_number":59,"context_line":"        req_post_data \u003d json.dumps(post_data)"},{"line_number":60,"context_line":"        resp, body \u003d self.post(req_uri, req_post_data)"},{"line_number":61,"context_line":"        # NOTE: Check empty string"},{"line_number":62,"context_line":"        if body:"},{"line_number":63,"context_line":"            body \u003d json.loads(body)"},{"line_number":64,"context_line":"        self.expected_success(201, resp.status)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_fdb44b83","line":61,"range":{"start_line":61,"start_character":16,"end_line":61,"end_character":34},"updated":"2016-08-02 13:53:21.000000000","message":"I would like to see more clear description. For example,\n\n RFC allows both a valid non-empty body and an empty body\n for 201 response code. If a body is not empty, we decode the body.\n Otherwise we returns an empty string.","commit_id":"976085f9c502aede4fb1f9dfef35ded1a4483572"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"889ee51ff4369e900f09e04b181a4faeb156c2b1","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        req_uri \u003d self.uri_prefix + uri"},{"line_number":59,"context_line":"        req_post_data \u003d json.dumps(post_data)"},{"line_number":60,"context_line":"        resp, body \u003d self.post(req_uri, req_post_data)"},{"line_number":61,"context_line":"        # NOTE: Check empty string"},{"line_number":62,"context_line":"        if body:"},{"line_number":63,"context_line":"            body \u003d json.loads(body)"},{"line_number":64,"context_line":"        self.expected_success(201, resp.status)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_d94b545e","line":61,"range":{"start_line":61,"start_character":16,"end_line":61,"end_character":34},"in_reply_to":"bacf61ea_fdb44b83","updated":"2016-08-02 15:16:04.000000000","message":"Nice! Done.","commit_id":"976085f9c502aede4fb1f9dfef35ded1a4483572"}]}
