)]}'
{"tempest/lib/common/ssh.py":[{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"093e69fe8587f06cfb530997c66076ed0a1cb68a","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class Client(object):"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def __init__(self, host, username, password\u003dNone, timeout\u003d300, pkey\u003dNone,"},{"line_number":39,"context_line":"                 channel_timeout\u003d10, look_for_keys\u003dFalse, key_filename\u003dNone,"},{"line_number":40,"context_line":"                 port\u003d22, proxy_client\u003dNone):"},{"line_number":41,"context_line":"        self.host \u003d host"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_da9639ef","line":38,"updated":"2017-01-30 12:53:10.000000000","message":"please add doc stings, at least the proxy_client \u0027s type should be described.","commit_id":"3fc098d4a29254a05c0d2c7baf389362ef56e628"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"142185d7c25efc4517daf21d889cf4fbc6f01a95","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class Client(object):"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def __init__(self, host, username, password\u003dNone, timeout\u003d300, pkey\u003dNone,"},{"line_number":39,"context_line":"                 channel_timeout\u003d10, look_for_keys\u003dFalse, key_filename\u003dNone,"},{"line_number":40,"context_line":"                 port\u003d22, proxy_client\u003dNone):"},{"line_number":41,"context_line":"        self.host \u003d host"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_feef501b","line":38,"in_reply_to":"3a461143_da9639ef","updated":"2017-01-30 23:44:20.000000000","message":"Done","commit_id":"3fc098d4a29254a05c0d2c7baf389362ef56e628"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"093e69fe8587f06cfb530997c66076ed0a1cb68a","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        self.channel_timeout \u003d float(channel_timeout)"},{"line_number":53,"context_line":"        self.buf_size \u003d 1024"},{"line_number":54,"context_line":"        self.proxy_client \u003d proxy_client"},{"line_number":55,"context_line":"        self._proxy_conn \u003d None"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def _get_ssh_connection(self, sleep\u003d1.5, backoff\u003d1):"},{"line_number":58,"context_line":"        \"\"\"Returns an ssh connection to the specified host.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_3a0f3d89","line":55,"updated":"2017-01-30 12:53:10.000000000","message":"Please remove _proxy_conn, unless you can prove it is   required because of an api document.","commit_id":"3fc098d4a29254a05c0d2c7baf389362ef56e628"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"142185d7c25efc4517daf21d889cf4fbc6f01a95","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        self.channel_timeout \u003d float(channel_timeout)"},{"line_number":53,"context_line":"        self.buf_size \u003d 1024"},{"line_number":54,"context_line":"        self.proxy_client \u003d proxy_client"},{"line_number":55,"context_line":"        self._proxy_conn \u003d None"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def _get_ssh_connection(self, sleep\u003d1.5, backoff\u003d1):"},{"line_number":58,"context_line":"        \"\"\"Returns an ssh connection to the specified host.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_5edf8468","line":55,"in_reply_to":"3a461143_3a0f3d89","updated":"2017-01-30 23:44:20.000000000","message":"i added a reference","commit_id":"3fc098d4a29254a05c0d2c7baf389362ef56e628"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"093e69fe8587f06cfb530997c66076ed0a1cb68a","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        _start_time \u003d time.time()"},{"line_number":64,"context_line":"        proxy_chan \u003d self._get_proxy_channel()"},{"line_number":65,"context_line":"        if proxy_chan:"},{"line_number":66,"context_line":"            cmd \u003d \u0027nc %s %s\u0027 % (self.host, self.port)"},{"line_number":67,"context_line":"            proxy_chan.exec_command(cmd)"},{"line_number":68,"context_line":"        if self.pkey is not None:"},{"line_number":69,"context_line":"            LOG.info(\"Creating ssh connection to \u0027%s:%d\u0027 as \u0027%s\u0027\""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_fa66954f","line":66,"updated":"2017-01-30 12:53:10.000000000","message":"The nc call should be part of the helper function.","commit_id":"3fc098d4a29254a05c0d2c7baf389362ef56e628"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"093e69fe8587f06cfb530997c66076ed0a1cb68a","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        connection.close()"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def _get_proxy_channel(self):"},{"line_number":187,"context_line":"        if self.proxy_client is None:"},{"line_number":188,"context_line":"            return None"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        conn \u003d self.proxy_client._get_ssh_connection()"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_1ae521db","line":187,"updated":"2017-01-30 12:53:10.000000000","message":"The condition should be part of the main function, here it is just confusing. Please remove the if from here, and only call this function when needed.","commit_id":"3fc098d4a29254a05c0d2c7baf389362ef56e628"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"142185d7c25efc4517daf21d889cf4fbc6f01a95","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        connection.close()"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def _get_proxy_channel(self):"},{"line_number":187,"context_line":"        if self.proxy_client is None:"},{"line_number":188,"context_line":"            return None"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        conn \u003d self.proxy_client._get_ssh_connection()"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_ded1b458","line":187,"in_reply_to":"3a461143_1ae521db","updated":"2017-01-30 23:44:20.000000000","message":"Done","commit_id":"3fc098d4a29254a05c0d2c7baf389362ef56e628"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"093e69fe8587f06cfb530997c66076ed0a1cb68a","unresolved":false,"context_lines":[{"line_number":188,"context_line":"            return None"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        conn \u003d self.proxy_client._get_ssh_connection()"},{"line_number":191,"context_line":"        self._proxy_conn \u003d conn  # Keep a reference to avoid g/c"},{"line_number":192,"context_line":"        transport \u003d conn.get_transport()"},{"line_number":193,"context_line":"        return transport.open_session()"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_3ab3bdea","line":191,"updated":"2017-01-30 12:53:10.000000000","message":"If we really need to keep an extra ref it is likely a bug somewhere.","commit_id":"3fc098d4a29254a05c0d2c7baf389362ef56e628"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"142185d7c25efc4517daf21d889cf4fbc6f01a95","unresolved":false,"context_lines":[{"line_number":188,"context_line":"            return None"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        conn \u003d self.proxy_client._get_ssh_connection()"},{"line_number":191,"context_line":"        self._proxy_conn \u003d conn  # Keep a reference to avoid g/c"},{"line_number":192,"context_line":"        transport \u003d conn.get_transport()"},{"line_number":193,"context_line":"        return transport.open_session()"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_3ecd58b7","line":191,"in_reply_to":"3a461143_3ab3bdea","updated":"2017-01-30 23:44:20.000000000","message":"i added a reference","commit_id":"3fc098d4a29254a05c0d2c7baf389362ef56e628"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"ed132d709e18168ff73672435f33c5787f883e27","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                 port\u003d22, proxy_client\u003dNone):"},{"line_number":41,"context_line":"        \"\"\"SSH client."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        :param proxy_client: Another SSH client to provide a transport"},{"line_number":44,"context_line":"            for ssh-over-ssh.  The default is None, which means"},{"line_number":45,"context_line":"            not to use ssh-over-ssh."},{"line_number":46,"context_line":"        :type proxy_client: ``tempest.lib.common.ssh.Client`` object"},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":"        self.host \u003d host"},{"line_number":49,"context_line":"        self.username \u003d username"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_3c98e41b","line":46,"range":{"start_line":43,"start_character":0,"end_line":46,"end_character":68},"updated":"2017-01-31 16:56:06.000000000","message":"NIT: I would prefer a full docstring here, however still better than nothing (like before)","commit_id":"018575514c7cd9f542dda1e76918ef8918d7e4f8"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"9a199c4bf1a20ff155961d61bf75f9343efb7afb","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                 port\u003d22, proxy_client\u003dNone):"},{"line_number":41,"context_line":"        \"\"\"SSH client."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        :param proxy_client: Another SSH client to provide a transport"},{"line_number":44,"context_line":"            for ssh-over-ssh.  The default is None, which means"},{"line_number":45,"context_line":"            not to use ssh-over-ssh."},{"line_number":46,"context_line":"        :type proxy_client: ``tempest.lib.common.ssh.Client`` object"},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":"        self.host \u003d host"},{"line_number":49,"context_line":"        self.username \u003d username"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_6e98e478","line":46,"range":{"start_line":43,"start_character":0,"end_line":46,"end_character":68},"in_reply_to":"3a461143_3c98e41b","updated":"2017-01-31 23:46:04.000000000","message":"Done","commit_id":"018575514c7cd9f542dda1e76918ef8918d7e4f8"}],"tempest/tests/lib/test_ssh.py":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"ed132d709e18168ff73672435f33c5787f883e27","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"3a461143_9770d1a5","updated":"2017-01-31 16:56:06.000000000","message":"Could you add unit tests? Most will have to be mocked, but you can at least check that a not-None channel is passed onto the parameter when proxy is used.","commit_id":"018575514c7cd9f542dda1e76918ef8918d7e4f8"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"9a199c4bf1a20ff155961d61bf75f9343efb7afb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"3a461143_ee8a141a","in_reply_to":"3a461143_9770d1a5","updated":"2017-01-31 23:46:04.000000000","message":"Done","commit_id":"018575514c7cd9f542dda1e76918ef8918d7e4f8"}]}
