)]}'
{"cinder/api/openstack/rest_api_version_history.rst":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e2079b2b806ac0fd07b8c45ad48b9ffd6e9d64a9","unresolved":false,"context_lines":[{"line_number":64,"context_line":"3.5"},{"line_number":65,"context_line":"---"},{"line_number":66,"context_line":"  Added pagination support to /messages API"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"dab17558_cd8c73dc","line":67,"updated":"2016-05-11 12:26:35.000000000","message":"nit: Unnecessary extra line added","commit_id":"6f5af1e516f06f9e12c3fd9269f26d882655b2fe"},{"author":{"_account_id":16308,"name":"Sheel Rana","email":"ranasheel2000@gmail.com","username":"sheel.rana"},"change_message_id":"e757d8439b3835994c0607a30a84eaa3e9ec8878","unresolved":false,"context_lines":[{"line_number":64,"context_line":"3.5"},{"line_number":65,"context_line":"---"},{"line_number":66,"context_line":"  Added pagination support to /messages API"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"dab17558_bc75df64","line":67,"in_reply_to":"dab17558_cd8c73dc","updated":"2016-05-11 14:43:55.000000000","message":"Done","commit_id":"6f5af1e516f06f9e12c3fd9269f26d882655b2fe"}],"cinder/api/v3/messages.py":[{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"4d8702256642eeb5689fa68eed04a9638d46ab5f","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        \"\"\"Returns a list of messages, transformed through view builder.\"\"\""},{"line_number":91,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":92,"context_line":"        check_policy(context, \u0027get_all\u0027)"},{"line_number":93,"context_line":"        filters \u003d req.params.copy()"},{"line_number":94,"context_line":"        marker, limit, offset \u003d common.get_pagination_params(filters)"},{"line_number":95,"context_line":"        sort_keys, sort_dirs \u003d common.get_sort_params(filters)"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"faac7902_b55dcaee","line":93,"updated":"2016-05-05 19:48:32.000000000","message":"I realize it\u0027s a P.I.T.A, but you won\u0027t be able to use filters for API version 3.3. You will have to bump the microversion for this and add logic here to not use filters unless you have the \u003e\u003d new_microversion.","commit_id":"cbcdf5cfe618faf520e5dfd36001cd48d858605e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e2079b2b806ac0fd07b8c45ad48b9ffd6e9d64a9","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        sort_keys \u003d None"},{"line_number":98,"context_line":"        sort_dirs \u003d None"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        if (req.api_version_request.matches(\"3.5\", None)):"},{"line_number":101,"context_line":"            filters \u003d req.params.copy()"},{"line_number":102,"context_line":"            marker, limit, offset \u003d common.get_pagination_params(filters)"},{"line_number":103,"context_line":"            sort_keys, sort_dirs \u003d common.get_sort_params(filters)"}],"source_content_type":"text/x-python","patch_set":7,"id":"dab17558_f0179042","line":100,"updated":"2016-05-11 12:26:35.000000000","message":"nit: No need to pass None, that\u0027s the default value for max_version.","commit_id":"6f5af1e516f06f9e12c3fd9269f26d882655b2fe"},{"author":{"_account_id":16308,"name":"Sheel Rana","email":"ranasheel2000@gmail.com","username":"sheel.rana"},"change_message_id":"e757d8439b3835994c0607a30a84eaa3e9ec8878","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        sort_keys \u003d None"},{"line_number":98,"context_line":"        sort_dirs \u003d None"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        if (req.api_version_request.matches(\"3.5\", None)):"},{"line_number":101,"context_line":"            filters \u003d req.params.copy()"},{"line_number":102,"context_line":"            marker, limit, offset \u003d common.get_pagination_params(filters)"},{"line_number":103,"context_line":"            sort_keys, sort_dirs \u003d common.get_sort_params(filters)"}],"source_content_type":"text/x-python","patch_set":7,"id":"dab17558_9c00db35","line":100,"in_reply_to":"dab17558_f0179042","updated":"2016-05-11 14:43:55.000000000","message":"Done","commit_id":"6f5af1e516f06f9e12c3fd9269f26d882655b2fe"}],"cinder/db/sqlalchemy/api.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e2079b2b806ac0fd07b8c45ad48b9ffd6e9d64a9","unresolved":false,"context_lines":[{"line_number":4297,"context_line":""},{"line_number":4298,"context_line":""},{"line_number":4299,"context_line":"@require_context"},{"line_number":4300,"context_line":"def _message_get(context, message_id):"},{"line_number":4301,"context_line":"    query \u003d model_query(context,"},{"line_number":4302,"context_line":"                        models.Message,"},{"line_number":4303,"context_line":"                        read_deleted\u003d\"no\","}],"source_content_type":"text/x-python","patch_set":7,"id":"dab17558_100334b9","line":4300,"updated":"2016-05-11 12:26:35.000000000","message":"-1: You don\u0027t need to rename this method, you can just use `message_get` in L4467","commit_id":"6f5af1e516f06f9e12c3fd9269f26d882655b2fe"},{"author":{"_account_id":16308,"name":"Sheel Rana","email":"ranasheel2000@gmail.com","username":"sheel.rana"},"change_message_id":"e757d8439b3835994c0607a30a84eaa3e9ec8878","unresolved":false,"context_lines":[{"line_number":4297,"context_line":""},{"line_number":4298,"context_line":""},{"line_number":4299,"context_line":"@require_context"},{"line_number":4300,"context_line":"def _message_get(context, message_id):"},{"line_number":4301,"context_line":"    query \u003d model_query(context,"},{"line_number":4302,"context_line":"                        models.Message,"},{"line_number":4303,"context_line":"                        read_deleted\u003d\"no\","}],"source_content_type":"text/x-python","patch_set":7,"id":"dab17558_5c5cb37c","line":4300,"in_reply_to":"dab17558_100334b9","updated":"2016-05-11 14:43:55.000000000","message":"Done","commit_id":"6f5af1e516f06f9e12c3fd9269f26d882655b2fe"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e2079b2b806ac0fd07b8c45ad48b9ffd6e9d64a9","unresolved":false,"context_lines":[{"line_number":4314,"context_line":""},{"line_number":4315,"context_line":""},{"line_number":4316,"context_line":"@require_context"},{"line_number":4317,"context_line":"def _message_get_all(context, filters\u003dNone, marker\u003dNone, limit\u003dNone,"},{"line_number":4318,"context_line":"                     offset\u003dNone, sort_keys\u003dNone, sort_dirs\u003dNone):"},{"line_number":4319,"context_line":"    \"\"\"Fetch all messages for the contexts project.\"\"\""},{"line_number":4320,"context_line":"    messages \u003d models.Message"}],"source_content_type":"text/x-python","patch_set":7,"id":"dab17558_90fd6470","line":4317,"updated":"2016-05-11 12:26:35.000000000","message":"?: Why did you split `_message_get_all` code out of `message_get_all`","commit_id":"6f5af1e516f06f9e12c3fd9269f26d882655b2fe"},{"author":{"_account_id":16308,"name":"Sheel Rana","email":"ranasheel2000@gmail.com","username":"sheel.rana"},"change_message_id":"e757d8439b3835994c0607a30a84eaa3e9ec8878","unresolved":false,"context_lines":[{"line_number":4314,"context_line":""},{"line_number":4315,"context_line":""},{"line_number":4316,"context_line":"@require_context"},{"line_number":4317,"context_line":"def _message_get_all(context, filters\u003dNone, marker\u003dNone, limit\u003dNone,"},{"line_number":4318,"context_line":"                     offset\u003dNone, sort_keys\u003dNone, sort_dirs\u003dNone):"},{"line_number":4319,"context_line":"    \"\"\"Fetch all messages for the contexts project.\"\"\""},{"line_number":4320,"context_line":"    messages \u003d models.Message"}],"source_content_type":"text/x-python","patch_set":7,"id":"dab17558_3c7c4feb","line":4317,"in_reply_to":"dab17558_90fd6470","updated":"2016-05-11 14:43:55.000000000","message":"Done","commit_id":"6f5af1e516f06f9e12c3fd9269f26d882655b2fe"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e2079b2b806ac0fd07b8c45ad48b9ffd6e9d64a9","unresolved":false,"context_lines":[{"line_number":4322,"context_line":"                         messages,"},{"line_number":4323,"context_line":"                         read_deleted\u003d\"no\","},{"line_number":4324,"context_line":"                         project_only\u003d\"yes\"))"},{"line_number":4325,"context_line":"    if filters and not is_valid_model_filters(messages, filters):"},{"line_number":4326,"context_line":"        return []"},{"line_number":4327,"context_line":""},{"line_number":4328,"context_line":"    session \u003d get_session()"}],"source_content_type":"text/x-python","patch_set":7,"id":"dab17558_501bfc80","line":4325,"updated":"2016-05-11 12:26:35.000000000","message":"-1: This is not necessary, it will be taken care by _generate_paginate_query, so L4325-L4326 can be removed.","commit_id":"6f5af1e516f06f9e12c3fd9269f26d882655b2fe"},{"author":{"_account_id":16308,"name":"Sheel Rana","email":"ranasheel2000@gmail.com","username":"sheel.rana"},"change_message_id":"e757d8439b3835994c0607a30a84eaa3e9ec8878","unresolved":false,"context_lines":[{"line_number":4322,"context_line":"                         messages,"},{"line_number":4323,"context_line":"                         read_deleted\u003d\"no\","},{"line_number":4324,"context_line":"                         project_only\u003d\"yes\"))"},{"line_number":4325,"context_line":"    if filters and not is_valid_model_filters(messages, filters):"},{"line_number":4326,"context_line":"        return []"},{"line_number":4327,"context_line":""},{"line_number":4328,"context_line":"    session \u003d get_session()"}],"source_content_type":"text/x-python","patch_set":7,"id":"dab17558_9cf61b8d","line":4325,"in_reply_to":"dab17558_501bfc80","updated":"2016-05-11 14:43:55.000000000","message":"Done","commit_id":"6f5af1e516f06f9e12c3fd9269f26d882655b2fe"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e2079b2b806ac0fd07b8c45ad48b9ffd6e9d64a9","unresolved":false,"context_lines":[{"line_number":4370,"context_line":"    if filters:"},{"line_number":4371,"context_line":"        # Ensure that filters\u0027 keys exist on the model"},{"line_number":4372,"context_line":"        if not is_valid_model_filters(models.Message, filters):"},{"line_number":4373,"context_line":"            return"},{"line_number":4374,"context_line":"        query \u003d query.filter_by(**filters)"},{"line_number":4375,"context_line":"    return query"},{"line_number":4376,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"dab17558_70ad609a","line":4373,"updated":"2016-05-11 12:26:35.000000000","message":"nit: I think it\u0027s better to be explicit in the return value to mark that None value is a valid response expected by the caller.","commit_id":"6f5af1e516f06f9e12c3fd9269f26d882655b2fe"},{"author":{"_account_id":16308,"name":"Sheel Rana","email":"ranasheel2000@gmail.com","username":"sheel.rana"},"change_message_id":"e757d8439b3835994c0607a30a84eaa3e9ec8878","unresolved":false,"context_lines":[{"line_number":4370,"context_line":"    if filters:"},{"line_number":4371,"context_line":"        # Ensure that filters\u0027 keys exist on the model"},{"line_number":4372,"context_line":"        if not is_valid_model_filters(models.Message, filters):"},{"line_number":4373,"context_line":"            return"},{"line_number":4374,"context_line":"        query \u003d query.filter_by(**filters)"},{"line_number":4375,"context_line":"    return query"},{"line_number":4376,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"dab17558_3ce0cfcc","line":4373,"in_reply_to":"dab17558_70ad609a","updated":"2016-05-11 14:43:55.000000000","message":"Done","commit_id":"6f5af1e516f06f9e12c3fd9269f26d882655b2fe"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2165a8c9332137e624c8d72a4e4c36260d40f59b","unresolved":false,"context_lines":[{"line_number":4297,"context_line":""},{"line_number":4298,"context_line":""},{"line_number":4299,"context_line":"@require_context"},{"line_number":4300,"context_line":"def message_get(context, message_id):"},{"line_number":4301,"context_line":"    query \u003d model_query(context,"},{"line_number":4302,"context_line":"                        models.Message,"},{"line_number":4303,"context_line":"                        read_deleted\u003d\"no\","}],"source_content_type":"text/x-python","patch_set":9,"id":"dab17558_9db98b18","line":4300,"updated":"2016-05-13 09:30:57.000000000","message":"-1: Like ameade says, this needs to accep a third argument (session) and pass it to the model_query.","commit_id":"c1165bbb55bf17c61d9c11c0889d71fe57847e43"}],"cinder/tests/unit/message/test_api.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e2079b2b806ac0fd07b8c45ad48b9ffd6e9d64a9","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        utils.create_message("},{"line_number":115,"context_line":"            self.ctxt, event_id\u003ddefined_messages.ATTACH_READONLY_VOLUME)"},{"line_number":116,"context_line":"        utils.create_message("},{"line_number":117,"context_line":"            self.ctxt, event_id\u003ddefined_messages.IMAGE_FROM_VOLUME_OVER_QUOTA)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        url \u003d (\u0027/v3/messages?limit\u003d1\u0027)"},{"line_number":120,"context_line":"        req \u003d fakes.HTTPRequest.blank(url)"}],"source_content_type":"text/x-python","patch_set":7,"id":"dab17558_bbb2094a","line":117,"updated":"2016-05-11 12:26:35.000000000","message":"?: Any way to consolidate common code from all tests into a method?","commit_id":"6f5af1e516f06f9e12c3fd9269f26d882655b2fe"},{"author":{"_account_id":16308,"name":"Sheel Rana","email":"ranasheel2000@gmail.com","username":"sheel.rana"},"change_message_id":"e757d8439b3835994c0607a30a84eaa3e9ec8878","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        utils.create_message("},{"line_number":115,"context_line":"            self.ctxt, event_id\u003ddefined_messages.ATTACH_READONLY_VOLUME)"},{"line_number":116,"context_line":"        utils.create_message("},{"line_number":117,"context_line":"            self.ctxt, event_id\u003ddefined_messages.IMAGE_FROM_VOLUME_OVER_QUOTA)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        url \u003d (\u0027/v3/messages?limit\u003d1\u0027)"},{"line_number":120,"context_line":"        req \u003d fakes.HTTPRequest.blank(url)"}],"source_content_type":"text/x-python","patch_set":7,"id":"dab17558_c4c28584","line":117,"in_reply_to":"dab17558_bbb2094a","updated":"2016-05-11 14:43:55.000000000","message":"Done","commit_id":"6f5af1e516f06f9e12c3fd9269f26d882655b2fe"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a4aac631ab0cebd4988531145fb461d29b16f13f","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        self.assertEqual(expect_result[2],"},{"line_number":226,"context_line":"                         res[\u0027messages\u0027][2][\u0027event_id\u0027])"},{"line_number":227,"context_line":"        self.assertEqual(expect_result[3],"},{"line_number":228,"context_line":"                         res[\u0027messages\u0027][3][\u0027event_id\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"dab17558_8d433d6c","line":228,"updated":"2016-05-12 16:17:58.000000000","message":"nit: If we change expect_result into a set, L220-L228 can be replaced with:\n\n result \u003d {msg[\u0027event_id\u0027] for msg in res[\u0027messages\u0027]}\n self.assertSetEqual(expected_result, result}","commit_id":"c1165bbb55bf17c61d9c11c0889d71fe57847e43"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"aa90d043045cdb16eed8898df851790878b1e529","unresolved":false,"context_lines":[{"line_number":246,"context_line":"                     \u00271\u0026marker\u003d%s\u0027) % (fake_constants.PROJECT_ID,"},{"line_number":247,"context_line":"                                       res[\u0027messages\u0027][0][\u0027id\u0027])"},{"line_number":248,"context_line":"        self.assertEqual(next_link,"},{"line_number":249,"context_line":"                         res[\u0027messages_links\u0027][0][\u0027href\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"bab6814e_c206c41f","line":249,"updated":"2016-05-18 09:38:54.000000000","message":"-1: This test is great, because it checks provided link, but you are still missing a request for the second page (using marker).  That\u0027s the test that would have exposed the error ameade discovered.","commit_id":"0c0f79e8a04f3649614535c3e9c7f19357517778"},{"author":{"_account_id":16308,"name":"Sheel Rana","email":"ranasheel2000@gmail.com","username":"sheel.rana"},"change_message_id":"63ccb8a0cea019f9517ef520f9a9fac69f8711a0","unresolved":false,"context_lines":[{"line_number":246,"context_line":"                     \u00271\u0026marker\u003d%s\u0027) % (fake_constants.PROJECT_ID,"},{"line_number":247,"context_line":"                                       res[\u0027messages\u0027][0][\u0027id\u0027])"},{"line_number":248,"context_line":"        self.assertEqual(next_link,"},{"line_number":249,"context_line":"                         res[\u0027messages_links\u0027][0][\u0027href\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"bab6814e_a1791395","line":249,"in_reply_to":"bab6814e_c206c41f","updated":"2016-05-23 17:52:29.000000000","message":"just to confirm, are you talking about below?\n\n        next_link \u003d (\u0027http://localhost/v3/%s/messages?limit\u003d\u0027\n                     \u00272\u0026marker\u003d%s\u0027) % (fake_constants.PROJECT_ID,\n                                       res[\u0027messages\u0027][1][\u0027id\u0027])\n        self.assertEqual(next_link,\n                         res[\u0027messages_links\u0027][0][\u0027href\u0027])","commit_id":"0c0f79e8a04f3649614535c3e9c7f19357517778"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a88ba32b765e3627de3644d0e91c23515931d4b5","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        # Test for second page using marker (res[\u0027messages][0][\u0027id\u0027])"},{"line_number":254,"context_line":"        # values fetched in first request with limit 2 in this test"},{"line_number":255,"context_line":"        url \u003d (\u0027/v3/fake/messages?limit\u003d1\u0026marker\u003d%s\u0027) % ("},{"line_number":256,"context_line":"               res[\u0027messages\u0027][0][\u0027id\u0027])"},{"line_number":257,"context_line":"        req \u003d fakes.HTTPRequest.blank(url)"},{"line_number":258,"context_line":"        req.method \u003d \u0027GET\u0027"},{"line_number":259,"context_line":"        req.content_type \u003d \u0027application/json\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"9abb7d3a_5bce4684","line":256,"range":{"start_line":256,"start_character":5,"end_line":256,"end_character":40},"updated":"2016-05-27 09:39:06.000000000","message":"Oooops, pep8 error here!, you need to unindent it","commit_id":"ed8ec16f69d6a06eee01fcf16583ba91a26bdc7b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"731297b3c29b5b769b13a5725306afc24a957971","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        result \u003d self.controller.index(req)"},{"line_number":265,"context_line":"        self.assertEqual(1, len(result[\u0027messages\u0027]))"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        # checking second message of first request in this test with first"},{"line_number":268,"context_line":"        # message of second request. (to test paging mechanism)"},{"line_number":269,"context_line":"        self.assertEqual(res[\u0027messages\u0027][1], result[\u0027messages\u0027][0])"}],"source_content_type":"text/x-python","patch_set":13,"id":"9abb7d3a_e47200ad","line":269,"range":{"start_line":267,"start_character":8,"end_line":269,"end_character":67},"updated":"2016-05-27 08:52:24.000000000","message":"Really nice!!","commit_id":"ed8ec16f69d6a06eee01fcf16583ba91a26bdc7b"}]}
