)]}'
{"cinder/tests/unit/api/v3/test_volume_protection.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"c8405eaac3273893464149de3847511802c19e9a","unresolved":false,"context_lines":[{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        self.assertEqual(http_client.FORBIDDEN, response.status_int)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def test_everyone_can_create_volume(self):"},{"line_number":202,"context_line":"        # Make sure normal user is authorized to force delete volumes"},{"line_number":203,"context_line":"        user_context \u003d self.user_context"},{"line_number":204,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_fb6111a4","line":201,"range":{"start_line":201,"start_character":13,"end_line":201,"end_character":21},"updated":"2018-11-14 03:35:36.000000000","message":"everyone or anyone? not sure","commit_id":"30776017f6542b149a6a046e31c457802fe7113b"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"508dd072df2fd6c060e60a1a0bdb4f2ac8245e65","unresolved":false,"context_lines":[{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        self.assertEqual(http_client.FORBIDDEN, response.status_int)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def test_everyone_can_create_volume(self):"},{"line_number":202,"context_line":"        # Make sure normal user is authorized to force delete volumes"},{"line_number":203,"context_line":"        user_context \u003d self.user_context"},{"line_number":204,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_ad7fe0dc","line":201,"range":{"start_line":201,"start_character":13,"end_line":201,"end_character":21},"in_reply_to":"3f79a3b5_fb6111a4","updated":"2018-11-14 06:52:59.000000000","message":"yes, anyone is better","commit_id":"30776017f6542b149a6a046e31c457802fe7113b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"c8405eaac3273893464149de3847511802c19e9a","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        response \u003d self._get_request_response(user_context, path, \u0027POST\u0027,"},{"line_number":223,"context_line":"                                              body\u003dbody)"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        self.assertEqual(http_client.ACCEPTED, response.status_int)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_9bca5d79","line":225,"updated":"2018-11-14 03:35:36.000000000","message":"can we add some more assertions? like status: \u0027available\u0027","commit_id":"30776017f6542b149a6a046e31c457802fe7113b"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"508dd072df2fd6c060e60a1a0bdb4f2ac8245e65","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        response \u003d self._get_request_response(user_context, path, \u0027POST\u0027,"},{"line_number":223,"context_line":"                                              body\u003dbody)"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        self.assertEqual(http_client.ACCEPTED, response.status_int)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_0d6e142d","line":225,"in_reply_to":"3f79a3b5_9bca5d79","updated":"2018-11-14 06:52:59.000000000","message":"This is a case to ensure the policy is okay, so I don\u0027t think we need other assertions.","commit_id":"30776017f6542b149a6a046e31c457802fe7113b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"976fb30866383917cc11e4af586551390196030d","unresolved":false,"context_lines":[{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        self.assertEqual(http_client.FORBIDDEN, response.status_int)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def test_anyone_can_create_volume(self):"},{"line_number":202,"context_line":"        # Make sure normal user is authorized to force delete volumes"},{"line_number":203,"context_line":"        user_context \u003d self.user_context"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        path \u003d \u0027/v3/%(project_id)s/volumes\u0027 % {"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_719652f1","line":202,"range":{"start_line":201,"start_character":0,"end_line":202,"end_character":69},"updated":"2018-12-04 13:27:31.000000000","message":"I suggest renaming this to \u0027test_normal_user_can_create_volume\u0027 and deleting the comment.  The comment doesn\u0027t say much beyond what the test title says, and such comments are likely to get out-of-date (as you can see has already happened here--the comment is talking about force deleting volumes).","commit_id":"d05e6d422987e3e6937b121e3ff67923b2d78e34"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"1d45af174c42735b43573e07384b73c0258e9624","unresolved":false,"context_lines":[{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        self.assertEqual(http_client.FORBIDDEN, response.status_int)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def test_anyone_can_create_volume(self):"},{"line_number":202,"context_line":"        # Make sure normal user is authorized to force delete volumes"},{"line_number":203,"context_line":"        user_context \u003d self.user_context"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        path \u003d \u0027/v3/%(project_id)s/volumes\u0027 % {"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_483d76b7","line":202,"range":{"start_line":201,"start_character":0,"end_line":202,"end_character":69},"in_reply_to":"3f79a3b5_719652f1","updated":"2018-12-05 07:26:25.000000000","message":"Done","commit_id":"d05e6d422987e3e6937b121e3ff67923b2d78e34"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"976fb30866383917cc11e4af586551390196030d","unresolved":false,"context_lines":[{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        self.assertEqual(http_client.ACCEPTED, response.status_int)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def test_anyone_can_create_volume_from_image(self):"},{"line_number":215,"context_line":"        # Make sure normal user is authorized to force delete volumes"},{"line_number":216,"context_line":"        user_context \u003d self.user_context"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_f18902c8","line":214,"updated":"2018-12-04 13:27:31.000000000","message":"see comment on previous test","commit_id":"d05e6d422987e3e6937b121e3ff67923b2d78e34"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"1d45af174c42735b43573e07384b73c0258e9624","unresolved":false,"context_lines":[{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        self.assertEqual(http_client.ACCEPTED, response.status_int)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def test_anyone_can_create_volume_from_image(self):"},{"line_number":215,"context_line":"        # Make sure normal user is authorized to force delete volumes"},{"line_number":216,"context_line":"        user_context \u003d self.user_context"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_e86d62ce","line":214,"in_reply_to":"3f79a3b5_f18902c8","updated":"2018-12-05 07:26:25.000000000","message":"Done","commit_id":"d05e6d422987e3e6937b121e3ff67923b2d78e34"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"746f623a17131ddf38710ca4b5e3359bacd56095","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        self.assertEqual(http_client.FORBIDDEN, response.status_int)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    def test_normal_user_can_create_volume(self):"},{"line_number":258,"context_line":"        # Make sure normal user is authorized to force delete volumes"},{"line_number":259,"context_line":"        user_context \u003d self.user_context"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        path \u003d \u0027/v3/%(project_id)s/volumes\u0027 % {"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_d0224bb8","line":258,"range":{"start_line":258,"start_character":8,"end_line":258,"end_character":69},"updated":"2018-12-07 20:10:02.000000000","message":"You forgot to delete (or fix) this incorrect comment!","commit_id":"601c5fe109b5e820acd6b062ccd61b26eb14acbe"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"226895af61b94fb00a40b88d23435972ca1eeb4d","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        self.assertEqual(http_client.FORBIDDEN, response.status_int)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    def test_normal_user_can_create_volume(self):"},{"line_number":258,"context_line":"        # Make sure normal user is authorized to force delete volumes"},{"line_number":259,"context_line":"        user_context \u003d self.user_context"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        path \u003d \u0027/v3/%(project_id)s/volumes\u0027 % {"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_be68afba","line":258,"range":{"start_line":258,"start_character":8,"end_line":258,"end_character":69},"in_reply_to":"3f79a3b5_d0224bb8","updated":"2018-12-10 01:54:56.000000000","message":"Done","commit_id":"601c5fe109b5e820acd6b062ccd61b26eb14acbe"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"746f623a17131ddf38710ca4b5e3359bacd56095","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        self.assertEqual(http_client.ACCEPTED, response.status_int)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    def test_normal_user_can_create_volume_from_image(self):"},{"line_number":271,"context_line":"        # Make sure normal user is authorized to force delete volumes"},{"line_number":272,"context_line":"        user_context \u003d self.user_context"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        path \u003d \u0027/v3/%(project_id)s/volumes\u0027 % {"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_4b6450e8","line":271,"range":{"start_line":271,"start_character":7,"end_line":271,"end_character":69},"updated":"2018-12-07 20:10:02.000000000","message":"fix or delete","commit_id":"601c5fe109b5e820acd6b062ccd61b26eb14acbe"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"226895af61b94fb00a40b88d23435972ca1eeb4d","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        self.assertEqual(http_client.ACCEPTED, response.status_int)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    def test_normal_user_can_create_volume_from_image(self):"},{"line_number":271,"context_line":"        # Make sure normal user is authorized to force delete volumes"},{"line_number":272,"context_line":"        user_context \u003d self.user_context"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        path \u003d \u0027/v3/%(project_id)s/volumes\u0027 % {"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_5e639bde","line":271,"range":{"start_line":271,"start_character":7,"end_line":271,"end_character":69},"in_reply_to":"3f79a3b5_4b6450e8","updated":"2018-12-10 01:54:56.000000000","message":"Done","commit_id":"601c5fe109b5e820acd6b062ccd61b26eb14acbe"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"99e20c5a6ce989a6b16c6113bfaf5e060ab81e62","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        self.other_project_id \u003d fake_constants.PROJECT2_ID"},{"line_number":37,"context_line":"        self.admin_context \u003d cinder_context.RequestContext("},{"line_number":38,"context_line":"            user_id\u003duuid.uuid4().hex, project_id\u003dself.project_id,"},{"line_number":39,"context_line":"            is_admin\u003dTrue"},{"line_number":40,"context_line":"        )"},{"line_number":41,"context_line":"        self.user_context \u003d cinder_context.RequestContext("},{"line_number":42,"context_line":"            user_id\u003duuid.uuid4().hex, project_id\u003dself.project_id"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_f1dfd1d0","line":39,"range":{"start_line":39,"start_character":12,"end_line":39,"end_character":25},"updated":"2018-12-13 20:59:27.000000000","message":"I didn\u0027t realize this when I first wrote these tests, but another way we could represent an administrator is by using the roles attribute.\n\n  admin_context \u003d cinder_context.RequestContext(\n      user_id\u003duuid.uuid4().hex, project_id\u003dself.project_id,\n      roles\u003d[\u0027admin\u0027])\n\nor something like this to model a read-only user:\n\n  reader_context \u003d cinder_context.RequestContext(\n      user_id\u003duuid.uuid4().hex, project_id\u003dself.project_id,\n      roles\u003d[\u0027reader\u0027])\n\nWhich, in theory, is representing a user with a token scoped to self.project_id that has the `reader` role assignment on that project. I guess the advantage of this approach is that it makes it more clear what a context needs to consist of in order access an API.","commit_id":"284e92ea3b870a972fb306cfaddb4cdad6377bb6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"26124ee0cebf7224312a1e7d57adff9f900d025c","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        self.other_project_id \u003d fake_constants.PROJECT2_ID"},{"line_number":37,"context_line":"        self.admin_context \u003d cinder_context.RequestContext("},{"line_number":38,"context_line":"            user_id\u003duuid.uuid4().hex, project_id\u003dself.project_id,"},{"line_number":39,"context_line":"            is_admin\u003dTrue"},{"line_number":40,"context_line":"        )"},{"line_number":41,"context_line":"        self.user_context \u003d cinder_context.RequestContext("},{"line_number":42,"context_line":"            user_id\u003duuid.uuid4().hex, project_id\u003dself.project_id"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_6319a9d1","line":39,"range":{"start_line":39,"start_character":12,"end_line":39,"end_character":25},"in_reply_to":"3f79a3b5_a0734150","updated":"2018-12-14 14:44:47.000000000","message":"Yeah - I agree. I think it\u0027ll be a huge win if we can get things tested and the policies removed from the fake policy file maintained only for testing. At that point, we know we\u0027re testing the defaults and it\u0027ll be easier to make changes with a higher level of confidence.\n\nWe could also convert context from using `is_admin` to `roles` in a separate patch, too.","commit_id":"284e92ea3b870a972fb306cfaddb4cdad6377bb6"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"2f0e1db3bd7703feb75fd541259f9c1c12d98649","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        self.other_project_id \u003d fake_constants.PROJECT2_ID"},{"line_number":37,"context_line":"        self.admin_context \u003d cinder_context.RequestContext("},{"line_number":38,"context_line":"            user_id\u003duuid.uuid4().hex, project_id\u003dself.project_id,"},{"line_number":39,"context_line":"            is_admin\u003dTrue"},{"line_number":40,"context_line":"        )"},{"line_number":41,"context_line":"        self.user_context \u003d cinder_context.RequestContext("},{"line_number":42,"context_line":"            user_id\u003duuid.uuid4().hex, project_id\u003dself.project_id"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_a0734150","line":39,"range":{"start_line":39,"start_character":12,"end_line":39,"end_character":25},"in_reply_to":"3f79a3b5_f1dfd1d0","updated":"2018-12-14 02:07:36.000000000","message":"++ for the \"admin\" part.\n\nBut if we use \"reader\" here, the policy check_str should be updated as well. It\u0027ll be a little complex. How about doing it in the next step?","commit_id":"284e92ea3b870a972fb306cfaddb4cdad6377bb6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8a571063ea92206c6fa4a976db4755bb116b03f3","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        self.assertEqual(http_client.ACCEPTED, response.status_int)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    def test_nonadmin_user_can_create_volume_from_image(self):"},{"line_number":271,"context_line":"        # Make sure non-admin is authorized to force delete volumes"},{"line_number":272,"context_line":"        user_context \u003d self.user_context"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        path \u003d \u0027/v3/%(project_id)s/volumes\u0027 % {"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_b17e39bf","line":271,"range":{"start_line":271,"start_character":47,"end_line":271,"end_character":59},"updated":"2018-12-13 21:05:07.000000000","message":"create*?","commit_id":"284e92ea3b870a972fb306cfaddb4cdad6377bb6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8a571063ea92206c6fa4a976db4755bb116b03f3","unresolved":false,"context_lines":[{"line_number":281,"context_line":"        self.assertEqual(http_client.ACCEPTED, response.status_int)"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    def test_admin_can_create_volume(self):"},{"line_number":284,"context_line":"        # Make sure admin is authorized to force delete volumes"},{"line_number":285,"context_line":"        admin_context \u003d self.admin_context"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        path \u003d \u0027/v3/%(project_id)s/volumes\u0027 % {"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_91853dae","line":284,"range":{"start_line":284,"start_character":43,"end_line":284,"end_character":55},"updated":"2018-12-13 21:05:07.000000000","message":"create*?","commit_id":"284e92ea3b870a972fb306cfaddb4cdad6377bb6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8a571063ea92206c6fa4a976db4755bb116b03f3","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        self.assertEqual(http_client.ACCEPTED, response.status_int)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def test_admin_can_create_volume_from_image(self):"},{"line_number":297,"context_line":"        # Make sure admin is authorized to force delete volumes"},{"line_number":298,"context_line":"        admin_context \u003d self.admin_context"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        path \u003d \u0027/v3/%(project_id)s/volumes\u0027 % {"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_51b9e578","line":297,"range":{"start_line":297,"start_character":43,"end_line":297,"end_character":63},"updated":"2018-12-13 21:05:07.000000000","message":"create volumes from images*\n\nI\u0027m not sure what the convention is for docstrings in cinder unit tests, but I may have been overly wordy when I introduced these tests (maybe you don\u0027t need to follow my lead with the comments if people find them overly verbose).\n\nThe way you\u0027re naming tests is already super descriptive.","commit_id":"284e92ea3b870a972fb306cfaddb4cdad6377bb6"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"aa60dc4a30a0132a2513de2ff5b05da326939879","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        self.assertEqual(http_client.ACCEPTED, response.status_int)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def test_admin_can_create_volume_from_image(self):"},{"line_number":297,"context_line":"        # Make sure admin is authorized to force delete volumes"},{"line_number":298,"context_line":"        admin_context \u003d self.admin_context"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        path \u003d \u0027/v3/%(project_id)s/volumes\u0027 % {"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_e0793932","line":297,"range":{"start_line":297,"start_character":43,"end_line":297,"end_character":63},"in_reply_to":"3f79a3b5_51b9e578","updated":"2018-12-14 02:06:57.000000000","message":"OK, thanks @lance\n\nI will remove these redundant note. :)","commit_id":"284e92ea3b870a972fb306cfaddb4cdad6377bb6"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"02811b04796ee207771ad7b90bab73b335f6f36c","unresolved":false,"context_lines":[{"line_number":38,"context_line":"            user_id\u003duuid.uuid4().hex, project_id\u003dself.project_id,"},{"line_number":39,"context_line":"            roles\u003d[\u0027admin\u0027]"},{"line_number":40,"context_line":"        )"},{"line_number":41,"context_line":"        self.user_context \u003d cinder_context.RequestContext("},{"line_number":42,"context_line":"            user_id\u003duuid.uuid4().hex, project_id\u003dself.project_id"},{"line_number":43,"context_line":"        )"},{"line_number":44,"context_line":"        self.other_user_context \u003d cinder_context.RequestContext("},{"line_number":45,"context_line":"            user_id\u003duuid.uuid4().hex, project_id\u003dself.other_project_id"},{"line_number":46,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_3a509cd1","line":43,"range":{"start_line":41,"start_character":0,"end_line":43,"end_character":9},"updated":"2018-12-17 07:43:03.000000000","message":"generally, a user should assign a role in a project.","commit_id":"22d02af9ebfd2126a7e31638ee3614b3aedb5ab2"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d0ef3eeb90b14e4d8cfe866bef1f3bbcc45fe2f3","unresolved":false,"context_lines":[{"line_number":38,"context_line":"            user_id\u003duuid.uuid4().hex, project_id\u003dself.project_id,"},{"line_number":39,"context_line":"            roles\u003d[\u0027admin\u0027]"},{"line_number":40,"context_line":"        )"},{"line_number":41,"context_line":"        self.user_context \u003d cinder_context.RequestContext("},{"line_number":42,"context_line":"            user_id\u003duuid.uuid4().hex, project_id\u003dself.project_id"},{"line_number":43,"context_line":"        )"},{"line_number":44,"context_line":"        self.other_user_context \u003d cinder_context.RequestContext("},{"line_number":45,"context_line":"            user_id\u003duuid.uuid4().hex, project_id\u003dself.other_project_id"},{"line_number":46,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_55af627e","line":43,"range":{"start_line":41,"start_character":0,"end_line":43,"end_character":9},"in_reply_to":"3f79a3b5_3a509cd1","updated":"2018-12-17 14:48:04.000000000","message":"+1","commit_id":"22d02af9ebfd2126a7e31638ee3614b3aedb5ab2"}]}
