)]}'
{"etc/policy.json":[{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"4e5ebcbd89a5707a149908f26fc6c8d259d87a48","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    \"default\": \"rule:admin_required\","},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    \"identity:get_region\": \"\","},{"line_number":11,"context_line":"    \"identity:list_regions\": \"\","},{"line_number":12,"context_line":"    \"identity:create_region\": \"rule:admin_required\","},{"line_number":13,"context_line":"    \"identity:update_region\": \"rule:admin_required\","}],"source_content_type":"application/json","patch_set":5,"id":"AAAAUX%2F%2B8h4%3D","line":10,"updated":"2014-02-18 03:06:44.000000000","message":"I assume \"\" means the policy is that anyone can perform this action?  I\u0027d buy someone a beer (microbrew or imported) for either an annotated version of this file or thoroughly documented examples.  I understand most of it but every so often I see something I didn\u0027t notice before.  What do you think about me taking a bug to create annotated versions of this and the v3policy file to serve as docs or I could add an annotated example to the docs?  Let me know what you think.","commit_id":"ee19945e1874fca3a1b11deafcfbe8bd2bb0b1a6"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"936f64e83bb5314a1e9d9d7eac83dc528d47c3e5","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    \"default\": \"rule:admin_required\","},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    \"identity:get_region\": \"\","},{"line_number":11,"context_line":"    \"identity:list_regions\": \"\","},{"line_number":12,"context_line":"    \"identity:create_region\": \"rule:admin_required\","},{"line_number":13,"context_line":"    \"identity:update_region\": \"rule:admin_required\","}],"source_content_type":"application/json","patch_set":5,"id":"AAAAVX%2F%2Fo08%3D","line":10,"in_reply_to":"AAAAUX%2F%2B8h4%3D","updated":"2014-03-02 07:41:34.000000000","message":"++ documentation on this file would be awesome (annotated in the docs preferably)","commit_id":"ee19945e1874fca3a1b11deafcfbe8bd2bb0b1a6"}],"keystone/catalog/controllers.py":[{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"97f4d801f9522d7de180c7fa7b8265d7bacf5c1f","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    def create_region_with_id(self, context, region_id, region):"},{"line_number":146,"context_line":"        \"\"\"Create a region with a user-specified ID."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        This method is unprotected because it depends on ``self.create_region``"},{"line_number":149,"context_line":"        to enforce policy."},{"line_number":150,"context_line":"        \"\"\""},{"line_number":151,"context_line":"        if \u0027id\u0027 in region and region_id !\u003d region[\u0027id\u0027]:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2BhHQ%3D","line":148,"updated":"2014-01-24 20:52:47.000000000","message":"Very helpful comment!","commit_id":"aa14b37ccdec654bda86ba7b95f8dea58eef8b2e"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"97f4d801f9522d7de180c7fa7b8265d7bacf5c1f","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        \"\"\""},{"line_number":151,"context_line":"        if \u0027id\u0027 in region and region_id !\u003d region[\u0027id\u0027]:"},{"line_number":152,"context_line":"            raise exception.ValidationError("},{"line_number":153,"context_line":"                _(\u0027Conflicting region IDs specified: \u0027"},{"line_number":154,"context_line":"                  \u0027\"%(url_id)s\" !\u003d \"%(ref_id)s\"\u0027) % {"},{"line_number":155,"context_line":"                      \u0027url_id\u0027: region_id,"},{"line_number":156,"context_line":"                      \u0027ref_id\u0027: region[\u0027id\u0027]})"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2BhG4%3D","line":153,"updated":"2014-01-24 20:52:47.000000000","message":"just curiously why did you feel the need to add this sanity check?","commit_id":"aa14b37ccdec654bda86ba7b95f8dea58eef8b2e"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"4e5ebcbd89a5707a149908f26fc6c8d259d87a48","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    def create_region_with_id(self, context, region_id, region):"},{"line_number":148,"context_line":"        \"\"\"Create a region with a user-specified ID."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        This method is unprotected because it depends on ``self.create_region``"},{"line_number":151,"context_line":"        to enforce policy."},{"line_number":152,"context_line":"        \"\"\""},{"line_number":153,"context_line":"        if \u0027id\u0027 in region and region_id !\u003d region[\u0027id\u0027]:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2B8hY%3D","line":150,"updated":"2014-02-18 03:06:44.000000000","message":"great comment","commit_id":"ee19945e1874fca3a1b11deafcfbe8bd2bb0b1a6"}],"keystone/tests/test_v3_catalog.py":[{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"97f4d801f9522d7de180c7fa7b8265d7bacf5c1f","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self.assertValidRegionResponse(r, ref)"},{"line_number":33,"context_line":"        # Double-check that the region ID was kept as-is and not"},{"line_number":34,"context_line":"        # populated with a UUID, like is the case with POST /regions"},{"line_number":35,"context_line":"        entity \u003d r.result.get(\"region\")"},{"line_number":36,"context_line":"        self.assertEqual(region_id, entity[\u0027id\u0027])"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def test_create_region(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2BhGM%3D","side":"PARENT","line":35,"updated":"2014-01-24 20:52:47.000000000","message":"Nice to see this evil double quote was removed as a result of your new code!","commit_id":"5df787576aa0a88d098ead8be9a9beb7e48124cd"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"66c371235f6579ab13e25e0bc936a8233a5d6451","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.assertValidRegionResponse(r, ref)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def test_create_region_with_conflicting_ids(self):"},{"line_number":59,"context_line":"        \"\"\"Call ``POST /regions``.\"\"\""},{"line_number":60,"context_line":"        ref \u003d self.new_region_ref()"},{"line_number":61,"context_line":"        self.put("},{"line_number":62,"context_line":"            \u0027/regions/%s\u0027 % uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2FUrw%3D","line":59,"updated":"2014-02-13 23:45:42.000000000","message":"This should be PUT /regions/{id} rather than POST.\n\nAlso, the docstrings for test_create_region, test_create_region_without_id, and test_create_region_with_conflicting_ids are the same... since they\u0027re not testing the same thing the docstring should be different, e.g. this could be\n\n Calling ``PUT /regions/{id}`` with a region with an ID that\u0027s different than the one\n supplied on the URL results in a 400 Bad Request.","commit_id":"9822f7a196e462851aad3facd18df891d615ce1b"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c37db80cf398c43494e80d77463ccd4a171463c5","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.assertValidRegionResponse(r, ref)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def test_create_region_with_conflicting_ids(self):"},{"line_number":59,"context_line":"        \"\"\"Call ``POST /regions``.\"\"\""},{"line_number":60,"context_line":"        ref \u003d self.new_region_ref()"},{"line_number":61,"context_line":"        self.put("},{"line_number":62,"context_line":"            \u0027/regions/%s\u0027 % uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2FBMM%3D","line":59,"in_reply_to":"AAAAUX%2F%2FNW8%3D","updated":"2014-02-17 16:18:34.000000000","message":"Done","commit_id":"9822f7a196e462851aad3facd18df891d615ce1b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"600d25b543d75197b71dc92fb5ccd768ed40446c","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.assertValidRegionResponse(r, ref)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def test_create_region_with_conflicting_ids(self):"},{"line_number":59,"context_line":"        \"\"\"Call ``POST /regions``.\"\"\""},{"line_number":60,"context_line":"        ref \u003d self.new_region_ref()"},{"line_number":61,"context_line":"        self.put("},{"line_number":62,"context_line":"            \u0027/regions/%s\u0027 % uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2FNW8%3D","line":59,"in_reply_to":"AAAAUX%2F%2FUrw%3D","updated":"2014-02-14 21:07:23.000000000","message":"If POST here is change it will have to be changed on line 41 as well, since it should be the same. Nice catch Brant.","commit_id":"9822f7a196e462851aad3facd18df891d615ce1b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"beb0ed90500f4b8f23737c24d73ff4627c1123cc","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    # region crud tests"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def test_create_region_with_id(self):"},{"line_number":28,"context_line":"        \"\"\"Call ``PUT /regions/{region_id}`` w/o an ID in the request body.\"\"\""},{"line_number":29,"context_line":"        ref \u003d self.new_region_ref()"},{"line_number":30,"context_line":"        region_id \u003d ref.pop(\u0027id\u0027)"},{"line_number":31,"context_line":"        r \u003d self.put("}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2FBFY%3D","line":28,"updated":"2014-02-17 16:28:42.000000000","message":"the comment and the name of the test seem to go in two different directions. Maybe add a little more detail to the name? \n\n    def test_create_region_without_id_in_request(self):\n\nThis is a nit, just looking from readability standpoint.","commit_id":"ee19945e1874fca3a1b11deafcfbe8bd2bb0b1a6"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"4e5ebcbd89a5707a149908f26fc6c8d259d87a48","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    # region crud tests"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def test_create_region_with_id(self):"},{"line_number":28,"context_line":"        \"\"\"Call ``PUT /regions/{region_id}`` w/o an ID in the request body.\"\"\""},{"line_number":29,"context_line":"        ref \u003d self.new_region_ref()"},{"line_number":30,"context_line":"        region_id \u003d ref.pop(\u0027id\u0027)"},{"line_number":31,"context_line":"        r \u003d self.put("}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2B8eA%3D","line":28,"in_reply_to":"AAAAUX%2F%2FBFY%3D","updated":"2014-02-18 03:06:44.000000000","message":"your new name is not accurate.  There is an id in the request. It\u0027s just encoded in the URL of the request not in the request body.  Perhaps test_create_region_with_id_in_URL?","commit_id":"ee19945e1874fca3a1b11deafcfbe8bd2bb0b1a6"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"4e5ebcbd89a5707a149908f26fc6c8d259d87a48","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        # populated with a UUID, as is the case with POST /v3/regions"},{"line_number":38,"context_line":"        self.assertEqual(region_id, r.json[\u0027region\u0027][\u0027id\u0027])"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def test_create_region_with_matching_ids(self):"},{"line_number":41,"context_line":"        \"\"\"Call ``PUT /regions/{region_id}`` with an ID in the request body.\"\"\""},{"line_number":42,"context_line":"        ref \u003d self.new_region_ref()"},{"line_number":43,"context_line":"        region_id \u003d ref[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2B8cw%3D","line":40,"updated":"2014-02-18 03:06:44.000000000","message":"Perhaps test_create_region_with_id_in_body","commit_id":"ee19945e1874fca3a1b11deafcfbe8bd2bb0b1a6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"beb0ed90500f4b8f23737c24d73ff4627c1123cc","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        # populated with a UUID, as is the case with POST /v3/regions"},{"line_number":51,"context_line":"        self.assertEqual(region_id, r.json[\u0027region\u0027][\u0027id\u0027])"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def test_create_region(self):"},{"line_number":54,"context_line":"        \"\"\"Call ``POST /regions`` with an ID in the request body.\"\"\""},{"line_number":55,"context_line":"        # the ref will have an ID defined on it"},{"line_number":56,"context_line":"        ref \u003d self.new_region_ref()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2FBEY%3D","line":53,"updated":"2014-02-17 16:28:42.000000000","message":"This test could play off the naming of test_create_region_with_id if it is refactored: \n\n    def test_create_region_with_id_in_request(self):","commit_id":"ee19945e1874fca3a1b11deafcfbe8bd2bb0b1a6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"beb0ed90500f4b8f23737c24d73ff4627c1123cc","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        \"\"\"Call ``POST /regions`` with an ID in the request body.\"\"\""},{"line_number":55,"context_line":"        # the ref will have an ID defined on it"},{"line_number":56,"context_line":"        ref \u003d self.new_region_ref()"},{"line_number":57,"context_line":"        r \u003d self.post("},{"line_number":58,"context_line":"            \u0027/regions\u0027,"},{"line_number":59,"context_line":"            body\u003d{\u0027region\u0027: ref})"},{"line_number":60,"context_line":"        self.assertValidRegionResponse(r, ref)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2FBBo%3D","line":57,"updated":"2014-02-17 16:28:42.000000000","message":"Just curious, how come this test uses POST and all others here use PUT? Should this being using PUT as well?","commit_id":"ee19945e1874fca3a1b11deafcfbe8bd2bb0b1a6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c9e95af96c5f61f8795881c8801a0465c83894be","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        \"\"\"Call ``POST /regions`` with an ID in the request body.\"\"\""},{"line_number":55,"context_line":"        # the ref will have an ID defined on it"},{"line_number":56,"context_line":"        ref \u003d self.new_region_ref()"},{"line_number":57,"context_line":"        r \u003d self.post("},{"line_number":58,"context_line":"            \u0027/regions\u0027,"},{"line_number":59,"context_line":"            body\u003d{\u0027region\u0027: ref})"},{"line_number":60,"context_line":"        self.assertValidRegionResponse(r, ref)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2BgSs%3D","line":57,"in_reply_to":"AAAAUX%2F%2B8bA%3D","updated":"2014-02-20 20:14:36.000000000","message":"ahh ok, makes sense. Thanks Brad!","commit_id":"ee19945e1874fca3a1b11deafcfbe8bd2bb0b1a6"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"4e5ebcbd89a5707a149908f26fc6c8d259d87a48","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        \"\"\"Call ``POST /regions`` with an ID in the request body.\"\"\""},{"line_number":55,"context_line":"        # the ref will have an ID defined on it"},{"line_number":56,"context_line":"        ref \u003d self.new_region_ref()"},{"line_number":57,"context_line":"        r \u003d self.post("},{"line_number":58,"context_line":"            \u0027/regions\u0027,"},{"line_number":59,"context_line":"            body\u003d{\u0027region\u0027: ref})"},{"line_number":60,"context_line":"        self.assertValidRegionResponse(r, ref)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2B8bA%3D","line":57,"in_reply_to":"AAAAUX%2F%2FBBo%3D","updated":"2014-02-18 03:06:44.000000000","message":"I believe he  is doing this to confirm that the new policy entries he added work for both POST and PUT as stated in the commit message","commit_id":"ee19945e1874fca3a1b11deafcfbe8bd2bb0b1a6"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"4e5ebcbd89a5707a149908f26fc6c8d259d87a48","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        ref \u003d self.new_region_ref()"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        # instead of defining the ID ourselves..."},{"line_number":73,"context_line":"        del ref[\u0027id\u0027]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        # let the service define the ID"},{"line_number":76,"context_line":"        r \u003d self.post("}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2B8aw%3D","line":73,"updated":"2014-02-18 03:06:44.000000000","message":"Nice!","commit_id":"ee19945e1874fca3a1b11deafcfbe8bd2bb0b1a6"}]}
