)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"b85fe6621f8c5099cccb14e86ae86bfa4b511bdc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"4e188eed_70e054ed","updated":"2021-11-30 05:33:18.000000000","message":"This is the doc failure\n\u003e autodoc: failed to import module \u0027checks\u0027 from module \u0027designateclient.hacking\u0027; the following exception was raised:\n\u003e No module named \u0027hacking\u0027","commit_id":"c50fd7fe14a65ce6a31926663465bdd20c8bea06"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"912bb9e2952fe6350301d829d1a38c3743f53e9c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"4944beae_d39e4712","in_reply_to":"4e188eed_70e054ed","updated":"2021-11-30 05:33:51.000000000","message":"Ops - was an old comment.","commit_id":"c50fd7fe14a65ce6a31926663465bdd20c8bea06"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"513851082e4e983dcb7da1b6823265d516e4c6ce","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"9f1c45fd_f5baeebe","updated":"2021-11-30 05:54:47.000000000","message":"Confirmed that it was broken locally.","commit_id":"15a0070d96313b49bfdf41fab52a9bb252bfa0b4"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"d2bbe902c06d7315a53c1b92ebbc41b06237b4a7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"4e26b8fa_8a18c4db","updated":"2021-12-07 07:45:27.000000000","message":"Isn\u0027t there a way to do this without duplicating the code? Seems a hassle to try and keep it in sync.","commit_id":"15a0070d96313b49bfdf41fab52a9bb252bfa0b4"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"b2e4b82be14443a1bb7323e27c2e09a4b83712ce","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"c8e77ef0_754bdb8b","updated":"2021-11-30 16:44:18.000000000","message":"recheck","commit_id":"15a0070d96313b49bfdf41fab52a9bb252bfa0b4"}],"designateclient/utils.py":[{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"39ef298b4e25baf5a6d1b27bcbfedd2fc704b548","unresolved":true,"context_lines":[{"line_number":21,"context_line":"from designateclient import exceptions"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def get_item_properties(item, fields, mixed_case_fields\u003d(), formatters\u003d()):"},{"line_number":25,"context_line":"    \"\"\"Return a tuple containing the item properties."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    :param item: a single item resource (e.g. Server, Tenant, etc)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a578b86_717dc3a4","line":24,"updated":"2021-11-30 00:52:35.000000000","message":"This should probably be \n\u003e mixed_case_fields\u003d(), formatters\u003d()\n\nand \n\u003e mixed_case_fields \u003d mixed_case_fields or []\n\u003e formatters \u003d formatters or {}\n\nright? but maybe \u003d() works too","commit_id":"7a5f28c4001665de93c018f74951136d36483768"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"d8a94024e4c883f4e4dee1146aac02e2d300d87d","unresolved":true,"context_lines":[{"line_number":21,"context_line":"from designateclient import exceptions"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def get_item_properties(item, fields, mixed_case_fields\u003d(), formatters\u003d()):"},{"line_number":25,"context_line":"    \"\"\"Return a tuple containing the item properties."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    :param item: a single item resource (e.g. Server, Tenant, etc)"}],"source_content_type":"text/x-python","patch_set":1,"id":"98fe0a32_a9c1d651","line":24,"in_reply_to":"33b0259c_6b0c2eb9","updated":"2021-11-30 03:00:46.000000000","message":"Maybe, but formatters wasn\u0027t a list, it was a dictionary.","commit_id":"7a5f28c4001665de93c018f74951136d36483768"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"f471b46431fd37a0cc78a6eccaa8fab8cb0a031b","unresolved":true,"context_lines":[{"line_number":21,"context_line":"from designateclient import exceptions"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def get_item_properties(item, fields, mixed_case_fields\u003d(), formatters\u003d()):"},{"line_number":25,"context_line":"    \"\"\"Return a tuple containing the item properties."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    :param item: a single item resource (e.g. Server, Tenant, etc)"}],"source_content_type":"text/x-python","patch_set":1,"id":"33b0259c_6b0c2eb9","line":24,"in_reply_to":"45f79756_06101d53","updated":"2021-11-30 02:15:33.000000000","message":"() should work fine and it gives a hint to the reader that those are lists, like the original code did.","commit_id":"7a5f28c4001665de93c018f74951136d36483768"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"50c91c62cbb1d967290c80d751dcc9d821bda72e","unresolved":true,"context_lines":[{"line_number":21,"context_line":"from designateclient import exceptions"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def get_item_properties(item, fields, mixed_case_fields\u003d(), formatters\u003d()):"},{"line_number":25,"context_line":"    \"\"\"Return a tuple containing the item properties."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    :param item: a single item resource (e.g. Server, Tenant, etc)"}],"source_content_type":"text/x-python","patch_set":1,"id":"83dd35a8_64d2fa62","line":24,"in_reply_to":"5a578b86_717dc3a4","updated":"2021-11-30 01:02:19.000000000","message":"Typo, not mixed_case_fields\u003d(), formatters\u003d()\n\u003e mixed_case_fields\u003dNone, formatters\u003dNone","commit_id":"7a5f28c4001665de93c018f74951136d36483768"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"123541be4b8b850379eb502f6067e8df03e81d69","unresolved":true,"context_lines":[{"line_number":21,"context_line":"from designateclient import exceptions"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def get_item_properties(item, fields, mixed_case_fields\u003d(), formatters\u003d()):"},{"line_number":25,"context_line":"    \"\"\"Return a tuple containing the item properties."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    :param item: a single item resource (e.g. Server, Tenant, etc)"}],"source_content_type":"text/x-python","patch_set":1,"id":"45f79756_06101d53","line":24,"in_reply_to":"83dd35a8_64d2fa62","updated":"2021-11-30 01:07:28.000000000","message":"https://opendev.org/openstack/python-neutronclient/src/branch/master/neutronclient/common/utils.py#L75","commit_id":"7a5f28c4001665de93c018f74951136d36483768"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"7eb0c167d80d73dc636a3f90e2c770368f7eb0d1","unresolved":true,"context_lines":[{"line_number":21,"context_line":"from designateclient import exceptions"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def get_item_properties(item, fields, mixed_case_fields\u003d(), formatters\u003d()):"},{"line_number":25,"context_line":"    \"\"\"Return a tuple containing the item properties."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    :param item: a single item resource (e.g. Server, Tenant, etc)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3e352a5f_30eddced","line":24,"in_reply_to":"98fe0a32_a9c1d651","updated":"2021-11-30 04:30:55.000000000","message":"Hmm, yeah, good point. I will switch it over to None as I don\u0027t think there is an immutable dict in python.","commit_id":"7a5f28c4001665de93c018f74951136d36483768"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"b85fe6621f8c5099cccb14e86ae86bfa4b511bdc","unresolved":true,"context_lines":[{"line_number":30,"context_line":"    :param formatters: dictionary mapping field names to callables"},{"line_number":31,"context_line":"        to format the values"},{"line_number":32,"context_line":"    \"\"\""},{"line_number":33,"context_line":"    row \u003d []"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    for field in fields:"},{"line_number":36,"context_line":"        if field in formatters:"}],"source_content_type":"text/x-python","patch_set":3,"id":"a1d7daa8_0c9d9eeb","line":33,"updated":"2021-11-30 05:33:18.000000000","message":"Probably want to add\n\u003e if formatters is None:\n\u003e     formatters \u003d {}\nHere - not sure how this code can even pass right now. I assume it isn\u0027t tested at all?\n\nWe should be seeing\n\u003e TypeError: argument of type \u0027NoneType\u0027 is not iterable\nSince nothing ever overrides formatters in our code.","commit_id":"c50fd7fe14a65ce6a31926663465bdd20c8bea06"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"3f07520b809fbcf7a8243ba74e72d0cc06ef4b82","unresolved":true,"context_lines":[{"line_number":30,"context_line":"    :param formatters: dictionary mapping field names to callables"},{"line_number":31,"context_line":"        to format the values"},{"line_number":32,"context_line":"    \"\"\""},{"line_number":33,"context_line":"    row \u003d []"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    for field in fields:"},{"line_number":36,"context_line":"        if field in formatters:"}],"source_content_type":"text/x-python","patch_set":3,"id":"dc3b7b92_58174951","line":33,"in_reply_to":"20233dad_e46e6868","updated":"2021-11-30 05:56:10.000000000","message":"I tested it locally and it breaks the client. It just isn\u0027t a tested path.","commit_id":"c50fd7fe14a65ce6a31926663465bdd20c8bea06"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"122d39c2652644b94d851916dcba30ae9ba07ab8","unresolved":true,"context_lines":[{"line_number":30,"context_line":"    :param formatters: dictionary mapping field names to callables"},{"line_number":31,"context_line":"        to format the values"},{"line_number":32,"context_line":"    \"\"\""},{"line_number":33,"context_line":"    row \u003d []"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    for field in fields:"},{"line_number":36,"context_line":"        if field in formatters:"}],"source_content_type":"text/x-python","patch_set":3,"id":"20233dad_e46e6868","line":33,"in_reply_to":"a1d7daa8_0c9d9eeb","updated":"2021-11-30 05:54:45.000000000","message":"Well, {} \u003d\u003d None in python.\nSo, \"if field in formatters:\" will not match on None.\nThis is not \"incorrect\", just odd.","commit_id":"c50fd7fe14a65ce6a31926663465bdd20c8bea06"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"88191b1bb3428a2d2fb6918a7aed8e66d747e2a1","unresolved":true,"context_lines":[{"line_number":30,"context_line":"    :param formatters: dictionary mapping field names to callables"},{"line_number":31,"context_line":"        to format the values"},{"line_number":32,"context_line":"    \"\"\""},{"line_number":33,"context_line":"    row \u003d []"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    for field in fields:"},{"line_number":36,"context_line":"        if field in formatters:"}],"source_content_type":"text/x-python","patch_set":3,"id":"dce01d32_21e06707","line":33,"in_reply_to":"dc3b7b92_58174951","updated":"2021-11-30 05:58:21.000000000","message":"Doh, yeah, I was totally wrong on that. Ha, the () was probably fine.\nThanks for the update.","commit_id":"c50fd7fe14a65ce6a31926663465bdd20c8bea06"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"cef91e8021b792623a6249bb00d129beb540f362","unresolved":true,"context_lines":[{"line_number":30,"context_line":"    :param formatters: dictionary mapping field names to callables"},{"line_number":31,"context_line":"        to format the values"},{"line_number":32,"context_line":"    \"\"\""},{"line_number":33,"context_line":"    row \u003d []"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    for field in fields:"},{"line_number":36,"context_line":"        if field in formatters:"}],"source_content_type":"text/x-python","patch_set":3,"id":"0e74091a_c6187e7f","line":33,"in_reply_to":"dce01d32_21e06707","updated":"2021-11-30 06:11:48.000000000","message":"We should honestly just remove all that unnecessary code :p","commit_id":"c50fd7fe14a65ce6a31926663465bdd20c8bea06"}]}
