)]}'
{"glance/store/vmware_datastore.py":[{"author":{"_account_id":8027,"name":"Vui Lam","email":"vui@vmware.com","username":"vui"},"change_message_id":"bdc555ad1e1230dc8d39ccf94cae6d9edbe90e72","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    def _get_chunk(self):"},{"line_number":135,"context_line":"        if not self.closed:"},{"line_number":136,"context_line":"            chunk \u003d self.data.read(self.blocksize)"},{"line_number":137,"context_line":"            self._size +\u003d len(chunk)"},{"line_number":138,"context_line":"            self.checksum.update(chunk)"},{"line_number":139,"context_line":"            if chunk:"},{"line_number":140,"context_line":"                self.current_chunk \u003d (\"%x\" % (len(chunk),) + \"\\r\\n\" +"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_ff023f0a","line":137,"updated":"2014-04-29 22:32:32.000000000","message":"nit: use a variable for len(chunk) because it is used more than once and...","commit_id":"d343a7cb43875da4774167283b03974dc36b3a91"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"6ce7d6b913946f959c07c4dc08039da2ebfcb061","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    def _get_chunk(self):"},{"line_number":135,"context_line":"        if not self.closed:"},{"line_number":136,"context_line":"            chunk \u003d self.data.read(self.blocksize)"},{"line_number":137,"context_line":"            self._size +\u003d len(chunk)"},{"line_number":138,"context_line":"            self.checksum.update(chunk)"},{"line_number":139,"context_line":"            if chunk:"},{"line_number":140,"context_line":"                self.current_chunk \u003d (\"%x\" % (len(chunk),) + \"\\r\\n\" +"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_f3f0b8cb","line":137,"in_reply_to":"9ad9bd40_ff023f0a","updated":"2014-04-30 02:07:21.000000000","message":"Done","commit_id":"d343a7cb43875da4774167283b03974dc36b3a91"},{"author":{"_account_id":8027,"name":"Vui Lam","email":"vui@vmware.com","username":"vui"},"change_message_id":"bdc555ad1e1230dc8d39ccf94cae6d9edbe90e72","unresolved":false,"context_lines":[{"line_number":137,"context_line":"            self._size +\u003d len(chunk)"},{"line_number":138,"context_line":"            self.checksum.update(chunk)"},{"line_number":139,"context_line":"            if chunk:"},{"line_number":140,"context_line":"                self.current_chunk \u003d (\"%x\" % (len(chunk),) + \"\\r\\n\" +"},{"line_number":141,"context_line":"                                      chunk + \"\\r\\n\")"},{"line_number":142,"context_line":"            else:"},{"line_number":143,"context_line":"                self.current_chunk \u003d \"0\\r\\n\\r\\n\""}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_c20f642d","line":140,"updated":"2014-04-29 22:32:32.000000000","message":"... you don\u0027t need a tuple (len(chunk),) here, just the var name will do, and you may fit in one line to boot after all this.","commit_id":"d343a7cb43875da4774167283b03974dc36b3a91"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"6ce7d6b913946f959c07c4dc08039da2ebfcb061","unresolved":false,"context_lines":[{"line_number":137,"context_line":"            self._size +\u003d len(chunk)"},{"line_number":138,"context_line":"            self.checksum.update(chunk)"},{"line_number":139,"context_line":"            if chunk:"},{"line_number":140,"context_line":"                self.current_chunk \u003d (\"%x\" % (len(chunk),) + \"\\r\\n\" +"},{"line_number":141,"context_line":"                                      chunk + \"\\r\\n\")"},{"line_number":142,"context_line":"            else:"},{"line_number":143,"context_line":"                self.current_chunk \u003d \"0\\r\\n\\r\\n\""}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_13eefcec","line":140,"in_reply_to":"9ad9bd40_c20f642d","updated":"2014-04-30 02:07:21.000000000","message":"Done","commit_id":"d343a7cb43875da4774167283b03974dc36b3a91"}],"glance/tests/unit/test_vmware_store.py":[{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"9cbfbf14437664f529d01cdbe11d9742209b23c0","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        self.assertEqual(\u0027\u0027, ret)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"        checksum \u003d hashlib.md5()"},{"line_number":276,"context_line":"        image.seek(0)"},{"line_number":277,"context_line":"        # blocksize \u003c content length"},{"line_number":278,"context_line":"        reader \u003d vm_store._Reader(image, checksum, blocksize\u003d1)"},{"line_number":279,"context_line":"        ret \u003d reader.read()"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad9bd40_a431670d","line":276,"updated":"2014-05-01 07:16:00.000000000","message":"why?","commit_id":"b4655b2e302e3d1932caae71811e08a0ccf2476c"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"8f7586ad8998f6412afc793256f445acc8eae607","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        self.assertEqual(\u0027\u0027, ret)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"        checksum \u003d hashlib.md5()"},{"line_number":276,"context_line":"        image.seek(0)"},{"line_number":277,"context_line":"        # blocksize \u003c content length"},{"line_number":278,"context_line":"        reader \u003d vm_store._Reader(image, checksum, blocksize\u003d1)"},{"line_number":279,"context_line":"        ret \u003d reader.read()"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad9bd40_d61a9416","line":276,"in_reply_to":"9ad9bd40_a431670d","updated":"2014-05-01 17:24:53.000000000","message":"reader.read() moves the cursor of the file (here the StringIO). So we need to put the cursor back to the beginning of the file when finished.\nBut, I actually think this is a good point, I added seek(0) in _get_chunk(), when we are done reading the file. This way we are sure that the next time we want to read() after the being done, the cursor is a the good position.","commit_id":"b4655b2e302e3d1932caae71811e08a0ccf2476c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"9cbfbf14437664f529d01cdbe11d9742209b23c0","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        self.assertTrue(reader.closed)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        checksum \u003d hashlib.md5()"},{"line_number":288,"context_line":"        image.seek(0)"},{"line_number":289,"context_line":"        # read size \u003e block size"},{"line_number":290,"context_line":"        reader \u003d vm_store._Reader(image, checksum, blocksize\u003d1)"},{"line_number":291,"context_line":"        ret \u003d reader.read(size\u003d3)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad9bd40_c4366b03","line":288,"updated":"2014-05-01 07:16:00.000000000","message":"ditto","commit_id":"b4655b2e302e3d1932caae71811e08a0ccf2476c"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"719da096b67eb0a104d48897be424f84982390b2","unresolved":false,"context_lines":[{"line_number":251,"context_line":"            HttpConn.return_value \u003d FakeHTTPConnection(status\u003d404)"},{"line_number":252,"context_line":"            self.assertRaises(exception.NotFound, self.store.get_size, loc)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def test_image_reader(self):"},{"line_number":255,"context_line":"        \"\"\"Test that the image file reader returns expected chunks of data\"\"\""},{"line_number":256,"context_line":"        content \u003d \u0027XXX\u0027"},{"line_number":257,"context_line":"        image \u003d six.StringIO(content)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_5ffe5539","line":254,"updated":"2014-05-05 09:31:40.000000000","message":"nit: I\u0027d like to see separating this stuff to three dedicated cases.","commit_id":"a4cf03c679a2e8b4323a34743ec16b75f64e5a9f"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"696bd02cc43cb57499d8de7dfcec088741538a0f","unresolved":false,"context_lines":[{"line_number":251,"context_line":"            HttpConn.return_value \u003d FakeHTTPConnection(status\u003d404)"},{"line_number":252,"context_line":"            self.assertRaises(exception.NotFound, self.store.get_size, loc)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def test_image_reader(self):"},{"line_number":255,"context_line":"        \"\"\"Test that the image file reader returns expected chunks of data\"\"\""},{"line_number":256,"context_line":"        content \u003d \u0027XXX\u0027"},{"line_number":257,"context_line":"        image \u003d six.StringIO(content)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_c98f0529","line":254,"in_reply_to":"9ad9bd40_5ffe5539","updated":"2014-05-05 18:41:47.000000000","message":"Sure Zhi: will fix that in the next PS.","commit_id":"a4cf03c679a2e8b4323a34743ec16b75f64e5a9f"}]}
