)]}'
{"horizon/horizon/api/keystone.py":[{"author":{"_account_id":1816,"name":"Gabriel Hurley","email":"gabriel.hurley@nebula.com","username":"gabriel-hurley"},"change_message_id":"ea2476d3a8fe0fa67e422e3be74e49e47bbb2ee1","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    return conn"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"def tenant_name(request, tenant_id):"},{"line_number":100,"context_line":"    return keystoneclient(request).tenants.get(tenant_id).name"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAEn%2F%2F5K4%3D","line":99,"updated":"2012-02-17 21:59:34.000000000","message":"This seems unnecessary, see my comment where it\u0027s used in api.nova","commit_id":"763cf82c7a22749fb96c99c5272674054e235882"},{"author":{"_account_id":1816,"name":"Gabriel Hurley","email":"gabriel.hurley@nebula.com","username":"gabriel-hurley"},"change_message_id":"d54be9c44537b0951071ad341a2a7b7535f292bd","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    return conn"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"def tenant_name(request, tenant_id):"},{"line_number":107,"context_line":"    return keystoneclient(request).tenants.get(tenant_id).name"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAEn%2F%2F2dU%3D","line":106,"updated":"2012-02-24 01:18:44.000000000","message":"This ended up not being used and is a silly shortcut.","commit_id":"d87006d31ff8697173e20433ec16b3a64b76c6a8"}],"horizon/horizon/api/nova.py":[{"author":{"_account_id":1816,"name":"Gabriel Hurley","email":"gabriel.hurley@nebula.com","username":"gabriel-hurley"},"change_message_id":"ea2476d3a8fe0fa67e422e3be74e49e47bbb2ee1","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    #      resource in horizon (get names from ids)"},{"line_number":96,"context_line":"    @property"},{"line_number":97,"context_line":"    def tenant_name(self):"},{"line_number":98,"context_line":"        return keystone.tenant_name(self.request, self.tenant_id)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    @property"},{"line_number":101,"context_line":"    def internal_identifier(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAEn%2F%2F5Ks%3D","line":98,"updated":"2012-02-17 21:59:34.000000000","message":"this can be done with tenant_get(self.request, self.tenant_id).name just as easily. I\u0027d even cache the tenant that\u0027s returned on the object somewhere in case we want more data from it.","commit_id":"763cf82c7a22749fb96c99c5272674054e235882"},{"author":{"_account_id":1816,"name":"Gabriel Hurley","email":"gabriel.hurley@nebula.com","username":"gabriel-hurley"},"change_message_id":"ea2476d3a8fe0fa67e422e3be74e49e47bbb2ee1","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        return keystone.tenant_name(self.request, self.tenant_id)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    @property"},{"line_number":101,"context_line":"    def internal_identifier(self):"},{"line_number":102,"context_line":"        return \"%s ( %s )\" % (self.id,"},{"line_number":103,"context_line":"                              getattr(self, \u0027OS-EXT-SRV-ATTR:instance_name\u0027))"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAEn%2F%2F5Ko%3D","line":101,"updated":"2012-02-17 21:59:34.000000000","message":"This looks like it\u0027s more for display purposes, so let\u0027s make it a proper __unicode__ method so that it gets rendered that way everywhere.","commit_id":"763cf82c7a22749fb96c99c5272674054e235882"}],"horizon/horizon/dashboards/syspanel/instances/tables.py":[{"author":{"_account_id":1816,"name":"Gabriel Hurley","email":"gabriel.hurley@nebula.com","username":"gabriel-hurley"},"change_message_id":"ea2476d3a8fe0fa67e422e3be74e49e47bbb2ee1","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from horizon import api"},{"line_number":26,"context_line":"from horizon import tables"},{"line_number":27,"context_line":"from horizon.dashboards.nova.instances_and_volumes.instances.tables import *"},{"line_number":28,"context_line":"from horizon.templatetags import sizeformat"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAEn%2F%2F5Kk%3D","line":27,"updated":"2012-02-17 21:59:34.000000000","message":"I know it involves listing a lot of things out, but unless the module being imported from defines an __all__ attribute, import * is a dangerous paradigm \u0027cuz it masks import-related problems.","commit_id":"763cf82c7a22749fb96c99c5272674054e235882"}],"horizon/horizon/dashboards/syspanel/instances/views.py":[{"author":{"_account_id":1816,"name":"Gabriel Hurley","email":"gabriel.hurley@nebula.com","username":"gabriel-hurley"},"change_message_id":"7bea25ad40cdee381475b5275c3640ccfa1000a6","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                    inst.internal_identifier \u003d \"%s (%s)\" % (inst.id,"},{"line_number":57,"context_line":"                                getattr(inst, \u0027OS-EXT-SRV-ATTR:instance_name\u0027))"},{"line_number":58,"context_line":"                    inst.tenant_name \u003d \"%s (%s)\" % (inst.tenant_id,"},{"line_number":59,"context_line":"                         api.keystone.tenant_get(self.request, inst.tenant_id,"},{"line_number":60,"context_line":"                                                 admin\u003dTrue).name)"},{"line_number":61,"context_line":"            except:"},{"line_number":62,"context_line":"                msg \u003d _(\u0027Unable to retrieve instance size information.\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAEn%2F%2F3Ok%3D","line":59,"updated":"2012-02-22 22:32:16.000000000","message":"This is brutally inefficient at scale... O(n) api calls are not happy when you\u0027ve got even 10 or 20 instances up, let alone hundreds or thousands. We should correlate this with a list() call similar to the flavors.","commit_id":"70daf2305d71202eefdbf1bc05ac44bb6a308f0c"},{"author":{"_account_id":543,"name":"Tres Henry","username":"tres"},"change_message_id":"6e195841e16f1e13595258a0f0e17bf9ba216e51","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                for inst in instances:"},{"line_number":58,"context_line":"                    inst.full_flavor \u003d full_flavors[inst.flavor[\"id\"]]"},{"line_number":59,"context_line":"                    inst.internal_identifier \u003d \"%s (%s)\" % (inst.id,"},{"line_number":60,"context_line":"                                getattr(inst, \u0027OS-EXT-SRV-ATTR:instance_name\u0027))"},{"line_number":61,"context_line":"                    inst.tenant_name \u003d \"%s (%s)\" % (inst.tenant_id,"},{"line_number":62,"context_line":"                         tenants[inst.tenant_id].name)"},{"line_number":63,"context_line":"            except:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAEn%2F%2F2lo%3D","line":60,"updated":"2012-02-23 22:51:59.000000000","message":"why use getattr here? getattr will throw an AttributeError (with no default specified) which is exactly the same thing as doing: inst[\u0027OS-EXT-SRV-ATTR:instance_name\u0027]. Not a big deal, just curious.","commit_id":"d87006d31ff8697173e20433ec16b3a64b76c6a8"},{"author":{"_account_id":543,"name":"Tres Henry","username":"tres"},"change_message_id":"6fd0147a479d3ca64fac5d1c3cf1827d5a116d99","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                for inst in instances:"},{"line_number":58,"context_line":"                    inst.full_flavor \u003d full_flavors[inst.flavor[\"id\"]]"},{"line_number":59,"context_line":"                    inst.internal_identifier \u003d \"%s (%s)\" % (inst.id,"},{"line_number":60,"context_line":"                                getattr(inst, \u0027OS-EXT-SRV-ATTR:instance_name\u0027))"},{"line_number":61,"context_line":"                    inst.tenant_name \u003d \"%s (%s)\" % (inst.tenant_id,"},{"line_number":62,"context_line":"                         tenants[inst.tenant_id].name)"},{"line_number":63,"context_line":"            except:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAEn%2F%2F2k8%3D","line":60,"in_reply_to":"AAAAEn%2F%2F2lI%3D","updated":"2012-02-23 23:08:58.000000000","message":"sorry, i meant to say it\u0027s the same as inst.OS-EXT-SRV-ATTR:instance_name","commit_id":"d87006d31ff8697173e20433ec16b3a64b76c6a8"},{"author":{"_account_id":1205,"name":"Jake Dahn","email":"jake.dahn@nebula.com","username":"jakedahn"},"change_message_id":"9b6f340009a9af49629de214eff2e00cdb7d87a3","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                for inst in instances:"},{"line_number":58,"context_line":"                    inst.full_flavor \u003d full_flavors[inst.flavor[\"id\"]]"},{"line_number":59,"context_line":"                    inst.internal_identifier \u003d \"%s (%s)\" % (inst.id,"},{"line_number":60,"context_line":"                                getattr(inst, \u0027OS-EXT-SRV-ATTR:instance_name\u0027))"},{"line_number":61,"context_line":"                    inst.tenant_name \u003d \"%s (%s)\" % (inst.tenant_id,"},{"line_number":62,"context_line":"                         tenants[inst.tenant_id].name)"},{"line_number":63,"context_line":"            except:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAEn%2F%2F2lI%3D","line":60,"in_reply_to":"AAAAEn%2F%2F2lo%3D","updated":"2012-02-23 22:58:16.000000000","message":"Actually the instance is an api wrapper server object, which only has attributes and is not subscriptable, so I needed to grab the attribute from the object.","commit_id":"d87006d31ff8697173e20433ec16b3a64b76c6a8"}]}
