)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"513e41c7408d150605e7100c1f8a7f6ba7a3aafa","unresolved":false,"context_lines":[{"line_number":12,"context_line":"We can let them pass into following process."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: Icfeab12b2317e3d186e0ce585a5de08b8d5b0bc7"},{"line_number":15,"context_line":"Partially-Bug: #1659175"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a461143_c4accd37","line":15,"updated":"2017-01-27 18:11:42.000000000","message":"This should be Partial-Bug: as per https://wiki.openstack.org/wiki/GitCommitMessages","commit_id":"cf288c26c4dad4edd743f53b370a772eb43df077"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"037c5089ea4264f7c5dc8c8b01210e2a4aef8bf5","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add check for quering neutron core resources with standardattr sort-key"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch add the check in get_and_validate_sort_keys function. When user"},{"line_number":10,"context_line":"query network/port or some other core resources which inherited from"},{"line_number":11,"context_line":"HasStandardAttributes. And input sort-keys like created_at/description."},{"line_number":12,"context_line":"We can let them pass into following process."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"da36d5c6_b09d300c","line":9,"updated":"2017-02-23 04:01:53.000000000","message":"nit: line exceeds 72 characters","commit_id":"c011c823248dc9c3b46248b76a4a661752563aeb"}],"neutron_lib/db/utils.py":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"513e41c7408d150605e7100c1f8a7f6ba7a3aafa","unresolved":false,"context_lines":[{"line_number":41,"context_line":"            # existed in attr_info, it will be caught here."},{"line_number":42,"context_line":"            msg \u003d _(\"\u0027%s\u0027 is an invalid attribute for sort key\") % sort_key"},{"line_number":43,"context_line":"            raise n_exc.BadRequest(resource\u003dmodel.__tablename__, msg\u003dmsg)"},{"line_number":44,"context_line":"        if (isinstance(sort_key_attr, associationproxy.AssociationProxy) and"},{"line_number":45,"context_line":"                hasattr(sort_key_attr, \u0027target_collection\u0027) and"},{"line_number":46,"context_line":"                getattr(sort_key_attr,"},{"line_number":47,"context_line":"                        \u0027target_collection\u0027) is \u0027standard_attr\u0027):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_b76451e5","line":44,"updated":"2017-01-27 18:11:42.000000000","message":"IMHO would be nice to cover this with a unit test.","commit_id":"cf288c26c4dad4edd743f53b370a772eb43df077"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"e22a95640fbf74a5876a2976125643927db753ba","unresolved":false,"context_lines":[{"line_number":41,"context_line":"            # existed in attr_info, it will be caught here."},{"line_number":42,"context_line":"            msg \u003d _(\"\u0027%s\u0027 is an invalid attribute for sort key\") % sort_key"},{"line_number":43,"context_line":"            raise n_exc.BadRequest(resource\u003dmodel.__tablename__, msg\u003dmsg)"},{"line_number":44,"context_line":"        if (isinstance(sort_key_attr, associationproxy.AssociationProxy) and"},{"line_number":45,"context_line":"                hasattr(sort_key_attr, \u0027target_collection\u0027) and"},{"line_number":46,"context_line":"                getattr(sort_key_attr,"},{"line_number":47,"context_line":"                        \u0027target_collection\u0027) is \u0027standard_attr\u0027):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a430d35_0fcb7354","line":44,"in_reply_to":"3a461143_b76451e5","updated":"2017-02-06 10:26:03.000000000","message":"Thanks for kind review. I will add the UT in the next patch.","commit_id":"cf288c26c4dad4edd743f53b370a772eb43df077"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"8f278e2a03cfc8219344f273edd610b8440a19b9","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            msg \u003d _(\"\u0027%s\u0027 is an invalid attribute for sort key\") % sort_key"},{"line_number":43,"context_line":"            raise n_exc.BadRequest(resource\u003dmodel.__tablename__, msg\u003dmsg)"},{"line_number":44,"context_line":"        if (isinstance(sort_key_attr, associationproxy.AssociationProxy) and"},{"line_number":45,"context_line":"                hasattr(sort_key_attr, \u0027target_collection\u0027) and"},{"line_number":46,"context_line":"                getattr(sort_key_attr,"},{"line_number":47,"context_line":"                        \u0027target_collection\u0027) is \u0027standard_attr\u0027):"},{"line_number":48,"context_line":"            continue"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff0f0b1f_6efacc75","line":45,"updated":"2017-05-19 12:13:36.000000000","message":"Do we need to check sort_key_attr has \u0027target_collection\u0027 attribute here?\nWhen the code reaches here, we already checked that sort_key_attr is an instance of AssociationProxy. AssociationProxy always has \u0027target_collection\u0027 attribute [1].\n\nThus, I think L.45-47 can be:\n\n  sort_key_attr.target_collection \u003d\u003d \u0027standard_attr\u0027\n\nAm I missing something?\n\n[1] https://github.com/zzzeek/sqlalchemy/blob/master/lib/sqlalchemy/ext/associationproxy.py#L147","commit_id":"c011c823248dc9c3b46248b76a4a661752563aeb"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"8f278e2a03cfc8219344f273edd610b8440a19b9","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        if (isinstance(sort_key_attr, associationproxy.AssociationProxy) and"},{"line_number":45,"context_line":"                hasattr(sort_key_attr, \u0027target_collection\u0027) and"},{"line_number":46,"context_line":"                getattr(sort_key_attr,"},{"line_number":47,"context_line":"                        \u0027target_collection\u0027) is \u0027standard_attr\u0027):"},{"line_number":48,"context_line":"            continue"},{"line_number":49,"context_line":"        if isinstance(sort_key_attr.property,"},{"line_number":50,"context_line":"                      properties.RelationshipProperty):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff0f0b1f_8eb520d0","line":47,"range":{"start_line":47,"start_character":45,"end_line":47,"end_character":47},"updated":"2017-05-19 12:13:36.000000000","message":"Why do you use \u0027is\u0027 operator? \u0027is\u0027 operator checks two values are a same object. I think we just checks both have a same value, so \u0027\u003d\u003d\u0027 is appropriate.","commit_id":"c011c823248dc9c3b46248b76a4a661752563aeb"}]}
