)]}'
{"nova/api/openstack/compute/contrib/quotas.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"d41a27540f66a06f0582ffc3c4bfb996f67d813e","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            maximum \u003d settable_quotas[key][\u0027maximum\u0027]"},{"line_number":198,"context_line":"            self._validate_quota_limit(value, minimum, maximum)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        for key, value in quota_set.items():"},{"line_number":201,"context_line":"            if key in NON_QUOTA_KEYS or (not value and value !\u003d 0):"},{"line_number":202,"context_line":"                continue"},{"line_number":203,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7adec928_6b9e18ba","line":200,"updated":"2014-05-23 01:51:09.000000000","message":"The above code seems a little redundant.\n\nSo how about store validated values into a new dict data at line 199 and using here instead of quota_set.items()?\nWe will be able to remove current line201-202.","commit_id":"dee92ffa71af8615576e4200a685cb3c7005ac22"},{"author":{"_account_id":9275,"name":"Leandro Ignacio Costantino","email":"leandro.i.costantino@intel.com","username":"lcostantino"},"change_message_id":"1ec9a85c9763ea236a6c91a2ad71bc2c8956ad65","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            maximum \u003d settable_quotas[key][\u0027maximum\u0027]"},{"line_number":198,"context_line":"            self._validate_quota_limit(value, minimum, maximum)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        for key, value in quota_set.items():"},{"line_number":201,"context_line":"            if key in NON_QUOTA_KEYS or (not value and value !\u003d 0):"},{"line_number":202,"context_line":"                continue"},{"line_number":203,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7adec928_ab290039","line":200,"in_reply_to":"7adec928_6b9e18ba","updated":"2014-05-23 02:11:14.000000000","message":"Sure, thanks","commit_id":"dee92ffa71af8615576e4200a685cb3c7005ac22"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"8496cd68d818dfc365edae157ee3a833ed9710a4","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                db.quota_update(context, project_id, key, value,"},{"line_number":208,"context_line":"                                user_id\u003duser_id)"},{"line_number":209,"context_line":"            except exception.AdminRequired:"},{"line_number":210,"context_line":"                raise webob.exc.HTTPForbidden()"},{"line_number":211,"context_line":"        return {\u0027quota_set\u0027: self._get_quotas(context, id, user_id\u003duser_id)}"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    @wsgi.serializers(xml\u003dQuotaTemplate)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXH%2F%2FpMc%3D","line":210,"updated":"2014-04-18 15:13:06.000000000","message":"if there is an exception in one of the values - then do we continue?\nshould there be rollback?","commit_id":"dee92ffa71af8615576e4200a685cb3c7005ac22"},{"author":{"_account_id":9275,"name":"Leandro Ignacio Costantino","email":"leandro.i.costantino@intel.com","username":"lcostantino"},"change_message_id":"28ea4106c74b42d758d39cda35260989645b4f3f","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                db.quota_update(context, project_id, key, value,"},{"line_number":208,"context_line":"                                user_id\u003duser_id)"},{"line_number":209,"context_line":"            except exception.AdminRequired:"},{"line_number":210,"context_line":"                raise webob.exc.HTTPForbidden()"},{"line_number":211,"context_line":"        return {\u0027quota_set\u0027: self._get_quotas(context, id, user_id\u003duser_id)}"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    @wsgi.serializers(xml\u003dQuotaTemplate)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXH%2F%2FlZQ%3D","line":210,"in_reply_to":"AAAAXH%2F%2FpMc%3D","updated":"2014-04-19 01:13:08.000000000","message":"garyk, there\u0027s no rollback and no continuation. \nIt\u0027s the same behavior as before. Rollback should be added, but i think there need a better rewrite on the session of db.quota_create/update","commit_id":"dee92ffa71af8615576e4200a685cb3c7005ac22"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"2ca45fbd87913094ec412c90851344406bd1713e","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        for key, value in quota_set.items():"},{"line_number":172,"context_line":"            if key in NON_QUOTA_KEYS or (not value and value !\u003d 0):"},{"line_number":173,"context_line":"                continue"},{"line_number":174,"context_line":"            valid_quotas[key] \u003d value"},{"line_number":175,"context_line":"            # validate whether already used and reserved exceeds the new"},{"line_number":176,"context_line":"            # quota, this check will be ignored if admin want to force"},{"line_number":177,"context_line":"            # update"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_6e854658","line":174,"updated":"2014-05-23 03:17:32.000000000","message":"I prefer to move this line to line 199 because _validate_quota_limit() checks the value.\n\nThe result is the same, but the dict name includes \"valid\" so the dict should be better to be stored after the validation from the viewpoint of readability.","commit_id":"340f698ad0864f0fd6a5e3583b303b067f2ef730"},{"author":{"_account_id":9275,"name":"Leandro Ignacio Costantino","email":"leandro.i.costantino@intel.com","username":"lcostantino"},"change_message_id":"86c1e5d12f7996ee8ca4bb6f1c70d064dbf9d8ed","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        for key, value in quota_set.items():"},{"line_number":172,"context_line":"            if key in NON_QUOTA_KEYS or (not value and value !\u003d 0):"},{"line_number":173,"context_line":"                continue"},{"line_number":174,"context_line":"            valid_quotas[key] \u003d value"},{"line_number":175,"context_line":"            # validate whether already used and reserved exceeds the new"},{"line_number":176,"context_line":"            # quota, this check will be ignored if admin want to force"},{"line_number":177,"context_line":"            # update"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_894b612a","line":174,"in_reply_to":"7adec928_6e854658","updated":"2014-05-23 12:29:34.000000000","message":"Done","commit_id":"340f698ad0864f0fd6a5e3583b303b067f2ef730"}],"nova/api/openstack/compute/plugins/v3/quota_sets.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"2ca45fbd87913094ec412c90851344406bd1713e","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            maximum \u003d settable_quotas[key][\u0027maximum\u0027]"},{"line_number":182,"context_line":"            self._validate_quota_limit(value, minimum, maximum)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        for key, value in body[\u0027quota_set\u0027].iteritems():"},{"line_number":185,"context_line":"            if key \u003d\u003d \u0027force\u0027 or (not value and value !\u003d 0):"},{"line_number":186,"context_line":"                continue"},{"line_number":187,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_ce673ae9","line":184,"updated":"2014-05-23 03:17:32.000000000","message":"Sorry for not pointing here in my previous review.\nhere also is necessary to be applied with the same change.","commit_id":"340f698ad0864f0fd6a5e3583b303b067f2ef730"},{"author":{"_account_id":9275,"name":"Leandro Ignacio Costantino","email":"leandro.i.costantino@intel.com","username":"lcostantino"},"change_message_id":"86c1e5d12f7996ee8ca4bb6f1c70d064dbf9d8ed","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            maximum \u003d settable_quotas[key][\u0027maximum\u0027]"},{"line_number":182,"context_line":"            self._validate_quota_limit(value, minimum, maximum)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        for key, value in body[\u0027quota_set\u0027].iteritems():"},{"line_number":185,"context_line":"            if key \u003d\u003d \u0027force\u0027 or (not value and value !\u003d 0):"},{"line_number":186,"context_line":"                continue"},{"line_number":187,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_49107901","line":184,"in_reply_to":"7adec928_ce673ae9","updated":"2014-05-23 12:29:34.000000000","message":"np, my mistake. thanks","commit_id":"340f698ad0864f0fd6a5e3583b303b067f2ef730"}],"nova/tests/api/openstack/compute/contrib/test_quotas.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"a6b71c214630266b6cfacccaea1ab925efb3a155","unresolved":false,"context_lines":[{"line_number":454,"context_line":"        self.ext_mgr.is_loaded(\u0027os-extended-quotas\u0027).AndReturn(True)"},{"line_number":455,"context_line":"        self.ext_mgr.is_loaded(\u0027os-user-quotas\u0027).AndReturn(True)"},{"line_number":456,"context_line":"        self.mox.ReplayAll()"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update,"},{"line_number":459,"context_line":"                          req, \u0027update_me\u0027, body)"},{"line_number":460,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_ba8e9ace","side":"PARENT","line":457,"updated":"2014-05-23 16:08:36.000000000","message":"nit: not related to your change.","commit_id":"839fe777e256d36e69e9fd7c571aed2c860b122c"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"951d5c0b2e0bff3a60af72646bb45cf69c207fed","unresolved":false,"context_lines":[{"line_number":357,"context_line":"    @mock.patch(\u0027nova.api.openstack.extensions.ExtensionManager\u0027)"},{"line_number":358,"context_line":"    def test_quotas_update_invalid_value_no_db_hit(self, mock_ext_mgr,"},{"line_number":359,"context_line":"                                                   mock_db_quota):"},{"line_number":360,"context_line":"        # when PUT non integer value"},{"line_number":361,"context_line":"        body \u003d {\u0027quota_set\u0027: {\u0027instances\u0027: 50, \u0027cores\u0027: 50,"},{"line_number":362,"context_line":"                              \u0027ram\u0027: -2, \u0027floating_ips\u0027: 10,"},{"line_number":363,"context_line":"                              \u0027fixed_ips\u0027: -1, \u0027metadata_items\u0027: 128,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_a4b91f30","line":360,"updated":"2014-05-23 14:48:11.000000000","message":"What is the no-integer value?","commit_id":"fb768ccaf6fbf887942a46c4d391c0610f3f59eb"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"a6b71c214630266b6cfacccaea1ab925efb3a155","unresolved":false,"context_lines":[{"line_number":357,"context_line":"    @mock.patch(\u0027nova.api.openstack.extensions.ExtensionManager\u0027)"},{"line_number":358,"context_line":"    def test_quotas_update_invalid_value_no_db_hit(self, mock_ext_mgr,"},{"line_number":359,"context_line":"                                                   mock_db_quota):"},{"line_number":360,"context_line":"        # when PUT non integer value"},{"line_number":361,"context_line":"        body \u003d {\u0027quota_set\u0027: {\u0027instances\u0027: 50, \u0027cores\u0027: 50,"},{"line_number":362,"context_line":"                              \u0027ram\u0027: -2, \u0027floating_ips\u0027: 10,"},{"line_number":363,"context_line":"                              \u0027fixed_ips\u0027: -1, \u0027metadata_items\u0027: 128,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_fabf425e","line":360,"in_reply_to":"7adec928_640c7743","updated":"2014-05-23 16:08:36.000000000","message":"just a nit, I don\u0027t want block the progress.","commit_id":"fb768ccaf6fbf887942a46c4d391c0610f3f59eb"},{"author":{"_account_id":9275,"name":"Leandro Ignacio Costantino","email":"leandro.i.costantino@intel.com","username":"lcostantino"},"change_message_id":"4fbd9c01af4956ae79252e393c8b3b7b2f948ed3","unresolved":false,"context_lines":[{"line_number":357,"context_line":"    @mock.patch(\u0027nova.api.openstack.extensions.ExtensionManager\u0027)"},{"line_number":358,"context_line":"    def test_quotas_update_invalid_value_no_db_hit(self, mock_ext_mgr,"},{"line_number":359,"context_line":"                                                   mock_db_quota):"},{"line_number":360,"context_line":"        # when PUT non integer value"},{"line_number":361,"context_line":"        body \u003d {\u0027quota_set\u0027: {\u0027instances\u0027: 50, \u0027cores\u0027: 50,"},{"line_number":362,"context_line":"                              \u0027ram\u0027: -2, \u0027floating_ips\u0027: 10,"},{"line_number":363,"context_line":"                              \u0027fixed_ips\u0027: -1, \u0027metadata_items\u0027: 128,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_640c7743","line":360,"in_reply_to":"7adec928_a4b91f30","updated":"2014-05-23 15:09:13.000000000","message":"removed the comment","commit_id":"fb768ccaf6fbf887942a46c4d391c0610f3f59eb"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"951d5c0b2e0bff3a60af72646bb45cf69c207fed","unresolved":false,"context_lines":[{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        mock_ext_mgr.is_loaded.return_value \u003d True"},{"line_number":372,"context_line":"        self.ext_mgr.is_loaded \u003d mock_ext_mgr.is_loaded"},{"line_number":373,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v2/fake4/os-quota-sets/update_me\u0027,"},{"line_number":374,"context_line":"                                      use_admin_context\u003dTrue)"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_84bfc3fb","line":373,"updated":"2014-05-23 14:48:11.000000000","message":"Also your test needs to verify that nothing has been updated on the database.","commit_id":"fb768ccaf6fbf887942a46c4d391c0610f3f59eb"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"a16100f80a2496c8cab5cf29acf255edf7855ba0","unresolved":false,"context_lines":[{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        mock_ext_mgr.is_loaded.return_value \u003d True"},{"line_number":372,"context_line":"        self.ext_mgr.is_loaded \u003d mock_ext_mgr.is_loaded"},{"line_number":373,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v2/fake4/os-quota-sets/update_me\u0027,"},{"line_number":374,"context_line":"                                      use_admin_context\u003dTrue)"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_da79a6fd","line":373,"in_reply_to":"7adec928_17584731","updated":"2014-05-23 16:01:55.000000000","message":"But why an exception is raised, the body looks good, no?","commit_id":"fb768ccaf6fbf887942a46c4d391c0610f3f59eb"},{"author":{"_account_id":9275,"name":"Leandro Ignacio Costantino","email":"leandro.i.costantino@intel.com","username":"lcostantino"},"change_message_id":"459153cd98ab9282c3a728b0512ae551e61ebe0d","unresolved":false,"context_lines":[{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        mock_ext_mgr.is_loaded.return_value \u003d True"},{"line_number":372,"context_line":"        self.ext_mgr.is_loaded \u003d mock_ext_mgr.is_loaded"},{"line_number":373,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v2/fake4/os-quota-sets/update_me\u0027,"},{"line_number":374,"context_line":"                                      use_admin_context\u003dTrue)"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_17584731","line":373,"in_reply_to":"7adec928_370d4338","updated":"2014-05-23 15:11:42.000000000","message":"i can add a quota_update check also just in case, but for that to being called a quota_create must be issued first","commit_id":"fb768ccaf6fbf887942a46c4d391c0610f3f59eb"},{"author":{"_account_id":9275,"name":"Leandro Ignacio Costantino","email":"leandro.i.costantino@intel.com","username":"lcostantino"},"change_message_id":"4fbd9c01af4956ae79252e393c8b3b7b2f948ed3","unresolved":false,"context_lines":[{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        mock_ext_mgr.is_loaded.return_value \u003d True"},{"line_number":372,"context_line":"        self.ext_mgr.is_loaded \u003d mock_ext_mgr.is_loaded"},{"line_number":373,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v2/fake4/os-quota-sets/update_me\u0027,"},{"line_number":374,"context_line":"                                      use_admin_context\u003dTrue)"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_370d4338","line":373,"in_reply_to":"7adec928_84bfc3fb","updated":"2014-05-23 15:09:13.000000000","message":"it\u0027s being verified at line 378","commit_id":"fb768ccaf6fbf887942a46c4d391c0610f3f59eb"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"a6b71c214630266b6cfacccaea1ab925efb3a155","unresolved":false,"context_lines":[{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        mock_ext_mgr.is_loaded.return_value \u003d True"},{"line_number":372,"context_line":"        self.ext_mgr.is_loaded \u003d mock_ext_mgr.is_loaded"},{"line_number":373,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v2/fake4/os-quota-sets/update_me\u0027,"},{"line_number":374,"context_line":"                                      use_admin_context\u003dTrue)"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_7a8412b1","line":373,"in_reply_to":"7adec928_da79a6fd","updated":"2014-05-23 16:08:36.000000000","message":"oh ok, I was focus on a ValueError...","commit_id":"fb768ccaf6fbf887942a46c4d391c0610f3f59eb"}]}
