)]}'
{"quantum/agent/linux/ovs_lib.py":[{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"3304af019731b46bdd8fb8d569bb7a3aef6454a5","unresolved":false,"context_lines":[{"line_number":228,"context_line":"                       external_ids[\"attached-mac\"], self)"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def get_vif_port_by_id(self, port_id):"},{"line_number":231,"context_line":"        args \u003d [\u0027--\u0027, \u0027--columns\u003dname\u0027, \u0027find\u0027, \u0027Interface\u0027,"},{"line_number":232,"context_line":"                \u0027external_ids:iface-id\u003d\"%s\"\u0027 % port_id]"},{"line_number":233,"context_line":"        retval \u003d self.run_vsctl(args)"},{"line_number":234,"context_line":"        name \u003d retval.split(\u0027:\u0027, 1)[1].strip(\u0027\" \\n\\r\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2Ft4M%3D","line":231,"updated":"2012-08-16 16:29:23.000000000","message":"We should do this via: \n        args \u003d [\u0027--\u0027, \u0027--columns\u003dexternal_ids\u0027, \u0027find\u0027, \u0027Interface\u0027,\n                \u0027external_ids:iface-id\u003d\"%s\"\u0027 % port_id]\n\nThis avoids an extra system call to ovs-vsctl.","commit_id":"b769eb8f7a226eed468ec2db44180094ee5c39b1"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":228,"context_line":"                       external_ids[\"attached-mac\"], self)"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def get_vif_port_by_id(self, port_id):"},{"line_number":231,"context_line":"        args \u003d [\u0027--\u0027, \u0027--columns\u003dname\u0027, \u0027find\u0027, \u0027Interface\u0027,"},{"line_number":232,"context_line":"                \u0027external_ids:iface-id\u003d\"%s\"\u0027 % port_id]"},{"line_number":233,"context_line":"        retval \u003d self.run_vsctl(args)"},{"line_number":234,"context_line":"        name \u003d retval.split(\u0027:\u0027, 1)[1].strip(\u0027\" \\n\\r\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2Ftzo%3D","line":231,"in_reply_to":"AAAALH%2F%2Ft4M%3D","updated":"2012-08-16 17:17:54.000000000","message":"Originally my plan was to do:\n\nargs \u003d [\u0027--\u0027, \u0027--columns\u003dexternal_ids,name,ofport\u0027, \u0027find\u0027, \u0027Interface\u0027,\n\u0027external_ids:iface-id\u003d\"%s\"\u0027 % port_id]\n\nI ran into some problems parsing so gave up. I\u0027ll do it again as the three parameters are required.","commit_id":"b769eb8f7a226eed468ec2db44180094ee5c39b1"},{"author":{"_account_id":1731,"name":"Yusuke Muraoka","email":"yusuke@nttmcl.com","username":"yusuke"},"unresolved":false,"context_lines":[{"line_number":227,"context_line":"                \u0027find\u0027, \u0027Interface\u0027,"},{"line_number":228,"context_line":"                \u0027external_ids:iface-id\u003d\"%s\"\u0027 % port_id]"},{"line_number":229,"context_line":"        rows \u003d self.run_vsctl(args).split(\u0027\\n\u0027)"},{"line_number":230,"context_line":"        val \u003d rows[0].split(\u0027:\u0027, 1)[1].strip(string.whitespace + \u0027{}\u0027)"},{"line_number":231,"context_line":"        items \u003d (item.split(\u0027\u003d\u0027, 1) for item in val.split(\u0027,\u0027))"},{"line_number":232,"context_line":"        ext_ids \u003d dict((k.strip(), v.strip().strip(\u0027\"\u0027)) for k, v in items)"},{"line_number":233,"context_line":"        port_name \u003d rows[1].split(\u0027:\u0027, 1)[1].strip(\u0027\" \u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAALH%2F%2FshI%3D","line":230,"updated":"2012-08-18 13:27:46.000000000","message":"How about this regexp?\n\n\u0027\u0027\u0027external_ids\\s*:\\s{\n    (\n        attached-mac\u003d\"(?P\u003cvif_mac\u003e([a-fA-F\\d]{2}:){5}([a-fA-F\\d]{2}))\",? |\n        iface-id\u003d\"(?P\u003cvif_id\u003e[^\"]+)\",? |\n        .\n    )*\n}\n\\s+\nname\\s*:\\s\"(?P\u003cport_name\u003e[^\"]*)\"\n\\s+\nofport\\s*:\\s(?P\u003cofport\u003e\\d+)\u0027\u0027\u0027\n\nUse with the flags re.MULTILINE | re.X","commit_id":"61c1c94d932c647a1bfa619bb2aad0aefa5ea4dd"},{"author":{"_account_id":1731,"name":"Yusuke Muraoka","email":"yusuke@nttmcl.com","username":"yusuke"},"unresolved":false,"context_lines":[{"line_number":227,"context_line":"                \u0027find\u0027, \u0027Interface\u0027,"},{"line_number":228,"context_line":"                \u0027external_ids:iface-id\u003d\"%s\"\u0027 % port_id]"},{"line_number":229,"context_line":"        rows \u003d self.run_vsctl(args).split(\u0027\\n\u0027)"},{"line_number":230,"context_line":"        val \u003d rows[0].split(\u0027:\u0027, 1)[1].strip(string.whitespace + \u0027{}\u0027)"},{"line_number":231,"context_line":"        items \u003d (item.split(\u0027\u003d\u0027, 1) for item in val.split(\u0027,\u0027))"},{"line_number":232,"context_line":"        ext_ids \u003d dict((k.strip(), v.strip().strip(\u0027\"\u0027)) for k, v in items)"},{"line_number":233,"context_line":"        port_name \u003d rows[1].split(\u0027:\u0027, 1)[1].strip(\u0027\" \u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAALH%2F%2FsSQ%3D","line":230,"in_reply_to":"AAAALH%2F%2FsZU%3D","updated":"2012-08-20 03:14:21.000000000","message":"Sure. Thanks.","commit_id":"61c1c94d932c647a1bfa619bb2aad0aefa5ea4dd"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":227,"context_line":"                \u0027find\u0027, \u0027Interface\u0027,"},{"line_number":228,"context_line":"                \u0027external_ids:iface-id\u003d\"%s\"\u0027 % port_id]"},{"line_number":229,"context_line":"        rows \u003d self.run_vsctl(args).split(\u0027\\n\u0027)"},{"line_number":230,"context_line":"        val \u003d rows[0].split(\u0027:\u0027, 1)[1].strip(string.whitespace + \u0027{}\u0027)"},{"line_number":231,"context_line":"        items \u003d (item.split(\u0027\u003d\u0027, 1) for item in val.split(\u0027,\u0027))"},{"line_number":232,"context_line":"        ext_ids \u003d dict((k.strip(), v.strip().strip(\u0027\"\u0027)) for k, v in items)"},{"line_number":233,"context_line":"        port_name \u003d rows[1].split(\u0027:\u0027, 1)[1].strip(\u0027\" \u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAALH%2F%2FsXc%3D","line":230,"in_reply_to":"AAAALH%2F%2FsZU%3D","updated":"2012-08-19 15:50:40.000000000","message":"import re\n\nfrom quantum.agent.linux import utils\n_re \u003d \u0027\u0027\u0027external_ids\\s*:\\s{\n(\nattached-mac\u003d\"(?P\u003cvif_mac\u003e([a-fA-F\\d]{2}:){5}([a-fA-F\\d]{2}))\",? |\niface-id\u003d\"(?P\u003cvif_id\u003e[^\"]+)\",? |\n.\n)*\n}\n\\s+\nname\\s*:\\s\"(?P\u003cport_name\u003e[^\"]*)\"\n\\s+\nofport\\s*:\\s(?P\u003cofport\u003e\\d+)\u0027\u0027\u0027\n\ndef run_vsctl( args):\n        full_args \u003d [\"ovs-vsctl\", \"--timeout\u003d2\"] + args\n        return utils.execute(full_args, root_helper\u003d\u0027sudo\u0027)\n\nif __name__ \u003d\u003d \u0027__main__\u0027:\n    def get_vif_port_by_id( port_id):\n        args \u003d [\u0027--\u0027, \u0027--columns\u003dexternal_ids,name,ofport\u0027,\n                \u0027find\u0027, \u0027Interface\u0027,\n                \u0027external_ids:iface-id\u003d\"%s\"\u0027 % port_id]\n        _str \u003d run_vsctl(args)\n\n        print _str\n        return _str\n    _str \u003d get_vif_port_by_id(\u002781935b82-8605-402e-8433-154b3b2b3c8f\u0027)\n    m \u003d re.search(_re, _str, re.X | re.M )\n    vif_mac \u003d m.group(\u0027vif_mac\u0027)\n    vif_id \u003d m.group(\u0027vif_id\u0027)\n    name \u003d m.group(\u0027port_name\u0027)\n    ofport \u003d m.group(\u0027ofport\u0027)\n    print vif_mac, vif_id, name, ofport","commit_id":"61c1c94d932c647a1bfa619bb2aad0aefa5ea4dd"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":227,"context_line":"                \u0027find\u0027, \u0027Interface\u0027,"},{"line_number":228,"context_line":"                \u0027external_ids:iface-id\u003d\"%s\"\u0027 % port_id]"},{"line_number":229,"context_line":"        rows \u003d self.run_vsctl(args).split(\u0027\\n\u0027)"},{"line_number":230,"context_line":"        val \u003d rows[0].split(\u0027:\u0027, 1)[1].strip(string.whitespace + \u0027{}\u0027)"},{"line_number":231,"context_line":"        items \u003d (item.split(\u0027\u003d\u0027, 1) for item in val.split(\u0027,\u0027))"},{"line_number":232,"context_line":"        ext_ids \u003d dict((k.strip(), v.strip().strip(\u0027\"\u0027)) for k, v in items)"},{"line_number":233,"context_line":"        port_name \u003d rows[1].split(\u0027:\u0027, 1)[1].strip(\u0027\" \u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAALH%2F%2FsZU%3D","line":230,"in_reply_to":"AAAALH%2F%2FshI%3D","updated":"2012-08-19 09:39:06.000000000","message":"It is a nice idea. I did not manage to get it to work. \n\nThe ovs command returns data of the format:\n\nexternal_ids        : {attached-mac\u003d\"fa:16:3e:bf:ab:f9\", iface-id\u003d\"31595222-17c3-41ce-8be3-f0434f7e17b7\", iface-status\u003dactive}\nname                : \"tap31595222-17\"\nofport              : 4\n\nThe code that I added parses it into the relevant structures. \nIs this ok?","commit_id":"61c1c94d932c647a1bfa619bb2aad0aefa5ea4dd"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def __init__(self, br_name, root_helper):"},{"line_number":49,"context_line":"        self.br_name \u003d br_name"},{"line_number":50,"context_line":"        self.root_helper \u003d root_helper"},{"line_number":51,"context_line":"        self.re_compile_id()"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def re_compile_id(self):"},{"line_number":54,"context_line":"        external \u003d \u0027external_ids\\s*\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALH%2F%2FsRk%3D","line":51,"updated":"2012-08-20 04:59:46.000000000","message":"I prefer \"self.re_id \u003d self.re_compile_id()\" rather than setting an instance variable in the other method.","commit_id":"b248bb3691031d219a5788ea7ba97716d95269b4"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def __init__(self, br_name, root_helper):"},{"line_number":49,"context_line":"        self.br_name \u003d br_name"},{"line_number":50,"context_line":"        self.root_helper \u003d root_helper"},{"line_number":51,"context_line":"        self.re_compile_id()"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def re_compile_id(self):"},{"line_number":54,"context_line":"        external \u003d \u0027external_ids\\s*\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALH%2F%2FsQs%3D","line":51,"in_reply_to":"AAAALH%2F%2FsRk%3D","updated":"2012-08-20 06:01:58.000000000","message":"ok, i\u0027ll update","commit_id":"b248bb3691031d219a5788ea7ba97716d95269b4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":59,"context_line":"        _re \u003d \u0027\u0027\u0027%s:\\s{ ( %s,? | %s,? | . )* } \\s+ %s \\s+ %s\u0027\u0027\u0027 % (external,"},{"line_number":60,"context_line":"                                                                   mac, iface,"},{"line_number":61,"context_line":"                                                                   name,"},{"line_number":62,"context_line":"                                                                   port)"},{"line_number":63,"context_line":"        self.re_id \u003d re.compile(_re, re.M | re.X)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def run_vsctl(self, args):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALH%2F%2FsRg%3D","line":62,"updated":"2012-08-20 04:59:46.000000000","message":"This regexp is nice. The regular expression is quite long. How about using dictionary mapping like:\n\n_re \u003d (\u0027%(external)s:\\s{ ( %(mac)s,? | %(iface)s,? | . )* }\u0027\n               \u0027\\s+ %(name)s \\s+ %(port)s\u0027\n               % locals())\u0027","commit_id":"b248bb3691031d219a5788ea7ba97716d95269b4"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":59,"context_line":"        _re \u003d \u0027\u0027\u0027%s:\\s{ ( %s,? | %s,? | . )* } \\s+ %s \\s+ %s\u0027\u0027\u0027 % (external,"},{"line_number":60,"context_line":"                                                                   mac, iface,"},{"line_number":61,"context_line":"                                                                   name,"},{"line_number":62,"context_line":"                                                                   port)"},{"line_number":63,"context_line":"        self.re_id \u003d re.compile(_re, re.M | re.X)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def run_vsctl(self, args):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALH%2F%2FsQw%3D","line":62,"in_reply_to":"AAAALH%2F%2FsRg%3D","updated":"2012-08-20 06:01:58.000000000","message":"ok, i\u0027ll update","commit_id":"b248bb3691031d219a5788ea7ba97716d95269b4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":241,"context_line":"                \u0027external_ids:iface-id\u003d\"%s\"\u0027 % port_id]"},{"line_number":242,"context_line":"        result \u003d self.run_vsctl(args)"},{"line_number":243,"context_line":"        match \u003d self.re_id.search(result)"},{"line_number":244,"context_line":"        vif_mac \u003d match.group(\u0027vif_mac\u0027)"},{"line_number":245,"context_line":"        vif_id \u003d match.group(\u0027vif_id\u0027)"},{"line_number":246,"context_line":"        port_name \u003d match.group(\u0027port_name\u0027)"},{"line_number":247,"context_line":"        ofport \u003d int(match.group(\u0027ofport\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALH%2F%2FsRc%3D","line":244,"updated":"2012-08-20 04:59:46.000000000","message":"If there are no match, match.group() raises an exception.\nDon\u0027t we need to catch the exception?\n\n(In ovs_lib there are no try/except statement. I am not sure exceptions should be catched in ovs_lib or throw exceptions to the caller.)","commit_id":"b248bb3691031d219a5788ea7ba97716d95269b4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":241,"context_line":"                \u0027external_ids:iface-id\u003d\"%s\"\u0027 % port_id]"},{"line_number":242,"context_line":"        result \u003d self.run_vsctl(args)"},{"line_number":243,"context_line":"        match \u003d self.re_id.search(result)"},{"line_number":244,"context_line":"        vif_mac \u003d match.group(\u0027vif_mac\u0027)"},{"line_number":245,"context_line":"        vif_id \u003d match.group(\u0027vif_id\u0027)"},{"line_number":246,"context_line":"        port_name \u003d match.group(\u0027port_name\u0027)"},{"line_number":247,"context_line":"        ofport \u003d int(match.group(\u0027ofport\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALH%2F%2FsQY%3D","line":244,"in_reply_to":"AAAALH%2F%2FsQ0%3D","updated":"2012-08-20 06:11:32.000000000","message":"Thanks, I have not looked the patch yet. I\u0027ll check it.","commit_id":"b248bb3691031d219a5788ea7ba97716d95269b4"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":241,"context_line":"                \u0027external_ids:iface-id\u003d\"%s\"\u0027 % port_id]"},{"line_number":242,"context_line":"        result \u003d self.run_vsctl(args)"},{"line_number":243,"context_line":"        match \u003d self.re_id.search(result)"},{"line_number":244,"context_line":"        vif_mac \u003d match.group(\u0027vif_mac\u0027)"},{"line_number":245,"context_line":"        vif_id \u003d match.group(\u0027vif_id\u0027)"},{"line_number":246,"context_line":"        port_name \u003d match.group(\u0027port_name\u0027)"},{"line_number":247,"context_line":"        ofport \u003d int(match.group(\u0027ofport\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALH%2F%2FsQ0%3D","line":244,"in_reply_to":"AAAALH%2F%2FsRc%3D","updated":"2012-08-20 06:01:58.000000000","message":"ok,\nplease see https://review.openstack.org/#/c/11622/ for the exception handling","commit_id":"b248bb3691031d219a5788ea7ba97716d95269b4"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":56,"context_line":"        iface \u003d \u0027iface-id\u003d\"(?P\u003cvif_id\u003e[^\"]+)\"\u0027"},{"line_number":57,"context_line":"        name \u003d \u0027name\\s*:\\s\"(?P\u003cport_name\u003e[^\"]*)\"\u0027"},{"line_number":58,"context_line":"        port \u003d \u0027ofport\\s*:\\s(?P\u003cofport\u003e\\d+)\u0027"},{"line_number":59,"context_line":"        _re \u003d (\u0027%(external)s:\\s{ ( %(mac)s,? | %(iface)s,? | . )* }\u0027"},{"line_number":60,"context_line":"               \u0027 \\s+ %(name)s \\s+ %(port)s\u0027 % locals())"},{"line_number":61,"context_line":"        return re.compile(_re, re.M | re.X)"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FsBc%3D","line":59,"updated":"2012-08-20 14:24:33.000000000","message":"This would match also if mac and iface-id are not specified? \nHowever the ovs agent has been designed in a way this condition should never occur.","commit_id":"044ece27b79c810e6c15131b6a553b649e666678"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":56,"context_line":"        iface \u003d \u0027iface-id\u003d\"(?P\u003cvif_id\u003e[^\"]+)\"\u0027"},{"line_number":57,"context_line":"        name \u003d \u0027name\\s*:\\s\"(?P\u003cport_name\u003e[^\"]*)\"\u0027"},{"line_number":58,"context_line":"        port \u003d \u0027ofport\\s*:\\s(?P\u003cofport\u003e\\d+)\u0027"},{"line_number":59,"context_line":"        _re \u003d (\u0027%(external)s:\\s{ ( %(mac)s,? | %(iface)s,? | . )* }\u0027"},{"line_number":60,"context_line":"               \u0027 \\s+ %(name)s \\s+ %(port)s\u0027 % locals())"},{"line_number":61,"context_line":"        return re.compile(_re, re.M | re.X)"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2Fr%2F4%3D","line":59,"in_reply_to":"AAAALH%2F%2FsBc%3D","updated":"2012-08-20 15:22:07.000000000","message":"Yes, you are correct. This will match if either one of the aforementioned are missing.","commit_id":"044ece27b79c810e6c15131b6a553b649e666678"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":237,"context_line":"        args \u003d [\u0027--\u0027, \u0027--columns\u003dexternal_ids,name,ofport\u0027,"},{"line_number":238,"context_line":"                \u0027find\u0027, \u0027Interface\u0027,"},{"line_number":239,"context_line":"                \u0027external_ids:iface-id\u003d\"%s\"\u0027 % port_id]"},{"line_number":240,"context_line":"        result \u003d self.run_vsctl(args)"},{"line_number":241,"context_line":"        if not result:"},{"line_number":242,"context_line":"            return"},{"line_number":243,"context_line":"        match \u003d self.re_id.search(result)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FsBY%3D","line":240,"updated":"2012-08-20 14:24:33.000000000","message":"An alternative would be adding --format\u003djson and the fetching the appropriate attributes from the resulting json output.\nThis would be somewhat easier than regexes. \n\nIf you have already tried json format and found to be not as easy to use as regexs adding --bare to the command out would probably make parsing easier, even though this relies on ovs-vsctl printing out columns in the same order you asked them","commit_id":"044ece27b79c810e6c15131b6a553b649e666678"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":237,"context_line":"        args \u003d [\u0027--\u0027, \u0027--columns\u003dexternal_ids,name,ofport\u0027,"},{"line_number":238,"context_line":"                \u0027find\u0027, \u0027Interface\u0027,"},{"line_number":239,"context_line":"                \u0027external_ids:iface-id\u003d\"%s\"\u0027 % port_id]"},{"line_number":240,"context_line":"        result \u003d self.run_vsctl(args)"},{"line_number":241,"context_line":"        if not result:"},{"line_number":242,"context_line":"            return"},{"line_number":243,"context_line":"        match \u003d self.re_id.search(result)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2Fr%2Fo%3D","line":240,"in_reply_to":"AAAALH%2F%2FsBY%3D","updated":"2012-08-20 15:22:07.000000000","message":"I was not aware of the json option. Originally it was implemented with parsing of the text then the idea of the regex arose. I am not sure what the best solution is at the moment.\nThe downside of the regex is the fact that it is not really easily understood. I am not sure which is better for performance. My gut feeling is that the direct parsing may be better for the performance, then again this operation takes place only when a device is created so I do not think that it is that much of a performance hit.","commit_id":"044ece27b79c810e6c15131b6a553b649e666678"}]}
