)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a4462de665c50c84717c193115cd5a1380a34688","unresolved":false,"context_lines":[{"line_number":10,"context_line":"described in [1]."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"The changes are centered around the following components:"},{"line_number":13,"context_line":"Â1 The storlet middleware proxy handler. In this handler we"},{"line_number":14,"context_line":"  - Deal with the container ACL update"},{"line_number":15,"context_line":"  - Add the retry flow desribed in [1]"},{"line_number":16,"context_line":"  - Block requests having the internal referrer explained in [1]"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"5a8bc5a2_b2dce619","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":1},"updated":"2016-09-22 08:51:28.000000000","message":"Can you remove this?","commit_id":"6c6eda42c4cf05b4196e231bb793e2facbf6e809"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"2c3d12070fde98480ae68f4d57c154315d2531d2","unresolved":false,"context_lines":[{"line_number":27,"context_line":"  - has read access to the storlet container"},{"line_number":28,"context_line":"  - does not have access to arbitrary containers."},{"line_number":29,"context_line":"  This involved the following changes:"},{"line_number":30,"context_line":"    - Have the installation scrips to create a _member_ user"},{"line_number":31,"context_line":"      in Keystone, giving the user access to the storlets container"},{"line_number":32,"context_line":"    - Add to the test classes a method for getting a token for that user"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"5a8bc5a2_d912f656","line":30,"range":{"start_line":30,"start_character":55,"end_line":30,"end_character":56},"updated":"2016-09-25 13:09:27.000000000","message":"doubled space","commit_id":"998afbcfea7b1ce23f44cb4d20e50dd3982ab975"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"2c3d12070fde98480ae68f4d57c154315d2531d2","unresolved":false,"context_lines":[{"line_number":29,"context_line":"  This involved the following changes:"},{"line_number":30,"context_line":"    - Have the installation scrips to create a _member_ user"},{"line_number":31,"context_line":"      in Keystone, giving the user access to the storlets container"},{"line_number":32,"context_line":"    - Add to the test classes a method for getting a token for that user"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"  While at it, I have made the following \u0027cleanups\u0027:"},{"line_number":35,"context_line":"  1. changed deprecated keystone cli usage with openstack cli,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"5a8bc5a2_1919be79","line":32,"range":{"start_line":32,"start_character":63,"end_line":32,"end_character":72},"updated":"2016-09-25 13:09:27.000000000","message":"(nit) the two lines above seems a little too longer than the other lines.","commit_id":"998afbcfea7b1ce23f44cb4d20e50dd3982ab975"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"2c3d12070fde98480ae68f4d57c154315d2531d2","unresolved":false,"context_lines":[{"line_number":38,"context_line":"  3. some intenral cleanups in .yml"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"[1] https://wiki.openstack.org/wiki/Storlets/DataSecuritySpec"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Change-Id: I743cf2a551b69581b03469cdb63b533812c3de8a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"5a8bc5a2_b9152a41","line":41,"updated":"2016-09-25 13:09:27.000000000","message":"Can you add #implements bp foo tag to relate this to your bp?","commit_id":"998afbcfea7b1ce23f44cb4d20e50dd3982ab975"}],"Engine/swift/storlet_middleware/handlers/proxy.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a4462de665c50c84717c193115cd5a1380a34688","unresolved":false,"context_lines":[{"line_number":39,"context_line":"CONDITIONAL_KEYS \u003d [\u0027IF_MATCH\u0027, \u0027IF_NONE_MATCH\u0027, \u0027IF_MODIFIED_SINCE\u0027,"},{"line_number":40,"context_line":"                    \u0027IF_UNMODIFIED_SINCE\u0027]"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"REFERER_PREFIX \u003d \u0027org.openstack.storlet_internal\u0027"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"class StorletProxyHandler(StorletBaseHandler):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a8bc5a2_6651bf62","line":42,"range":{"start_line":42,"start_character":17,"end_line":42,"end_character":49},"updated":"2016-09-22 08:51:28.000000000","message":"It seems long to me, and I\u0027m afraid a bit that it causes the shortage of metadata space of container.\nDoes it make sense to use more short string like just \u0027storlets\u0027.","commit_id":"6c6eda42c4cf05b4196e231bb793e2facbf6e809"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a4462de665c50c84717c193115cd5a1380a34688","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        # we block requests with referer that have the internal prefix"},{"line_number":88,"context_line":"        # of:"},{"line_number":89,"context_line":"        if not request.referer:"},{"line_number":90,"context_line":"            return"},{"line_number":91,"context_line":"        if REFERER_PREFIX in request.referer:"},{"line_number":92,"context_line":"            return \u0027Referrer containing %s is not allowed\u0027 % REFERER_PREFIX"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def _parse_vaco(self):"},{"line_number":95,"context_line":"        return self.request.split_path(3, 4, rest_with_last\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a8bc5a2_724edec2","line":92,"range":{"start_line":90,"start_character":18,"end_line":92,"end_character":75},"updated":"2016-09-22 08:51:28.000000000","message":"Does it make sense to return (or directly raise HTTPException) from this func? Currently we only returns HTTPForbidden for blocking case, but it let us add new return code easily later.","commit_id":"6c6eda42c4cf05b4196e231bb793e2facbf6e809"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a4462de665c50c84717c193115cd5a1380a34688","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    @property"},{"line_number":113,"context_line":"    def is_storlet_request(self):"},{"line_number":114,"context_line":"        return (self.is_storlet_execution or self.is_storlet_object_update"},{"line_number":115,"context_line":"                or self.is_storlet_acl_update)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    @property"},{"line_number":118,"context_line":"    def is_storlet_object_update(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a8bc5a2_52ff2234","line":115,"range":{"start_line":114,"start_character":16,"end_line":115,"end_character":45},"updated":"2016-09-22 08:51:28.000000000","message":"It is becoming complicated.\nIMO it\u0027s the time to consider to split handler class for each type.\n(Let\u0027s consider it after we land this change)","commit_id":"6c6eda42c4cf05b4196e231bb793e2facbf6e809"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a4462de665c50c84717c193115cd5a1380a34688","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        \"\"\""},{"line_number":179,"context_line":"        # Make sure we are not meddling with the storlet containers"},{"line_number":180,"context_line":"        if self.container in self.storlet_containers:"},{"line_number":181,"context_line":"            msg \u003d \u0027storlet ACL update cannot be a storlet container\u0027"},{"line_number":182,"context_line":"            self.logger.info(msg)"},{"line_number":183,"context_line":"            raise HTTPBadRequest(msg)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        # Make sure the expected headers are supplied"},{"line_number":186,"context_line":"        user_name \u003d req.headers.get(\"X-Storlet-Container-Read\", None)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a8bc5a2_b2494691","line":183,"range":{"start_line":181,"start_character":12,"end_line":183,"end_character":37},"updated":"2016-09-22 08:51:28.000000000","message":"When we raise HTTPExceptions, it is logged at logger.exception in the top level try-except.\nDo we need to record a log line here?","commit_id":"6c6eda42c4cf05b4196e231bb793e2facbf6e809"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a4462de665c50c84717c193115cd5a1380a34688","unresolved":false,"context_lines":[{"line_number":344,"context_line":"            storlet_name \u003d self.request.headers[\u0027X-Run-Storlet\u0027]"},{"line_number":345,"context_line":"            internal_referer \u003d \u0027//%s\u0027 % self._build_acl_string(user_name,"},{"line_number":346,"context_line":"                                                               storlet_name)"},{"line_number":347,"context_line":"            self.logger.info((\u0027Got 403 for original request\u0027"},{"line_number":348,"context_line":"                              \u0027Trying with storlet internal referer %s\u0027 %"},{"line_number":349,"context_line":"                              internal_referer))"},{"line_number":350,"context_line":"            self.request.referrer \u003d self.request.referer \u003d internal_referer"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a8bc5a2_663e1fba","line":347,"range":{"start_line":347,"start_character":59,"end_line":347,"end_character":60},"updated":"2016-09-22 08:51:28.000000000","message":"Do we need \u0027.\u0027 here?","commit_id":"6c6eda42c4cf05b4196e231bb793e2facbf6e809"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a4462de665c50c84717c193115cd5a1380a34688","unresolved":false,"context_lines":[{"line_number":344,"context_line":"            storlet_name \u003d self.request.headers[\u0027X-Run-Storlet\u0027]"},{"line_number":345,"context_line":"            internal_referer \u003d \u0027//%s\u0027 % self._build_acl_string(user_name,"},{"line_number":346,"context_line":"                                                               storlet_name)"},{"line_number":347,"context_line":"            self.logger.info((\u0027Got 403 for original request\u0027"},{"line_number":348,"context_line":"                              \u0027Trying with storlet internal referer %s\u0027 %"},{"line_number":349,"context_line":"                              internal_referer))"},{"line_number":350,"context_line":"            self.request.referrer \u003d self.request.referer \u003d internal_referer"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a8bc5a2_89c41c41","line":347,"range":{"start_line":347,"start_character":51,"end_line":347,"end_character":59},"updated":"2016-09-22 08:51:28.000000000","message":"Does it make sense to clearly mention request to what?","commit_id":"6c6eda42c4cf05b4196e231bb793e2facbf6e809"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a4462de665c50c84717c193115cd5a1380a34688","unresolved":false,"context_lines":[{"line_number":347,"context_line":"            self.logger.info((\u0027Got 403 for original request\u0027"},{"line_number":348,"context_line":"                              \u0027Trying with storlet internal referer %s\u0027 %"},{"line_number":349,"context_line":"                              internal_referer))"},{"line_number":350,"context_line":"            self.request.referrer \u003d self.request.referer \u003d internal_referer"},{"line_number":351,"context_line":"            original_resp \u003d self.request.get_response(self.app)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        if original_resp.is_success:"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a8bc5a2_2625f7aa","line":350,"range":{"start_line":350,"start_character":12,"end_line":350,"end_character":57},"updated":"2016-09-22 08:51:28.000000000","message":"Why is this duplicated?","commit_id":"6c6eda42c4cf05b4196e231bb793e2facbf6e809"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a4462de665c50c84717c193115cd5a1380a34688","unresolved":false,"context_lines":[{"line_number":513,"context_line":"        target \u003d [\u0027\u0027, self.api_version, self.account, self.container]"},{"line_number":514,"context_line":"        sub_req \u003d make_subrequest(self.request.environ,"},{"line_number":515,"context_line":"                                  \u0027HEAD\u0027, \u0027/\u0027.join(target),"},{"line_number":516,"context_line":"                                  agent\u003d\u0027ST\u0027)"},{"line_number":517,"context_line":"        sub_resp \u003d sub_req.get_response(self.app)"},{"line_number":518,"context_line":"        if sub_resp.status !\u003d \u0027204 No Content\u0027:"},{"line_number":519,"context_line":"            self.logger.info(\"Failed to retreive container metadata\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a8bc5a2_0641db0b","line":516,"range":{"start_line":516,"start_character":41,"end_line":516,"end_character":43},"updated":"2016-09-22 08:51:28.000000000","message":"(nit) maybe we can define this as a common value for all subrequest.","commit_id":"6c6eda42c4cf05b4196e231bb793e2facbf6e809"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a4462de665c50c84717c193115cd5a1380a34688","unresolved":false,"context_lines":[{"line_number":515,"context_line":"                                  \u0027HEAD\u0027, \u0027/\u0027.join(target),"},{"line_number":516,"context_line":"                                  agent\u003d\u0027ST\u0027)"},{"line_number":517,"context_line":"        sub_resp \u003d sub_req.get_response(self.app)"},{"line_number":518,"context_line":"        if sub_resp.status !\u003d \u0027204 No Content\u0027:"},{"line_number":519,"context_line":"            self.logger.info(\"Failed to retreive container metadata\")"},{"line_number":520,"context_line":"            return HTTPUnauthorized((\u0027Unauthorized to get or modify \u0027"},{"line_number":521,"context_line":"                                     \u0027the container ACL\u0027))"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a8bc5a2_a652e7db","line":518,"range":{"start_line":518,"start_character":8,"end_line":518,"end_character":47},"updated":"2016-09-22 08:51:28.000000000","message":"Can we use status_int instead?","commit_id":"6c6eda42c4cf05b4196e231bb793e2facbf6e809"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"e4ef90c128086117daa1a4143b2af239f4970b70","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        # Make sure we are not meddling with the storlet containers"},{"line_number":180,"context_line":"        if self.container in self.storlet_containers:"},{"line_number":181,"context_line":"            msg \u003d \u0027storlet ACL update cannot be a storlet container\u0027"},{"line_number":182,"context_line":"            self.logger.info(msg)"},{"line_number":183,"context_line":"            raise HTTPBadRequest(msg)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        # Make sure the expected headers are supplied"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a8bc5a2_1f9c4cbf","line":182,"range":{"start_line":182,"start_character":12,"end_line":182,"end_character":33},"updated":"2016-09-24 09:18:10.000000000","message":"Please remove this as you did for other logs.","commit_id":"896569ff115d8e79abba3277a3b5c6eb6e506736"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"e4ef90c128086117daa1a4143b2af239f4970b70","unresolved":false,"context_lines":[{"line_number":345,"context_line":"            self.logger.info((\u0027Got 403 for original GET %s request. \u0027"},{"line_number":346,"context_line":"                              \u0027Trying with storlet internal referer %s\u0027 %"},{"line_number":347,"context_line":"                              (self.request.path, internal_referer)))"},{"line_number":348,"context_line":"            self.request.referrer \u003d self.request.referer \u003d internal_referer"},{"line_number":349,"context_line":"            original_resp \u003d self.request.get_response(self.app)"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        if original_resp.is_success:"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a8bc5a2_3f9f48b5","line":348,"range":{"start_line":348,"start_character":11,"end_line":348,"end_character":35},"updated":"2016-09-24 09:18:10.000000000","message":"we don\u0027t need this","commit_id":"896569ff115d8e79abba3277a3b5c6eb6e506736"}],"doc/source/api/overview_api.rst":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a4462de665c50c84717c193115cd5a1380a34688","unresolved":false,"context_lines":[{"line_number":228,"context_line":""},{"line_number":229,"context_line":"Currently, a storlet ACL can be set only for a single user. Storlets ACLs can be viewed"},{"line_number":230,"context_line":"as any other container read ACL by performing HEAD request on the container. The ACL"},{"line_number":231,"context_line":"will be shown as .r:org.openstack.storlet.\u003cuser_name\u003e_\u003cstorlet_name\u003e as part of the Container-Read-ACL."},{"line_number":232,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"5a8bc5a2_261177ad","line":231,"range":{"start_line":231,"start_character":34,"end_line":231,"end_character":41},"updated":"2016-09-22 08:51:28.000000000","message":"storlet_internal?","commit_id":"6c6eda42c4cf05b4196e231bb793e2facbf6e809"}],"install/storlets/roles/enable_default_swift_account_for_storlets/tasks/main.yml":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a4462de665c50c84717c193115cd5a1380a34688","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2016 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the Li§cense."},{"line_number":5,"context_line":"# You may obtain a copy of the License at"},{"line_number":6,"context_line":"#"},{"line_number":7,"context_line":"#    http://www.apache.org/licenses/LICENSE-2.0"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"5a8bc5a2_c6ed3390","line":4,"range":{"start_line":4,"start_character":60,"end_line":4,"end_character":61},"updated":"2016-09-22 08:51:28.000000000","message":"Please revert this.","commit_id":"6c6eda42c4cf05b4196e231bb793e2facbf6e809"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a4462de665c50c84717c193115cd5a1380a34688","unresolved":false,"context_lines":[{"line_number":73,"context_line":"           docker_images"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"# TODO(eranr): Use ansible os_user instead of openstackclient."},{"line_number":76,"context_line":"# The below seems to have a problem with the auth parameters."},{"line_number":77,"context_line":"#  os_user:"},{"line_number":78,"context_line":"#    auth_type: v2token"},{"line_number":79,"context_line":"#    auth: url\u003d\"{{ keystone_admin_url }}\" token\u003d\"{{ keystone_admin_token }}\" tenant_name\u003d\"{{ storlets_default_tenant_name }}\""}],"source_content_type":"text/x-yaml","patch_set":8,"id":"5a8bc5a2_069f1b04","line":76,"range":{"start_line":76,"start_character":2,"end_line":76,"end_character":61},"updated":"2016-09-22 08:51:28.000000000","message":"I think we should get rid of admin_token and use username/password instead to use os_foo modules.","commit_id":"6c6eda42c4cf05b4196e231bb793e2facbf6e809"}],"tests/functional/__init__.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a4462de665c50c84717c193115cd5a1380a34688","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    def setUp(self):"},{"line_number":29,"context_line":"        self.conf_file \u003d CONFIG_FILE"},{"line_number":30,"context_line":"        self.conf \u003d ClusterConfig(CONFIG_FILE)"},{"line_number":31,"context_line":"        self.url, self.token \u003d get_admin_auth(self.conf)"},{"line_number":32,"context_line":"        self.member_url, self.member_token \u003d get_member_auth(self.conf)"},{"line_number":33,"context_line":"        super(StorletBaseFunctionalTest, self).setUp()"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a8bc5a2_86588b58","line":32,"range":{"start_line":31,"start_character":0,"end_line":32,"end_character":71},"updated":"2016-09-22 08:51:28.000000000","message":"If this is not common for each sub classes, IMO this should be placed at sub classes.","commit_id":"6c6eda42c4cf05b4196e231bb793e2facbf6e809"}],"tests/functional/java/test_test_storlet.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a4462de665c50c84717c193115cd5a1380a34688","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    def test_storlet_acl_get_fail(self):"},{"line_number":128,"context_line":"        headers \u003d {\u0027X-Run-Storlet\u0027: self.storlet_name}"},{"line_number":129,"context_line":"        headers.update(self.additional_headers)"},{"line_number":130,"context_line":"        exc_pattern \u003d \u0027^.*403 Forbidden.*$\u0027"},{"line_number":131,"context_line":"        with self.assertRaisesRegexp(ClientException, exc_pattern):"},{"line_number":132,"context_line":"            swift_client.get_object(self.member_url, self.member_token,"},{"line_number":133,"context_line":"                                    \u0027myobjects\u0027, \u0027test_object\u0027,"},{"line_number":134,"context_line":"                                    headers\u003dheaders)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a8bc5a2_496854bb","line":131,"range":{"start_line":130,"start_character":0,"end_line":131,"end_character":67},"updated":"2016-09-22 08:51:28.000000000","message":"ClientException has http_status attribute, so we can assert its status code like the following code.\n\nwith self.assertRaises(ClientException) as exc:\n    swift_clinet. ...\nself.assertEqual(403, exc.http_status)","commit_id":"6c6eda42c4cf05b4196e231bb793e2facbf6e809"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a4462de665c50c84717c193115cd5a1380a34688","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        headers \u003d {\u0027X-Run-Storlet\u0027: self.storlet_name}"},{"line_number":155,"context_line":"        headers.update(self.additional_headers)"},{"line_number":156,"context_line":"        resp_dict \u003d dict()"},{"line_number":157,"context_line":"        rheaders, _junk \u003d swift_client.get_object(self.member_url,"},{"line_number":158,"context_line":"                                                  self.member_token,"},{"line_number":159,"context_line":"                                                  \u0027myobjects\u0027, \u0027test_object\u0027,"},{"line_number":160,"context_line":"                                                  response_dict\u003dresp_dict,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a8bc5a2_891dfc68","line":157,"range":{"start_line":157,"start_character":8,"end_line":157,"end_character":25},"updated":"2016-09-22 08:51:28.000000000","message":"Do we need them?","commit_id":"6c6eda42c4cf05b4196e231bb793e2facbf6e809"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"e4ef90c128086117daa1a4143b2af239f4970b70","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            swift_client.get_object(self.member_url, self.member_token,"},{"line_number":135,"context_line":"                                    \u0027myobjects\u0027, \u0027test_object\u0027,"},{"line_number":136,"context_line":"                                    headers\u003dheaders)"},{"line_number":137,"context_line":"            self.assertEqual(403, exc.http_status)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def test_storlet_acl_get_success(self):"},{"line_number":140,"context_line":"        headers \u003d {\u0027X-Run-Storlet\u0027: self.storlet_name}"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a8bc5a2_bfab58d5","line":137,"range":{"start_line":137,"start_character":8,"end_line":137,"end_character":12},"updated":"2016-09-24 09:18:10.000000000","message":"maybe you should remove one indent here, to run this line.","commit_id":"896569ff115d8e79abba3277a3b5c6eb6e506736"}],"tests/unit/swift/storlet_middleware/handlers/test_proxy.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a4462de665c50c84717c193115cd5a1380a34688","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from contextlib import contextmanager"},{"line_number":21,"context_line":"from swift.common.swob import Request, HTTPOk, HTTPCreated, HTTPAccepted, \\"},{"line_number":22,"context_line":"    HTTPNotFound, HTTPNoContent"},{"line_number":23,"context_line":"from storlet_middleware.handlers import StorletProxyHandler"},{"line_number":24,"context_line":"from storlet_middleware.handlers.proxy import REFERER_PREFIX"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a8bc5a2_a98d587d","line":22,"range":{"start_line":22,"start_character":18,"end_line":22,"end_character":31},"updated":"2016-09-22 08:51:28.000000000","message":"Please place it before HTTPNotFound, to follow the status code order.","commit_id":"6c6eda42c4cf05b4196e231bb793e2facbf6e809"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a4462de665c50c84717c193115cd5a1380a34688","unresolved":false,"context_lines":[{"line_number":525,"context_line":"        target \u003d \u0027/v1/AUTH_a/c/o\u0027"},{"line_number":526,"context_line":"        self.base_app.register(\u0027POST\u0027, target, HTTPNoContent, body\u003d\u0027\u0027)"},{"line_number":527,"context_line":"        with storlet_enabled():"},{"line_number":528,"context_line":"            req \u003d Request.blank(target, environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027POST\u0027},"},{"line_number":529,"context_line":"                                headers\u003dheaders)"},{"line_number":530,"context_line":"            resp \u003d self.get_response(req)"},{"line_number":531,"context_line":"            self.assertEqual(\u0027204 No Content\u0027, resp.status)"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"        # Test wrong target containers"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a8bc5a2_a900f8ab","line":530,"range":{"start_line":528,"start_character":0,"end_line":530,"end_character":41},"updated":"2016-09-22 08:51:28.000000000","message":"This three lines appear some times. Can we define a function for this?","commit_id":"6c6eda42c4cf05b4196e231bb793e2facbf6e809"}]}
