)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"81071fe12517581633ac3b3213186aee625c2102","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"ea1f17b5_d9ef4471","updated":"2022-12-16 10:28:12.000000000","message":"recheck neutron-ovs-grenade-dvr-multinode","commit_id":"df438094198d52c51066c7eaaed023aea27c76ee"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5d125fcb66490cb8d33f1a69d0d1ff0976758b7f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"d3de31c4_316b10ca","updated":"2022-12-20 15:01:13.000000000","message":"recheck reverted n-t-p patch","commit_id":"df438094198d52c51066c7eaaed023aea27c76ee"}],"neutron/agent/linux/ip_lib.py":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"bdf08a38630865206571518a6962fccde04ee78d","unresolved":true,"context_lines":[{"line_number":1369,"context_line":"    privileged.delete_ip_rule(namespace, **cmd_args)"},{"line_number":1370,"context_line":""},{"line_number":1371,"context_line":""},{"line_number":1372,"context_line":"def get_attr(pyroute2_obj, attr_name):"},{"line_number":1373,"context_line":"    \"\"\"Get an attribute from a PyRoute2 object\"\"\""},{"line_number":1374,"context_line":"    rule_attrs \u003d pyroute2_obj.get(\u0027attrs\u0027, [])"},{"line_number":1375,"context_line":"    for attr in (attr for attr in rule_attrs if attr[0] \u003d\u003d attr_name):"},{"line_number":1376,"context_line":"        return attr[1]"},{"line_number":1377,"context_line":""},{"line_number":1378,"context_line":""},{"line_number":1379,"context_line":"def _parse_ip_address(pyroute2_address, device_name):"}],"source_content_type":"text/x-python","patch_set":7,"id":"95ca08a0_a3d78bcf","side":"PARENT","line":1376,"range":{"start_line":1372,"start_character":0,"end_line":1376,"end_character":22},"updated":"2023-01-04 15:57:59.000000000","message":"yeah better to have this helper method in utils","commit_id":"7cc176dcaf2279f5b83509924d08d28e6aa678b7"}],"neutron/agent/linux/tc_lib.py":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"bdf08a38630865206571518a6962fccde04ee78d","unresolved":true,"context_lines":[{"line_number":111,"context_line":"    return utils.bits_to_kilobits(bits_value, base)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"def _get_attr(pyroute2_obj, attr_name):"},{"line_number":115,"context_line":"    \"\"\"Get an attribute in a pyroute object"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    pyroute2 object attributes are stored under a key called \u0027attrs\u0027. This key"}],"source_content_type":"text/x-python","patch_set":7,"id":"4fa69e13_8be2e0ab","side":"PARENT","line":114,"range":{"start_line":114,"start_character":4,"end_line":114,"end_character":13},"updated":"2023-01-04 15:57:59.000000000","message":"it is even better as it was duplicated 😊","commit_id":"7cc176dcaf2279f5b83509924d08d28e6aa678b7"}],"neutron/privileged/agent/linux/ip_lib.py":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"bdf08a38630865206571518a6962fccde04ee78d","unresolved":true,"context_lines":[{"line_number":607,"context_line":"    \"\"\""},{"line_number":608,"context_line":"    return netns.listnetns(**kwargs)"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":""},{"line_number":611,"context_line":"def make_serializable(value):"},{"line_number":612,"context_line":"    \"\"\"Make a pyroute2 object serializable"},{"line_number":613,"context_line":""},{"line_number":614,"context_line":"    This function converts \u0027netlink.nla_slot\u0027 object (key, value) in a list"},{"line_number":615,"context_line":"    of two elements."},{"line_number":616,"context_line":"    \"\"\""},{"line_number":617,"context_line":"    def _ensure_string(value):"},{"line_number":618,"context_line":"        return value.decode() if isinstance(value, bytes) else value"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"    if isinstance(value, list):"},{"line_number":621,"context_line":"        return [make_serializable(item) for item in value]"},{"line_number":622,"context_line":"    elif isinstance(value, netlink.nla_slot):"},{"line_number":623,"context_line":"        return [_ensure_string(value[0]), make_serializable(value[1])]"},{"line_number":624,"context_line":"    elif isinstance(value, netlink.nla_base):"},{"line_number":625,"context_line":"        return make_serializable(value.dump())"},{"line_number":626,"context_line":"    elif isinstance(value, dict):"},{"line_number":627,"context_line":"        return {_ensure_string(key): make_serializable(data)"},{"line_number":628,"context_line":"                for key, data in value.items()}"},{"line_number":629,"context_line":"    elif isinstance(value, tuple):"},{"line_number":630,"context_line":"        return tuple(make_serializable(item) for item in value)"},{"line_number":631,"context_line":"    return _ensure_string(value)"},{"line_number":632,"context_line":""},{"line_number":633,"context_line":""},{"line_number":634,"context_line":"@tenacity.retry("}],"source_content_type":"text/x-python","patch_set":7,"id":"b8643bca_46cdf20b","side":"PARENT","line":631,"range":{"start_line":610,"start_character":0,"end_line":631,"end_character":32},"updated":"2023-01-04 15:57:59.000000000","message":"good idea to move it to a common place","commit_id":"7cc176dcaf2279f5b83509924d08d28e6aa678b7"}]}
