)]}'
{"smaug/services/protection/checkpoint.py":[{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"d5c24374143e711fba33ed181d23f85cc1bfa9a4","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        )"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        index_section.create_object("},{"line_number":138,"context_line":"            key\u003d\"/%s/%s@%s\" % (date, timestamp, checkpoint_id),"},{"line_number":139,"context_line":"            value\u003dcheckpoint_id"},{"line_number":140,"context_line":"        )"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_b2b3fbe8","line":138,"updated":"2016-05-03 11:20:57.000000000","message":"If the bank section doesn\u0027t include provider_id, then each index should start with provider_id?","commit_id":"55e798e00d020c58548cab77f4f4aa1ab6ac9a58"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"9854de25f183b8a374c82b06c93aa593ce954280","unresolved":false,"context_lines":[{"line_number":128,"context_line":"            }"},{"line_number":129,"context_line":"        )"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        index_section.create_object("},{"line_number":132,"context_line":"            key\u003d\"/%s/%s@%s\" % (plan.get(\"provider_id\"),"},{"line_number":133,"context_line":"                                timestamp, checkpoint_id),"},{"line_number":134,"context_line":"            value\u003dcheckpoint_id"},{"line_number":135,"context_line":"        )"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        index_section.create_object("},{"line_number":138,"context_line":"            key\u003d\"/%s/%s@%s\" % (date, timestamp, checkpoint_id),"},{"line_number":139,"context_line":"            value\u003dcheckpoint_id"},{"line_number":140,"context_line":"        )"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        index_section.create_object("},{"line_number":143,"context_line":"            key\u003d\"/%s/%s/%s@%s\" % (plan.get(\"id\"), date,"},{"line_number":144,"context_line":"                                  timestamp, checkpoint_id),"},{"line_number":145,"context_line":"            value\u003dcheckpoint_id"},{"line_number":146,"context_line":"        )"},{"line_number":147,"context_line":"        return Checkpoint(bank_section,"},{"line_number":148,"context_line":"                          bank_lease,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_e5c95827","line":145,"range":{"start_line":131,"start_character":0,"end_line":145,"end_character":31},"updated":"2016-05-01 12:11:57.000000000","message":"use /indices sub sections:\n/indices/by-provider\n/indices/by-plan\n/indices/by-time\n\nby-plan and by-provider shouldn\u0027t include the timestamp in its name.","commit_id":"55e798e00d020c58548cab77f4f4aa1ab6ac9a58"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"d5c24374143e711fba33ed181d23f85cc1bfa9a4","unresolved":false,"context_lines":[{"line_number":128,"context_line":"            }"},{"line_number":129,"context_line":"        )"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        index_section.create_object("},{"line_number":132,"context_line":"            key\u003d\"/%s/%s@%s\" % (plan.get(\"provider_id\"),"},{"line_number":133,"context_line":"                                timestamp, checkpoint_id),"},{"line_number":134,"context_line":"            value\u003dcheckpoint_id"},{"line_number":135,"context_line":"        )"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        index_section.create_object("},{"line_number":138,"context_line":"            key\u003d\"/%s/%s@%s\" % (date, timestamp, checkpoint_id),"},{"line_number":139,"context_line":"            value\u003dcheckpoint_id"},{"line_number":140,"context_line":"        )"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        index_section.create_object("},{"line_number":143,"context_line":"            key\u003d\"/%s/%s/%s@%s\" % (plan.get(\"id\"), date,"},{"line_number":144,"context_line":"                                  timestamp, checkpoint_id),"},{"line_number":145,"context_line":"            value\u003dcheckpoint_id"},{"line_number":146,"context_line":"        )"},{"line_number":147,"context_line":"        return Checkpoint(bank_section,"},{"line_number":148,"context_line":"                          bank_lease,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_d2e5d7dc","line":145,"range":{"start_line":131,"start_character":0,"end_line":145,"end_character":31},"in_reply_to":"1a122d0e_e5c95827","updated":"2016-05-03 11:20:57.000000000","message":"timestamp is for a stable sorting, so we could list with marker.","commit_id":"55e798e00d020c58548cab77f4f4aa1ab6ac9a58"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"9854de25f183b8a374c82b06c93aa593ce954280","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        if plan_id is None and len(date_list) \u003d\u003d 0:"},{"line_number":203,"context_line":"            # TODO(hurong): marker"},{"line_number":204,"context_line":"            prefix \u003d \"/%s/\" % provider_id"},{"line_number":205,"context_line":"            return [key[key.find(\"@\")+1:]"},{"line_number":206,"context_line":"                    for key in self._index_section.list_objects("},{"line_number":207,"context_line":"                    prefix\u003dprefix,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_c5e37ca3","line":204,"range":{"start_line":204,"start_character":0,"end_line":204,"end_character":41},"updated":"2016-05-01 12:11:57.000000000","message":"ditto","commit_id":"55e798e00d020c58548cab77f4f4aa1ab6ac9a58"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"9854de25f183b8a374c82b06c93aa593ce954280","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            # TODO(hurong): marker"},{"line_number":214,"context_line":"            ids \u003d []"},{"line_number":215,"context_line":"            for date in date_list:"},{"line_number":216,"context_line":"                prefix \u003d \"/%s/%s\" % (plan_id, date)"},{"line_number":217,"context_line":"                for key in self._index_section.list_objects(prefix\u003dprefix,"},{"line_number":218,"context_line":"                                                            limit\u003dlimit,"},{"line_number":219,"context_line":"                                                            marker\u003dmarker):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_05ec5491","line":216,"range":{"start_line":216,"start_character":0,"end_line":216,"end_character":51},"updated":"2016-05-01 12:11:57.000000000","message":"where do we store objects in that format?","commit_id":"55e798e00d020c58548cab77f4f4aa1ab6ac9a58"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"d5c24374143e711fba33ed181d23f85cc1bfa9a4","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            # TODO(hurong): marker"},{"line_number":214,"context_line":"            ids \u003d []"},{"line_number":215,"context_line":"            for date in date_list:"},{"line_number":216,"context_line":"                prefix \u003d \"/%s/%s\" % (plan_id, date)"},{"line_number":217,"context_line":"                for key in self._index_section.list_objects(prefix\u003dprefix,"},{"line_number":218,"context_line":"                                                            limit\u003dlimit,"},{"line_number":219,"context_line":"                                                            marker\u003dmarker):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_32eecbb4","line":216,"range":{"start_line":216,"start_character":0,"end_line":216,"end_character":51},"in_reply_to":"1a122d0e_05ec5491","updated":"2016-05-03 11:20:57.000000000","message":"should include provider_id here as well, since we always pick some provider_id","commit_id":"55e798e00d020c58548cab77f4f4aa1ab6ac9a58"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"d5c24374143e711fba33ed181d23f85cc1bfa9a4","unresolved":false,"context_lines":[{"line_number":234,"context_line":"                    return ids"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        if plan_id is not None and len(date_list) \u003d\u003d 0:"},{"line_number":237,"context_line":"            # TODO(hurong): marker"},{"line_number":238,"context_line":"            prefix \u003d \"/%s/\" % plan_id"},{"line_number":239,"context_line":"            return [key[key.find(\"@\")+1:]"},{"line_number":240,"context_line":"                    for key in self._index_section.list_objects("}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_92107fad","line":237,"updated":"2016-05-03 11:20:57.000000000","message":"what\u0027s wrong with marker?","commit_id":"55e798e00d020c58548cab77f4f4aa1ab6ac9a58"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"9b7aa089914f888addc67a16d299e9faea3582c3","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    def resource_graph(self):"},{"line_number":67,"context_line":"        packed_graph \u003d self._md_cache.get(\"resource_graph\", None)"},{"line_number":68,"context_line":"        if packed_graph is not None:"},{"line_number":69,"context_line":"            nodes \u003d packed_graph[0]"},{"line_number":70,"context_line":"            for sid, value in nodes.items():"},{"line_number":71,"context_line":"                nodes[sid] \u003d resource.Resource(type\u003dvalue[0],"},{"line_number":72,"context_line":"                                               id\u003dvalue[1],"},{"line_number":73,"context_line":"                                               name\u003dvalue[2])"},{"line_number":74,"context_line":"            return graph.unpack_graph(packed_graph)"},{"line_number":75,"context_line":"        else:"},{"line_number":76,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_651cf3c1","line":73,"range":{"start_line":69,"start_character":0,"end_line":73,"end_character":61},"updated":"2016-05-09 13:51:35.000000000","message":"what\u0027s that?","commit_id":"10207730741ddcdb411095b0e1676c769cb72f25"},{"author":{"_account_id":20791,"name":"WeAreFormalGroup","email":"2546506173@qq.com","username":"hurong"},"change_message_id":"80c79687efbc078267221a428ecb6906e3996ba4","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    def resource_graph(self):"},{"line_number":67,"context_line":"        packed_graph \u003d self._md_cache.get(\"resource_graph\", None)"},{"line_number":68,"context_line":"        if packed_graph is not None:"},{"line_number":69,"context_line":"            nodes \u003d packed_graph[0]"},{"line_number":70,"context_line":"            for sid, value in nodes.items():"},{"line_number":71,"context_line":"                nodes[sid] \u003d resource.Resource(type\u003dvalue[0],"},{"line_number":72,"context_line":"                                               id\u003dvalue[1],"},{"line_number":73,"context_line":"                                               name\u003dvalue[2])"},{"line_number":74,"context_line":"            return graph.unpack_graph(packed_graph)"},{"line_number":75,"context_line":"        else:"},{"line_number":76,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_62059f12","line":73,"range":{"start_line":69,"start_character":0,"end_line":73,"end_character":61},"in_reply_to":"dab17558_651cf3c1","updated":"2016-05-17 10:53:52.000000000","message":"Before I submit it, this belong to other patch, I will delete it.","commit_id":"10207730741ddcdb411095b0e1676c769cb72f25"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"9b7aa089914f888addc67a16d299e9faea3582c3","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        return str(uuid())"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    @classmethod"},{"line_number":107,"context_line":"    def create_in_section(cls, provider_id, bank_section, index_section,"},{"line_number":108,"context_line":"                          bank_lease, owner_id, plan, checkpoint_id\u003dNone):"},{"line_number":109,"context_line":"        checkpoint_id \u003d checkpoint_id or cls._generate_id()"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_c5183f87","line":107,"range":{"start_line":107,"start_character":31,"end_line":107,"end_character":42},"updated":"2016-05-09 13:51:35.000000000","message":"consider inferring provider_id from plan?","commit_id":"10207730741ddcdb411095b0e1676c769cb72f25"},{"author":{"_account_id":20791,"name":"WeAreFormalGroup","email":"2546506173@qq.com","username":"hurong"},"change_message_id":"80c79687efbc078267221a428ecb6906e3996ba4","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        return str(uuid())"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    @classmethod"},{"line_number":107,"context_line":"    def create_in_section(cls, provider_id, bank_section, index_section,"},{"line_number":108,"context_line":"                          bank_lease, owner_id, plan, checkpoint_id\u003dNone):"},{"line_number":109,"context_line":"        checkpoint_id \u003d checkpoint_id or cls._generate_id()"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_62a91f24","line":107,"range":{"start_line":107,"start_character":31,"end_line":107,"end_character":42},"in_reply_to":"dab17558_c5183f87","updated":"2016-05-17 10:53:52.000000000","message":"OK","commit_id":"10207730741ddcdb411095b0e1676c769cb72f25"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"9b7aa089914f888addc67a16d299e9faea3582c3","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                          bank_lease, owner_id, plan, checkpoint_id\u003dNone):"},{"line_number":109,"context_line":"        checkpoint_id \u003d checkpoint_id or cls._generate_id()"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        timestamp \u003d int(time.time())"},{"line_number":112,"context_line":"        date_time \u003d str(datetime.datetime.fromtimestamp(timestamp))"},{"line_number":113,"context_line":"        date \u003d date_time.split(\" \")[0]"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        bank_section.create_object("},{"line_number":116,"context_line":"            key\u003d_checkpoint_id_to_index_file(checkpoint_id),"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_e5a2a34a","line":113,"range":{"start_line":111,"start_character":0,"end_line":113,"end_character":38},"updated":"2016-05-09 13:51:35.000000000","message":"consider using datetime\u0027s utcnow() and strftime(), instead of these?","commit_id":"10207730741ddcdb411095b0e1676c769cb72f25"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"abbb88ae4f570f921c9634080247e7c530341b4e","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                          bank_lease, owner_id, plan, checkpoint_id\u003dNone):"},{"line_number":109,"context_line":"        checkpoint_id \u003d checkpoint_id or cls._generate_id()"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        timestamp \u003d int(time.time())"},{"line_number":112,"context_line":"        date_time \u003d str(datetime.datetime.fromtimestamp(timestamp))"},{"line_number":113,"context_line":"        date \u003d date_time.split(\" \")[0]"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        bank_section.create_object("},{"line_number":116,"context_line":"            key\u003d_checkpoint_id_to_index_file(checkpoint_id),"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_c1b1dc48","line":113,"range":{"start_line":111,"start_character":0,"end_line":113,"end_character":38},"in_reply_to":"dab17558_02001333","updated":"2016-05-17 13:17:50.000000000","message":"Ok, but instead of using all this block, you can use:\ndate_time \u003d datetime.datetime.utcnow()\ndate \u003d date_time.strftime(\u0027%Y-%m-%d\u0027)\n\nAlso note, times must be UTC.","commit_id":"10207730741ddcdb411095b0e1676c769cb72f25"},{"author":{"_account_id":20791,"name":"WeAreFormalGroup","email":"2546506173@qq.com","username":"hurong"},"change_message_id":"80c79687efbc078267221a428ecb6906e3996ba4","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                          bank_lease, owner_id, plan, checkpoint_id\u003dNone):"},{"line_number":109,"context_line":"        checkpoint_id \u003d checkpoint_id or cls._generate_id()"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        timestamp \u003d int(time.time())"},{"line_number":112,"context_line":"        date_time \u003d str(datetime.datetime.fromtimestamp(timestamp))"},{"line_number":113,"context_line":"        date \u003d date_time.split(\" \")[0]"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        bank_section.create_object("},{"line_number":116,"context_line":"            key\u003d_checkpoint_id_to_index_file(checkpoint_id),"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_02001333","line":113,"range":{"start_line":111,"start_character":0,"end_line":113,"end_character":38},"in_reply_to":"dab17558_e5a2a34a","updated":"2016-05-17 10:53:52.000000000","message":"We use timestamp and datetime so that we have two ways to past the parameters: timestamp or datetime.","commit_id":"10207730741ddcdb411095b0e1676c769cb72f25"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"9b7aa089914f888addc67a16d299e9faea3582c3","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                    \"resources\": plan.get(\"resources\"),"},{"line_number":127,"context_line":"                    \"name\": plan.get(\"name\")"},{"line_number":128,"context_line":"                },"},{"line_number":129,"context_line":"                \"created_at\": date_time,"},{"line_number":130,"context_line":"                \"timestamp\": timestamp"},{"line_number":131,"context_line":"            }"},{"line_number":132,"context_line":"        )"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_a5a9bae1","line":130,"range":{"start_line":129,"start_character":0,"end_line":130,"end_character":38},"updated":"2016-05-09 13:51:35.000000000","message":"why do we need both?","commit_id":"10207730741ddcdb411095b0e1676c769cb72f25"},{"author":{"_account_id":20791,"name":"WeAreFormalGroup","email":"2546506173@qq.com","username":"hurong"},"change_message_id":"80c79687efbc078267221a428ecb6906e3996ba4","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                    \"resources\": plan.get(\"resources\"),"},{"line_number":127,"context_line":"                    \"name\": plan.get(\"name\")"},{"line_number":128,"context_line":"                },"},{"line_number":129,"context_line":"                \"created_at\": date_time,"},{"line_number":130,"context_line":"                \"timestamp\": timestamp"},{"line_number":131,"context_line":"            }"},{"line_number":132,"context_line":"        )"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_850a4dd0","line":130,"range":{"start_line":129,"start_character":0,"end_line":130,"end_character":38},"in_reply_to":"dab17558_a5a9bae1","updated":"2016-05-17 10:53:52.000000000","message":"timestamp is for sort,datetime is for the index of prefix.","commit_id":"10207730741ddcdb411095b0e1676c769cb72f25"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"9b7aa089914f888addc67a16d299e9faea3582c3","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        index."},{"line_number":171,"context_line":"        \"\"\""},{"line_number":172,"context_line":"        key_index \u003d 0"},{"line_number":173,"context_line":"        all_objects \u003d list(self._bank_section.list_objects())"},{"line_number":174,"context_line":"        if ("},{"line_number":175,"context_line":"                        len(all_objects) !\u003d 1"},{"line_number":176,"context_line":"                and all_objects[0][key_index] !\u003d self._index_file_path"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_c5279e62","line":173,"range":{"start_line":173,"start_character":0,"end_line":173,"end_character":61},"updated":"2016-05-09 13:51:35.000000000","message":"won\u0027t that return all objects of all checkpoints?\nself._bank_section should be the subsection of this specific checkpoint","commit_id":"10207730741ddcdb411095b0e1676c769cb72f25"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"abbb88ae4f570f921c9634080247e7c530341b4e","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        index."},{"line_number":171,"context_line":"        \"\"\""},{"line_number":172,"context_line":"        key_index \u003d 0"},{"line_number":173,"context_line":"        all_objects \u003d list(self._bank_section.list_objects())"},{"line_number":174,"context_line":"        if ("},{"line_number":175,"context_line":"                        len(all_objects) !\u003d 1"},{"line_number":176,"context_line":"                and all_objects[0][key_index] !\u003d self._index_file_path"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_3c01ef05","line":173,"range":{"start_line":173,"start_character":0,"end_line":173,"end_character":61},"in_reply_to":"dab17558_9b790532","updated":"2016-05-17 13:17:50.000000000","message":"self._bank_section has the prefix of /checkpoints\ntherefor, listing all objects will return all checkpoints, and not just objects of this specific checkpoints","commit_id":"10207730741ddcdb411095b0e1676c769cb72f25"},{"author":{"_account_id":20791,"name":"WeAreFormalGroup","email":"2546506173@qq.com","username":"hurong"},"change_message_id":"80c79687efbc078267221a428ecb6906e3996ba4","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        index."},{"line_number":171,"context_line":"        \"\"\""},{"line_number":172,"context_line":"        key_index \u003d 0"},{"line_number":173,"context_line":"        all_objects \u003d list(self._bank_section.list_objects())"},{"line_number":174,"context_line":"        if ("},{"line_number":175,"context_line":"                        len(all_objects) !\u003d 1"},{"line_number":176,"context_line":"                and all_objects[0][key_index] !\u003d self._index_file_path"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_9b790532","line":173,"range":{"start_line":173,"start_character":0,"end_line":173,"end_character":61},"in_reply_to":"dab17558_c5279e62","updated":"2016-05-17 10:53:52.000000000","message":"Yes, I agree with you, _bank_section is the subsection of checkpoint. But I can not understand which you need me to improve?","commit_id":"10207730741ddcdb411095b0e1676c769cb72f25"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"9b7aa089914f888addc67a16d299e9faea3582c3","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        self._bank_section.delete_object(self._index_file_path)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def get_resource_bank_section(self, resource_id):"},{"line_number":183,"context_line":"        prefix \u003d \"/resource-data/%s/%s/%s/\" % (self._provider_id,"},{"line_number":184,"context_line":"                                               self._id, resource_id)"},{"line_number":185,"context_line":"        return BankSection(self._bank_section.get_bank(), prefix)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_e5e3c203","line":184,"range":{"start_line":183,"start_character":0,"end_line":184,"end_character":69},"updated":"2016-05-09 13:51:35.000000000","message":"as stated in https://github.com/openstack/smaug/blob/master/doc/source/api/bank.md\nresource section are subsections of the checkpoint section","commit_id":"10207730741ddcdb411095b0e1676c769cb72f25"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"abbb88ae4f570f921c9634080247e7c530341b4e","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        self._bank_section.delete_object(self._index_file_path)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def get_resource_bank_section(self, resource_id):"},{"line_number":183,"context_line":"        prefix \u003d \"/resource-data/%s/%s/%s/\" % (self._provider_id,"},{"line_number":184,"context_line":"                                               self._id, resource_id)"},{"line_number":185,"context_line":"        return BankSection(self._bank_section.get_bank(), prefix)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_ffff54ff","line":184,"range":{"start_line":183,"start_character":0,"end_line":184,"end_character":69},"in_reply_to":"dab17558_65ac898c","updated":"2016-05-17 13:17:50.000000000","message":"Just don\u0027t forget to open a bug for it","commit_id":"10207730741ddcdb411095b0e1676c769cb72f25"},{"author":{"_account_id":20791,"name":"WeAreFormalGroup","email":"2546506173@qq.com","username":"hurong"},"change_message_id":"80c79687efbc078267221a428ecb6906e3996ba4","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        self._bank_section.delete_object(self._index_file_path)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def get_resource_bank_section(self, resource_id):"},{"line_number":183,"context_line":"        prefix \u003d \"/resource-data/%s/%s/%s/\" % (self._provider_id,"},{"line_number":184,"context_line":"                                               self._id, resource_id)"},{"line_number":185,"context_line":"        return BankSection(self._bank_section.get_bank(), prefix)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_65ac898c","line":184,"range":{"start_line":183,"start_character":0,"end_line":184,"end_character":69},"in_reply_to":"dab17558_e5e3c203","updated":"2016-05-17 10:53:52.000000000","message":"We will improve it at next patch.","commit_id":"10207730741ddcdb411095b0e1676c769cb72f25"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"9b7aa089914f888addc67a16d299e9faea3582c3","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        self._index_section \u003d BankSection("},{"line_number":197,"context_line":"            bank, \"/indices/%s\" % provider_id)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def list_ids(self, limit\u003dNone, marker\u003dNone, plan_id\u003dNone,"},{"line_number":200,"context_line":"                 start_date\u003dNone, end_date\u003dNone):"},{"line_number":201,"context_line":"        marker_checkpoint \u003d None"},{"line_number":202,"context_line":"        if marker is not None:"},{"line_number":203,"context_line":"            key \u003d _checkpoint_id_to_index_file(marker)"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_a5eb7aaf","line":200,"range":{"start_line":199,"start_character":0,"end_line":200,"end_character":49},"updated":"2016-05-09 13:51:35.000000000","message":"is that supposed to be called when list_checkpoints() from manager.py is called?\nif so, it should handle different parameters","commit_id":"10207730741ddcdb411095b0e1676c769cb72f25"},{"author":{"_account_id":20791,"name":"WeAreFormalGroup","email":"2546506173@qq.com","username":"hurong"},"change_message_id":"80c79687efbc078267221a428ecb6906e3996ba4","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        self._index_section \u003d BankSection("},{"line_number":197,"context_line":"            bank, \"/indices/%s\" % provider_id)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def list_ids(self, limit\u003dNone, marker\u003dNone, plan_id\u003dNone,"},{"line_number":200,"context_line":"                 start_date\u003dNone, end_date\u003dNone):"},{"line_number":201,"context_line":"        marker_checkpoint \u003d None"},{"line_number":202,"context_line":"        if marker is not None:"},{"line_number":203,"context_line":"            key \u003d _checkpoint_id_to_index_file(marker)"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_bbe969e8","line":200,"range":{"start_line":199,"start_character":0,"end_line":200,"end_character":49},"in_reply_to":"dab17558_a5eb7aaf","updated":"2016-05-17 10:53:52.000000000","message":"Now, in manger.py, the list_checkpoint is still mock, in this patch we need to fix the checkpoint here.","commit_id":"10207730741ddcdb411095b0e1676c769cb72f25"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"9b7aa089914f888addc67a16d299e9faea3582c3","unresolved":false,"context_lines":[{"line_number":213,"context_line":"                    date_list.append(str(start_date).split(\" \")[0])"},{"line_number":214,"context_line":"                    days -\u003d 1"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        if plan_id is None and len(date_list) \u003d\u003d 0:"},{"line_number":217,"context_line":"            if marker_checkpoint is not None:"},{"line_number":218,"context_line":"                timestamp \u003d marker_checkpoint[\"timestamp\"]"},{"line_number":219,"context_line":"                marker \u003d \"/by-provider/%s/%s@%s\" % (self._provider_id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_85de360f","line":216,"range":{"start_line":216,"start_character":0,"end_line":216,"end_character":51},"updated":"2016-05-09 13:51:35.000000000","message":"code duplication with the code below","commit_id":"10207730741ddcdb411095b0e1676c769cb72f25"},{"author":{"_account_id":20791,"name":"WeAreFormalGroup","email":"2546506173@qq.com","username":"hurong"},"change_message_id":"80c79687efbc078267221a428ecb6906e3996ba4","unresolved":false,"context_lines":[{"line_number":213,"context_line":"                    date_list.append(str(start_date).split(\" \")[0])"},{"line_number":214,"context_line":"                    days -\u003d 1"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        if plan_id is None and len(date_list) \u003d\u003d 0:"},{"line_number":217,"context_line":"            if marker_checkpoint is not None:"},{"line_number":218,"context_line":"                timestamp \u003d marker_checkpoint[\"timestamp\"]"},{"line_number":219,"context_line":"                marker \u003d \"/by-provider/%s/%s@%s\" % (self._provider_id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_e5e519dc","line":216,"range":{"start_line":216,"start_character":0,"end_line":216,"end_character":51},"in_reply_to":"dab17558_85de360f","updated":"2016-05-17 10:53:52.000000000","message":"Here is \"is None\",below is \"is not None\"","commit_id":"10207730741ddcdb411095b0e1676c769cb72f25"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"9b7aa089914f888addc67a16d299e9faea3582c3","unresolved":false,"context_lines":[{"line_number":243,"context_line":"                    marker\u003dmarker"},{"line_number":244,"context_line":"                    )]"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"        if plan_id is None and len(date_list) !\u003d 0:"},{"line_number":247,"context_line":"            ids \u003d []"},{"line_number":248,"context_line":"            if marker_checkpoint is not None:"},{"line_number":249,"context_line":"                date \u003d marker_checkpoint[\"created_at\"].split(\" \")[0]"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_65ba32c2","line":246,"range":{"start_line":246,"start_character":0,"end_line":246,"end_character":51},"updated":"2016-05-09 13:51:35.000000000","message":"code duplication with the code below","commit_id":"10207730741ddcdb411095b0e1676c769cb72f25"},{"author":{"_account_id":20791,"name":"WeAreFormalGroup","email":"2546506173@qq.com","username":"hurong"},"change_message_id":"80c79687efbc078267221a428ecb6906e3996ba4","unresolved":false,"context_lines":[{"line_number":243,"context_line":"                    marker\u003dmarker"},{"line_number":244,"context_line":"                    )]"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"        if plan_id is None and len(date_list) !\u003d 0:"},{"line_number":247,"context_line":"            ids \u003d []"},{"line_number":248,"context_line":"            if marker_checkpoint is not None:"},{"line_number":249,"context_line":"                date \u003d marker_checkpoint[\"created_at\"].split(\" \")[0]"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_c5ff3564","line":246,"range":{"start_line":246,"start_character":0,"end_line":246,"end_character":51},"in_reply_to":"dab17558_65ba32c2","updated":"2016-05-17 10:53:52.000000000","message":"The same, one is None, the other is not None","commit_id":"10207730741ddcdb411095b0e1676c769cb72f25"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"9b7aa089914f888addc67a16d299e9faea3582c3","unresolved":false,"context_lines":[{"line_number":251,"context_line":"                marker \u003d \"/by-date/%s/%s@%s\" % (date,"},{"line_number":252,"context_line":"                                                timestamp,"},{"line_number":253,"context_line":"                                                marker)"},{"line_number":254,"context_line":"            for date in date_list:"},{"line_number":255,"context_line":"                prefix \u003d \"/by-date/%s/\" % date"},{"line_number":256,"context_line":"                for key in self._index_section.list_objects(prefix\u003dprefix,"},{"line_number":257,"context_line":"                                                            limit\u003dlimit,"},{"line_number":258,"context_line":"                                                            marker\u003dmarker):"},{"line_number":259,"context_line":"                    ids.append(key[key.find(\"@\") + 1:])"},{"line_number":260,"context_line":"                    if len(ids) \u003d\u003d limit:"},{"line_number":261,"context_line":"                        return ids"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_259caa68","line":258,"range":{"start_line":254,"start_character":0,"end_line":258,"end_character":75},"updated":"2016-05-09 13:51:35.000000000","message":"so querying a range of 365 days will trigger 365 swift requests? for every list_checkpoints?\nwe should definitely reach O(1) queries in respect to the query range","commit_id":"10207730741ddcdb411095b0e1676c769cb72f25"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"abbb88ae4f570f921c9634080247e7c530341b4e","unresolved":false,"context_lines":[{"line_number":251,"context_line":"                marker \u003d \"/by-date/%s/%s@%s\" % (date,"},{"line_number":252,"context_line":"                                                timestamp,"},{"line_number":253,"context_line":"                                                marker)"},{"line_number":254,"context_line":"            for date in date_list:"},{"line_number":255,"context_line":"                prefix \u003d \"/by-date/%s/\" % date"},{"line_number":256,"context_line":"                for key in self._index_section.list_objects(prefix\u003dprefix,"},{"line_number":257,"context_line":"                                                            limit\u003dlimit,"},{"line_number":258,"context_line":"                                                            marker\u003dmarker):"},{"line_number":259,"context_line":"                    ids.append(key[key.find(\"@\") + 1:])"},{"line_number":260,"context_line":"                    if len(ids) \u003d\u003d limit:"},{"line_number":261,"context_line":"                        return ids"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_baacbaed","line":258,"range":{"start_line":254,"start_character":0,"end_line":258,"end_character":75},"in_reply_to":"dab17558_1b3cf591","updated":"2016-05-17 13:17:50.000000000","message":"IMO this is critical. We can\u0027t make so many requests to the bank.","commit_id":"10207730741ddcdb411095b0e1676c769cb72f25"},{"author":{"_account_id":20791,"name":"WeAreFormalGroup","email":"2546506173@qq.com","username":"hurong"},"change_message_id":"80c79687efbc078267221a428ecb6906e3996ba4","unresolved":false,"context_lines":[{"line_number":251,"context_line":"                marker \u003d \"/by-date/%s/%s@%s\" % (date,"},{"line_number":252,"context_line":"                                                timestamp,"},{"line_number":253,"context_line":"                                                marker)"},{"line_number":254,"context_line":"            for date in date_list:"},{"line_number":255,"context_line":"                prefix \u003d \"/by-date/%s/\" % date"},{"line_number":256,"context_line":"                for key in self._index_section.list_objects(prefix\u003dprefix,"},{"line_number":257,"context_line":"                                                            limit\u003dlimit,"},{"line_number":258,"context_line":"                                                            marker\u003dmarker):"},{"line_number":259,"context_line":"                    ids.append(key[key.find(\"@\") + 1:])"},{"line_number":260,"context_line":"                    if len(ids) \u003d\u003d limit:"},{"line_number":261,"context_line":"                        return ids"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_1b3cf591","line":258,"range":{"start_line":254,"start_character":0,"end_line":258,"end_character":75},"in_reply_to":"dab17558_259caa68","updated":"2016-05-17 10:53:52.000000000","message":"I can remove the outside circulation, but we can not use it to judge the date. I still consider it. If I have the better idea, I will change it.","commit_id":"10207730741ddcdb411095b0e1676c769cb72f25"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"9b7aa089914f888addc67a16d299e9faea3582c3","unresolved":false,"context_lines":[{"line_number":270,"context_line":"                                                   date,"},{"line_number":271,"context_line":"                                                   timestamp,"},{"line_number":272,"context_line":"                                                   marker)"},{"line_number":273,"context_line":"            for date in date_list:"},{"line_number":274,"context_line":"                prefix \u003d \"/by-plan/%s/%s/\" % (plan_id, date)"},{"line_number":275,"context_line":"                for key in self._index_section.list_objects(prefix\u003dprefix,"},{"line_number":276,"context_line":"                                                            limit\u003dlimit,"},{"line_number":277,"context_line":"                                                            marker\u003dmarker):"},{"line_number":278,"context_line":"                    ids.append(key[key.find(\"@\") + 1:])"},{"line_number":279,"context_line":"                    if len(ids) \u003d\u003d limit:"},{"line_number":280,"context_line":"                        return ids"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_8590f644","line":277,"range":{"start_line":273,"start_character":0,"end_line":277,"end_character":75},"updated":"2016-05-09 13:51:35.000000000","message":"ditto","commit_id":"10207730741ddcdb411095b0e1676c769cb72f25"},{"author":{"_account_id":20791,"name":"WeAreFormalGroup","email":"2546506173@qq.com","username":"hurong"},"change_message_id":"80c79687efbc078267221a428ecb6906e3996ba4","unresolved":false,"context_lines":[{"line_number":270,"context_line":"                                                   date,"},{"line_number":271,"context_line":"                                                   timestamp,"},{"line_number":272,"context_line":"                                                   marker)"},{"line_number":273,"context_line":"            for date in date_list:"},{"line_number":274,"context_line":"                prefix \u003d \"/by-plan/%s/%s/\" % (plan_id, date)"},{"line_number":275,"context_line":"                for key in self._index_section.list_objects(prefix\u003dprefix,"},{"line_number":276,"context_line":"                                                            limit\u003dlimit,"},{"line_number":277,"context_line":"                                                            marker\u003dmarker):"},{"line_number":278,"context_line":"                    ids.append(key[key.find(\"@\") + 1:])"},{"line_number":279,"context_line":"                    if len(ids) \u003d\u003d limit:"},{"line_number":280,"context_line":"                        return ids"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_9b48e52e","line":277,"range":{"start_line":273,"start_character":0,"end_line":277,"end_character":75},"in_reply_to":"dab17558_8590f644","updated":"2016-05-17 10:53:52.000000000","message":"ditto","commit_id":"10207730741ddcdb411095b0e1676c769cb72f25"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"8c6e9e6f34b4feb38714ebf2cad26df8b833883d","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    VERSION \u003d \"0.9\""},{"line_number":37,"context_line":"    SUPPORTED_VERSIONS \u003d [\"0.9\"]"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def __init__(self, provider_id, bank_section, bank_lease, checkpoint_id):"},{"line_number":40,"context_line":"        self._id \u003d checkpoint_id"},{"line_number":41,"context_line":"        self._provider_id \u003d provider_id"},{"line_number":42,"context_line":"        self._index_file_path \u003d _checkpoint_id_to_index_file(checkpoint_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_dfaf047b","line":39,"range":{"start_line":39,"start_character":23,"end_line":39,"end_character":34},"updated":"2016-05-22 11:27:17.000000000","message":"unnecessary param, see below","commit_id":"2537f9f2561b9ee4cf66c692e31c5d8ca9ead0d8"},{"author":{"_account_id":20791,"name":"WeAreFormalGroup","email":"2546506173@qq.com","username":"hurong"},"change_message_id":"06ceb977d31490297052759e25ae44a3072499fa","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    VERSION \u003d \"0.9\""},{"line_number":37,"context_line":"    SUPPORTED_VERSIONS \u003d [\"0.9\"]"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def __init__(self, provider_id, bank_section, bank_lease, checkpoint_id):"},{"line_number":40,"context_line":"        self._id \u003d checkpoint_id"},{"line_number":41,"context_line":"        self._provider_id \u003d provider_id"},{"line_number":42,"context_line":"        self._index_file_path \u003d _checkpoint_id_to_index_file(checkpoint_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_d6cd1767","line":39,"range":{"start_line":39,"start_character":23,"end_line":39,"end_character":34},"in_reply_to":"bab6814e_dfaf047b","updated":"2016-05-28 07:55:51.000000000","message":"I will remove it.","commit_id":"2537f9f2561b9ee4cf66c692e31c5d8ca9ead0d8"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"8c6e9e6f34b4feb38714ebf2cad26df8b833883d","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def __init__(self, provider_id, bank_section, bank_lease, checkpoint_id):"},{"line_number":40,"context_line":"        self._id \u003d checkpoint_id"},{"line_number":41,"context_line":"        self._provider_id \u003d provider_id"},{"line_number":42,"context_line":"        self._index_file_path \u003d _checkpoint_id_to_index_file(checkpoint_id)"},{"line_number":43,"context_line":"        self._bank_section \u003d bank_section"},{"line_number":44,"context_line":"        self._bank_lease \u003d bank_lease"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_3fa8d076","line":41,"range":{"start_line":41,"start_character":0,"end_line":41,"end_character":39},"updated":"2016-05-22 11:27:17.000000000","message":"this is already saved in the metadata ( self._md_cache[\"provider_id\"] ), no need to keep it again","commit_id":"2537f9f2561b9ee4cf66c692e31c5d8ca9ead0d8"},{"author":{"_account_id":20791,"name":"WeAreFormalGroup","email":"2546506173@qq.com","username":"hurong"},"change_message_id":"06ceb977d31490297052759e25ae44a3072499fa","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def __init__(self, provider_id, bank_section, bank_lease, checkpoint_id):"},{"line_number":40,"context_line":"        self._id \u003d checkpoint_id"},{"line_number":41,"context_line":"        self._provider_id \u003d provider_id"},{"line_number":42,"context_line":"        self._index_file_path \u003d _checkpoint_id_to_index_file(checkpoint_id)"},{"line_number":43,"context_line":"        self._bank_section \u003d bank_section"},{"line_number":44,"context_line":"        self._bank_lease \u003d bank_lease"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_b6c85356","line":41,"range":{"start_line":41,"start_character":0,"end_line":41,"end_character":39},"in_reply_to":"bab6814e_3fa8d076","updated":"2016-05-28 07:55:51.000000000","message":"I will remove it.","commit_id":"2537f9f2561b9ee4cf66c692e31c5d8ca9ead0d8"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"8c6e9e6f34b4feb38714ebf2cad26df8b833883d","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        checkpoint_id \u003d checkpoint_id or cls._generate_id()"},{"line_number":114,"context_line":"        provider_id \u003d plan.get(\"provider_id\")"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        timestamp \u003d int(time.time())"},{"line_number":117,"context_line":"        date_time \u003d str(datetime.datetime.fromtimestamp(timestamp))"},{"line_number":118,"context_line":"        date \u003d date_time.split(\" \")[0]"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        bank_section.create_object("},{"line_number":121,"context_line":"            key\u003d_checkpoint_id_to_index_file(checkpoint_id),"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_5fc4b43e","line":118,"range":{"start_line":116,"start_character":0,"end_line":118,"end_character":38},"updated":"2016-05-22 11:27:17.000000000","message":"Same comment as before. No need to use both time and datetime. Also, all times need to be in UTC.","commit_id":"2537f9f2561b9ee4cf66c692e31c5d8ca9ead0d8"},{"author":{"_account_id":20791,"name":"WeAreFormalGroup","email":"2546506173@qq.com","username":"hurong"},"change_message_id":"06ceb977d31490297052759e25ae44a3072499fa","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        checkpoint_id \u003d checkpoint_id or cls._generate_id()"},{"line_number":114,"context_line":"        provider_id \u003d plan.get(\"provider_id\")"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        timestamp \u003d int(time.time())"},{"line_number":117,"context_line":"        date_time \u003d str(datetime.datetime.fromtimestamp(timestamp))"},{"line_number":118,"context_line":"        date \u003d date_time.split(\" \")[0]"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        bank_section.create_object("},{"line_number":121,"context_line":"            key\u003d_checkpoint_id_to_index_file(checkpoint_id),"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_111014a8","line":118,"range":{"start_line":116,"start_character":0,"end_line":118,"end_character":38},"in_reply_to":"bab6814e_5fc4b43e","updated":"2016-05-28 07:55:51.000000000","message":"I will change all of them to UTC.","commit_id":"2537f9f2561b9ee4cf66c692e31c5d8ca9ead0d8"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"450233d794fcbd3f9d5f8ede038127299f4a4afb","unresolved":false,"context_lines":[{"line_number":136,"context_line":"            }"},{"line_number":137,"context_line":"        )"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        index_section.create_object("},{"line_number":140,"context_line":"            key\u003d\"/by-provider/%s/%s@%s\" % (provider_id,"},{"line_number":141,"context_line":"                                           timestamp, checkpoint_id),"},{"line_number":142,"context_line":"            value\u003dcheckpoint_id"},{"line_number":143,"context_line":"        )"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        index_section.create_object("},{"line_number":146,"context_line":"            key\u003d\"/by-date/%s/%s@%s\" % (date, timestamp, checkpoint_id),"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_e5097596","line":143,"range":{"start_line":139,"start_character":8,"end_line":143,"end_character":9},"updated":"2016-05-23 15:15:04.000000000","message":"No need for by-provider. Only a single provider should use the bank since all checkpoints should be composed from compatible plugins.","commit_id":"2537f9f2561b9ee4cf66c692e31c5d8ca9ead0d8"},{"author":{"_account_id":20791,"name":"WeAreFormalGroup","email":"2546506173@qq.com","username":"hurong"},"change_message_id":"06ceb977d31490297052759e25ae44a3072499fa","unresolved":false,"context_lines":[{"line_number":136,"context_line":"            }"},{"line_number":137,"context_line":"        )"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        index_section.create_object("},{"line_number":140,"context_line":"            key\u003d\"/by-provider/%s/%s@%s\" % (provider_id,"},{"line_number":141,"context_line":"                                           timestamp, checkpoint_id),"},{"line_number":142,"context_line":"            value\u003dcheckpoint_id"},{"line_number":143,"context_line":"        )"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        index_section.create_object("},{"line_number":146,"context_line":"            key\u003d\"/by-date/%s/%s@%s\" % (date, timestamp, checkpoint_id),"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_211fd15c","line":143,"range":{"start_line":139,"start_character":8,"end_line":143,"end_character":9},"in_reply_to":"bab6814e_e5097596","updated":"2016-05-28 07:55:51.000000000","message":"OK, I will delete it.","commit_id":"2537f9f2561b9ee4cf66c692e31c5d8ca9ead0d8"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"8c6e9e6f34b4feb38714ebf2cad26df8b833883d","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"class CheckpointCollection(object):"},{"line_number":199,"context_line":"    def __init__(self, provider_id, bank, bank_lease\u003dNone):"},{"line_number":200,"context_line":"        super(CheckpointCollection, self).__init__()"},{"line_number":201,"context_line":"        self._provider_id \u003d provider_id"},{"line_number":202,"context_line":"        self._bank \u003d bank"},{"line_number":203,"context_line":"        self._bank_lease \u003d bank_lease"},{"line_number":204,"context_line":"        self._checkpoints_section \u003d BankSection("},{"line_number":205,"context_line":"            bank, \"/checkpoints/%s\" % provider_id)"},{"line_number":206,"context_line":"        self._index_section \u003d BankSection("},{"line_number":207,"context_line":"            bank, \"/indices/%s\" % provider_id)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def list_ids(self, limit\u003dNone, marker\u003dNone, end_marker\u003dNone, plan_id\u003dNone,"},{"line_number":210,"context_line":"                 start_date\u003dNone, end_date\u003dNone):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_5f779401","line":207,"range":{"start_line":199,"start_character":0,"end_line":207,"end_character":46},"updated":"2016-05-22 11:27:17.000000000","message":"1. Why do we need provider_id to be encoded into the sections?\n2. Instead of `BankSection(...)` use `self._bank.get_sub_section()`","commit_id":"2537f9f2561b9ee4cf66c692e31c5d8ca9ead0d8"},{"author":{"_account_id":20791,"name":"WeAreFormalGroup","email":"2546506173@qq.com","username":"hurong"},"change_message_id":"06ceb977d31490297052759e25ae44a3072499fa","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"class CheckpointCollection(object):"},{"line_number":199,"context_line":"    def __init__(self, provider_id, bank, bank_lease\u003dNone):"},{"line_number":200,"context_line":"        super(CheckpointCollection, self).__init__()"},{"line_number":201,"context_line":"        self._provider_id \u003d provider_id"},{"line_number":202,"context_line":"        self._bank \u003d bank"},{"line_number":203,"context_line":"        self._bank_lease \u003d bank_lease"},{"line_number":204,"context_line":"        self._checkpoints_section \u003d BankSection("},{"line_number":205,"context_line":"            bank, \"/checkpoints/%s\" % provider_id)"},{"line_number":206,"context_line":"        self._index_section \u003d BankSection("},{"line_number":207,"context_line":"            bank, \"/indices/%s\" % provider_id)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def list_ids(self, limit\u003dNone, marker\u003dNone, end_marker\u003dNone, plan_id\u003dNone,"},{"line_number":210,"context_line":"                 start_date\u003dNone, end_date\u003dNone):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_115c94ec","line":207,"range":{"start_line":199,"start_character":0,"end_line":207,"end_character":46},"in_reply_to":"bab6814e_5f779401","updated":"2016-05-28 07:55:51.000000000","message":"1. I will remove the provider_id in this part.\n\n2. I will use the self._bank.get_sub_section().","commit_id":"2537f9f2561b9ee4cf66c692e31c5d8ca9ead0d8"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"8c6e9e6f34b4feb38714ebf2cad26df8b833883d","unresolved":false,"context_lines":[{"line_number":220,"context_line":"            end_marker_checkpoint \u003d self._checkpoints_section.get_object("},{"line_number":221,"context_line":"                end_marker_key)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        date_list \u003d []"},{"line_number":224,"context_line":"        if start_date is not None:"},{"line_number":225,"context_line":"            date_list \u003d [str(start_date).split(\" \")[0]]"},{"line_number":226,"context_line":"            if end_date is not None:"},{"line_number":227,"context_line":"                days \u003d (end_date - start_date).days"},{"line_number":228,"context_line":"                while days \u003e 0:"},{"line_number":229,"context_line":"                    start_date \u003d start_date + datetime.timedelta(days\u003d1)"},{"line_number":230,"context_line":"                    date_list.append(str(start_date).split(\" \")[0])"},{"line_number":231,"context_line":"                    days -\u003d 1"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        if plan_id is None and len(date_list) \u003d\u003d 0:"},{"line_number":234,"context_line":"            prefix \u003d \"/by-provider/%s/\" % self._provider_id"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_62f2bf9b","line":231,"range":{"start_line":223,"start_character":0,"end_line":231,"end_character":29},"updated":"2016-05-22 11:27:17.000000000","message":"`date_list` is unnecessary. It is used only for two things:\n1. Check what is the length of date_list (which we already know - days)\n2. Check whether a date is in the date_list (which we know, it is in the range if it is between end_date and start_date)\n\nthese can be achieved with the existing end_date and start_date.","commit_id":"2537f9f2561b9ee4cf66c692e31c5d8ca9ead0d8"},{"author":{"_account_id":20791,"name":"WeAreFormalGroup","email":"2546506173@qq.com","username":"hurong"},"change_message_id":"06ceb977d31490297052759e25ae44a3072499fa","unresolved":false,"context_lines":[{"line_number":220,"context_line":"            end_marker_checkpoint \u003d self._checkpoints_section.get_object("},{"line_number":221,"context_line":"                end_marker_key)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        date_list \u003d []"},{"line_number":224,"context_line":"        if start_date is not None:"},{"line_number":225,"context_line":"            date_list \u003d [str(start_date).split(\" \")[0]]"},{"line_number":226,"context_line":"            if end_date is not None:"},{"line_number":227,"context_line":"                days \u003d (end_date - start_date).days"},{"line_number":228,"context_line":"                while days \u003e 0:"},{"line_number":229,"context_line":"                    start_date \u003d start_date + datetime.timedelta(days\u003d1)"},{"line_number":230,"context_line":"                    date_list.append(str(start_date).split(\" \")[0])"},{"line_number":231,"context_line":"                    days -\u003d 1"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        if plan_id is None and len(date_list) \u003d\u003d 0:"},{"line_number":234,"context_line":"            prefix \u003d \"/by-provider/%s/\" % self._provider_id"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_03ad50e9","line":231,"range":{"start_line":223,"start_character":0,"end_line":231,"end_character":29},"in_reply_to":"bab6814e_62f2bf9b","updated":"2016-05-28 07:55:51.000000000","message":"I thought this question is connected to the following question. Since we need to make our programming to been indpendent, we used date_list here. \n\nIf we do not have this date_list, the following codes will be more complex.","commit_id":"2537f9f2561b9ee4cf66c692e31c5d8ca9ead0d8"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"8c6e9e6f34b4feb38714ebf2cad26df8b833883d","unresolved":false,"context_lines":[{"line_number":230,"context_line":"                    date_list.append(str(start_date).split(\" \")[0])"},{"line_number":231,"context_line":"                    days -\u003d 1"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        if plan_id is None and len(date_list) \u003d\u003d 0:"},{"line_number":234,"context_line":"            prefix \u003d \"/by-provider/%s/\" % self._provider_id"},{"line_number":235,"context_line":"            if marker_checkpoint is not None:"},{"line_number":236,"context_line":"                timestamp \u003d marker_checkpoint[\"timestamp\"]"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_8269a3fb","line":233,"range":{"start_line":233,"start_character":0,"end_line":233,"end_character":51},"updated":"2016-05-22 11:27:17.000000000","message":"the rest of the method below is huge, with code duplication.\nconsider splitting into smaller methods and utility functions to avoid code duplication.","commit_id":"2537f9f2561b9ee4cf66c692e31c5d8ca9ead0d8"},{"author":{"_account_id":20791,"name":"WeAreFormalGroup","email":"2546506173@qq.com","username":"hurong"},"change_message_id":"06ceb977d31490297052759e25ae44a3072499fa","unresolved":false,"context_lines":[{"line_number":230,"context_line":"                    date_list.append(str(start_date).split(\" \")[0])"},{"line_number":231,"context_line":"                    days -\u003d 1"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        if plan_id is None and len(date_list) \u003d\u003d 0:"},{"line_number":234,"context_line":"            prefix \u003d \"/by-provider/%s/\" % self._provider_id"},{"line_number":235,"context_line":"            if marker_checkpoint is not None:"},{"line_number":236,"context_line":"                timestamp \u003d marker_checkpoint[\"timestamp\"]"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_236974bf","line":233,"range":{"start_line":233,"start_character":0,"end_line":233,"end_character":51},"in_reply_to":"bab6814e_8269a3fb","updated":"2016-05-28 07:55:51.000000000","message":"I will improve it.","commit_id":"2537f9f2561b9ee4cf66c692e31c5d8ca9ead0d8"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"dda0120c9f286175b83d4760d5099eefc286b897","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        super(CheckpointCollection, self).__init__()"},{"line_number":203,"context_line":"        self._bank \u003d bank"},{"line_number":204,"context_line":"        self._bank_lease \u003d bank_lease"},{"line_number":205,"context_line":"        self._checkpoints_section \u003d BankSection(bank, \"/checkpoints\")"},{"line_number":206,"context_line":"        self._indices_section \u003d BankSection(bank, \"/indices\")"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def list_ids(self, limit\u003dNone, marker\u003dNone, plan_id\u003dNone, start_date\u003dNone,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9abb7d3a_e9e3c603","line":205,"updated":"2016-06-03 01:25:51.000000000","message":"what Yuval suggested is to use self._bank.get_sub_section instead of create a new BankSection directly.","commit_id":"30fc1d0ddb721b3164c56f66afd1b55af6dc8a4b"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"dda0120c9f286175b83d4760d5099eefc286b897","unresolved":false,"context_lines":[{"line_number":215,"context_line":"            timestamp \u003d marker_checkpoint[\"timestamp\"]"},{"line_number":216,"context_line":"            marker \u003d \"%s@%s\" % (timestamp, marker)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        days \u003d 0"},{"line_number":219,"context_line":"        if start_date is not None:"},{"line_number":220,"context_line":"            if end_date is None:"},{"line_number":221,"context_line":"                end_date \u003d start_date"}],"source_content_type":"text/x-python","patch_set":7,"id":"9abb7d3a_892b1a33","line":218,"updated":"2016-06-03 01:25:51.000000000","message":"days is always 0?","commit_id":"30fc1d0ddb721b3164c56f66afd1b55af6dc8a4b"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"68778f2e1ccb3b0d51d359ecde6ae1eacab07766","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        checkpoint_section \u003d checkpoints_section.get_sub_section(checkpoint_id)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        timestamp \u003d timeutils.utcnow_ts()"},{"line_number":122,"context_line":"        created_at \u003d str(timeutils.utcnow())"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        checkpoint_section.create_object("},{"line_number":125,"context_line":"            key\u003d_INDEX_FILE_NAME,"}],"source_content_type":"text/x-python","patch_set":8,"id":"7aa08908_980df392","line":122,"range":{"start_line":122,"start_character":0,"end_line":122,"end_character":44},"updated":"2016-06-07 11:43:13.000000000","message":"How about:\ntimeutils.utcnow().strftime(\u0027%Y-%m-%d\u0027)\n?\nAlso, no need both `created_at` and `date` variables.","commit_id":"5265085f5adfceb7cc0b51003e7d0070f35f1cf3"},{"author":{"_account_id":20791,"name":"WeAreFormalGroup","email":"2546506173@qq.com","username":"hurong"},"change_message_id":"cd3a44dcdb659dbbaa946e97d322639fd20aae22","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        checkpoint_section \u003d checkpoints_section.get_sub_section(checkpoint_id)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        timestamp \u003d timeutils.utcnow_ts()"},{"line_number":122,"context_line":"        created_at \u003d str(timeutils.utcnow())"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        checkpoint_section.create_object("},{"line_number":125,"context_line":"            key\u003d_INDEX_FILE_NAME,"}],"source_content_type":"text/x-python","patch_set":8,"id":"7aa08908_023e7ed9","line":122,"range":{"start_line":122,"start_character":0,"end_line":122,"end_character":44},"in_reply_to":"7aa08908_980df392","updated":"2016-06-08 02:36:20.000000000","message":"I only keep the \u0027created_at\u0027 now.","commit_id":"5265085f5adfceb7cc0b51003e7d0070f35f1cf3"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"68778f2e1ccb3b0d51d359ecde6ae1eacab07766","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            }"},{"line_number":140,"context_line":"        )"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        date \u003d created_at.split(\" \")[0]"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        indices_section.create_object("},{"line_number":145,"context_line":"            key\u003d\"/by-provider/%s@%s\" % (timestamp, checkpoint_id),"}],"source_content_type":"text/x-python","patch_set":8,"id":"7aa08908_781007a9","line":142,"range":{"start_line":142,"start_character":0,"end_line":142,"end_character":39},"updated":"2016-06-07 11:43:13.000000000","message":"See above","commit_id":"5265085f5adfceb7cc0b51003e7d0070f35f1cf3"},{"author":{"_account_id":20791,"name":"WeAreFormalGroup","email":"2546506173@qq.com","username":"hurong"},"change_message_id":"cd3a44dcdb659dbbaa946e97d322639fd20aae22","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            }"},{"line_number":140,"context_line":"        )"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        date \u003d created_at.split(\" \")[0]"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        indices_section.create_object("},{"line_number":145,"context_line":"            key\u003d\"/by-provider/%s@%s\" % (timestamp, checkpoint_id),"}],"source_content_type":"text/x-python","patch_set":8,"id":"7aa08908_62602202","line":142,"range":{"start_line":142,"start_character":0,"end_line":142,"end_character":39},"in_reply_to":"7aa08908_781007a9","updated":"2016-06-08 02:36:20.000000000","message":"OK.","commit_id":"5265085f5adfceb7cc0b51003e7d0070f35f1cf3"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"68778f2e1ccb3b0d51d359ecde6ae1eacab07766","unresolved":false,"context_lines":[{"line_number":205,"context_line":"            timestamp \u003d marker_checkpoint[\"timestamp\"]"},{"line_number":206,"context_line":"            marker \u003d \"%s@%s\" % (timestamp, marker)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        if start_date is not None:"},{"line_number":209,"context_line":"            if end_date is None:"},{"line_number":210,"context_line":"                end_date \u003d start_date"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        if plan_id is None and start_date is None:"},{"line_number":213,"context_line":"            prefix \u003d \"/by-provider/\""}],"source_content_type":"text/x-python","patch_set":8,"id":"7aa08908_3864bf47","line":210,"range":{"start_line":208,"start_character":0,"end_line":210,"end_character":37},"updated":"2016-06-07 11:43:13.000000000","message":"If start_date is specified and end_date is not, we should list all checkpoints from start_date on.\nIn the current code, it seems like we will only list checkpoints from start_date itself.","commit_id":"5265085f5adfceb7cc0b51003e7d0070f35f1cf3"},{"author":{"_account_id":20791,"name":"WeAreFormalGroup","email":"2546506173@qq.com","username":"hurong"},"change_message_id":"cd3a44dcdb659dbbaa946e97d322639fd20aae22","unresolved":false,"context_lines":[{"line_number":205,"context_line":"            timestamp \u003d marker_checkpoint[\"timestamp\"]"},{"line_number":206,"context_line":"            marker \u003d \"%s@%s\" % (timestamp, marker)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        if start_date is not None:"},{"line_number":209,"context_line":"            if end_date is None:"},{"line_number":210,"context_line":"                end_date \u003d start_date"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        if plan_id is None and start_date is None:"},{"line_number":213,"context_line":"            prefix \u003d \"/by-provider/\""}],"source_content_type":"text/x-python","patch_set":8,"id":"7aa08908_e24b7285","line":210,"range":{"start_line":208,"start_character":0,"end_line":210,"end_character":37},"in_reply_to":"7aa08908_3864bf47","updated":"2016-06-08 02:36:20.000000000","message":"Now I change this situation.","commit_id":"5265085f5adfceb7cc0b51003e7d0070f35f1cf3"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"68778f2e1ccb3b0d51d359ecde6ae1eacab07766","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        elif plan_id is not None:"},{"line_number":217,"context_line":"            prefix \u003d \"/by-plan/%s/\" % plan_id"},{"line_number":218,"context_line":"            if marker is not None:"},{"line_number":219,"context_line":"                date \u003d marker_checkpoint[\"created_at\"].split(\" \")[0]"},{"line_number":220,"context_line":"                marker \u003d \"/by-plan/%s/%s/%s\" % (plan_id, date, marker)"},{"line_number":221,"context_line":"        else:"},{"line_number":222,"context_line":"            prefix \u003d \"/by-date/\""}],"source_content_type":"text/x-python","patch_set":8,"id":"7aa08908_1850e35c","line":219,"range":{"start_line":219,"start_character":0,"end_line":219,"end_character":68},"updated":"2016-06-07 11:43:13.000000000","message":"if we the `created_at` field will already by in the YYYY-MM-DD format, there will be no need to split here.","commit_id":"5265085f5adfceb7cc0b51003e7d0070f35f1cf3"},{"author":{"_account_id":20791,"name":"WeAreFormalGroup","email":"2546506173@qq.com","username":"hurong"},"change_message_id":"cd3a44dcdb659dbbaa946e97d322639fd20aae22","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        elif plan_id is not None:"},{"line_number":217,"context_line":"            prefix \u003d \"/by-plan/%s/\" % plan_id"},{"line_number":218,"context_line":"            if marker is not None:"},{"line_number":219,"context_line":"                date \u003d marker_checkpoint[\"created_at\"].split(\" \")[0]"},{"line_number":220,"context_line":"                marker \u003d \"/by-plan/%s/%s/%s\" % (plan_id, date, marker)"},{"line_number":221,"context_line":"        else:"},{"line_number":222,"context_line":"            prefix \u003d \"/by-date/\""}],"source_content_type":"text/x-python","patch_set":8,"id":"7aa08908_a204ca17","line":219,"range":{"start_line":219,"start_character":0,"end_line":219,"end_character":68},"in_reply_to":"7aa08908_1850e35c","updated":"2016-06-08 02:36:20.000000000","message":"I follow your recommendation.","commit_id":"5265085f5adfceb7cc0b51003e7d0070f35f1cf3"}],"smaug/services/protection/flows/delete_checkpoint.py":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"bf42544f3b778ebbdb8ff7a9b37584e15e14bbde","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            checkpoint.status \u003d constants.CHECKPOINT_STATUS_ERROR_DELETING"},{"line_number":60,"context_line":"            checkpoint.commit()"},{"line_number":61,"context_line":"            raise loopingcall.LoopingCallDone()"},{"line_number":62,"context_line":"        elif [constants.RESOURCE_STATUS_DELETED] \u003d\u003d list_status:"},{"line_number":63,"context_line":"            checkpoint.delete()"},{"line_number":64,"context_line":"            LOG.info(_(\"Stop sync checkpoint status,checkpoint_id:\""},{"line_number":65,"context_line":"                       \"%(checkpoint_id)s,checkpoint status:\""},{"line_number":66,"context_line":"                       \"%(checkpoint_status)s\") %"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a9d85d2_c6632d19","line":63,"range":{"start_line":62,"start_character":7,"end_line":63,"end_character":31},"updated":"2016-06-21 13:39:03.000000000","message":"I do not think this is related.\nAnd I am not sure it is correct, Do we have a delete method in Checkpoint ? I think  we want to have a garage collection on the checkpoints.","commit_id":"ed90462595b912cb586aa7b133164076bc48b3e0"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"0ffe7fbf583de54a6b86ce4695bf4761efd9c5fe","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            checkpoint.status \u003d constants.CHECKPOINT_STATUS_ERROR_DELETING"},{"line_number":60,"context_line":"            checkpoint.commit()"},{"line_number":61,"context_line":"            raise loopingcall.LoopingCallDone()"},{"line_number":62,"context_line":"        elif [constants.RESOURCE_STATUS_DELETED] \u003d\u003d list_status:"},{"line_number":63,"context_line":"            checkpoint.delete()"},{"line_number":64,"context_line":"            LOG.info(_(\"Stop sync checkpoint status,checkpoint_id:\""},{"line_number":65,"context_line":"                       \"%(checkpoint_id)s,checkpoint status:\""},{"line_number":66,"context_line":"                       \"%(checkpoint_status)s\") %"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_4f41540b","line":63,"range":{"start_line":62,"start_character":7,"end_line":63,"end_character":31},"in_reply_to":"5a9d85d2_c6632d19","updated":"2016-06-22 02:44:22.000000000","message":"Hi, Eran. As we discuss it last time in smaug irc, Now delete checkpoint action firstly mark the status of checkpoints as CHECKPOINT_STATUS_DELETED.  And we will submit a new patch to implement garage collection on the checkpoints, to actually delete the checkpoint. So here delete method only change the status of checkpoint to \u0027CHECKPOINT_STATUS_DELETED\u0027. This modification fix the fullstack error of this patch.","commit_id":"ed90462595b912cb586aa7b133164076bc48b3e0"}],"smaug/tests/unit/protection/test_checkpoint.py":[{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"8c6e9e6f34b4feb38714ebf2cad26df8b833883d","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                                                  bank_section\u003dbank_section,"},{"line_number":51,"context_line":"                                                  bank_lease\u003dbank_lease,"},{"line_number":52,"context_line":"                                                  owner_id\u003downer_id,"},{"line_number":53,"context_line":"                                                  plan\u003dplan)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        self.assertEqual(owner_id, checkpoint.owner_id)"},{"line_number":56,"context_line":"        self.assertEqual(\"protecting\", checkpoint.status)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def test_resource_graph(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_62811f8f","line":55,"range":{"start_line":53,"start_character":0,"end_line":55,"end_character":55},"updated":"2016-05-22 11:27:17.000000000","message":"why is this section removed?","commit_id":"2537f9f2561b9ee4cf66c692e31c5d8ca9ead0d8"},{"author":{"_account_id":20791,"name":"WeAreFormalGroup","email":"2546506173@qq.com","username":"hurong"},"change_message_id":"06ceb977d31490297052759e25ae44a3072499fa","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                                                  bank_section\u003dbank_section,"},{"line_number":51,"context_line":"                                                  bank_lease\u003dbank_lease,"},{"line_number":52,"context_line":"                                                  owner_id\u003downer_id,"},{"line_number":53,"context_line":"                                                  plan\u003dplan)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        self.assertEqual(owner_id, checkpoint.owner_id)"},{"line_number":56,"context_line":"        self.assertEqual(\"protecting\", checkpoint.status)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def test_resource_graph(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_63ba5c25","line":55,"range":{"start_line":53,"start_character":0,"end_line":55,"end_character":55},"in_reply_to":"bab6814e_62811f8f","updated":"2016-05-28 07:55:51.000000000","message":"Please wait. I need to change.","commit_id":"2537f9f2561b9ee4cf66c692e31c5d8ca9ead0d8"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"8c6e9e6f34b4feb38714ebf2cad26df8b833883d","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        resource_graph \u003d graph.build_graph([A, B, C, D],"},{"line_number":72,"context_line":"                                           resource_map.__getitem__)"},{"line_number":73,"context_line":"        checkpoint.resource_graph \u003d resource_graph"},{"line_number":74,"context_line":"        checkpoint.commit()"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        self.assertEqual("},{"line_number":77,"context_line":"            graph.unpack_graph(graph.pack_graph(resource_graph)),"},{"line_number":78,"context_line":"            checkpoint.resource_graph)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_427cdbb4","line":76,"range":{"start_line":74,"start_character":0,"end_line":76,"end_character":25},"updated":"2016-05-22 11:27:17.000000000","message":"ditto","commit_id":"2537f9f2561b9ee4cf66c692e31c5d8ca9ead0d8"},{"author":{"_account_id":20791,"name":"WeAreFormalGroup","email":"2546506173@qq.com","username":"hurong"},"change_message_id":"06ceb977d31490297052759e25ae44a3072499fa","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        resource_graph \u003d graph.build_graph([A, B, C, D],"},{"line_number":72,"context_line":"                                           resource_map.__getitem__)"},{"line_number":73,"context_line":"        checkpoint.resource_graph \u003d resource_graph"},{"line_number":74,"context_line":"        checkpoint.commit()"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        self.assertEqual("},{"line_number":77,"context_line":"            graph.unpack_graph(graph.pack_graph(resource_graph)),"},{"line_number":78,"context_line":"            checkpoint.resource_graph)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_43b75839","line":76,"range":{"start_line":74,"start_character":0,"end_line":76,"end_character":25},"in_reply_to":"bab6814e_427cdbb4","updated":"2016-05-28 07:55:51.000000000","message":"Please wait.","commit_id":"2537f9f2561b9ee4cf66c692e31c5d8ca9ead0d8"}],"smaug/tests/unit/protection/test_checkpoint_collection.py":[{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"8c6e9e6f34b4feb38714ebf2cad26df8b833883d","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        self.assertEqual("},{"line_number":35,"context_line":"            checkpoint.status,"},{"line_number":36,"context_line":"            collection.get(checkpoint_id\u003dcheckpoint.id).status,"},{"line_number":37,"context_line":"        )"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def test_write_checkpoint_with_invalid_lease(self):"},{"line_number":40,"context_line":"        collection \u003d self._create_test_collection()"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_a24dc79b","line":37,"range":{"start_line":37,"start_character":0,"end_line":37,"end_character":9},"updated":"2016-05-22 11:27:17.000000000","message":"why is this section removed?","commit_id":"2537f9f2561b9ee4cf66c692e31c5d8ca9ead0d8"}]}
