)]}'
{"nova/block_device.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7e7cdb14c2b7ab86953d90e39ab0e9d8eaa02fc3","unresolved":false,"context_lines":[{"line_number":543,"context_line":"    if ebs_devices:"},{"line_number":544,"context_line":"        # NOTE(claudiub): python2.7 sort places None values first."},{"line_number":545,"context_line":"        # this sort will maintain the same behaviour for both py27 and py34."},{"line_number":546,"context_line":"        ebs_devices \u003d sorted(ebs_devices, key\u003dlambda x: (x is not None, x))"},{"line_number":547,"context_line":"        for nebs, ebs in enumerate(ebs_devices):"},{"line_number":548,"context_line":"            mappings[\u0027ebs%d\u0027 % nebs] \u003d ebs"},{"line_number":549,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_51288f85","line":546,"updated":"2016-06-16 20:19:40.000000000","message":"Nice trick!","commit_id":"4a8aa19b9b36ac675a7a71ee2b75ce2177ae041f"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"2320537660e828656bf6071fdfc195a69b721da4","unresolved":false,"context_lines":[{"line_number":543,"context_line":"    if ebs_devices:"},{"line_number":544,"context_line":"        # NOTE(claudiub): python2.7 sort places None values first."},{"line_number":545,"context_line":"        # this sort will maintain the same behaviour for both py27 and py34."},{"line_number":546,"context_line":"        ebs_devices \u003d sorted(ebs_devices, key\u003dlambda x: (x is not None, x))"},{"line_number":547,"context_line":"        for nebs, ebs in enumerate(ebs_devices):"},{"line_number":548,"context_line":"            mappings[\u0027ebs%d\u0027 % nebs] \u003d ebs"},{"line_number":549,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_18aaa319","line":546,"in_reply_to":"7aa08908_51288f85","updated":"2016-06-17 00:50:57.000000000","message":"thanks. :)","commit_id":"4a8aa19b9b36ac675a7a71ee2b75ce2177ae041f"}],"nova/cells/utils.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"ee868194cb76f34730b70360506c13f28d50e03b","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            raise AttributeError"},{"line_number":126,"context_line":"        # NOTE(claudiub): needed for py34 compatiblity."},{"line_number":127,"context_line":"        # get self._obj first, without ending into an infinite recursion."},{"line_number":128,"context_line":"        return getattr(object.__getattribute__(self, \"_obj\"), key)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"def get_instances_to_sync(context, updated_since\u003dNone, project_id\u003dNone,"}],"source_content_type":"text/x-python","patch_set":19,"id":"7a8ec9b2_c194ebe9","line":128,"range":{"start_line":128,"start_character":23,"end_line":128,"end_character":29},"updated":"2016-09-20 18:01:51.000000000","message":"Should be able to just use self here, right?  That would allow eliminating the \u0027self\u0027 argument.\n\n    return getattr(self.__getattribute__(\u0027_obj\u0027), key)","commit_id":"fb7f28b97c922f6e7f3cd41715901adfc7ab8148"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"3af58ea0b71ddf8f2bfb7bcc44afbc803e4c7195","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            raise AttributeError"},{"line_number":126,"context_line":"        # NOTE(claudiub): needed for py34 compatiblity."},{"line_number":127,"context_line":"        # get self._obj first, without ending into an infinite recursion."},{"line_number":128,"context_line":"        return getattr(object.__getattribute__(self, \"_obj\"), key)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"def get_instances_to_sync(context, updated_since\u003dNone, project_id\u003dNone,"}],"source_content_type":"text/x-python","patch_set":19,"id":"5a8bc5a2_9b651447","line":128,"range":{"start_line":128,"start_character":23,"end_line":128,"end_character":29},"in_reply_to":"7a8ec9b2_c194ebe9","updated":"2016-09-22 22:52:35.000000000","message":"Done","commit_id":"fb7f28b97c922f6e7f3cd41715901adfc7ab8148"}],"nova/utils.py":[{"author":{"_account_id":18320,"name":"Dao Cong Tien","email":"tiendc@vn.fujitsu.com","username":"TienDC"},"change_message_id":"0077b91eaf4f399d90f5024633f692729c44c06e","unresolved":false,"context_lines":[{"line_number":719,"context_line":"            do_something_that_needed_deleted_objects()"},{"line_number":720,"context_line":"    \"\"\""},{"line_number":721,"context_line":"    def is_dict_like(thing):"},{"line_number":722,"context_line":"        return hasattr(thing, \u0027has_key\u0027) or type(thing) is dict"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"    def get(thing, attr, default):"},{"line_number":725,"context_line":"        if is_dict_like(thing):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_bc1e1161","line":722,"updated":"2016-05-19 02:39:06.000000000","message":"Should we use isinstance() instead?","commit_id":"3139803fbcd26a655947a0476a10a081e2c626e5"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1ccfa33da991b857e27d7d73a402293385395ddc","unresolved":false,"context_lines":[{"line_number":719,"context_line":"            do_something_that_needed_deleted_objects()"},{"line_number":720,"context_line":"    \"\"\""},{"line_number":721,"context_line":"    def is_dict_like(thing):"},{"line_number":722,"context_line":"        return hasattr(thing, \u0027has_key\u0027) or type(thing) is dict"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"    def get(thing, attr, default):"},{"line_number":725,"context_line":"        if is_dict_like(thing):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_792a02e9","line":722,"in_reply_to":"bab6814e_bc1e1161","updated":"2016-05-24 18:03:23.000000000","message":"makes sense.","commit_id":"3139803fbcd26a655947a0476a10a081e2c626e5"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"ee868194cb76f34730b70360506c13f28d50e03b","unresolved":false,"context_lines":[{"line_number":732,"context_line":"            do_something_that_needed_deleted_objects()"},{"line_number":733,"context_line":"    \"\"\""},{"line_number":734,"context_line":"    def is_dict_like(thing):"},{"line_number":735,"context_line":"        return hasattr(thing, \u0027has_key\u0027) or isinstance(thing, dict)"},{"line_number":736,"context_line":""},{"line_number":737,"context_line":"    def get(thing, attr, default):"},{"line_number":738,"context_line":"        if is_dict_like(thing):"}],"source_content_type":"text/x-python","patch_set":19,"id":"7a8ec9b2_21702fdc","line":735,"range":{"start_line":735,"start_character":40,"end_line":735,"end_character":67},"updated":"2016-09-20 18:01:51.000000000","message":"I\u0027m not certain why this clause needed to be added for Python 3 compatibility.  If something is an instance of dict (or a dict subclass), wouldn\u0027t it have a \u0027has_key\u0027 attribute?","commit_id":"fb7f28b97c922f6e7f3cd41715901adfc7ab8148"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"3af58ea0b71ddf8f2bfb7bcc44afbc803e4c7195","unresolved":false,"context_lines":[{"line_number":732,"context_line":"            do_something_that_needed_deleted_objects()"},{"line_number":733,"context_line":"    \"\"\""},{"line_number":734,"context_line":"    def is_dict_like(thing):"},{"line_number":735,"context_line":"        return hasattr(thing, \u0027has_key\u0027) or isinstance(thing, dict)"},{"line_number":736,"context_line":""},{"line_number":737,"context_line":"    def get(thing, attr, default):"},{"line_number":738,"context_line":"        if is_dict_like(thing):"}],"source_content_type":"text/x-python","patch_set":19,"id":"5a8bc5a2_3bfde03a","line":735,"range":{"start_line":735,"start_character":40,"end_line":735,"end_character":67},"in_reply_to":"7a8ec9b2_21702fdc","updated":"2016-09-22 22:52:35.000000000","message":"python3 dictionaries do not have \"has_key\" method. in fact, python3 dicts have significantly smaller interfaces.","commit_id":"fb7f28b97c922f6e7f3cd41715901adfc7ab8148"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"87cce0f61cf0c11d2fece55433ce64343afab293","unresolved":false,"context_lines":[{"line_number":732,"context_line":"            do_something_that_needed_deleted_objects()"},{"line_number":733,"context_line":"    \"\"\""},{"line_number":734,"context_line":"    def is_dict_like(thing):"},{"line_number":735,"context_line":"        return hasattr(thing, \u0027has_key\u0027) or isinstance(thing, dict)"},{"line_number":736,"context_line":""},{"line_number":737,"context_line":"    def get(thing, attr, default):"},{"line_number":738,"context_line":"        if is_dict_like(thing):"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a8bc5a2_4ef02891","line":735,"updated":"2016-09-22 23:10:35.000000000","message":"Ah, that makes sense…","commit_id":"acb51647f20a6072218e59bbd3f1a3a4ba2bd2fd"}],"nova/virt/block_device.py":[{"author":{"_account_id":18320,"name":"Dao Cong Tien","email":"tiendc@vn.fujitsu.com","username":"TienDC"},"change_message_id":"df4fabd299b0a8942de28179fd76126f73b9f961","unresolved":false,"context_lines":[{"line_number":515,"context_line":""},{"line_number":516,"context_line":"        bdm.attach(*attach_args, **attach_kwargs)"},{"line_number":517,"context_line":""},{"line_number":518,"context_line":"    list(map(_log_and_attach, block_device_mapping))"},{"line_number":519,"context_line":"    return block_device_mapping"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_3e953588","line":518,"updated":"2016-06-02 09:34:30.000000000","message":"In my understanding, this use of list() has no effect because you don\u0027t use the return value of the function.","commit_id":"24abe029848e035ceb23280e42634842fc20ff33"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"3ff3975a9958d714fb499cf137c83b4b581f2ba6","unresolved":false,"context_lines":[{"line_number":515,"context_line":""},{"line_number":516,"context_line":"        bdm.attach(*attach_args, **attach_kwargs)"},{"line_number":517,"context_line":""},{"line_number":518,"context_line":"    list(map(_log_and_attach, block_device_mapping))"},{"line_number":519,"context_line":"    return block_device_mapping"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_828f9fcb","line":518,"in_reply_to":"9abb7d3a_3e953588","updated":"2016-06-02 11:55:25.000000000","message":"quite the contrary.\n\nSo, let me explain this a little bit.\n\nmap basically calls _log_and_attach function with each element in the block_device_mapping and it returns a list with each result. No surprise here.\n\nThe thing is, py34\u0027s map returns an iterator. Meaning that _log_and_attach function is NOT called, unless the iterator is iterated through. list will basically loop through the iterator.\n\nThe thing is, without this, the block_device_mapping\u0027s connection_info would be None, meaning that all volume related unit tests would fail on py34. You can verify my claim through the fact that py34 tests passed succesfully, and that the volume related unit tests were removed from the exclude list. \n\nI\u0027ve wasted quite a lot of time trying to debug this issue. :)","commit_id":"24abe029848e035ceb23280e42634842fc20ff33"},{"author":{"_account_id":18320,"name":"Dao Cong Tien","email":"tiendc@vn.fujitsu.com","username":"TienDC"},"change_message_id":"6e4ee505d39f832da983af46658e5abd31d1ffa1","unresolved":false,"context_lines":[{"line_number":515,"context_line":""},{"line_number":516,"context_line":"        bdm.attach(*attach_args, **attach_kwargs)"},{"line_number":517,"context_line":""},{"line_number":518,"context_line":"    list(map(_log_and_attach, block_device_mapping))"},{"line_number":519,"context_line":"    return block_device_mapping"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_7d9b3a73","line":518,"in_reply_to":"9abb7d3a_828f9fcb","updated":"2016-06-02 12:06:35.000000000","message":"Thanks.","commit_id":"24abe029848e035ceb23280e42634842fc20ff33"},{"author":{"_account_id":18320,"name":"Dao Cong Tien","email":"tiendc@vn.fujitsu.com","username":"TienDC"},"change_message_id":"df4fabd299b0a8942de28179fd76126f73b9f961","unresolved":false,"context_lines":[{"line_number":520,"context_line":""},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"def refresh_conn_infos(block_device_mapping, *refresh_args, **refresh_kwargs):"},{"line_number":523,"context_line":"    list(map(operator.methodcaller(\u0027refresh_connection_info\u0027,"},{"line_number":524,"context_line":"                                   *refresh_args, **refresh_kwargs),"},{"line_number":525,"context_line":"        block_device_mapping))"},{"line_number":526,"context_line":"    return block_device_mapping"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_bee76545","line":523,"updated":"2016-06-02 09:34:30.000000000","message":"Ditto","commit_id":"24abe029848e035ceb23280e42634842fc20ff33"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"3ff3975a9958d714fb499cf137c83b4b581f2ba6","unresolved":false,"context_lines":[{"line_number":520,"context_line":""},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"def refresh_conn_infos(block_device_mapping, *refresh_args, **refresh_kwargs):"},{"line_number":523,"context_line":"    list(map(operator.methodcaller(\u0027refresh_connection_info\u0027,"},{"line_number":524,"context_line":"                                   *refresh_args, **refresh_kwargs),"},{"line_number":525,"context_line":"        block_device_mapping))"},{"line_number":526,"context_line":"    return block_device_mapping"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_e2baeb70","line":523,"in_reply_to":"9abb7d3a_bee76545","updated":"2016-06-02 11:55:25.000000000","message":"ditto.","commit_id":"24abe029848e035ceb23280e42634842fc20ff33"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7e7cdb14c2b7ab86953d90e39ab0e9d8eaa02fc3","unresolved":false,"context_lines":[{"line_number":522,"context_line":"def refresh_conn_infos(block_device_mapping, *refresh_args, **refresh_kwargs):"},{"line_number":523,"context_line":"    list(map(operator.methodcaller(\u0027refresh_connection_info\u0027,"},{"line_number":524,"context_line":"                                   *refresh_args, **refresh_kwargs),"},{"line_number":525,"context_line":"        block_device_mapping))"},{"line_number":526,"context_line":"    return block_device_mapping"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_11c3a758","line":525,"range":{"start_line":525,"start_character":8,"end_line":525,"end_character":30},"updated":"2016-06-16 20:19:40.000000000","message":"Nit: this indentation is ugly. At least line it up with the word \u0027operator\u0027 as in the old version.","commit_id":"4a8aa19b9b36ac675a7a71ee2b75ce2177ae041f"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"2320537660e828656bf6071fdfc195a69b721da4","unresolved":false,"context_lines":[{"line_number":522,"context_line":"def refresh_conn_infos(block_device_mapping, *refresh_args, **refresh_kwargs):"},{"line_number":523,"context_line":"    list(map(operator.methodcaller(\u0027refresh_connection_info\u0027,"},{"line_number":524,"context_line":"                                   *refresh_args, **refresh_kwargs),"},{"line_number":525,"context_line":"        block_device_mapping))"},{"line_number":526,"context_line":"    return block_device_mapping"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_58626b17","line":525,"range":{"start_line":525,"start_character":8,"end_line":525,"end_character":30},"in_reply_to":"7aa08908_11c3a758","updated":"2016-06-17 00:50:57.000000000","message":"Done","commit_id":"4a8aa19b9b36ac675a7a71ee2b75ce2177ae041f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e1ac4e6ac3612b02a2974f0aee5d33365baef912","unresolved":false,"context_lines":[{"line_number":520,"context_line":""},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"def refresh_conn_infos(block_device_mapping, *refresh_args, **refresh_kwargs):"},{"line_number":523,"context_line":"    list(map(operator.methodcaller(\u0027refresh_connection_info\u0027,"},{"line_number":524,"context_line":"                                   *refresh_args, **refresh_kwargs),"},{"line_number":525,"context_line":"             block_device_mapping))"},{"line_number":526,"context_line":"    return block_device_mapping"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_8ac79011","line":525,"range":{"start_line":523,"start_character":4,"end_line":525,"end_character":35},"updated":"2016-07-04 14:53:23.000000000","message":"nit: could you just use a for-loop instead here?","commit_id":"726e684080b18996764d9b68ab558482f5c9fb41"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"a362c04d6f49528d0256e2c2288e430d698e5c8f","unresolved":false,"context_lines":[{"line_number":520,"context_line":""},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"def refresh_conn_infos(block_device_mapping, *refresh_args, **refresh_kwargs):"},{"line_number":523,"context_line":"    list(map(operator.methodcaller(\u0027refresh_connection_info\u0027,"},{"line_number":524,"context_line":"                                   *refresh_args, **refresh_kwargs),"},{"line_number":525,"context_line":"             block_device_mapping))"},{"line_number":526,"context_line":"    return block_device_mapping"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa7ab95a_c5a6f652","line":525,"range":{"start_line":523,"start_character":4,"end_line":525,"end_character":35},"in_reply_to":"1aa78d24_273e9c29","updated":"2016-08-31 09:47:50.000000000","message":"will do when those patches merge.","commit_id":"726e684080b18996764d9b68ab558482f5c9fb41"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"7afcb6f6dd4493827d627f9c0c8b0b88a968a4f1","unresolved":false,"context_lines":[{"line_number":520,"context_line":""},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"def refresh_conn_infos(block_device_mapping, *refresh_args, **refresh_kwargs):"},{"line_number":523,"context_line":"    list(map(operator.methodcaller(\u0027refresh_connection_info\u0027,"},{"line_number":524,"context_line":"                                   *refresh_args, **refresh_kwargs),"},{"line_number":525,"context_line":"             block_device_mapping))"},{"line_number":526,"context_line":"    return block_device_mapping"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_273e9c29","line":525,"range":{"start_line":523,"start_character":4,"end_line":525,"end_character":35},"in_reply_to":"1aa78d24_8ac79011","updated":"2016-07-14 14:35:55.000000000","message":"I\u0027ve managed to duplicate this [1] after initially using a for loop to simplify this in the original change [2]. Any objections to this part being dropped from the change as I\u0027m also adding a test in [1]?\n\n[1] https://review.openstack.org/#/c/342111/\n[2] https://review.openstack.org/#/c/338929/","commit_id":"726e684080b18996764d9b68ab558482f5c9fb41"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"ee868194cb76f34730b70360506c13f28d50e03b","unresolved":false,"context_lines":[{"line_number":511,"context_line":""},{"line_number":512,"context_line":"        bdm.attach(*attach_args, **attach_kwargs)"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"    list(map(_log_and_attach, block_device_mapping))"},{"line_number":515,"context_line":"    return block_device_mapping"},{"line_number":516,"context_line":""},{"line_number":517,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"7a8ec9b2_415e1b46","line":514,"updated":"2016-09-20 18:01:51.000000000","message":"Maybe we could eliminate the map() call and convert to a for loop?  We\u0027re not using a return value here, so there\u0027s not really a reason to construct one.","commit_id":"fb7f28b97c922f6e7f3cd41715901adfc7ab8148"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"3af58ea0b71ddf8f2bfb7bcc44afbc803e4c7195","unresolved":false,"context_lines":[{"line_number":511,"context_line":""},{"line_number":512,"context_line":"        bdm.attach(*attach_args, **attach_kwargs)"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"    list(map(_log_and_attach, block_device_mapping))"},{"line_number":515,"context_line":"    return block_device_mapping"},{"line_number":516,"context_line":""},{"line_number":517,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"5a8bc5a2_2e1e7c63","line":514,"in_reply_to":"7a8ec9b2_415e1b46","updated":"2016-09-22 22:52:35.000000000","message":"Done","commit_id":"fb7f28b97c922f6e7f3cd41715901adfc7ab8148"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"ee868194cb76f34730b70360506c13f28d50e03b","unresolved":false,"context_lines":[{"line_number":518,"context_line":"def refresh_conn_infos(block_device_mapping, *refresh_args, **refresh_kwargs):"},{"line_number":519,"context_line":"    list(map(operator.methodcaller(\u0027refresh_connection_info\u0027,"},{"line_number":520,"context_line":"                                   *refresh_args, **refresh_kwargs),"},{"line_number":521,"context_line":"             block_device_mapping))"},{"line_number":522,"context_line":"    return block_device_mapping"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"7a8ec9b2_e11ac77b","line":521,"updated":"2016-09-20 18:01:51.000000000","message":"Ibid.  Should also allow you to get rid of the operator.methodcaller()…","commit_id":"fb7f28b97c922f6e7f3cd41715901adfc7ab8148"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"3af58ea0b71ddf8f2bfb7bcc44afbc803e4c7195","unresolved":false,"context_lines":[{"line_number":518,"context_line":"def refresh_conn_infos(block_device_mapping, *refresh_args, **refresh_kwargs):"},{"line_number":519,"context_line":"    list(map(operator.methodcaller(\u0027refresh_connection_info\u0027,"},{"line_number":520,"context_line":"                                   *refresh_args, **refresh_kwargs),"},{"line_number":521,"context_line":"             block_device_mapping))"},{"line_number":522,"context_line":"    return block_device_mapping"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"5a8bc5a2_4e1bc872","line":521,"in_reply_to":"7a8ec9b2_e11ac77b","updated":"2016-09-22 22:52:35.000000000","message":"Done","commit_id":"fb7f28b97c922f6e7f3cd41715901adfc7ab8148"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ffacab52e1c4d811fc11a1ccb00eedc4b3d281a6","unresolved":false,"context_lines":[{"line_number":510,"context_line":""},{"line_number":511,"context_line":"        bdm.attach(*attach_args, **attach_kwargs)"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"    for device in block_device_mapping:"},{"line_number":514,"context_line":"        _log_and_attach(device)"},{"line_number":515,"context_line":"    return block_device_mapping"},{"line_number":516,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5a8bc5a2_310421bf","line":513,"updated":"2016-09-22 23:43:22.000000000","message":"Why is this in here? map is supported in python 3:\n\nhttps://docs.python.org/3.5/library/functions.html#map","commit_id":"acb51647f20a6072218e59bbd3f1a3a4ba2bd2fd"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"0eba7da0ba8cf4ff01de70adbfb08b2d4057b5eb","unresolved":false,"context_lines":[{"line_number":510,"context_line":""},{"line_number":511,"context_line":"        bdm.attach(*attach_args, **attach_kwargs)"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"    for device in block_device_mapping:"},{"line_number":514,"context_line":"        _log_and_attach(device)"},{"line_number":515,"context_line":"    return block_device_mapping"},{"line_number":516,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5a8bc5a2_b16d9106","line":513,"in_reply_to":"5a8bc5a2_310421bf","updated":"2016-09-23 00:08:45.000000000","message":"true. but in python3 map returns a generator, instead of explicitly mapping items to the function. Having just the generator won\u0027t actually call _log_and_attach. Which is why we have this for.","commit_id":"acb51647f20a6072218e59bbd3f1a3a4ba2bd2fd"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"025fb8f4ccda75c5ca2a57c4c695f46315614426","unresolved":false,"context_lines":[{"line_number":510,"context_line":""},{"line_number":511,"context_line":"        bdm.attach(*attach_args, **attach_kwargs)"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"    for device in block_device_mapping:"},{"line_number":514,"context_line":"        _log_and_attach(device)"},{"line_number":515,"context_line":"    return block_device_mapping"},{"line_number":516,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5a8bc5a2_a720ef9c","line":513,"in_reply_to":"5a8bc5a2_b16d9106","updated":"2016-09-23 00:53:18.000000000","message":"Ah OK. Personally I don\u0027t like map anyway, too magical.","commit_id":"acb51647f20a6072218e59bbd3f1a3a4ba2bd2fd"}]}
