)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1da9dfde10364893a3c9990b9117f4da279ddea0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"05b8f716_347271dd","updated":"2026-06-08 13:39:41.000000000","message":"Thanks!","commit_id":"d50d2b79b95603911dcd45d387536b69748ab028"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"62f03727694135fd598f7974a1cb203de96eba80","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"3072d64f_6b1d7294","updated":"2026-06-09 13:45:14.000000000","message":"recheck","commit_id":"d50d2b79b95603911dcd45d387536b69748ab028"}],"networking_generic_switch/devices/__init__.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6968dc38ebd97855fa287408266d16dab84ab5a0","unresolved":true,"context_lines":[{"line_number":257,"context_line":"        return is_port_id_allowed and is_vlan_allowed"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    @abc.abstractmethod"},{"line_number":260,"context_line":"    def add_network(self, segmentation_id, network_id, physnet_vlans\u003dNone):"},{"line_number":261,"context_line":"        pass"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"b6a83f51_fc5b1a01","line":260,"updated":"2026-06-08 12:15:27.000000000","message":"nit: now it really needs a docstring","commit_id":"1c311303eaf3ac9ee5fd5c35c1b1a54925edb465"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"80bb13f8d9880fc94270e21f982b6599820c077b","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        return is_port_id_allowed and is_vlan_allowed"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    @abc.abstractmethod"},{"line_number":260,"context_line":"    def add_network(self, segmentation_id, network_id, physnet_vlans\u003dNone):"},{"line_number":261,"context_line":"        pass"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"5854e12f_336d0d2f","line":260,"in_reply_to":"b6a83f51_fc5b1a01","updated":"2026-06-08 13:54:34.000000000","message":"Done","commit_id":"1c311303eaf3ac9ee5fd5c35c1b1a54925edb465"}],"networking_generic_switch/devices/netmiko_devices/__init__.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6968dc38ebd97855fa287408266d16dab84ab5a0","unresolved":true,"context_lines":[{"line_number":432,"context_line":"        return output"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"    @check_output(\u0027add network\u0027)"},{"line_number":435,"context_line":"    def add_network(self, segmentation_id, network_id, physnet_vlans\u003dNone):"},{"line_number":436,"context_line":"        if not self._do_vlan_management():"},{"line_number":437,"context_line":"            LOG.info(f\"Skipping add network for {segmentation_id}\")"},{"line_number":438,"context_line":"            return \"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"c41e96e8_810e08c8","line":435,"updated":"2026-06-08 12:15:27.000000000","message":"nit: raise an error if physnet_vlans is passed here?","commit_id":"1c311303eaf3ac9ee5fd5c35c1b1a54925edb465"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"80bb13f8d9880fc94270e21f982b6599820c077b","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        return output"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"    @check_output(\u0027add network\u0027)"},{"line_number":435,"context_line":"    def add_network(self, segmentation_id, network_id, physnet_vlans\u003dNone):"},{"line_number":436,"context_line":"        if not self._do_vlan_management():"},{"line_number":437,"context_line":"            LOG.info(f\"Skipping add network for {segmentation_id}\")"},{"line_number":438,"context_line":"            return \"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"4f75baaf_87658e48","line":435,"in_reply_to":"c41e96e8_810e08c8","updated":"2026-06-08 13:54:34.000000000","message":"Done, I was thinking we may want to add support to converge for netmiko drivers as well. But makes sense to raise this here until that is added.","commit_id":"1c311303eaf3ac9ee5fd5c35c1b1a54925edb465"}],"networking_generic_switch/generic_switch_mech.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6968dc38ebd97855fa287408266d16dab84ab5a0","unresolved":true,"context_lines":[{"line_number":98,"context_line":"        physnet_vlans_cache \u003d {}"},{"line_number":99,"context_line":"        for switch_name, switch in self._get_devices_by_physnet(physnet):"},{"line_number":100,"context_line":"            physnet_vlans \u003d None"},{"line_number":101,"context_line":"            if (switch.trunk_vlans_converge and switch._get_trunk_ports()):"},{"line_number":102,"context_line":"                switch_physnets \u003d frozenset(switch._get_physical_networks())"},{"line_number":103,"context_line":"                if switch_physnets not in physnet_vlans_cache:"},{"line_number":104,"context_line":"                    physnet_vlans_cache[switch_physnets] \u003d ("}],"source_content_type":"text/x-python","patch_set":1,"id":"1c92e21b_1ebd2a8b","line":101,"updated":"2026-06-08 12:15:27.000000000","message":"nit: redundant brackets","commit_id":"1c311303eaf3ac9ee5fd5c35c1b1a54925edb465"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"80bb13f8d9880fc94270e21f982b6599820c077b","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        physnet_vlans_cache \u003d {}"},{"line_number":99,"context_line":"        for switch_name, switch in self._get_devices_by_physnet(physnet):"},{"line_number":100,"context_line":"            physnet_vlans \u003d None"},{"line_number":101,"context_line":"            if (switch.trunk_vlans_converge and switch._get_trunk_ports()):"},{"line_number":102,"context_line":"                switch_physnets \u003d frozenset(switch._get_physical_networks())"},{"line_number":103,"context_line":"                if switch_physnets not in physnet_vlans_cache:"},{"line_number":104,"context_line":"                    physnet_vlans_cache[switch_physnets] \u003d ("}],"source_content_type":"text/x-python","patch_set":1,"id":"4a1a5e0f_2d0ae2a3","line":101,"in_reply_to":"1c92e21b_1ebd2a8b","updated":"2026-06-08 13:54:34.000000000","message":"Done","commit_id":"1c311303eaf3ac9ee5fd5c35c1b1a54925edb465"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6968dc38ebd97855fa287408266d16dab84ab5a0","unresolved":true,"context_lines":[{"line_number":99,"context_line":"        for switch_name, switch in self._get_devices_by_physnet(physnet):"},{"line_number":100,"context_line":"            physnet_vlans \u003d None"},{"line_number":101,"context_line":"            if (switch.trunk_vlans_converge and switch._get_trunk_ports()):"},{"line_number":102,"context_line":"                switch_physnets \u003d frozenset(switch._get_physical_networks())"},{"line_number":103,"context_line":"                if switch_physnets not in physnet_vlans_cache:"},{"line_number":104,"context_line":"                    physnet_vlans_cache[switch_physnets] \u003d ("},{"line_number":105,"context_line":"                        self._get_physnet_vlans(context._plugin_context,"}],"source_content_type":"text/x-python","patch_set":1,"id":"fe6a797d_ce52b8ba","line":102,"updated":"2026-06-08 12:15:27.000000000","message":"nit: let\u0027s avoid calling private methods of `switch` (maybe rename to public)","commit_id":"1c311303eaf3ac9ee5fd5c35c1b1a54925edb465"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"80bb13f8d9880fc94270e21f982b6599820c077b","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        for switch_name, switch in self._get_devices_by_physnet(physnet):"},{"line_number":100,"context_line":"            physnet_vlans \u003d None"},{"line_number":101,"context_line":"            if (switch.trunk_vlans_converge and switch._get_trunk_ports()):"},{"line_number":102,"context_line":"                switch_physnets \u003d frozenset(switch._get_physical_networks())"},{"line_number":103,"context_line":"                if switch_physnets not in physnet_vlans_cache:"},{"line_number":104,"context_line":"                    physnet_vlans_cache[switch_physnets] \u003d ("},{"line_number":105,"context_line":"                        self._get_physnet_vlans(context._plugin_context,"}],"source_content_type":"text/x-python","patch_set":1,"id":"580d9b6b_84bd8ede","line":102,"in_reply_to":"fe6a797d_ce52b8ba","updated":"2026-06-08 13:54:34.000000000","message":"Done","commit_id":"1c311303eaf3ac9ee5fd5c35c1b1a54925edb465"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6968dc38ebd97855fa287408266d16dab84ab5a0","unresolved":true,"context_lines":[{"line_number":199,"context_line":"        physnet_vlans_cache \u003d {}"},{"line_number":200,"context_line":"        for switch_name, switch in self._get_devices_by_physnet(physnet):"},{"line_number":201,"context_line":"            physnet_vlans \u003d None"},{"line_number":202,"context_line":"            if (switch.trunk_vlans_converge and switch._get_trunk_ports()):"},{"line_number":203,"context_line":"                switch_physnets \u003d frozenset(switch._get_physical_networks())"},{"line_number":204,"context_line":"                if switch_physnets not in physnet_vlans_cache:"},{"line_number":205,"context_line":"                    physnet_vlans_cache[switch_physnets] \u003d ("}],"source_content_type":"text/x-python","patch_set":1,"id":"a7debfd4_3d440f9e","line":202,"updated":"2026-06-08 12:15:27.000000000","message":"same comments here","commit_id":"1c311303eaf3ac9ee5fd5c35c1b1a54925edb465"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"80bb13f8d9880fc94270e21f982b6599820c077b","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        physnet_vlans_cache \u003d {}"},{"line_number":200,"context_line":"        for switch_name, switch in self._get_devices_by_physnet(physnet):"},{"line_number":201,"context_line":"            physnet_vlans \u003d None"},{"line_number":202,"context_line":"            if (switch.trunk_vlans_converge and switch._get_trunk_ports()):"},{"line_number":203,"context_line":"                switch_physnets \u003d frozenset(switch._get_physical_networks())"},{"line_number":204,"context_line":"                if switch_physnets not in physnet_vlans_cache:"},{"line_number":205,"context_line":"                    physnet_vlans_cache[switch_physnets] \u003d ("}],"source_content_type":"text/x-python","patch_set":1,"id":"8232becb_f2686ec7","line":202,"in_reply_to":"a7debfd4_3d440f9e","updated":"2026-06-08 13:54:34.000000000","message":"Done","commit_id":"1c311303eaf3ac9ee5fd5c35c1b1a54925edb465"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6968dc38ebd97855fa287408266d16dab84ab5a0","unresolved":true,"context_lines":[{"line_number":222,"context_line":"                         \u0027%(device)s\u0027, {\u0027net_id\u0027: network[\u0027id\u0027],"},{"line_number":223,"context_line":"                                        \u0027device\u0027: switch_name})"},{"line_number":224,"context_line":"        if exc_info:"},{"line_number":225,"context_line":"            raise exc_info[1]"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def create_subnet_precommit(self, context):"},{"line_number":228,"context_line":"        \"\"\"Allocate resources for a new subnet."}],"source_content_type":"text/x-python","patch_set":1,"id":"559fc046_17095347","line":225,"updated":"2026-06-08 12:15:27.000000000","message":"side note: this is pretty bad","commit_id":"1c311303eaf3ac9ee5fd5c35c1b1a54925edb465"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6968dc38ebd97855fa287408266d16dab84ab5a0","unresolved":true,"context_lines":[{"line_number":1150,"context_line":"            for all physnets (no-physnet-configured case)."},{"line_number":1151,"context_line":"        :returns: Set of segmentation IDs."},{"line_number":1152,"context_line":"        \"\"\""},{"line_number":1153,"context_line":"        kwargs \u003d dict(network_type\u003d\u0027vlan\u0027)"},{"line_number":1154,"context_line":"        if physnets:"},{"line_number":1155,"context_line":"            kwargs[\u0027physical_network\u0027] \u003d physnets"},{"line_number":1156,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"34514d67_194be77e","line":1153,"updated":"2026-06-08 12:15:27.000000000","message":"nit: pass network_type as a normal argument to get_objects","commit_id":"1c311303eaf3ac9ee5fd5c35c1b1a54925edb465"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"80bb13f8d9880fc94270e21f982b6599820c077b","unresolved":false,"context_lines":[{"line_number":1150,"context_line":"            for all physnets (no-physnet-configured case)."},{"line_number":1151,"context_line":"        :returns: Set of segmentation IDs."},{"line_number":1152,"context_line":"        \"\"\""},{"line_number":1153,"context_line":"        kwargs \u003d dict(network_type\u003d\u0027vlan\u0027)"},{"line_number":1154,"context_line":"        if physnets:"},{"line_number":1155,"context_line":"            kwargs[\u0027physical_network\u0027] \u003d physnets"},{"line_number":1156,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7ca5249c_44ec3bac","line":1153,"in_reply_to":"34514d67_194be77e","updated":"2026-06-08 13:54:34.000000000","message":"Done","commit_id":"1c311303eaf3ac9ee5fd5c35c1b1a54925edb465"}]}
