)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":11,"context_line":"the chains and rules with their packet:byte counts.  All other"},{"line_number":12,"context_line":"changes were ported as well to keep the code as similar as"},{"line_number":13,"context_line":"possible between the two, although they will be different as"},{"line_number":14,"context_line":"I had to fix other bugs found during testing."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Updated tests accordingly to account for new calls and"},{"line_number":17,"context_line":"input/output changes in formatting."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAAPH%2F%2FgMg%3D","line":14,"updated":"2013-05-31 18:16:37.000000000","message":"Could you report this bugs and state it on the bug report?","commit_id":"7a1fed488e73a49291534838faee6e5c0dc467cd"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":11,"context_line":"the chains and rules with their packet:byte counts.  All other"},{"line_number":12,"context_line":"changes were ported as well to keep the code as similar as"},{"line_number":13,"context_line":"possible between the two, although they will be different as"},{"line_number":14,"context_line":"I had to fix other bugs found during testing."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Updated tests accordingly to account for new calls and"},{"line_number":17,"context_line":"input/output changes in formatting."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAAPH%2F%2FcSI%3D","line":14,"in_reply_to":"AAAAPH%2F%2FgMg%3D","updated":"2013-06-03 21:04:51.000000000","message":"I will try to add what bugs I remember finding to the report, but as it\u0027s been over two months since I initially sent this out for review some of that info has been swapped-out of my brain :)","commit_id":"7a1fed488e73a49291534838faee6e5c0dc467cd"}],"quantum/agent/linux/iptables_manager.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"6ecf3b73edf0291b9be30d032a9ff7248e8341a4","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        try:"},{"line_number":360,"context_line":"            start \u003d lines.index(\u0027*%s\u0027 % table_name) - 1"},{"line_number":361,"context_line":"        except ValueError:"},{"line_number":362,"context_line":"            # Couldn\u0027t find table_name"},{"line_number":363,"context_line":"            return (0, 0)"},{"line_number":364,"context_line":"        end \u003d lines[start:].index(\u0027COMMIT\u0027) + start + 2"},{"line_number":365,"context_line":"        return (start, end)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOn%2F%2FvW0%3D","line":362,"updated":"2013-04-25 13:09:36.000000000","message":"is it worthwhile logging an error here. may be useful for debugging?","commit_id":"70624f3aa926f99bb083b2e1c5926d3490400f10"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":359,"context_line":"        try:"},{"line_number":360,"context_line":"            start \u003d lines.index(\u0027*%s\u0027 % table_name) - 1"},{"line_number":361,"context_line":"        except ValueError:"},{"line_number":362,"context_line":"            # Couldn\u0027t find table_name"},{"line_number":363,"context_line":"            return (0, 0)"},{"line_number":364,"context_line":"        end \u003d lines[start:].index(\u0027COMMIT\u0027) + start + 2"},{"line_number":365,"context_line":"        return (start, end)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOn%2F%2FuxI%3D","line":362,"in_reply_to":"AAAAOn%2F%2FvW0%3D","updated":"2013-04-25 19:51:40.000000000","message":"I\u0027ll add a debug here and see how often it gets triggered, it might only happen running tests since it\u0027s using a \u0027fake\u0027 manager.","commit_id":"70624f3aa926f99bb083b2e1c5926d3490400f10"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"6ecf3b73edf0291b9be30d032a9ff7248e8341a4","unresolved":false,"context_lines":[{"line_number":389,"context_line":"        remove_rules \u003d table.remove_rules"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        if not current_lines:"},{"line_number":392,"context_line":"            fake_table \u003d [\u0027#Generated by quantum\u0027,"},{"line_number":393,"context_line":"                          \u0027*\u0027 + table_name, \u0027COMMIT\u0027,"},{"line_number":394,"context_line":"                          \u0027#Completed by quantum\u0027]"},{"line_number":395,"context_line":"            current_lines \u003d fake_table"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOn%2F%2FvWo%3D","line":392,"updated":"2013-04-25 13:11:01.000000000","message":"Do we need to consider something other than quantum here. This will need to be updated with the name change","commit_id":"70624f3aa926f99bb083b2e1c5926d3490400f10"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":389,"context_line":"        remove_rules \u003d table.remove_rules"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        if not current_lines:"},{"line_number":392,"context_line":"            fake_table \u003d [\u0027#Generated by quantum\u0027,"},{"line_number":393,"context_line":"                          \u0027*\u0027 + table_name, \u0027COMMIT\u0027,"},{"line_number":394,"context_line":"                          \u0027#Completed by quantum\u0027]"},{"line_number":395,"context_line":"            current_lines \u003d fake_table"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOn%2F%2Fuzk%3D","line":392,"in_reply_to":"AAAAOn%2F%2FvWo%3D","updated":"2013-04-25 19:51:40.000000000","message":"I can change this to iptables_manager, then update the tests to match.","commit_id":"70624f3aa926f99bb083b2e1c5926d3490400f10"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":452,"context_line":"                # Further down, we weed out duplicates from the bottom of the"},{"line_number":453,"context_line":"                # list, so here we remove the dupes ahead of time."},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"                o_filter \u003d filter(lambda s: rule_str.strip() in s.strip(),"},{"line_number":456,"context_line":"                                  old_filter)"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"                dup_filter \u003d filter(lambda s: rule_str.strip() in s.strip(),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOn%2F%2Fxc8%3D","line":455,"updated":"2013-04-23 20:38:25.000000000","message":"I prefere original_filter here","commit_id":"70624f3aa926f99bb083b2e1c5926d3490400f10"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":452,"context_line":"                # Further down, we weed out duplicates from the bottom of the"},{"line_number":453,"context_line":"                # list, so here we remove the dupes ahead of time."},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"                o_filter \u003d filter(lambda s: rule_str.strip() in s.strip(),"},{"line_number":456,"context_line":"                                  old_filter)"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"                dup_filter \u003d filter(lambda s: rule_str.strip() in s.strip(),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOn%2F%2Fu0A%3D","line":455,"in_reply_to":"AAAAOn%2F%2Fxc8%3D","updated":"2013-04-25 19:51:40.000000000","message":"Changed all o_filter to orig_filter","commit_id":"70624f3aa926f99bb083b2e1c5926d3490400f10"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":523,"context_line":"            # We need to find exact matches here"},{"line_number":524,"context_line":"            if line.startswith(\u0027:\u0027):"},{"line_number":525,"context_line":"                # it\u0027s a chain, for example, \":quantum-billing - [0:0]\""},{"line_number":526,"context_line":"                # strip off everything except the chain name"},{"line_number":527,"context_line":"                line \u003d line.split(\u0027:\u0027)[1]"},{"line_number":528,"context_line":"                line \u003d line.split(\u0027 - [\u0027, 1)[0]"},{"line_number":529,"context_line":"                line \u003d line.strip()"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOn%2F%2Fxcw%3D","line":526,"updated":"2013-04-23 20:38:25.000000000","message":"just question.  quantum-billing is new project ? :)","commit_id":"70624f3aa926f99bb083b2e1c5926d3490400f10"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":523,"context_line":"            # We need to find exact matches here"},{"line_number":524,"context_line":"            if line.startswith(\u0027:\u0027):"},{"line_number":525,"context_line":"                # it\u0027s a chain, for example, \":quantum-billing - [0:0]\""},{"line_number":526,"context_line":"                # strip off everything except the chain name"},{"line_number":527,"context_line":"                line \u003d line.split(\u0027:\u0027)[1]"},{"line_number":528,"context_line":"                line \u003d line.split(\u0027 - [\u0027, 1)[0]"},{"line_number":529,"context_line":"                line \u003d line.strip()"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOn%2F%2Fu2E%3D","line":526,"in_reply_to":"AAAAOn%2F%2Fxcw%3D","updated":"2013-04-25 19:51:40.000000000","message":"\u003e just question. quantum-billing is new project ? :)\n\n:)  I am working on porting our nova-network based code to quantum that could count packets for billing purposes, then getting that upstream.  Need to work out some details as to what can be done, for example, port-based vs router-based.  I\u0027ll need to send email to the list when I have some ideas, but feel free to send any thoughts along.","commit_id":"70624f3aa926f99bb083b2e1c5926d3490400f10"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"unresolved":false,"context_lines":[{"line_number":406,"context_line":""},{"line_number":407,"context_line":"        rules_index \u003d self._find_rules_index(new_filter)"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"        all_chains \u003d [\u0027:%s\u0027 % (name) for name in unwrapped_chains]"},{"line_number":410,"context_line":"        all_chains +\u003d [\u0027:%s-%s\u0027 % (binary_name, name) for name in chains]"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"        # Iterate through all the chains, trying to find an existing"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPH%2F%2Fh%2Bk%3D","line":409,"updated":"2013-05-31 05:26:56.000000000","message":"nit: I dont think parenthesis are needed in (name)","commit_id":"7a1fed488e73a49291534838faee6e5c0dc467cd"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":406,"context_line":""},{"line_number":407,"context_line":"        rules_index \u003d self._find_rules_index(new_filter)"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"        all_chains \u003d [\u0027:%s\u0027 % (name) for name in unwrapped_chains]"},{"line_number":410,"context_line":"        all_chains +\u003d [\u0027:%s-%s\u0027 % (binary_name, name) for name in chains]"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"        # Iterate through all the chains, trying to find an existing"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPH%2F%2FcSU%3D","line":409,"in_reply_to":"AAAAPH%2F%2Fh%2Bk%3D","updated":"2013-06-03 21:04:51.000000000","message":"Done","commit_id":"7a1fed488e73a49291534838faee6e5c0dc467cd"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":155,"context_line":"            self.remove_chains.add(name)"},{"line_number":156,"context_line":"        chain_set.remove(name)"},{"line_number":157,"context_line":"        if not wrap:"},{"line_number":158,"context_line":"            self.remove_rules +\u003d filter(lambda r: r.chain \u003d\u003d name, self.rules)"},{"line_number":159,"context_line":"        self.rules \u003d filter(lambda r: r.chain !\u003d name, self.rules)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        if wrap:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2Fo2Y%3D","line":158,"updated":"2013-06-13 19:33:08.000000000","message":"self.remove_rules +\u003d [r for r in self.rules if r.chain \u003d\u003d name]","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":155,"context_line":"            self.remove_chains.add(name)"},{"line_number":156,"context_line":"        chain_set.remove(name)"},{"line_number":157,"context_line":"        if not wrap:"},{"line_number":158,"context_line":"            self.remove_rules +\u003d filter(lambda r: r.chain \u003d\u003d name, self.rules)"},{"line_number":159,"context_line":"        self.rules \u003d filter(lambda r: r.chain !\u003d name, self.rules)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        if wrap:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2FmPY%3D","line":158,"in_reply_to":"AAAAPX%2F%2Fo2Y%3D","updated":"2013-06-14 17:29:45.000000000","message":"Done","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":156,"context_line":"        chain_set.remove(name)"},{"line_number":157,"context_line":"        if not wrap:"},{"line_number":158,"context_line":"            self.remove_rules +\u003d filter(lambda r: r.chain \u003d\u003d name, self.rules)"},{"line_number":159,"context_line":"        self.rules \u003d filter(lambda r: r.chain !\u003d name, self.rules)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        if wrap:"},{"line_number":162,"context_line":"            jump_snippet \u003d \u0027-j %s-%s\u0027 % (binary_name, name)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2Fo1U%3D","line":159,"updated":"2013-06-13 19:33:08.000000000","message":"self.rules \u003d [r for r in self.rules if r.chain !\u003d name]","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":156,"context_line":"        chain_set.remove(name)"},{"line_number":157,"context_line":"        if not wrap:"},{"line_number":158,"context_line":"            self.remove_rules +\u003d filter(lambda r: r.chain \u003d\u003d name, self.rules)"},{"line_number":159,"context_line":"        self.rules \u003d filter(lambda r: r.chain !\u003d name, self.rules)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        if wrap:"},{"line_number":162,"context_line":"            jump_snippet \u003d \u0027-j %s-%s\u0027 % (binary_name, name)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2FmPQ%3D","line":159,"in_reply_to":"AAAAPX%2F%2Fo1U%3D","updated":"2013-06-14 17:29:45.000000000","message":"Done","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":164,"context_line":"            jump_snippet \u003d \u0027-j %s\u0027 % (name,)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        if not wrap:"},{"line_number":167,"context_line":"            self.remove_rules +\u003d filter(lambda r: jump_snippet in r.rule,"},{"line_number":168,"context_line":"                                        self.rules)"},{"line_number":169,"context_line":"        self.rules \u003d filter(lambda r: jump_snippet not in r.rule, self.rules)"},{"line_number":170,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2Fo1Y%3D","line":167,"updated":"2013-06-13 19:33:08.000000000","message":"Why can\u0027t we move 161-164 to above 157 and use this list comprehension:\n\nself.remove_rules +\u003d [r for r in self.rules if r.chain \u003d\u003d name or jump_snippet in r.rule]","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":164,"context_line":"            jump_snippet \u003d \u0027-j %s\u0027 % (name,)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        if not wrap:"},{"line_number":167,"context_line":"            self.remove_rules +\u003d filter(lambda r: jump_snippet in r.rule,"},{"line_number":168,"context_line":"                                        self.rules)"},{"line_number":169,"context_line":"        self.rules \u003d filter(lambda r: jump_snippet not in r.rule, self.rules)"},{"line_number":170,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2FmO4%3D","line":167,"in_reply_to":"AAAAPX%2F%2Fo1Y%3D","updated":"2013-06-14 17:29:45.000000000","message":"We have to remove the chains that don\u0027t match before we look for the jump rules, else self.remove_rules will not contain all the rules we want.  I tried this btw and it didn\u0027t work.  I have added some comments to make this clearer.","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":166,"context_line":"        if not wrap:"},{"line_number":167,"context_line":"            self.remove_rules +\u003d filter(lambda r: jump_snippet in r.rule,"},{"line_number":168,"context_line":"                                        self.rules)"},{"line_number":169,"context_line":"        self.rules \u003d filter(lambda r: jump_snippet not in r.rule, self.rules)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def add_rule(self, chain, rule, wrap\u003dTrue, top\u003dFalse):"},{"line_number":172,"context_line":"        \"\"\"Add a rule to the table."}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2Fo0E%3D","line":169,"updated":"2013-06-13 19:33:08.000000000","message":"self.rules \u003d [r for r in self.rules if jump_snippet not in r.rule]","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":166,"context_line":"        if not wrap:"},{"line_number":167,"context_line":"            self.remove_rules +\u003d filter(lambda r: jump_snippet in r.rule,"},{"line_number":168,"context_line":"                                        self.rules)"},{"line_number":169,"context_line":"        self.rules \u003d filter(lambda r: jump_snippet not in r.rule, self.rules)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def add_rule(self, chain, rule, wrap\u003dTrue, top\u003dFalse):"},{"line_number":172,"context_line":"        \"\"\"Add a rule to the table."}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2FmPM%3D","line":169,"in_reply_to":"AAAAPX%2F%2Fo0E%3D","updated":"2013-06-14 17:29:45.000000000","message":"Done","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":403,"context_line":""},{"line_number":404,"context_line":"        # Remember any chains or rules we might have added, they could"},{"line_number":405,"context_line":"        # have a [packet:byte] count we want to preserve."},{"line_number":406,"context_line":"        old_filter \u003d filter(lambda line: binary_name in line,"},{"line_number":407,"context_line":"                            current_lines)"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"        # Remove any trace of our rules"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2FoxA%3D","line":406,"updated":"2013-06-13 19:33:08.000000000","message":"old_filter, new_filter \u003d [], []\nfor line in self.current_lines:  \n    (old_filter if binary_name in line else new_filter).append(line.strip())","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":403,"context_line":""},{"line_number":404,"context_line":"        # Remember any chains or rules we might have added, they could"},{"line_number":405,"context_line":"        # have a [packet:byte] count we want to preserve."},{"line_number":406,"context_line":"        old_filter \u003d filter(lambda line: binary_name in line,"},{"line_number":407,"context_line":"                            current_lines)"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"        # Remove any trace of our rules"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2FmO0%3D","line":406,"in_reply_to":"AAAAPX%2F%2FoxA%3D","updated":"2013-06-14 17:29:45.000000000","message":"Done","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":419,"context_line":"        # match."},{"line_number":420,"context_line":"        our_chains \u003d []"},{"line_number":421,"context_line":"        for chain in all_chains:"},{"line_number":422,"context_line":"            chain_str \u003d str(chain)"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"            orig_filter \u003d filter(lambda s: chain_str.strip() in s.strip(),"},{"line_number":425,"context_line":"                                 old_filter)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2FowY%3D","line":422,"updated":"2013-06-13 19:33:08.000000000","message":"chain_str \u003d str(chain).strip()","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":419,"context_line":"        # match."},{"line_number":420,"context_line":"        our_chains \u003d []"},{"line_number":421,"context_line":"        for chain in all_chains:"},{"line_number":422,"context_line":"            chain_str \u003d str(chain)"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"            orig_filter \u003d filter(lambda s: chain_str.strip() in s.strip(),"},{"line_number":425,"context_line":"                                 old_filter)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2FmOw%3D","line":422,"in_reply_to":"AAAAPX%2F%2FowY%3D","updated":"2013-06-14 17:29:45.000000000","message":"Done","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":421,"context_line":"        for chain in all_chains:"},{"line_number":422,"context_line":"            chain_str \u003d str(chain)"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"            orig_filter \u003d filter(lambda s: chain_str.strip() in s.strip(),"},{"line_number":425,"context_line":"                                 old_filter)"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"            dup_filter \u003d filter(lambda s: chain_str.strip() in s.strip(),"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2FowU%3D","line":424,"updated":"2013-06-13 19:33:08.000000000","message":"Can strip above in line 406","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":421,"context_line":"        for chain in all_chains:"},{"line_number":422,"context_line":"            chain_str \u003d str(chain)"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"            orig_filter \u003d filter(lambda s: chain_str.strip() in s.strip(),"},{"line_number":425,"context_line":"                                 old_filter)"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"            dup_filter \u003d filter(lambda s: chain_str.strip() in s.strip(),"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2FmOo%3D","line":424,"in_reply_to":"AAAAPX%2F%2FowU%3D","updated":"2013-06-14 17:29:45.000000000","message":"Done","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":424,"context_line":"            orig_filter \u003d filter(lambda s: chain_str.strip() in s.strip(),"},{"line_number":425,"context_line":"                                 old_filter)"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"            dup_filter \u003d filter(lambda s: chain_str.strip() in s.strip(),"},{"line_number":428,"context_line":"                                new_filter)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"            new_filter \u003d filter(lambda s:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2FowQ%3D","line":427,"updated":"2013-06-13 19:33:08.000000000","message":"same as above","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":424,"context_line":"            orig_filter \u003d filter(lambda s: chain_str.strip() in s.strip(),"},{"line_number":425,"context_line":"                                 old_filter)"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"            dup_filter \u003d filter(lambda s: chain_str.strip() in s.strip(),"},{"line_number":428,"context_line":"                                new_filter)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"            new_filter \u003d filter(lambda s:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2FmOk%3D","line":427,"in_reply_to":"AAAAPX%2F%2FowQ%3D","updated":"2013-06-14 17:29:45.000000000","message":"Done","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":427,"context_line":"            dup_filter \u003d filter(lambda s: chain_str.strip() in s.strip(),"},{"line_number":428,"context_line":"                                new_filter)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"            new_filter \u003d filter(lambda s:"},{"line_number":431,"context_line":"                                chain_str.strip() not in s.strip(),"},{"line_number":432,"context_line":"                                new_filter)"},{"line_number":433,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2FowM%3D","line":430,"updated":"2013-06-13 19:33:08.000000000","message":"same as above","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":427,"context_line":"            dup_filter \u003d filter(lambda s: chain_str.strip() in s.strip(),"},{"line_number":428,"context_line":"                                new_filter)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"            new_filter \u003d filter(lambda s:"},{"line_number":431,"context_line":"                                chain_str.strip() not in s.strip(),"},{"line_number":432,"context_line":"                                new_filter)"},{"line_number":433,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2FmOg%3D","line":430,"in_reply_to":"AAAAPX%2F%2FowM%3D","updated":"2013-06-14 17:29:45.000000000","message":"Done","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":443,"context_line":"            else:"},{"line_number":444,"context_line":"                # add-on the [packet:bytes]"},{"line_number":445,"context_line":"                chain +\u003d \u0027 - [0:0]\u0027"},{"line_number":446,"context_line":"                chain_str \u003d str(chain)"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"            chain_str.strip()"},{"line_number":449,"context_line":"            our_chains +\u003d [chain_str]"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2FowE%3D","line":446,"updated":"2013-06-13 19:33:08.000000000","message":"Chain is already a string no need to call string again.","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":443,"context_line":"            else:"},{"line_number":444,"context_line":"                # add-on the [packet:bytes]"},{"line_number":445,"context_line":"                chain +\u003d \u0027 - [0:0]\u0027"},{"line_number":446,"context_line":"                chain_str \u003d str(chain)"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"            chain_str.strip()"},{"line_number":449,"context_line":"            our_chains +\u003d [chain_str]"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2FmOc%3D","line":446,"in_reply_to":"AAAAPX%2F%2FowE%3D","updated":"2013-06-14 17:29:45.000000000","message":"Done","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":453,"context_line":"        our_rules \u003d []"},{"line_number":454,"context_line":"        bot_rules \u003d []"},{"line_number":455,"context_line":"        for rule in rules:"},{"line_number":456,"context_line":"            rule_str \u003d str(rule)"},{"line_number":457,"context_line":"            # Further down, we weed out duplicates from the bottom of the"},{"line_number":458,"context_line":"            # list, so here we remove the dupes ahead of time."},{"line_number":459,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2Forw%3D","line":456,"updated":"2013-06-13 19:33:08.000000000","message":"rule_str \u003d str(rule).strip()","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":453,"context_line":"        our_rules \u003d []"},{"line_number":454,"context_line":"        bot_rules \u003d []"},{"line_number":455,"context_line":"        for rule in rules:"},{"line_number":456,"context_line":"            rule_str \u003d str(rule)"},{"line_number":457,"context_line":"            # Further down, we weed out duplicates from the bottom of the"},{"line_number":458,"context_line":"            # list, so here we remove the dupes ahead of time."},{"line_number":459,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2FmOY%3D","line":456,"in_reply_to":"AAAAPX%2F%2Forw%3D","updated":"2013-06-14 17:29:45.000000000","message":"Done","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":457,"context_line":"            # Further down, we weed out duplicates from the bottom of the"},{"line_number":458,"context_line":"            # list, so here we remove the dupes ahead of time."},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"            orig_filter \u003d filter(lambda s: rule_str.strip() in s.strip(),"},{"line_number":461,"context_line":"                                 old_filter)"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"            dup_filter \u003d filter(lambda s: rule_str.strip() in s.strip(),"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2Fors%3D","line":460,"updated":"2013-06-13 19:33:08.000000000","message":"can remove strip()s","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":457,"context_line":"            # Further down, we weed out duplicates from the bottom of the"},{"line_number":458,"context_line":"            # list, so here we remove the dupes ahead of time."},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"            orig_filter \u003d filter(lambda s: rule_str.strip() in s.strip(),"},{"line_number":461,"context_line":"                                 old_filter)"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"            dup_filter \u003d filter(lambda s: rule_str.strip() in s.strip(),"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2FmOU%3D","line":460,"in_reply_to":"AAAAPX%2F%2Fors%3D","updated":"2013-06-14 17:29:45.000000000","message":"Done","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":460,"context_line":"            orig_filter \u003d filter(lambda s: rule_str.strip() in s.strip(),"},{"line_number":461,"context_line":"                                 old_filter)"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"            dup_filter \u003d filter(lambda s: rule_str.strip() in s.strip(),"},{"line_number":464,"context_line":"                                new_filter)"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"            new_filter \u003d filter(lambda s:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2Foro%3D","line":463,"updated":"2013-06-13 19:33:08.000000000","message":"same as above","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":460,"context_line":"            orig_filter \u003d filter(lambda s: rule_str.strip() in s.strip(),"},{"line_number":461,"context_line":"                                 old_filter)"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"            dup_filter \u003d filter(lambda s: rule_str.strip() in s.strip(),"},{"line_number":464,"context_line":"                                new_filter)"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"            new_filter \u003d filter(lambda s:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2FmOQ%3D","line":463,"in_reply_to":"AAAAPX%2F%2Foro%3D","updated":"2013-06-14 17:29:45.000000000","message":"Done","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":463,"context_line":"            dup_filter \u003d filter(lambda s: rule_str.strip() in s.strip(),"},{"line_number":464,"context_line":"                                new_filter)"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"            new_filter \u003d filter(lambda s:"},{"line_number":467,"context_line":"                                rule_str.strip() not in s.strip(),"},{"line_number":468,"context_line":"                                new_filter)"},{"line_number":469,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2Forg%3D","line":466,"updated":"2013-06-13 19:33:08.000000000","message":"same as above","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":463,"context_line":"            dup_filter \u003d filter(lambda s: rule_str.strip() in s.strip(),"},{"line_number":464,"context_line":"                                new_filter)"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"            new_filter \u003d filter(lambda s:"},{"line_number":467,"context_line":"                                rule_str.strip() not in s.strip(),"},{"line_number":468,"context_line":"                                new_filter)"},{"line_number":469,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2FmOM%3D","line":466,"in_reply_to":"AAAAPX%2F%2Forg%3D","updated":"2013-06-14 17:29:45.000000000","message":"Done","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":561,"context_line":"        new_filter.reverse()"},{"line_number":562,"context_line":"        new_filter \u003d filter(_weed_out_duplicate_chains, new_filter)"},{"line_number":563,"context_line":"        new_filter \u003d filter(_weed_out_duplicate_rules, new_filter)"},{"line_number":564,"context_line":"        new_filter \u003d filter(_weed_out_removes, new_filter)"},{"line_number":565,"context_line":"        new_filter.reverse()"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"        # flush lists, just in case we didn\u0027t find something"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2FmNU%3D","line":564,"updated":"2013-06-14 17:29:45.000000000","message":"I also got rid of these filter() calls here.","commit_id":"60c8ed7f862aeed04be3a06e1e12a135fd11c16d"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":486,"context_line":""},{"line_number":487,"context_line":"        seen_chains \u003d set()"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"        def _weed_out_duplicate_chains(line):"},{"line_number":490,"context_line":"            # ignore [packet:byte] counts at end of lines"},{"line_number":491,"context_line":"            if line.startswith(\u0027:\u0027):"},{"line_number":492,"context_line":"                line \u003d line.split(\u0027 - [\u0027, 1)[0]"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAPn%2F%2FxP4%3D","line":489,"updated":"2013-06-21 17:16:15.000000000","message":"There is some similar code for ignoring \"[packet:byte]\". \nCould you have helper function here?","commit_id":"47acd679bc15245e8bfb9e40766351f2ebc96287"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":486,"context_line":""},{"line_number":487,"context_line":"        seen_chains \u003d set()"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"        def _weed_out_duplicate_chains(line):"},{"line_number":490,"context_line":"            # ignore [packet:byte] counts at end of lines"},{"line_number":491,"context_line":"            if line.startswith(\u0027:\u0027):"},{"line_number":492,"context_line":"                line \u003d line.split(\u0027 - [\u0027, 1)[0]"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAPn%2F%2Fww8%3D","line":489,"in_reply_to":"AAAAPn%2F%2FxP4%3D","updated":"2013-06-21 20:26:51.000000000","message":"I\u0027ll try and fix that in Patch Set 16...","commit_id":"47acd679bc15245e8bfb9e40766351f2ebc96287"}],"quantum/tests/unit/test_iptables_manager.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"4d2a5f95addcbc538f2beb5edc1ce8182baee490","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from quantum.tests import base"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"nat_dump_base \u003d (\u0027#Generated by quantum\\n\u0027"},{"line_number":30,"context_line":"                 \u0027*nat\\n\u0027"},{"line_number":31,"context_line":"                 \u0027:quantum-postrouting-bottom - [0:0]\\n\u0027"},{"line_number":32,"context_line":"                 \u0027:%s-OUTPUT - [0:0]\\n\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOn%2F%2FxoI%3D","line":29,"updated":"2013-04-23 19:20:46.000000000","message":"NAT_DUMP_BASE \u003d","commit_id":"70624f3aa926f99bb083b2e1c5926d3490400f10"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":26,"context_line":"from quantum.tests import base"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"nat_dump_base \u003d (\u0027#Generated by quantum\\n\u0027"},{"line_number":30,"context_line":"                 \u0027*nat\\n\u0027"},{"line_number":31,"context_line":"                 \u0027:quantum-postrouting-bottom - [0:0]\\n\u0027"},{"line_number":32,"context_line":"                 \u0027:%s-OUTPUT - [0:0]\\n\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOn%2F%2Fuwk%3D","line":29,"in_reply_to":"AAAAOn%2F%2FxoI%3D","updated":"2013-04-25 19:51:40.000000000","message":"Done","commit_id":"70624f3aa926f99bb083b2e1c5926d3490400f10"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"4d2a5f95addcbc538f2beb5edc1ce8182baee490","unresolved":false,"context_lines":[{"line_number":29,"context_line":"nat_dump_base \u003d (\u0027#Generated by quantum\\n\u0027"},{"line_number":30,"context_line":"                 \u0027*nat\\n\u0027"},{"line_number":31,"context_line":"                 \u0027:quantum-postrouting-bottom - [0:0]\\n\u0027"},{"line_number":32,"context_line":"                 \u0027:%s-OUTPUT - [0:0]\\n\u0027"},{"line_number":33,"context_line":"                 \u0027:%s-snat - [0:0]\\n\u0027"},{"line_number":34,"context_line":"                 \u0027:%s-PREROUTING - [0:0]\\n\u0027"},{"line_number":35,"context_line":"                 \u0027:%s-float-snat - [0:0]\\n\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOn%2F%2FxoM%3D","line":32,"updated":"2013-04-23 19:20:46.000000000","message":"Now that this is broken out.  Consider using key names instead of generic %s\u0027s.  That way we can pass dicts instead of needing to know how many replacements are needed for a string.\n\nie\n\u0027:%(binary_name)s-OUTPUT - [0:0]\\n\u0027","commit_id":"70624f3aa926f99bb083b2e1c5926d3490400f10"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":29,"context_line":"nat_dump_base \u003d (\u0027#Generated by quantum\\n\u0027"},{"line_number":30,"context_line":"                 \u0027*nat\\n\u0027"},{"line_number":31,"context_line":"                 \u0027:quantum-postrouting-bottom - [0:0]\\n\u0027"},{"line_number":32,"context_line":"                 \u0027:%s-OUTPUT - [0:0]\\n\u0027"},{"line_number":33,"context_line":"                 \u0027:%s-snat - [0:0]\\n\u0027"},{"line_number":34,"context_line":"                 \u0027:%s-PREROUTING - [0:0]\\n\u0027"},{"line_number":35,"context_line":"                 \u0027:%s-float-snat - [0:0]\\n\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOn%2F%2FuwQ%3D","line":32,"in_reply_to":"AAAAOn%2F%2FxoM%3D","updated":"2013-04-25 19:51:40.000000000","message":"I\u0027ll work on it.","commit_id":"70624f3aa926f99bb083b2e1c5926d3490400f10"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"4d2a5f95addcbc538f2beb5edc1ce8182baee490","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                 \u0027COMMIT\\n\u0027"},{"line_number":44,"context_line":"                 \u0027#Completed by quantum\\n\u0027)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"filter_dump_base \u003d (\u0027#Generated by quantum\\n\u0027"},{"line_number":47,"context_line":"                    \u0027*filter\\n\u0027"},{"line_number":48,"context_line":"                    \u0027:quantum-filter-top - [0:0]\\n\u0027"},{"line_number":49,"context_line":"                    \u0027:%s-FORWARD - [0:0]\\n\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOn%2F%2FxoE%3D","line":46,"updated":"2013-04-23 19:20:46.000000000","message":"FILTER_DUMP_BASE \u003d","commit_id":"70624f3aa926f99bb083b2e1c5926d3490400f10"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":43,"context_line":"                 \u0027COMMIT\\n\u0027"},{"line_number":44,"context_line":"                 \u0027#Completed by quantum\\n\u0027)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"filter_dump_base \u003d (\u0027#Generated by quantum\\n\u0027"},{"line_number":47,"context_line":"                    \u0027*filter\\n\u0027"},{"line_number":48,"context_line":"                    \u0027:quantum-filter-top - [0:0]\\n\u0027"},{"line_number":49,"context_line":"                    \u0027:%s-FORWARD - [0:0]\\n\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOn%2F%2Fuwo%3D","line":46,"in_reply_to":"AAAAOn%2F%2FxoE%3D","updated":"2013-04-25 19:51:40.000000000","message":"Done","commit_id":"70624f3aa926f99bb083b2e1c5926d3490400f10"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"4d2a5f95addcbc538f2beb5edc1ce8182baee490","unresolved":false,"context_lines":[{"line_number":91,"context_line":"                              root_helper\u003dself.root_helper).AndReturn(\u0027\u0027)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        nat_dump \u003d (nat_dump_base"},{"line_number":94,"context_line":"                    % (bn, bn, bn, bn, bn, bn, bn, bn, bn, bn, bn))"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        filter_dump \u003d (filter_dump_base % (bn, bn, bn, bn, bn, bn, bn, bn))"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOn%2F%2FxoA%3D","line":94,"updated":"2013-04-23 19:20:46.000000000","message":"See note about out making the string more friendly to dicts.","commit_id":"70624f3aa926f99bb083b2e1c5926d3490400f10"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":91,"context_line":"                              root_helper\u003dself.root_helper).AndReturn(\u0027\u0027)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        nat_dump \u003d (nat_dump_base"},{"line_number":94,"context_line":"                    % (bn, bn, bn, bn, bn, bn, bn, bn, bn, bn, bn))"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        filter_dump \u003d (filter_dump_base % (bn, bn, bn, bn, bn, bn, bn, bn))"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOn%2F%2FuwM%3D","line":94,"in_reply_to":"AAAAOn%2F%2FxoA%3D","updated":"2013-04-25 19:51:40.000000000","message":"I\u0027ll work on it.","commit_id":"70624f3aa926f99bb083b2e1c5926d3490400f10"}]}
