)]}'
{"glance/tests/functional/v2/test_images.py":[{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0935cff789ce04d71f701b779a63e051daee20c8","unresolved":true,"context_lines":[{"line_number":2466,"context_line":"        # Create an image for role spl_role with extra props"},{"line_number":2467,"context_line":"        path \u003d self._url(\u0027/v2/images\u0027)"},{"line_number":2468,"context_line":"        headers \u003d self._headers({\u0027content-type\u0027: \u0027application/json\u0027,"},{"line_number":2469,"context_line":"                                 \u0027X-Roles\u0027: \u0027member, spl_role, admin\u0027})"},{"line_number":2470,"context_line":"        data \u003d jsonutils.dumps({\u0027name\u0027: \u0027image-1\u0027,"},{"line_number":2471,"context_line":"                                \u0027disk_format\u0027: \u0027aki\u0027,"},{"line_number":2472,"context_line":"                                \u0027container_format\u0027: \u0027aki\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9dcf7379_6b9fb2ce","line":2469,"range":{"start_line":2469,"start_character":44,"end_line":2469,"end_character":69},"updated":"2021-05-27 14:37:54.000000000","message":"Should the member and admin ever exists simultaneously?\n\nNIT: if you need to spin another PS, consistency is nice, no spaces like everywhere else.","commit_id":"14451ba55c8679995bc7d23cb23f789806322d82"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"1cfdbc15b19e081710ff8e38afebb79844b94503","unresolved":true,"context_lines":[{"line_number":2466,"context_line":"        # Create an image for role spl_role with extra props"},{"line_number":2467,"context_line":"        path \u003d self._url(\u0027/v2/images\u0027)"},{"line_number":2468,"context_line":"        headers \u003d self._headers({\u0027content-type\u0027: \u0027application/json\u0027,"},{"line_number":2469,"context_line":"                                 \u0027X-Roles\u0027: \u0027member, spl_role, admin\u0027})"},{"line_number":2470,"context_line":"        data \u003d jsonutils.dumps({\u0027name\u0027: \u0027image-1\u0027,"},{"line_number":2471,"context_line":"                                \u0027disk_format\u0027: \u0027aki\u0027,"},{"line_number":2472,"context_line":"                                \u0027container_format\u0027: \u0027aki\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"c80969cf_61f6b34d","line":2469,"range":{"start_line":2469,"start_character":44,"end_line":2469,"end_character":69},"in_reply_to":"9dcf7379_6b9fb2ce","updated":"2021-05-27 16:24:56.000000000","message":"\u003e Should the member and admin ever exists simultaneously?\n\nHmm, yeah, I dunno. Technically I don\u0027t think that\u0027s a problem, although it might be unrealistic. This was likely due to a failure I was seeing, but it\u0027s also possibly an over-zealous find-and-replace given the number I had do to here. It\u0027s been a while since I had this all in my head so I\u0027ll need to re-load context and will poke at this and see.\n\n\u003e NIT: if you need to spin another PS, consistency is nice, no spaces like everywhere else.\n\nAck.","commit_id":"14451ba55c8679995bc7d23cb23f789806322d82"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"68517b9fd2caae7f74daf91176001516f533fdb3","unresolved":true,"context_lines":[{"line_number":2466,"context_line":"        # Create an image for role spl_role with extra props"},{"line_number":2467,"context_line":"        path \u003d self._url(\u0027/v2/images\u0027)"},{"line_number":2468,"context_line":"        headers \u003d self._headers({\u0027content-type\u0027: \u0027application/json\u0027,"},{"line_number":2469,"context_line":"                                 \u0027X-Roles\u0027: \u0027member, spl_role, admin\u0027})"},{"line_number":2470,"context_line":"        data \u003d jsonutils.dumps({\u0027name\u0027: \u0027image-1\u0027,"},{"line_number":2471,"context_line":"                                \u0027disk_format\u0027: \u0027aki\u0027,"},{"line_number":2472,"context_line":"                                \u0027container_format\u0027: \u0027aki\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3237081f_d5967d5e","line":2469,"range":{"start_line":2469,"start_character":44,"end_line":2469,"end_character":69},"in_reply_to":"c80969cf_61f6b34d","updated":"2021-06-03 21:13:55.000000000","message":"Yeah, confirmed, this was overzealous find-and-replace.","commit_id":"14451ba55c8679995bc7d23cb23f789806322d82"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"582b256c327e1d8d734ef09c48172ed42c41369e","unresolved":true,"context_lines":[{"line_number":3085,"context_line":"             \u0027path\u0027: \u0027/x_none_update\u0027, \u0027value\u0027: \u00273\u0027}"},{"line_number":3086,"context_line":"        ])"},{"line_number":3087,"context_line":"        response \u003d requests.patch(path, headers\u003dheaders, data\u003ddata)"},{"line_number":3088,"context_line":"        self.assertEqual(http.CONFLICT, response.status_code, response.text)"},{"line_number":3089,"context_line":""},{"line_number":3090,"context_line":"        # Verify neither admin nor unknown role can delete properties marked"},{"line_number":3091,"context_line":"        # with \u0027!\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"e04fdfd9_73583172","line":3088,"range":{"start_line":3088,"start_character":25,"end_line":3088,"end_character":38},"updated":"2021-05-21 13:57:37.000000000","message":"same case you\u0027re worried about above","commit_id":"14451ba55c8679995bc7d23cb23f789806322d82"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"68517b9fd2caae7f74daf91176001516f533fdb3","unresolved":true,"context_lines":[{"line_number":3085,"context_line":"             \u0027path\u0027: \u0027/x_none_update\u0027, \u0027value\u0027: \u00273\u0027}"},{"line_number":3086,"context_line":"        ])"},{"line_number":3087,"context_line":"        response \u003d requests.patch(path, headers\u003dheaders, data\u003ddata)"},{"line_number":3088,"context_line":"        self.assertEqual(http.CONFLICT, response.status_code, response.text)"},{"line_number":3089,"context_line":""},{"line_number":3090,"context_line":"        # Verify neither admin nor unknown role can delete properties marked"},{"line_number":3091,"context_line":"        # with \u0027!\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f68f008_d3826796","line":3088,"range":{"start_line":3088,"start_character":25,"end_line":3088,"end_character":38},"in_reply_to":"8f2ea892_7cffcd29","updated":"2021-06-03 21:13:55.000000000","message":"So, looking at this more, I think this is supposed to be a conflict, because the property is excluded from update in the protections list. I don\u0027t know why admin is expected to get a forbidden (L3078) and a user is not though. But, adding member on L3082 (to set up for the next patch) does not seem to change the behavior. This is the error the server throws:\n\n There was a conflict when trying to complete your request.\n Property x_none_update does not exist.\n\nwhich seems to line up with the comment\u0027s expectation on L3053.","commit_id":"14451ba55c8679995bc7d23cb23f789806322d82"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6e449329bc42d832892c0fbde30a49221cd0d7f2","unresolved":true,"context_lines":[{"line_number":3085,"context_line":"             \u0027path\u0027: \u0027/x_none_update\u0027, \u0027value\u0027: \u00273\u0027}"},{"line_number":3086,"context_line":"        ])"},{"line_number":3087,"context_line":"        response \u003d requests.patch(path, headers\u003dheaders, data\u003ddata)"},{"line_number":3088,"context_line":"        self.assertEqual(http.CONFLICT, response.status_code, response.text)"},{"line_number":3089,"context_line":""},{"line_number":3090,"context_line":"        # Verify neither admin nor unknown role can delete properties marked"},{"line_number":3091,"context_line":"        # with \u0027!\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"8f2ea892_7cffcd29","line":3088,"range":{"start_line":3088,"start_character":25,"end_line":3088,"end_character":38},"in_reply_to":"e04fdfd9_73583172","updated":"2021-05-21 14:24:42.000000000","message":"Hmm, it\u0027s been a while since I looked at this code, but... I guess I\u0027m not sure why these aren\u0027t failing with FORBIDDEN after this change as well. Perhaps these are actually hitting some other policy-unrelated conflict...","commit_id":"14451ba55c8679995bc7d23cb23f789806322d82"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"582b256c327e1d8d734ef09c48172ed42c41369e","unresolved":true,"context_lines":[{"line_number":3119,"context_line":"            {\u0027op\u0027: \u0027remove\u0027, \u0027path\u0027: \u0027/x_none_delete\u0027}"},{"line_number":3120,"context_line":"        ])"},{"line_number":3121,"context_line":"        response \u003d requests.patch(path, headers\u003dheaders, data\u003ddata)"},{"line_number":3122,"context_line":"        self.assertEqual(http.CONFLICT, response.status_code, response.text)"},{"line_number":3123,"context_line":""},{"line_number":3124,"context_line":"        self.stop_servers()"},{"line_number":3125,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"057ee041_ce72af61","line":3122,"range":{"start_line":3122,"start_character":25,"end_line":3122,"end_character":38},"updated":"2021-05-21 13:57:37.000000000","message":"same case you\u0027re worried about above","commit_id":"14451ba55c8679995bc7d23cb23f789806322d82"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"68517b9fd2caae7f74daf91176001516f533fdb3","unresolved":true,"context_lines":[{"line_number":3119,"context_line":"            {\u0027op\u0027: \u0027remove\u0027, \u0027path\u0027: \u0027/x_none_delete\u0027}"},{"line_number":3120,"context_line":"        ])"},{"line_number":3121,"context_line":"        response \u003d requests.patch(path, headers\u003dheaders, data\u003ddata)"},{"line_number":3122,"context_line":"        self.assertEqual(http.CONFLICT, response.status_code, response.text)"},{"line_number":3123,"context_line":""},{"line_number":3124,"context_line":"        self.stop_servers()"},{"line_number":3125,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"cb9c42ba_2d746880","line":3122,"range":{"start_line":3122,"start_character":25,"end_line":3122,"end_character":38},"in_reply_to":"057ee041_ce72af61","updated":"2021-06-03 21:13:55.000000000","message":"Same as above.","commit_id":"14451ba55c8679995bc7d23cb23f789806322d82"}],"glance/tests/unit/v2/test_images_resource.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e569c2f40b4e43dd7d0eda8ca39d91da0d0d6d99","unresolved":true,"context_lines":[{"line_number":1579,"context_line":"        self.assertRaises(webob.exc.HTTPForbidden, self.controller.update,"},{"line_number":1580,"context_line":"                          another_request, created_image.image_id, changes)"},{"line_number":1581,"context_line":""},{"line_number":1582,"context_line":"        another_request \u003d unit_test_utils.get_fake_request(roles\u003d[\u0027member\u0027,"},{"line_number":1583,"context_line":"                                                                  \u0027spl_role\u0027])"},{"line_number":1584,"context_line":"        output \u003d self.controller.update(another_request,"},{"line_number":1585,"context_line":"                                        created_image.image_id, changes)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ef77d9be_6d899b6d","line":1582,"range":{"start_line":1582,"start_character":67,"end_line":1582,"end_character":73},"updated":"2021-08-05 21:53:13.000000000","message":"Super late follow up, but I wanted to get this in review instead of an IRC conversation.\n\nKeystone automatically builds a relationship between reader, member, and admin. People when the member role on a project will have a token that contains the member and reader roles, since member implies reader and admin implies member.\n\nThis keeps the roles hierarchical and makes writing policy check strings easier.","commit_id":"76162a7222c3d2c5eeae03ca7a710cd6401b36da"}]}
