)]}'
{"swift/common/db.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"cee60fa030928d8fe2dac77f17ef4a2c28398f29","unresolved":false,"context_lines":[{"line_number":730,"context_line":"            for entry in fp.read().split(b\u0027:\u0027):"},{"line_number":731,"context_line":"                if entry:"},{"line_number":732,"context_line":"                    try:"},{"line_number":733,"context_line":"                        self._commit_puts_load(item_list, entry)"},{"line_number":734,"context_line":"                    except Exception:"},{"line_number":735,"context_line":"                        self.logger.exception("},{"line_number":736,"context_line":"                            _(\u0027Invalid pending entry %(file)s: %(entry)s\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_db83eb02","line":733,"range":{"start_line":733,"start_character":58,"end_line":733,"end_character":63},"updated":"2018-10-05 20:42:47.000000000","message":"Off-topic: it bugs me more than it should that we push the base64-decoding and unpickling out to the backends when db.py is the one that serialized it that way...","commit_id":"e3a5b63cc7ebc281bbde248f7ef86f968aa9d277"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"cee60fa030928d8fe2dac77f17ef4a2c28398f29","unresolved":false,"context_lines":[{"line_number":884,"context_line":"                if not check_utf8(value):"},{"line_number":885,"context_line":"                    raise HTTPBadRequest(\u0027Metadata must be valid UTF-8\u0027)"},{"line_number":886,"context_line":"            key \u003d key.lower()"},{"line_number":887,"context_line":"            if len(value) !\u003d 0 and (key.startswith(\u0027x-account-meta\u0027) or"},{"line_number":888,"context_line":"                                    key.startswith(\u0027x-container-meta\u0027)):"},{"line_number":889,"context_line":"                prefix \u003d \u0027x-account-meta-\u0027"},{"line_number":890,"context_line":"                if key.startswith(\u0027x-container-meta-\u0027):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_bb3b8f99","line":887,"range":{"start_line":887,"start_character":15,"end_line":887,"end_character":30},"updated":"2018-10-05 20:42:47.000000000","message":"I think this is one of those spots where I\u0027d be fine with a truth-y check like\n\n if value and (...):","commit_id":"e3a5b63cc7ebc281bbde248f7ef86f968aa9d277"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"cee60fa030928d8fe2dac77f17ef4a2c28398f29","unresolved":false,"context_lines":[{"line_number":885,"context_line":"                    raise HTTPBadRequest(\u0027Metadata must be valid UTF-8\u0027)"},{"line_number":886,"context_line":"            key \u003d key.lower()"},{"line_number":887,"context_line":"            if len(value) !\u003d 0 and (key.startswith(\u0027x-account-meta\u0027) or"},{"line_number":888,"context_line":"                                    key.startswith(\u0027x-container-meta\u0027)):"},{"line_number":889,"context_line":"                prefix \u003d \u0027x-account-meta-\u0027"},{"line_number":890,"context_line":"                if key.startswith(\u0027x-container-meta-\u0027):"},{"line_number":891,"context_line":"                    prefix \u003d \u0027x-container-meta-\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_9b6b3385","line":888,"range":{"start_line":888,"start_character":52,"end_line":888,"end_character":68},"updated":"2018-10-05 20:42:47.000000000","message":"Off-topic: so we come in here even when the user sends something like\n\n x-container-metadata-needs-just-meta: or-it-does-not-get-stored\n\nSeems like a (small, obscure) bug...","commit_id":"e3a5b63cc7ebc281bbde248f7ef86f968aa9d277"}],"test/unit/common/test_db.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"cee60fa030928d8fe2dac77f17ef4a2c28398f29","unresolved":false,"context_lines":[{"line_number":687,"context_line":"        stub_dict \u003d {}"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"        def stub(*args, **kwargs):"},{"line_number":690,"context_line":"            for key in list(stub_dict.keys()):"},{"line_number":691,"context_line":"                del stub_dict[key]"},{"line_number":692,"context_line":"            stub_dict[\u0027args\u0027] \u003d args"},{"line_number":693,"context_line":"            for key, value in kwargs.items():"},{"line_number":694,"context_line":"                stub_dict[key] \u003d value"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_fb282737","line":691,"range":{"start_line":690,"start_character":12,"end_line":691,"end_character":34},"updated":"2018-10-05 20:42:47.000000000","message":"Maybe better as just\n\n stub_dict.clear()\n\n?","commit_id":"e3a5b63cc7ebc281bbde248f7ef86f968aa9d277"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"02082e6faf7d4810b904b30418f8c1c0818d7456","unresolved":false,"context_lines":[{"line_number":687,"context_line":"        stub_dict \u003d {}"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"        def stub(*args, **kwargs):"},{"line_number":690,"context_line":"            for key in list(stub_dict.keys()):"},{"line_number":691,"context_line":"                del stub_dict[key]"},{"line_number":692,"context_line":"            stub_dict[\u0027args\u0027] \u003d args"},{"line_number":693,"context_line":"            for key, value in kwargs.items():"},{"line_number":694,"context_line":"                stub_dict[key] \u003d value"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_be2ffdf3","line":691,"range":{"start_line":690,"start_character":12,"end_line":691,"end_character":34},"in_reply_to":"3f79a3b5_fb282737","updated":"2018-10-05 21:37:59.000000000","message":"Will do in a follow-up.","commit_id":"e3a5b63cc7ebc281bbde248f7ef86f968aa9d277"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"cee60fa030928d8fe2dac77f17ef4a2c28398f29","unresolved":false,"context_lines":[{"line_number":1436,"context_line":"            fd.write(b\u0027:bad\u0027)"},{"line_number":1437,"context_line":"        with patch.object(broker, \u0027merge_items\u0027) as mock_merge_items:"},{"line_number":1438,"context_line":"            broker._commit_puts_load \u003d lambda l, e: l.append(e)"},{"line_number":1439,"context_line":"            broker._commit_puts([b\u0027not\u0027])"},{"line_number":1440,"context_line":"        mock_merge_items.assert_called_once_with([b\u0027not\u0027, b\u0027bad\u0027])"},{"line_number":1441,"context_line":"        self.assertEqual(0, os.path.getsize(broker.pending_file))"},{"line_number":1442,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_9bc8134e","line":1439,"range":{"start_line":1439,"start_character":33,"end_line":1439,"end_character":39},"updated":"2018-10-05 20:42:47.000000000","message":"So _commit_puts takes an item_list... and all the items are byte strings? Is that always true? I thought items were tuples...\n\nOh! Is this because of our weird hacking up of _commit_puts_load on the previous line?","commit_id":"e3a5b63cc7ebc281bbde248f7ef86f968aa9d277"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"cee60fa030928d8fe2dac77f17ef4a2c28398f29","unresolved":false,"context_lines":[{"line_number":1449,"context_line":"            fd.write(b\u0027:ignored\u0027)"},{"line_number":1450,"context_line":"        with patch.object(broker, \u0027merge_items\u0027) as mock_merge_items:"},{"line_number":1451,"context_line":"            with self.assertRaises(DatabaseConnectionError) as cm:"},{"line_number":1452,"context_line":"                broker._commit_puts([b\u0027hmmm\u0027])"},{"line_number":1453,"context_line":"        mock_merge_items.assert_not_called()"},{"line_number":1454,"context_line":"        self.assertIn(\u0027commits not accepted\u0027, str(cm.exception))"},{"line_number":1455,"context_line":"        with open(broker.pending_file, \u0027rb\u0027) as fd:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_5bd27bff","line":1452,"range":{"start_line":1452,"start_character":37,"end_line":1452,"end_character":44},"updated":"2018-10-05 20:42:47.000000000","message":"Does the type actually matter here? Looks like the arg is just discarded...","commit_id":"e3a5b63cc7ebc281bbde248f7ef86f968aa9d277"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"cee60fa030928d8fe2dac77f17ef4a2c28398f29","unresolved":false,"context_lines":[{"line_number":1462,"context_line":"        broker.initialize(Timestamp.now())"},{"line_number":1463,"context_line":""},{"line_number":1464,"context_line":"        # pending file created and record written"},{"line_number":1465,"context_line":"        broker.make_tuple_for_pickle \u003d lambda x: x.upper()"},{"line_number":1466,"context_line":"        with patch.object(broker, \u0027_commit_puts\u0027) as mock_commit_puts:"},{"line_number":1467,"context_line":"            broker.put_record(\u0027pinky\u0027)"},{"line_number":1468,"context_line":"        mock_commit_puts.assert_not_called()"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_fbb267e8","line":1465,"range":{"start_line":1465,"start_character":49,"end_line":1465,"end_character":58},"updated":"2018-10-05 20:42:47.000000000","message":"Off-topic: That\u0027s not a tuple! :-/","commit_id":"e3a5b63cc7ebc281bbde248f7ef86f968aa9d277"}]}
