)]}'
{"rally/plugins/openstack/validators.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"4ebc2d0450187dbe223d3345de4c780e0e49c1b1","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    def __init__(self, network_name):"},{"line_number":83,"context_line":"        \"\"\"Validator checks that external network with given name exists."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        :param network_name: name of validated network"},{"line_number":86,"context_line":"        \"\"\""},{"line_number":87,"context_line":"        super(ExternalNetworkExistsValidator, self).__init__()"},{"line_number":88,"context_line":"        self.network_name \u003d network_name"}],"source_content_type":"text/x-python","patch_set":7,"id":"5ff73747_e4ba8c08","line":85,"range":{"start_line":85,"start_character":8,"end_line":85,"end_character":54},"updated":"2017-04-25 13:36:59.000000000","message":"it misleads. please, rename the argument to \"param_name: Name of the parameter with the name of a network to validate\"","commit_id":"56332cc81d2ffbeb7ace28b546479b125a2850d5"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"4ebc2d0450187dbe223d3345de4c780e0e49c1b1","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def validate(self, config, credentials, plugin_cls, plugin_cfg):"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        clients \u003d credentials[\"openstack\"][\"admin\"].clients()"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        ext_network \u003d config.get(\"args\", {}).get(self.network_name)"},{"line_number":95,"context_line":"        if not ext_network:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5ff73747_6438bc3c","line":92,"range":{"start_line":92,"start_character":8,"end_line":92,"end_character":61},"updated":"2017-04-25 13:36:59.000000000","message":"we should try to avoid usage of admin user since most scenarios use regular users. Please wrap check with for loop:\n\n    for user in credentials[\"openstack\"][\"users\"]:\n         clients \u003d user.clients()\n         networks \u003d ...\n\nAlso, it would be nice include username to error message at L104 - \"...not found by user %(username)s\"","commit_id":"56332cc81d2ffbeb7ace28b546479b125a2850d5"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"4ebc2d0450187dbe223d3345de4c780e0e49c1b1","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        if not ext_network:"},{"line_number":96,"context_line":"            return"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        networks \u003d [net.name for net"},{"line_number":99,"context_line":"                    in clients.nova().floating_ip_pools.list()]"},{"line_number":100,"context_line":"        if networks and isinstance(networks[0], dict):"},{"line_number":101,"context_line":"            networks \u003d [n[\"name\"] for n in networks]"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        if ext_network not in networks:"},{"line_number":104,"context_line":"            message \u003d (\"External (floating) network with name %(network)s \""}],"source_content_type":"text/x-python","patch_set":7,"id":"5ff73747_c48af019","line":101,"range":{"start_line":98,"start_character":8,"end_line":101,"end_character":52},"updated":"2017-04-25 13:36:59.000000000","message":"Latest novaclient doesn\u0027t include floating_ip_pools.list method. Neutronclient should be used instead:\n\n      networks \u003d clients.neutron().list_networks()[\"networks\"]\n      external_networks \u003d [net[\"name\"] for net in networks if net.get(\"router:external\", False)]","commit_id":"56332cc81d2ffbeb7ace28b546479b125a2850d5"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"4ebc2d0450187dbe223d3345de4c780e0e49c1b1","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                       \"Available networks: %(networks)s\") % {"},{"line_number":107,"context_line":"                \"network\": ext_network,"},{"line_number":108,"context_line":"                \"networks\": networks}"},{"line_number":109,"context_line":"            return ValidationResult(False, message)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5ff73747_deee41b3","line":109,"range":{"start_line":109,"start_character":19,"end_line":109,"end_character":36},"updated":"2017-04-25 13:36:59.000000000","message":"let\u0027s use `self.fail`","commit_id":"56332cc81d2ffbeb7ace28b546479b125a2850d5"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"5f2bc2f18ce09bde46bade0628907d90943166cf","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        result \u003d []"},{"line_number":94,"context_line":"        for user in users:"},{"line_number":95,"context_line":"            clients \u003d user[\"credential\"]"},{"line_number":96,"context_line":"            ext_network \u003d config.get(\"args\", {}).get(self.param_name)"},{"line_number":97,"context_line":"            if not ext_network:"},{"line_number":98,"context_line":"                return"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"            networks \u003d clients.clients().neutron().list_networks()[\"networks\"]"},{"line_number":101,"context_line":"            external_networks \u003d [net[\"name\"] for net in networks if"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ff73747_ed8f96ca","line":98,"range":{"start_line":96,"start_character":12,"end_line":98,"end_character":22},"updated":"2017-04-28 12:16:34.000000000","message":"you can move it to L91","commit_id":"b8f97d93480cff3e65c8b0f62a7fbda02695a48c"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"7519dd805ddbe541cc35ed9b2a58cb7541a2ae2c","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                                                             networks)"},{"line_number":110,"context_line":"                result.append(message)"},{"line_number":111,"context_line":"        if result:"},{"line_number":112,"context_line":"            return validation.ValidationResult(False, result)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5ff73747_351b6dca","line":112,"range":{"start_line":112,"start_character":19,"end_line":112,"end_character":61},"updated":"2017-04-30 07:46:32.000000000","message":"Pls use self.fail()","commit_id":"e4d2d57799e0c8239d69c5ba5f9bb8e43282eaf7"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"43c3e89611a3c35679f88d261b0c70ada21177ad","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        users \u003d credentials[\"openstack\"][\"users\"]"},{"line_number":94,"context_line":"        result \u003d []"},{"line_number":95,"context_line":"        for user in users:"},{"line_number":96,"context_line":"            clients \u003d user[\"credential\"]"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"            networks \u003d clients.clients().neutron().list_networks()[\"networks\"]"},{"line_number":99,"context_line":"            external_networks \u003d [net[\"name\"] for net in networks if"}],"source_content_type":"text/x-python","patch_set":14,"id":"5ff73747_84840cb3","line":96,"range":{"start_line":96,"start_character":12,"end_line":96,"end_character":19},"updated":"2017-05-03 09:25:05.000000000","message":"it is better to name it \"creds\"","commit_id":"3e7f5a9f8fbe499775c48836722863d53debf904"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"43c3e89611a3c35679f88d261b0c70ada21177ad","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            if ext_network not in external_networks:"},{"line_number":102,"context_line":"                message \u003d (\"External (floating) network with name {1} \""},{"line_number":103,"context_line":"                           \"not found by user {0}. \""},{"line_number":104,"context_line":"                           \"Available networks: {2}\").format(user,"},{"line_number":105,"context_line":"                                                             ext_network,"},{"line_number":106,"context_line":"                                                             networks)"},{"line_number":107,"context_line":"                result.append(message)"}],"source_content_type":"text/x-python","patch_set":14,"id":"5ff73747_64aa201a","line":104,"range":{"start_line":104,"start_character":61,"end_line":104,"end_character":65},"updated":"2017-05-03 09:25:05.000000000","message":"it will include two much information. Let\u0027s use just user[\"credential\"].username","commit_id":"3e7f5a9f8fbe499775c48836722863d53debf904"}]}
