)]}'
{"tempest/common/waiters.py":[{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"a9edd7e21c6ac0a38632a19e2ba8b131f2a18065","unresolved":false,"context_lines":[{"line_number":289,"context_line":"    return body"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"def wait_for_interface_detach(client, server_id, port_id):"},{"line_number":293,"context_line":"    body \u003d client.list_interfaces(server_id)[\u0027interfaceAttachments\u0027]"},{"line_number":294,"context_line":"    ports \u003d [iface[\u0027port_id\u0027] for iface in body]"},{"line_number":295,"context_line":"    start \u003d int(time.time())"}],"source_content_type":"text/x-python","patch_set":1,"id":"df7087c5_86604203","line":292,"range":{"start_line":292,"start_character":0,"end_line":292,"end_character":58},"updated":"2018-03-23 02:38:22.000000000","message":"better to add docstring for this","commit_id":"22363be2104f0ce29fc3d299005ea85ac40c0b9f"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"dfa9b960773bf24e90771ad1df61cd2953bec4be","unresolved":false,"context_lines":[{"line_number":289,"context_line":"    return body"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"def wait_for_interface_detach(client, server_id, port_id):"},{"line_number":293,"context_line":"    body \u003d client.list_interfaces(server_id)[\u0027interfaceAttachments\u0027]"},{"line_number":294,"context_line":"    ports \u003d [iface[\u0027port_id\u0027] for iface in body]"},{"line_number":295,"context_line":"    start \u003d int(time.time())"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_5553a93f","line":292,"range":{"start_line":292,"start_character":0,"end_line":292,"end_character":58},"in_reply_to":"df7087c5_86604203","updated":"2018-03-29 17:45:52.000000000","message":"Done","commit_id":"22363be2104f0ce29fc3d299005ea85ac40c0b9f"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"a9edd7e21c6ac0a38632a19e2ba8b131f2a18065","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        body \u003d client.list_interfaces(server_id)[\u0027interfaceAttachments\u0027]"},{"line_number":300,"context_line":"        ports \u003d [iface[\u0027port_id\u0027] for iface in body]"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        timed_out \u003d int(time.time()) - start \u003e\u003d client.build_timeout"},{"line_number":303,"context_line":"        if port_id not in ports and timed_out:"},{"line_number":304,"context_line":"            message \u003d (\u0027Interface %s failed to detach within the required \u0027"},{"line_number":305,"context_line":"                       \u0027time (%s s)\u0027 % (port_id, client.build_timeout))"},{"line_number":306,"context_line":"            raise lib_exc.TimeoutException(message)"}],"source_content_type":"text/x-python","patch_set":1,"id":"df7087c5_916abeb0","line":303,"range":{"start_line":302,"start_character":0,"end_line":303,"end_character":46},"updated":"2018-03-23 02:38:22.000000000","message":"How about:\n    if port_id not in ports:\n        return body\n    timed_out \u003d int(time.time()) - start \u003e\u003d client.build_timeout\n    if timed_out:","commit_id":"22363be2104f0ce29fc3d299005ea85ac40c0b9f"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"dfa9b960773bf24e90771ad1df61cd2953bec4be","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        body \u003d client.list_interfaces(server_id)[\u0027interfaceAttachments\u0027]"},{"line_number":300,"context_line":"        ports \u003d [iface[\u0027port_id\u0027] for iface in body]"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        timed_out \u003d int(time.time()) - start \u003e\u003d client.build_timeout"},{"line_number":303,"context_line":"        if port_id not in ports and timed_out:"},{"line_number":304,"context_line":"            message \u003d (\u0027Interface %s failed to detach within the required \u0027"},{"line_number":305,"context_line":"                       \u0027time (%s s)\u0027 % (port_id, client.build_timeout))"},{"line_number":306,"context_line":"            raise lib_exc.TimeoutException(message)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_5006571f","line":303,"range":{"start_line":302,"start_character":0,"end_line":303,"end_character":46},"in_reply_to":"df7087c5_916abeb0","updated":"2018-03-29 17:45:52.000000000","message":"Actually the \u0027port_id not in ports\u0027 bit is wrong in the original code. We *want* port_id to NOT be in ports, since we\u0027re waiting for it to be detached. I\u0027ve tried to clarify the code.","commit_id":"22363be2104f0ce29fc3d299005ea85ac40c0b9f"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"a9edd7e21c6ac0a38632a19e2ba8b131f2a18065","unresolved":false,"context_lines":[{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        timed_out \u003d int(time.time()) - start \u003e\u003d client.build_timeout"},{"line_number":303,"context_line":"        if port_id not in ports and timed_out:"},{"line_number":304,"context_line":"            message \u003d (\u0027Interface %s failed to detach within the required \u0027"},{"line_number":305,"context_line":"                       \u0027time (%s s)\u0027 % (port_id, client.build_timeout))"},{"line_number":306,"context_line":"            raise lib_exc.TimeoutException(message)"},{"line_number":307,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df7087c5_f171baa9","line":304,"range":{"start_line":304,"start_character":44,"end_line":304,"end_character":53},"updated":"2018-03-23 02:38:22.000000000","message":"How about \u0027to detach from server %s\u0027","commit_id":"22363be2104f0ce29fc3d299005ea85ac40c0b9f"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"dfa9b960773bf24e90771ad1df61cd2953bec4be","unresolved":false,"context_lines":[{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        timed_out \u003d int(time.time()) - start \u003e\u003d client.build_timeout"},{"line_number":303,"context_line":"        if port_id not in ports and timed_out:"},{"line_number":304,"context_line":"            message \u003d (\u0027Interface %s failed to detach within the required \u0027"},{"line_number":305,"context_line":"                       \u0027time (%s s)\u0027 % (port_id, client.build_timeout))"},{"line_number":306,"context_line":"            raise lib_exc.TimeoutException(message)"},{"line_number":307,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_f0068b1c","line":304,"range":{"start_line":304,"start_character":44,"end_line":304,"end_character":53},"in_reply_to":"df7087c5_f171baa9","updated":"2018-03-29 17:45:52.000000000","message":"Done","commit_id":"22363be2104f0ce29fc3d299005ea85ac40c0b9f"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"9df3fba553f7b17ebff9a98638ceec308ece1b58","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        body \u003d client.list_interfaces(server_id)[\u0027interfaceAttachments\u0027]"},{"line_number":301,"context_line":"        ports \u003d [iface[\u0027port_id\u0027] for iface in body]"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"        iface_detached \u003d port_id not in ports"},{"line_number":304,"context_line":"        timed_out \u003d int(time.time()) - start \u003e\u003d client.build_timeout"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"        if iface_detached:"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_2bc8e371","line":303,"range":{"start_line":303,"start_character":8,"end_line":303,"end_character":22},"updated":"2018-04-03 02:48:30.000000000","message":"I think the code \u0027port_id not in ports\u0027 is clear enought for understanding, so seems no need a new variable \u0027iface_detached\u0027?","commit_id":"08544b6f8b64f03112e02ba2cd73e515a35f98ee"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"5c5cdb6bb1dbbf34744d5ed024446c155d77d0ef","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        body \u003d client.list_interfaces(server_id)[\u0027interfaceAttachments\u0027]"},{"line_number":301,"context_line":"        ports \u003d [iface[\u0027port_id\u0027] for iface in body]"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"        iface_detached \u003d port_id not in ports"},{"line_number":304,"context_line":"        timed_out \u003d int(time.time()) - start \u003e\u003d client.build_timeout"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"        if iface_detached:"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_aa27e2c6","line":303,"range":{"start_line":303,"start_character":8,"end_line":303,"end_character":22},"in_reply_to":"bf659307_2bc8e371","updated":"2018-04-04 15:00:44.000000000","message":"Done","commit_id":"08544b6f8b64f03112e02ba2cd73e515a35f98ee"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"9df3fba553f7b17ebff9a98638ceec308ece1b58","unresolved":false,"context_lines":[{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        if timed_out:"},{"line_number":310,"context_line":"            message \u003d (\u0027Interface %s failed to detach from server %s within \u0027"},{"line_number":311,"context_line":"                       \u0027the required time (%s s)\u0027 % (server_id, port_id,"},{"line_number":312,"context_line":"                                                     client.build_timeout))"},{"line_number":313,"context_line":"            raise lib_exc.TimeoutException(message)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_6bd25b2a","line":311,"range":{"start_line":311,"start_character":53,"end_line":311,"end_character":71},"updated":"2018-04-03 02:48:30.000000000","message":"should be \u0027port_id, server_id\u0027?","commit_id":"08544b6f8b64f03112e02ba2cd73e515a35f98ee"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"5c5cdb6bb1dbbf34744d5ed024446c155d77d0ef","unresolved":false,"context_lines":[{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        if timed_out:"},{"line_number":310,"context_line":"            message \u003d (\u0027Interface %s failed to detach from server %s within \u0027"},{"line_number":311,"context_line":"                       \u0027the required time (%s s)\u0027 % (server_id, port_id,"},{"line_number":312,"context_line":"                                                     client.build_timeout))"},{"line_number":313,"context_line":"            raise lib_exc.TimeoutException(message)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_d810ed52","line":311,"range":{"start_line":311,"start_character":53,"end_line":311,"end_character":71},"in_reply_to":"bf659307_6bd25b2a","updated":"2018-04-04 15:00:44.000000000","message":"Done","commit_id":"08544b6f8b64f03112e02ba2cd73e515a35f98ee"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"164a8eb0130dd356df476bb72544d0f03ab7d698","unresolved":false,"context_lines":[{"line_number":302,"context_line":""},{"line_number":303,"context_line":"        timed_out \u003d int(time.time()) - start \u003e\u003d client.build_timeout"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        if port_id not in ports:"},{"line_number":306,"context_line":"            return body"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        if timed_out:"},{"line_number":309,"context_line":"            message \u003d (\u0027Interface %s failed to detach from server %s within \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_08fd0e6d","line":306,"range":{"start_line":305,"start_character":0,"end_line":306,"end_character":23},"updated":"2018-05-11 21:40:02.000000000","message":"nit: we can move to L302 for better organization.","commit_id":"41d2545c86acde6f9e2bedb07537b4e9c3d2d6c3"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"865fb4591972e132519f849fdf8dfefed79cf8e1","unresolved":false,"context_lines":[{"line_number":302,"context_line":""},{"line_number":303,"context_line":"        timed_out \u003d int(time.time()) - start \u003e\u003d client.build_timeout"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        if port_id not in ports:"},{"line_number":306,"context_line":"            return body"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        if timed_out:"},{"line_number":309,"context_line":"            message \u003d (\u0027Interface %s failed to detach from server %s within \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_cb2e2791","line":306,"range":{"start_line":305,"start_character":0,"end_line":306,"end_character":23},"in_reply_to":"5f7c97a3_08fd0e6d","updated":"2018-05-13 13:46:28.000000000","message":"Done","commit_id":"41d2545c86acde6f9e2bedb07537b4e9c3d2d6c3"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"164a8eb0130dd356df476bb72544d0f03ab7d698","unresolved":false,"context_lines":[{"line_number":306,"context_line":"            return body"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        if timed_out:"},{"line_number":309,"context_line":"            message \u003d (\u0027Interface %s failed to detach from server %s within \u0027"},{"line_number":310,"context_line":"                       \u0027the required time (%s s)\u0027 % (port_id, server_id,"},{"line_number":311,"context_line":"                                                     client.build_timeout))"},{"line_number":312,"context_line":"            raise lib_exc.TimeoutException(message)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_48078683","line":309,"range":{"start_line":309,"start_character":24,"end_line":309,"end_character":33},"updated":"2018-05-11 21:40:02.000000000","message":"Is \"interface\" synonymous with \"port\"? As first %s is port_id.","commit_id":"41d2545c86acde6f9e2bedb07537b4e9c3d2d6c3"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"865fb4591972e132519f849fdf8dfefed79cf8e1","unresolved":false,"context_lines":[{"line_number":306,"context_line":"            return body"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        if timed_out:"},{"line_number":309,"context_line":"            message \u003d (\u0027Interface %s failed to detach from server %s within \u0027"},{"line_number":310,"context_line":"                       \u0027the required time (%s s)\u0027 % (port_id, server_id,"},{"line_number":311,"context_line":"                                                     client.build_timeout))"},{"line_number":312,"context_line":"            raise lib_exc.TimeoutException(message)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_4b3a17cc","line":309,"range":{"start_line":309,"start_character":24,"end_line":309,"end_character":33},"in_reply_to":"5f7c97a3_48078683","updated":"2018-05-13 13:46:28.000000000","message":"Basically, yeah: https://developer.openstack.org/api-ref/compute/#port-interfaces-servers-os-interface","commit_id":"41d2545c86acde6f9e2bedb07537b4e9c3d2d6c3"}]}
