)]}'
{"neutron/db/metering/metering_db.py":[{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"dfe2bdadeed858d04fbd971909c760489aba0f60","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        return self._make_metering_label_dict(metering_obj)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def delete_metering_label(self, context, label_id):"},{"line_number":60,"context_line":"        with db_api.context_manager.writer.using(context):"},{"line_number":61,"context_line":"            label \u003d metering_objs.MeteringLabel.get_object("},{"line_number":62,"context_line":"                context, id\u003dlabel_id)"},{"line_number":63,"context_line":"            if not label:"},{"line_number":64,"context_line":"                raise metering.MeteringLabelNotFound(label_id\u003dlabel_id)"},{"line_number":65,"context_line":"            label.delete()"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def get_metering_label(self, context, label_id, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_d5348dfc","line":64,"range":{"start_line":60,"start_character":0,"end_line":64,"end_character":71},"updated":"2017-03-20 13:53:33.000000000","message":"Can we consume our own method?: get_metering_label","commit_id":"970a96619efea9400284aa8a0113da761750226b"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"010d1f882dadcd4e89d44dbc0677bb39da1abc46","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        return self._make_metering_label_dict(metering_obj)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def delete_metering_label(self, context, label_id):"},{"line_number":60,"context_line":"        with db_api.context_manager.writer.using(context):"},{"line_number":61,"context_line":"            label \u003d metering_objs.MeteringLabel.get_object("},{"line_number":62,"context_line":"                context, id\u003dlabel_id)"},{"line_number":63,"context_line":"            if not label:"},{"line_number":64,"context_line":"                raise metering.MeteringLabelNotFound(label_id\u003dlabel_id)"},{"line_number":65,"context_line":"            label.delete()"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def get_metering_label(self, context, label_id, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_d300446a","line":64,"range":{"start_line":60,"start_character":0,"end_line":64,"end_character":71},"in_reply_to":"1a1ced50_d5348dfc","updated":"2017-03-27 18:52:56.000000000","message":"Not really, because that method returns a dictionary, but I can modify it in order to reuse something.","commit_id":"970a96619efea9400284aa8a0113da761750226b"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"dfe2bdadeed858d04fbd971909c760489aba0f60","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def delete_metering_label_rule(self, context, rule_id):"},{"line_number":149,"context_line":"        with db_api.context_manager.writer.using(context):"},{"line_number":150,"context_line":"            rule \u003d metering_objs.MeteringLabelRule.get_object("},{"line_number":151,"context_line":"                context, id\u003drule_id)"},{"line_number":152,"context_line":"            if not rule:"},{"line_number":153,"context_line":"                raise metering.MeteringLabelRuleNotFound(rule_id\u003drule_id)"},{"line_number":154,"context_line":"            rule.delete()"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        return self._make_metering_label_rule_dict(rule)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_70ba0725","line":153,"range":{"start_line":150,"start_character":0,"end_line":153,"end_character":73},"updated":"2017-03-20 13:53:33.000000000","message":"Ditto: can we consume get_metering_label_rule?","commit_id":"970a96619efea9400284aa8a0113da761750226b"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"dfe2bdadeed858d04fbd971909c760489aba0f60","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                raise metering.MeteringLabelRuleNotFound(rule_id\u003drule_id)"},{"line_number":154,"context_line":"            rule.delete()"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        return self._make_metering_label_rule_dict(rule)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def _get_metering_rules_dict(self, metering_label):"},{"line_number":159,"context_line":"        rules \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_b0e9df1c","line":156,"updated":"2017-03-20 13:53:33.000000000","message":"You\u0027re not touching this part of the code, although I don\u0027t understand why this is returned over here.\nWe don\u0027t have anymore rule, which got deleted. So I\u0027m wondering, why it\u0027s done like that.\nCould you add TODO and check, why it\u0027s done like that?\nThis seems to be added by bugfix for Bug #1400280\n\nhttps://review.openstack.org/#/c/143672/9/neutron/db/metering/metering_db.py@191","commit_id":"970a96619efea9400284aa8a0113da761750226b"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"010d1f882dadcd4e89d44dbc0677bb39da1abc46","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                raise metering.MeteringLabelRuleNotFound(rule_id\u003drule_id)"},{"line_number":154,"context_line":"            rule.delete()"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        return self._make_metering_label_rule_dict(rule)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def _get_metering_rules_dict(self, metering_label):"},{"line_number":159,"context_line":"        rules \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_b5b23de5","line":156,"in_reply_to":"1a1ced50_b0e9df1c","updated":"2017-03-27 18:52:56.000000000","message":"This method is consumed by delete_metering_label_rule method of MeteringPlugin class, which uses the deleted info to get some other data and notify this action","commit_id":"970a96619efea9400284aa8a0113da761750226b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c5d28dcdda9debefaadc969532a3fe61f87bcd1f","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def get_metering_labels(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":75,"context_line":"                            sorts\u003dNone, limit\u003dNone, marker\u003dNone,"},{"line_number":76,"context_line":"                            page_reverse\u003dFalse):"},{"line_number":77,"context_line":"        pager \u003d base_obj.Pager(sorts, limit, page_reverse, marker)"},{"line_number":78,"context_line":"        metering_labels \u003d metering_objs.MeteringLabel.get_objects(context,"},{"line_number":79,"context_line":"                                                                  _pager\u003dpager,"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfeb2761_16272a15","line":76,"updated":"2017-03-30 20:57:31.000000000","message":"initialize filters as filters \u003d filters or {} at the start of the function, because if for some reason we actually get filters\u003dNone as in line 74, the line 80 will crash.","commit_id":"ba0dd47be8838730000819890bdb70288292ab46"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"3cf43fe8c17ede91c4e635711a5d753c6bb52a13","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def get_metering_labels(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":75,"context_line":"                            sorts\u003dNone, limit\u003dNone, marker\u003dNone,"},{"line_number":76,"context_line":"                            page_reverse\u003dFalse):"},{"line_number":77,"context_line":"        pager \u003d base_obj.Pager(sorts, limit, page_reverse, marker)"},{"line_number":78,"context_line":"        metering_labels \u003d metering_objs.MeteringLabel.get_objects(context,"},{"line_number":79,"context_line":"                                                                  _pager\u003dpager,"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfeb2761_c8d1b6fd","line":76,"in_reply_to":"dfeb2761_16272a15","updated":"2017-04-03 23:20:57.000000000","message":"Done","commit_id":"ba0dd47be8838730000819890bdb70288292ab46"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c5d28dcdda9debefaadc969532a3fe61f87bcd1f","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    def get_metering_label_rules(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":93,"context_line":"                                 sorts\u003dNone, limit\u003dNone, marker\u003dNone,"},{"line_number":94,"context_line":"                                 page_reverse\u003dFalse):"},{"line_number":95,"context_line":"        pager \u003d base_obj.Pager(sorts, limit, page_reverse, marker)"},{"line_number":96,"context_line":"        metering_label_rules \u003d metering_objs.MeteringLabelRule.get_objects("},{"line_number":97,"context_line":"            context, _pager\u003dpager, **filters)"},{"line_number":98,"context_line":"        return [self._make_metering_label_rule_dict(mlr)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfeb2761_3687ceda","line":95,"updated":"2017-03-30 20:57:31.000000000","message":"same comment","commit_id":"ba0dd47be8838730000819890bdb70288292ab46"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"3cf43fe8c17ede91c4e635711a5d753c6bb52a13","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    def get_metering_label_rules(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":93,"context_line":"                                 sorts\u003dNone, limit\u003dNone, marker\u003dNone,"},{"line_number":94,"context_line":"                                 page_reverse\u003dFalse):"},{"line_number":95,"context_line":"        pager \u003d base_obj.Pager(sorts, limit, page_reverse, marker)"},{"line_number":96,"context_line":"        metering_label_rules \u003d metering_objs.MeteringLabelRule.get_objects("},{"line_number":97,"context_line":"            context, _pager\u003dpager, **filters)"},{"line_number":98,"context_line":"        return [self._make_metering_label_rule_dict(mlr)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfeb2761_88f4ce87","line":95,"in_reply_to":"dfeb2761_3687ceda","updated":"2017-04-03 23:20:57.000000000","message":"Done","commit_id":"ba0dd47be8838730000819890bdb70288292ab46"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"2d802e08efc8bc3348a176fa9452e2357042f62f","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    def create_metering_label(self, context, metering_label):"},{"line_number":48,"context_line":"        m \u003d metering_label[\u0027metering_label\u0027]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        with db_api.context_manager.writer.using(context):"},{"line_number":51,"context_line":"            metering_obj \u003d metering_objs.MeteringLabel("},{"line_number":52,"context_line":"                context, id\u003duuidutils.generate_uuid(),"},{"line_number":53,"context_line":"                description\u003dm[\u0027description\u0027], project_id\u003dm[\u0027tenant_id\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"bff0334d_83ebe3ae","line":50,"range":{"start_line":50,"start_character":0,"end_line":50,"end_character":58},"updated":"2017-04-06 02:30:31.000000000","message":"As the create method in base.py already has the transaction. Do we still need this?","commit_id":"069c812024a90a4c38962119834f5026bf19bb7e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c0abe7a2299751c08a28b9cb16e1ddce2d246279","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    def create_metering_label(self, context, metering_label):"},{"line_number":48,"context_line":"        m \u003d metering_label[\u0027metering_label\u0027]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        with db_api.context_manager.writer.using(context):"},{"line_number":51,"context_line":"            metering_obj \u003d metering_objs.MeteringLabel("},{"line_number":52,"context_line":"                context, id\u003duuidutils.generate_uuid(),"},{"line_number":53,"context_line":"                description\u003dm[\u0027description\u0027], project_id\u003dm[\u0027tenant_id\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"5ff73747_23e3e535","line":50,"range":{"start_line":50,"start_character":0,"end_line":50,"end_character":58},"in_reply_to":"bff0334d_83ebe3ae","updated":"2017-04-24 20:04:00.000000000","message":"Done","commit_id":"069c812024a90a4c38962119834f5026bf19bb7e"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"2d802e08efc8bc3348a176fa9452e2357042f62f","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        return metering_label"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def delete_metering_label(self, context, label_id):"},{"line_number":67,"context_line":"        with db_api.context_manager.writer.using(context):"},{"line_number":68,"context_line":"            self._get_metering_label(context, label_id).delete()"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def get_metering_label(self, context, label_id, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":6,"id":"bff0334d_e3050f7c","line":67,"range":{"start_line":67,"start_character":8,"end_line":67,"end_character":58},"updated":"2017-04-06 02:30:31.000000000","message":"ditto","commit_id":"069c812024a90a4c38962119834f5026bf19bb7e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c0abe7a2299751c08a28b9cb16e1ddce2d246279","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        return metering_label"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def delete_metering_label(self, context, label_id):"},{"line_number":67,"context_line":"        with db_api.context_manager.writer.using(context):"},{"line_number":68,"context_line":"            self._get_metering_label(context, label_id).delete()"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def get_metering_label(self, context, label_id, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5ff73747_03d2295d","line":67,"range":{"start_line":67,"start_character":8,"end_line":67,"end_character":58},"in_reply_to":"bff0334d_e3050f7c","updated":"2017-04-24 20:04:00.000000000","message":"Here, I think it makes sense because get and delete are two distinct operations. That being said, we can do delete_objects here.","commit_id":"069c812024a90a4c38962119834f5026bf19bb7e"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"2d802e08efc8bc3348a176fa9452e2357042f62f","unresolved":false,"context_lines":[{"line_number":131,"context_line":"    def create_metering_label_rule(self, context, metering_label_rule):"},{"line_number":132,"context_line":"        m \u003d metering_label_rule[\u0027metering_label_rule\u0027]"},{"line_number":133,"context_line":"        try:"},{"line_number":134,"context_line":"            with db_api.context_manager.writer.using(context):"},{"line_number":135,"context_line":"                label_id \u003d m[\u0027metering_label_id\u0027]"},{"line_number":136,"context_line":"                ip_prefix \u003d m[\u0027remote_ip_prefix\u0027]"},{"line_number":137,"context_line":"                direction \u003d m[\u0027direction\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"bff0334d_83ee4386","line":134,"range":{"start_line":134,"start_character":1,"end_line":134,"end_character":62},"updated":"2017-04-06 02:30:31.000000000","message":"ditto","commit_id":"069c812024a90a4c38962119834f5026bf19bb7e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c0abe7a2299751c08a28b9cb16e1ddce2d246279","unresolved":false,"context_lines":[{"line_number":131,"context_line":"    def create_metering_label_rule(self, context, metering_label_rule):"},{"line_number":132,"context_line":"        m \u003d metering_label_rule[\u0027metering_label_rule\u0027]"},{"line_number":133,"context_line":"        try:"},{"line_number":134,"context_line":"            with db_api.context_manager.writer.using(context):"},{"line_number":135,"context_line":"                label_id \u003d m[\u0027metering_label_id\u0027]"},{"line_number":136,"context_line":"                ip_prefix \u003d m[\u0027remote_ip_prefix\u0027]"},{"line_number":137,"context_line":"                direction \u003d m[\u0027direction\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"5ff73747_a345b519","line":134,"range":{"start_line":134,"start_character":1,"end_line":134,"end_character":62},"in_reply_to":"bff0334d_83ee4386","updated":"2017-04-24 20:04:00.000000000","message":"We do validation in line 140, so we should keep the transaction.","commit_id":"069c812024a90a4c38962119834f5026bf19bb7e"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"2d802e08efc8bc3348a176fa9452e2357042f62f","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"                self._validate_cidr(context, label_id, ip_prefix, direction,"},{"line_number":141,"context_line":"                                    excluded)"},{"line_number":142,"context_line":"                obj \u003d metering_objs.MeteringLabelRule("},{"line_number":143,"context_line":"                    context, id\u003duuidutils.generate_uuid(),"},{"line_number":144,"context_line":"                    metering_label_id\u003dlabel_id, direction\u003ddirection,"},{"line_number":145,"context_line":"                    excluded\u003dm[\u0027excluded\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"bff0334d_c32fabf4","line":142,"range":{"start_line":142,"start_character":16,"end_line":142,"end_character":19},"updated":"2017-04-06 02:30:31.000000000","message":"nit: It would be nice to have a meaningful name like metering_obj","commit_id":"069c812024a90a4c38962119834f5026bf19bb7e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c0abe7a2299751c08a28b9cb16e1ddce2d246279","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"                self._validate_cidr(context, label_id, ip_prefix, direction,"},{"line_number":141,"context_line":"                                    excluded)"},{"line_number":142,"context_line":"                obj \u003d metering_objs.MeteringLabelRule("},{"line_number":143,"context_line":"                    context, id\u003duuidutils.generate_uuid(),"},{"line_number":144,"context_line":"                    metering_label_id\u003dlabel_id, direction\u003ddirection,"},{"line_number":145,"context_line":"                    excluded\u003dm[\u0027excluded\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"5ff73747_030589c2","line":142,"range":{"start_line":142,"start_character":16,"end_line":142,"end_character":19},"in_reply_to":"bff0334d_c32fabf4","updated":"2017-04-24 20:04:00.000000000","message":"Done","commit_id":"069c812024a90a4c38962119834f5026bf19bb7e"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"2d802e08efc8bc3348a176fa9452e2357042f62f","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        return self._make_metering_label_rule_dict(obj)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def delete_metering_label_rule(self, context, rule_id):"},{"line_number":154,"context_line":"        with db_api.context_manager.writer.using(context):"},{"line_number":155,"context_line":"            rule \u003d self._get_metering_label_rule(context, rule_id)"},{"line_number":156,"context_line":"            rule.delete()"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"bff0334d_c3f44b5e","line":154,"range":{"start_line":154,"start_character":0,"end_line":154,"end_character":58},"updated":"2017-04-06 02:30:31.000000000","message":"ditto","commit_id":"069c812024a90a4c38962119834f5026bf19bb7e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c0abe7a2299751c08a28b9cb16e1ddce2d246279","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        return self._make_metering_label_rule_dict(obj)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def delete_metering_label_rule(self, context, rule_id):"},{"line_number":154,"context_line":"        with db_api.context_manager.writer.using(context):"},{"line_number":155,"context_line":"            rule \u003d self._get_metering_label_rule(context, rule_id)"},{"line_number":156,"context_line":"            rule.delete()"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5ff73747_c327a164","line":154,"range":{"start_line":154,"start_character":0,"end_line":154,"end_character":58},"in_reply_to":"bff0334d_c3f44b5e","updated":"2017-04-24 20:04:00.000000000","message":"get and delete are distinct operations. It\u0027s actually weird that we return rule dict from delete endpoint, otherwise we could replace with delete_objects.","commit_id":"069c812024a90a4c38962119834f5026bf19bb7e"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"7395d441db44473adc9eb2c514bf3d2f2749ea8e","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        return metering_label"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def delete_metering_label(self, context, label_id):"},{"line_number":66,"context_line":"        metering_objs.MeteringLabel.delete_objects(context, id\u003dlabel_id)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def get_metering_label(self, context, label_id, fields\u003dNone):"},{"line_number":69,"context_line":"        return self._make_metering_label_dict("}],"source_content_type":"text/x-python","patch_set":8,"id":"5ff73747_a9ee8fb1","line":66,"updated":"2017-04-25 18:19:47.000000000","message":"It looks like we have a slight behavior change here. We used to raise MeteringLabelNotFound if you tried to delete something that didn\u0027t exist. I suppose we should check the count returned here and if 0 throw exception.","commit_id":"48729beebe582459860c260d1254b0fab359aef8"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d76f20bfd40ae5fe4ded73e595521f1601347404","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        return metering_label"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def delete_metering_label(self, context, label_id):"},{"line_number":66,"context_line":"        metering_objs.MeteringLabel.delete_objects(context, id\u003dlabel_id)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def get_metering_label(self, context, label_id, fields\u003dNone):"},{"line_number":69,"context_line":"        return self._make_metering_label_dict("}],"source_content_type":"text/x-python","patch_set":8,"id":"5ff73747_ad567b5b","line":66,"in_reply_to":"5ff73747_a9ee8fb1","updated":"2017-04-26 14:41:10.000000000","message":"Done","commit_id":"48729beebe582459860c260d1254b0fab359aef8"}],"neutron/objects/metering.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c5d28dcdda9debefaadc969532a3fe61f87bcd1f","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    fields \u003d {"},{"line_number":33,"context_line":"        \u0027id\u0027: common_types.UUIDField(),"},{"line_number":34,"context_line":"        \u0027direction\u0027: common_types.FlowDirectionEnumField(nullable\u003dTrue),"},{"line_number":35,"context_line":"        \u0027remote_ip_prefix\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":36,"context_line":"        \u0027metering_label_id\u0027: obj_fields.StringField(),"},{"line_number":37,"context_line":"        \u0027excluded\u0027: obj_fields.BooleanField(default\u003dFalse),"},{"line_number":38,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfeb2761_56981269","line":35,"updated":"2017-03-30 20:57:31.000000000","message":"should we use common_types.IPNetworkField here?","commit_id":"ba0dd47be8838730000819890bdb70288292ab46"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"3cf43fe8c17ede91c4e635711a5d753c6bb52a13","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    fields \u003d {"},{"line_number":33,"context_line":"        \u0027id\u0027: common_types.UUIDField(),"},{"line_number":34,"context_line":"        \u0027direction\u0027: common_types.FlowDirectionEnumField(nullable\u003dTrue),"},{"line_number":35,"context_line":"        \u0027remote_ip_prefix\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":36,"context_line":"        \u0027metering_label_id\u0027: obj_fields.StringField(),"},{"line_number":37,"context_line":"        \u0027excluded\u0027: obj_fields.BooleanField(default\u003dFalse),"},{"line_number":38,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfeb2761_c82896e3","line":35,"in_reply_to":"dfeb2761_56981269","updated":"2017-04-03 23:20:57.000000000","message":"Done","commit_id":"ba0dd47be8838730000819890bdb70288292ab46"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c5d28dcdda9debefaadc969532a3fe61f87bcd1f","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        \u0027id\u0027: common_types.UUIDField(),"},{"line_number":34,"context_line":"        \u0027direction\u0027: common_types.FlowDirectionEnumField(nullable\u003dTrue),"},{"line_number":35,"context_line":"        \u0027remote_ip_prefix\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":36,"context_line":"        \u0027metering_label_id\u0027: obj_fields.StringField(),"},{"line_number":37,"context_line":"        \u0027excluded\u0027: obj_fields.BooleanField(default\u003dFalse),"},{"line_number":38,"context_line":"    }"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"dfeb2761_f69e0653","line":36,"range":{"start_line":36,"start_character":29,"end_line":36,"end_character":54},"updated":"2017-03-30 20:57:31.000000000","message":"UUID","commit_id":"ba0dd47be8838730000819890bdb70288292ab46"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"3cf43fe8c17ede91c4e635711a5d753c6bb52a13","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        \u0027id\u0027: common_types.UUIDField(),"},{"line_number":34,"context_line":"        \u0027direction\u0027: common_types.FlowDirectionEnumField(nullable\u003dTrue),"},{"line_number":35,"context_line":"        \u0027remote_ip_prefix\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":36,"context_line":"        \u0027metering_label_id\u0027: obj_fields.StringField(),"},{"line_number":37,"context_line":"        \u0027excluded\u0027: obj_fields.BooleanField(default\u003dFalse),"},{"line_number":38,"context_line":"    }"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"dfeb2761_a8231205","line":36,"range":{"start_line":36,"start_character":29,"end_line":36,"end_character":54},"in_reply_to":"dfeb2761_f69e0653","updated":"2017-04-03 23:20:57.000000000","message":"Done","commit_id":"ba0dd47be8838730000819890bdb70288292ab46"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"b2e04e00b59d7b5db522afa336c66a75db1d6542","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    db_model \u003d metering_models.MeteringLabel"},{"line_number":64,"context_line":"    # synthetic_fields \u003d [\u0027rules\u0027, \u0027routers\u0027]"},{"line_number":65,"context_line":"    synthetic_fields \u003d [\u0027rules\u0027]"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":6,"id":"bff0334d_98135b67","line":64,"updated":"2017-04-05 19:48:59.000000000","message":"Leftover?","commit_id":"069c812024a90a4c38962119834f5026bf19bb7e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c0abe7a2299751c08a28b9cb16e1ddce2d246279","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    db_model \u003d metering_models.MeteringLabel"},{"line_number":64,"context_line":"    # synthetic_fields \u003d [\u0027rules\u0027, \u0027routers\u0027]"},{"line_number":65,"context_line":"    synthetic_fields \u003d [\u0027rules\u0027]"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":6,"id":"5ff73747_c37d616f","line":64,"in_reply_to":"bff0334d_98135b67","updated":"2017-04-24 20:04:00.000000000","message":"I will remove","commit_id":"069c812024a90a4c38962119834f5026bf19bb7e"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"b2e04e00b59d7b5db522afa336c66a75db1d6542","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    db_model \u003d metering_models.MeteringLabel"},{"line_number":64,"context_line":"    # synthetic_fields \u003d [\u0027rules\u0027, \u0027routers\u0027]"},{"line_number":65,"context_line":"    synthetic_fields \u003d [\u0027rules\u0027]"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    fields \u003d {"},{"line_number":68,"context_line":"        \u0027id\u0027: common_types.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":6,"id":"bff0334d_5b3b8dd0","line":65,"updated":"2017-04-05 19:48:59.000000000","message":"If you need to add info, that `routers` isn\u0027t ready, you can do something like:\n\n synthetic_fields \u003d [\u0027rules\u0027,\n                   # TODO() depends on Router OVO\n                   # \u0027routers\u0027\n                   ]\n\nOr just add explanation similar to @74","commit_id":"069c812024a90a4c38962119834f5026bf19bb7e"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"b2e04e00b59d7b5db522afa336c66a75db1d6542","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":72,"context_line":"        \u0027rules\u0027: obj_fields.ListOfObjectsField(\u0027MeteringLabelRule\u0027,"},{"line_number":73,"context_line":"                                               nullable\u003dTrue),"},{"line_number":74,"context_line":"        # TODO(electrocucaracha) This depends on the Router OVO implementation"},{"line_number":75,"context_line":"        # \u0027routers\u0027: obj_fields.ListOfObjectsField(\u0027Router\u0027, nullable\u003dTrue),"},{"line_number":76,"context_line":"        \u0027shared\u0027: obj_fields.BooleanField(default\u003dFalse),"},{"line_number":77,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":6,"id":"bff0334d_1b3505db","line":74,"updated":"2017-04-05 19:48:59.000000000","message":"missing \u0027:\u0027","commit_id":"069c812024a90a4c38962119834f5026bf19bb7e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c0abe7a2299751c08a28b9cb16e1ddce2d246279","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":72,"context_line":"        \u0027rules\u0027: obj_fields.ListOfObjectsField(\u0027MeteringLabelRule\u0027,"},{"line_number":73,"context_line":"                                               nullable\u003dTrue),"},{"line_number":74,"context_line":"        # TODO(electrocucaracha) This depends on the Router OVO implementation"},{"line_number":75,"context_line":"        # \u0027routers\u0027: obj_fields.ListOfObjectsField(\u0027Router\u0027, nullable\u003dTrue),"},{"line_number":76,"context_line":"        \u0027shared\u0027: obj_fields.BooleanField(default\u003dFalse),"},{"line_number":77,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":6,"id":"5ff73747_43915199","line":74,"in_reply_to":"bff0334d_1b3505db","updated":"2017-04-24 20:04:00.000000000","message":"Let\u0027s cleanup for now. We will get to it when we are ready.","commit_id":"069c812024a90a4c38962119834f5026bf19bb7e"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"54ed8c2d99610842635dcd34eea37332fef3fdcf","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    db_model \u003d metering_models.MeteringLabel"},{"line_number":64,"context_line":"    synthetic_fields \u003d [\u0027rules\u0027]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    fields \u003d {"},{"line_number":67,"context_line":"        \u0027id\u0027: common_types.UUIDField(),"},{"line_number":68,"context_line":"        \u0027project_id\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":69,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":70,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":71,"context_line":"        \u0027rules\u0027: obj_fields.ListOfObjectsField(\u0027MeteringLabelRule\u0027,"},{"line_number":72,"context_line":"                                               nullable\u003dTrue),"},{"line_number":73,"context_line":"        \u0027shared\u0027: obj_fields.BooleanField(default\u003dFalse),"},{"line_number":74,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":9,"id":"5ff73747_f3658146","line":74,"range":{"start_line":64,"start_character":4,"end_line":74,"end_character":5},"updated":"2017-04-26 17:12:03.000000000","message":"may be worth adding a comment or note here, that router need to be added as synthetic field ?","commit_id":"e08755709a6e91179bec3ddc5ae266ffb2f571ae"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"b02173560a1ed47bcc17e70ee82715bedf610370","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    db_model \u003d metering_models.MeteringLabel"},{"line_number":64,"context_line":"    synthetic_fields \u003d [\u0027rules\u0027]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    fields \u003d {"},{"line_number":67,"context_line":"        \u0027id\u0027: common_types.UUIDField(),"},{"line_number":68,"context_line":"        \u0027project_id\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":69,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":70,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":71,"context_line":"        \u0027rules\u0027: obj_fields.ListOfObjectsField(\u0027MeteringLabelRule\u0027,"},{"line_number":72,"context_line":"                                               nullable\u003dTrue),"},{"line_number":73,"context_line":"        \u0027shared\u0027: obj_fields.BooleanField(default\u003dFalse),"},{"line_number":74,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":9,"id":"5ff73747_ff842060","line":74,"range":{"start_line":64,"start_character":4,"end_line":74,"end_character":5},"in_reply_to":"5ff73747_f3658146","updated":"2017-04-26 18:39:29.000000000","message":"We will add it if/when it\u0027s needed (when we see the need). So far we haven\u0027t, right?","commit_id":"e08755709a6e91179bec3ddc5ae266ffb2f571ae"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"43b3a9ab52456f63d119095571c40c833a5c8083","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    db_model \u003d metering_models.MeteringLabel"},{"line_number":64,"context_line":"    synthetic_fields \u003d [\u0027rules\u0027]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    fields \u003d {"},{"line_number":67,"context_line":"        \u0027id\u0027: common_types.UUIDField(),"},{"line_number":68,"context_line":"        \u0027project_id\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":69,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":70,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":71,"context_line":"        \u0027rules\u0027: obj_fields.ListOfObjectsField(\u0027MeteringLabelRule\u0027,"},{"line_number":72,"context_line":"                                               nullable\u003dTrue),"},{"line_number":73,"context_line":"        \u0027shared\u0027: obj_fields.BooleanField(default\u003dFalse),"},{"line_number":74,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":9,"id":"5ff73747_cd7c1985","line":74,"range":{"start_line":64,"start_character":4,"end_line":74,"end_character":5},"in_reply_to":"5ff73747_ff842060","updated":"2017-04-26 19:56:29.000000000","message":"https://review.openstack.org/#/c/433125/10/neutron/db/metering/metering_db.py@221 ??","commit_id":"e08755709a6e91179bec3ddc5ae266ffb2f571ae"}],"neutron/tests/unit/objects/test_metering.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c5d28dcdda9debefaadc969532a3fe61f87bcd1f","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self.update_obj_fields("},{"line_number":33,"context_line":"            {"},{"line_number":34,"context_line":"                \u0027metering_label_id\u0027: lambda:"},{"line_number":35,"context_line":"                self._create_test_metering_label().id})"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class MeteringLabelObjectTestCase(obj_test_base.BaseObjectIfaceTestCase):"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfeb2761_d6fc2240","line":35,"updated":"2017-03-30 20:57:31.000000000","message":"wrapping here is not ideal, I would suggest to not wrap lambda. If the line does not fit, maybe initialize the variable in line 32 and pass it here.","commit_id":"ba0dd47be8838730000819890bdb70288292ab46"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"3cf43fe8c17ede91c4e635711a5d753c6bb52a13","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self.update_obj_fields("},{"line_number":33,"context_line":"            {"},{"line_number":34,"context_line":"                \u0027metering_label_id\u0027: lambda:"},{"line_number":35,"context_line":"                self._create_test_metering_label().id})"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class MeteringLabelObjectTestCase(obj_test_base.BaseObjectIfaceTestCase):"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfeb2761_a3cb3570","line":35,"in_reply_to":"dfeb2761_d6fc2240","updated":"2017-04-03 23:20:57.000000000","message":"Done","commit_id":"ba0dd47be8838730000819890bdb70288292ab46"}]}
