)]}'
{"bin/neutron-rootwrap-xen-dom0":[{"author":{"_account_id":6670,"name":"Amir Sadoughi","email":"amir.sadoughi@rackspace.com","username":"amir-sadoughi"},"change_message_id":"f750568e6a616ede3a30396a3c06177e159d0b61","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        host \u003d session.xenapi.session.get_this_host(session.handle)"},{"line_number":116,"context_line":"        plugin_args \u003d {\u0027cmd\u0027: json.dumps(user_args) }"},{"line_number":117,"context_line":"        if cmd_input is not None:"},{"line_number":118,"context_line":"            plugin_args[\u0027cmd_input\u0027] \u003d cmd_input"},{"line_number":119,"context_line":"        result \u003d session.xenapi.host.call_plugin("},{"line_number":120,"context_line":"            host, \u0027netwrap\u0027, \u0027run_command\u0027, plugin_args)"},{"line_number":121,"context_line":"        return json.loads(result)"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"AAAATn%2F87%2B4%3D","line":118,"updated":"2013-12-18 15:51:38.000000000","message":"Should cmd_input be json serialized as well? Also, I think this can be simplified:\n\nplugin_args \u003d {\u0027cmd\u0027: json.dumps(user_args),\n               \u0027cmd_input\u0027: json.dumps(cmd_input)}","commit_id":"55186dfa86345c0b2afd597185b5c3b3c3f56d68"},{"author":{"_account_id":6794,"name":"Simon Pasquier","email":"pasquier.simon@gmail.com","username":"simon-pasquier"},"change_message_id":"6ae469768c7a09b5be5aceb1a922d6a27d8cb5be","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        host \u003d session.xenapi.session.get_this_host(session.handle)"},{"line_number":116,"context_line":"        plugin_args \u003d {\u0027cmd\u0027: json.dumps(user_args) }"},{"line_number":117,"context_line":"        if cmd_input is not None:"},{"line_number":118,"context_line":"            plugin_args[\u0027cmd_input\u0027] \u003d cmd_input"},{"line_number":119,"context_line":"        result \u003d session.xenapi.host.call_plugin("},{"line_number":120,"context_line":"            host, \u0027netwrap\u0027, \u0027run_command\u0027, plugin_args)"},{"line_number":121,"context_line":"        return json.loads(result)"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"AAAATn%2F84O4%3D","line":118,"in_reply_to":"AAAATn%2F87%2B4%3D","updated":"2013-12-19 08:53:26.000000000","message":"Done","commit_id":"55186dfa86345c0b2afd597185b5c3b3c3f56d68"}],"neutron/plugins/openvswitch/agent/xenapi/etc/xapi.d/plugins/netwrap":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"8febe1bd6361675d65b8672ed2aa636f2053f3ac","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    if cmd and cmd[0] not in ALLOWED_CMDS:"},{"line_number":65,"context_line":"        msg \u003d _(\"Dom0 execution of \u0027%s\u0027 is not permitted\") % cmd[0]"},{"line_number":66,"context_line":"        raise PluginError(msg)"},{"line_number":67,"context_line":"    cmd_input \u003d None"},{"line_number":68,"context_line":"    if args.get(\u0027cmd_input\u0027) is not None:"},{"line_number":69,"context_line":"        cmd_input \u003d args.get(\u0027cmd_input\u0027)"},{"line_number":70,"context_line":"    result \u003d _run_command(cmd, cmd_input)"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"AAAATn%2F9Fuc%3D","line":67,"updated":"2013-12-16 22:03:28.000000000","message":"Lines 67-69 should be simplified to:\n\ncmd_input \u003d args.get(\u0027cmd_input\u0027, None)\n\nNote that since the \u0027cmd_input\u0027 key is conditionally added to args in neutron-rootwrap-xen-dom0, there is no guarantee that it will be present, so providing a default is necessary to prevent the possibility of a KeyError exception being raised.","commit_id":"773e73cde7c4fb0a6ece9979097a3107ce931902"},{"author":{"_account_id":6794,"name":"Simon Pasquier","email":"pasquier.simon@gmail.com","username":"simon-pasquier"},"change_message_id":"070b4cfbbd3987491deadf070d5e8532eaa4718a","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    if cmd and cmd[0] not in ALLOWED_CMDS:"},{"line_number":65,"context_line":"        msg \u003d _(\"Dom0 execution of \u0027%s\u0027 is not permitted\") % cmd[0]"},{"line_number":66,"context_line":"        raise PluginError(msg)"},{"line_number":67,"context_line":"    cmd_input \u003d None"},{"line_number":68,"context_line":"    if args.get(\u0027cmd_input\u0027) is not None:"},{"line_number":69,"context_line":"        cmd_input \u003d args.get(\u0027cmd_input\u0027)"},{"line_number":70,"context_line":"    result \u003d _run_command(cmd, cmd_input)"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"AAAATn%2F8%2BCk%3D","line":67,"in_reply_to":"AAAATn%2F9Bi8%3D","updated":"2013-12-18 09:33:55.000000000","message":"Done","commit_id":"773e73cde7c4fb0a6ece9979097a3107ce931902"},{"author":{"_account_id":6670,"name":"Amir Sadoughi","email":"amir.sadoughi@rackspace.com","username":"amir-sadoughi"},"change_message_id":"61bb3815404e4f65b85fccdded042e261fa9c34f","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    if cmd and cmd[0] not in ALLOWED_CMDS:"},{"line_number":65,"context_line":"        msg \u003d _(\"Dom0 execution of \u0027%s\u0027 is not permitted\") % cmd[0]"},{"line_number":66,"context_line":"        raise PluginError(msg)"},{"line_number":67,"context_line":"    cmd_input \u003d None"},{"line_number":68,"context_line":"    if args.get(\u0027cmd_input\u0027) is not None:"},{"line_number":69,"context_line":"        cmd_input \u003d args.get(\u0027cmd_input\u0027)"},{"line_number":70,"context_line":"    result \u003d _run_command(cmd, cmd_input)"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"AAAATn%2F9Bi8%3D","line":67,"in_reply_to":"AAAATn%2F9CzY%3D","updated":"2013-12-17 15:39:15.000000000","message":":) No worries.\n\nYes, the code should be simplified, I agree.","commit_id":"773e73cde7c4fb0a6ece9979097a3107ce931902"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"f42c4379fc1aa36581f3ff9ab56ca687e6a580a2","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    if cmd and cmd[0] not in ALLOWED_CMDS:"},{"line_number":65,"context_line":"        msg \u003d _(\"Dom0 execution of \u0027%s\u0027 is not permitted\") % cmd[0]"},{"line_number":66,"context_line":"        raise PluginError(msg)"},{"line_number":67,"context_line":"    cmd_input \u003d None"},{"line_number":68,"context_line":"    if args.get(\u0027cmd_input\u0027) is not None:"},{"line_number":69,"context_line":"        cmd_input \u003d args.get(\u0027cmd_input\u0027)"},{"line_number":70,"context_line":"    result \u003d _run_command(cmd, cmd_input)"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"AAAATn%2F9CzY%3D","line":67,"in_reply_to":"AAAATn%2F9FnU%3D","updated":"2013-12-17 11:21:45.000000000","message":"Ah, jetlag wins again.\n\nThe code should still be simplified, though, to cmd_input \u003d args.get(\u0027cmd_input\u0027).  There is no need for separate code paths differentiating None and not None.","commit_id":"773e73cde7c4fb0a6ece9979097a3107ce931902"},{"author":{"_account_id":6670,"name":"Amir Sadoughi","email":"amir.sadoughi@rackspace.com","username":"amir-sadoughi"},"change_message_id":"517c58fe2900013a47846a03a0bbca6c5174d76b","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    if cmd and cmd[0] not in ALLOWED_CMDS:"},{"line_number":65,"context_line":"        msg \u003d _(\"Dom0 execution of \u0027%s\u0027 is not permitted\") % cmd[0]"},{"line_number":66,"context_line":"        raise PluginError(msg)"},{"line_number":67,"context_line":"    cmd_input \u003d None"},{"line_number":68,"context_line":"    if args.get(\u0027cmd_input\u0027) is not None:"},{"line_number":69,"context_line":"        cmd_input \u003d args.get(\u0027cmd_input\u0027)"},{"line_number":70,"context_line":"    result \u003d _run_command(cmd, cmd_input)"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"AAAATn%2F9FnU%3D","line":67,"in_reply_to":"AAAATn%2F9Fuc%3D","updated":"2013-12-16 22:15:30.000000000","message":"Can the code be simplified? Yes.\n\nIs None required in the arguments to dict.get to avoid KeyError? No.\n\nget(...)\n    D.get(k[,d]) -\u003e D[k] if k in D, else d.  d defaults to None.","commit_id":"773e73cde7c4fb0a6ece9979097a3107ce931902"},{"author":{"_account_id":6670,"name":"Amir Sadoughi","email":"amir.sadoughi@rackspace.com","username":"amir-sadoughi"},"change_message_id":"f750568e6a616ede3a30396a3c06177e159d0b61","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    if cmd and cmd[0] not in ALLOWED_CMDS:"},{"line_number":65,"context_line":"        msg \u003d _(\"Dom0 execution of \u0027%s\u0027 is not permitted\") % cmd[0]"},{"line_number":66,"context_line":"        raise PluginError(msg)"},{"line_number":67,"context_line":"    cmd_input \u003d args.get(\u0027cmd_input\u0027)"},{"line_number":68,"context_line":"    result \u003d _run_command(cmd, cmd_input)"},{"line_number":69,"context_line":"    return json.dumps(result)"},{"line_number":70,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":2,"id":"AAAATn%2F87%2Bg%3D","line":67,"updated":"2013-12-18 15:51:38.000000000","message":"If you json.dumps in the other file, of course you\u0027ll have to json.loads here.","commit_id":"55186dfa86345c0b2afd597185b5c3b3c3f56d68"},{"author":{"_account_id":6794,"name":"Simon Pasquier","email":"pasquier.simon@gmail.com","username":"simon-pasquier"},"change_message_id":"6ae469768c7a09b5be5aceb1a922d6a27d8cb5be","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    if cmd and cmd[0] not in ALLOWED_CMDS:"},{"line_number":65,"context_line":"        msg \u003d _(\"Dom0 execution of \u0027%s\u0027 is not permitted\") % cmd[0]"},{"line_number":66,"context_line":"        raise PluginError(msg)"},{"line_number":67,"context_line":"    cmd_input \u003d args.get(\u0027cmd_input\u0027)"},{"line_number":68,"context_line":"    result \u003d _run_command(cmd, cmd_input)"},{"line_number":69,"context_line":"    return json.dumps(result)"},{"line_number":70,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":2,"id":"AAAATn%2F84Ow%3D","line":67,"in_reply_to":"AAAATn%2F87%2Bg%3D","updated":"2013-12-19 08:53:26.000000000","message":"Done","commit_id":"55186dfa86345c0b2afd597185b5c3b3c3f56d68"}]}
