)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"da9f7c8a87904e2df44148f401efa7184f270a06","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"971fc3ed_6156ea9c","updated":"2025-04-08 17:17:10.000000000","message":"This review feedback is from a review jam at the PTG and is a summarization of feedback from Julia, Jay and others.\n\nWe understand this is a WIP and appreciate the effort. We\u0027re interested to see where it goes!","commit_id":"aa5ccc0a0b7484453f47ff0dd7b73ec952fe3588"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"717fa7b997c5efc78c480dfcb225f66dc954a822","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"d16b5f83_f36ba7d3","updated":"2025-04-15 08:58:25.000000000","message":"thanks for this, please also add the device to the docs supported section","commit_id":"aa5ccc0a0b7484453f47ff0dd7b73ec952fe3588"}],"networking_generic_switch/devices/restapi_devices/__init__.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"da9f7c8a87904e2df44148f401efa7184f270a06","unresolved":true,"context_lines":[{"line_number":1,"context_line":"from oslo_config import cfg"},{"line_number":2,"context_line":"from oslo_log import log as logging"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"from networking_generic_switch import devices"}],"source_content_type":"text/x-python","patch_set":1,"id":"82106cd0_1376bc21","line":1,"in_reply_to":"eb1784bd_4cfcc5e5","updated":"2025-04-08 17:17:10.000000000","message":"\u003e pep8: H102: Apache 2.0 license header not found\n\nPlease fix.","commit_id":"aa5ccc0a0b7484453f47ff0dd7b73ec952fe3588"}],"networking_generic_switch/devices/restapi_devices/cumulus.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"da9f7c8a87904e2df44148f401efa7184f270a06","unresolved":true,"context_lines":[{"line_number":1,"context_line":"import requests"},{"line_number":2,"context_line":"from oslo_config import cfg"},{"line_number":3,"context_line":"from oslo_log import log as logging"},{"line_number":4,"context_line":"from requests.auth import HTTPBasicAuth"}],"source_content_type":"text/x-python","patch_set":1,"id":"2288daca_c7300418","line":1,"in_reply_to":"e53767b9_240efe23","updated":"2025-04-08 17:17:10.000000000","message":"\u003e pep8: H102: Apache 2.0 license header not found\n\nPlease fix.","commit_id":"aa5ccc0a0b7484453f47ff0dd7b73ec952fe3588"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"da9f7c8a87904e2df44148f401efa7184f270a06","unresolved":true,"context_lines":[{"line_number":1,"context_line":"import requests"},{"line_number":2,"context_line":"from oslo_config import cfg"},{"line_number":3,"context_line":"from oslo_log import log as logging"},{"line_number":4,"context_line":"from requests.auth import HTTPBasicAuth"},{"line_number":5,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"a8cc09b7_a2513abb","line":2,"in_reply_to":"a18de81d_8e8d7f9b","updated":"2025-04-08 17:17:10.000000000","message":"\u003e pep8: H306: imports not in alphabetical order (requests, oslo_config.cfg)\n\nPlease fix.","commit_id":"aa5ccc0a0b7484453f47ff0dd7b73ec952fe3588"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"da9f7c8a87904e2df44148f401efa7184f270a06","unresolved":true,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def __init__(self, device_cfg, *args, **kwargs):"},{"line_number":25,"context_line":"        super(CumulusNVUE, self).__init__(device_cfg, *args, **kwargs)"},{"line_number":26,"context_line":"        # TODO get endpoint and auth from config instead of hardcoding..."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        self.nvue_end_point \u003d \"foo\""},{"line_number":29,"context_line":"        self.auth \u003d HTTPBasicAuth("}],"source_content_type":"text/x-python","patch_set":1,"id":"ee891c8a_210d9447","line":26,"in_reply_to":"1b6234f9_65ac552c","updated":"2025-04-08 17:17:10.000000000","message":"\u003e pep8: H101: Use TODO(NAME)\n\nPlease fix.","commit_id":"aa5ccc0a0b7484453f47ff0dd7b73ec952fe3588"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"da9f7c8a87904e2df44148f401efa7184f270a06","unresolved":true,"context_lines":[{"line_number":26,"context_line":"        # TODO get endpoint and auth from config instead of hardcoding..."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        self.nvue_end_point \u003d \"foo\""},{"line_number":29,"context_line":"        self.auth \u003d HTTPBasicAuth("},{"line_number":30,"context_line":"            username\u003d\"bar\","},{"line_number":31,"context_line":"            password\u003d\"baz\","},{"line_number":32,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":1,"id":"1913f8b9_88012458","line":29,"updated":"2025-04-08 17:17:10.000000000","message":"Can this be digest instead of just basic auth? Also will need to model configuration for these parameters as input.\n\nWhat\u0027s the full menu of authentication algorithms allowed here?","commit_id":"aa5ccc0a0b7484453f47ff0dd7b73ec952fe3588"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"da9f7c8a87904e2df44148f401efa7184f270a06","unresolved":true,"context_lines":[{"line_number":32,"context_line":"        )"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def _create_revision(self):"},{"line_number":35,"context_line":"        r \u003d requests.post("},{"line_number":36,"context_line":"            url\u003dself.nvue_end_point + \"/revision\","},{"line_number":37,"context_line":"            auth\u003dself.auth,"},{"line_number":38,"context_line":"            verify\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":1,"id":"aa99b7c3_cc83e239","line":35,"updated":"2025-04-08 17:17:10.000000000","message":"throughout: please ensure requests have timeouts set. It may be easier to do this via using a requests session instead?\n\nAlso consider error handling (e.g. r.raise_for_status w/a try/except with a good error)","commit_id":"aa5ccc0a0b7484453f47ff0dd7b73ec952fe3588"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"da9f7c8a87904e2df44148f401efa7184f270a06","unresolved":true,"context_lines":[{"line_number":66,"context_line":"        return r"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def _wait_for_applied(self, revision):"},{"line_number":69,"context_line":"        # TODO ....."},{"line_number":70,"context_line":"        pass"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def send_commands_to_device(self, path, payload):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ca801a91_43429a5f","line":69,"in_reply_to":"634fcc0f_d917ace4","updated":"2025-04-08 17:17:10.000000000","message":"\u003e pep8: H101: Use TODO(NAME)\n\nPlease fix.","commit_id":"aa5ccc0a0b7484453f47ff0dd7b73ec952fe3588"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"da9f7c8a87904e2df44148f401efa7184f270a06","unresolved":true,"context_lines":[{"line_number":70,"context_line":"        pass"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def send_commands_to_device(self, path, payload):"},{"line_number":73,"context_line":"        # TODO: verify response, add loggging"},{"line_number":74,"context_line":"        revision \u003d self._create_revision()"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        # TODO: verify response, add loggging"}],"source_content_type":"text/x-python","patch_set":1,"id":"1cea3366_eae54b5a","line":73,"in_reply_to":"dcd2a1a3_4b06b449","updated":"2025-04-08 17:17:10.000000000","message":"\u003e pep8: H101: Use TODO(NAME)\n\nPlease fix.","commit_id":"aa5ccc0a0b7484453f47ff0dd7b73ec952fe3588"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"da9f7c8a87904e2df44148f401efa7184f270a06","unresolved":true,"context_lines":[{"line_number":73,"context_line":"        # TODO: verify response, add loggging"},{"line_number":74,"context_line":"        revision \u003d self._create_revision()"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        # TODO: verify response, add loggging"},{"line_number":77,"context_line":"        patched \u003d self._submit_patch(revision, path, payload)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        # TODO: verify response, add loggging"}],"source_content_type":"text/x-python","patch_set":1,"id":"8cff7b14_04a6bf8b","line":76,"in_reply_to":"149ed2b0_22aa36b6","updated":"2025-04-08 17:17:10.000000000","message":"\u003e pep8: H101: Use TODO(NAME)\n\nPlease fix.","commit_id":"aa5ccc0a0b7484453f47ff0dd7b73ec952fe3588"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"da9f7c8a87904e2df44148f401efa7184f270a06","unresolved":true,"context_lines":[{"line_number":74,"context_line":"        revision \u003d self._create_revision()"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        # TODO: verify response, add loggging"},{"line_number":77,"context_line":"        patched \u003d self._submit_patch(revision, path, payload)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        # TODO: verify response, add loggging"},{"line_number":80,"context_line":"        applied \u003d self._apply_patch(revision)"}],"source_content_type":"text/x-python","patch_set":1,"id":"8848c6a9_fbfa9dbb","line":77,"in_reply_to":"513d2733_dd2f5e6a","updated":"2025-04-08 17:17:10.000000000","message":"\u003e pep8: F841 local variable \u0027patched\u0027 is assigned to but never used\n\nPlease fix.","commit_id":"aa5ccc0a0b7484453f47ff0dd7b73ec952fe3588"}],"networking_generic_switch/tests/unit/restapi/test_cumulus_switch.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"da9f7c8a87904e2df44148f401efa7184f270a06","unresolved":true,"context_lines":[{"line_number":1,"context_line":"from unittest import mock"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"from networking_generic_switch import exceptions as exc"},{"line_number":4,"context_line":"from networking_generic_switch.devices.restapi_devices import cumulus"}],"source_content_type":"text/x-python","patch_set":1,"id":"d26c8984_d4e44346","line":1,"in_reply_to":"6967ec5a_188f6d89","updated":"2025-04-08 17:17:10.000000000","message":"\u003e pep8: H102: Apache 2.0 license header not found\n\nPlease fix.","commit_id":"aa5ccc0a0b7484453f47ff0dd7b73ec952fe3588"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"da9f7c8a87904e2df44148f401efa7184f270a06","unresolved":true,"context_lines":[{"line_number":1,"context_line":"from unittest import mock"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"from networking_generic_switch import exceptions as exc"},{"line_number":4,"context_line":"from networking_generic_switch.devices.restapi_devices import cumulus"}],"source_content_type":"text/x-python","patch_set":1,"id":"8ac60ded_ebd55b4c","line":1,"in_reply_to":"8c4356ed_ccc79519","updated":"2025-04-08 17:17:10.000000000","message":"\u003e pep8: F401 \u0027unittest.mock\u0027 imported but unused\n\nPlease fix.","commit_id":"aa5ccc0a0b7484453f47ff0dd7b73ec952fe3588"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"da9f7c8a87904e2df44148f401efa7184f270a06","unresolved":true,"context_lines":[{"line_number":14,"context_line":"        return cumulus.CumulusNVUE(device_cfg)"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"    def test_add_network(self):"},{"line_number":17,"context_line":"        self.switch.add_network(22, \"0ae071f5-5be9-43e4-80ea-e41fefe85b21\")"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    def test_add_network_with_no_manage_vlans(self):"},{"line_number":20,"context_line":"        switch \u003d self._make_switch_device({\"ngs_manage_vlans\": False})"}],"source_content_type":"text/x-python","patch_set":1,"id":"1603ad3f_c4b23675","line":17,"updated":"2025-04-08 17:17:10.000000000","message":"we should probably assert something to ensure we made the call? Throughout this test file.","commit_id":"aa5ccc0a0b7484453f47ff0dd7b73ec952fe3588"}],"networking_generic_switch/tests/unit/restapi/test_restapi_base.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"da9f7c8a87904e2df44148f401efa7184f270a06","unresolved":true,"context_lines":[{"line_number":1,"context_line":"from unittest import mock"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"import fixtures"},{"line_number":4,"context_line":"from oslo_config import fixture as config_fixture"}],"source_content_type":"text/x-python","patch_set":1,"id":"53d35347_7ef9aebe","line":1,"in_reply_to":"7faf1a90_5befa5b4","updated":"2025-04-08 17:17:10.000000000","message":"\u003e pep8: H102: Apache 2.0 license header not found\n\nPlease fix.","commit_id":"aa5ccc0a0b7484453f47ff0dd7b73ec952fe3588"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"da9f7c8a87904e2df44148f401efa7184f270a06","unresolved":true,"context_lines":[{"line_number":1,"context_line":"from unittest import mock"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"import fixtures"},{"line_number":4,"context_line":"from oslo_config import fixture as config_fixture"}],"source_content_type":"text/x-python","patch_set":1,"id":"a9036b03_541a3646","line":1,"in_reply_to":"a9ed0999_4dc89653","updated":"2025-04-08 17:17:10.000000000","message":"\u003e pep8: F401 \u0027unittest.mock\u0027 imported but unused\n\nPlease fix.","commit_id":"aa5ccc0a0b7484453f47ff0dd7b73ec952fe3588"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"da9f7c8a87904e2df44148f401efa7184f270a06","unresolved":true,"context_lines":[{"line_number":23,"context_line":"    def test_add_network(self):"},{"line_number":24,"context_line":"        self.switch.add_network(22, \"0ae071f5-5be9-43e4-80ea-e41fefe85b21\")"},{"line_number":25,"context_line":"        # m_sctd.assert_called_with([])"},{"line_number":26,"context_line":"        # m_check.assert_called_once_with(\u0027fake output\u0027, \u0027add network\u0027)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def test_add_network_with_no_manage_vlans(self):"},{"line_number":29,"context_line":"        switch \u003d self._make_switch_device({\"ngs_manage_vlans\": False})"}],"source_content_type":"text/x-python","patch_set":1,"id":"9565de1a_e895800f","line":26,"updated":"2025-04-08 17:17:10.000000000","message":"++","commit_id":"aa5ccc0a0b7484453f47ff0dd7b73ec952fe3588"}]}
