)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":21722,"name":"Dharini Chandrasekar","email":"dharini.chandrasekar@intel.com","username":"dharinic"},"change_message_id":"1bad3a4fa2551e9608c4743968db99391bda97c5","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Dharini Chandrasekar \u003cdharini.chandrasekar@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-03-10 23:33:14 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[WIP] Deport \u0027show_multiple_locations ectomy\u0027"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The configuration option ``show_multiple_locations`` has been deprecated"},{"line_number":10,"context_line":"since Newton in favor of the existing Role Based Access Control (RBAC)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9a30ddce_f1e4ceac","line":7,"range":{"start_line":7,"start_character":37,"end_line":7,"end_character":44},"updated":"2017-03-10 23:47:08.000000000","message":"s/ ectomy//","commit_id":"1ba73e56831cc60c2ae02b39ef7084ce60764298"}],"etc/policy.json":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2502f67f985bf062574c3bd633c5e7a3489a1329","unresolved":false,"context_lines":[{"line_number":14,"context_line":"    \"download_image\": \"\","},{"line_number":15,"context_line":"    \"upload_image\": \"\","},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    \"delete_image_location\": \"role:admin\","},{"line_number":18,"context_line":"    \"get_image_location\": \"\","},{"line_number":19,"context_line":"    \"set_image_location\": \"\","},{"line_number":20,"context_line":""}],"source_content_type":"application/json","patch_set":3,"id":"3a1ff146_077738d5","line":17,"updated":"2017-03-14 14:58:31.000000000","message":"This needs to be discussed on the spec.  The equivalent to show_multiple_locations\u003dFalse would be \"!\", not \"role:admin\".\n\nAlso, in most places, if show_multiple_locations\u003dFalse, the get_ and set_ never come into play.  These need to have the same value set as delete_ does (or, we need an explanation on the spec as to why not).","commit_id":"caa7ff2bb8197f8a257325290f8433b2ac1fff65"},{"author":{"_account_id":21722,"name":"Dharini Chandrasekar","email":"dharini.chandrasekar@intel.com","username":"dharinic"},"change_message_id":"721003aa5a1a4763831bcbd0cbb5d626ab7fd243","unresolved":false,"context_lines":[{"line_number":14,"context_line":"    \"download_image\": \"\","},{"line_number":15,"context_line":"    \"upload_image\": \"\","},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    \"delete_image_location\": \"role:admin\","},{"line_number":18,"context_line":"    \"get_image_location\": \"\","},{"line_number":19,"context_line":"    \"set_image_location\": \"\","},{"line_number":20,"context_line":""}],"source_content_type":"application/json","patch_set":3,"id":"3a1ff146_1f576d03","line":17,"in_reply_to":"3a1ff146_077738d5","updated":"2017-03-14 22:09:25.000000000","message":"All the three can have same values only if all are left open in code. \nWe cannot do \"role:admin\" for all the three location rules due to other projects depending on the current policy rules.\nFor example, if we had admin only for all 3 uploading image data would fail as that is not admin only.\nAlso tempest tests check locations after image creation, meaning we cannot set get_image_locations to admin only.\nHowever, I felt that delete_image_locations is a crucial rule and can be admin only. We can diuscuss that on the spec maybe? I will leave this as is for now.","commit_id":"caa7ff2bb8197f8a257325290f8433b2ac1fff65"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b95ef82f66bb28132c620eb776d19f521978eb73","unresolved":false,"context_lines":[{"line_number":14,"context_line":"    \"download_image\": \"\","},{"line_number":15,"context_line":"    \"upload_image\": \"\","},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    \"delete_image_location\": \"role:admin\","},{"line_number":18,"context_line":"    \"get_image_location\": \"\","},{"line_number":19,"context_line":"    \"set_image_location\": \"\","},{"line_number":20,"context_line":""}],"source_content_type":"application/json","patch_set":3,"id":"3a1ff146_93ac31ef","line":17,"in_reply_to":"3a1ff146_1f576d03","updated":"2017-03-15 02:17:30.000000000","message":"This is exactly why we need a spec.  The spec will have to map out what currently happens for various combinations of the show_multiple_locations option and the three policies.  Right now, we leave \"set_image_location\":\"\" and we can allow \"upload_image\":\"\", and end users can upload images but cannot set locations themselves when show_multiple_locations\u003dFalse.  We are going to need to be able to preserve that behavior (i.e., end user can upload image data but cannot set locations manually) after show_multiple_locations is removed.\n\nAlso, if get_image_location is restricted, does that affect the current show_direct_url setting?  That\u0027s another complication that we\u0027ll have to deal with.","commit_id":"caa7ff2bb8197f8a257325290f8433b2ac1fff65"},{"author":{"_account_id":21722,"name":"Dharini Chandrasekar","email":"dharini.chandrasekar@intel.com","username":"dharinic"},"change_message_id":"511e252d5c55530dbd52c8d1f82bc902626a98d2","unresolved":false,"context_lines":[{"line_number":14,"context_line":"    \"download_image\": \"\","},{"line_number":15,"context_line":"    \"upload_image\": \"\","},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    \"delete_image_location\": \"role:admin\","},{"line_number":18,"context_line":"    \"get_image_location\": \"\","},{"line_number":19,"context_line":"    \"set_image_location\": \"\","},{"line_number":20,"context_line":""}],"source_content_type":"application/json","patch_set":3,"id":"3a1ff146_f6fe3304","line":17,"in_reply_to":"3a1ff146_93ac31ef","updated":"2017-03-15 03:58:00.000000000","message":"Since we are removing \"show_multiple_locations\", we now will have to proceed with policy rule checks. This means that to set an image location, all is needed is permission in the policy.json file (member role or admin role any role).In short, we will be relying on the policy rule to allow any image location actions.\n\nSince uploading image data automatically sets an image location, it is necessary that \"add_image\" and \"set_image_location\" rules match. Which also means \"get_image_location\" match.\nWhile we were using the config option \"show_multiple_locations\", we were preventing further location updates (subsequent location adds, removals, replacements) if show_multiple_locations was set to False.\nNow since we are getting rid of it and relying in policies, it means that  subsequent location updates will also be permitted for the same user. I am thinking how we can achieve what the config option was doing.. It was only preventing subsequent location updates.. \n\nAnd answering to your final question, if get_image_location is restricted, yes what show_direct_url does will also be effected. As this relies on the policy \"get_image_location\" to decide whether and which (when there are multiple locations; it uses location_strategy) location to show.","commit_id":"caa7ff2bb8197f8a257325290f8433b2ac1fff65"}],"glance/api/v2/images.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2502f67f985bf062574c3bd633c5e7a3489a1329","unresolved":false,"context_lines":[{"line_number":766,"context_line":""},{"line_number":767,"context_line":"    def _format_image(self, image, response):"},{"line_number":768,"context_line":""},{"line_number":769,"context_line":"        def _get_image_locations(image, action\u003dNone):"},{"line_number":770,"context_line":"            try:"},{"line_number":771,"context_line":"                self.policy.enforce(response.request.context, action, {})"},{"line_number":772,"context_line":"                return list(image.locations)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a1ff146_2a487b2d","line":769,"updated":"2017-03-14 14:58:31.000000000","message":"I wonder about the function signature here.  _get_image_locations() has a very specific name, so why do we want to accept an action as a parameter?  Won\u0027t it always be \u0027get_image_location\u0027 ?  (I\u0027m worried about someone refactoring later and forgetting to pass the action as an argument.)","commit_id":"caa7ff2bb8197f8a257325290f8433b2ac1fff65"},{"author":{"_account_id":21722,"name":"Dharini Chandrasekar","email":"dharini.chandrasekar@intel.com","username":"dharinic"},"change_message_id":"721003aa5a1a4763831bcbd0cbb5d626ab7fd243","unresolved":false,"context_lines":[{"line_number":766,"context_line":""},{"line_number":767,"context_line":"    def _format_image(self, image, response):"},{"line_number":768,"context_line":""},{"line_number":769,"context_line":"        def _get_image_locations(image, action\u003dNone):"},{"line_number":770,"context_line":"            try:"},{"line_number":771,"context_line":"                self.policy.enforce(response.request.context, action, {})"},{"line_number":772,"context_line":"                return list(image.locations)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a1ff146_fc161fa6","line":769,"in_reply_to":"3a1ff146_2a487b2d","updated":"2017-03-14 22:09:25.000000000","message":"I made it accept action as I thought hardcoding the action might not be the best idea. But since this is the response serializer, i think we can be fairly confident that the action will be \u0027get_image_location\u0027. Will update it in the upcoming PS..","commit_id":"caa7ff2bb8197f8a257325290f8433b2ac1fff65"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2502f67f985bf062574c3bd633c5e7a3489a1329","unresolved":false,"context_lines":[{"line_number":793,"context_line":"                    tmp.pop(\u0027id\u0027, None)"},{"line_number":794,"context_line":"                    tmp.pop(\u0027status\u0027, None)"},{"line_number":795,"context_line":"                    image_view[\u0027locations\u0027].append(tmp)"},{"line_number":796,"context_line":"            else:"},{"line_number":797,"context_line":"                # NOTE (flwang): We will still show \"locations\": [] if"},{"line_number":798,"context_line":"                # image.locations is None to indicate it\u0027s allowed to show"},{"line_number":799,"context_line":"                # locations but it\u0027s just non-existent."}],"source_content_type":"text/x-python","patch_set":3,"id":"3a1ff146_2acb1b74","line":796,"updated":"2017-03-14 14:58:31.000000000","message":"if the get_image_location policy doesn\u0027t allow this user to see locations, then the call at 788 will return [], which will invoke this \u0027else\u0027 clause ... which we *don\u0027t* want, because the user should not see a \u0027locations\u0027 field in the response at all if they don\u0027t have get_image_location permissions.","commit_id":"caa7ff2bb8197f8a257325290f8433b2ac1fff65"},{"author":{"_account_id":21722,"name":"Dharini Chandrasekar","email":"dharini.chandrasekar@intel.com","username":"dharinic"},"change_message_id":"721003aa5a1a4763831bcbd0cbb5d626ab7fd243","unresolved":false,"context_lines":[{"line_number":793,"context_line":"                    tmp.pop(\u0027id\u0027, None)"},{"line_number":794,"context_line":"                    tmp.pop(\u0027status\u0027, None)"},{"line_number":795,"context_line":"                    image_view[\u0027locations\u0027].append(tmp)"},{"line_number":796,"context_line":"            else:"},{"line_number":797,"context_line":"                # NOTE (flwang): We will still show \"locations\": [] if"},{"line_number":798,"context_line":"                # image.locations is None to indicate it\u0027s allowed to show"},{"line_number":799,"context_line":"                # locations but it\u0027s just non-existent."}],"source_content_type":"text/x-python","patch_set":3,"id":"3a1ff146_7c230f06","line":796,"in_reply_to":"3a1ff146_2acb1b74","updated":"2017-03-14 22:09:25.000000000","message":"Done. Will update in the upcoming PS.","commit_id":"caa7ff2bb8197f8a257325290f8433b2ac1fff65"}],"glance/tests/etc/policy.json":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2502f67f985bf062574c3bd633c5e7a3489a1329","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    \"delete_image_location\": \"role:admin\","},{"line_number":19,"context_line":"    \"get_image_location\": \"\","},{"line_number":20,"context_line":"    \"set_image_location\": \"\","},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    \"add_member\": \"\","},{"line_number":23,"context_line":"    \"delete_member\": \"\","}],"source_content_type":"application/json","patch_set":3,"id":"3a1ff146_8a2a4fe6","line":20,"updated":"2017-03-14 14:58:31.000000000","message":"Just a note that if changes are made to the \"real\" default policy file, they\u0027ll need to be reflected here.","commit_id":"caa7ff2bb8197f8a257325290f8433b2ac1fff65"}],"glance/tests/functional/v2/test_images.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2502f67f985bf062574c3bd633c5e7a3489a1329","unresolved":false,"context_lines":[{"line_number":3194,"context_line":"        self.assertEqual(http.OK, response.status_code)"},{"line_number":3195,"context_line":"        image \u003d jsonutils.loads(response.text)"},{"line_number":3196,"context_line":"        self.assertIn(\u0027locations\u0027, image)"},{"line_number":3197,"context_line":"        loc \u003d image[\u0027locations\u0027]"},{"line_number":3198,"context_line":"        self.assertEqual(len(loc), 0)"},{"line_number":3199,"context_line":""},{"line_number":3200,"context_line":"        self.stop_servers()"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a1ff146_8a496f91","line":3197,"updated":"2017-03-14 14:58:31.000000000","message":"we should get a keyerror here, I think.  See my comments about the \u0027else\u0027 in images.py, line 796","commit_id":"caa7ff2bb8197f8a257325290f8433b2ac1fff65"},{"author":{"_account_id":21722,"name":"Dharini Chandrasekar","email":"dharini.chandrasekar@intel.com","username":"dharinic"},"change_message_id":"7c7958014ecdd483b0ef68fb59e294aaeb2d5d2c","unresolved":false,"context_lines":[{"line_number":3194,"context_line":"        self.assertEqual(http.OK, response.status_code)"},{"line_number":3195,"context_line":"        image \u003d jsonutils.loads(response.text)"},{"line_number":3196,"context_line":"        self.assertIn(\u0027locations\u0027, image)"},{"line_number":3197,"context_line":"        loc \u003d image[\u0027locations\u0027]"},{"line_number":3198,"context_line":"        self.assertEqual(len(loc), 0)"},{"line_number":3199,"context_line":""},{"line_number":3200,"context_line":"        self.stop_servers()"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a1ff146_107cba71","line":3197,"in_reply_to":"3a1ff146_8a496f91","updated":"2017-03-15 00:09:49.000000000","message":"will assertNotIn for locations in response.","commit_id":"caa7ff2bb8197f8a257325290f8433b2ac1fff65"}],"glance/tests/unit/v2/test_images_resource.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2502f67f985bf062574c3bd633c5e7a3489a1329","unresolved":false,"context_lines":[{"line_number":3224,"context_line":"                    \u0027visibility\u0027: \u0027public\u0027,"},{"line_number":3225,"context_line":"                    \u0027protected\u0027: False,"},{"line_number":3226,"context_line":"                    \u0027tags\u0027: set([\u0027one\u0027, \u0027two\u0027]),"},{"line_number":3227,"context_line":"                    \u0027locations\u0027: [],"},{"line_number":3228,"context_line":"                    \u0027size\u0027: 1024,"},{"line_number":3229,"context_line":"                    \u0027virtual_size\u0027: 3072,"},{"line_number":3230,"context_line":"                    \u0027checksum\u0027: \u0027ca425b88f047ce8ec45ee90e813ada91\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a1ff146_0d13d95d","line":3227,"updated":"2017-03-14 14:58:31.000000000","message":"see my comment in images.py, line 796","commit_id":"caa7ff2bb8197f8a257325290f8433b2ac1fff65"},{"author":{"_account_id":21722,"name":"Dharini Chandrasekar","email":"dharini.chandrasekar@intel.com","username":"dharinic"},"change_message_id":"7c7958014ecdd483b0ef68fb59e294aaeb2d5d2c","unresolved":false,"context_lines":[{"line_number":3224,"context_line":"                    \u0027visibility\u0027: \u0027public\u0027,"},{"line_number":3225,"context_line":"                    \u0027protected\u0027: False,"},{"line_number":3226,"context_line":"                    \u0027tags\u0027: set([\u0027one\u0027, \u0027two\u0027]),"},{"line_number":3227,"context_line":"                    \u0027locations\u0027: [],"},{"line_number":3228,"context_line":"                    \u0027size\u0027: 1024,"},{"line_number":3229,"context_line":"                    \u0027virtual_size\u0027: 3072,"},{"line_number":3230,"context_line":"                    \u0027checksum\u0027: \u0027ca425b88f047ce8ec45ee90e813ada91\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a1ff146_ca627516","line":3227,"in_reply_to":"3a1ff146_0d13d95d","updated":"2017-03-15 00:09:49.000000000","message":"Brian,\nThese will still remain as an empty list even if we do not set image locations in response because the request goes through and is not denied (policy for get_image_location is not set as admin-only). So as per code, locations will be an empty list.\nOn the other hand, if we had the get_image_location limited to admin-only for this test purpose and run this test, the test would not be seeing locations.\n\nThe code on the left does not have this at all cos the option \u0027show_multiple_locations\u0027 has not been set for those test cases.","commit_id":"caa7ff2bb8197f8a257325290f8433b2ac1fff65"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2502f67f985bf062574c3bd633c5e7a3489a1329","unresolved":false,"context_lines":[{"line_number":3245,"context_line":"                    \u0027visibility\u0027: \u0027private\u0027,"},{"line_number":3246,"context_line":"                    \u0027protected\u0027: False,"},{"line_number":3247,"context_line":"                    \u0027tags\u0027: set([]),"},{"line_number":3248,"context_line":"                    \u0027locations\u0027: [],"},{"line_number":3249,"context_line":"                    \u0027created_at\u0027: ISOTIME,"},{"line_number":3250,"context_line":"                    \u0027updated_at\u0027: ISOTIME,"},{"line_number":3251,"context_line":"                    \u0027self\u0027: \u0027/v2/images/%s\u0027 % UUID2,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a1ff146_8d2509b0","line":3248,"updated":"2017-03-14 14:58:31.000000000","message":"ditto","commit_id":"caa7ff2bb8197f8a257325290f8433b2ac1fff65"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2502f67f985bf062574c3bd633c5e7a3489a1329","unresolved":false,"context_lines":[{"line_number":3359,"context_line":"            \u0027visibility\u0027: \u0027private\u0027,"},{"line_number":3360,"context_line":"            \u0027protected\u0027: False,"},{"line_number":3361,"context_line":"            \u0027tags\u0027: [],"},{"line_number":3362,"context_line":"            \u0027locations\u0027: [],"},{"line_number":3363,"context_line":"            \u0027created_at\u0027: ISOTIME,"},{"line_number":3364,"context_line":"            \u0027updated_at\u0027: ISOTIME,"},{"line_number":3365,"context_line":"            \u0027self\u0027: \u0027/v2/images/%s\u0027 % UUID2,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a1ff146_2d37b5e4","line":3362,"updated":"2017-03-14 14:58:31.000000000","message":"see my comment in images.py, line 796","commit_id":"caa7ff2bb8197f8a257325290f8433b2ac1fff65"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2502f67f985bf062574c3bd633c5e7a3489a1329","unresolved":false,"context_lines":[{"line_number":3388,"context_line":"            \u0027visibility\u0027: \u0027public\u0027,"},{"line_number":3389,"context_line":"            \u0027protected\u0027: False,"},{"line_number":3390,"context_line":"            \u0027tags\u0027: [\u0027one\u0027, \u0027two\u0027],"},{"line_number":3391,"context_line":"            \u0027locations\u0027: [],"},{"line_number":3392,"context_line":"            \u0027size\u0027: 1024,"},{"line_number":3393,"context_line":"            \u0027virtual_size\u0027: 3072,"},{"line_number":3394,"context_line":"            \u0027checksum\u0027: \u0027ca425b88f047ce8ec45ee90e813ada91\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a1ff146_4d34f1dd","line":3391,"updated":"2017-03-14 14:58:31.000000000","message":"see my comment in images.py, line 796","commit_id":"caa7ff2bb8197f8a257325290f8433b2ac1fff65"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2502f67f985bf062574c3bd633c5e7a3489a1329","unresolved":false,"context_lines":[{"line_number":3421,"context_line":"            \u0027visibility\u0027: \u0027public\u0027,"},{"line_number":3422,"context_line":"            \u0027protected\u0027: False,"},{"line_number":3423,"context_line":"            \u0027tags\u0027: set([\u0027one\u0027, \u0027two\u0027]),"},{"line_number":3424,"context_line":"            \u0027locations\u0027: [],"},{"line_number":3425,"context_line":"            \u0027size\u0027: 1024,"},{"line_number":3426,"context_line":"            \u0027virtual_size\u0027: 3072,"},{"line_number":3427,"context_line":"            \u0027checksum\u0027: \u0027ca425b88f047ce8ec45ee90e813ada91\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a1ff146_6d31adec","line":3424,"updated":"2017-03-14 14:58:31.000000000","message":"see my comment in images.py, line 796","commit_id":"caa7ff2bb8197f8a257325290f8433b2ac1fff65"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2502f67f985bf062574c3bd633c5e7a3489a1329","unresolved":false,"context_lines":[{"line_number":3481,"context_line":"                    u\u0027visibility\u0027: u\u0027public\u0027,"},{"line_number":3482,"context_line":"                    u\u0027protected\u0027: False,"},{"line_number":3483,"context_line":"                    u\u0027tags\u0027: [u\u0027\\u2160\u0027, u\u0027\\u2161\u0027],"},{"line_number":3484,"context_line":"                    u\u0027locations\u0027: [],"},{"line_number":3485,"context_line":"                    u\u0027size\u0027: 1024,"},{"line_number":3486,"context_line":"                    u\u0027virtual_size\u0027: 3072,"},{"line_number":3487,"context_line":"                    u\u0027checksum\u0027: u\u0027ca425b88f047ce8ec45ee90e813ada91\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a1ff146_ad51e510","line":3484,"updated":"2017-03-14 14:58:31.000000000","message":"see my comment in images.py, line 796","commit_id":"caa7ff2bb8197f8a257325290f8433b2ac1fff65"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2502f67f985bf062574c3bd633c5e7a3489a1329","unresolved":false,"context_lines":[{"line_number":3519,"context_line":"            u\u0027visibility\u0027: u\u0027public\u0027,"},{"line_number":3520,"context_line":"            u\u0027protected\u0027: False,"},{"line_number":3521,"context_line":"            u\u0027tags\u0027: set([u\u0027\\u2160\u0027, u\u0027\\u2161\u0027]),"},{"line_number":3522,"context_line":"            u\u0027locations\u0027: [],"},{"line_number":3523,"context_line":"            u\u0027size\u0027: 1024,"},{"line_number":3524,"context_line":"            u\u0027virtual_size\u0027: 3072,"},{"line_number":3525,"context_line":"            u\u0027checksum\u0027: u\u0027ca425b88f047ce8ec45ee90e813ada91\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a1ff146_0d41193a","line":3522,"updated":"2017-03-14 14:58:31.000000000","message":"see my comment in images.py, line 796","commit_id":"caa7ff2bb8197f8a257325290f8433b2ac1fff65"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2502f67f985bf062574c3bd633c5e7a3489a1329","unresolved":false,"context_lines":[{"line_number":3587,"context_line":"            u\u0027visibility\u0027: u\u0027public\u0027,"},{"line_number":3588,"context_line":"            u\u0027protected\u0027: False,"},{"line_number":3589,"context_line":"            u\u0027tags\u0027: set([u\u0027\\u2160\u0027, u\u0027\\u2161\u0027]),"},{"line_number":3590,"context_line":"            u\u0027locations\u0027: [],"},{"line_number":3591,"context_line":"            u\u0027size\u0027: 1024,"},{"line_number":3592,"context_line":"            u\u0027virtual_size\u0027: 3072,"},{"line_number":3593,"context_line":"            u\u0027checksum\u0027: u\u0027ca425b88f047ce8ec45ee90e813ada91\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a1ff146_4d4b115a","line":3590,"updated":"2017-03-14 14:58:31.000000000","message":"see my comment in images.py, line 796","commit_id":"caa7ff2bb8197f8a257325290f8433b2ac1fff65"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2502f67f985bf062574c3bd633c5e7a3489a1329","unresolved":false,"context_lines":[{"line_number":3643,"context_line":"            \u0027protected\u0027: False,"},{"line_number":3644,"context_line":"            \u0027checksum\u0027: \u0027ca425b88f047ce8ec45ee90e813ada91\u0027,"},{"line_number":3645,"context_line":"            \u0027tags\u0027: [],"},{"line_number":3646,"context_line":"            \u0027locations\u0027: [],"},{"line_number":3647,"context_line":"            \u0027size\u0027: 1024,"},{"line_number":3648,"context_line":"            \u0027virtual_size\u0027: 3072,"},{"line_number":3649,"context_line":"            \u0027owner\u0027: \u00272c014f32-55eb-467d-8fcb-4bd706012f81\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a1ff146_8d7349b4","line":3646,"updated":"2017-03-14 14:58:31.000000000","message":"see my comment in images.py, line 796","commit_id":"caa7ff2bb8197f8a257325290f8433b2ac1fff65"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2502f67f985bf062574c3bd633c5e7a3489a1329","unresolved":false,"context_lines":[{"line_number":3673,"context_line":"            \u0027protected\u0027: False,"},{"line_number":3674,"context_line":"            \u0027checksum\u0027: \u0027ca425b88f047ce8ec45ee90e813ada91\u0027,"},{"line_number":3675,"context_line":"            \u0027tags\u0027: [],"},{"line_number":3676,"context_line":"            \u0027locations\u0027: [],"},{"line_number":3677,"context_line":"            \u0027size\u0027: 1024,"},{"line_number":3678,"context_line":"            \u0027virtual_size\u0027: 3072,"},{"line_number":3679,"context_line":"            \u0027owner\u0027: \u00272c014f32-55eb-467d-8fcb-4bd706012f81\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a1ff146_ed72fdac","line":3676,"updated":"2017-03-14 14:58:31.000000000","message":"see my comment in images.py, line 796","commit_id":"caa7ff2bb8197f8a257325290f8433b2ac1fff65"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2502f67f985bf062574c3bd633c5e7a3489a1329","unresolved":false,"context_lines":[{"line_number":3716,"context_line":"            \u0027checksum\u0027: \u0027ca425b88f047ce8ec45ee90e813ada91\u0027,"},{"line_number":3717,"context_line":"            \u0027marx\u0027: \u0027groucho\u0027,"},{"line_number":3718,"context_line":"            \u0027tags\u0027: [],"},{"line_number":3719,"context_line":"            \u0027locations\u0027: [],"},{"line_number":3720,"context_line":"            \u0027size\u0027: 1024,"},{"line_number":3721,"context_line":"            \u0027virtual_size\u0027: 3072,"},{"line_number":3722,"context_line":"            \u0027created_at\u0027: ISOTIME,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a1ff146_4d6231da","line":3719,"updated":"2017-03-14 14:58:31.000000000","message":"see my comment in images.py, line 796","commit_id":"caa7ff2bb8197f8a257325290f8433b2ac1fff65"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2502f67f985bf062574c3bd633c5e7a3489a1329","unresolved":false,"context_lines":[{"line_number":3752,"context_line":"            \u0027checksum\u0027: \u0027ca425b88f047ce8ec45ee90e813ada91\u0027,"},{"line_number":3753,"context_line":"            \u0027marx\u0027: 123,"},{"line_number":3754,"context_line":"            \u0027tags\u0027: [],"},{"line_number":3755,"context_line":"            \u0027locations\u0027: [],"},{"line_number":3756,"context_line":"            \u0027size\u0027: 1024,"},{"line_number":3757,"context_line":"            \u0027virtual_size\u0027: 3072,"},{"line_number":3758,"context_line":"            \u0027created_at\u0027: ISOTIME,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a1ff146_6d5fed0e","line":3755,"updated":"2017-03-14 14:58:31.000000000","message":"see my comment in images.py, line 796","commit_id":"caa7ff2bb8197f8a257325290f8433b2ac1fff65"}]}
