)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"5a10baa8c00cd9e34ba138f4c69fa0b58f1b6637","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Chmouel Boudjnah \u003cchmouel@enovance.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-01-30 09:19:58 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Use python requests lib for all our http thingies"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Port heatclient to use python-requests."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"AAAAUH%2F92u4%3D","line":7,"updated":"2014-02-03 09:30:33.000000000","message":"Typo s/thingies/things","commit_id":"15aa1dac3a52bed88f884f1bcf91482d53e4e2ba"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"1b7c5c3fc6bf1000f457664999140161242eb7c2","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Chmouel Boudjnah \u003cchmouel@enovance.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-01-30 09:19:58 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Use python requests lib for all our http thingies"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Port heatclient to use python-requests."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"AAAAUH%2F9zO0%3D","line":7,"in_reply_to":"AAAAUH%2F92u4%3D","updated":"2014-02-03 20:05:28.000000000","message":"I don\u0027t think that it is a typo","commit_id":"15aa1dac3a52bed88f884f1bcf91482d53e4e2ba"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"d711f7a8ff436ca12c68724d88105c92ccb5da08","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Chmouel Boudjnah \u003cchmouel@enovance.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-01-30 09:19:58 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Use python requests lib for all our http thingies"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Port heatclient to use python-requests."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"AAAAUH%2F9h%2FU%3D","line":7,"in_reply_to":"AAAAUH%2F9wVI%3D","updated":"2014-02-06 09:09:25.000000000","message":"Sorry :)","commit_id":"15aa1dac3a52bed88f884f1bcf91482d53e4e2ba"},{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"f2f40bfcf559532a514c974db7e96abe7d592e29","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Chmouel Boudjnah \u003cchmouel@enovance.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-01-30 09:19:58 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Use python requests lib for all our http thingies"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Port heatclient to use python-requests."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"AAAAUH%2F9wVI%3D","line":7,"in_reply_to":"AAAAUH%2F9zO0%3D","updated":"2014-02-04 10:40:28.000000000","message":"Yep that\u0027s not a typo, I can change that if that\u0027s too confusing.","commit_id":"15aa1dac3a52bed88f884f1bcf91482d53e4e2ba"}],"heatclient/common/http.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"10c037ed788d649f0827f9695714ab7e62361a78","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        }"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        self.verify_cert \u003d None"},{"line_number":71,"context_line":"        if endpoint.startswith(\"https\"):"},{"line_number":72,"context_line":"            if kwargs.get(\u0027insecure\u0027):"},{"line_number":73,"context_line":"                self.verify_cert \u003d False"},{"line_number":74,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2BVsk%3D","line":71,"updated":"2014-01-27 21:48:24.000000000","message":"urlutils.urlparse(endpoint).scheme could be used dere","commit_id":"ac580d96549b14dd0ef895f53258da7677b64d80"},{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"2223e61f50a58ab3bbbfcbd4f1347d555daecfd3","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        }"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        self.verify_cert \u003d None"},{"line_number":71,"context_line":"        if endpoint.startswith(\"https\"):"},{"line_number":72,"context_line":"            if kwargs.get(\u0027insecure\u0027):"},{"line_number":73,"context_line":"                self.verify_cert \u003d False"},{"line_number":74,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2BK3Q%3D","line":71,"in_reply_to":"AAAAUH%2F%2BK4c%3D","updated":"2014-01-29 14:03:10.000000000","message":"sure, make sense.","commit_id":"ac580d96549b14dd0ef895f53258da7677b64d80"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"885478aad191a4217f51b9420bf16eec29474982","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        }"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        self.verify_cert \u003d None"},{"line_number":71,"context_line":"        if endpoint.startswith(\"https\"):"},{"line_number":72,"context_line":"            if kwargs.get(\u0027insecure\u0027):"},{"line_number":73,"context_line":"                self.verify_cert \u003d False"},{"line_number":74,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2BK4c%3D","line":71,"in_reply_to":"AAAAUH%2F%2BVqo%3D","updated":"2014-01-29 13:58:00.000000000","message":"It will be safer because urlparse method validates scheme. E.g.: user can\u0027t create endpoint with url \u0027  http://endpoint.example:9000\u0027","commit_id":"ac580d96549b14dd0ef895f53258da7677b64d80"},{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"7ed92976d5a2e15d54ff043b5e3ff4be291b528f","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        }"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        self.verify_cert \u003d None"},{"line_number":71,"context_line":"        if endpoint.startswith(\"https\"):"},{"line_number":72,"context_line":"            if kwargs.get(\u0027insecure\u0027):"},{"line_number":73,"context_line":"                self.verify_cert \u003d False"},{"line_number":74,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2BVqo%3D","line":71,"in_reply_to":"AAAAUH%2F%2BVsk%3D","updated":"2014-01-27 21:49:34.000000000","message":"do you think importing urlutils for that is worthwhile or safer?","commit_id":"ac580d96549b14dd0ef895f53258da7677b64d80"},{"author":{"_account_id":4330,"name":"Tomas Sedovic","email":"tsedovic@redhat.com","username":"tomas-8c8"},"change_message_id":"3e6deb6ed7a8cbe3956f25be711ede0c695a233a","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            (\u0027cert_file\u0027, \u0027--cert %s\u0027),"},{"line_number":87,"context_line":"            (\u0027ca_file\u0027, \u0027--cacert %s\u0027),"},{"line_number":88,"context_line":"        ]"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        for (key, fmt) in conn_params_fmt:"},{"line_number":91,"context_line":"            value \u003d self.ssl_connection_params.get(key)"},{"line_number":92,"context_line":"            if value:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F9wZI%3D","line":89,"updated":"2014-02-04 10:24:32.000000000","message":"I don\u0027t think the extra line here is necessary. But it\u0027s not something I\u0027d -1 a patch over.","commit_id":"15aa1dac3a52bed88f884f1bcf91482d53e4e2ba"},{"author":{"_account_id":4330,"name":"Tomas Sedovic","email":"tsedovic@redhat.com","username":"tomas-8c8"},"change_message_id":"3e6deb6ed7a8cbe3956f25be711ede0c695a233a","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        if self.ssl_connection_params.get(\u0027insecure\u0027):"},{"line_number":96,"context_line":"            curl.append(\u0027-k\u0027)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        if \u0027data\u0027 in kwargs:"},{"line_number":99,"context_line":"            curl.append(\u0027-d \\\u0027%s\\\u0027\u0027 % kwargs[\u0027data\u0027])"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        curl.append(\u0027%s%s\u0027 % (self.endpoint, url))"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F9wXM%3D","line":98,"updated":"2014-02-04 10:24:32.000000000","message":"Is there a reason to change `body` to `data`? I find the former much more descriptive in the HTTP context.\n\nData can mean anything whereas body has a very clear meaning when it comes to HTTP.","commit_id":"15aa1dac3a52bed88f884f1bcf91482d53e4e2ba"},{"author":{"_account_id":4330,"name":"Tomas Sedovic","email":"tsedovic@redhat.com","username":"tomas-8c8"},"change_message_id":"9abb5fecdb1fad0e333662c2fb5a74b3ae84bea9","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        if self.ssl_connection_params.get(\u0027insecure\u0027):"},{"line_number":96,"context_line":"            curl.append(\u0027-k\u0027)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        if \u0027data\u0027 in kwargs:"},{"line_number":99,"context_line":"            curl.append(\u0027-d \\\u0027%s\\\u0027\u0027 % kwargs[\u0027data\u0027])"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        curl.append(\u0027%s%s\u0027 % (self.endpoint, url))"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F9hyA%3D","line":98,"in_reply_to":"AAAAUH%2F9wUM%3D","updated":"2014-02-06 09:44:06.000000000","message":"Okay, fair enough. I\u0027ll remove my -1 and have another look once you resubmit it.","commit_id":"15aa1dac3a52bed88f884f1bcf91482d53e4e2ba"},{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"f2f40bfcf559532a514c974db7e96abe7d592e29","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        if self.ssl_connection_params.get(\u0027insecure\u0027):"},{"line_number":96,"context_line":"            curl.append(\u0027-k\u0027)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        if \u0027data\u0027 in kwargs:"},{"line_number":99,"context_line":"            curl.append(\u0027-d \\\u0027%s\\\u0027\u0027 % kwargs[\u0027data\u0027])"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        curl.append(\u0027%s%s\u0027 % (self.endpoint, url))"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F9wUM%3D","line":98,"in_reply_to":"AAAAUH%2F9wXM%3D","updated":"2014-02-04 10:40:28.000000000","message":"Well personally I don\u0027t mind either but that\u0027s what what requests is using and changing would be maybe better done within requests instead of having that rename done here to be more clear for reviewer. (and we will need to do some ugly replace body to data in the kwargs dict before passing it to requests so that would not look too good either).","commit_id":"15aa1dac3a52bed88f884f1bcf91482d53e4e2ba"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"90279dd67e31440179cb358a8eb8b6405b8a6b6e","unresolved":false,"context_lines":[{"line_number":169,"context_line":"                       {\u0027endpoint\u0027: endpoint, \u0027e\u0027: e})"},{"line_number":170,"context_line":"            raise exc.CommunicationError(message\u003dmessage)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        body_str \u003d resp.content"},{"line_number":173,"context_line":"        self.log_http_response(resp)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        if not \u0027X-Auth-Key\u0027 in kwargs[\u0027headers\u0027] and \\"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F941A%3D","line":172,"updated":"2014-02-02 10:57:22.000000000","message":"Variable `body_str` is not used in method `http_request`. Please, remove it from here, because response body can be easily extracted from Response object where it is needed.","commit_id":"15aa1dac3a52bed88f884f1bcf91482d53e4e2ba"},{"author":{"_account_id":4330,"name":"Tomas Sedovic","email":"tsedovic@redhat.com","username":"tomas-8c8"},"change_message_id":"3e6deb6ed7a8cbe3956f25be711ede0c695a233a","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        elif resp.status_code in (301, 302, 305):"},{"line_number":186,"context_line":"            # Redirected. Reissue the request to the new location."},{"line_number":187,"context_line":"            location \u003d resp.headers.get(\u0027location\u0027)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"            if location is None:"},{"line_number":190,"context_line":"                message \u003d \"Location not returned with 302\""},{"line_number":191,"context_line":"                raise exc.InvalidEndpoint(message\u003dmessage)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F9wWw%3D","line":188,"updated":"2014-02-04 10:24:32.000000000","message":"Same here: not sure the added line provides any clarity.","commit_id":"15aa1dac3a52bed88f884f1bcf91482d53e4e2ba"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"90279dd67e31440179cb358a8eb8b6405b8a6b6e","unresolved":false,"context_lines":[{"line_number":218,"context_line":"            kwargs[\u0027data\u0027] \u003d jsonutils.dumps(kwargs[\u0027data\u0027])"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        resp, body_str \u003d self._http_request(url, method, **kwargs)"},{"line_number":221,"context_line":"        if \u0027application/json\u0027 in resp.headers.get(\u0027content-type\u0027, \u0027\u0027):"},{"line_number":222,"context_line":"            body \u003d body_str.decode()"},{"line_number":223,"context_line":"            try:"},{"line_number":224,"context_line":"                body \u003d jsonutils.loads(body)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F940I%3D","line":221,"updated":"2014-02-02 10:57:22.000000000","message":"You can use method `json()` on Response object instead of using jsonutils.loads(body)`.","commit_id":"15aa1dac3a52bed88f884f1bcf91482d53e4e2ba"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"90279dd67e31440179cb358a8eb8b6405b8a6b6e","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                                     \u0027application/octet-stream\u0027)"},{"line_number":236,"context_line":"        return self._http_request(url, method, **kwargs)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def client_request(self, method, url, **kwargs):"},{"line_number":239,"context_line":"        resp, body \u003d self.json_request(method, url, **kwargs)"},{"line_number":240,"context_line":"        r \u003d requests.Response()"},{"line_number":241,"context_line":"        r.headers \u003d resp.headers"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F94zU%3D","line":238,"updated":"2014-02-02 10:57:22.000000000","message":"This method provides compatibility for methods which expected requests.Response object(for example Managers from oslo) and methods which expected httplib response object.\n\nIf you port heatclient to requests lib, this method is becoming deprecated and you can remove it.","commit_id":"15aa1dac3a52bed88f884f1bcf91482d53e4e2ba"},{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"f2f40bfcf559532a514c974db7e96abe7d592e29","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                                     \u0027application/octet-stream\u0027)"},{"line_number":236,"context_line":"        return self._http_request(url, method, **kwargs)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def client_request(self, method, url, **kwargs):"},{"line_number":239,"context_line":"        resp, body \u003d self.json_request(method, url, **kwargs)"},{"line_number":240,"context_line":"        r \u003d requests.Response()"},{"line_number":241,"context_line":"        r.headers \u003d resp.headers"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F9wT0%3D","line":238,"in_reply_to":"AAAAUH%2F94zU%3D","updated":"2014-02-04 10:40:28.000000000","message":"cool thanks, I actually spent a fair bit of time trying to make this works with requests (the r._content thing) when I should have just actually check if it\u0027s actually used 8-)","commit_id":"15aa1dac3a52bed88f884f1bcf91482d53e4e2ba"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"90279dd67e31440179cb358a8eb8b6405b8a6b6e","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        return r"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def head(self, url, **kwargs):"},{"line_number":246,"context_line":"        return self.client_request(\"HEAD\", url, **kwargs)"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def get(self, url, **kwargs):"},{"line_number":249,"context_line":"        return self.client_request(\"GET\", url, **kwargs)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F94zQ%3D","line":246,"updated":"2014-02-02 10:57:22.000000000","message":"Based on the foregoing, you must call `self.json_request` instead of `self.client_request`.","commit_id":"15aa1dac3a52bed88f884f1bcf91482d53e4e2ba"},{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"a655b2383f2b644a1fed0b93041b66ade7443a3f","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        return r"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def head(self, url, **kwargs):"},{"line_number":246,"context_line":"        return self.client_request(\"HEAD\", url, **kwargs)"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def get(self, url, **kwargs):"},{"line_number":249,"context_line":"        return self.client_request(\"GET\", url, **kwargs)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F9iH8%3D","line":246,"in_reply_to":"AAAAUH%2F94zQ%3D","updated":"2014-02-06 08:44:54.000000000","message":"It\u0027s actually not that easy, json_requests return a response and a decoded json body when client_requests just reply with the response. \n\nSure I can make json_request return just the response but that would defeat the point of json_requests returning a json body and that would mean extra work in all those methods get/post/put as well to get only the response back.","commit_id":"15aa1dac3a52bed88f884f1bcf91482d53e4e2ba"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"d711f7a8ff436ca12c68724d88105c92ccb5da08","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        return r"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def head(self, url, **kwargs):"},{"line_number":246,"context_line":"        return self.client_request(\"HEAD\", url, **kwargs)"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def get(self, url, **kwargs):"},{"line_number":249,"context_line":"        return self.client_request(\"GET\", url, **kwargs)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F9h%2Fk%3D","line":246,"in_reply_to":"AAAAUH%2F9iH8%3D","updated":"2014-02-06 09:09:25.000000000","message":"The Response object has method `json()` which allow to get decoded body only in those methods, where it\u0027s needed. \nI prefer to do it in this way, although it can be done later to avoid too big changes in one patch.","commit_id":"15aa1dac3a52bed88f884f1bcf91482d53e4e2ba"}]}
