)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"267ab7758fb26a80f896f06e67373773e603e773","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2019-04-19 11:34:40 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix bug: AttributeError arises while sorting with standard attributes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I8d206f909b09f1279dfcdc25c39989a67bff93d5"},{"line_number":10,"context_line":"Closes-Bug: #1659175"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ffb9cba7_fa444a1d","line":8,"updated":"2019-04-26 01:14:40.000000000","message":"I would also add some explanation of why and waht is being done to the commit message","commit_id":"8fbac83dec9a55606b9be91b57655fbed1379bdb"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"8f03efd0cc66a183f3c44b3c354b6c3f8e428ab4","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2019-04-19 11:34:40 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix bug: AttributeError arises while sorting with standard attributes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I8d206f909b09f1279dfcdc25c39989a67bff93d5"},{"line_number":10,"context_line":"Closes-Bug: #1659175"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dfbec78f_4be29103","line":8,"in_reply_to":"ffb9cba7_9ca719be","updated":"2019-05-08 01:30:45.000000000","message":"Done","commit_id":"8fbac83dec9a55606b9be91b57655fbed1379bdb"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"e0a6c715b083afd9a2899ca24e439956e4655d62","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2019-04-19 11:34:40 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix bug: AttributeError arises while sorting with standard attributes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I8d206f909b09f1279dfcdc25c39989a67bff93d5"},{"line_number":10,"context_line":"Closes-Bug: #1659175"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ffb9cba7_9ca719be","line":8,"in_reply_to":"ffb9cba7_fa444a1d","updated":"2019-04-30 02:19:57.000000000","message":"Detailed commit message provided","commit_id":"8fbac83dec9a55606b9be91b57655fbed1379bdb"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"a172dcf39fe2119dd2d1ab852ee7fccb195d5405","unresolved":false,"context_lines":[{"line_number":15,"context_line":"it\u0027s preferred to explicitly warn CLI \u0026 API users of illegal sort"},{"line_number":16,"context_line":"keys rather than just accept \u0026 un-check \u0026 pass-forward and then hit"},{"line_number":17,"context_line":"a internal error which\u0027s quite confusing."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I8d206f909b09f1279dfcdc25c39989a67bff93d5"},{"line_number":20,"context_line":"Closes-Bug: #1659175"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"dfbec78f_2d07e7cc","line":18,"updated":"2019-05-12 06:17:08.000000000","message":"This rely on another patch, you can add this:\nDepends-on: https://review.opendev.org/#/c/657913/","commit_id":"79f3af8d8501497ef23690a1fe2fd89e73457af2"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"1c2273c4c44857742635bd8c491736938b726347","unresolved":false,"context_lines":[{"line_number":15,"context_line":"it\u0027s preferred to explicitly warn CLI \u0026 API users of illegal sort"},{"line_number":16,"context_line":"keys rather than just accept \u0026 un-check \u0026 pass-forward and then hit"},{"line_number":17,"context_line":"a internal error which\u0027s quite confusing."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I8d206f909b09f1279dfcdc25c39989a67bff93d5"},{"line_number":20,"context_line":"Closes-Bug: #1659175"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"dfbec78f_a3866c12","line":18,"in_reply_to":"dfbec78f_2d07e7cc","updated":"2019-05-15 09:51:50.000000000","message":"Thanks for your advice.","commit_id":"79f3af8d8501497ef23690a1fe2fd89e73457af2"}],"neutron/api/api_common.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d5eaa28bf6ae7507390695bce89ee57fbbedc027","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from neutron._i18n import _"},{"line_number":30,"context_line":"from neutron.api import extensions"},{"line_number":31,"context_line":"from neutron.db.standard_attr import StandardAttribute as standard_attr"},{"line_number":32,"context_line":"from neutron import wsgi"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"dfbec78f_d1639cdb","line":31,"updated":"2019-05-07 12:54:16.000000000","message":"We usually import the module, not a class, a function or a method, in order to document the object origin.","commit_id":"e6b7ad5e3894a5d75dff89ec20571b1c0d82f4e5"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"8f03efd0cc66a183f3c44b3c354b6c3f8e428ab4","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from neutron._i18n import _"},{"line_number":30,"context_line":"from neutron.api import extensions"},{"line_number":31,"context_line":"from neutron.db.standard_attr import StandardAttribute as standard_attr"},{"line_number":32,"context_line":"from neutron import wsgi"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"dfbec78f_4b1db10d","line":31,"in_reply_to":"dfbec78f_d1639cdb","updated":"2019-05-08 01:30:45.000000000","message":"Done","commit_id":"e6b7ad5e3894a5d75dff89ec20571b1c0d82f4e5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d5eaa28bf6ae7507390695bce89ee57fbbedc027","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        msg \u003d _(\"The number of sort_keys and sort_dirs must be same\")"},{"line_number":235,"context_line":"        raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":236,"context_line":"    valid_dirs \u003d [constants.SORT_DIRECTION_ASC, constants.SORT_DIRECTION_DESC]"},{"line_number":237,"context_line":"    sa_dict \u003d standard_attr.__dict__"},{"line_number":238,"context_line":"    valid_keys \u003d set(attr_info.keys()) - set(sa_dict.keys()) | set([\u0027id\u0027])"},{"line_number":239,"context_line":"    absent_keys \u003d [x for x in sort_keys if x not in valid_keys]"},{"line_number":240,"context_line":"    if absent_keys:"},{"line_number":241,"context_line":"        msg \u003d _(\"%s is invalid attribute for sort_keys\") % absent_keys"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfbec78f_d154fccc","line":238,"range":{"start_line":237,"start_character":4,"end_line":238,"end_character":74},"updated":"2019-05-07 12:54:16.000000000","message":"I would recommend to do something like L230 and call this function something like \"remove_standard_attributes\".\n\nBTW, please retrieve the model columns properly:\n\nimport sqlalchemy\nfrom neutron.db import standard_attr\nm\u003dsqlalchemy.inspect(standard_attr.StandardAttribute)\ncolumn_list \u003d list(c.name for c in m.columns)","commit_id":"e6b7ad5e3894a5d75dff89ec20571b1c0d82f4e5"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"8f03efd0cc66a183f3c44b3c354b6c3f8e428ab4","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        msg \u003d _(\"The number of sort_keys and sort_dirs must be same\")"},{"line_number":235,"context_line":"        raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":236,"context_line":"    valid_dirs \u003d [constants.SORT_DIRECTION_ASC, constants.SORT_DIRECTION_DESC]"},{"line_number":237,"context_line":"    sa_dict \u003d standard_attr.__dict__"},{"line_number":238,"context_line":"    valid_keys \u003d set(attr_info.keys()) - set(sa_dict.keys()) | set([\u0027id\u0027])"},{"line_number":239,"context_line":"    absent_keys \u003d [x for x in sort_keys if x not in valid_keys]"},{"line_number":240,"context_line":"    if absent_keys:"},{"line_number":241,"context_line":"        msg \u003d _(\"%s is invalid attribute for sort_keys\") % absent_keys"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfbec78f_abd30d38","line":238,"range":{"start_line":237,"start_character":4,"end_line":238,"end_character":74},"in_reply_to":"dfbec78f_d154fccc","updated":"2019-05-08 01:30:45.000000000","message":"Done","commit_id":"e6b7ad5e3894a5d75dff89ec20571b1c0d82f4e5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e2fe08ce26224d73dcf2270268877ca30eb1f896","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        msg \u003d _(\"The number of sort_keys and sort_dirs must be same\")"},{"line_number":234,"context_line":"        raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":235,"context_line":"    valid_dirs \u003d [constants.SORT_DIRECTION_ASC, constants.SORT_DIRECTION_DESC]"},{"line_number":236,"context_line":"    valid_sort_keys \u003d set(attr for attr, schema in attr_info.items()"},{"line_number":237,"context_line":"                          if schema.get(\u0027is_sort_key\u0027, False))"},{"line_number":238,"context_line":"    absent_keys \u003d [x for x in sort_keys if x not in valid_sort_keys]"},{"line_number":239,"context_line":"    if absent_keys:"},{"line_number":240,"context_line":"        msg \u003d _(\"%s is invalid attribute for sort_keys\") % absent_keys"}],"source_content_type":"text/x-python","patch_set":13,"id":"bfb3d3c7_baa5cfb7","line":237,"range":{"start_line":236,"start_character":4,"end_line":237,"end_character":62},"updated":"2019-05-17 14:53:27.000000000","message":"IMO, a good solution!","commit_id":"c4c8d5aef34369af260a76c7f80c50b168a0e27e"}],"neutron/common/utils.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"da2fc06423f0fa10f59682c4ac379cff77b4a0fe","unresolved":false,"context_lines":[{"line_number":886,"context_line":"                \"device mappings\") % {\u0027dev_name\u0027: dev_name})"},{"line_number":887,"context_line":""},{"line_number":888,"context_line":""},{"line_number":889,"context_line":"def retrive_valid_sort_keys(attr_info):"},{"line_number":890,"context_line":"    \"\"\"Retrive valid sort keys from common neutron resource."},{"line_number":891,"context_line":""},{"line_number":892,"context_line":"    :param attr_info: Dict containing standard attributes(e.g Port.created_at)"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfbec78f_ffe1b9fd","line":889,"updated":"2019-05-08 09:14:55.000000000","message":"nit: IMO, you should add a note to move this function to neutron_lib.api.attributes, but once this patch is merged.","commit_id":"79f3af8d8501497ef23690a1fe2fd89e73457af2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"00806df41f929f98e17b9c5f66d81478e2f41832","unresolved":false,"context_lines":[{"line_number":886,"context_line":"                \"device mappings\") % {\u0027dev_name\u0027: dev_name})"},{"line_number":887,"context_line":""},{"line_number":888,"context_line":""},{"line_number":889,"context_line":"def retrive_valid_sort_keys(attr_info):"},{"line_number":890,"context_line":"    \"\"\"Retrive valid sort keys from common neutron resource."},{"line_number":891,"context_line":""},{"line_number":892,"context_line":"    :param attr_info: Dict containing standard attributes(e.g Port.created_at)"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfbec78f_d9e64d17","line":889,"range":{"start_line":889,"start_character":4,"end_line":889,"end_character":11},"updated":"2019-05-08 15:27:09.000000000","message":"s/retreive\n\nAnd right below and callers, etc.","commit_id":"79f3af8d8501497ef23690a1fe2fd89e73457af2"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"3cd582c745e06befa168eb5319bfe8542cec5175","unresolved":false,"context_lines":[{"line_number":886,"context_line":"                \"device mappings\") % {\u0027dev_name\u0027: dev_name})"},{"line_number":887,"context_line":""},{"line_number":888,"context_line":""},{"line_number":889,"context_line":"def retrive_valid_sort_keys(attr_info):"},{"line_number":890,"context_line":"    \"\"\"Retrive valid sort keys from common neutron resource."},{"line_number":891,"context_line":""},{"line_number":892,"context_line":"    :param attr_info: Dict containing standard attributes(e.g Port.created_at)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bfb3d3c7_6e29fd34","line":889,"range":{"start_line":889,"start_character":4,"end_line":889,"end_character":11},"in_reply_to":"dfbec78f_ca864ddc","updated":"2019-06-01 08:29:50.000000000","message":"Done","commit_id":"79f3af8d8501497ef23690a1fe2fd89e73457af2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"49f1254977a78afd4843cd4c0b2f00df41821dca","unresolved":false,"context_lines":[{"line_number":886,"context_line":"                \"device mappings\") % {\u0027dev_name\u0027: dev_name})"},{"line_number":887,"context_line":""},{"line_number":888,"context_line":""},{"line_number":889,"context_line":"def retrive_valid_sort_keys(attr_info):"},{"line_number":890,"context_line":"    \"\"\"Retrive valid sort keys from common neutron resource."},{"line_number":891,"context_line":""},{"line_number":892,"context_line":"    :param attr_info: Dict containing standard attributes(e.g Port.created_at)"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfbec78f_ca864ddc","line":889,"range":{"start_line":889,"start_character":4,"end_line":889,"end_character":11},"in_reply_to":"dfbec78f_d9e64d17","updated":"2019-05-10 02:59:27.000000000","message":"Sorry, this should be retrieve not retreive as i put in previous review","commit_id":"79f3af8d8501497ef23690a1fe2fd89e73457af2"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"1c2273c4c44857742635bd8c491736938b726347","unresolved":false,"context_lines":[{"line_number":886,"context_line":"                \"device mappings\") % {\u0027dev_name\u0027: dev_name})"},{"line_number":887,"context_line":""},{"line_number":888,"context_line":""},{"line_number":889,"context_line":"def retrive_valid_sort_keys(attr_info):"},{"line_number":890,"context_line":"    \"\"\"Retrive valid sort keys from common neutron resource."},{"line_number":891,"context_line":""},{"line_number":892,"context_line":"    :param attr_info: Dict containing standard attributes(e.g Port.created_at)"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfbec78f_cde19e2c","line":889,"range":{"start_line":889,"start_character":4,"end_line":889,"end_character":11},"in_reply_to":"dfbec78f_d9e64d17","updated":"2019-05-15 09:51:50.000000000","message":"Thanks for your review.words spelling error will be corrected later.","commit_id":"79f3af8d8501497ef23690a1fe2fd89e73457af2"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"3cd582c745e06befa168eb5319bfe8542cec5175","unresolved":false,"context_lines":[{"line_number":886,"context_line":"                \"device mappings\") % {\u0027dev_name\u0027: dev_name})"},{"line_number":887,"context_line":""},{"line_number":888,"context_line":""},{"line_number":889,"context_line":"def retrive_valid_sort_keys(attr_info):"},{"line_number":890,"context_line":"    \"\"\"Retrive valid sort keys from common neutron resource."},{"line_number":891,"context_line":""},{"line_number":892,"context_line":"    :param attr_info: Dict containing standard attributes(e.g Port.created_at)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bfb3d3c7_0e24015d","line":889,"in_reply_to":"dfbec78f_ffe1b9fd","updated":"2019-06-01 08:29:50.000000000","message":"Done","commit_id":"79f3af8d8501497ef23690a1fe2fd89e73457af2"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"1201b7396da79d57e2ecf3f88520366c3252d2e5","unresolved":false,"context_lines":[{"line_number":886,"context_line":"                \"device mappings\") % {\u0027dev_name\u0027: dev_name})"},{"line_number":887,"context_line":""},{"line_number":888,"context_line":""},{"line_number":889,"context_line":"def retrive_valid_sort_keys(attr_info):"},{"line_number":890,"context_line":"    \"\"\"Retrive valid sort keys from common neutron resource."},{"line_number":891,"context_line":""},{"line_number":892,"context_line":"    :param attr_info: Dict containing standard attributes(e.g Port.created_at)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bfb3d3c7_1a3bbbd1","line":889,"in_reply_to":"dfbec78f_ffe1b9fd","updated":"2019-05-17 14:35:46.000000000","message":"I already implemented the `retrieve_valid_sort_keys` in `neutron_lib.api.attributes`, however in order to use that new method i have to wait for a new release of neutron-lib and this does not allow me to give the bug a quick fix.  So i still leave the `retrieve_valid_sort_keys` logic in `get_sorts` function. Later till i\u0027m sure new neutron-lib is released, i\u0027ll be back here to remove the logic in `get_sorts` and add import\u0026use of \n`retrieve_valid_sort_keys` call.","commit_id":"79f3af8d8501497ef23690a1fe2fd89e73457af2"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"2d70ae780703e1f4910f808c89ddf1836abdbdf1","unresolved":false,"context_lines":[{"line_number":886,"context_line":"                \"device mappings\") % {\u0027dev_name\u0027: dev_name})"},{"line_number":887,"context_line":""},{"line_number":888,"context_line":""},{"line_number":889,"context_line":"def retrive_valid_sort_keys(attr_info):"},{"line_number":890,"context_line":"    \"\"\"Retrive valid sort keys from common neutron resource."},{"line_number":891,"context_line":""},{"line_number":892,"context_line":"    :param attr_info: Dict containing standard attributes(e.g Port.created_at)"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfbec78f_a25486cb","line":889,"in_reply_to":"dfbec78f_ffe1b9fd","updated":"2019-05-08 11:54:35.000000000","message":"OK","commit_id":"79f3af8d8501497ef23690a1fe2fd89e73457af2"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"473bb2608083be98b1b81e33727b0c7190c4ea58","unresolved":false,"context_lines":[{"line_number":894,"context_line":"                      neutron resource."},{"line_number":895,"context_line":"    \"\"\""},{"line_number":896,"context_line":"    sa \u003d sqlalchemy.inspect(standard_attr.StandardAttribute)"},{"line_number":897,"context_line":"    standard_attrs \u003d list(col.name for col in sa.columns)"},{"line_number":898,"context_line":"    return set(attr_info.keys()) - set(standard_attrs) | set([\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfbec78f_818d7cd4","line":897,"updated":"2019-05-13 02:35:23.000000000","message":"s/list/set/\n\nthen you can omit set() in the next line.","commit_id":"79f3af8d8501497ef23690a1fe2fd89e73457af2"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"3cd582c745e06befa168eb5319bfe8542cec5175","unresolved":false,"context_lines":[{"line_number":894,"context_line":"                      neutron resource."},{"line_number":895,"context_line":"    \"\"\""},{"line_number":896,"context_line":"    sa \u003d sqlalchemy.inspect(standard_attr.StandardAttribute)"},{"line_number":897,"context_line":"    standard_attrs \u003d list(col.name for col in sa.columns)"},{"line_number":898,"context_line":"    return set(attr_info.keys()) - set(standard_attrs) | set([\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"bfb3d3c7_4e26796a","line":897,"in_reply_to":"dfbec78f_818d7cd4","updated":"2019-06-01 08:29:50.000000000","message":"Done","commit_id":"79f3af8d8501497ef23690a1fe2fd89e73457af2"}],"neutron/tests/unit/api/v2/test_base.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7f58c6bfdd7654ee05ccc6a4d0c7b7b0857b7f0a","unresolved":false,"context_lines":[{"line_number":1585,"context_line":"        }"},{"line_number":1586,"context_line":"        expect_exc \u003d exc.HTTPBadRequest"},{"line_number":1587,"context_line":"        actual_exc \u003d None"},{"line_number":1588,"context_line":"        try:"},{"line_number":1589,"context_line":"            api_common.get_sorts(request, attr_info)"},{"line_number":1590,"context_line":"        except Exception as ex:"},{"line_number":1591,"context_line":"            actual_exc \u003d type(ex)"},{"line_number":1592,"context_line":"        self.assertEqual(expect_exc, actual_exc)"},{"line_number":1593,"context_line":""},{"line_number":1594,"context_line":""},{"line_number":1595,"context_line":"class FiltersTestCase(base.BaseTestCase):"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_77621319","line":1592,"range":{"start_line":1588,"start_character":8,"end_line":1592,"end_character":48},"updated":"2019-05-03 15:09:05.000000000","message":"why You don\u0027t just use \"self.assertRaises()\"?","commit_id":"6c9f7e8f2e60b8d7a20118eeca2b8d8826d61301"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"3cd582c745e06befa168eb5319bfe8542cec5175","unresolved":false,"context_lines":[{"line_number":1585,"context_line":"        }"},{"line_number":1586,"context_line":"        expect_exc \u003d exc.HTTPBadRequest"},{"line_number":1587,"context_line":"        actual_exc \u003d None"},{"line_number":1588,"context_line":"        try:"},{"line_number":1589,"context_line":"            api_common.get_sorts(request, attr_info)"},{"line_number":1590,"context_line":"        except Exception as ex:"},{"line_number":1591,"context_line":"            actual_exc \u003d type(ex)"},{"line_number":1592,"context_line":"        self.assertEqual(expect_exc, actual_exc)"},{"line_number":1593,"context_line":""},{"line_number":1594,"context_line":""},{"line_number":1595,"context_line":"class FiltersTestCase(base.BaseTestCase):"}],"source_content_type":"text/x-python","patch_set":2,"id":"bfb3d3c7_aed85552","line":1592,"range":{"start_line":1588,"start_character":8,"end_line":1592,"end_character":48},"in_reply_to":"dfbec78f_77621319","updated":"2019-06-01 08:29:50.000000000","message":"Done","commit_id":"6c9f7e8f2e60b8d7a20118eeca2b8d8826d61301"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"8f03efd0cc66a183f3c44b3c354b6c3f8e428ab4","unresolved":false,"context_lines":[{"line_number":1585,"context_line":"        }"},{"line_number":1586,"context_line":"        expect_exc \u003d exc.HTTPBadRequest"},{"line_number":1587,"context_line":"        actual_exc \u003d None"},{"line_number":1588,"context_line":"        try:"},{"line_number":1589,"context_line":"            api_common.get_sorts(request, attr_info)"},{"line_number":1590,"context_line":"        except Exception as ex:"},{"line_number":1591,"context_line":"            actual_exc \u003d type(ex)"},{"line_number":1592,"context_line":"        self.assertEqual(expect_exc, actual_exc)"},{"line_number":1593,"context_line":""},{"line_number":1594,"context_line":""},{"line_number":1595,"context_line":"class FiltersTestCase(base.BaseTestCase):"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_cbd68128","line":1592,"range":{"start_line":1588,"start_character":8,"end_line":1592,"end_character":48},"in_reply_to":"dfbec78f_77621319","updated":"2019-05-08 01:30:45.000000000","message":"Done","commit_id":"6c9f7e8f2e60b8d7a20118eeca2b8d8826d61301"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"1c2273c4c44857742635bd8c491736938b726347","unresolved":false,"context_lines":[{"line_number":1563,"context_line":"        path \u003d \u0027/?sort_key\u003dfoo\u0026sort_dir\u003ddesc\u0026sort_key\u003dbar\u0026sort_dir\u003dasc\u0027"},{"line_number":1564,"context_line":"        request \u003d webob.Request.blank(path)"},{"line_number":1565,"context_line":"        attr_info \u003d {"},{"line_number":1566,"context_line":"            \u0027foo\u0027: {\u0027key\u0027: \u0027val\u0027, \u0027is_sort_key\u0027: True},"},{"line_number":1567,"context_line":"            \u0027bar\u0027: {\u0027key\u0027: \u0027val\u0027, \u0027is_sort_key\u0027: True}"},{"line_number":1568,"context_line":"        }"},{"line_number":1569,"context_line":"        expect_val \u003d [(\u0027foo\u0027, False), (\u0027bar\u0027, True)]"}],"source_content_type":"text/x-python","patch_set":8,"id":"dfbec78f_87dec2d7","line":1566,"range":{"start_line":1566,"start_character":35,"end_line":1566,"end_character":46},"updated":"2019-05-15 09:51:50.000000000","message":"Why i update these test cases ?\nSortingTestCase should take `is_sort_key\u003dTrue` as prerequisite for all `sort_key` attributes.","commit_id":"0f19243e10baa4072ec683ed129efe6fd58d3832"}],"releasenotes/notes/add-sort-keys-check-for-get-sorts-b9e3e86ddcb3bc3a.yaml":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e2fe08ce26224d73dcf2270268877ca30eb1f896","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add sort-keys validation logic to method ``get_sorts`` in"},{"line_number":5,"context_line":"    ``neutron.api.api_common``. This patch helps to reject the"},{"line_number":6,"context_line":"    requests with bad sort-keys and therefore avoid hitting a"},{"line_number":7,"context_line":"    internal error. For more infomation:"},{"line_number":8,"context_line":"    https://bugs.launchpad.net/neutron/+bug/1659175"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"bfb3d3c7_9adc8b19","line":5,"range":{"start_line":5,"start_character":52,"end_line":5,"end_character":58},"updated":"2019-05-17 14:53:27.000000000","message":"small nit: Actually doesn\u0027t reject, just removes the \"bad\" sort-keys","commit_id":"c4c8d5aef34369af260a76c7f80c50b168a0e27e"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"3cd582c745e06befa168eb5319bfe8542cec5175","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add sort-keys validation logic to method ``get_sorts`` in"},{"line_number":5,"context_line":"    ``neutron.api.api_common``. This patch helps to reject the"},{"line_number":6,"context_line":"    requests with bad sort-keys and therefore avoid hitting a"},{"line_number":7,"context_line":"    internal error. For more infomation:"},{"line_number":8,"context_line":"    https://bugs.launchpad.net/neutron/+bug/1659175"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"bfb3d3c7_e61ea9b9","line":5,"range":{"start_line":5,"start_character":52,"end_line":5,"end_character":58},"in_reply_to":"bfb3d3c7_9adc8b19","updated":"2019-06-01 08:29:50.000000000","message":"Thanks Rodolfo. After I finish some fixes on improper schemas( see https://review.opendev.org/#/c/660097/ ), I will be back here to continue this job.","commit_id":"c4c8d5aef34369af260a76c7f80c50b168a0e27e"}]}
