)]}'
{"openstack_dashboard/api/cinder.py":[{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"3e71e2d46c0afd20363b0f2d7a3fd8b5df136aa6","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    return c_client.backups.list()"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def volume_backup_create(request,"},{"line_number":141,"context_line":"                         volume_id,"},{"line_number":142,"context_line":"                         container_name,"},{"line_number":143,"context_line":"                         name,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FW0U%3D","line":140,"updated":"2013-11-08 10:40:52.000000000","message":"Please consider using less lines:\n\ndef volume_backup_create(request, volume_id, container_name,\n                         name, description):\n    return cinderclient(request).backups.create(\n        volume_id, container\u003dcontainer_name,\n        name\u003dname, description\u003ddescription)","commit_id":"dd286f89516bd86911bdf7b078b4319cdfac7891"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"d7568cd8b1bf3d96ce3138e90e530780f32d3e5c","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                         volume_id,"},{"line_number":142,"context_line":"                         container_name,"},{"line_number":143,"context_line":"                         name,"},{"line_number":144,"context_line":"                         description):"},{"line_number":145,"context_line":"    return cinderclient(request).backups.create("},{"line_number":146,"context_line":"        volume_id,"},{"line_number":147,"context_line":"        container\u003dcontainer_name,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2FC%2FY%3D","line":144,"updated":"2013-11-15 07:39:44.000000000","message":"ditto","commit_id":"0ae35aecaa1b39270a55cea1b491d1300494a09f"}],"openstack_dashboard/dashboards/admin/volumes/views.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"814f5c96a6985102730c0b93bd8e18339b0f4e6d","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    import forms as project_forms"},{"line_number":34,"context_line":"from openstack_dashboard.dashboards.admin.volumes \\"},{"line_number":35,"context_line":"    import tables as project_tables"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"from openstack_dashboard.dashboards.project.volumes.volumes \\"},{"line_number":38,"context_line":"    import views as volume_views"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BWdg%3D","line":36,"updated":"2013-11-27 02:21:15.000000000","message":"no blank line here","commit_id":"193267a957d048deb8cd7eec5a566c3dd4528bc8"}],"openstack_dashboard/dashboards/project/images_and_snapshots/volume_snapshots/tests.py":[{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"3e71e2d46c0afd20363b0f2d7a3fd8b5df136aa6","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        self.assertTemplateUsed(res,"},{"line_number":51,"context_line":"                                \u0027project/volumes/\u0027"},{"line_number":52,"context_line":"                                \u0027volumes/create_snapshot.html\u0027)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @test.create_stubs({cinder: (\u0027volume_snapshot_create\u0027,)})"},{"line_number":55,"context_line":"    def test_create_snapshot_post(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FW3Q%3D","line":52,"updated":"2013-11-08 10:40:52.000000000","message":"Please consider using two lines instead of three:\n\nself.assertTemplateUsed(res,\n    \u0027project/volumes/volumes/create_snapshot.html\u0027)","commit_id":"dd286f89516bd86911bdf7b078b4319cdfac7891"}],"openstack_dashboard/dashboards/project/volumes/backups/forms.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"32d9c02f690b9d1f458a7d8a5977740fb1532457","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    description \u003d forms.CharField(widget\u003dforms.Textarea,"},{"line_number":34,"context_line":"                                  label\u003d_(\"Description\"),"},{"line_number":35,"context_line":"                                  required\u003dFalse)"},{"line_number":36,"context_line":"    container_name \u003d forms.CharField(max_length\u003d\"255\","},{"line_number":37,"context_line":"                                     label\u003d_(\"Container Name\"),"},{"line_number":38,"context_line":"                                     required\u003dFalse)"},{"line_number":39,"context_line":"    volume_id \u003d forms.CharField(widget\u003dforms.HiddenInput())"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FXuk%3D","line":36,"updated":"2013-11-08 03:14:10.000000000","message":"We should probably have the same validator name here used in the Container Name validator","commit_id":"dd286f89516bd86911bdf7b078b4319cdfac7891"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"32d9c02f690b9d1f458a7d8a5977740fb1532457","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                                     required\u003dFalse)"},{"line_number":39,"context_line":"    volume_id \u003d forms.CharField(widget\u003dforms.HiddenInput())"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def __init__(self, request, *args, **kwargs):"},{"line_number":42,"context_line":"        super(CreateBackupForm, self).__init__(request, *args, **kwargs)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def handle(self, request, data):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FXug%3D","line":41,"updated":"2013-11-08 03:14:10.000000000","message":"Can be removed - since nothing is being overridden","commit_id":"dd286f89516bd86911bdf7b078b4319cdfac7891"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"1f3a529aa5bec9751f872495e1910870daa48092","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        except Exception:"},{"line_number":67,"context_line":"            redirect \u003d reverse(\"horizon:project:volumes:index\")"},{"line_number":68,"context_line":"            exceptions.handle(request,"},{"line_number":69,"context_line":"                              _(\u0027Unable to create volume backup.\u0027),"},{"line_number":70,"context_line":"                              redirect\u003dredirect)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F9D4s%3D","line":69,"updated":"2013-12-17 07:02:05.000000000","message":"Trying this in devstack, I get this error.  I assume since this was on devstack it\u0027s likely due to space issues.  But a more informative error message here would be more helpful to the user.","commit_id":"e7c443d42c54b1f9c5615ad3ba52954667e3f0ea"},{"author":{"_account_id":8545,"name":"Laura Frank","email":"ljfrank@gmail.com","username":"laura"},"change_message_id":"34b3c4a52bd2310f5a96a0c3910d7490d44048d1","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        except Exception:"},{"line_number":67,"context_line":"            redirect \u003d reverse(\"horizon:project:volumes:index\")"},{"line_number":68,"context_line":"            exceptions.handle(request,"},{"line_number":69,"context_line":"                              _(\u0027Unable to create volume backup.\u0027),"},{"line_number":70,"context_line":"                              redirect\u003dredirect)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2Fh98%3D","line":69,"in_reply_to":"AAAATn%2F9D4s%3D","updated":"2014-02-12 15:18:17.000000000","message":"We don\u0027t get super helpful information back for the exception, but I\u0027ll add some extra wordage to be more helpful.","commit_id":"e7c443d42c54b1f9c5615ad3ba52954667e3f0ea"},{"author":{"_account_id":10179,"name":"Facundo Farias","email":"facundo.farias@intel.com","username":"ffarias"},"change_message_id":"abd81d1da10e717955fd5ac28c119e8ec44800f9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 Hewlett-Packard Development Company, L.P."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BAqQ%3D","line":3,"updated":"2014-03-31 15:22:27.000000000","message":"As far as I know, the copyright lines should be avoided  (at least, for new files)","commit_id":"0c879b0bf22cf727f9dd98108693597e7e4828b2"},{"author":{"_account_id":10179,"name":"Facundo Farias","email":"facundo.farias@intel.com","username":"ffarias"},"change_message_id":"abd81d1da10e717955fd5ac28c119e8ec44800f9","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        super(CreateBackupForm, self).__init__(request, *args, **kwargs)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def handle(self, request, data):"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        # Create a container for the user if no input is given"},{"line_number":50,"context_line":"        if not data[\u0027container_name\u0027]:"},{"line_number":51,"context_line":"            data[\u0027container_name\u0027] \u003d \u0027volumebackups\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BAp0%3D","line":48,"updated":"2014-03-31 15:22:27.000000000","message":"Remove empty line.","commit_id":"0c879b0bf22cf727f9dd98108693597e7e4828b2"},{"author":{"_account_id":8545,"name":"Laura Frank","email":"ljfrank@gmail.com","username":"laura"},"change_message_id":"72d76678ca892a4c824e479d953cb5d866e88c0d","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        super(CreateBackupForm, self).__init__(request, *args, **kwargs)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def handle(self, request, data):"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        # Create a container for the user if no input is given"},{"line_number":50,"context_line":"        if not data[\u0027container_name\u0027]:"},{"line_number":51,"context_line":"            data[\u0027container_name\u0027] \u003d \u0027volumebackups\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F939g%3D","line":48,"in_reply_to":"AAAAWH%2F%2BAp0%3D","updated":"2014-04-01 15:04:16.000000000","message":"Done","commit_id":"0c879b0bf22cf727f9dd98108693597e7e4828b2"},{"author":{"_account_id":10179,"name":"Facundo Farias","email":"facundo.farias@intel.com","username":"ffarias"},"change_message_id":"abd81d1da10e717955fd5ac28c119e8ec44800f9","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            volumes \u003d cinder.volume_list(request)"},{"line_number":81,"context_line":"        except Exception:"},{"line_number":82,"context_line":"            msg \u003d _(\u0027Unable to lookup volume or backup information.\u0027)"},{"line_number":83,"context_line":"            redirect \u003d reverse(\u0027horizon:project:volumes:index\u0027)"},{"line_number":84,"context_line":"            exceptions.handle(request, msg, redirect\u003dredirect)"},{"line_number":85,"context_line":"            raise exceptions.Http302(redirect)"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BApk%3D","line":83,"updated":"2014-03-31 15:22:27.000000000","message":"If you are going to use this value several times, maybe you can create an static variable.","commit_id":"0c879b0bf22cf727f9dd98108693597e7e4828b2"},{"author":{"_account_id":10179,"name":"Facundo Farias","email":"facundo.farias@intel.com","username":"ffarias"},"change_message_id":"abd81d1da10e717955fd5ac28c119e8ec44800f9","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        except Exception as e:"},{"line_number":111,"context_line":"            if getattr(e, \u0027http_status\u0027, None) \u003d\u003d 400:"},{"line_number":112,"context_line":"                msg \u003d _(\u0027Unable to restore backup: %s\u0027) % \\"},{"line_number":113,"context_line":"                    encoding.force_unicode(e)"},{"line_number":114,"context_line":"            else:"},{"line_number":115,"context_line":"                msg \u003d _(\u0027Unable to restore backup.\u0027)"},{"line_number":116,"context_line":"            exceptions.handle(request, msg)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BApI%3D","line":113,"updated":"2014-03-31 15:22:27.000000000","message":"AS far as I know, you should avoid showing error messages on user facing messages.","commit_id":"0c879b0bf22cf727f9dd98108693597e7e4828b2"},{"author":{"_account_id":8545,"name":"Laura Frank","email":"ljfrank@gmail.com","username":"laura"},"change_message_id":"72d76678ca892a4c824e479d953cb5d866e88c0d","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        except Exception as e:"},{"line_number":111,"context_line":"            if getattr(e, \u0027http_status\u0027, None) \u003d\u003d 400:"},{"line_number":112,"context_line":"                msg \u003d _(\u0027Unable to restore backup: %s\u0027) % \\"},{"line_number":113,"context_line":"                    encoding.force_unicode(e)"},{"line_number":114,"context_line":"            else:"},{"line_number":115,"context_line":"                msg \u003d _(\u0027Unable to restore backup.\u0027)"},{"line_number":116,"context_line":"            exceptions.handle(request, msg)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F93%2FI%3D","line":113,"in_reply_to":"AAAAWH%2F%2BApI%3D","updated":"2014-04-01 15:04:16.000000000","message":"Done","commit_id":"0c879b0bf22cf727f9dd98108693597e7e4828b2"},{"author":{"_account_id":10179,"name":"Facundo Farias","email":"facundo.farias@intel.com","username":"ffarias"},"change_message_id":"456c93b5663941d7cd5bae4fcb9056cc0fe5a021","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":"Views for managing backups."},{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import operator"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAWH%2F92PQ%3D","line":19,"updated":"2014-04-01 17:33:36.000000000","message":"Perhaps you can remove this comments.","commit_id":"431b8f7531d923a0c0ec52a5f33aea287cc630bc"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"3386dd18b9dcf3e51446acf99b04eb78515361e8","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                                  label\u003d_(\"Description\"),"},{"line_number":37,"context_line":"                                  required\u003dFalse)"},{"line_number":38,"context_line":"    container_name \u003d forms.CharField(max_length\u003d\"255\","},{"line_number":39,"context_line":"                                     label\u003d_(\"Container Name\"),"},{"line_number":40,"context_line":"                                     required\u003dFalse)"},{"line_number":41,"context_line":"    volume_id \u003d forms.CharField(widget\u003dforms.HiddenInput())"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAWH%2F9NQA%3D","line":39,"updated":"2014-04-07 23:05:52.000000000","message":"The container_name in swift is using a no_slash_validator, might be good to copy the same validation.\n\nhttps://github.com/openstack/horizon/blob/master/openstack_dashboard/dashboards/project/containers/forms.py#L51","commit_id":"431b8f7531d923a0c0ec52a5f33aea287cc630bc"},{"author":{"_account_id":9450,"name":"Juan Manuel Ollé","email":"juan.m.olle@intel.com","username":"jmolle"},"change_message_id":"d10579029f0f7ab58618335f63e615c86255864b","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            redirect \u003d reverse(\u0027horizon:project:volumes:index\u0027)"},{"line_number":64,"context_line":"            exceptions.handle(request,"},{"line_number":65,"context_line":"                              _(\u0027Unable to create volume backup.\u0027),"},{"line_number":66,"context_line":"                              redirect\u003dredirect)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class RestoreBackupForm(forms.SelfHandlingForm):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAWn%2F%2F7d4%3D","line":66,"updated":"2014-04-08 12:52:49.000000000","message":"Don\u0027t you have to return False?","commit_id":"431b8f7531d923a0c0ec52a5f33aea287cc630bc"},{"author":{"_account_id":9450,"name":"Juan Manuel Ollé","email":"juan.m.olle@intel.com","username":"jmolle"},"change_message_id":"db7c94d5ce601afacf826d8e092ab97c3ef2c936","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 Hewlett-Packard Development Company, L.P."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAW3%2F%2FQRc%3D","line":3,"updated":"2014-04-15 18:44:27.000000000","message":"Compani name should not be included in headers","commit_id":"167305d0915e6fae29d006f4228d29e46336da66"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"3b8619728129b60d421af00e85cab41a983aa19b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 Hewlett-Packard Development Company, L.P."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ae5cdf2_09747e9a","line":3,"in_reply_to":"AAAAW3%2F%2FQRc%3D","updated":"2014-06-26 13:11:07.000000000","message":"Done","commit_id":"167305d0915e6fae29d006f4228d29e46336da66"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"f04db597d61aeef2913cfb121c0073924ee74ed7","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import operator"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from django.core.urlresolvers import reverse  # noqa"},{"line_number":24,"context_line":"from django.utils.translation import ugettext_lazy as _  # noqa"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from horizon import exceptions"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2F%2BEc%3D","line":23,"updated":"2014-04-16 07:38:07.000000000","message":"# noqa should be removed.","commit_id":"167305d0915e6fae29d006f4228d29e46336da66"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"3b8619728129b60d421af00e85cab41a983aa19b","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import operator"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from django.core.urlresolvers import reverse  # noqa"},{"line_number":24,"context_line":"from django.utils.translation import ugettext_lazy as _  # noqa"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from horizon import exceptions"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ae5cdf2_29793a93","line":23,"in_reply_to":"AAAAXH%2F%2F%2BEc%3D","updated":"2014-06-26 13:11:07.000000000","message":"Done","commit_id":"167305d0915e6fae29d006f4228d29e46336da66"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"f04db597d61aeef2913cfb121c0073924ee74ed7","unresolved":false,"context_lines":[{"line_number":21,"context_line":"import operator"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from django.core.urlresolvers import reverse  # noqa"},{"line_number":24,"context_line":"from django.utils.translation import ugettext_lazy as _  # noqa"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from horizon import exceptions"},{"line_number":27,"context_line":"from horizon import forms"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2F%2BEQ%3D","line":24,"updated":"2014-04-16 07:38:07.000000000","message":"ditto","commit_id":"167305d0915e6fae29d006f4228d29e46336da66"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"3b8619728129b60d421af00e85cab41a983aa19b","unresolved":false,"context_lines":[{"line_number":21,"context_line":"import operator"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from django.core.urlresolvers import reverse  # noqa"},{"line_number":24,"context_line":"from django.utils.translation import ugettext_lazy as _  # noqa"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from horizon import exceptions"},{"line_number":27,"context_line":"from horizon import forms"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ae5cdf2_496a06b6","line":24,"in_reply_to":"AAAAXH%2F%2F%2BEQ%3D","updated":"2014-06-26 13:11:07.000000000","message":"Done","commit_id":"167305d0915e6fae29d006f4228d29e46336da66"}],"openstack_dashboard/dashboards/project/volumes/backups/tables.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"32d9c02f690b9d1f458a7d8a5977740fb1532457","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    def delete(self, request, obj_id):"},{"line_number":55,"context_line":"        try:"},{"line_number":56,"context_line":"            api.cinder.volume_backup_delete(request, obj_id)"},{"line_number":57,"context_line":"        except Exception:"},{"line_number":58,"context_line":"            exceptions.handle(request,"},{"line_number":59,"context_line":"                              _(\"Unable to delete backup. Please try again.\"))"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FXrw%3D","line":57,"updated":"2013-11-08 03:14:10.000000000","message":"try-Except is not necessary, it is already handled by BatchAction","commit_id":"dd286f89516bd86911bdf7b078b4319cdfac7891"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"32d9c02f690b9d1f458a7d8a5977740fb1532457","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        verbose_name \u003d _(\"Volume Backups\")"},{"line_number":134,"context_line":"        status_columns \u003d [\"status\"]"},{"line_number":135,"context_line":"        row_class \u003d UpdateRow"},{"line_number":136,"context_line":"        table_actions \u003d (DeleteBackup,)"},{"line_number":137,"context_line":"        row_actions \u003d (RestoreBackup, DeleteBackup)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FXr4%3D","line":136,"updated":"2013-11-08 03:14:10.000000000","message":"Should we also support FilterAction similar to Volumes?","commit_id":"dd286f89516bd86911bdf7b078b4319cdfac7891"},{"author":{"_account_id":8545,"name":"Laura Frank","email":"ljfrank@gmail.com","username":"laura"},"change_message_id":"2d65b56e1726f5f216934a3857cb6af125f77d59","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        verbose_name \u003d _(\"Volume Backups\")"},{"line_number":134,"context_line":"        status_columns \u003d [\"status\"]"},{"line_number":135,"context_line":"        row_class \u003d UpdateRow"},{"line_number":136,"context_line":"        table_actions \u003d (DeleteBackup,)"},{"line_number":137,"context_line":"        row_actions \u003d (RestoreBackup, DeleteBackup)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FEto%3D","line":136,"in_reply_to":"AAAATn%2F%2FXr4%3D","updated":"2013-11-14 19:30:38.000000000","message":"I think that would be a good enhancement for the future, but let\u0027s leave it out of this first pass since it\u0027s already such a big patch.","commit_id":"dd286f89516bd86911bdf7b078b4319cdfac7891"},{"author":{"_account_id":6650,"name":"Eric Peterson","email":"ejpetey@gmail.com","username":"ericpeterson-l"},"change_message_id":"9cfbec7426d0bd2731339887ba0e8ad5cc39305f","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        try:"},{"line_number":91,"context_line":"            backup \u003d cinder.volume_backup_get(request, backup_id)"},{"line_number":92,"context_line":"        except Exception:"},{"line_number":93,"context_line":"            exceptions.handle(request, _(\"Unable to retrieve backup details\"))"},{"line_number":94,"context_line":"        if not backup.name:"},{"line_number":95,"context_line":"            backup.name \u003d backup_id"},{"line_number":96,"context_line":"        return backup"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BBSU%3D","line":93,"updated":"2014-03-31 14:07:07.000000000","message":"consider moving the code below up into the try block or return out of the exception block.  Otherwise backup might be None and stuff will break below.","commit_id":"0c879b0bf22cf727f9dd98108693597e7e4828b2"},{"author":{"_account_id":8545,"name":"Laura Frank","email":"ljfrank@gmail.com","username":"laura"},"change_message_id":"72d76678ca892a4c824e479d953cb5d866e88c0d","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        try:"},{"line_number":91,"context_line":"            backup \u003d cinder.volume_backup_get(request, backup_id)"},{"line_number":92,"context_line":"        except Exception:"},{"line_number":93,"context_line":"            exceptions.handle(request, _(\"Unable to retrieve backup details\"))"},{"line_number":94,"context_line":"        if not backup.name:"},{"line_number":95,"context_line":"            backup.name \u003d backup_id"},{"line_number":96,"context_line":"        return backup"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F93v8%3D","line":93,"in_reply_to":"AAAAWH%2F%2BBSU%3D","updated":"2014-04-01 15:04:16.000000000","message":"Done. Setting backup to {} in case of exception and moving backup name logic into try block.","commit_id":"0c879b0bf22cf727f9dd98108693597e7e4828b2"},{"author":{"_account_id":10179,"name":"Facundo Farias","email":"facundo.farias@intel.com","username":"ffarias"},"change_message_id":"abd81d1da10e717955fd5ac28c119e8ec44800f9","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        try:"},{"line_number":91,"context_line":"            backup \u003d cinder.volume_backup_get(request, backup_id)"},{"line_number":92,"context_line":"        except Exception:"},{"line_number":93,"context_line":"            exceptions.handle(request, _(\"Unable to retrieve backup details\"))"},{"line_number":94,"context_line":"        if not backup.name:"},{"line_number":95,"context_line":"            backup.name \u003d backup_id"},{"line_number":96,"context_line":"        return backup"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BAoc%3D","line":93,"in_reply_to":"AAAAWH%2F%2BBSU%3D","updated":"2014-03-31 15:22:27.000000000","message":"The error messages should finish with a period.","commit_id":"0c879b0bf22cf727f9dd98108693597e7e4828b2"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"3386dd18b9dcf3e51446acf99b04eb78515361e8","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    action_past \u003d _(\"Scheduled deletion of\")"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def delete(self, request, obj_id):"},{"line_number":55,"context_line":"        try:"},{"line_number":56,"context_line":"            api.cinder.volume_backup_delete(request, obj_id)"},{"line_number":57,"context_line":"        except Exception:"},{"line_number":58,"context_line":"            exceptions.handle(request,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAWH%2F9NSc%3D","line":55,"updated":"2014-04-07 23:05:52.000000000","message":"try-except is not needed, the call to delete(..) is already inside a try-except block found in the BatchAction.","commit_id":"431b8f7531d923a0c0ec52a5f33aea287cc630bc"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"3386dd18b9dcf3e51446acf99b04eb78515361e8","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    description \u003d tables.Column(\"description\","},{"line_number":115,"context_line":"                                verbose_name\u003d_(\"Description\"),"},{"line_number":116,"context_line":"                                truncate\u003d40)"},{"line_number":117,"context_line":"    size \u003d tables.Column(get_size,"},{"line_number":118,"context_line":"                         verbose_name\u003d_(\"Size\"),"},{"line_number":119,"context_line":"                         attrs\u003d{\u0027data-type\u0027: \u0027size\u0027})"},{"line_number":120,"context_line":"    status \u003d tables.Column(\"status\","}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAWH%2F9NTc%3D","line":117,"updated":"2014-04-07 23:05:52.000000000","message":"what is the format of the size displayed?  Might need to make it pretty using  filters.filesizeformat","commit_id":"431b8f7531d923a0c0ec52a5f33aea287cc630bc"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"f04db597d61aeef2913cfb121c0073924ee74ed7","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from django.core.urlresolvers import reverse  # noqa"},{"line_number":18,"context_line":"from django.template.defaultfilters import title  # noqa"},{"line_number":19,"context_line":"from django.utils import http"},{"line_number":20,"context_line":"from django.utils import safestring"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2F%2BDo%3D","line":17,"updated":"2014-04-16 07:38:07.000000000","message":"# noqa should be removed.","commit_id":"167305d0915e6fae29d006f4228d29e46336da66"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"3b8619728129b60d421af00e85cab41a983aa19b","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from django.core.urlresolvers import reverse  # noqa"},{"line_number":18,"context_line":"from django.template.defaultfilters import title  # noqa"},{"line_number":19,"context_line":"from django.utils import http"},{"line_number":20,"context_line":"from django.utils import safestring"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ae5cdf2_69dee23f","line":17,"in_reply_to":"AAAAXH%2F%2F%2BDo%3D","updated":"2014-06-26 13:11:07.000000000","message":"Done","commit_id":"167305d0915e6fae29d006f4228d29e46336da66"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"f04db597d61aeef2913cfb121c0073924ee74ed7","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from django.template.defaultfilters import title  # noqa"},{"line_number":19,"context_line":"from django.utils import http"},{"line_number":20,"context_line":"from django.utils import safestring"},{"line_number":21,"context_line":"from django.utils.translation import ugettext_lazy as _  # noqa"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from horizon import exceptions"},{"line_number":24,"context_line":"from horizon import tables"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2F%2BDk%3D","line":21,"updated":"2014-04-16 07:38:07.000000000","message":"ditto","commit_id":"167305d0915e6fae29d006f4228d29e46336da66"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"3b8619728129b60d421af00e85cab41a983aa19b","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from django.template.defaultfilters import title  # noqa"},{"line_number":19,"context_line":"from django.utils import http"},{"line_number":20,"context_line":"from django.utils import safestring"},{"line_number":21,"context_line":"from django.utils.translation import ugettext_lazy as _  # noqa"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from horizon import exceptions"},{"line_number":24,"context_line":"from horizon import tables"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ae5cdf2_89e6ce14","line":21,"in_reply_to":"AAAAXH%2F%2F%2BDk%3D","updated":"2014-06-26 13:11:07.000000000","message":"Done","commit_id":"167305d0915e6fae29d006f4228d29e46336da66"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"f04db597d61aeef2913cfb121c0073924ee74ed7","unresolved":false,"context_lines":[{"line_number":49,"context_line":"class DeleteBackup(tables.DeleteAction):"},{"line_number":50,"context_line":"    data_type_singular \u003d _(\"Volume Backup\")"},{"line_number":51,"context_line":"    data_type_plural \u003d _(\"Volume Backups\")"},{"line_number":52,"context_line":"    action_past \u003d _(\"Scheduled deletion of\")"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def delete(self, request, obj_id):"},{"line_number":55,"context_line":"        api.cinder.volume_backup_delete(request, obj_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2F97I%3D","line":52,"updated":"2014-04-16 07:38:07.000000000","message":"need an RBAC check","commit_id":"167305d0915e6fae29d006f4228d29e46336da66"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"3b8619728129b60d421af00e85cab41a983aa19b","unresolved":false,"context_lines":[{"line_number":49,"context_line":"class DeleteBackup(tables.DeleteAction):"},{"line_number":50,"context_line":"    data_type_singular \u003d _(\"Volume Backup\")"},{"line_number":51,"context_line":"    data_type_plural \u003d _(\"Volume Backups\")"},{"line_number":52,"context_line":"    action_past \u003d _(\"Scheduled deletion of\")"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def delete(self, request, obj_id):"},{"line_number":55,"context_line":"        api.cinder.volume_backup_delete(request, obj_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ae5cdf2_897b2e28","line":52,"in_reply_to":"AAAAXH%2F%2F97I%3D","updated":"2014-06-26 13:11:07.000000000","message":"Done","commit_id":"167305d0915e6fae29d006f4228d29e46336da66"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"f04db597d61aeef2913cfb121c0073924ee74ed7","unresolved":false,"context_lines":[{"line_number":63,"context_line":"class RestoreBackup(tables.LinkAction):"},{"line_number":64,"context_line":"    name \u003d \"restore\""},{"line_number":65,"context_line":"    verbose_name \u003d _(\"Restore Backup\")"},{"line_number":66,"context_line":"    classes \u003d (\"ajax-modal\",)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def allowed(self, request, volume\u003dNone):"},{"line_number":69,"context_line":"        return volume.status \u003d\u003d \"available\""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2F97E%3D","line":66,"updated":"2014-04-16 07:38:07.000000000","message":"need an RBAC check","commit_id":"167305d0915e6fae29d006f4228d29e46336da66"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"3b8619728129b60d421af00e85cab41a983aa19b","unresolved":false,"context_lines":[{"line_number":63,"context_line":"class RestoreBackup(tables.LinkAction):"},{"line_number":64,"context_line":"    name \u003d \"restore\""},{"line_number":65,"context_line":"    verbose_name \u003d _(\"Restore Backup\")"},{"line_number":66,"context_line":"    classes \u003d (\"ajax-modal\",)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def allowed(self, request, volume\u003dNone):"},{"line_number":69,"context_line":"        return volume.status \u003d\u003d \"available\""}],"source_content_type":"text/x-python","patch_set":12,"id":"1ae5cdf2_29e21ad5","line":66,"in_reply_to":"AAAAXH%2F%2F97E%3D","updated":"2014-06-26 13:11:07.000000000","message":"Done","commit_id":"167305d0915e6fae29d006f4228d29e46336da66"}],"openstack_dashboard/dashboards/project/volumes/backups/tabs.py":[{"author":{"_account_id":6650,"name":"Eric Peterson","email":"ejpetey@gmail.com","username":"ericpeterson-l"},"change_message_id":"9cfbec7426d0bd2731339887ba0e8ad5cc39305f","unresolved":false,"context_lines":[{"line_number":41,"context_line":"            exceptions.handle(self.request,"},{"line_number":42,"context_line":"                              _(\u0027Unable to retrieve backup details.\u0027),"},{"line_number":43,"context_line":"                              redirect\u003dredirect)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        return {\u0027backup\u0027: backup,"},{"line_number":46,"context_line":"                \u0027volume\u0027: volume}"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BBRw%3D","line":44,"updated":"2014-03-31 14:07:07.000000000","message":"same thing here too....  the code below will not work if exception is encountered.","commit_id":"0c879b0bf22cf727f9dd98108693597e7e4828b2"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"f04db597d61aeef2913cfb121c0073924ee74ed7","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from django.core.urlresolvers import reverse  # noqa"},{"line_number":19,"context_line":"from django.utils.translation import ugettext_lazy as _  # noqa"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from horizon import exceptions"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2F%2BDQ%3D","line":18,"updated":"2014-04-16 07:38:07.000000000","message":"# noqa should be removed","commit_id":"167305d0915e6fae29d006f4228d29e46336da66"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"3b8619728129b60d421af00e85cab41a983aa19b","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from django.core.urlresolvers import reverse  # noqa"},{"line_number":19,"context_line":"from django.utils.translation import ugettext_lazy as _  # noqa"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from horizon import exceptions"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ae5cdf2_290a1ad2","line":18,"in_reply_to":"AAAAXH%2F%2F%2BDQ%3D","updated":"2014-06-26 13:11:07.000000000","message":"Done","commit_id":"167305d0915e6fae29d006f4228d29e46336da66"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"f04db597d61aeef2913cfb121c0073924ee74ed7","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from django.core.urlresolvers import reverse  # noqa"},{"line_number":19,"context_line":"from django.utils.translation import ugettext_lazy as _  # noqa"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from horizon import exceptions"},{"line_number":22,"context_line":"from horizon import tabs"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2F%2BDM%3D","line":19,"updated":"2014-04-16 07:38:07.000000000","message":"ditto","commit_id":"167305d0915e6fae29d006f4228d29e46336da66"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"3b8619728129b60d421af00e85cab41a983aa19b","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from django.core.urlresolvers import reverse  # noqa"},{"line_number":19,"context_line":"from django.utils.translation import ugettext_lazy as _  # noqa"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from horizon import exceptions"},{"line_number":22,"context_line":"from horizon import tabs"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ae5cdf2_490be6d4","line":19,"in_reply_to":"AAAAXH%2F%2F%2BDM%3D","updated":"2014-06-26 13:11:07.000000000","message":"Done","commit_id":"167305d0915e6fae29d006f4228d29e46336da66"}],"openstack_dashboard/dashboards/project/volumes/backups/tests.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"32d9c02f690b9d1f458a7d8a5977740fb1532457","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                        api.nova: (\u0027server_list\u0027,),"},{"line_number":60,"context_line":"                        quotas: (\u0027tenant_quota_usages\u0027,)})"},{"line_number":61,"context_line":"    def test_backup_restore(self):"},{"line_number":62,"context_line":"        volume \u003d self.volumes.first()"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        formData \u003d {\u0027action\u0027: \u0027backups__restore__%s\u0027 % volume.id}"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FXtA%3D","line":62,"updated":"2013-11-08 03:14:10.000000000","message":"Should this come from self.volume_backups instead?","commit_id":"dd286f89516bd86911bdf7b078b4319cdfac7891"},{"author":{"_account_id":8545,"name":"Laura Frank","email":"ljfrank@gmail.com","username":"laura"},"change_message_id":"2d65b56e1726f5f216934a3857cb6af125f77d59","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                        api.nova: (\u0027server_list\u0027,),"},{"line_number":60,"context_line":"                        quotas: (\u0027tenant_quota_usages\u0027,)})"},{"line_number":61,"context_line":"    def test_backup_restore(self):"},{"line_number":62,"context_line":"        volume \u003d self.volumes.first()"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        formData \u003d {\u0027action\u0027: \u0027backups__restore__%s\u0027 % volume.id}"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FEtg%3D","line":62,"in_reply_to":"AAAATn%2F%2FXtA%3D","updated":"2013-11-14 19:30:38.000000000","message":"The restore action is actually performed on the volume, and not the volume backup.","commit_id":"dd286f89516bd86911bdf7b078b4319cdfac7891"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"32d9c02f690b9d1f458a7d8a5977740fb1532457","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        url \u003d reverse(\u0027horizon:project:volumes:index\u0027)"},{"line_number":82,"context_line":"        res \u003d self.client.post(url, formData, follow\u003dTrue)"},{"line_number":83,"context_line":"        self.assertTemplateUsed(res, VOLUME_INDEX_VIEW_TEMPLATE)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FXs0%3D","line":83,"updated":"2013-11-08 03:14:10.000000000","message":"How about test for delete backup?","commit_id":"dd286f89516bd86911bdf7b078b4319cdfac7891"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"814f5c96a6985102730c0b93bd8e18339b0f4e6d","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        cinder.volume_list(IsA(http.HttpRequest), search_opts\u003dNone).\\"},{"line_number":67,"context_line":"                           MultipleTimes().AndReturn(self.volumes.list())"},{"line_number":68,"context_line":"        cinder.volume_backup_list(IsA(http.HttpRequest)).\\"},{"line_number":69,"context_line":"                                  MultipleTimes().\\"},{"line_number":70,"context_line":"                                  AndReturn(self.volume_backups.list())"},{"line_number":71,"context_line":"        api.nova.server_list(IsA(http.HttpRequest), search_opts\u003dNone).\\"},{"line_number":72,"context_line":"                             AndReturn([self.servers.list(), False])"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BWbU%3D","line":69,"updated":"2013-11-27 02:21:15.000000000","message":"Can\u0027t we avoid using MultipleTimes()?","commit_id":"193267a957d048deb8cd7eec5a566c3dd4528bc8"},{"author":{"_account_id":8545,"name":"Laura Frank","email":"ljfrank@gmail.com","username":"laura"},"change_message_id":"9e3c3427cd264d578ea93662c7bba161a94d312b","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        cinder.volume_list(IsA(http.HttpRequest), search_opts\u003dNone).\\"},{"line_number":67,"context_line":"                           MultipleTimes().AndReturn(self.volumes.list())"},{"line_number":68,"context_line":"        cinder.volume_backup_list(IsA(http.HttpRequest)).\\"},{"line_number":69,"context_line":"                                  MultipleTimes().\\"},{"line_number":70,"context_line":"                                  AndReturn(self.volume_backups.list())"},{"line_number":71,"context_line":"        api.nova.server_list(IsA(http.HttpRequest), search_opts\u003dNone).\\"},{"line_number":72,"context_line":"                             AndReturn([self.servers.list(), False])"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BEyo%3D","line":69,"in_reply_to":"AAAATn%2F%2BWbU%3D","updated":"2013-12-02 22:29:11.000000000","message":"Nope, it is necessary in this case.","commit_id":"193267a957d048deb8cd7eec5a566c3dd4528bc8"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"f04db597d61aeef2913cfb121c0073924ee74ed7","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from django.core.urlresolvers import reverse  # noqa"},{"line_number":18,"context_line":"from django import http"},{"line_number":19,"context_line":"from mox import IsA  # noqa"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2F%2BDA%3D","line":17,"updated":"2014-04-16 07:38:07.000000000","message":"# noqa should be removed","commit_id":"167305d0915e6fae29d006f4228d29e46336da66"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"3b8619728129b60d421af00e85cab41a983aa19b","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from django.core.urlresolvers import reverse  # noqa"},{"line_number":18,"context_line":"from django import http"},{"line_number":19,"context_line":"from mox import IsA  # noqa"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1ae5cdf2_a96e2a94","line":17,"in_reply_to":"AAAAXH%2F%2F%2BDA%3D","updated":"2014-06-26 13:11:07.000000000","message":"Done","commit_id":"167305d0915e6fae29d006f4228d29e46336da66"}],"openstack_dashboard/dashboards/project/volumes/backups/views.py":[{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"f04db597d61aeef2913cfb121c0073924ee74ed7","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from django.core.urlresolvers import reverse_lazy  # noqa"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from horizon import forms"},{"line_number":20,"context_line":"from horizon import tabs"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2F%2BCg%3D","line":17,"updated":"2014-04-16 07:38:07.000000000","message":"# noqa should be removed","commit_id":"167305d0915e6fae29d006f4228d29e46336da66"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"3b8619728129b60d421af00e85cab41a983aa19b","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from django.core.urlresolvers import reverse_lazy  # noqa"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from horizon import forms"},{"line_number":20,"context_line":"from horizon import tabs"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ae5cdf2_695982fc","line":17,"in_reply_to":"AAAAXH%2F%2F%2BCg%3D","updated":"2014-06-26 13:11:07.000000000","message":"Done","commit_id":"167305d0915e6fae29d006f4228d29e46336da66"}],"openstack_dashboard/dashboards/project/volumes/tabs.py":[{"author":{"_account_id":6650,"name":"Eric Peterson","email":"ejpetey@gmail.com","username":"ericpeterson-l"},"change_message_id":"9cfbec7426d0bd2731339887ba0e8ad5cc39305f","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            backups \u003d []"},{"line_number":115,"context_line":"            volumes \u003d []"},{"line_number":116,"context_line":"            exceptions.handle(self.request, _(\"Unable to retrieve \""},{"line_number":117,"context_line":"                                              \"volume backups.\"))"},{"line_number":118,"context_line":"        for backup in backups:"},{"line_number":119,"context_line":"            volume \u003d volumes.get(backup.volume_id)"},{"line_number":120,"context_line":"            setattr(backup, \u0027_volume\u0027, volume)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BBQ4%3D","line":117,"updated":"2014-03-31 14:07:07.000000000","message":"here too with the exception stuff","commit_id":"0c879b0bf22cf727f9dd98108693597e7e4828b2"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"3386dd18b9dcf3e51446acf99b04eb78515361e8","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    name \u003d _(\"Volume Backups\")"},{"line_number":105,"context_line":"    slug \u003d \"backups_tab\""},{"line_number":106,"context_line":"    template_name \u003d (\"horizon/common/_detail_table.html\")"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def get_backups_data(self):"},{"line_number":109,"context_line":"        try:"},{"line_number":110,"context_line":"            backups \u003d api.cinder.volume_backup_list(self.request)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAWH%2F9NWo%3D","line":107,"updated":"2014-04-07 23:05:52.000000000","message":"Hide the backups tabs if cinder does not support it.\n\nYou override the allowed() method of TableTab and implement a check using api.cinder.extension_supported(request, \u0027Backups\u0027)","commit_id":"431b8f7531d923a0c0ec52a5f33aea287cc630bc"}],"openstack_dashboard/dashboards/project/volumes/templates/volumes/backups/_create_backup.html":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"814f5c96a6985102730c0b93bd8e18339b0f4e6d","unresolved":false,"context_lines":[{"line_number":21,"context_line":"{% endblock %}"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"{% block modal-footer %}"},{"line_number":24,"context_line":"  \u003cinput class\u003d\"btn btn-primary pull-right\" type\u003d\"submit\" value\u003d\"{% trans \"Create Volume Backup\" %}\" /\u003e"},{"line_number":25,"context_line":"  \u003ca href\u003d\"{% url \u0027horizon:project:volumes:index\u0027 %}\" class\u003d\"btn secondary cancel close\"\u003e{% trans \"Cancel\" %}\u003c/a\u003e"},{"line_number":26,"context_line":"{% endblock %}"}],"source_content_type":"text/html","patch_set":3,"id":"AAAATn%2F%2BWd4%3D","line":24,"updated":"2013-11-27 02:21:15.000000000","message":"It seems a bit longer as a button label. How about \"Create\" or \"Backup\"?","commit_id":"193267a957d048deb8cd7eec5a566c3dd4528bc8"},{"author":{"_account_id":8545,"name":"Laura Frank","email":"ljfrank@gmail.com","username":"laura"},"change_message_id":"9e3c3427cd264d578ea93662c7bba161a94d312b","unresolved":false,"context_lines":[{"line_number":21,"context_line":"{% endblock %}"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"{% block modal-footer %}"},{"line_number":24,"context_line":"  \u003cinput class\u003d\"btn btn-primary pull-right\" type\u003d\"submit\" value\u003d\"{% trans \"Create Volume Backup\" %}\" /\u003e"},{"line_number":25,"context_line":"  \u003ca href\u003d\"{% url \u0027horizon:project:volumes:index\u0027 %}\" class\u003d\"btn secondary cancel close\"\u003e{% trans \"Cancel\" %}\u003c/a\u003e"},{"line_number":26,"context_line":"{% endblock %}"}],"source_content_type":"text/html","patch_set":3,"id":"AAAATn%2F%2BEx0%3D","line":24,"in_reply_to":"AAAATn%2F%2BWd4%3D","updated":"2013-12-02 22:29:11.000000000","message":"No, we need to stay consistent. All other places in the application have \"Create X,\" so this should not be an exception.","commit_id":"193267a957d048deb8cd7eec5a566c3dd4528bc8"}],"openstack_dashboard/dashboards/project/volumes/templates/volumes/backups/_detail_overview.html":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"32d9c02f690b9d1f458a7d8a5977740fb1532457","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{% load i18n sizeformat parse_date %}"},{"line_number":2,"context_line":"{% load url from future %}"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"\u003ch3\u003e{% trans \"Volume Backup Overview\" %}: {{backup.display_name }}\u003c/h3\u003e"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"\u003cdiv class\u003d\"info row-fluid detail\"\u003e"},{"line_number":7,"context_line":"  \u003ch4\u003e{% trans \"Info\" %}\u003c/h4\u003e"}],"source_content_type":"text/html","patch_set":1,"id":"AAAATn%2F%2FXsU%3D","line":4,"updated":"2013-11-08 03:14:10.000000000","message":"Where does display_name come from?\n\nI suggest removing the name here and display the backup.name in the details.html instead. See comment for details.html","commit_id":"dd286f89516bd86911bdf7b078b4319cdfac7891"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"814f5c96a6985102730c0b93bd8e18339b0f4e6d","unresolved":false,"context_lines":[{"line_number":24,"context_line":"          {{ volume.display_name }}"},{"line_number":25,"context_line":"        {% else %}"},{"line_number":26,"context_line":"          {{ backup.volume_id }}"},{"line_number":27,"context_line":"        {% endif %}"},{"line_number":28,"context_line":"      \u003c/a\u003e"},{"line_number":29,"context_line":"    \u003c/dd\u003e"},{"line_number":30,"context_line":""}],"source_content_type":"text/html","patch_set":3,"id":"AAAATn%2F%2BWeg%3D","line":27,"updated":"2013-11-27 02:21:15.000000000","message":"I think it is better to display both volume_id and display_name.","commit_id":"193267a957d048deb8cd7eec5a566c3dd4528bc8"},{"author":{"_account_id":8545,"name":"Laura Frank","email":"ljfrank@gmail.com","username":"laura"},"change_message_id":"9e3c3427cd264d578ea93662c7bba161a94d312b","unresolved":false,"context_lines":[{"line_number":24,"context_line":"          {{ volume.display_name }}"},{"line_number":25,"context_line":"        {% else %}"},{"line_number":26,"context_line":"          {{ backup.volume_id }}"},{"line_number":27,"context_line":"        {% endif %}"},{"line_number":28,"context_line":"      \u003c/a\u003e"},{"line_number":29,"context_line":"    \u003c/dd\u003e"},{"line_number":30,"context_line":""}],"source_content_type":"text/html","patch_set":3,"id":"AAAATn%2F%2BEwg%3D","line":27,"in_reply_to":"AAAATn%2F%2BWeg%3D","updated":"2013-12-02 22:29:11.000000000","message":"I don\u0027t think that\u0027s necessary for this view. The display name is a more user-friendly identifier, and this is just a link to the volume itself. If they really want the ID, they can get it there.","commit_id":"193267a957d048deb8cd7eec5a566c3dd4528bc8"},{"author":{"_account_id":9739,"name":"Zhang Ningbo","email":"newbiezhang@126.com"},"change_message_id":"aa095bdaeff87b97fdb73f956b9e855c73540e99","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{% load i18n sizeformat parse_date %}"},{"line_number":2,"context_line":"{% load url from future %}"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"\u003ch3\u003e{% trans \"Volume Backup Overview\" %}\u003c/h3\u003e"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"\u003cdiv class\u003d\"info row-fluid detail\"\u003e"},{"line_number":7,"context_line":"  \u003ch4\u003e{% trans \"Info\" %}\u003c/h4\u003e"}],"source_content_type":"text/html","patch_set":7,"id":"AAAATn%2F80Rk%3D","line":4,"updated":"2013-12-20 01:06:17.000000000","message":"Better to modify this line as:\n       \u003ch3\u003e{% trans \"Volume Backup Overview\" %} : {{backup.name}} \u003c/h3\u003e\nthen, it is identical  with that of the file:\n      openstack_dashboard/dashboards/project/volumes/templates/volumes/_detail_overview.html","commit_id":"e7c443d42c54b1f9c5615ad3ba52954667e3f0ea"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"3386dd18b9dcf3e51446acf99b04eb78515361e8","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    \u003cdt\u003e{% trans \"Volume\" %}\u003c/dt\u003e"},{"line_number":21,"context_line":"    \u003cdd\u003e"},{"line_number":22,"context_line":"      \u003ca href\u003d\"{% url \u0027horizon:project:volumes:volumes:detail\u0027 backup.volume_id %}\"\u003e"},{"line_number":23,"context_line":"        {% if volume.display_name %}"},{"line_number":24,"context_line":"          {{ volume.display_name }}"},{"line_number":25,"context_line":"        {% else %}"},{"line_number":26,"context_line":"          {{ backup.volume_id }}"}],"source_content_type":"text/html","patch_set":11,"id":"AAAAWH%2F9NME%3D","line":23,"updated":"2014-04-07 23:05:52.000000000","message":"Depending on cinder version display_name may not be available.  You can just use volume.name here and remove the if-else condition, the Volume class wrapper takes care of checking name/display_name/id.\n\nhttps://github.com/openstack/horizon/blob/master/openstack_dashboard/api/cinder.py#L66","commit_id":"431b8f7531d923a0c0ec52a5f33aea287cc630bc"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"3386dd18b9dcf3e51446acf99b04eb78515361e8","unresolved":false,"context_lines":[{"line_number":36,"context_line":"  \u003chr class\u003d\"header_rule\"\u003e"},{"line_number":37,"context_line":"  \u003cdl\u003e"},{"line_number":38,"context_line":"    \u003cdt\u003e{% trans \"Size\" %}\u003c/dt\u003e"},{"line_number":39,"context_line":"    \u003cdd\u003e{{ backup.size }} {% trans \"GB\" %}\u003c/dd\u003e"},{"line_number":40,"context_line":"    \u003cdt\u003e{% trans \"Created\" %}\u003c/dt\u003e"},{"line_number":41,"context_line":"    \u003cdd\u003e{{ backup.created_at|parse_date }}\u003c/dd\u003e"},{"line_number":42,"context_line":"  \u003c/dl\u003e"}],"source_content_type":"text/html","patch_set":11,"id":"AAAAWH%2F9NLo%3D","line":39,"updated":"2014-04-07 23:05:52.000000000","message":"is size number of Gig or the actual byte size? If byte size, you can use the filesizeformat filter here.","commit_id":"431b8f7531d923a0c0ec52a5f33aea287cc630bc"}],"openstack_dashboard/dashboards/project/volumes/templates/volumes/backups/detail.html":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"32d9c02f690b9d1f458a7d8a5977740fb1532457","unresolved":false,"context_lines":[{"line_number":3,"context_line":"{% block title %}{% trans \"Volume Backup Details\" %}{% endblock %}"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"{% block page_header %}"},{"line_number":6,"context_line":"  {% include \"horizon/common/_page_header.html\" with title\u003d_(\"Volume Backup Details\") %}"},{"line_number":7,"context_line":"{% endblock page_header %}"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"{% block main %}"}],"source_content_type":"text/html","patch_set":1,"id":"AAAATn%2F%2FXts%3D","line":6,"updated":"2013-11-08 03:14:10.000000000","message":"For consistency with other Details panel, add the backup name here.\n\nSimilar to instances panel: https://github.com/openstack/horizon/blob/master/openstack_dashboard/dashboards/project/instances/templates/instances/detail.html#L6","commit_id":"dd286f89516bd86911bdf7b078b4319cdfac7891"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"814f5c96a6985102730c0b93bd8e18339b0f4e6d","unresolved":false,"context_lines":[{"line_number":3,"context_line":"{% block title %}{% trans \"Volume Backup Details\" %}{% endblock %}"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"{% block page_header %}"},{"line_number":6,"context_line":"  {% include \"horizon/common/_page_header.html\" with title\u003d_(\"Volume Details: \")|add:backup.display_name|default:_(\"Volume Details:\") %}"},{"line_number":7,"context_line":"{% endblock page_header %}"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"{% block main %}"}],"source_content_type":"text/html","patch_set":3,"id":"AAAATn%2F%2BWe4%3D","line":6,"updated":"2013-11-27 02:21:15.000000000","message":"Volume Backup Details ?","commit_id":"193267a957d048deb8cd7eec5a566c3dd4528bc8"},{"author":{"_account_id":9739,"name":"Zhang Ningbo","email":"newbiezhang@126.com"},"change_message_id":"aa095bdaeff87b97fdb73f956b9e855c73540e99","unresolved":false,"context_lines":[{"line_number":3,"context_line":"{% block title %}{% trans \"Volume Backup Details\" %}{% endblock %}"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"{% block page_header %}"},{"line_number":6,"context_line":"  {% include \"horizon/common/_page_header.html\" with title\u003d_(\"Volume Backup Details: \")|add:backup.display_name|default:_(\"Volume Backup Details:\") %}"},{"line_number":7,"context_line":"{% endblock page_header %}"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"{% block main %}"}],"source_content_type":"text/html","patch_set":7,"id":"AAAATn%2F80TA%3D","line":6,"updated":"2013-12-20 01:06:17.000000000","message":"Modified as:\n     {% include \"horizon/common/_page_header.html\" with title\u003d_(\"Volume Backup Details\") %}\nor, this error will accur:\n    VariableDoesNotExist at /project/volumes/backup/\u003cbackup_id\u003e/\n    Failed lookup for key [backup] in u\u0027...\u0027\n    ...","commit_id":"e7c443d42c54b1f9c5615ad3ba52954667e3f0ea"}],"openstack_dashboard/dashboards/project/volumes/urls.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"814f5c96a6985102730c0b93bd8e18339b0f4e6d","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from django.conf.urls.defaults import include  # noqa"},{"line_number":18,"context_line":"from django.conf.urls import patterns  # noqa"},{"line_number":19,"context_line":"from django.conf.urls import url  # noqa"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BWnk%3D","line":17,"updated":"2013-11-27 02:21:15.000000000","message":"urls.defaults is deprecated in Django 1.5. Please use django.conf.urls","commit_id":"193267a957d048deb8cd7eec5a566c3dd4528bc8"}],"openstack_dashboard/dashboards/project/volumes/views.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"814f5c96a6985102730c0b93bd8e18339b0f4e6d","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from horizon import exceptions"},{"line_number":24,"context_line":"from horizon import tables"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"import logging"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from openstack_dashboard.api import cinder"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BWms%3D","line":26,"updated":"2013-11-27 02:21:15.000000000","message":"logging is a standard module. Move it before django import.","commit_id":"193267a957d048deb8cd7eec5a566c3dd4528bc8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"814f5c96a6985102730c0b93bd8e18339b0f4e6d","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from openstack_dashboard.dashboards.project.volumes.volumes \\"},{"line_number":31,"context_line":"    import tables as volume_tables"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"from openstack_dashboard.dashboards.project.volumes.volumes \\"},{"line_number":34,"context_line":"    import views as volume_views"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BWnM%3D","line":32,"updated":"2013-11-27 02:21:15.000000000","message":"No blank line here","commit_id":"193267a957d048deb8cd7eec5a566c3dd4528bc8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"814f5c96a6985102730c0b93bd8e18339b0f4e6d","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"from openstack_dashboard.dashboards.project.volumes.volumes \\"},{"line_number":34,"context_line":"    import views as volume_views"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"from openstack_dashboard.dashboards.project.volumes.backups \\"},{"line_number":37,"context_line":"    import tables as backup_tables"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BWnI%3D","line":35,"updated":"2013-11-27 02:21:15.000000000","message":"No blank line here","commit_id":"193267a957d048deb8cd7eec5a566c3dd4528bc8"}],"openstack_dashboard/dashboards/project/volumes/volumes/tables.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"32d9c02f690b9d1f458a7d8a5977740fb1532457","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    url \u003d \"horizon:project:volumes:volumes:create_backup\""},{"line_number":104,"context_line":"    classes \u003d (\"ajax-modal\",)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def allowed(self, request, volume\u003dNone):"},{"line_number":107,"context_line":"        return volume.status \u003d\u003d \"available\""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FXrs%3D","line":106,"updated":"2013-11-08 03:14:10.000000000","message":"We should also check that the user has Object Storage service available,","commit_id":"dd286f89516bd86911bdf7b078b4319cdfac7891"},{"author":{"_account_id":8545,"name":"Laura Frank","email":"ljfrank@gmail.com","username":"laura"},"change_message_id":"2d65b56e1726f5f216934a3857cb6af125f77d59","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    url \u003d \"horizon:project:volumes:volumes:create_backup\""},{"line_number":104,"context_line":"    classes \u003d (\"ajax-modal\",)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def allowed(self, request, volume\u003dNone):"},{"line_number":107,"context_line":"        return volume.status \u003d\u003d \"available\""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FErc%3D","line":106,"in_reply_to":"AAAATn%2F%2FXrs%3D","updated":"2013-11-14 19:30:38.000000000","message":"I had a separate patch for that, but I\u0027ll add that in here.","commit_id":"dd286f89516bd86911bdf7b078b4319cdfac7891"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"814f5c96a6985102730c0b93bd8e18339b0f4e6d","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        except exceptions.ServiceCatalogException:"},{"line_number":111,"context_line":"            endpoint \u003d None"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        return status and endpoint"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"class UpdateRow(tables.Row):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BWfE%3D","line":113,"updated":"2013-11-27 02:21:15.000000000","message":"It is better to return True or False. At now None can be returned.","commit_id":"193267a957d048deb8cd7eec5a566c3dd4528bc8"},{"author":{"_account_id":8545,"name":"Laura Frank","email":"ljfrank@gmail.com","username":"laura"},"change_message_id":"9e3c3427cd264d578ea93662c7bba161a94d312b","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        except exceptions.ServiceCatalogException:"},{"line_number":111,"context_line":"            endpoint \u003d None"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        return status and endpoint"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"class UpdateRow(tables.Row):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BEuE%3D","line":113,"in_reply_to":"AAAATn%2F%2BWfE%3D","updated":"2013-12-02 22:29:11.000000000","message":"Updated so endpoint \u003d False in the event of an exception","commit_id":"193267a957d048deb8cd7eec5a566c3dd4528bc8"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"1f3a529aa5bec9751f872495e1910870daa48092","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    def allowed(self, request, volume\u003dNone):"},{"line_number":107,"context_line":"        status \u003d volume.status \u003d\u003d \"available\""},{"line_number":108,"context_line":"        try:"},{"line_number":109,"context_line":"            endpoint \u003d api.base.url_for(request, \u0027object-store\u0027)"},{"line_number":110,"context_line":"        except exceptions.ServiceCatalogException:"},{"line_number":111,"context_line":"            endpoint \u003d False"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F9D74%3D","line":109,"updated":"2013-12-17 07:02:05.000000000","message":"api.base.is_service_enabled()  would be better here.  Then no need for the try/except","commit_id":"e7c443d42c54b1f9c5615ad3ba52954667e3f0ea"},{"author":{"_account_id":8545,"name":"Laura Frank","email":"ljfrank@gmail.com","username":"laura"},"change_message_id":"34b3c4a52bd2310f5a96a0c3910d7490d44048d1","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    def allowed(self, request, volume\u003dNone):"},{"line_number":107,"context_line":"        status \u003d volume.status \u003d\u003d \"available\""},{"line_number":108,"context_line":"        try:"},{"line_number":109,"context_line":"            endpoint \u003d api.base.url_for(request, \u0027object-store\u0027)"},{"line_number":110,"context_line":"        except exceptions.ServiceCatalogException:"},{"line_number":111,"context_line":"            endpoint \u003d False"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2Fh%2Bc%3D","line":109,"in_reply_to":"AAAATn%2F9D74%3D","updated":"2014-02-12 15:18:17.000000000","message":"Thanks, changed.","commit_id":"e7c443d42c54b1f9c5615ad3ba52954667e3f0ea"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"3386dd18b9dcf3e51446acf99b04eb78515361e8","unresolved":false,"context_lines":[{"line_number":149,"context_line":"    url \u003d \"horizon:project:volumes:volumes:create_backup\""},{"line_number":150,"context_line":"    classes \u003d (\"ajax-modal\",)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def allowed(self, request, volume\u003dNone):"},{"line_number":153,"context_line":"        return volume.status \u003d\u003d \"available\""},{"line_number":154,"context_line":""},{"line_number":155,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAWH%2F9NXw%3D","line":152,"updated":"2014-04-07 23:05:52.000000000","message":"Add a check here if cinder supports backups.\n\nYou can use this call: api.cinder.extension_supported(request, \"Backups\")","commit_id":"431b8f7531d923a0c0ec52a5f33aea287cc630bc"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"f04db597d61aeef2913cfb121c0073924ee74ed7","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    name \u003d \"backups\""},{"line_number":148,"context_line":"    verbose_name \u003d _(\"Create Backup\")"},{"line_number":149,"context_line":"    url \u003d \"horizon:project:volumes:volumes:create_backup\""},{"line_number":150,"context_line":"    classes \u003d (\"ajax-modal\",)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def allowed(self, request, volume\u003dNone):"},{"line_number":153,"context_line":"        return volume.status \u003d\u003d \"available\""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2F97Q%3D","line":150,"updated":"2014-04-16 07:38:07.000000000","message":"the new table action needs an RBAC check.","commit_id":"167305d0915e6fae29d006f4228d29e46336da66"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"3b8619728129b60d421af00e85cab41a983aa19b","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    name \u003d \"backups\""},{"line_number":148,"context_line":"    verbose_name \u003d _(\"Create Backup\")"},{"line_number":149,"context_line":"    url \u003d \"horizon:project:volumes:volumes:create_backup\""},{"line_number":150,"context_line":"    classes \u003d (\"ajax-modal\",)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def allowed(self, request, volume\u003dNone):"},{"line_number":153,"context_line":"        return volume.status \u003d\u003d \"available\""}],"source_content_type":"text/x-python","patch_set":12,"id":"1ae5cdf2_493da68d","line":150,"in_reply_to":"AAAAXH%2F%2F97Q%3D","updated":"2014-06-26 13:11:07.000000000","message":"Done","commit_id":"167305d0915e6fae29d006f4228d29e46336da66"}],"openstack_dashboard/dashboards/project/volumes/volumes/tabs.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"814f5c96a6985102730c0b93bd8e18339b0f4e6d","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    name \u003d _(\"Overview\")"},{"line_number":28,"context_line":"    slug \u003d \"overview\""},{"line_number":29,"context_line":"    template_name \u003d (\"project/volumes/volumes/\""},{"line_number":30,"context_line":"                     \"_detail_overview.html\")"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def get_context_data(self, request):"},{"line_number":33,"context_line":"        volume_id \u003d self.tab_group.kwargs[\u0027volume_id\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BWfw%3D","line":30,"updated":"2013-11-27 02:21:15.000000000","message":"This fits into one line.","commit_id":"193267a957d048deb8cd7eec5a566c3dd4528bc8"}],"openstack_dashboard/dashboards/project/volumes/volumes/tests.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"32d9c02f690b9d1f458a7d8a5977740fb1532457","unresolved":false,"context_lines":[{"line_number":652,"context_line":"                                 \u0027volume_backup_list\u0027,),"},{"line_number":653,"context_line":"                        api.nova: (\u0027server_list\u0027,),"},{"line_number":654,"context_line":"                        quotas: (\u0027tenant_quota_usages\u0027,)})"},{"line_number":655,"context_line":"    def test_delete_backup(self):"},{"line_number":656,"context_line":"        backup \u003d self.volume_backups.first()"},{"line_number":657,"context_line":"        formData \u003d {\u0027action\u0027:"},{"line_number":658,"context_line":"                    \u0027backups__delete__%s\u0027 % backup.id}"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FXsM%3D","line":655,"updated":"2013-11-08 03:14:10.000000000","message":"This should probably go to backups/test.py","commit_id":"dd286f89516bd86911bdf7b078b4319cdfac7891"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"814f5c96a6985102730c0b93bd8e18339b0f4e6d","unresolved":false,"context_lines":[{"line_number":587,"context_line":"                    \u0027volumes__delete__%s\u0027 % volume.id}"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"        cinder.volume_list(IsA(http.HttpRequest), search_opts\u003dNone).\\"},{"line_number":590,"context_line":"                           MultipleTimes().AndReturn(self.volumes.list())"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"        cinder.volume_backup_list(IsA(http.HttpRequest)).\\"},{"line_number":593,"context_line":"                                  MultipleTimes().\\"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BWf4%3D","line":590,"updated":"2013-11-27 02:21:15.000000000","message":"If possible, it is better to avoid using MutipleTimes because calling order is not checked if we use MultipleTimes.","commit_id":"193267a957d048deb8cd7eec5a566c3dd4528bc8"}],"openstack_dashboard/dashboards/project/volumes/volumes/urls.py":[{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"3e71e2d46c0afd20363b0f2d7a3fd8b5df136aa6","unresolved":false,"context_lines":[{"line_number":29,"context_line":"urlpatterns \u003d patterns(VIEWS_MOD,"},{"line_number":30,"context_line":"    url(r\u0027^create/$\u0027, volume_views.CreateView.as_view(), name\u003d\u0027create\u0027),"},{"line_number":31,"context_line":"    url(r\u0027^(?P\u003cvolume_id\u003e[^/]+)/$\u0027,"},{"line_number":32,"context_line":"        volume_views.VolumeDetailView.as_view(),"},{"line_number":33,"context_line":"        name\u003d\u0027detail\u0027),"},{"line_number":34,"context_line":"    url(r\u0027^(?P\u003cvolume_id\u003e[^/]+)/attach/$\u0027,"},{"line_number":35,"context_line":"        volume_views.EditAttachmentsView.as_view(),"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FW4Q%3D","line":32,"updated":"2013-11-08 10:40:52.000000000","message":"Please consider using two lines instead of three lines here and below: \n\nurl(r\u0027^(?P\u003cvolume_id\u003e[^/]+)/$\u0027,\n    volume_views.VolumeDetailView.as_view(), name\u003d\u0027detail\u0027),","commit_id":"dd286f89516bd86911bdf7b078b4319cdfac7891"},{"author":{"_account_id":8545,"name":"Laura Frank","email":"ljfrank@gmail.com","username":"laura"},"change_message_id":"19fd4c1f7297fa55ee209fd3ad8a4dafaabb6938","unresolved":false,"context_lines":[{"line_number":29,"context_line":"urlpatterns \u003d patterns(VIEWS_MOD,"},{"line_number":30,"context_line":"    url(r\u0027^create/$\u0027, volume_views.CreateView.as_view(), name\u003d\u0027create\u0027),"},{"line_number":31,"context_line":"    url(r\u0027^(?P\u003cvolume_id\u003e[^/]+)/$\u0027,"},{"line_number":32,"context_line":"        volume_views.VolumeDetailView.as_view(),"},{"line_number":33,"context_line":"        name\u003d\u0027detail\u0027),"},{"line_number":34,"context_line":"    url(r\u0027^(?P\u003cvolume_id\u003e[^/]+)/attach/$\u0027,"},{"line_number":35,"context_line":"        volume_views.EditAttachmentsView.as_view(),"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FBtM%3D","line":32,"in_reply_to":"AAAATn%2F%2FDBk%3D","updated":"2013-11-15 13:58:25.000000000","message":"I think line breaks increase readability in this particular case because the syntax for URLs is a bit messy, but I do see your point. And of course refactoring is expected when necessary. I updated the line breaks in the latest patch set.","commit_id":"dd286f89516bd86911bdf7b078b4319cdfac7891"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"be7cfd52cde1e87fb1cd41191b412d90cb55f0ed","unresolved":false,"context_lines":[{"line_number":29,"context_line":"urlpatterns \u003d patterns(VIEWS_MOD,"},{"line_number":30,"context_line":"    url(r\u0027^create/$\u0027, volume_views.CreateView.as_view(), name\u003d\u0027create\u0027),"},{"line_number":31,"context_line":"    url(r\u0027^(?P\u003cvolume_id\u003e[^/]+)/$\u0027,"},{"line_number":32,"context_line":"        volume_views.VolumeDetailView.as_view(),"},{"line_number":33,"context_line":"        name\u003d\u0027detail\u0027),"},{"line_number":34,"context_line":"    url(r\u0027^(?P\u003cvolume_id\u003e[^/]+)/attach/$\u0027,"},{"line_number":35,"context_line":"        volume_views.EditAttachmentsView.as_view(),"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FDBk%3D","line":32,"in_reply_to":"AAAATn%2F%2FEqs%3D","updated":"2013-11-15 07:30:32.000000000","message":"Yes that\u0027s just for readability. The fact that we didn\u0027t write it is not the reason we must leave it as is. The code is not sent us by divine coders, so we should refactor it when possible. Otherwise we will finally get something totally unreadable and probably not working as expected.\n\nAlso it is considered good practice to address all comments before submitting the next patch set.","commit_id":"dd286f89516bd86911bdf7b078b4319cdfac7891"},{"author":{"_account_id":8545,"name":"Laura Frank","email":"ljfrank@gmail.com","username":"laura"},"change_message_id":"2d65b56e1726f5f216934a3857cb6af125f77d59","unresolved":false,"context_lines":[{"line_number":29,"context_line":"urlpatterns \u003d patterns(VIEWS_MOD,"},{"line_number":30,"context_line":"    url(r\u0027^create/$\u0027, volume_views.CreateView.as_view(), name\u003d\u0027create\u0027),"},{"line_number":31,"context_line":"    url(r\u0027^(?P\u003cvolume_id\u003e[^/]+)/$\u0027,"},{"line_number":32,"context_line":"        volume_views.VolumeDetailView.as_view(),"},{"line_number":33,"context_line":"        name\u003d\u0027detail\u0027),"},{"line_number":34,"context_line":"    url(r\u0027^(?P\u003cvolume_id\u003e[^/]+)/attach/$\u0027,"},{"line_number":35,"context_line":"        volume_views.EditAttachmentsView.as_view(),"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FEqs%3D","line":32,"in_reply_to":"AAAATn%2F%2FW4Q%3D","updated":"2013-11-14 19:30:38.000000000","message":"Is that just for readability? I didn\u0027t write these myself -- just moved them -- but I\u0027m happy to change them.","commit_id":"dd286f89516bd86911bdf7b078b4319cdfac7891"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"814f5c96a6985102730c0b93bd8e18339b0f4e6d","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from django.conf.urls.defaults import patterns  # noqa"},{"line_number":18,"context_line":"from django.conf.urls.defaults import url  # noqa"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from openstack_dashboard.dashboards.project.volumes.backups \\"},{"line_number":21,"context_line":"    import views as backup_views"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BWl4%3D","line":18,"updated":"2013-11-27 02:21:15.000000000","message":"Use django.conf.urls instead of urls.defaults (deprecated)","commit_id":"193267a957d048deb8cd7eec5a566c3dd4528bc8"}],"openstack_dashboard/dashboards/project/volumes/volumes/views.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"814f5c96a6985102730c0b93bd8e18339b0f4e6d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"from django.core.urlresolvers import reverse  # noqa"},{"line_number":2,"context_line":"from django.core.urlresolvers import reverse_lazy  # noqa"},{"line_number":3,"context_line":"from django.utils.datastructures import SortedDict  # noqa"},{"line_number":4,"context_line":"from django.utils.translation import ugettext_lazy as _  # noqa"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BWlg%3D","line":1,"updated":"2013-11-27 02:21:15.000000000","message":"Insert copyright header at the top of the file.","commit_id":"193267a957d048deb8cd7eec5a566c3dd4528bc8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"814f5c96a6985102730c0b93bd8e18339b0f4e6d","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"from openstack_dashboard import api"},{"line_number":12,"context_line":"from openstack_dashboard.api import cinder"},{"line_number":13,"context_line":"from openstack_dashboard.usage import quotas"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from openstack_dashboard.dashboards.project.volumes.volumes \\"},{"line_number":16,"context_line":"    import forms as volume_forms"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BWlY%3D","line":13,"updated":"2013-11-27 02:21:15.000000000","message":"no blank lines inside openstack_dashboard import group.","commit_id":"193267a957d048deb8cd7eec5a566c3dd4528bc8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"814f5c96a6985102730c0b93bd8e18339b0f4e6d","unresolved":false,"context_lines":[{"line_number":25,"context_line":"class VolumeTableMixIn(object):"},{"line_number":26,"context_line":"    def _get_volumes(self, search_opts\u003dNone):"},{"line_number":27,"context_line":"        try:"},{"line_number":28,"context_line":"            return cinder.volume_list(self.request, search_opts\u003dsearch_opts)"},{"line_number":29,"context_line":"        except Exception:"},{"line_number":30,"context_line":"            exceptions.handle(self.request,"},{"line_number":31,"context_line":"                              _(\u0027Unable to retrieve volume list.\u0027))"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BWlE%3D","line":28,"updated":"2013-11-27 02:21:15.000000000","message":"I prefer to api.cinder rather than cinder because api.nova is used and for better consistency.","commit_id":"193267a957d048deb8cd7eec5a566c3dd4528bc8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"814f5c96a6985102730c0b93bd8e18339b0f4e6d","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        instances \u003d SortedDict([(inst.id, inst) for inst in instances])"},{"line_number":54,"context_line":"        for volume in volumes:"},{"line_number":55,"context_line":"            for att in volume.attachments:"},{"line_number":56,"context_line":"                server_id \u003d att.get(\u0027server_id\u0027, None)"},{"line_number":57,"context_line":"                att[\u0027instance\u0027] \u003d instances.get(server_id, None)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BWlA%3D","line":56,"updated":"2013-11-27 02:21:15.000000000","message":"None is unnecessary.","commit_id":"193267a957d048deb8cd7eec5a566c3dd4528bc8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"814f5c96a6985102730c0b93bd8e18339b0f4e6d","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        handled \u003d self.construct_tables()"},{"line_number":181,"context_line":"        if handled:"},{"line_number":182,"context_line":"            return handled"},{"line_number":183,"context_line":"        return self.render_to_response(self.get_context_data(**kwargs))"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def post(self, request, *args, **kwargs):"},{"line_number":186,"context_line":"        form \u003d self.get_form()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BWgI%3D","line":183,"updated":"2013-11-27 02:21:15.000000000","message":"Looks unnecessary. It is exactly same as get in the parent class.","commit_id":"193267a957d048deb8cd7eec5a566c3dd4528bc8"}],"openstack_dashboard/test/test_data/cinder_data.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"32d9c02f690b9d1f458a7d8a5977740fb1532457","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    TEST.cinder_quotas \u003d utils.TestDataContainer()"},{"line_number":27,"context_line":"    TEST.cinder_quota_usages \u003d utils.TestDataContainer()"},{"line_number":28,"context_line":"    TEST.cinder_availability_zones \u003d utils.TestDataContainer()"},{"line_number":29,"context_line":"    TEST.restores \u003d utils.TestDataContainer()"},{"line_number":30,"context_line":"    TEST.volume_backups \u003d utils.TestDataContainer()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    # Quota Sets"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FXtI%3D","line":29,"updated":"2013-11-08 03:14:10.000000000","message":"TEST.restores seem not used anywhere","commit_id":"dd286f89516bd86911bdf7b078b4319cdfac7891"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"3386dd18b9dcf3e51446acf99b04eb78515361e8","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    TEST.cinder_volume_snapshots.add(api.cinder.VolumeSnapshot(snapshot))"},{"line_number":99,"context_line":"    TEST.cinder_volume_snapshots.add(api.cinder.VolumeSnapshot(snapshot2))"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    volume_backup1 \u003d vol_backups.VolumeBackup(vol_backups."},{"line_number":102,"context_line":"                                              VolumeBackupManager(None),"},{"line_number":103,"context_line":"                     {\u0027id\u0027: \u0027a374cbb8-3f99-4c3f-a2ef-3edbec842e31\u0027,"},{"line_number":104,"context_line":"                     \u0027name\u0027: \u0027backup1\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAWH%2F9NO4%3D","line":101,"updated":"2014-04-07 23:05:52.000000000","message":"Volume and snashot have different  schema for V1 and V2, would backups have that problem?","commit_id":"431b8f7531d923a0c0ec52a5f33aea287cc630bc"}]}
