)]}'
{"openstack_dashboard/dashboards/project/network_topology/views.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"a243e9e4a1c44c813e465b68cc69c94187dddb07","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        self.add_resource_url(\u0027horizon:project:instances:detail\u0027,"},{"line_number":60,"context_line":"                              data[\u0027servers\u0027])"},{"line_number":61,"context_line":"        # Get quantum data"},{"line_number":62,"context_line":"        quantumclient \u003d api.quantum.quantumclient(request)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        networks \u003d []"},{"line_number":65,"context_line":"        for net in quantumclient.list_networks()[\u0027networks\u0027]:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2F6cM%3D","line":62,"updated":"2013-06-06 04:53:18.000000000","message":"As best practice, please enclose the api calls with try-except block.","commit_id":"0aa7f81c7adf1907710ba2684dd7ca56446656e1"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"a243e9e4a1c44c813e465b68cc69c94187dddb07","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        quantumclient \u003d api.quantum.quantumclient(request)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        networks \u003d []"},{"line_number":65,"context_line":"        for net in quantumclient.list_networks()[\u0027networks\u0027]:"},{"line_number":66,"context_line":"            if (net[\u0027router:external\u0027] is True or"},{"line_number":67,"context_line":"                        net[\u0027shared\u0027] is True or"},{"line_number":68,"context_line":"                        net[\u0027tenant_id\u0027] \u003d\u003d request.user.tenant_id):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2F6b4%3D","line":65,"updated":"2013-06-06 04:53:18.000000000","message":"If list_networks() returns empty, the call to [\u0027networks\u0027] will hit an exception.","commit_id":"0aa7f81c7adf1907710ba2684dd7ca56446656e1"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"a243e9e4a1c44c813e465b68cc69c94187dddb07","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                        net[\u0027tenant_id\u0027] \u003d\u003d request.user.tenant_id):"},{"line_number":69,"context_line":"                networks.append(net)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        subnets \u003d quantumclient.list_subnets()[\u0027subnets\u0027]"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        ports \u003d quantumclient.list_ports()"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2F6cE%3D","line":71,"updated":"2013-06-06 04:53:18.000000000","message":"Same issue here","commit_id":"0aa7f81c7adf1907710ba2684dd7ca56446656e1"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"a243e9e4a1c44c813e465b68cc69c94187dddb07","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        ports \u003d quantumclient.list_ports()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        routers \u003d [rout for rout in quantumclient.list_routers()[\u0027routers\u0027] if"},{"line_number":76,"context_line":"                    rout[\u0027tenant_id\u0027] \u003d\u003d request.user.tenant_id]"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        data[\u0027networks\u0027] \u003d sorted(networks,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2F6b8%3D","line":75,"updated":"2013-06-06 04:53:18.000000000","message":"Same here","commit_id":"0aa7f81c7adf1907710ba2684dd7ca56446656e1"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"21212d1845bbb599bcfaca9c112167ae01fcc537","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            novaclient \u003d api.nova.novaclient(request)"},{"line_number":56,"context_line":"            servers \u003d novaclient.servers.list()"},{"line_number":57,"context_line":"        except:"},{"line_number":58,"context_line":"            server \u003d []"},{"line_number":59,"context_line":"        data[\u0027servers\u0027] \u003d [{\u0027name\u0027: server.name,"},{"line_number":60,"context_line":"                            \u0027status\u0027: server.status,"},{"line_number":61,"context_line":"                            \u0027id\u0027: server.id} for server in servers]"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPX%2F%2Fzrw%3D","line":58,"updated":"2013-06-10 06:14:05.000000000","message":"This should be servers.","commit_id":"06275f05c4ed867c245ade9b025bfe2eab3e6051"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"7b6af264663cce9dd4b1f508100c0ddf050868f2","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        # Get nova data"},{"line_number":54,"context_line":"        try:"},{"line_number":55,"context_line":"            novaclient \u003d api.nova.novaclient(request)"},{"line_number":56,"context_line":"            servers \u003d novaclient.servers.list()"},{"line_number":57,"context_line":"        except:"},{"line_number":58,"context_line":"            servers \u003d []"},{"line_number":59,"context_line":"        data[\u0027servers\u0027] \u003d [{\u0027name\u0027: server.name,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPX%2F%2FxoA%3D","line":56,"updated":"2013-06-10 22:01:59.000000000","message":"Don\u0027t call the python-*client directly from th view class.  The api class should be used as a facade for making a backend call. If the method is not available, it needs to be added.\n\nUse api.nova.server_list(request) here.","commit_id":"d847cc2f3a684a3f4e874e77dafa7154fd9fbeb7"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"7b6af264663cce9dd4b1f508100c0ddf050868f2","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        # Get quantum data"},{"line_number":66,"context_line":"        try:"},{"line_number":67,"context_line":"            quantumclient \u003d api.quantum.quantumclient(request)"},{"line_number":68,"context_line":"            quantumnetworks \u003d quantumclient.list_networks().get(\u0027networks\u0027, [])"},{"line_number":69,"context_line":"            subnets \u003d quantumclient.list_subnets().get(\u0027subnets\u0027, [])"},{"line_number":70,"context_line":"            ports \u003d quantumclient.list_ports().get(\u0027ports\u0027, [])"},{"line_number":71,"context_line":"            quantumrouters \u003d quantumclient.list_routers().get(\u0027routers\u0027, [])"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPX%2F%2FxnI%3D","line":68,"updated":"2013-06-10 22:01:59.000000000","message":"Use  api.quantum.network_list() here instead","commit_id":"d847cc2f3a684a3f4e874e77dafa7154fd9fbeb7"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"7b6af264663cce9dd4b1f508100c0ddf050868f2","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            quantumclient \u003d api.quantum.quantumclient(request)"},{"line_number":68,"context_line":"            quantumnetworks \u003d quantumclient.list_networks().get(\u0027networks\u0027, [])"},{"line_number":69,"context_line":"            subnets \u003d quantumclient.list_subnets().get(\u0027subnets\u0027, [])"},{"line_number":70,"context_line":"            ports \u003d quantumclient.list_ports().get(\u0027ports\u0027, [])"},{"line_number":71,"context_line":"            quantumrouters \u003d quantumclient.list_routers().get(\u0027routers\u0027, [])"},{"line_number":72,"context_line":"        except:"},{"line_number":73,"context_line":"            quantumnetworks \u003d []"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPX%2F%2FxnA%3D","line":70,"updated":"2013-06-10 22:01:59.000000000","message":"Use  api.quantum.subnet_list() here instead","commit_id":"d847cc2f3a684a3f4e874e77dafa7154fd9fbeb7"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"7b6af264663cce9dd4b1f508100c0ddf050868f2","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            quantumnetworks \u003d quantumclient.list_networks().get(\u0027networks\u0027, [])"},{"line_number":69,"context_line":"            subnets \u003d quantumclient.list_subnets().get(\u0027subnets\u0027, [])"},{"line_number":70,"context_line":"            ports \u003d quantumclient.list_ports().get(\u0027ports\u0027, [])"},{"line_number":71,"context_line":"            quantumrouters \u003d quantumclient.list_routers().get(\u0027routers\u0027, [])"},{"line_number":72,"context_line":"        except:"},{"line_number":73,"context_line":"            quantumnetworks \u003d []"},{"line_number":74,"context_line":"            subnets \u003d []"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPX%2F%2Fxm8%3D","line":71,"updated":"2013-06-10 22:01:59.000000000","message":"Use  api.quantum.port_list() here instead","commit_id":"d847cc2f3a684a3f4e874e77dafa7154fd9fbeb7"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"85a0833cbe21f5ce8f0456c726068cdc9f54f02f","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            if (net[\u0027router:external\u0027] is True or"},{"line_number":81,"context_line":"                        net[\u0027shared\u0027] is True or"},{"line_number":82,"context_line":"                        net[\u0027tenant_id\u0027] \u003d\u003d request.user.tenant_id):"},{"line_number":83,"context_line":"                networks.append(net)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        routers \u003d [rout for rout in quantumrouters if"},{"line_number":86,"context_line":"                    rout[\u0027tenant_id\u0027] \u003d\u003d request.user.tenant_id]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPX%2F%2Fwfs%3D","line":83,"updated":"2013-06-11 08:59:45.000000000","message":"api.quantum.network_list_for_tenant() works for retrieving tenant networks and shared networks. network_list(request, {\u0027router:external\u0027: True}) works to retrieve external networks.\n\nIf you use these methods, we need to consider a case where lists returned by both methods may contain same entries. For exmaple, an external network is usually created by admin tenant.","commit_id":"d847cc2f3a684a3f4e874e77dafa7154fd9fbeb7"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"85a0833cbe21f5ce8f0456c726068cdc9f54f02f","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                networks.append(net)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        routers \u003d [rout for rout in quantumrouters if"},{"line_number":86,"context_line":"                    rout[\u0027tenant_id\u0027] \u003d\u003d request.user.tenant_id]"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        data[\u0027networks\u0027] \u003d sorted(networks,"},{"line_number":89,"context_line":"                                  key\u003dlambda x: x.get(\u0027router:external\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPX%2F%2FwfM%3D","line":86,"updated":"2013-06-11 08:59:45.000000000","message":"We should avoid fetching all routers in all tenants. Instead it is better to retrieve router list passing tenant_id in the request.\napi.quantum.router_list(tenant_id\u003dxxxxx) does this.","commit_id":"d847cc2f3a684a3f4e874e77dafa7154fd9fbeb7"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"ceae34aac7b04a96ca7a61717b61e37268afac31","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        data \u003d {}"},{"line_number":53,"context_line":"        # Get nova data"},{"line_number":54,"context_line":"        try:"},{"line_number":55,"context_line":"            servers \u003d api.nova.server_list(request)[0]"},{"line_number":56,"context_line":"        except:"},{"line_number":57,"context_line":"            servers \u003d []"},{"line_number":58,"context_line":"        data[\u0027servers\u0027] \u003d [{\u0027name\u0027: server.name,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPX%2F%2Fttc%3D","line":55,"updated":"2013-06-12 04:46:33.000000000","message":"Using [0] to access the data is not quite clear. It would be easier to read if the data is unpacked:\n    servers, more \u003d api.nova.server_list(request)","commit_id":"e9d7e9e1527c983144d158a2e25caa178925f72e"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"89e46b4dac7b4de7c6517da38fe5af4cfae5c514","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            quantum_routers \u003d api.quantum.router_list(request,"},{"line_number":75,"context_line":"                                    tenant_id\u003drequest.user.tenant_id)"},{"line_number":76,"context_line":"        except:"},{"line_number":77,"context_line":"            quantum_networks \u003d []"},{"line_number":78,"context_line":"            quantum_subnets \u003d []"},{"line_number":79,"context_line":"            quantum_ports \u003d []"},{"line_number":80,"context_line":"            quantum_routers \u003d []"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2F8aw%3D","line":77,"updated":"2013-06-17 18:15:03.000000000","message":"missed setting quantum_public_networks \u003d [] here","commit_id":"b3692746ceccd4cf98d7a78c362b493c1940a1fe"},{"author":{"_account_id":6638,"name":"Bradley Jones","email":"jones.bradley@me.com","username":"bradjones"},"change_message_id":"28f10aac90b9ea79eea92f9c78555d208f47429b","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            quantum_routers \u003d api.quantum.router_list(request,"},{"line_number":75,"context_line":"                                    tenant_id\u003drequest.user.tenant_id)"},{"line_number":76,"context_line":"        except:"},{"line_number":77,"context_line":"            quantum_networks \u003d []"},{"line_number":78,"context_line":"            quantum_subnets \u003d []"},{"line_number":79,"context_line":"            quantum_ports \u003d []"},{"line_number":80,"context_line":"            quantum_routers \u003d []"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2F8Xc%3D","line":77,"in_reply_to":"AAAAPn%2F%2F8aw%3D","updated":"2013-06-17 18:38:30.000000000","message":"Woops good spot! will change that now","commit_id":"b3692746ceccd4cf98d7a78c362b493c1940a1fe"}]}
