)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"98c13c102545ec94ae8019d81d76b0890b321c66","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Gal Sagie \u003cgal.sagie@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-04-13 15:34:46 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add helper method to find OVSDB row by external_id\u0027s"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The user of this method can find the first row that its external_ids"},{"line_number":10,"context_line":"column matches all of the input dictionary \u003ckey,value\u003e pairs."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7aaa499b_3fb01cdd","line":7,"updated":"2015-04-13 13:22:48.000000000","message":"can you mention an example user of this functionality?","commit_id":"85cadc225ce12bffccfe778fd6b938b77856b49e"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"9a529415748623ac7bd228b32c4969284a1074f1","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Gal Sagie \u003cgal.sagie@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-04-13 15:34:46 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add helper method to find OVSDB row by external_id\u0027s"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The user of this method can find the first row that its external_ids"},{"line_number":10,"context_line":"column matches all of the input dictionary \u003ckey,value\u003e pairs."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7aaa499b_9fa7304f","line":7,"in_reply_to":"7aaa499b_3fb01cdd","updated":"2015-04-13 13:34:08.000000000","message":"OVN will use this functionality as it leverage the external_id\u0027s to keep linking information between neutron objects and OVN objects (for example neutron network id for Logical Switch and so on..)","commit_id":"85cadc225ce12bffccfe778fd6b938b77856b49e"}],"neutron/agent/ovsdb/native/idlutils.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"98c13c102545ec94ae8019d81d76b0890b321c66","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    return row"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"def row_by_external_ids(idl_, table, ext_ids_dict):"},{"line_number":91,"context_line":"        tab \u003d idl_.tables[table]"},{"line_number":92,"context_line":"        for r in tab.rows.values():"},{"line_number":93,"context_line":"            external_ids \u003d getattr(r, \u0027external_ids\u0027, {})"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aaa499b_5f8d2830","line":90,"updated":"2015-04-13 13:22:48.000000000","message":"why do you want to have this here, rather than in ovs_lib?\ncf. get_vif_port_by_id.","commit_id":"85cadc225ce12bffccfe778fd6b938b77856b49e"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"9a529415748623ac7bd228b32c4969284a1074f1","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    return row"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"def row_by_external_ids(idl_, table, ext_ids_dict):"},{"line_number":91,"context_line":"        tab \u003d idl_.tables[table]"},{"line_number":92,"context_line":"        for r in tab.rows.values():"},{"line_number":93,"context_line":"            external_ids \u003d getattr(r, \u0027external_ids\u0027, {})"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aaa499b_ff5e3444","line":90,"in_reply_to":"7aaa499b_5f8d2830","updated":"2015-04-13 13:34:08.000000000","message":"This is going to be used inside the IDL API implementations (same as the above methods row_by_value and row_by_value)\nI dont know if we want to support this for the CLI implementation, especially if there isnt a use case for it there yet, but if you have a better suggestion i am open for it","commit_id":"85cadc225ce12bffccfe778fd6b938b77856b49e"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"98c13c102545ec94ae8019d81d76b0890b321c66","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"def row_by_external_ids(idl_, table, ext_ids_dict):"},{"line_number":91,"context_line":"        tab \u003d idl_.tables[table]"},{"line_number":92,"context_line":"        for r in tab.rows.values():"},{"line_number":93,"context_line":"            external_ids \u003d getattr(r, \u0027external_ids\u0027, {})"},{"line_number":94,"context_line":"            match_found \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aaa499b_3fb49cf0","line":91,"updated":"2015-04-13 13:22:48.000000000","message":"too deep indent","commit_id":"85cadc225ce12bffccfe778fd6b938b77856b49e"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"c2e1fe1e473c53b278a7525c897fa2f17693310a","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"# This method is used by OVN"},{"line_number":91,"context_line":"def row_by_external_ids(idl_, table, ext_ids_dict):"},{"line_number":92,"context_line":"    tab \u003d idl_.tables[table]"},{"line_number":93,"context_line":"    for r in tab.rows.values():"},{"line_number":94,"context_line":"        external_ids \u003d getattr(r, \u0027external_ids\u0027, {})"}],"source_content_type":"text/x-python","patch_set":5,"id":"7aaa499b_1452a8dd","line":91,"updated":"2015-04-14 18:54:43.000000000","message":"This function is essentially a specialization of looping through a table calling  idlutils.row_match(r, (\u0027external_ids\u0027, \u0027\u003d\u0027, ext_ids_dict) so we might not even really need it, but if we do it can be simplified (below).","commit_id":"d38138df99b694c3a623b5ce0e67a07c37a76d36"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"92a06673e53c793eee66a0449db789cef9310d63","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"# This method is used by OVN"},{"line_number":91,"context_line":"def row_by_external_ids(idl_, table, ext_ids_dict):"},{"line_number":92,"context_line":"    tab \u003d idl_.tables[table]"},{"line_number":93,"context_line":"    for r in tab.rows.values():"},{"line_number":94,"context_line":"        external_ids \u003d getattr(r, \u0027external_ids\u0027, {})"}],"source_content_type":"text/x-python","patch_set":5,"id":"7aaa499b_23c68c48","line":91,"updated":"2015-04-14 17:37:32.000000000","message":"this helper name should start with \"_\" and should be more descriptive","commit_id":"d38138df99b694c3a623b5ce0e67a07c37a76d36"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"c2e1fe1e473c53b278a7525c897fa2f17693310a","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    tab \u003d idl_.tables[table]"},{"line_number":93,"context_line":"    for r in tab.rows.values():"},{"line_number":94,"context_line":"        external_ids \u003d getattr(r, \u0027external_ids\u0027, {})"},{"line_number":95,"context_line":"        match_found \u003d True"},{"line_number":96,"context_line":"        for key, value in ext_ids_dict.items():"},{"line_number":97,"context_line":"            if external_ids.get(key) !\u003d value:"},{"line_number":98,"context_line":"                match_found \u003d False"}],"source_content_type":"text/x-python","patch_set":5,"id":"7aaa499b_294d4d6c","line":95,"updated":"2015-04-14 18:54:43.000000000","message":"I think the rest of this loop can just be reduced to something like:\n\n if all(item in external_ids.items() for item in ext_ids_dict.items()):\n     return r\n\nAnd if we really were playing code golf, the whole function minus raising:\n\n return next((r for r in idl_.tables[table].rows.values()\n              if all(i in getattr(r, \u0027external_ids\u0027, {}).items()\n                     for i in ext_ids_dict.items())), None)","commit_id":"d38138df99b694c3a623b5ce0e67a07c37a76d36"}]}
