)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"7090d9aca0963e71ea9d71ba11b09ef30f03bfeb","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Akihito Takai \u003ctakaiak@nttdata.co.jp\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-11-21 15:09:26 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add FT for python"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Now the FT for python is none, so we implement it."},{"line_number":10,"context_line":"Closes-Bug: #1642542"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7a77a97e_190b0f2d","line":7,"range":{"start_line":7,"start_character":4,"end_line":7,"end_character":6},"updated":"2016-11-21 06:31:17.000000000","message":"Functional Tests for storlet app written in python language?\n\nWe should not shorten the term as possible in commit message.","commit_id":"54ad64b225e5330011288a8ddfaf53f8c0ab064c"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"2c17f497d23bc3171fbdb1f1021fd916724a7156","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Akihito Takai \u003ctakaiak@nttdata.co.jp\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-11-21 15:09:26 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add FT for python"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Now the FT for python is none, so we implement it."},{"line_number":10,"context_line":"Closes-Bug: #1642542"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7a77a97e_5f33a7f6","line":7,"range":{"start_line":7,"start_character":4,"end_line":7,"end_character":6},"in_reply_to":"7a77a97e_190b0f2d","updated":"2016-11-21 07:20:45.000000000","message":"+1 for Kota.","commit_id":"54ad64b225e5330011288a8ddfaf53f8c0ab064c"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"7090d9aca0963e71ea9d71ba11b09ef30f03bfeb","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add FT for python"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Now the FT for python is none, so we implement it."},{"line_number":10,"context_line":"Closes-Bug: #1642542"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ib00589099efad4db699ccb6550d579181592e8ab"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7a77a97e_9c246db3","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":50},"updated":"2016-11-21 06:31:17.000000000","message":"e.g. (to clarify the context)\nThere is no functional test in python storlet app for now. To prevent regressions, this patch adds 2 functional tests for copy verb.\n\nah, no functional test is a bit wrong. Either less or few seems suitable word to describe.","commit_id":"54ad64b225e5330011288a8ddfaf53f8c0ab064c"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"2c17f497d23bc3171fbdb1f1021fd916724a7156","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add FT for python"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Now the FT for python is none, so we implement it."},{"line_number":10,"context_line":"Closes-Bug: #1642542"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ib00589099efad4db699ccb6550d579181592e8ab"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7a77a97e_ff5ab329","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":50},"in_reply_to":"7a77a97e_9c246db3","updated":"2016-11-21 07:20:45.000000000","message":"+1. And IMO, you should write your policy behind adding new functional tests. (ex. to test all available verb)","commit_id":"54ad64b225e5330011288a8ddfaf53f8c0ab064c"}],"StorletSamples/python/ExecDepStorlet/exec_dep.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"add44c17157dfda5a7fd61f4ac3b7febb174c90b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2010-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 License."}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_074df26b","line":1,"updated":"2016-12-03 18:41:02.000000000","message":"IMO it is not so popular to use camel case in package name. Does it make sense to replace ExecDepStorlet by exec_dep?","commit_id":"dd5d14cba27a8c0b600c0ac301a26e1f79625ce9"},{"author":{"_account_id":17901,"name":"Akihito Takai","email":"takaiak@nttdata.co.jp","username":"AkihitoTakai"},"change_message_id":"caf028b379fb56cd4d8ed8520d7305b753b033b8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2010-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 License."}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_fe5dd115","line":1,"in_reply_to":"3a71b18c_074df26b","updated":"2016-12-05 09:42:44.000000000","message":"Done","commit_id":"dd5d14cba27a8c0b600c0ac301a26e1f79625ce9"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"add44c17157dfda5a7fd61f4ac3b7febb174c90b","unresolved":false,"context_lines":[{"line_number":19,"context_line":"class ExecDepStorlet(object):"},{"line_number":20,"context_line":"    def __init__(self, logger):"},{"line_number":21,"context_line":"        self.logger \u003d logger"},{"line_number":22,"context_line":"        self.dependency_path \u003d \u0027/home/swift/exec_dep.ExecDepStorlet/get42.sh\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def __call__(self, in_files, out_files, params):"},{"line_number":25,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_876f42c4","line":22,"range":{"start_line":22,"start_character":32,"end_line":22,"end_character":67},"updated":"2016-12-03 18:41:02.000000000","message":"As far as I understand, we don\u0027t need absolute path, because we have /home/swift/exec_dep.ExecDepStorlet in PATH env. Is it right?","commit_id":"dd5d14cba27a8c0b600c0ac301a26e1f79625ce9"},{"author":{"_account_id":17901,"name":"Akihito Takai","email":"takaiak@nttdata.co.jp","username":"AkihitoTakai"},"change_message_id":"caf028b379fb56cd4d8ed8520d7305b753b033b8","unresolved":false,"context_lines":[{"line_number":19,"context_line":"class ExecDepStorlet(object):"},{"line_number":20,"context_line":"    def __init__(self, logger):"},{"line_number":21,"context_line":"        self.logger \u003d logger"},{"line_number":22,"context_line":"        self.dependency_path \u003d \u0027/home/swift/exec_dep.ExecDepStorlet/get42.sh\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def __call__(self, in_files, out_files, params):"},{"line_number":25,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_cec30488","line":22,"range":{"start_line":22,"start_character":32,"end_line":22,"end_character":67},"in_reply_to":"3a71b18c_876f42c4","updated":"2016-12-05 09:42:44.000000000","message":"Done","commit_id":"dd5d14cba27a8c0b600c0ac301a26e1f79625ce9"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"add44c17157dfda5a7fd61f4ac3b7febb174c90b","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        :param out_files: a list of StorletOutputFile"},{"line_number":30,"context_line":"        :param params: a dict of request parameters"},{"line_number":31,"context_line":"        \"\"\""},{"line_number":32,"context_line":"        self.logger.debug(\u0027Returning metadata\u0027)"},{"line_number":33,"context_line":"        metadata \u003d in_files[0].get_metadata()"},{"line_number":34,"context_line":"        metadata[\u0027depend-ret-code\u0027] \u003d subprocess.call(self.dependency_path)"},{"line_number":35,"context_line":"        out_files[0].set_metadata(metadata)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_c7693ac0","line":32,"range":{"start_line":32,"start_character":8,"end_line":32,"end_character":47},"updated":"2016-12-03 18:41:02.000000000","message":"(nit) I don\u0027t think we return metadata just here","commit_id":"dd5d14cba27a8c0b600c0ac301a26e1f79625ce9"},{"author":{"_account_id":17901,"name":"Akihito Takai","email":"takaiak@nttdata.co.jp","username":"AkihitoTakai"},"change_message_id":"caf028b379fb56cd4d8ed8520d7305b753b033b8","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        :param out_files: a list of StorletOutputFile"},{"line_number":30,"context_line":"        :param params: a dict of request parameters"},{"line_number":31,"context_line":"        \"\"\""},{"line_number":32,"context_line":"        self.logger.debug(\u0027Returning metadata\u0027)"},{"line_number":33,"context_line":"        metadata \u003d in_files[0].get_metadata()"},{"line_number":34,"context_line":"        metadata[\u0027depend-ret-code\u0027] \u003d subprocess.call(self.dependency_path)"},{"line_number":35,"context_line":"        out_files[0].set_metadata(metadata)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_8e44ac1b","line":32,"range":{"start_line":32,"start_character":8,"end_line":32,"end_character":47},"in_reply_to":"3a71b18c_c7693ac0","updated":"2016-12-05 09:42:44.000000000","message":"Done","commit_id":"dd5d14cba27a8c0b600c0ac301a26e1f79625ce9"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"add44c17157dfda5a7fd61f4ac3b7febb174c90b","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            if not buf:"},{"line_number":41,"context_line":"                break"},{"line_number":42,"context_line":"            self.logger.debug(\u0027Recieved %d bytes\u0027 % len(buf))"},{"line_number":43,"context_line":"            self.logger.debug(\u0027Writing back %d bytes\u0027 % len(buf))"},{"line_number":44,"context_line":"            out_files[0].write(buf)"},{"line_number":45,"context_line":"        self.logger.debug(\u0027Complete\u0027)"},{"line_number":46,"context_line":"        in_files[0].close()"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_679f86b4","line":43,"range":{"start_line":43,"start_character":12,"end_line":43,"end_character":65},"updated":"2016-12-03 18:41:02.000000000","message":"(nit) IMO this is very useless logging.","commit_id":"dd5d14cba27a8c0b600c0ac301a26e1f79625ce9"},{"author":{"_account_id":17901,"name":"Akihito Takai","email":"takaiak@nttdata.co.jp","username":"AkihitoTakai"},"change_message_id":"caf028b379fb56cd4d8ed8520d7305b753b033b8","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            if not buf:"},{"line_number":41,"context_line":"                break"},{"line_number":42,"context_line":"            self.logger.debug(\u0027Recieved %d bytes\u0027 % len(buf))"},{"line_number":43,"context_line":"            self.logger.debug(\u0027Writing back %d bytes\u0027 % len(buf))"},{"line_number":44,"context_line":"            out_files[0].write(buf)"},{"line_number":45,"context_line":"        self.logger.debug(\u0027Complete\u0027)"},{"line_number":46,"context_line":"        in_files[0].close()"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_ce4a2426","line":43,"range":{"start_line":43,"start_character":12,"end_line":43,"end_character":65},"in_reply_to":"3a71b18c_679f86b4","updated":"2016-12-05 09:42:44.000000000","message":"Done","commit_id":"dd5d14cba27a8c0b600c0ac301a26e1f79625ce9"}],"StorletSamples/python/exec_dep/exec_dep.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"321b54f29e66e580294ecda4f41172305245b2bd","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    def __init__(self, logger):"},{"line_number":22,"context_line":"        self.logger \u003d logger"},{"line_number":23,"context_line":"        self.storlet_path \u003d os.environ[\u0027PYTHONPATH\u0027]"},{"line_number":24,"context_line":"        self.dependency_path \u003d os.path.join(self.storlet_path, \u0027get42.sh\u0027)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def __call__(self, in_files, out_files, params):"},{"line_number":27,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_f296fd4a","line":24,"range":{"start_line":24,"start_character":31,"end_line":24,"end_character":74},"updated":"2016-12-14 13:48:24.000000000","message":"Again, I think we already include storlet_path in PATH environment when starting storlet daemon. Do you really need full path for dependency exec file or can you execute it just by ./get42.sh?","commit_id":"b8dfe7d600d049e090b4a44ccf055db00f444fd3"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"321b54f29e66e580294ecda4f41172305245b2bd","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        self.logger.debug(\u0027Exec \u003d \u0027 + self.dependency_path)"},{"line_number":36,"context_line":"        metadata \u003d in_files[0].get_metadata()"},{"line_number":37,"context_line":"        metadata[\u0027depend-ret-code\u0027] \u003d subprocess.call(self.dependency_path)"},{"line_number":38,"context_line":"        out_files[0].set_metadata(metadata)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        self.logger.debug(\u0027Start to return object data\u0027)"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_f2a43da7","line":37,"range":{"start_line":37,"start_character":18,"end_line":37,"end_character":33},"updated":"2016-12-14 13:48:24.000000000","message":"Please confirm that your are using the same header key as java.","commit_id":"b8dfe7d600d049e090b4a44ccf055db00f444fd3"}],"StorletSamples/python/exec_query_header/exec_query_header.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"321b54f29e66e580294ecda4f41172305245b2bd","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import os"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class ExecQueryHeaderStorlet(object):"},{"line_number":20,"context_line":"    def __init__(self, logger):"},{"line_number":21,"context_line":"        self.logger \u003d logger"},{"line_number":22,"context_line":"        self.storlet_path \u003d os.environ[\u0027PYTHONPATH\u0027]"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_72bbcde5","line":19,"range":{"start_line":19,"start_character":6,"end_line":19,"end_character":10},"updated":"2016-12-14 13:48:24.000000000","message":"Where do you \u0027query\u0027 header?","commit_id":"b8dfe7d600d049e090b4a44ccf055db00f444fd3"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"321b54f29e66e580294ecda4f41172305245b2bd","unresolved":false,"context_lines":[{"line_number":19,"context_line":"class ExecQueryHeaderStorlet(object):"},{"line_number":20,"context_line":"    def __init__(self, logger):"},{"line_number":21,"context_line":"        self.logger \u003d logger"},{"line_number":22,"context_line":"        self.storlet_path \u003d os.environ[\u0027PYTHONPATH\u0027]"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def __call__(self, in_files, out_files, params):"},{"line_number":25,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_f2219d4e","line":22,"range":{"start_line":22,"start_character":13,"end_line":22,"end_character":25},"updated":"2016-12-14 13:48:24.000000000","message":"Why do you need this?","commit_id":"b8dfe7d600d049e090b4a44ccf055db00f444fd3"}],"StorletSamples/python/multi_input/multi_input.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"321b54f29e66e580294ecda4f41172305245b2bd","unresolved":false,"context_lines":[{"line_number":19,"context_line":"class MultiInputStorlet(object):"},{"line_number":20,"context_line":"    def __init__(self, logger):"},{"line_number":21,"context_line":"        self.logger \u003d logger"},{"line_number":22,"context_line":"        self.storlet_path \u003d os.environ[\u0027PYTHONPATH\u0027]"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def __call__(self, in_files, out_files, params):"},{"line_number":25,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_32c6b548","line":22,"range":{"start_line":22,"start_character":13,"end_line":22,"end_character":25},"updated":"2016-12-14 13:48:24.000000000","message":"ditto","commit_id":"b8dfe7d600d049e090b4a44ccf055db00f444fd3"}],"StorletSamples/python/test/test.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"321b54f29e66e580294ecda4f41172305245b2bd","unresolved":false,"context_lines":[{"line_number":20,"context_line":"class TestStorlet(object):"},{"line_number":21,"context_line":"    def __init__(self, logger):"},{"line_number":22,"context_line":"        self.logger \u003d logger"},{"line_number":23,"context_line":"        self.storlet_path \u003d os.environ[\u0027PYTHONPATH\u0027]"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def __call__(self, in_files, out_files, params):"},{"line_number":26,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_d202e16e","line":23,"range":{"start_line":23,"start_character":13,"end_line":23,"end_character":25},"updated":"2016-12-14 13:48:24.000000000","message":"ditto","commit_id":"b8dfe7d600d049e090b4a44ccf055db00f444fd3"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"321b54f29e66e580294ecda4f41172305245b2bd","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        op \u003d params.get(\u0027op\u0027, None)"},{"line_number":37,"context_line":"        if op \u003d\u003d \u0027crash\u0027:"},{"line_number":38,"context_line":"            self.logger.debug(\u0027op \u003d crash\u0027)"},{"line_number":39,"context_line":"            return"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        metadata \u003d in_files[0].get_metadata()"},{"line_number":42,"context_line":"        out_files[0].set_metadata(metadata)"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_f240bda7","line":39,"range":{"start_line":39,"start_character":12,"end_line":39,"end_character":18},"updated":"2016-12-14 13:48:24.000000000","message":"How about raising Exception instead?","commit_id":"b8dfe7d600d049e090b4a44ccf055db00f444fd3"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"321b54f29e66e580294ecda4f41172305245b2bd","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        out_files[0].set_metadata(metadata)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        if op is None:"},{"line_number":45,"context_line":"            self.logger.debug(\u0027No op raising...\u0027)"},{"line_number":46,"context_line":"        if op \u003d\u003d \u0027print\u0027:"},{"line_number":47,"context_line":"            self.logger.debug(\u0027op \u003d print\u0027)"},{"line_number":48,"context_line":"            for key, value in params.items():"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_5246d1bf","line":45,"range":{"start_line":45,"start_character":37,"end_line":45,"end_character":45},"updated":"2016-12-14 13:48:24.000000000","message":"passed?","commit_id":"b8dfe7d600d049e090b4a44ccf055db00f444fd3"}],"tests/functional/java/test_deploy_storlet.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"add44c17157dfda5a7fd61f4ac3b7febb174c90b","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        self.timeout \u003d 2"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def test_deploy_storlet_util(self):"},{"line_number":36,"context_line":"        child \u003d pexpect.spawn(\u0027python %s %s\u0027 % (self.deploy_storlet_path,"},{"line_number":37,"context_line":"                                                self.conf_file))"},{"line_number":38,"context_line":"        child.expect(\u0027Enter storlet language.*\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_27b66e3d","line":35,"range":{"start_line":35,"start_character":8,"end_line":35,"end_character":32},"updated":"2016-12-03 18:41:02.000000000","message":"Is it better to rename this to test_deploy_storlet_util_java?","commit_id":"dd5d14cba27a8c0b600c0ac301a26e1f79625ce9"},{"author":{"_account_id":17901,"name":"Akihito Takai","email":"takaiak@nttdata.co.jp","username":"AkihitoTakai"},"change_message_id":"caf028b379fb56cd4d8ed8520d7305b753b033b8","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        self.timeout \u003d 2"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def test_deploy_storlet_util(self):"},{"line_number":36,"context_line":"        child \u003d pexpect.spawn(\u0027python %s %s\u0027 % (self.deploy_storlet_path,"},{"line_number":37,"context_line":"                                                self.conf_file))"},{"line_number":38,"context_line":"        child.expect(\u0027Enter storlet language.*\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_ae7ec816","line":35,"range":{"start_line":35,"start_character":8,"end_line":35,"end_character":32},"in_reply_to":"3a71b18c_27b66e3d","updated":"2016-12-05 09:42:44.000000000","message":"Done","commit_id":"dd5d14cba27a8c0b600c0ac301a26e1f79625ce9"}],"tests/functional/python/test_SLO.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"321b54f29e66e580294ecda4f41172305245b2bd","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from tests.functional.python import StorletPythonFunctionalTest"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def create_local_chunks():"},{"line_number":26,"context_line":"    for i in range(1, 10):"},{"line_number":27,"context_line":"        oname \u003d \u0027/tmp/slo_chunk_%d\u0027 % i"},{"line_number":28,"context_line":"        f \u003d open(oname, \u0027w\u0027)"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_522c11ab","line":25,"range":{"start_line":25,"start_character":4,"end_line":25,"end_character":23},"updated":"2016-12-14 13:48:24.000000000","message":"Can you define these methods in TestSLO class?","commit_id":"b8dfe7d600d049e090b4a44ccf055db00f444fd3"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"321b54f29e66e580294ecda4f41172305245b2bd","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def create_local_chunks():"},{"line_number":26,"context_line":"    for i in range(1, 10):"},{"line_number":27,"context_line":"        oname \u003d \u0027/tmp/slo_chunk_%d\u0027 % i"},{"line_number":28,"context_line":"        f \u003d open(oname, \u0027w\u0027)"},{"line_number":29,"context_line":"        f.write(\u0027\u0027.join(random.choice(string.ascii_uppercase + string.digits)"},{"line_number":30,"context_line":"                for _ in range(1048576)))"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_2d4d786c","line":27,"range":{"start_line":27,"start_character":16,"end_line":27,"end_character":39},"updated":"2016-12-14 13:48:24.000000000","message":"IMO, you don\u0027t need these temp files, but can use just a String instead, if you use iterator instead of file path in put_object.","commit_id":"b8dfe7d600d049e090b4a44ccf055db00f444fd3"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"321b54f29e66e580294ecda4f41172305245b2bd","unresolved":false,"context_lines":[{"line_number":25,"context_line":"def create_local_chunks():"},{"line_number":26,"context_line":"    for i in range(1, 10):"},{"line_number":27,"context_line":"        oname \u003d \u0027/tmp/slo_chunk_%d\u0027 % i"},{"line_number":28,"context_line":"        f \u003d open(oname, \u0027w\u0027)"},{"line_number":29,"context_line":"        f.write(\u0027\u0027.join(random.choice(string.ascii_uppercase + string.digits)"},{"line_number":30,"context_line":"                for _ in range(1048576)))"},{"line_number":31,"context_line":"        f.close()"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"def delete_local_chunks():"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_f20d1d3f","line":31,"range":{"start_line":28,"start_character":0,"end_line":31,"end_character":17},"updated":"2016-12-14 13:48:24.000000000","message":"Please use context manager to be more safe.","commit_id":"b8dfe7d600d049e090b4a44ccf055db00f444fd3"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"321b54f29e66e580294ecda4f41172305245b2bd","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                     headers\u003dheaders, query_string\u003d\u0027multipart-manifest\u003dput\u0027,"},{"line_number":120,"context_line":"                     response_dict\u003dresponse)"},{"line_number":121,"context_line":"        status \u003d response.get(\u0027status\u0027)"},{"line_number":122,"context_line":"        self.assertGreaterEqual(status, 200)"},{"line_number":123,"context_line":"        self.assertLess(status, 300)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def compare_slo_to_chunks(self, body):"},{"line_number":126,"context_line":"        i \u003d 1"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_92994922","line":123,"range":{"start_line":122,"start_character":0,"end_line":123,"end_character":36},"updated":"2016-12-14 13:48:24.000000000","message":"How about self.assertEqual(2, status//100)","commit_id":"b8dfe7d600d049e090b4a44ccf055db00f444fd3"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"321b54f29e66e580294ecda4f41172305245b2bd","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        i \u003d 1"},{"line_number":127,"context_line":"        for chunk in body:"},{"line_number":128,"context_line":"            if chunk:"},{"line_number":129,"context_line":"                if i \u003c 10:"},{"line_number":130,"context_line":"                    oname \u003d \u0027/tmp/slo_chunk_%d\u0027 % i"},{"line_number":131,"context_line":"                    f \u003d open(oname, \u0027r\u0027)"},{"line_number":132,"context_line":"                    file_content \u003d f.read()"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_32e795b1","line":129,"range":{"start_line":129,"start_character":16,"end_line":129,"end_character":26},"updated":"2016-12-14 13:48:24.000000000","message":"using \u0027i in xrange(10)\u0027 is more pythonic.","commit_id":"b8dfe7d600d049e090b4a44ccf055db00f444fd3"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"321b54f29e66e580294ecda4f41172305245b2bd","unresolved":false,"context_lines":[{"line_number":128,"context_line":"            if chunk:"},{"line_number":129,"context_line":"                if i \u003c 10:"},{"line_number":130,"context_line":"                    oname \u003d \u0027/tmp/slo_chunk_%d\u0027 % i"},{"line_number":131,"context_line":"                    f \u003d open(oname, \u0027r\u0027)"},{"line_number":132,"context_line":"                    file_content \u003d f.read()"},{"line_number":133,"context_line":"                    # print \u0027%s    %s\u0027 % (chunk[:10], file_content[:10])"},{"line_number":134,"context_line":"                    # print \u0027%d    %d\u0027 % (len(chunk), len(file_content))"},{"line_number":135,"context_line":"                    self.assertEqual(chunk, file_content)"},{"line_number":136,"context_line":"                    f.close()"},{"line_number":137,"context_line":"                    i \u003d i + 1"},{"line_number":138,"context_line":"                else:"},{"line_number":139,"context_line":"                    aux_content \u003d \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_72ef4d87","line":136,"range":{"start_line":131,"start_character":0,"end_line":136,"end_character":29},"updated":"2016-12-14 13:48:24.000000000","message":"Please use \u0027with open(oname, \u0027r\u0027) as f\u0027 instead of direct opening/closing.","commit_id":"b8dfe7d600d049e090b4a44ccf055db00f444fd3"}],"tests/functional/python/test_deploy_storlet.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"4603eff5d00b23335b8e41a7d8aba9348bedf59a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u0027\u0027\u0027-------------------------------------------------------------------------"},{"line_number":2,"context_line":"Copyright IBM Corp. 2015, 2015 All Rights Reserved"},{"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 License."},{"line_number":5,"context_line":"You may obtain a copy of the License at"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a74a57a_e3643aba","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":50},"updated":"2016-11-28 02:43:49.000000000","message":"I think it should follow openstack copyright and it has been since 2016 for the new source code files at least.","commit_id":"cb2cd0acf84a267535beac8a030b38e8d9aa1e51"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"4603eff5d00b23335b8e41a7d8aba9348bedf59a","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            child.sendline(self.execdep_storlet_dep_file)"},{"line_number":45,"context_line":"            child.sendline(\u0027\\n\u0027)"},{"line_number":46,"context_line":"            child.expect(\u0027Storlet deployment complete.*\u0027, timeout\u003dself.timeout)"},{"line_number":47,"context_line":"        except Exception as err:"},{"line_number":48,"context_line":"            self.fail(\u0027Unexpected exception %s\u0027 % err)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a74a57a_c32d7e47","line":48,"range":{"start_line":47,"start_character":0,"end_line":48,"end_character":54},"updated":"2016-11-28 02:43:49.000000000","message":"Perhaps, removing try/expect here could help us to know which line got Timeout exception instance.","commit_id":"cb2cd0acf84a267535beac8a030b38e8d9aa1e51"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"add44c17157dfda5a7fd61f4ac3b7febb174c90b","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from tests.functional import StorletBaseFunctionalTest, PATH_TO_STORLETS"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class TestExecDepStorlet(StorletBaseFunctionalTest):"},{"line_number":21,"context_line":"    def setUp(self):"},{"line_number":22,"context_line":"        super(TestExecDepStorlet, self).setUp()"},{"line_number":23,"context_line":"        self.deploy_storlet_path \u003d \u0027../../storlets/tools/deploy_storlet.py\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_67edc624","line":20,"range":{"start_line":20,"start_character":6,"end_line":20,"end_character":24},"updated":"2016-12-03 18:41:02.000000000","message":"This name is misleading because it seems like a testing about dependency execution at the first glance.","commit_id":"dd5d14cba27a8c0b600c0ac301a26e1f79625ce9"},{"author":{"_account_id":17901,"name":"Akihito Takai","email":"takaiak@nttdata.co.jp","username":"AkihitoTakai"},"change_message_id":"caf028b379fb56cd4d8ed8520d7305b753b033b8","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from tests.functional import StorletBaseFunctionalTest, PATH_TO_STORLETS"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class TestExecDepStorlet(StorletBaseFunctionalTest):"},{"line_number":21,"context_line":"    def setUp(self):"},{"line_number":22,"context_line":"        super(TestExecDepStorlet, self).setUp()"},{"line_number":23,"context_line":"        self.deploy_storlet_path \u003d \u0027../../storlets/tools/deploy_storlet.py\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_610a017b","line":20,"range":{"start_line":20,"start_character":6,"end_line":20,"end_character":24},"in_reply_to":"3a71b18c_67edc624","updated":"2016-12-05 09:42:44.000000000","message":"Done","commit_id":"dd5d14cba27a8c0b600c0ac301a26e1f79625ce9"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"add44c17157dfda5a7fd61f4ac3b7febb174c90b","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        self.deploy_storlet_path \u003d \u0027../../storlets/tools/deploy_storlet.py\u0027"},{"line_number":24,"context_line":"        self.execdep_storlet_path \u003d \u0027%s/python/%s\u0027 % (PATH_TO_STORLETS,"},{"line_number":25,"context_line":"                                                      \u0027ExecDepStorlet\u0027)"},{"line_number":26,"context_line":"        self.execdep_storlet_file \u003d \u0027%s/%s\u0027 % (self.execdep_storlet_path,"},{"line_number":27,"context_line":"                                               \u0027exec_dep.py\u0027)"},{"line_number":28,"context_line":"        self.execdep_storlet_dep_file \u003d \u0027%s/%s\u0027 % (self.execdep_storlet_path,"},{"line_number":29,"context_line":"                                                   \u0027get42.sh\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_6786a666","line":26,"range":{"start_line":26,"start_character":37,"end_line":26,"end_character":42},"updated":"2016-12-03 18:41:02.000000000","message":"I think it is better to use os.path.join instead of building a string.","commit_id":"dd5d14cba27a8c0b600c0ac301a26e1f79625ce9"},{"author":{"_account_id":17901,"name":"Akihito Takai","email":"takaiak@nttdata.co.jp","username":"AkihitoTakai"},"change_message_id":"caf028b379fb56cd4d8ed8520d7305b753b033b8","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        self.deploy_storlet_path \u003d \u0027../../storlets/tools/deploy_storlet.py\u0027"},{"line_number":24,"context_line":"        self.execdep_storlet_path \u003d \u0027%s/python/%s\u0027 % (PATH_TO_STORLETS,"},{"line_number":25,"context_line":"                                                      \u0027ExecDepStorlet\u0027)"},{"line_number":26,"context_line":"        self.execdep_storlet_file \u003d \u0027%s/%s\u0027 % (self.execdep_storlet_path,"},{"line_number":27,"context_line":"                                               \u0027exec_dep.py\u0027)"},{"line_number":28,"context_line":"        self.execdep_storlet_dep_file \u003d \u0027%s/%s\u0027 % (self.execdep_storlet_path,"},{"line_number":29,"context_line":"                                                   \u0027get42.sh\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_6eb4b081","line":26,"range":{"start_line":26,"start_character":37,"end_line":26,"end_character":42},"in_reply_to":"3a71b18c_6786a666","updated":"2016-12-05 09:42:44.000000000","message":"Done","commit_id":"dd5d14cba27a8c0b600c0ac301a26e1f79625ce9"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"add44c17157dfda5a7fd61f4ac3b7febb174c90b","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        self.execdep_storlet_dep_file \u003d \u0027%s/%s\u0027 % (self.execdep_storlet_path,"},{"line_number":29,"context_line":"                                                   \u0027get42.sh\u0027)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"        self.timeout \u003d 2"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def test_deploy_storlet_util(self):"},{"line_number":34,"context_line":"        child \u003d pexpect.spawn(\u0027python %s %s\u0027 % (self.deploy_storlet_path,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_e792b69e","line":31,"range":{"start_line":31,"start_character":23,"end_line":31,"end_character":24},"updated":"2016-12-03 18:41:02.000000000","message":"Can you define this value as CONSOLE_TIMEOUT and place it in more common place?","commit_id":"dd5d14cba27a8c0b600c0ac301a26e1f79625ce9"},{"author":{"_account_id":17901,"name":"Akihito Takai","email":"takaiak@nttdata.co.jp","username":"AkihitoTakai"},"change_message_id":"caf028b379fb56cd4d8ed8520d7305b753b033b8","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        self.execdep_storlet_dep_file \u003d \u0027%s/%s\u0027 % (self.execdep_storlet_path,"},{"line_number":29,"context_line":"                                                   \u0027get42.sh\u0027)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"        self.timeout \u003d 2"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def test_deploy_storlet_util(self):"},{"line_number":34,"context_line":"        child \u003d pexpect.spawn(\u0027python %s %s\u0027 % (self.deploy_storlet_path,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_a1cc196b","line":31,"range":{"start_line":31,"start_character":23,"end_line":31,"end_character":24},"in_reply_to":"3a71b18c_e792b69e","updated":"2016-12-05 09:42:44.000000000","message":"Done","commit_id":"dd5d14cba27a8c0b600c0ac301a26e1f79625ce9"}],"tests/functional/python/test_simple_storlet.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"add44c17157dfda5a7fd61f4ac3b7febb174c90b","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            self.url, self.token, self.container, objname,"},{"line_number":89,"context_line":"            self.content, response_dict\u003dresp, headers\u003dreq_headers)"},{"line_number":90,"context_line":"        self.assertEqual(201, resp[\u0027status\u0027])"},{"line_number":91,"context_line":"        rh \u003d resp[\u0027headers\u0027]"},{"line_number":92,"context_line":"        self.assertEqual(rh[\u0027x-storlet-generated-from\u0027],"},{"line_number":93,"context_line":"                         \u0027myobjects/%s\u0027 % self.storlet_file)"},{"line_number":94,"context_line":"        self.assertEqual(rh[\u0027x-storlet-generated-from-account\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_87f4a2f2","line":91,"range":{"start_line":91,"start_character":8,"end_line":91,"end_character":10},"updated":"2016-12-03 18:41:02.000000000","message":"Please do not use too short name.","commit_id":"dd5d14cba27a8c0b600c0ac301a26e1f79625ce9"},{"author":{"_account_id":17901,"name":"Akihito Takai","email":"takaiak@nttdata.co.jp","username":"AkihitoTakai"},"change_message_id":"caf028b379fb56cd4d8ed8520d7305b753b033b8","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            self.url, self.token, self.container, objname,"},{"line_number":89,"context_line":"            self.content, response_dict\u003dresp, headers\u003dreq_headers)"},{"line_number":90,"context_line":"        self.assertEqual(201, resp[\u0027status\u0027])"},{"line_number":91,"context_line":"        rh \u003d resp[\u0027headers\u0027]"},{"line_number":92,"context_line":"        self.assertEqual(rh[\u0027x-storlet-generated-from\u0027],"},{"line_number":93,"context_line":"                         \u0027myobjects/%s\u0027 % self.storlet_file)"},{"line_number":94,"context_line":"        self.assertEqual(rh[\u0027x-storlet-generated-from-account\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_6158418b","line":91,"range":{"start_line":91,"start_character":8,"end_line":91,"end_character":10},"in_reply_to":"3a71b18c_87f4a2f2","updated":"2016-12-05 09:42:44.000000000","message":"Done","commit_id":"dd5d14cba27a8c0b600c0ac301a26e1f79625ce9"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"add44c17157dfda5a7fd61f4ac3b7febb174c90b","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                         self.acct)"},{"line_number":96,"context_line":"        self.assertIn(\u0027x-storlet-generated-from-last-modified\u0027, rh)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        headers \u003d client.head_object(self.url, self.token,"},{"line_number":99,"context_line":"                                     \u0027myobjects\u0027, objname)"},{"line_number":100,"context_line":"        self.assertEqual(headers[\u0027content-length\u0027], str(len(self.content)))"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        resp \u003d dict()"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_07e97214","line":99,"range":{"start_line":98,"start_character":8,"end_line":99,"end_character":58},"updated":"2016-12-03 18:41:02.000000000","message":"Don\u0027t you need to assert response status?","commit_id":"dd5d14cba27a8c0b600c0ac301a26e1f79625ce9"},{"author":{"_account_id":17901,"name":"Akihito Takai","email":"takaiak@nttdata.co.jp","username":"AkihitoTakai"},"change_message_id":"caf028b379fb56cd4d8ed8520d7305b753b033b8","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                         self.acct)"},{"line_number":96,"context_line":"        self.assertIn(\u0027x-storlet-generated-from-last-modified\u0027, rh)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        headers \u003d client.head_object(self.url, self.token,"},{"line_number":99,"context_line":"                                     \u0027myobjects\u0027, objname)"},{"line_number":100,"context_line":"        self.assertEqual(headers[\u0027content-length\u0027], str(len(self.content)))"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        resp \u003d dict()"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_da5d7a48","line":99,"range":{"start_line":98,"start_character":8,"end_line":99,"end_character":58},"in_reply_to":"3a71b18c_07e97214","updated":"2016-12-05 09:42:44.000000000","message":"\u0027client.head_object\u0027 can\u0027t return the response status, so we don\u0027t check it.","commit_id":"dd5d14cba27a8c0b600c0ac301a26e1f79625ce9"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"add44c17157dfda5a7fd61f4ac3b7febb174c90b","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                                     \u0027myobjects\u0027, objname)"},{"line_number":100,"context_line":"        self.assertEqual(headers[\u0027content-length\u0027], str(len(self.content)))"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        resp \u003d dict()"},{"line_number":103,"context_line":"        client.delete_object("},{"line_number":104,"context_line":"            self.url, self.token, self.container, objname,"},{"line_number":105,"context_line":"            response_dict\u003dresp)"},{"line_number":106,"context_line":"        self.assertEqual(204, resp[\u0027status\u0027])"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        resp \u003d dict()"},{"line_number":109,"context_line":"        client.delete_object("},{"line_number":110,"context_line":"            self.url, self.token, self.container, self.storlet_file,"},{"line_number":111,"context_line":"            response_dict\u003dresp)"},{"line_number":112,"context_line":"        self.assertEqual(204, resp[\u0027status\u0027])"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def test_copy(self):"},{"line_number":115,"context_line":"        # No COPY in swiftclient. Using urllib instead..."}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_c7de9a6c","line":112,"range":{"start_line":102,"start_character":0,"end_line":112,"end_character":45},"updated":"2016-12-03 18:41:02.000000000","message":"(nit) These blocks seems redundant to me. Can we have a basic func for deleting object and use it?","commit_id":"dd5d14cba27a8c0b600c0ac301a26e1f79625ce9"},{"author":{"_account_id":17901,"name":"Akihito Takai","email":"takaiak@nttdata.co.jp","username":"AkihitoTakai"},"change_message_id":"caf028b379fb56cd4d8ed8520d7305b753b033b8","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                                     \u0027myobjects\u0027, objname)"},{"line_number":100,"context_line":"        self.assertEqual(headers[\u0027content-length\u0027], str(len(self.content)))"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        resp \u003d dict()"},{"line_number":103,"context_line":"        client.delete_object("},{"line_number":104,"context_line":"            self.url, self.token, self.container, objname,"},{"line_number":105,"context_line":"            response_dict\u003dresp)"},{"line_number":106,"context_line":"        self.assertEqual(204, resp[\u0027status\u0027])"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        resp \u003d dict()"},{"line_number":109,"context_line":"        client.delete_object("},{"line_number":110,"context_line":"            self.url, self.token, self.container, self.storlet_file,"},{"line_number":111,"context_line":"            response_dict\u003dresp)"},{"line_number":112,"context_line":"        self.assertEqual(204, resp[\u0027status\u0027])"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def test_copy(self):"},{"line_number":115,"context_line":"        # No COPY in swiftclient. Using urllib instead..."}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_15726349","line":112,"range":{"start_line":102,"start_character":0,"end_line":112,"end_character":45},"in_reply_to":"3a71b18c_c7de9a6c","updated":"2016-12-05 09:42:44.000000000","message":"Do you mean that we don\u0027t have to delete the object?","commit_id":"dd5d14cba27a8c0b600c0ac301a26e1f79625ce9"}]}
