)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f5ce778e9d5c89bf3937efb1f8e39b6b1c27815c","unresolved":false,"context_lines":[{"line_number":10,"context_line":"and Linux OS are supported. The library is choosen automatically"},{"line_number":11,"context_line":"depending on Python ``os.name``."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Linux library is based on ``ip`` commands. Windows library relays"},{"line_number":14,"context_line":"on Python ``netifaces`` library."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"The only functionality implemented, to cover the bug resolution, is"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7f287b81_e9fc993f","line":13,"range":{"start_line":13,"start_character":59,"end_line":13,"end_character":65},"updated":"2017-09-04 14:22:11.000000000","message":"relies","commit_id":"4ee8da5b00373ed701193494e68894377b90d2d2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a27cfc5cdfab84512029711a472bf1a60683cd84","unresolved":false,"context_lines":[{"line_number":10,"context_line":"and Linux OS are supported. The library is choosen automatically"},{"line_number":11,"context_line":"depending on Python ``os.name``."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Linux library is based on ``ip`` commands. Windows library relays"},{"line_number":14,"context_line":"on Python ``netifaces`` library."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"The only functionality implemented, to cover the bug resolution, is"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7f287b81_d261793b","line":13,"range":{"start_line":13,"start_character":59,"end_line":13,"end_character":65},"in_reply_to":"7f287b81_e9fc993f","updated":"2017-09-05 08:39:33.000000000","message":"Done","commit_id":"4ee8da5b00373ed701193494e68894377b90d2d2"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f5ce778e9d5c89bf3937efb1f8e39b6b1c27815c","unresolved":false,"context_lines":[{"line_number":11,"context_line":"depending on Python ``os.name``."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Linux library is based on ``ip`` commands. Windows library relays"},{"line_number":14,"context_line":"on Python ``netifaces`` library."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"The only functionality implemented, to cover the bug resolution, is"},{"line_number":17,"context_line":"the device existence check. New functionalities could be added"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7f287b81_a99451e9","line":14,"range":{"start_line":14,"start_character":3,"end_line":14,"end_character":9},"updated":"2017-09-04 14:22:11.000000000","message":"Python\u0027s","commit_id":"4ee8da5b00373ed701193494e68894377b90d2d2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a27cfc5cdfab84512029711a472bf1a60683cd84","unresolved":false,"context_lines":[{"line_number":11,"context_line":"depending on Python ``os.name``."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Linux library is based on ``ip`` commands. Windows library relays"},{"line_number":14,"context_line":"on Python ``netifaces`` library."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"The only functionality implemented, to cover the bug resolution, is"},{"line_number":17,"context_line":"the device existence check. New functionalities could be added"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7f287b81_b264ad4a","line":14,"range":{"start_line":14,"start_character":3,"end_line":14,"end_character":9},"in_reply_to":"7f287b81_a99451e9","updated":"2017-09-05 08:39:33.000000000","message":"Done","commit_id":"4ee8da5b00373ed701193494e68894377b90d2d2"}],"os_vif/common/ip_lib.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1a7f8a0b58238e73788ac6dd3cd1e8c2da113139","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import os"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"if os.name \u003d\u003d \u0027nt\u0027:"},{"line_number":18,"context_line":"    from os_vif.common.windows import ip_lib"},{"line_number":19,"context_line":"else:"},{"line_number":20,"context_line":"    from os_vif.common.linux import ip_lib"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"IPDevice \u003d ip_lib.IPDevice"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff346bd7_14578d5a","line":23,"range":{"start_line":17,"start_character":0,"end_line":23,"end_character":26},"updated":"2017-07-27 13:46:32.000000000","message":"instead of haveing too implimentation why not just use netifaces for linux and windows. its cross plathfrom and it alings with our goal to eventrually remove all use of process exec and use nataive python libs instead.","commit_id":"4ee8da5b00373ed701193494e68894377b90d2d2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a27cfc5cdfab84512029711a472bf1a60683cd84","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import os"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"if os.name \u003d\u003d \u0027nt\u0027:"},{"line_number":18,"context_line":"    from os_vif.common.windows import ip_lib"},{"line_number":19,"context_line":"else:"},{"line_number":20,"context_line":"    from os_vif.common.linux import ip_lib"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"IPDevice \u003d ip_lib.IPDevice"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f287b81_742752b8","line":23,"range":{"start_line":17,"start_character":0,"end_line":23,"end_character":26},"in_reply_to":"7f287b81_095a454f","updated":"2017-09-05 08:39:33.000000000","message":"Done. Added to commit message.","commit_id":"4ee8da5b00373ed701193494e68894377b90d2d2"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f5ce778e9d5c89bf3937efb1f8e39b6b1c27815c","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import os"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"if os.name \u003d\u003d \u0027nt\u0027:"},{"line_number":18,"context_line":"    from os_vif.common.windows import ip_lib"},{"line_number":19,"context_line":"else:"},{"line_number":20,"context_line":"    from os_vif.common.linux import ip_lib"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"IPDevice \u003d ip_lib.IPDevice"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f287b81_095a454f","line":23,"range":{"start_line":17,"start_character":0,"end_line":23,"end_character":26},"in_reply_to":"ff346bd7_0ab3e499","updated":"2017-09-04 14:22:11.000000000","message":"Yup, we could work to add this functionality to netifaces, but that\u0027s not a reasonable ask. Could you include this in the commit message, please?","commit_id":"4ee8da5b00373ed701193494e68894377b90d2d2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8454a38c450ffa29a971af642ab1cd4bcff33d83","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import os"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"if os.name \u003d\u003d \u0027nt\u0027:"},{"line_number":18,"context_line":"    from os_vif.common.windows import ip_lib"},{"line_number":19,"context_line":"else:"},{"line_number":20,"context_line":"    from os_vif.common.linux import ip_lib"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"IPDevice \u003d ip_lib.IPDevice"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff346bd7_0ab3e499","line":23,"range":{"start_line":17,"start_character":0,"end_line":23,"end_character":26},"in_reply_to":"ff346bd7_14578d5a","updated":"2017-07-27 14:46:29.000000000","message":"I thought about this, initially is a good idea.\n\nWindows ip_lib is going to be very small and \"netifaces\" covers all needs. Actually it only exposes three functions: \"gateways\", \"ifaddresses\" and \"interfaces\".\n\nLinux ip_lib will be much more complex. The first stopper to use \"netifaces\" is this library doesn\u0027t allow us to set values (like writting MTU, for example).\n\nAlthough I\u0027m still using processexec in this patch, I\u0027ll move [1] to this model. \"pyroute2\" library on the other hand, even though\nis only a Linux Python netlink library, fits perfectly for the task of removing \"ip\" commands.\n\n[1] https://review.openstack.org/#/q/topic:bug/1666917","commit_id":"4ee8da5b00373ed701193494e68894377b90d2d2"}],"os_vif/common/linux/ip_lib.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b6d964efbaab6e2bd088cfc37fae450e8c9eb358","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"7f515b1d_1f3e4dc0","updated":"2017-10-02 22:38:38.000000000","message":"this cannot be shared between plugins it must be duplicated between under each plugin.","commit_id":"557e93b7fdf60e2fc0d3184274ed7f43426d4f9c"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"bc05cdd2272abf9e24904edf5df3f680cafa17e6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"7f515b1d_d0577f25","in_reply_to":"7f515b1d_1f3e4dc0","updated":"2017-10-03 08:43:22.000000000","message":"Done","commit_id":"557e93b7fdf60e2fc0d3184274ed7f43426d4f9c"}],"os_vif/common/windows/ip_lib.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f5ce778e9d5c89bf3937efb1f8e39b6b1c27815c","unresolved":false,"context_lines":[{"line_number":20,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class IPDevice(object):"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def __init__(self, name):"},{"line_number":26,"context_line":"        self._name \u003d name"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f287b81_69b78988","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":23},"updated":"2017-09-04 14:22:11.000000000","message":"Would it be over-engineering to look for a superclass to define a common Windows/Linux interface? Perhaps based on \u0027abc\u0027","commit_id":"4ee8da5b00373ed701193494e68894377b90d2d2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a27cfc5cdfab84512029711a472bf1a60683cd84","unresolved":false,"context_lines":[{"line_number":20,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class IPDevice(object):"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def __init__(self, name):"},{"line_number":26,"context_line":"        self._name \u003d name"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f287b81_945d1e17","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":23},"in_reply_to":"7f287b81_69b78988","updated":"2017-09-05 08:39:33.000000000","message":"This is based in Neutron implementation (this kind of abstract API), but maybe is not the best one.\n\nOf course, adding an abstract definition for IPDevice is the methodical way, but Win library only implements one function (so far).\n\nAs you said, could be over-engineering.","commit_id":"4ee8da5b00373ed701193494e68894377b90d2d2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b6d964efbaab6e2bd088cfc37fae450e8c9eb358","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class IPDevice(object):"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def __init__(self, name):"},{"line_number":26,"context_line":"        self._name \u003d name"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f515b1d_64449474","line":25,"range":{"start_line":25,"start_character":4,"end_line":25,"end_character":29},"updated":"2017-10-02 22:38:38.000000000","message":"the only thing i dislike is that the constructor is different form the linux version.\nthat said i was going to suggest through an exception if you ever called the windows version with a namespace which this will do anyway\n\ne.g.\nTypeError: IPDevice() got an unexpected keyword argument \u0027namespace\u0027","commit_id":"557e93b7fdf60e2fc0d3184274ed7f43426d4f9c"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"bc05cdd2272abf9e24904edf5df3f680cafa17e6","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class IPDevice(object):"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def __init__(self, name):"},{"line_number":26,"context_line":"        self._name \u003d name"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f515b1d_eb660ced","line":25,"range":{"start_line":25,"start_character":4,"end_line":25,"end_character":29},"in_reply_to":"7f515b1d_64449474","updated":"2017-10-03 08:43:22.000000000","message":"Actually the correct way should be to define an interface class for IPDevice, and then implement Win and Linux versions.\n\nBut this is an overhead not really needed here.\n\nI\u0027ll create this exception.","commit_id":"557e93b7fdf60e2fc0d3184274ed7f43426d4f9c"}],"os_vif/internal/command/ip/api.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2f5c1fdf978b26eae9569b1213200365ad85962d","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    if os.name \u003d\u003d \u0027nt\u0027:"},{"line_number":34,"context_line":"        return win_ip_lib"},{"line_number":35,"context_line":"    else:"},{"line_number":36,"context_line":"        # NOTE(sean-k-mooney): currently pyroute2 has a file handle leak. An"},{"line_number":37,"context_line":"        # iptools driver has been added as a workaround but No config options"},{"line_number":38,"context_line":"        # are # exposed to the user. The iptools driver is considered"},{"line_number":39,"context_line":"        # deprecated and # will be removed when a new release of pyroute2 is"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f79a3b5_cc525313","line":36,"updated":"2018-09-25 00:08:46.000000000","message":"hehe actully this leak is now fixed and a new release of pyroute2 is available\nso we should proably revert to the pyroute2 driver. but that is for another patch","commit_id":"f61909f7ef83832e724d8dba92014c24b64770ad"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a2afcc5f6e7a46d239ee952cf79e96ae2f135d00","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    if os.name \u003d\u003d \u0027nt\u0027:"},{"line_number":34,"context_line":"        return win_ip_lib"},{"line_number":35,"context_line":"    else:"},{"line_number":36,"context_line":"        # NOTE(sean-k-mooney): currently pyroute2 has a file handle leak. An"},{"line_number":37,"context_line":"        # iptools driver has been added as a workaround but No config options"},{"line_number":38,"context_line":"        # are # exposed to the user. The iptools driver is considered"},{"line_number":39,"context_line":"        # deprecated and # will be removed when a new release of pyroute2 is"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f79a3b5_4214c7e9","line":36,"in_reply_to":"3f79a3b5_cc525313","updated":"2018-09-25 07:57:33.000000000","message":"I\u0027ll delete this in the next patch","commit_id":"f61909f7ef83832e724d8dba92014c24b64770ad"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"54771cbf7b1afc7fcaac4421f2284f7c2633bdd0","unresolved":false,"context_lines":[{"line_number":32,"context_line":"def _get_impl():"},{"line_number":33,"context_line":"    if os.name \u003d\u003d \u0027nt\u0027:"},{"line_number":34,"context_line":"        return win_ip_lib"},{"line_number":35,"context_line":"    else:"},{"line_number":36,"context_line":"        # NOTE(sean-k-mooney): currently pyroute2 has a file handle leak. An"},{"line_number":37,"context_line":"        # iptools driver has been added as a workaround but No config options"},{"line_number":38,"context_line":"        # are # exposed to the user. The iptools driver is considered"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_d2c3a105","line":35,"range":{"start_line":35,"start_character":0,"end_line":35,"end_character":9},"updated":"2018-09-26 14:24:11.000000000","message":"supernit: You don\u0027t need this \u0027else\u0027.","commit_id":"e8d102b500c7fbd5a0dfb8bd8dee82ff081a8678"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0b00edb91121d361de6233d2603bc683b2e94bdf","unresolved":false,"context_lines":[{"line_number":32,"context_line":"def _get_impl():"},{"line_number":33,"context_line":"    if os.name \u003d\u003d \u0027nt\u0027:"},{"line_number":34,"context_line":"        return win_ip_lib"},{"line_number":35,"context_line":"    else:"},{"line_number":36,"context_line":"        # NOTE(sean-k-mooney): currently pyroute2 has a file handle leak. An"},{"line_number":37,"context_line":"        # iptools driver has been added as a workaround but No config options"},{"line_number":38,"context_line":"        # are # exposed to the user. The iptools driver is considered"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_f23521dc","line":35,"range":{"start_line":35,"start_character":0,"end_line":35,"end_character":9},"in_reply_to":"3f79a3b5_cdfb0613","updated":"2018-10-01 10:28:31.000000000","message":"i think stephen was implying becase of the return you just need the if windows: return\nand if the if is false you will fall though and hit the linux version.\n\nthat said i prefer explcit else clauses personally so im fine with either form :)","commit_id":"e8d102b500c7fbd5a0dfb8bd8dee82ff081a8678"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5c7701602c915d885c2d26192da08a17d1dcf096","unresolved":false,"context_lines":[{"line_number":32,"context_line":"def _get_impl():"},{"line_number":33,"context_line":"    if os.name \u003d\u003d \u0027nt\u0027:"},{"line_number":34,"context_line":"        return win_ip_lib"},{"line_number":35,"context_line":"    else:"},{"line_number":36,"context_line":"        # NOTE(sean-k-mooney): currently pyroute2 has a file handle leak. An"},{"line_number":37,"context_line":"        # iptools driver has been added as a workaround but No config options"},{"line_number":38,"context_line":"        # are # exposed to the user. The iptools driver is considered"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_cdfb0613","line":35,"range":{"start_line":35,"start_character":0,"end_line":35,"end_character":9},"in_reply_to":"3f79a3b5_d2c3a105","updated":"2018-09-26 14:29:21.000000000","message":"For windows and linux implementation","commit_id":"e8d102b500c7fbd5a0dfb8bd8dee82ff081a8678"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"54771cbf7b1afc7fcaac4421f2284f7c2633bdd0","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    if os.name \u003d\u003d \u0027nt\u0027:"},{"line_number":34,"context_line":"        return win_ip_lib"},{"line_number":35,"context_line":"    else:"},{"line_number":36,"context_line":"        # NOTE(sean-k-mooney): currently pyroute2 has a file handle leak. An"},{"line_number":37,"context_line":"        # iptools driver has been added as a workaround but No config options"},{"line_number":38,"context_line":"        # are # exposed to the user. The iptools driver is considered"},{"line_number":39,"context_line":"        # deprecated and # will be removed when a new release of pyroute2 is"},{"line_number":40,"context_line":"        # available."},{"line_number":41,"context_line":"        driver \u003d \u0027IPTools\u0027"},{"line_number":42,"context_line":"        return importutils.import_object(impl_map[driver])"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_9258c98a","line":40,"range":{"start_line":36,"start_character":0,"end_line":40,"end_character":20},"updated":"2018-09-26 14:24:11.000000000","message":"unrelated (and broken) changes","commit_id":"e8d102b500c7fbd5a0dfb8bd8dee82ff081a8678"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5c7701602c915d885c2d26192da08a17d1dcf096","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    if os.name \u003d\u003d \u0027nt\u0027:"},{"line_number":34,"context_line":"        return win_ip_lib"},{"line_number":35,"context_line":"    else:"},{"line_number":36,"context_line":"        # NOTE(sean-k-mooney): currently pyroute2 has a file handle leak. An"},{"line_number":37,"context_line":"        # iptools driver has been added as a workaround but No config options"},{"line_number":38,"context_line":"        # are # exposed to the user. The iptools driver is considered"},{"line_number":39,"context_line":"        # deprecated and # will be removed when a new release of pyroute2 is"},{"line_number":40,"context_line":"        # available."},{"line_number":41,"context_line":"        driver \u003d \u0027IPTools\u0027"},{"line_number":42,"context_line":"        return importutils.import_object(impl_map[driver])"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_edfe0203","line":40,"range":{"start_line":36,"start_character":0,"end_line":40,"end_character":20},"in_reply_to":"3f79a3b5_9258c98a","updated":"2018-09-26 14:29:21.000000000","message":"Deleted in next patch","commit_id":"e8d102b500c7fbd5a0dfb8bd8dee82ff081a8678"}],"os_vif/internal/command/ip/linux/impl_pyroute2.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"54771cbf7b1afc7fcaac4421f2284f7c2633bdd0","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        \"\"\"Return True if the device exists.\"\"\""},{"line_number":98,"context_line":"        ip \u003d iproute.IPRoute()"},{"line_number":99,"context_line":"        idx \u003d ip.link_lookup(ifname\u003ddevice)"},{"line_number":100,"context_line":"        return True if idx else False"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_f2c6dd15","line":100,"range":{"start_line":100,"start_character":8,"end_line":100,"end_character":37},"updated":"2018-09-26 14:24:11.000000000","message":"nit: return bool(idx)","commit_id":"e8d102b500c7fbd5a0dfb8bd8dee82ff081a8678"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5c7701602c915d885c2d26192da08a17d1dcf096","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        \"\"\"Return True if the device exists.\"\"\""},{"line_number":98,"context_line":"        ip \u003d iproute.IPRoute()"},{"line_number":99,"context_line":"        idx \u003d ip.link_lookup(ifname\u003ddevice)"},{"line_number":100,"context_line":"        return True if idx else False"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_ad56ca04","line":100,"range":{"start_line":100,"start_character":8,"end_line":100,"end_character":37},"in_reply_to":"3f79a3b5_f2c6dd15","updated":"2018-09-26 14:29:21.000000000","message":"Yes.... sorry. If I send a new patch, I\u0027ll redo this.","commit_id":"e8d102b500c7fbd5a0dfb8bd8dee82ff081a8678"}],"os_vif/internal/command/ip/windows/impl_netifaces.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"54771cbf7b1afc7fcaac4421f2284f7c2633bdd0","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"def set(*args):"},{"line_number":37,"context_line":"    exception.NotImplementedForOS(function\u003d\u0027ip.set\u0027, os\u003d\u0027Windows\u0027)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def add(*args):"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_72d2cdd1","line":37,"range":{"start_line":37,"start_character":14,"end_line":37,"end_character":33},"updated":"2018-09-26 14:24:11.000000000","message":"Any reason we can\u0027t just raise NotImplementedError? I guess this offers more context but I wonder how necessary that is","commit_id":"e8d102b500c7fbd5a0dfb8bd8dee82ff081a8678"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0b00edb91121d361de6233d2603bc683b2e94bdf","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"def set(*args):"},{"line_number":37,"context_line":"    exception.NotImplementedForOS(function\u003d\u0027ip.set\u0027, os\u003d\u0027Windows\u0027)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def add(*args):"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_b2400934","line":37,"range":{"start_line":37,"start_character":14,"end_line":37,"end_character":33},"in_reply_to":"3f79a3b5_72d2cdd1","updated":"2018-10-01 10:28:31.000000000","message":"i had the same initall question however i think in this case its not worth a respin.","commit_id":"e8d102b500c7fbd5a0dfb8bd8dee82ff081a8678"}],"os_vif/tests/unit/common/linux/test_ip_lib.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b6d964efbaab6e2bd088cfc37fae450e8c9eb358","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        self.ip_device \u003d ip_lib.IPDevice(self.device_name)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def test_exists(self):"},{"line_number":28,"context_line":"        with mock.patch.object(ip_lib.IpLinkCommand, \u0027address\u0027,"},{"line_number":29,"context_line":"                new_callable\u003dmock.PropertyMock) as mock_address:"},{"line_number":30,"context_line":"            mock_address.return_value \u003d True"},{"line_number":31,"context_line":"            self.assertTrue(self.ip_device.exists())"},{"line_number":32,"context_line":"            mock_address.assert_called_once_with()"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f515b1d_ff0ff12a","line":29,"range":{"start_line":28,"start_character":8,"end_line":29,"end_character":64},"updated":"2017-10-02 22:38:38.000000000","message":"see https://github.com/openstack/os-vif/blob/master/releasenotes/notes/contextlib-and-nested-with-statements-2747a9ebb9a5bfd7.yaml the decoator syntax shoudl be used for all mocks.","commit_id":"557e93b7fdf60e2fc0d3184274ed7f43426d4f9c"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"bc05cdd2272abf9e24904edf5df3f680cafa17e6","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        self.ip_device \u003d ip_lib.IPDevice(self.device_name)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def test_exists(self):"},{"line_number":28,"context_line":"        with mock.patch.object(ip_lib.IpLinkCommand, \u0027address\u0027,"},{"line_number":29,"context_line":"                new_callable\u003dmock.PropertyMock) as mock_address:"},{"line_number":30,"context_line":"            mock_address.return_value \u003d True"},{"line_number":31,"context_line":"            self.assertTrue(self.ip_device.exists())"},{"line_number":32,"context_line":"            mock_address.assert_called_once_with()"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f515b1d_2b42e40f","line":29,"range":{"start_line":28,"start_character":8,"end_line":29,"end_character":64},"in_reply_to":"7f515b1d_ff0ff12a","updated":"2017-10-03 08:43:22.000000000","message":"Well, this is not a nested context. But I agree with using the decorator.","commit_id":"557e93b7fdf60e2fc0d3184274ed7f43426d4f9c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b6d964efbaab6e2bd088cfc37fae450e8c9eb358","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    def setUp(self):"},{"line_number":52,"context_line":"        super(TestIpLinkCommand, self).setUp()"},{"line_number":53,"context_line":"        self.device_name \u003d \u0027test_device\u0027"},{"line_number":54,"context_line":"        self.device_namespace \u003d \u0027test_namespace\u0027"},{"line_number":55,"context_line":"        self.ip_link \u003d ip_lib.IpLinkCommand(self.device_name,"},{"line_number":56,"context_line":"                                            namespace\u003dself.device_namespace)"},{"line_number":57,"context_line":"        self.dev \u003d ["}],"source_content_type":"text/x-python","patch_set":3,"id":"7f515b1d_7f2d4193","line":54,"range":{"start_line":54,"start_character":8,"end_line":54,"end_character":47},"updated":"2017-10-02 22:38:38.000000000","message":"this will fail if run on windows we need to make this condtional or override the os.name varible so that the linux driver is loaded.","commit_id":"557e93b7fdf60e2fc0d3184274ed7f43426d4f9c"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"bc05cdd2272abf9e24904edf5df3f680cafa17e6","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    def setUp(self):"},{"line_number":52,"context_line":"        super(TestIpLinkCommand, self).setUp()"},{"line_number":53,"context_line":"        self.device_name \u003d \u0027test_device\u0027"},{"line_number":54,"context_line":"        self.device_namespace \u003d \u0027test_namespace\u0027"},{"line_number":55,"context_line":"        self.ip_link \u003d ip_lib.IpLinkCommand(self.device_name,"},{"line_number":56,"context_line":"                                            namespace\u003dself.device_namespace)"},{"line_number":57,"context_line":"        self.dev \u003d ["}],"source_content_type":"text/x-python","patch_set":3,"id":"7f515b1d_cb00f0ad","line":54,"range":{"start_line":54,"start_character":8,"end_line":54,"end_character":47},"in_reply_to":"7f515b1d_7f2d4193","updated":"2017-10-03 08:43:22.000000000","message":"You are right.\n\nI\u0027ll make these test classes, under Linux and Win directories, dependant on the OS.","commit_id":"557e93b7fdf60e2fc0d3184274ed7f43426d4f9c"}],"os_vif/tests/unit/common/windows/test_ip_lib.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b6d964efbaab6e2bd088cfc37fae450e8c9eb358","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        self.ip_device \u003d ip_lib.IPDevice(self.device_name)"},{"line_number":26,"context_line":"        self.mock_log \u003d mock.patch.object(ip_lib, \"LOG\").start()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    @mock.patch.object(netifaces, \u0027ifaddresses\u0027, return_value\u003dTrue)"},{"line_number":29,"context_line":"    def test_exists(self, mock_ifaddresses):"},{"line_number":30,"context_line":"        self.assertTrue(self.ip_device.exists())"},{"line_number":31,"context_line":"        mock_ifaddresses.assert_called_once_with(self.device_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f515b1d_df1af56c","line":28,"range":{"start_line":28,"start_character":3,"end_line":28,"end_character":67},"updated":"2017-10-02 22:38:38.000000000","message":"much nicer :)","commit_id":"557e93b7fdf60e2fc0d3184274ed7f43426d4f9c"}],"os_vif/tests/unit/internal/command/ip/linux/test_impl_pyroute2.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"54771cbf7b1afc7fcaac4421f2284f7c2633bdd0","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from pyroute2.netlink.rtnl import ifinfmsg"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from os_vif import exception"},{"line_number":19,"context_line":"from os_vif.internal.command.ip.linux import impl_pyroute2"},{"line_number":20,"context_line":"from os_vif.tests.unit import base"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_32dc55e0","line":19,"range":{"start_line":19,"start_character":5,"end_line":19,"end_character":37},"updated":"2018-09-26 14:24:11.000000000","message":"These things are starting to get really long. We should probably move \u0027impl_pyroute2\u0027 up a level in a future change","commit_id":"e8d102b500c7fbd5a0dfb8bd8dee82ff081a8678"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5c7701602c915d885c2d26192da08a17d1dcf096","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from pyroute2.netlink.rtnl import ifinfmsg"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from os_vif import exception"},{"line_number":19,"context_line":"from os_vif.internal.command.ip.linux import impl_pyroute2"},{"line_number":20,"context_line":"from os_vif.tests.unit import base"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_4d3856d3","line":19,"range":{"start_line":19,"start_character":5,"end_line":19,"end_character":37},"in_reply_to":"3f79a3b5_32dc55e0","updated":"2018-09-26 14:29:21.000000000","message":"Well, we can keep linux and windows implementation in separate directories.","commit_id":"e8d102b500c7fbd5a0dfb8bd8dee82ff081a8678"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0b00edb91121d361de6233d2603bc683b2e94bdf","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from pyroute2.netlink.rtnl import ifinfmsg"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from os_vif import exception"},{"line_number":19,"context_line":"from os_vif.internal.command.ip.linux import impl_pyroute2"},{"line_number":20,"context_line":"from os_vif.tests.unit import base"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_129e9db6","line":19,"range":{"start_line":19,"start_character":5,"end_line":19,"end_character":37},"in_reply_to":"3f79a3b5_4d3856d3","updated":"2018-10-01 10:28:31.000000000","message":"i think this can be done in a later patch.\n\ni would make it \nos_vif.internal.linux.ip if we flatten the structure\nbe i would prefer not to make that change in this patch.","commit_id":"e8d102b500c7fbd5a0dfb8bd8dee82ff081a8678"}],"vif_plug_ovs/common/windows/ip_lib.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5ba5fe0a24b715319ca72adde657b1c62efbe4fc","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def __init__(self, name, namespace\u003dNone):"},{"line_number":26,"context_line":"        self._name \u003d name"},{"line_number":27,"context_line":"        #RAH: crear excepcion!!!!!!!!!!!!"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @property"},{"line_number":30,"context_line":"    def name(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_8afe5269","line":27,"range":{"start_line":27,"start_character":8,"end_line":27,"end_character":41},"updated":"2017-10-04 12:23:58.000000000","message":"so are you going to trow an exception or just log an error.","commit_id":"172d9cc26fb0d36120aeee28bd18114fbd87c184"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"88ec6f85cdcb0cc590f5917983194f8bbd97d57f","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def __init__(self, name, namespace\u003dNone):"},{"line_number":26,"context_line":"        self._name \u003d name"},{"line_number":27,"context_line":"        #RAH: crear excepcion!!!!!!!!!!!!"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @property"},{"line_number":30,"context_line":"    def name(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_e08cc580","line":27,"range":{"start_line":27,"start_character":8,"end_line":27,"end_character":41},"in_reply_to":"7f515b1d_8afe5269","updated":"2017-10-04 13:48:55.000000000","message":"Pfffff even with my own remainders I miss things....","commit_id":"172d9cc26fb0d36120aeee28bd18114fbd87c184"}],"vif_plug_ovs/ovs.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"54771cbf7b1afc7fcaac4421f2284f7c2633bdd0","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        linux_net.ensure_bridge(vif.bridge_name)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        mtu \u003d self._get_mtu(vif)"},{"line_number":176,"context_line":"        if not ip_lib.exists(v2_name):"},{"line_number":177,"context_line":"            linux_net.create_veth_pair(v1_name, v2_name, mtu)"},{"line_number":178,"context_line":"            linux_net.add_bridge_port(vif.bridge_name, v1_name)"},{"line_number":179,"context_line":"            linux_net.ensure_ovs_bridge(vif.network.bridge,"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_72fbad47","line":176,"range":{"start_line":176,"start_character":0,"end_line":176,"end_character":38},"updated":"2018-09-26 14:24:11.000000000","message":"I was going to note in the previous files that it seemed weird that we were using a newly multiplatform API for the linuxbridge plugin, but this is where the real meat of the change is, obviously","commit_id":"e8d102b500c7fbd5a0dfb8bd8dee82ff081a8678"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0b00edb91121d361de6233d2603bc683b2e94bdf","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        linux_net.ensure_bridge(vif.bridge_name)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        mtu \u003d self._get_mtu(vif)"},{"line_number":176,"context_line":"        if not ip_lib.exists(v2_name):"},{"line_number":177,"context_line":"            linux_net.create_veth_pair(v1_name, v2_name, mtu)"},{"line_number":178,"context_line":"            linux_net.add_bridge_port(vif.bridge_name, v1_name)"},{"line_number":179,"context_line":"            linux_net.ensure_ovs_bridge(vif.network.bridge,"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_d2d90584","line":176,"range":{"start_line":176,"start_character":0,"end_line":176,"end_character":38},"in_reply_to":"3f79a3b5_72fbad47","updated":"2018-10-01 10:28:31.000000000","message":"ya this change is really setting the ground work the next where we renable pyroute2.\n\nthe linux bridge change are needed for consitency and so we get rid of the old device exists function but this is really for ovs and linux bridge got an upgrade for free.","commit_id":"e8d102b500c7fbd5a0dfb8bd8dee82ff081a8678"}],"vif_plug_ovs/tests/unit/common/linux/test_ip_lib.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5ba5fe0a24b715319ca72adde657b1c62efbe4fc","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from vif_plug_ovs.common.linux import ip_lib"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"@testtools.skipIf(os.name \u003d\u003d \u0027nt\u0027, \u0027OS must be Linux to execute these tests.\u0027)"},{"line_number":24,"context_line":"class TestIPDevice(base.TestCase):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_8a81b2c6","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":78},"updated":"2017-10-04 12:23:58.000000000","message":"this will only run the linux test on linux and windows tests on windows.  the code under test iteslf is not os dependent to run because you will be mocking the call pyroute2 and netifaces.\n\ncan you mock the retrunvalue of os.name instead and run the test twice once of windows and once for linux instead","commit_id":"172d9cc26fb0d36120aeee28bd18114fbd87c184"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"88ec6f85cdcb0cc590f5917983194f8bbd97d57f","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from vif_plug_ovs.common.linux import ip_lib"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"@testtools.skipIf(os.name \u003d\u003d \u0027nt\u0027, \u0027OS must be Linux to execute these tests.\u0027)"},{"line_number":24,"context_line":"class TestIPDevice(base.TestCase):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_40f719d6","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":78},"in_reply_to":"7f515b1d_8a81b2c6","updated":"2017-10-04 13:48:55.000000000","message":"You are right.\n\nI don\u0027t need to mock the os name because I\u0027m importing directly the Linux ip_lib implementation (the same in Windows).","commit_id":"172d9cc26fb0d36120aeee28bd18114fbd87c184"}],"vif_plug_ovs/tests/unit/test_plugin.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f5ce778e9d5c89bf3937efb1f8e39b6b1c27815c","unresolved":false,"context_lines":[{"line_number":151,"context_line":"    @mock.patch.object(linux_net, \u0027add_bridge_port\u0027)"},{"line_number":152,"context_line":"    @mock.patch.object(linux_net, \u0027update_veth_pair\u0027)"},{"line_number":153,"context_line":"    @mock.patch.object(linux_net, \u0027create_veth_pair\u0027)"},{"line_number":154,"context_line":"    @mock.patch.object(ip_lib.IPDevice, \"exists\")"},{"line_number":155,"context_line":"    @mock.patch.object(linux_net, \u0027ensure_bridge\u0027)"},{"line_number":156,"context_line":"    @mock.patch.object(ovs, \u0027sys\u0027)"},{"line_number":157,"context_line":"    def test_plug_ovs_bridge(self, mock_sys, ensure_bridge, device_exists,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f287b81_a94b3185","line":154,"range":{"start_line":154,"start_character":40,"end_line":154,"end_character":41},"updated":"2017-09-04 14:22:11.000000000","message":"s/\u0027/\"\n\nThis annoys me more than it should. I know this.","commit_id":"4ee8da5b00373ed701193494e68894377b90d2d2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a27cfc5cdfab84512029711a472bf1a60683cd84","unresolved":false,"context_lines":[{"line_number":151,"context_line":"    @mock.patch.object(linux_net, \u0027add_bridge_port\u0027)"},{"line_number":152,"context_line":"    @mock.patch.object(linux_net, \u0027update_veth_pair\u0027)"},{"line_number":153,"context_line":"    @mock.patch.object(linux_net, \u0027create_veth_pair\u0027)"},{"line_number":154,"context_line":"    @mock.patch.object(ip_lib.IPDevice, \"exists\")"},{"line_number":155,"context_line":"    @mock.patch.object(linux_net, \u0027ensure_bridge\u0027)"},{"line_number":156,"context_line":"    @mock.patch.object(ovs, \u0027sys\u0027)"},{"line_number":157,"context_line":"    def test_plug_ovs_bridge(self, mock_sys, ensure_bridge, device_exists,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f287b81_14a7ee0d","line":154,"range":{"start_line":154,"start_character":40,"end_line":154,"end_character":41},"in_reply_to":"7f287b81_a94b3185","updated":"2017-09-05 08:39:33.000000000","message":"Me too","commit_id":"4ee8da5b00373ed701193494e68894377b90d2d2"}]}
