)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"6dc0e69afd18d50c45cb757f4dd767a9a65a28c3","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"encode the url parameters"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"encode the url query parameters."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I6f6f449b97975dc4867239106c2f3c9622bca9ea"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7a740942_79192222","line":9,"updated":"2015-12-09 18:52:13.000000000","message":"can you add at least a reason for doing that or report a bug?","commit_id":"8c98be5a14c2968e8a4bfd9b3af5bcbf401622ca"},{"author":{"_account_id":15424,"name":"javeme","email":"javaloveme@gmail.com","username":"javeme"},"change_message_id":"a7efa022238843a9e611a8555ae8b2bdc7584137","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"encode the url parameters"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"encode the url query parameters."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I6f6f449b97975dc4867239106c2f3c9622bca9ea"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7a740942_73d6bd28","line":9,"in_reply_to":"7a740942_79192222","updated":"2015-12-11 10:18:42.000000000","message":"Done","commit_id":"8c98be5a14c2968e8a4bfd9b3af5bcbf401622ca"}],"keystoneclient/base.py":[{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"269fa7234dd089b811b37e8f2b0a178020b4502b","unresolved":false,"context_lines":[{"line_number":363,"context_line":"        this can not be accomplished by using urllib.parse.urlencode(). This"},{"line_number":364,"context_line":"        method builds a query using only the keys."},{"line_number":365,"context_line":"        \"\"\""},{"line_number":366,"context_line":"        params \u003d []"},{"line_number":367,"context_line":"        for key in params_list:"},{"line_number":368,"context_line":"            params.append(urllib.parse.quote(key, safe\u003d\u0027\u0027))"},{"line_number":369,"context_line":"        return \u0027?%s\u0027 % \u0027\u0026\u0027.join(params) if params else \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_b2a23f99","line":366,"updated":"2015-12-09 20:51:05.000000000","message":"Also a comment on what is going on too.\n\n\"using urllib.parse.quote will percent encode the padding\"","commit_id":"8c98be5a14c2968e8a4bfd9b3af5bcbf401622ca"},{"author":{"_account_id":15424,"name":"javeme","email":"javaloveme@gmail.com","username":"javeme"},"change_message_id":"a7efa022238843a9e611a8555ae8b2bdc7584137","unresolved":false,"context_lines":[{"line_number":363,"context_line":"        this can not be accomplished by using urllib.parse.urlencode(). This"},{"line_number":364,"context_line":"        method builds a query using only the keys."},{"line_number":365,"context_line":"        \"\"\""},{"line_number":366,"context_line":"        params \u003d []"},{"line_number":367,"context_line":"        for key in params_list:"},{"line_number":368,"context_line":"            params.append(urllib.parse.quote(key, safe\u003d\u0027\u0027))"},{"line_number":369,"context_line":"        return \u0027?%s\u0027 % \u0027\u0026\u0027.join(params) if params else \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_6407d181","line":366,"in_reply_to":"7a740942_b2a23f99","updated":"2015-12-11 10:18:42.000000000","message":"Done","commit_id":"8c98be5a14c2968e8a4bfd9b3af5bcbf401622ca"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"6dc0e69afd18d50c45cb757f4dd767a9a65a28c3","unresolved":false,"context_lines":[{"line_number":366,"context_line":"        params \u003d []"},{"line_number":367,"context_line":"        for key in params_list:"},{"line_number":368,"context_line":"            params.append(urllib.parse.quote(key, safe\u003d\u0027\u0027))"},{"line_number":369,"context_line":"        return \u0027?%s\u0027 % \u0027\u0026\u0027.join(params) if params else \u0027\u0027"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    @filter_kwargs"},{"line_number":372,"context_line":"    def list(self, fallback_to_auth\u003dFalse, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_39871a14","line":369,"updated":"2015-12-09 18:52:13.000000000","message":"Can you add some test about this change?","commit_id":"8c98be5a14c2968e8a4bfd9b3af5bcbf401622ca"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"269fa7234dd089b811b37e8f2b0a178020b4502b","unresolved":false,"context_lines":[{"line_number":366,"context_line":"        params \u003d []"},{"line_number":367,"context_line":"        for key in params_list:"},{"line_number":368,"context_line":"            params.append(urllib.parse.quote(key, safe\u003d\u0027\u0027))"},{"line_number":369,"context_line":"        return \u0027?%s\u0027 % \u0027\u0026\u0027.join(params) if params else \u0027\u0027"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    @filter_kwargs"},{"line_number":372,"context_line":"    def list(self, fallback_to_auth\u003dFalse, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_5280b846","line":369,"in_reply_to":"7a740942_39871a14","updated":"2015-12-09 20:51:05.000000000","message":"++","commit_id":"8c98be5a14c2968e8a4bfd9b3af5bcbf401622ca"},{"author":{"_account_id":15424,"name":"javeme","email":"javaloveme@gmail.com","username":"javeme"},"change_message_id":"a7efa022238843a9e611a8555ae8b2bdc7584137","unresolved":false,"context_lines":[{"line_number":366,"context_line":"        params \u003d []"},{"line_number":367,"context_line":"        for key in params_list:"},{"line_number":368,"context_line":"            params.append(urllib.parse.quote(key, safe\u003d\u0027\u0027))"},{"line_number":369,"context_line":"        return \u0027?%s\u0027 % \u0027\u0026\u0027.join(params) if params else \u0027\u0027"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    @filter_kwargs"},{"line_number":372,"context_line":"    def list(self, fallback_to_auth\u003dFalse, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_a4d619ef","line":369,"in_reply_to":"7a740942_39871a14","updated":"2015-12-11 10:18:42.000000000","message":"Ok, I\u0027ll add a test for the method. thanks.","commit_id":"8c98be5a14c2968e8a4bfd9b3af5bcbf401622ca"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"e340d9c48f1897b4668c9dce93fdee8a47136459","unresolved":false,"context_lines":[{"line_number":356,"context_line":"    def _build_query(self, params):"},{"line_number":357,"context_line":"        return \u0027?%s\u0027 % urllib.parse.urlencode(params) if params else \u0027\u0027"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    @staticmethod"},{"line_number":360,"context_line":"    def build_key_only_query(params_list):"},{"line_number":361,"context_line":"        \"\"\"Builds a query that does not include values, just keys."},{"line_number":362,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_5b0427bf","line":359,"range":{"start_line":359,"start_character":5,"end_line":359,"end_character":17},"updated":"2015-12-31 21:13:48.000000000","message":"Is this here just for the test to access this method?  instead your should have the import \"from keystoneclient import base\" in test_base.py","commit_id":"319cf5ff0c421a883e4ef04d3cc762b499c97b9c"},{"author":{"_account_id":15424,"name":"javeme","email":"javaloveme@gmail.com","username":"javeme"},"change_message_id":"23a0e296de0b53dc1bb0cdb2ef4b191cd583b86a","unresolved":false,"context_lines":[{"line_number":356,"context_line":"    def _build_query(self, params):"},{"line_number":357,"context_line":"        return \u0027?%s\u0027 % urllib.parse.urlencode(params) if params else \u0027\u0027"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    @staticmethod"},{"line_number":360,"context_line":"    def build_key_only_query(params_list):"},{"line_number":361,"context_line":"        \"\"\"Builds a query that does not include values, just keys."},{"line_number":362,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_8659d45d","line":359,"range":{"start_line":359,"start_character":5,"end_line":359,"end_character":17},"in_reply_to":"fa69d971_5b0427bf","updated":"2016-01-08 10:04:13.000000000","message":"Yes, it can be easy to test(also means easier to use). It is actually a utils method, so it is also more appropriate as static method.\n\n\"instead your should have the import \"from keystoneclient import base\" in test_base.py\" -- Do you mean that we should import keystoneclient.base in test_base.py? If not, could you provide me with more details? thank you:)","commit_id":"319cf5ff0c421a883e4ef04d3cc762b499c97b9c"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"9dd079781d7150f0ae3864bc4843dd72e971d213","unresolved":false,"context_lines":[{"line_number":351,"context_line":"    def _build_query(self, params):"},{"line_number":352,"context_line":"        return \u0027?%s\u0027 % urllib.parse.urlencode(params) if params else \u0027\u0027"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    @staticmethod"},{"line_number":355,"context_line":"    def build_key_only_query(params_list):"},{"line_number":356,"context_line":"        \"\"\"Builds a query that does not include values, just keys."},{"line_number":357,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da6ed579_7f7240af","line":354,"range":{"start_line":354,"start_character":4,"end_line":354,"end_character":17},"updated":"2016-01-18 09:51:00.000000000","message":"why add this decorator?","commit_id":"261e9664cf71e4b75891174c7161072541f91290"},{"author":{"_account_id":15424,"name":"javeme","email":"javaloveme@gmail.com","username":"javeme"},"change_message_id":"27ec1ba932569cc889be9caabf36ac1e90dd9d01","unresolved":false,"context_lines":[{"line_number":351,"context_line":"    def _build_query(self, params):"},{"line_number":352,"context_line":"        return \u0027?%s\u0027 % urllib.parse.urlencode(params) if params else \u0027\u0027"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    @staticmethod"},{"line_number":355,"context_line":"    def build_key_only_query(params_list):"},{"line_number":356,"context_line":"        \"\"\"Builds a query that does not include values, just keys."},{"line_number":357,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a5de9d1_16269d68","line":354,"range":{"start_line":354,"start_character":4,"end_line":354,"end_character":17},"in_reply_to":"9a68dd71_843d52bd","updated":"2016-01-28 03:09:41.000000000","message":"Dave and Lance, thanks for your comments. Since it is actually a utils method, so I think it is more appropriate as static method.","commit_id":"261e9664cf71e4b75891174c7161072541f91290"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"00f16105080b2b34802358442cf460e753d7868f","unresolved":false,"context_lines":[{"line_number":351,"context_line":"    def _build_query(self, params):"},{"line_number":352,"context_line":"        return \u0027?%s\u0027 % urllib.parse.urlencode(params) if params else \u0027\u0027"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    @staticmethod"},{"line_number":355,"context_line":"    def build_key_only_query(params_list):"},{"line_number":356,"context_line":"        \"\"\"Builds a query that does not include values, just keys."},{"line_number":357,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_843d52bd","line":354,"range":{"start_line":354,"start_character":4,"end_line":354,"end_character":17},"in_reply_to":"da6ed579_7f7240af","updated":"2016-01-21 15:56:04.000000000","message":"++","commit_id":"261e9664cf71e4b75891174c7161072541f91290"}],"keystoneclient/tests/unit/test_base.py":[{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"12718d1ceb58171f5c4f4bc649984328d007a555","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def test_build_key_only_query(self):"},{"line_number":87,"context_line":"        params_list \u003d [\u0027fake1\u0027, \u0027fake-2\u0027, \u0027fake 3\u0027, \u0027fake\u00264\u0027, \u0027fake\u003d5\u0027]"},{"line_number":88,"context_line":"        # Expected: \" \" \u003d\u003e \"%20\", \"\u0026\" \u003d\u003e \"%26\", \"\u003d\" \u003d\u003e \"%3D\""},{"line_number":89,"context_line":"        expected \u003d \u0027?fake1\u0026fake-2\u0026fake%203\u0026fake%264\u0026fake%3D5\u0027"},{"line_number":90,"context_line":"        mgr \u003d base.CrudManager(client\u003dNone)"},{"line_number":91,"context_line":"        query \u003d mgr.build_key_only_query(params_list)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a5ae5dd_70ef221e","line":88,"range":{"start_line":88,"start_character":10,"end_line":88,"end_character":18},"updated":"2016-02-09 14:57:31.000000000","message":"Expected Encodings","commit_id":"e3b0046698e8175db1c5106a2936605bf6156205"},{"author":{"_account_id":15424,"name":"javeme","email":"javaloveme@gmail.com","username":"javeme"},"change_message_id":"bc8d0bd91110f27b65e73323df10c8f45f13f977","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def test_build_key_only_query(self):"},{"line_number":87,"context_line":"        params_list \u003d [\u0027fake1\u0027, \u0027fake-2\u0027, \u0027fake 3\u0027, \u0027fake\u00264\u0027, \u0027fake\u003d5\u0027]"},{"line_number":88,"context_line":"        # Expected: \" \" \u003d\u003e \"%20\", \"\u0026\" \u003d\u003e \"%26\", \"\u003d\" \u003d\u003e \"%3D\""},{"line_number":89,"context_line":"        expected \u003d \u0027?fake1\u0026fake-2\u0026fake%203\u0026fake%264\u0026fake%3D5\u0027"},{"line_number":90,"context_line":"        mgr \u003d base.CrudManager(client\u003dNone)"},{"line_number":91,"context_line":"        query \u003d mgr.build_key_only_query(params_list)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a57f1b5_0a6b51f2","line":88,"range":{"start_line":88,"start_character":10,"end_line":88,"end_character":18},"in_reply_to":"5a5ae5dd_70ef221e","updated":"2016-02-12 15:21:39.000000000","message":"OK, thanks!","commit_id":"e3b0046698e8175db1c5106a2936605bf6156205"}]}
