)]}'
{"neutron/services/metering/drivers/iptables/iptables_driver.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"6cde1e02d506b37137d4a671ad31a50db853c2e5","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    def update_routers(self, context, routers):"},{"line_number":106,"context_line":"        # disassociate removed routers"},{"line_number":107,"context_line":"        router_ids \u003d set(router[\u0027id\u0027] for router in routers)"},{"line_number":108,"context_line":"        for router_id, rm in self.routers.iteritems():"},{"line_number":109,"context_line":"            if router_id not in router_ids:"},{"line_number":110,"context_line":"                self._process_disassociate_metering_label(rm.router)"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_0a339962","line":108,"updated":"2014-08-28 08:05:35.000000000","message":"please use items() for py3 compatibility","commit_id":"b76e29dc23bec061e9b494b867420332413e0201"},{"author":{"_account_id":11279,"name":"Angus Lees","email":"gus@inodes.org","username":"gus"},"change_message_id":"f0c6bcd589ae4d10d01e17464bfbb8d4471bf6fe","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    def update_routers(self, context, routers):"},{"line_number":106,"context_line":"        # disassociate removed routers"},{"line_number":107,"context_line":"        router_ids \u003d set(router[\u0027id\u0027] for router in routers)"},{"line_number":108,"context_line":"        for router_id, rm in self.routers.iteritems():"},{"line_number":109,"context_line":"            if router_id not in router_ids:"},{"line_number":110,"context_line":"                self._process_disassociate_metering_label(rm.router)"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_cc41983a","line":108,"in_reply_to":"1abeadc6_0a339962","updated":"2014-08-29 01:59:36.000000000","message":"Done.  I\u0027ll leave the other 160 cases of iteritems() in neutron to a future change however ;)","commit_id":"b76e29dc23bec061e9b494b867420332413e0201"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"62d5fc0d39394740797e841f85d5bce12b6fd1c5","unresolved":false,"context_lines":[{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import six"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo.config import cfg"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from neutron.agent.common import config"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_9eda5476","line":18,"updated":"2014-08-29 07:51:42.000000000","message":"no need for newline, both are third party","commit_id":"f7d905a0d4683f09e6fb0735527a5c254efdb622"},{"author":{"_account_id":11279,"name":"Angus Lees","email":"gus@inodes.org","username":"gus"},"change_message_id":"22ef5d2f62167e4bb912ca22d95353c5c10cd44d","unresolved":false,"context_lines":[{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import six"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo.config import cfg"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from neutron.agent.common import config"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_775bd621","line":18,"in_reply_to":"1abeadc6_9eda5476","updated":"2014-08-29 10:39:49.000000000","message":"Oh right, oslo counts as 3rd party.  Fixed.","commit_id":"f7d905a0d4683f09e6fb0735527a5c254efdb622"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"62d5fc0d39394740797e841f85d5bce12b6fd1c5","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    def update_routers(self, context, routers):"},{"line_number":108,"context_line":"        # disassociate removed routers"},{"line_number":109,"context_line":"        router_ids \u003d set(router[\u0027id\u0027] for router in routers)"},{"line_number":110,"context_line":"        for router_id, rm in six.iteritems(self.routers):"},{"line_number":111,"context_line":"            if router_id not in router_ids:"},{"line_number":112,"context_line":"                self._process_disassociate_metering_label(rm.router)"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_1ed6444f","line":110,"updated":"2014-08-29 07:51:42.000000000","message":"why not just using items()?","commit_id":"f7d905a0d4683f09e6fb0735527a5c254efdb622"},{"author":{"_account_id":11279,"name":"Angus Lees","email":"gus@inodes.org","username":"gus"},"change_message_id":"22ef5d2f62167e4bb912ca22d95353c5c10cd44d","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    def update_routers(self, context, routers):"},{"line_number":108,"context_line":"        # disassociate removed routers"},{"line_number":109,"context_line":"        router_ids \u003d set(router[\u0027id\u0027] for router in routers)"},{"line_number":110,"context_line":"        for router_id, rm in six.iteritems(self.routers):"},{"line_number":111,"context_line":"            if router_id not in router_ids:"},{"line_number":112,"context_line":"                self._process_disassociate_metering_label(rm.router)"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_77b2f649","line":110,"in_reply_to":"1abeadc6_1ed6444f","updated":"2014-08-29 10:39:49.000000000","message":"Because I didn\u0027t want to make an intermediate copy of all the routers.\n\n(Is there something I\u0027m missing?  Why would I use items() here?)","commit_id":"f7d905a0d4683f09e6fb0735527a5c254efdb622"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"080f3037f6e12cecd259998f72e612f063bafe5d","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    def update_routers(self, context, routers):"},{"line_number":108,"context_line":"        # disassociate removed routers"},{"line_number":109,"context_line":"        router_ids \u003d set(router[\u0027id\u0027] for router in routers)"},{"line_number":110,"context_line":"        for router_id, rm in six.iteritems(self.routers):"},{"line_number":111,"context_line":"            if router_id not in router_ids:"},{"line_number":112,"context_line":"                self._process_disassociate_metering_label(rm.router)"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_a9bd12b3","line":110,"in_reply_to":"1abeadc6_77b2f649","updated":"2014-08-29 12:17:10.000000000","message":"Makes sense to me, thanks","commit_id":"f7d905a0d4683f09e6fb0735527a5c254efdb622"}],"neutron/tests/unit/services/metering/drivers/test_iptables_driver.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"6cde1e02d506b37137d4a671ad31a50db853c2e5","unresolved":false,"context_lines":[{"line_number":469,"context_line":"                                    wrap\u003dFalse, top\u003dFalse)]"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":"        self.v4filter_inst.assert_has_calls(calls)"},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"        # Remove router id \u0027373ec392-1711-44e3-b008-3251ccfc5099\u0027"},{"line_number":474,"context_line":"        del updates[1]"},{"line_number":475,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_6a6b2d1e","line":472,"updated":"2014-08-28 08:05:35.000000000","message":"Consider a separate test case instead of one test case that aims to test everything","commit_id":"b76e29dc23bec061e9b494b867420332413e0201"},{"author":{"_account_id":11279,"name":"Angus Lees","email":"gus@inodes.org","username":"gus"},"change_message_id":"f0c6bcd589ae4d10d01e17464bfbb8d4471bf6fe","unresolved":false,"context_lines":[{"line_number":469,"context_line":"                                    wrap\u003dFalse, top\u003dFalse)]"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":"        self.v4filter_inst.assert_has_calls(calls)"},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"        # Remove router id \u0027373ec392-1711-44e3-b008-3251ccfc5099\u0027"},{"line_number":474,"context_line":"        del updates[1]"},{"line_number":475,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_ac0b7c22","line":472,"in_reply_to":"1abeadc6_6a6b2d1e","updated":"2014-08-29 01:59:36.000000000","message":"Done.","commit_id":"b76e29dc23bec061e9b494b867420332413e0201"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"322a38c9b12a543aaf2c42deab1b39ac9654e5cd","unresolved":false,"context_lines":[{"line_number":472,"context_line":""},{"line_number":473,"context_line":"    def test_update_routers_removal(self):"},{"line_number":474,"context_line":"        routers \u003d [{\u0027_metering_labels\u0027: ["},{"line_number":475,"context_line":"            {\u0027id\u0027: \u0027c5df2fe5-c600-4a2a-b2f4-c0fb6df73c83\u0027,"},{"line_number":476,"context_line":"             \u0027rules\u0027: [{"},{"line_number":477,"context_line":"                 \u0027direction\u0027: \u0027ingress\u0027,"},{"line_number":478,"context_line":"                 \u0027excluded\u0027: False,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa98f980_41f35c73","line":475,"updated":"2014-08-31 06:29:35.000000000","message":"Instead of repeating this entire blob of data for each test, can you move it into some common var that all tests can reference?","commit_id":"49046bd2c91f6beb8fcc8bc4ba8ed588adceab90"}]}
