)]}'
{"nova/api/openstack/common.py":[{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"48852c34ef713529baf8d1cf39275e5b9c89e143","unresolved":false,"context_lines":[{"line_number":430,"context_line":"    return inner"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"class ViewBuilder(object):"},{"line_number":434,"context_line":"    \"\"\"Model API responses as dictionaries.\"\"\""},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"    _resource_name \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAACX%2F%2F354%3D","line":433,"updated":"2011-11-07 17:47:00.000000000","message":"Moving these new classes to wsgi.py makes sense.","commit_id":"81eeb6fbd0e6886a10fe816028580368b5accae8"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"48852c34ef713529baf8d1cf39275e5b9c89e143","unresolved":false,"context_lines":[{"line_number":433,"context_line":"class ViewBuilder(object):"},{"line_number":434,"context_line":"    \"\"\"Model API responses as dictionaries.\"\"\""},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"    _resource_name \u003d None"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"    def __init__(self):"},{"line_number":439,"context_line":"        \"\"\"Initialize a view builder.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAACX%2F%2F35w%3D","line":436,"updated":"2011-11-07 17:47:00.000000000","message":"I think renaming this to _collection_name makes more sense than _resource_name.","commit_id":"81eeb6fbd0e6886a10fe816028580368b5accae8"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"48852c34ef713529baf8d1cf39275e5b9c89e143","unresolved":false,"context_lines":[{"line_number":499,"context_line":"class Controller(object):"},{"line_number":500,"context_line":"    \"\"\"Default controller.\"\"\""},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    _view_builder \u003d ViewBuilder"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"    def __init__(self, view_builder\u003dNone):"},{"line_number":505,"context_line":"        \"\"\"Initialize controller with default view builder.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAACX%2F%2F36c%3D","line":502,"updated":"2011-11-07 17:47:00.000000000","message":"Let\u0027s just set this equal to None.","commit_id":"81eeb6fbd0e6886a10fe816028580368b5accae8"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"48852c34ef713529baf8d1cf39275e5b9c89e143","unresolved":false,"context_lines":[{"line_number":506,"context_line":"        self._builder \u003d view_builder or self._view_builder()"},{"line_number":507,"context_line":""},{"line_number":508,"context_line":"    @staticmethod"},{"line_number":509,"context_line":"    def prepare(func):"},{"line_number":510,"context_line":"        \"\"\"Prepare the wrapped function for the incoming request.\"\"\""},{"line_number":511,"context_line":"        @functools.wraps(func)"},{"line_number":512,"context_line":"        def wrapped(self, req, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAACX%2F%2F350%3D","line":509,"updated":"2011-11-07 17:47:00.000000000","message":"I know you\u0027re going to look at removing this, but in the case that you can\u0027t, we should call this something more descriptive.","commit_id":"81eeb6fbd0e6886a10fe816028580368b5accae8"}],"nova/api/openstack/flavors.py":[{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"31146c5d4a08f1680f0b797a94cd22534fd06f46","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from nova.api.openstack import wsgi"},{"line_number":22,"context_line":"from nova.api.openstack import xmlutil"},{"line_number":23,"context_line":"from nova.api.openstack.views import flavors as flavors_view"},{"line_number":24,"context_line":"from nova.compute import instance_types"},{"line_number":25,"context_line":"from nova import db"},{"line_number":26,"context_line":"from nova import exception"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAACX%2F%2F3uo%3D","line":23,"updated":"2011-11-08 13:44:35.000000000","message":"You shouldn\u0027t move these views imports, they were in the correct place before","commit_id":"c3de689077c37f99eb616d3c93dae90f671d8cb9"},{"author":{"_account_id":706,"name":"Brian Lamar","email":"brian.lamar@rackspace.com","username":"blamar"},"change_message_id":"0e93c4c7821f84ed35b7725d0f54fb5097372cef","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from nova.api.openstack import wsgi"},{"line_number":22,"context_line":"from nova.api.openstack import xmlutil"},{"line_number":23,"context_line":"from nova.api.openstack.views import flavors as flavors_view"},{"line_number":24,"context_line":"from nova.compute import instance_types"},{"line_number":25,"context_line":"from nova import db"},{"line_number":26,"context_line":"from nova import exception"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAACn%2F%2F%2F7c%3D","line":23,"in_reply_to":"AAAACX%2F%2F3uo%3D","updated":"2011-11-09 03:27:31.000000000","message":"Right, I forgot you updated HACKING to get your way :P I\u0027ll change this back.","commit_id":"c3de689077c37f99eb616d3c93dae90f671d8cb9"}],"nova/api/openstack/ips.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"56da20fba771cfcd1e6c7e49ff03065b357162ac","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        instance \u003d self._get_instance(context, server_id)"},{"line_number":67,"context_line":"        networks \u003d common.get_networks_for_instance(context, instance)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        if id not in networks.keys():"},{"line_number":70,"context_line":"            msg \u003d _(\"Instance is not a member of specified network\")"},{"line_number":71,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACX%2F%2F4gU%3D","line":69,"updated":"2011-11-04 15:22:20.000000000","message":"I\u0027d rather see this as \"if id not in networks\"; it\u0027s a lot easier to test if a key is in a dict than it is to test if a value is in a list, which is what this does as written.","commit_id":"a6e4ae2db6156fd0b95785c1a6e11381b8d4f27a"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"b2c66814a7d32f655b9945dfb0a7c4579104a2ef","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        instance \u003d self._get_instance(context, server_id)"},{"line_number":67,"context_line":"        networks \u003d common.get_networks_for_instance(context, instance)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        if id not in networks.keys():"},{"line_number":70,"context_line":"            msg \u003d _(\"Instance is not a member of specified network\")"},{"line_number":71,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAACX%2F%2F4fo%3D","line":69,"updated":"2011-11-04 17:07:05.000000000","message":"Hey, did you see my inline comment on your previous patch set?  You can drop the \u0027.keys()\u0027 here and probably gain a bit in efficiency—searching a dict for a key should be more efficient than searching a list for a value.","commit_id":"7ff6ccc017ec526bdcb27a9017ced9d2f3207807"}],"nova/api/openstack/servers.py":[{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"48852c34ef713529baf8d1cf39275e5b9c89e143","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    _view_builder \u003d views_servers.ViewBuilder"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def __init__(self, **kwargs):"},{"line_number":67,"context_line":"        super(Controller, self).__init__(**kwargs)"},{"line_number":68,"context_line":"        self.compute_api \u003d compute.API()"},{"line_number":69,"context_line":"        self.network_api \u003d network.API()"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAACX%2F%2F36Q%3D","line":67,"updated":"2011-11-07 17:47:00.000000000","message":"How about we pass in an instance of the view builder here rather than depending on default instantiation?","commit_id":"81eeb6fbd0e6886a10fe816028580368b5accae8"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"31146c5d4a08f1680f0b797a94cd22534fd06f46","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        limited_list \u003d self._limit_items(instance_list, req)"},{"line_number":146,"context_line":"        if is_detail:"},{"line_number":147,"context_line":"            return self._builder.detail(req, limited_list)"},{"line_number":148,"context_line":"        else:"},{"line_number":149,"context_line":"            return self._builder.index(req, limited_list)"},{"line_number":150,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAACX%2F%2F3uk%3D","line":147,"updated":"2011-11-08 13:44:35.000000000","message":"Did you mean to change _builder to _view_builder? Forgot what we decided.","commit_id":"c3de689077c37f99eb616d3c93dae90f671d8cb9"},{"author":{"_account_id":706,"name":"Brian Lamar","email":"brian.lamar@rackspace.com","username":"blamar"},"change_message_id":"0e93c4c7821f84ed35b7725d0f54fb5097372cef","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        limited_list \u003d self._limit_items(instance_list, req)"},{"line_number":146,"context_line":"        if is_detail:"},{"line_number":147,"context_line":"            return self._builder.detail(req, limited_list)"},{"line_number":148,"context_line":"        else:"},{"line_number":149,"context_line":"            return self._builder.index(req, limited_list)"},{"line_number":150,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAACn%2F%2F%2F7g%3D","line":147,"in_reply_to":"AAAACX%2F%2F3uk%3D","updated":"2011-11-09 03:27:31.000000000","message":"I\u0027m not against it, but I don\u0027t think it adds a ton.","commit_id":"c3de689077c37f99eb616d3c93dae90f671d8cb9"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"345f070c865f26eb406e9519e0c11c106eff5a43","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        limited_list \u003d self._limit_items(instance_list, req)"},{"line_number":146,"context_line":"        if is_detail:"},{"line_number":147,"context_line":"            return self._builder.detail(req, limited_list)"},{"line_number":148,"context_line":"        else:"},{"line_number":149,"context_line":"            return self._builder.index(req, limited_list)"},{"line_number":150,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAACn%2F%2F%2F7E%3D","line":147,"in_reply_to":"AAAACn%2F%2F%2F7g%3D","updated":"2011-11-09 03:29:56.000000000","message":"Well this used to be _builder.detail_view, and we said if we remove \u0027view\u0027 then it becomes less obvious what it\u0027s doing. I personally understand this but it might make more sense to somebody else reading the code to see view_builder?","commit_id":"c3de689077c37f99eb616d3c93dae90f671d8cb9"},{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"a5f8d8fc46d28ebcda895108be5c45e7a899b7b7","unresolved":false,"context_lines":[{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        if \u0027_is_precooked\u0027 in server[\u0027server\u0027].keys():"},{"line_number":456,"context_line":"            del server[\u0027server\u0027][\u0027_is_precooked\u0027]"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"        return server"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"    def _delete(self, context, id):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAACn%2F%2F%2BLI%3D","line":457,"updated":"2011-11-15 22:15:29.000000000","message":"Not sure if this is a problem or not, but it looks like this logic changed here.\n\nShould we be returning \u0027adminPass\u0027 if instance is flagged as precooked?\n\nAlso looks like we\u0027re always adding instance_type and image_ref to the instance.","commit_id":"caa565f66b2b09a4c1649364ebb60f3fa20b566c"},{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"deac2b89cb618c4e2693b3edfcea9466dcb62781","unresolved":false,"context_lines":[{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        if \u0027_is_precooked\u0027 in server[\u0027server\u0027].keys():"},{"line_number":456,"context_line":"            del server[\u0027server\u0027][\u0027_is_precooked\u0027]"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"        return server"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"    def _delete(self, context, id):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAACn%2F%2F99M%3D","line":457,"in_reply_to":"AAAACn%2F%2F%2BAE%3D","updated":"2011-11-16 17:00:57.000000000","message":"Any idea why the original version was coded that way? It appears to be very deliberate.","commit_id":"caa565f66b2b09a4c1649364ebb60f3fa20b566c"},{"author":{"_account_id":706,"name":"Brian Lamar","email":"brian.lamar@rackspace.com","username":"blamar"},"change_message_id":"46d2daca1ae8f2e3efd6f9b41d8b41bc269d2ef8","unresolved":false,"context_lines":[{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        if \u0027_is_precooked\u0027 in server[\u0027server\u0027].keys():"},{"line_number":456,"context_line":"            del server[\u0027server\u0027][\u0027_is_precooked\u0027]"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"        return server"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"    def _delete(self, context, id):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAACn%2F%2F%2BAE%3D","line":457,"in_reply_to":"AAAACn%2F%2F%2BLI%3D","updated":"2011-11-16 15:16:25.000000000","message":"I don\u0027t think I\u0027m changing any logic here because _is_precooked kicks in when the compute_api.create() method above returns an instance created in a child zone.\n\nIn that case instances[0] should already have both \u0027adminPass\u0027, \u0027instance_type\u0027 and \u0027image_ref\u0027 keys...I\u0027m just making sure that they\u0027re there. Do you buy that?","commit_id":"caa565f66b2b09a4c1649364ebb60f3fa20b566c"}],"nova/api/openstack/views/addresses.py":[{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"48852c34ef713529baf8d1cf39275e5b9c89e143","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        if key:"},{"line_number":33,"context_line":"            chain \u003d network[key]"},{"line_number":34,"context_line":"        else:"},{"line_number":35,"context_line":"            chain \u003d itertools.chain(network[\u0027ips\u0027], network[\u0027floating_ips\u0027])"},{"line_number":36,"context_line":"        for ip in chain:"},{"line_number":37,"context_line":"            if not FLAGS.use_ipv6 and ip[\u0027version\u0027] \u003d\u003d 6:"},{"line_number":38,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAACX%2F%2F36M%3D","side":"PARENT","line":35,"updated":"2011-11-07 17:47:00.000000000","message":"Looks like the removal of logic here uncovered that we aren\u0027t actually testing it. Maybe we should fix that?","commit_id":"67a1c257f9e4be774da5acf2c1b703d196e0a2cf"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"31146c5d4a08f1680f0b797a94cd22534fd06f46","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from nova import flags"},{"line_number":21,"context_line":"from nova import log as logging"},{"line_number":22,"context_line":"from nova.api.openstack import common"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"FLAGS \u003d flags.FLAGS"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAACX%2F%2F3ug%3D","line":22,"updated":"2011-11-08 13:44:35.000000000","message":"This goes at the top of this block.","commit_id":"c3de689077c37f99eb616d3c93dae90f671d8cb9"},{"author":{"_account_id":706,"name":"Brian Lamar","email":"brian.lamar@rackspace.com","username":"blamar"},"change_message_id":"0e93c4c7821f84ed35b7725d0f54fb5097372cef","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from nova import flags"},{"line_number":21,"context_line":"from nova import log as logging"},{"line_number":22,"context_line":"from nova.api.openstack import common"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"FLAGS \u003d flags.FLAGS"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAACn%2F%2F%2F7Y%3D","line":22,"in_reply_to":"AAAACX%2F%2F3ug%3D","updated":"2011-11-09 03:27:31.000000000","message":"Will update.","commit_id":"c3de689077c37f99eb616d3c93dae90f671d8cb9"}],"nova/tests/api/openstack/test_servers.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"be0c750a376eb4a7975400cf741be3cdc39b5f8c","unresolved":false,"context_lines":[{"line_number":714,"context_line":"            if \u0027_is_precooked\u0027 in s:"},{"line_number":715,"context_line":"                self.assertEqual(s.get(\u0027reservation_id\u0027), \u0027child\u0027)"},{"line_number":716,"context_line":"            else:"},{"line_number":717,"context_line":"                print s"},{"line_number":718,"context_line":"                self.assertEqual(s.get(\u0027name\u0027), \u0027server%d\u0027 % i)"},{"line_number":719,"context_line":"                i +\u003d 1"},{"line_number":720,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAACn%2F%2F%2FTI%3D","line":717,"updated":"2011-11-10 16:24:35.000000000","message":"Just drawing your eye here in case you didn\u0027t mean to include this; I see no problem with it, personally...","commit_id":"caa565f66b2b09a4c1649364ebb60f3fa20b566c"}]}
