)]}'
{"keystoneclient/base.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8380f61fcaa4c181604ed5d90dc6bb179c740189","unresolved":false,"context_lines":[{"line_number":341,"context_line":"        return \u0027?%s\u0027 % urllib.parse.urlencode(params) if params else \u0027\u0027"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"    def build_key_only_query(self, params_list):"},{"line_number":344,"context_line":"        \"\"\"Builds a query that do not include values, just keys."},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        The HTTP API has some calls that define queries without values, this"},{"line_number":347,"context_line":"        can not be accomplished by using urllib.parse.urlencode(). This"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a80dd14_c20eb18b","line":344,"updated":"2015-03-13 19:10:05.000000000","message":"change \"do not\" to \"does not\"","commit_id":"8d67c704fc893b37d931b54d131018ecb4c0aa62"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"c3ec00aafb7e834788cbc72056ad46819d2dd7ff","unresolved":false,"context_lines":[{"line_number":341,"context_line":"        return \u0027?%s\u0027 % urllib.parse.urlencode(params) if params else \u0027\u0027"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"    def build_key_only_query(self, params_list):"},{"line_number":344,"context_line":"        \"\"\"Builds a query that do not include values, just keys."},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        The HTTP API has some calls that define queries without values, this"},{"line_number":347,"context_line":"        can not be accomplished by using urllib.parse.urlencode(). This"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a80dd14_786932f8","line":344,"in_reply_to":"9a80dd14_c20eb18b","updated":"2015-03-13 20:00:26.000000000","message":"Done","commit_id":"8d67c704fc893b37d931b54d131018ecb4c0aa62"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8380f61fcaa4c181604ed5d90dc6bb179c740189","unresolved":false,"context_lines":[{"line_number":343,"context_line":"    def build_key_only_query(self, params_list):"},{"line_number":344,"context_line":"        \"\"\"Builds a query that do not include values, just keys."},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        The HTTP API has some calls that define queries without values, this"},{"line_number":347,"context_line":"        can not be accomplished by using urllib.parse.urlencode(). This"},{"line_number":348,"context_line":"        method builds a query using only the keys."},{"line_number":349,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"9a80dd14_221dcdbe","line":346,"updated":"2015-03-13 19:10:05.000000000","message":"change \"HTTP\" to \"Identity\"","commit_id":"8d67c704fc893b37d931b54d131018ecb4c0aa62"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"c3ec00aafb7e834788cbc72056ad46819d2dd7ff","unresolved":false,"context_lines":[{"line_number":343,"context_line":"    def build_key_only_query(self, params_list):"},{"line_number":344,"context_line":"        \"\"\"Builds a query that do not include values, just keys."},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        The HTTP API has some calls that define queries without values, this"},{"line_number":347,"context_line":"        can not be accomplished by using urllib.parse.urlencode(). This"},{"line_number":348,"context_line":"        method builds a query using only the keys."},{"line_number":349,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"9a80dd14_986a66eb","line":346,"in_reply_to":"9a80dd14_221dcdbe","updated":"2015-03-13 20:00:26.000000000","message":"Done","commit_id":"8d67c704fc893b37d931b54d131018ecb4c0aa62"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c6c3ae35ddc53227f334701a1984ea4fb2672598","unresolved":false,"context_lines":[{"line_number":344,"context_line":"        \"\"\"Builds a query that does not include values, just keys."},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        The Identity API has some calls that define queries without values,"},{"line_number":347,"context_line":"        this can not be accomplished by using urllib.parse.urlencode(). This"},{"line_number":348,"context_line":"        method builds a query using only the keys."},{"line_number":349,"context_line":"        \"\"\""},{"line_number":350,"context_line":"        return \u0027?%s\u0027 % \u0027\u0026\u0027.join(params_list) if params_list else \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_71ef7ee9","line":347,"updated":"2015-03-14 17:10:22.000000000","message":"(nit) change \"can not\" to \"cannot\"","commit_id":"14ace4a5ded0bd4005928b42a4f337639bd90799"}],"keystoneclient/tests/unit/v3/test_projects.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a1e3ac7f625f28d8b93b12b18a7f63b17b77feb9","unresolved":false,"context_lines":[{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def test_get_with_subtree_as_ids(self):"},{"line_number":148,"context_line":"        projects \u003d self._create_projects_hierarchy()"},{"line_number":149,"context_line":"        ref \u003d projects[0]"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        ref[\u0027subtree\u0027] \u003d {"},{"line_number":152,"context_line":"            projects[1][\u0027id\u0027]: {"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_bab3a798","line":149,"updated":"2015-03-13 17:33:31.000000000","message":"rather than have to modify projects, change _create_projects_hierarchy so that the projects can be created as needed for these tests.","commit_id":"989e8cbe6063492294a6f4f8c763320f63872289"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"555bb66f6d27a5415882729af89f43f3c3bf9f90","unresolved":false,"context_lines":[{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def test_get_with_subtree_as_ids(self):"},{"line_number":148,"context_line":"        projects \u003d self._create_projects_hierarchy()"},{"line_number":149,"context_line":"        ref \u003d projects[0]"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        ref[\u0027subtree\u0027] \u003d {"},{"line_number":152,"context_line":"            projects[1][\u0027id\u0027]: {"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_a2553dc3","line":149,"in_reply_to":"9a80dd14_bab3a798","updated":"2015-03-13 18:53:49.000000000","message":"actually this is not modifying projects, just getting the project that will be used as base for the call. The subtree field should change depending of which project will be fetched, so this is independent from the _create_projects_hierarchy() method.\n\nthis is valid for the other similar comments in this file.","commit_id":"989e8cbe6063492294a6f4f8c763320f63872289"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a1e3ac7f625f28d8b93b12b18a7f63b17b77feb9","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        returned \u003d self.manager.get(ref[\u0027id\u0027], subtree_as_ids\u003dTrue)"},{"line_number":160,"context_line":"        self.assertQueryStringIs(\u0027subtree_as_ids\u0027)"},{"line_number":161,"context_line":"        self.assertDictEqual(ref[\u0027subtree\u0027], getattr(returned, \u0027subtree\u0027))"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def test_get_with_parents_as_ids(self):"},{"line_number":164,"context_line":"        projects \u003d self._create_projects_hierarchy()"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_7a4bef86","line":161,"updated":"2015-03-13 17:33:31.000000000","message":"use returned.subtree rather than getattr.","commit_id":"989e8cbe6063492294a6f4f8c763320f63872289"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"555bb66f6d27a5415882729af89f43f3c3bf9f90","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        returned \u003d self.manager.get(ref[\u0027id\u0027], subtree_as_ids\u003dTrue)"},{"line_number":160,"context_line":"        self.assertQueryStringIs(\u0027subtree_as_ids\u0027)"},{"line_number":161,"context_line":"        self.assertDictEqual(ref[\u0027subtree\u0027], getattr(returned, \u0027subtree\u0027))"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def test_get_with_parents_as_ids(self):"},{"line_number":164,"context_line":"        projects \u003d self._create_projects_hierarchy()"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_e70ca744","line":161,"in_reply_to":"9a80dd14_7a4bef86","updated":"2015-03-13 18:53:49.000000000","message":"Done","commit_id":"989e8cbe6063492294a6f4f8c763320f63872289"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a1e3ac7f625f28d8b93b12b18a7f63b17b77feb9","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        projects \u003d self._create_projects_hierarchy()"},{"line_number":165,"context_line":"        ref \u003d projects[2]"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        ref[\u0027parents\u0027] \u003d {"},{"line_number":168,"context_line":"            projects[1][\u0027id\u0027]: {"},{"line_number":169,"context_line":"                projects[0][\u0027id\u0027]: None"},{"line_number":170,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_fab0bf8c","line":167,"updated":"2015-03-13 17:33:31.000000000","message":"rather than have to modify projects, change _create_projects_hierarchy so that the projects can be created as needed for these tests.","commit_id":"989e8cbe6063492294a6f4f8c763320f63872289"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a1e3ac7f625f28d8b93b12b18a7f63b17b77feb9","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        returned \u003d self.manager.get(ref[\u0027id\u0027], parents_as_ids\u003dTrue)"},{"line_number":176,"context_line":"        self.assertQueryStringIs(\u0027parents_as_ids\u0027)"},{"line_number":177,"context_line":"        self.assertDictEqual(ref[\u0027parents\u0027], getattr(returned, \u0027parents\u0027))"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    def test_get_with_parents_as_ids_and_subtree_as_ids(self):"},{"line_number":180,"context_line":"        ref \u003d self.new_ref()"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_7a320f11","line":177,"updated":"2015-03-13 17:33:31.000000000","message":"use returned.parents rather than getattr.","commit_id":"989e8cbe6063492294a6f4f8c763320f63872289"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"555bb66f6d27a5415882729af89f43f3c3bf9f90","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        returned \u003d self.manager.get(ref[\u0027id\u0027], parents_as_ids\u003dTrue)"},{"line_number":176,"context_line":"        self.assertQueryStringIs(\u0027parents_as_ids\u0027)"},{"line_number":177,"context_line":"        self.assertDictEqual(ref[\u0027parents\u0027], getattr(returned, \u0027parents\u0027))"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    def test_get_with_parents_as_ids_and_subtree_as_ids(self):"},{"line_number":180,"context_line":"        ref \u003d self.new_ref()"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_67199787","line":177,"in_reply_to":"9a80dd14_7a320f11","updated":"2015-03-13 18:53:49.000000000","message":"Done","commit_id":"989e8cbe6063492294a6f4f8c763320f63872289"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a1e3ac7f625f28d8b93b12b18a7f63b17b77feb9","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                                    parents_as_ids\u003dTrue,"},{"line_number":196,"context_line":"                                    subtree_as_ids\u003dTrue)"},{"line_number":197,"context_line":"        self.assertQueryStringIs(\u0027subtree_as_ids\u0026parents_as_ids\u0027)"},{"line_number":198,"context_line":"        self.assertDictEqual(ref[\u0027parents\u0027], getattr(returned, \u0027parents\u0027))"},{"line_number":199,"context_line":"        self.assertDictEqual(ref[\u0027subtree\u0027], getattr(returned, \u0027subtree\u0027))"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def test_get_with_subtree_as_list(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_da14db4e","line":198,"updated":"2015-03-13 17:33:31.000000000","message":"similar comment here.","commit_id":"989e8cbe6063492294a6f4f8c763320f63872289"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"555bb66f6d27a5415882729af89f43f3c3bf9f90","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                                    parents_as_ids\u003dTrue,"},{"line_number":196,"context_line":"                                    subtree_as_ids\u003dTrue)"},{"line_number":197,"context_line":"        self.assertQueryStringIs(\u0027subtree_as_ids\u0026parents_as_ids\u0027)"},{"line_number":198,"context_line":"        self.assertDictEqual(ref[\u0027parents\u0027], getattr(returned, \u0027parents\u0027))"},{"line_number":199,"context_line":"        self.assertDictEqual(ref[\u0027subtree\u0027], getattr(returned, \u0027subtree\u0027))"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def test_get_with_subtree_as_list(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_272cffab","line":198,"in_reply_to":"9a80dd14_da14db4e","updated":"2015-03-13 18:53:49.000000000","message":"Done","commit_id":"989e8cbe6063492294a6f4f8c763320f63872289"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a1e3ac7f625f28d8b93b12b18a7f63b17b77feb9","unresolved":false,"context_lines":[{"line_number":267,"context_line":"                projects[2][attr],"},{"line_number":268,"context_line":"                \u0027Expected different %s\u0027 % attr)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    def test_get_with_invalid_parameters_combination(self):"},{"line_number":271,"context_line":"        self.assertRaises(exceptions.ValidationError,"},{"line_number":272,"context_line":"                          self.manager.get,"},{"line_number":273,"context_line":"                          project\u003duuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_6e009401","line":270,"updated":"2015-03-13 17:33:31.000000000","message":"add a comment why these are invalid.","commit_id":"989e8cbe6063492294a6f4f8c763320f63872289"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"555bb66f6d27a5415882729af89f43f3c3bf9f90","unresolved":false,"context_lines":[{"line_number":267,"context_line":"                projects[2][attr],"},{"line_number":268,"context_line":"                \u0027Expected different %s\u0027 % attr)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    def test_get_with_invalid_parameters_combination(self):"},{"line_number":271,"context_line":"        self.assertRaises(exceptions.ValidationError,"},{"line_number":272,"context_line":"                          self.manager.get,"},{"line_number":273,"context_line":"                          project\u003duuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_07237bbd","line":270,"in_reply_to":"9a80dd14_6e009401","updated":"2015-03-13 18:53:49.000000000","message":"Done","commit_id":"989e8cbe6063492294a6f4f8c763320f63872289"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8380f61fcaa4c181604ed5d90dc6bb179c740189","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        projects \u003d self._create_projects_hierarchy()"},{"line_number":149,"context_line":"        ref \u003d projects[0]"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        ref[\u0027subtree\u0027] \u003d {"},{"line_number":152,"context_line":"            projects[1][\u0027id\u0027]: {"},{"line_number":153,"context_line":"                projects[2][\u0027id\u0027]: None"},{"line_number":154,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a80dd14_0200c932","line":151,"updated":"2015-03-13 19:10:05.000000000","message":"add a comment why this is here.","commit_id":"8d67c704fc893b37d931b54d131018ecb4c0aa62"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"c3ec00aafb7e834788cbc72056ad46819d2dd7ff","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        projects \u003d self._create_projects_hierarchy()"},{"line_number":149,"context_line":"        ref \u003d projects[0]"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        ref[\u0027subtree\u0027] \u003d {"},{"line_number":152,"context_line":"            projects[1][\u0027id\u0027]: {"},{"line_number":153,"context_line":"                projects[2][\u0027id\u0027]: None"},{"line_number":154,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a80dd14_989c2610","line":151,"in_reply_to":"9a80dd14_0200c932","updated":"2015-03-13 20:00:26.000000000","message":"Done","commit_id":"8d67c704fc893b37d931b54d131018ecb4c0aa62"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8380f61fcaa4c181604ed5d90dc6bb179c740189","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        projects \u003d self._create_projects_hierarchy()"},{"line_number":165,"context_line":"        ref \u003d projects[2]"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        ref[\u0027parents\u0027] \u003d {"},{"line_number":168,"context_line":"            projects[1][\u0027id\u0027]: {"},{"line_number":169,"context_line":"                projects[0][\u0027id\u0027]: None"},{"line_number":170,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a80dd14_22f94d4e","line":167,"updated":"2015-03-13 19:10:05.000000000","message":"add a comment why this is here.","commit_id":"8d67c704fc893b37d931b54d131018ecb4c0aa62"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"c3ec00aafb7e834788cbc72056ad46819d2dd7ff","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        projects \u003d self._create_projects_hierarchy()"},{"line_number":165,"context_line":"        ref \u003d projects[2]"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        ref[\u0027parents\u0027] \u003d {"},{"line_number":168,"context_line":"            projects[1][\u0027id\u0027]: {"},{"line_number":169,"context_line":"                projects[0][\u0027id\u0027]: None"},{"line_number":170,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a80dd14_58962ef1","line":167,"in_reply_to":"9a80dd14_22f94d4e","updated":"2015-03-13 20:00:26.000000000","message":"Done","commit_id":"8d67c704fc893b37d931b54d131018ecb4c0aa62"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8380f61fcaa4c181604ed5d90dc6bb179c740189","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        projects \u003d self._create_projects_hierarchy()"},{"line_number":182,"context_line":"        ref \u003d projects[1]"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        ref[\u0027parents\u0027] \u003d {"},{"line_number":185,"context_line":"            projects[0][\u0027id\u0027]: None"},{"line_number":186,"context_line":"        }"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9a80dd14_22906dec","line":184,"updated":"2015-03-13 19:10:05.000000000","message":"add a comment why this is here. e.g.,\n\n # the expected response will have \n # { \u0027parents\u0027: [{\u0027id\u0027: None} }\n\nor whatever the reason is.","commit_id":"8d67c704fc893b37d931b54d131018ecb4c0aa62"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"c3ec00aafb7e834788cbc72056ad46819d2dd7ff","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        projects \u003d self._create_projects_hierarchy()"},{"line_number":182,"context_line":"        ref \u003d projects[1]"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        ref[\u0027parents\u0027] \u003d {"},{"line_number":185,"context_line":"            projects[0][\u0027id\u0027]: None"},{"line_number":186,"context_line":"        }"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9a80dd14_789bf217","line":184,"in_reply_to":"9a80dd14_22906dec","updated":"2015-03-13 20:00:26.000000000","message":"Done","commit_id":"8d67c704fc893b37d931b54d131018ecb4c0aa62"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"fe66496be7b91c0e79e009959a67eb66c75ef54d","unresolved":false,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        returned \u003d self.manager.get(ref[\u0027id\u0027], subtree_as_ids\u003dTrue)"},{"line_number":167,"context_line":"        self.assertQueryStringIs(\u0027subtree_as_ids\u0027)"},{"line_number":168,"context_line":"        self.assertDictEqual(ref[\u0027subtree\u0027], returned.subtree)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def test_get_with_parents_as_ids(self):"},{"line_number":171,"context_line":"        projects \u003d self._create_projects_hierarchy()"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_ea0135b0","line":168,"updated":"2015-03-18 02:55:07.000000000","message":"what\u0027s returned.parents here?","commit_id":"14ace4a5ded0bd4005928b42a4f337639bd90799"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"fe66496be7b91c0e79e009959a67eb66c75ef54d","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        returned \u003d self.manager.get(ref[\u0027id\u0027], parents_as_ids\u003dTrue)"},{"line_number":190,"context_line":"        self.assertQueryStringIs(\u0027parents_as_ids\u0027)"},{"line_number":191,"context_line":"        self.assertDictEqual(ref[\u0027parents\u0027], returned.parents)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def test_get_with_parents_as_ids_and_subtree_as_ids(self):"},{"line_number":194,"context_line":"        ref \u003d self.new_ref()"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_8a119906","line":191,"updated":"2015-03-18 02:55:07.000000000","message":"what\u0027s returned.subtree here?","commit_id":"14ace4a5ded0bd4005928b42a4f337639bd90799"}],"keystoneclient/tests/v3/test_projects.py":[{"author":{"_account_id":9101,"name":"wanghong","email":"reviewwanghong@126.com","username":"wanghong"},"change_message_id":"b13c60471c188dcc15326bd9994230223a13c575","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        returned \u003d self.manager.get(ref[\u0027id\u0027], parents_as_ids\u003dTrue)"},{"line_number":134,"context_line":"        self.assertQueryStringIs(\u0027parents_as_ids\u0027)"},{"line_number":135,"context_line":"        self.assertDictEqual(ref[\u0027parents\u0027], getattr(returned, \u0027parents\u0027))"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def test_get_with_subtree_as_list(self):"},{"line_number":138,"context_line":"        projects \u003d self._create_projects_hierarchy()"},{"line_number":139,"context_line":"        ref \u003d projects[0]"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_e20be78b","line":136,"updated":"2015-02-04 01:59:34.000000000","message":"Add a test_get_with_parents_as_ids_and_subtree_as_ids test?","commit_id":"403edd34dfb00b5bbf572342ec318a4387907fdc"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"2cb37f43dd7e679a0eb91beb08b398260f3ff91c","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        returned \u003d self.manager.get(ref[\u0027id\u0027], parents_as_ids\u003dTrue)"},{"line_number":134,"context_line":"        self.assertQueryStringIs(\u0027parents_as_ids\u0027)"},{"line_number":135,"context_line":"        self.assertDictEqual(ref[\u0027parents\u0027], getattr(returned, \u0027parents\u0027))"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def test_get_with_subtree_as_list(self):"},{"line_number":138,"context_line":"        projects \u003d self._create_projects_hierarchy()"},{"line_number":139,"context_line":"        ref \u003d projects[0]"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_c1a5f447","line":136,"in_reply_to":"da86d52c_e20be78b","updated":"2015-02-04 12:06:51.000000000","message":"Done","commit_id":"403edd34dfb00b5bbf572342ec318a4387907fdc"}],"keystoneclient/v3/projects.py":[{"author":{"_account_id":9101,"name":"wanghong","email":"reviewwanghong@126.com","username":"wanghong"},"change_message_id":"b13c60471c188dcc15326bd9994230223a13c575","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    def _check_not_parents_as_ids_and_parents_as_list(self, parents_as_ids,"},{"line_number":103,"context_line":"                                                      parents_as_list):"},{"line_number":104,"context_line":"        if parents_as_ids and parents_as_list:"},{"line_number":105,"context_line":"            msg \u003d _(\u0027Specify either a the parents_as_ids or parents_as_list \u0027"},{"line_number":106,"context_line":"                    \u0027parameters, not both\u0027)"},{"line_number":107,"context_line":"            raise exceptions.ValidationError(msg)"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_02255b5b","line":105,"updated":"2015-02-04 01:59:34.000000000","message":"a the? I think \u0027either parents_as_ids or parents_as_list\u0027 would be OK?","commit_id":"403edd34dfb00b5bbf572342ec318a4387907fdc"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"2cb37f43dd7e679a0eb91beb08b398260f3ff91c","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    def _check_not_parents_as_ids_and_parents_as_list(self, parents_as_ids,"},{"line_number":103,"context_line":"                                                      parents_as_list):"},{"line_number":104,"context_line":"        if parents_as_ids and parents_as_list:"},{"line_number":105,"context_line":"            msg \u003d _(\u0027Specify either a the parents_as_ids or parents_as_list \u0027"},{"line_number":106,"context_line":"                    \u0027parameters, not both\u0027)"},{"line_number":107,"context_line":"            raise exceptions.ValidationError(msg)"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_a1a80021","line":105,"in_reply_to":"da86d52c_02255b5b","updated":"2015-02-04 12:06:51.000000000","message":"Done","commit_id":"403edd34dfb00b5bbf572342ec318a4387907fdc"},{"author":{"_account_id":9101,"name":"wanghong","email":"reviewwanghong@126.com","username":"wanghong"},"change_message_id":"b13c60471c188dcc15326bd9994230223a13c575","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    def _check_not_subtree_as_ids_and_subtree_as_list(self, subtree_as_ids,"},{"line_number":110,"context_line":"                                                      subtree_as_list):"},{"line_number":111,"context_line":"        if subtree_as_ids and subtree_as_list:"},{"line_number":112,"context_line":"            msg \u003d _(\u0027Specify either a the subtree_as_ids or subtree_as_list \u0027"},{"line_number":113,"context_line":"                    \u0027parameters, not both\u0027)"},{"line_number":114,"context_line":"            raise exceptions.ValidationError(msg)"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_c2d5031d","line":112,"updated":"2015-02-04 01:59:34.000000000","message":"This too.","commit_id":"403edd34dfb00b5bbf572342ec318a4387907fdc"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"2cb37f43dd7e679a0eb91beb08b398260f3ff91c","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    def _check_not_subtree_as_ids_and_subtree_as_list(self, subtree_as_ids,"},{"line_number":110,"context_line":"                                                      subtree_as_list):"},{"line_number":111,"context_line":"        if subtree_as_ids and subtree_as_list:"},{"line_number":112,"context_line":"            msg \u003d _(\u0027Specify either a the subtree_as_ids or subtree_as_list \u0027"},{"line_number":113,"context_line":"                    \u0027parameters, not both\u0027)"},{"line_number":114,"context_line":"            raise exceptions.ValidationError(msg)"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_81af7c29","line":112,"in_reply_to":"da86d52c_c2d5031d","updated":"2015-02-04 12:06:51.000000000","message":"Done","commit_id":"403edd34dfb00b5bbf572342ec318a4387907fdc"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a1e3ac7f625f28d8b93b12b18a7f63b17b77feb9","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        :param boolean parents_as_ids: retrieve the IDs from the projects above"},{"line_number":139,"context_line":"                                       this project in the hierarchy as a"},{"line_number":140,"context_line":"                                       structured dictionary. (optional)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        \"\"\""},{"line_number":143,"context_line":"        self._check_not_parents_as_ids_and_parents_as_list("},{"line_number":144,"context_line":"            parents_as_ids, parents_as_list)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_ae6b6cb7","line":141,"updated":"2015-03-13 17:33:31.000000000","message":"This should document that it raises ValidationError when subtree_as_list and subtree_as_ids are both True or parents_as_list and parents_as_ids are true.","commit_id":"989e8cbe6063492294a6f4f8c763320f63872289"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"555bb66f6d27a5415882729af89f43f3c3bf9f90","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        :param boolean parents_as_ids: retrieve the IDs from the projects above"},{"line_number":139,"context_line":"                                       this project in the hierarchy as a"},{"line_number":140,"context_line":"                                       structured dictionary. (optional)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        \"\"\""},{"line_number":143,"context_line":"        self._check_not_parents_as_ids_and_parents_as_list("},{"line_number":144,"context_line":"            parents_as_ids, parents_as_list)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_27e23fa0","line":141,"in_reply_to":"9a80dd14_ae6b6cb7","updated":"2015-03-13 18:53:49.000000000","message":"Done","commit_id":"989e8cbe6063492294a6f4f8c763320f63872289"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a1e3ac7f625f28d8b93b12b18a7f63b17b77feb9","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        \"\"\""},{"line_number":143,"context_line":"        self._check_not_parents_as_ids_and_parents_as_list("},{"line_number":144,"context_line":"            parents_as_ids, parents_as_list)"},{"line_number":145,"context_line":"        self._check_not_subtree_as_ids_and_subtree_as_list("},{"line_number":146,"context_line":"            subtree_as_ids, subtree_as_list)"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_0e6638ed","line":144,"updated":"2015-03-13 17:33:31.000000000","message":"having methods for these seems excessive.","commit_id":"989e8cbe6063492294a6f4f8c763320f63872289"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a1e3ac7f625f28d8b93b12b18a7f63b17b77feb9","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        if parents_as_list:"},{"line_number":155,"context_line":"            query \u003d query + \u0027\u0026parents_as_list\u0027 if query else \u0027?parents_as_list\u0027"},{"line_number":156,"context_line":"        elif parents_as_ids:"},{"line_number":157,"context_line":"            query \u003d query + \u0027\u0026parents_as_ids\u0027 if query else \u0027?parents_as_ids\u0027"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        dict_args \u003d {\u0027project_id\u0027: base.getid(project)}"},{"line_number":160,"context_line":"        url \u003d self.build_url(dict_args_in_out\u003ddict_args) + query"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_6e833456","line":157,"updated":"2015-03-13 17:33:31.000000000","message":"this couldn\u0027t get much uglier.","commit_id":"989e8cbe6063492294a6f4f8c763320f63872289"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"ed69c944d934177498d2c7b841367d0745b222fa","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        if parents_as_list:"},{"line_number":155,"context_line":"            query \u003d query + \u0027\u0026parents_as_list\u0027 if query else \u0027?parents_as_list\u0027"},{"line_number":156,"context_line":"        elif parents_as_ids:"},{"line_number":157,"context_line":"            query \u003d query + \u0027\u0026parents_as_ids\u0027 if query else \u0027?parents_as_ids\u0027"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        dict_args \u003d {\u0027project_id\u0027: base.getid(project)}"},{"line_number":160,"context_line":"        url \u003d self.build_url(dict_args_in_out\u003ddict_args) + query"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_ae0c4ced","line":157,"in_reply_to":"9a80dd14_6e833456","updated":"2015-03-13 17:36:35.000000000","message":"agreed, any suggestion to make it prettier?","commit_id":"989e8cbe6063492294a6f4f8c763320f63872289"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c3490f28b1ef15cc9d90c764567aa6ed93cc48a3","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        if parents_as_list:"},{"line_number":155,"context_line":"            query \u003d query + \u0027\u0026parents_as_list\u0027 if query else \u0027?parents_as_list\u0027"},{"line_number":156,"context_line":"        elif parents_as_ids:"},{"line_number":157,"context_line":"            query \u003d query + \u0027\u0026parents_as_ids\u0027 if query else \u0027?parents_as_ids\u0027"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        dict_args \u003d {\u0027project_id\u0027: base.getid(project)}"},{"line_number":160,"context_line":"        url \u003d self.build_url(dict_args_in_out\u003ddict_args) + query"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_f1962593","line":157,"in_reply_to":"9a80dd14_ae0c4ced","updated":"2015-03-13 17:53:40.000000000","message":"Write a function that takes a list or tuple and generates the query string from it.","commit_id":"989e8cbe6063492294a6f4f8c763320f63872289"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"555bb66f6d27a5415882729af89f43f3c3bf9f90","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        if parents_as_list:"},{"line_number":155,"context_line":"            query \u003d query + \u0027\u0026parents_as_list\u0027 if query else \u0027?parents_as_list\u0027"},{"line_number":156,"context_line":"        elif parents_as_ids:"},{"line_number":157,"context_line":"            query \u003d query + \u0027\u0026parents_as_ids\u0027 if query else \u0027?parents_as_ids\u0027"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        dict_args \u003d {\u0027project_id\u0027: base.getid(project)}"},{"line_number":160,"context_line":"        url \u003d self.build_url(dict_args_in_out\u003ddict_args) + query"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_e7ce6782","line":157,"in_reply_to":"9a80dd14_f1962593","updated":"2015-03-13 18:53:49.000000000","message":"Done","commit_id":"989e8cbe6063492294a6f4f8c763320f63872289"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8380f61fcaa4c181604ed5d90dc6bb179c740189","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                                       this project in the hierarchy as a"},{"line_number":140,"context_line":"                                       structured dictionary. (optional)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        :raises keystoneclient.exceptions.ValidationError: if subtree_as_list"},{"line_number":143,"context_line":"            and subtree_as_ids or parents_as_list and parents_as_ids are"},{"line_number":144,"context_line":"            included at the same time in the call."},{"line_number":145,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"9a80dd14_fd6514e1","line":142,"updated":"2015-03-13 19:10:05.000000000","message":"this isn\u0027t rendered as a link, probably because the symbol is missing in keystoneclient.exceptions, see http://git.openstack.org/cgit/openstack/python-keystoneclient/tree/keystoneclient/exceptions.py#n24","commit_id":"8d67c704fc893b37d931b54d131018ecb4c0aa62"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"c3ec00aafb7e834788cbc72056ad46819d2dd7ff","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                                       this project in the hierarchy as a"},{"line_number":140,"context_line":"                                       structured dictionary. (optional)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        :raises keystoneclient.exceptions.ValidationError: if subtree_as_list"},{"line_number":143,"context_line":"            and subtree_as_ids or parents_as_list and parents_as_ids are"},{"line_number":144,"context_line":"            included at the same time in the call."},{"line_number":145,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"9a80dd14_5300d100","line":142,"in_reply_to":"9a80dd14_fd6514e1","updated":"2015-03-13 20:00:26.000000000","message":"Done","commit_id":"8d67c704fc893b37d931b54d131018ecb4c0aa62"}]}
