)]}'
{"neutron/api/api_common.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"a5ab49f6347e8bf6630f9b52542e1a54b311f688","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    becomes:"},{"line_number":51,"context_line":"    {\u0027check\u0027: [u\u0027a\u0027, u\u0027b\u0027], \u0027name\u0027: [u\u0027Bob\u0027]}"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    Note that unknown attributes are removed from the returned dictionary."},{"line_number":54,"context_line":"    \"\"\""},{"line_number":55,"context_line":"    skips \u003d skips or []"},{"line_number":56,"context_line":"    new_data \u003d copy.copy(data)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_25bc40ba","line":53,"updated":"2016-08-11 15:24:08.000000000","message":"due to the nature of the API layer, it\u0027s possible that removing stuff from here may end up breaking plugins (out of tree or not) are relying on this \u0027feature\u0027","commit_id":"22d7c4c2277e87df1d623c63b391441ceec139d2"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"70db1db7ea94a2fe5601c0098d0d0a83d2f711b3","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    becomes:"},{"line_number":51,"context_line":"    {\u0027check\u0027: [u\u0027a\u0027, u\u0027b\u0027], \u0027name\u0027: [u\u0027Bob\u0027]}"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    Note that unknown attributes are removed from the returned dictionary."},{"line_number":54,"context_line":"    \"\"\""},{"line_number":55,"context_line":"    skips \u003d skips or []"},{"line_number":56,"context_line":"    new_data \u003d copy.copy(data)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_2653a618","line":53,"in_reply_to":"9ad45d7e_25bc40ba","updated":"2016-08-11 15:59:02.000000000","message":"Well, then we can throw away our extensions mechanism, or API definition for this matter. If plugins do that for us, and we happily pass it to users, we don\u0027t really guarantee that neutron adheres to what it claims thru /extensions api.\n\nWe would like to be able to return object.to_dict() to api layer and allow the latter to filter out disabled pieces. No more dump \u0027filtering\u0027 thru _make_*_dict which doesn\u0027t really work because extension functions are never guarded against breaking the result.","commit_id":"22d7c4c2277e87df1d623c63b391441ceec139d2"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"f8377262eff3222283736dc3d678500579707781","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    becomes:"},{"line_number":51,"context_line":"    {\u0027check\u0027: [u\u0027a\u0027, u\u0027b\u0027], \u0027name\u0027: [u\u0027Bob\u0027]}"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    Note that unknown attributes are removed from the returned dictionary."},{"line_number":54,"context_line":"    \"\"\""},{"line_number":55,"context_line":"    skips \u003d skips or []"},{"line_number":56,"context_line":"    new_data \u003d copy.copy(data)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_7098af1c","line":53,"in_reply_to":"9ad45d7e_2653a618","updated":"2016-08-11 16:54:54.000000000","message":"I am not sure I fully appreciate your point. All I suggesting here is that we understand the full implications of this change, whether or not we like how we got to where we are.","commit_id":"22d7c4c2277e87df1d623c63b391441ceec139d2"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"86fbca84130f4f833a8540d4761dad7ccf713181","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    becomes:"},{"line_number":51,"context_line":"    {\u0027check\u0027: [u\u0027a\u0027, u\u0027b\u0027], \u0027name\u0027: [u\u0027Bob\u0027]}"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    Note that unknown attributes are removed from the returned dictionary."},{"line_number":54,"context_line":"    \"\"\""},{"line_number":55,"context_line":"    skips \u003d skips or []"},{"line_number":56,"context_line":"    new_data \u003d copy.copy(data)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_13b4dd32","line":53,"in_reply_to":"9ad45d7e_7098af1c","updated":"2016-08-11 16:59:39.000000000","message":"I get you. So there is a known risk to break misbehaving plugins AND corresponding api users.","commit_id":"22d7c4c2277e87df1d623c63b391441ceec139d2"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"a01334690dcfa9472554ebf539ef02c8c53fc27a","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    skips \u003d skips or []"},{"line_number":56,"context_line":"    new_data \u003d copy.copy(data)"},{"line_number":57,"context_line":"    for key in data:"},{"line_number":58,"context_line":"        if key not in attr_info.keys() + skips:"},{"line_number":59,"context_line":"            new_data.pop(key)"},{"line_number":60,"context_line":"    res \u003d {}"},{"line_number":61,"context_line":"    for key, values in new_data.items():"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ac371cc_c2cdc05e","line":58,"updated":"2016-08-16 16:51:00.000000000","message":"Add a warning about the skip","commit_id":"22d7c4c2277e87df1d623c63b391441ceec139d2"}]}
