)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"722e18b52248d7638a3c9859d5b490a1ae4a0362","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The Cyborg NVIDIA GPU Driver has implemented pGPU management in"},{"line_number":10,"context_line":"the Train release, this patch implements the vGPU management"},{"line_number":11,"context_line":"support in the same driver. For pecs about this feature, please"},{"line_number":12,"context_line":"refer to [0]."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"[0]:https://specs.openstack.org/openstack/cyborg-specs/specs/wallaby/approved/vgpu-driver-proposal.html"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1bca5415_9700f04d","line":11,"range":{"start_line":11,"start_character":32,"end_line":11,"end_character":37},"updated":"2021-01-13 07:03:09.000000000","message":"specs","commit_id":"2a4bb14cd1c31dc8e80f10929799f05c2661060c"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"76e37eebd8ada5b75e75e24676d5af2d4892dd0a","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The Cyborg NVIDIA GPU Driver has implemented pGPU management in"},{"line_number":10,"context_line":"the Train release, this patch implements the vGPU management"},{"line_number":11,"context_line":"support in the same driver. For pecs about this feature, please"},{"line_number":12,"context_line":"refer to [0]."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"[0]:https://specs.openstack.org/openstack/cyborg-specs/specs/wallaby/approved/vgpu-driver-proposal.html"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"c6c09e77_e5cbc6b3","line":11,"range":{"start_line":11,"start_character":32,"end_line":11,"end_character":37},"in_reply_to":"1bca5415_9700f04d","updated":"2021-01-13 07:36:46.000000000","message":"Done","commit_id":"2a4bb14cd1c31dc8e80f10929799f05c2661060c"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"bf1349ac73ea4d3a344f7307a32ff97def116063","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"cdf9bce8_c380b7f2","updated":"2021-01-25 01:18:26.000000000","message":"do we need test report for this driver?","commit_id":"b1e32e5d91cbc165dee7df2b06b027aec7337cae"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"380f1a36cabc298c22775a40b0fdad28985ff5d7","unresolved":true,"context_lines":[{"line_number":14,"context_line":"[0]:https://specs.openstack.org/openstack/cyborg-specs/specs/wallaby/approved/vgpu-driver-proposal.html"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Co-Authored-By: Wenping Song \u003csongwenping@inspur.com\u003e"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I715fdad3e8601186b5c6e8c087f27fb91d679490"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"b83f81f1_22cb30d8","line":17,"updated":"2021-11-22 08:13:04.000000000","message":"Please add the tag of bp:\nimplement blueprint enable-vgpu-in-cyborg","commit_id":"984f7c049aba9ac6d84218b90b667707e00e0cc9"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"3d54e508bd02ba27ae673b3607f49ace7d88a88c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"c5f679b2_43b32e3d","updated":"2023-03-11 02:28:22.000000000","message":"LGTM","commit_id":"79e1928554b6a03dd481ebefd3f550adeb457aed"}],"cyborg/accelerator/drivers/gpu/nvidia/sysinfo.py":[{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"281ccc06786ec8e3cf51aacf0286d8e04173eff5","unresolved":true,"context_lines":[{"line_number":166,"context_line":"    record of vgpu_type and pgpu in the dict constant: pgpu_type_mapping."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    Returns:"},{"line_number":169,"context_line":"        A list of all vgpu_types set in CONF.devices.enabled_vgpu_types."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    Raises:"},{"line_number":172,"context_line":"        InvalidLibvirtGPUConfig: An error occurred if same PCI appear twice"}],"source_content_type":"text/x-python","patch_set":4,"id":"9921d234_2bf1a29f","line":169,"range":{"start_line":169,"start_character":45,"end_line":169,"end_character":52},"updated":"2021-01-13 02:03:05.000000000","message":"gpu_devices","commit_id":"99fb28df9640c868372eb5af2a4137760819c9ec"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"76e37eebd8ada5b75e75e24676d5af2d4892dd0a","unresolved":false,"context_lines":[{"line_number":166,"context_line":"    record of vgpu_type and pgpu in the dict constant: pgpu_type_mapping."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    Returns:"},{"line_number":169,"context_line":"        A list of all vgpu_types set in CONF.devices.enabled_vgpu_types."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    Raises:"},{"line_number":172,"context_line":"        InvalidLibvirtGPUConfig: An error occurred if same PCI appear twice"}],"source_content_type":"text/x-python","patch_set":4,"id":"8c853cf1_5d6a93b6","line":169,"range":{"start_line":169,"start_character":45,"end_line":169,"end_character":52},"in_reply_to":"9921d234_2bf1a29f","updated":"2021-01-13 07:36:46.000000000","message":"Done","commit_id":"99fb28df9640c868372eb5af2a4137760819c9ec"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"281ccc06786ec8e3cf51aacf0286d8e04173eff5","unresolved":true,"context_lines":[{"line_number":169,"context_line":"        A list of all vgpu_types set in CONF.devices.enabled_vgpu_types."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    Raises:"},{"line_number":172,"context_line":"        InvalidLibvirtGPUConfig: An error occurred if same PCI appear twice"},{"line_number":173,"context_line":"        or PCI address is not valid."},{"line_number":174,"context_line":"    \"\"\""},{"line_number":175,"context_line":"    pgpu_type_mapping \u003d collections.defaultdict(str)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fcad764b_d70e5ac7","line":172,"range":{"start_line":172,"start_character":8,"end_line":172,"end_character":31},"updated":"2021-01-13 02:03:05.000000000","message":"InvalidGPUConfig","commit_id":"99fb28df9640c868372eb5af2a4137760819c9ec"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"76e37eebd8ada5b75e75e24676d5af2d4892dd0a","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        A list of all vgpu_types set in CONF.devices.enabled_vgpu_types."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    Raises:"},{"line_number":172,"context_line":"        InvalidLibvirtGPUConfig: An error occurred if same PCI appear twice"},{"line_number":173,"context_line":"        or PCI address is not valid."},{"line_number":174,"context_line":"    \"\"\""},{"line_number":175,"context_line":"    pgpu_type_mapping \u003d collections.defaultdict(str)"}],"source_content_type":"text/x-python","patch_set":4,"id":"6c5e08c7_dac0bd8e","line":172,"range":{"start_line":172,"start_character":8,"end_line":172,"end_character":31},"in_reply_to":"fcad764b_d70e5ac7","updated":"2021-01-13 07:36:46.000000000","message":"Done","commit_id":"99fb28df9640c868372eb5af2a4137760819c9ec"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"281ccc06786ec8e3cf51aacf0286d8e04173eff5","unresolved":true,"context_lines":[{"line_number":177,"context_line":"    if not CONF.gpu_devices.enabled_vgpu_types:"},{"line_number":178,"context_line":"        return [], pgpu_type_mapping"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    for vgpu_type in CONF.gpu_devices.enabled_vgpu_types:"},{"line_number":181,"context_line":"        group \u003d getattr(CONF, \u0027vgpu_%s\u0027 % vgpu_type, None)"},{"line_number":182,"context_line":"        if group is None or not group.device_addresses:"},{"line_number":183,"context_line":"            first_type \u003d CONF.devices.enabled_vgpu_types[0]"}],"source_content_type":"text/x-python","patch_set":4,"id":"1231932f_c967cad3","line":180,"range":{"start_line":180,"start_character":8,"end_line":180,"end_character":18},"updated":"2021-01-13 02:03:05.000000000","message":"what if there are same vgpu_types in CONF.gpu_devices.enabled_vgpu_types?","commit_id":"99fb28df9640c868372eb5af2a4137760819c9ec"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"281ccc06786ec8e3cf51aacf0286d8e04173eff5","unresolved":true,"context_lines":[{"line_number":180,"context_line":"    for vgpu_type in CONF.gpu_devices.enabled_vgpu_types:"},{"line_number":181,"context_line":"        group \u003d getattr(CONF, \u0027vgpu_%s\u0027 % vgpu_type, None)"},{"line_number":182,"context_line":"        if group is None or not group.device_addresses:"},{"line_number":183,"context_line":"            first_type \u003d CONF.devices.enabled_vgpu_types[0]"},{"line_number":184,"context_line":"            if len(CONF.devices.enabled_vgpu_types) \u003e 1:"},{"line_number":185,"context_line":"                # Only provide the warning if the operator provided more"},{"line_number":186,"context_line":"                # than one type as it\u0027s not needed to provide groups"}],"source_content_type":"text/x-python","patch_set":4,"id":"e6d43f2f_a161d75f","line":183,"range":{"start_line":183,"start_character":30,"end_line":183,"end_character":37},"updated":"2021-01-13 02:03:05.000000000","message":"gpu_devices","commit_id":"99fb28df9640c868372eb5af2a4137760819c9ec"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"76e37eebd8ada5b75e75e24676d5af2d4892dd0a","unresolved":false,"context_lines":[{"line_number":180,"context_line":"    for vgpu_type in CONF.gpu_devices.enabled_vgpu_types:"},{"line_number":181,"context_line":"        group \u003d getattr(CONF, \u0027vgpu_%s\u0027 % vgpu_type, None)"},{"line_number":182,"context_line":"        if group is None or not group.device_addresses:"},{"line_number":183,"context_line":"            first_type \u003d CONF.devices.enabled_vgpu_types[0]"},{"line_number":184,"context_line":"            if len(CONF.devices.enabled_vgpu_types) \u003e 1:"},{"line_number":185,"context_line":"                # Only provide the warning if the operator provided more"},{"line_number":186,"context_line":"                # than one type as it\u0027s not needed to provide groups"}],"source_content_type":"text/x-python","patch_set":4,"id":"45b3ee53_c274f466","line":183,"range":{"start_line":183,"start_character":30,"end_line":183,"end_character":37},"in_reply_to":"e6d43f2f_a161d75f","updated":"2021-01-13 07:36:46.000000000","message":"Done","commit_id":"99fb28df9640c868372eb5af2a4137760819c9ec"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"281ccc06786ec8e3cf51aacf0286d8e04173eff5","unresolved":true,"context_lines":[{"line_number":181,"context_line":"        group \u003d getattr(CONF, \u0027vgpu_%s\u0027 % vgpu_type, None)"},{"line_number":182,"context_line":"        if group is None or not group.device_addresses:"},{"line_number":183,"context_line":"            first_type \u003d CONF.devices.enabled_vgpu_types[0]"},{"line_number":184,"context_line":"            if len(CONF.devices.enabled_vgpu_types) \u003e 1:"},{"line_number":185,"context_line":"                # Only provide the warning if the operator provided more"},{"line_number":186,"context_line":"                # than one type as it\u0027s not needed to provide groups"},{"line_number":187,"context_line":"                # if you only use one vGPU type."}],"source_content_type":"text/x-python","patch_set":4,"id":"bd7e3515_d524b4f1","line":184,"range":{"start_line":184,"start_character":24,"end_line":184,"end_character":31},"updated":"2021-01-13 02:03:05.000000000","message":"gpu_devices","commit_id":"99fb28df9640c868372eb5af2a4137760819c9ec"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"76e37eebd8ada5b75e75e24676d5af2d4892dd0a","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        group \u003d getattr(CONF, \u0027vgpu_%s\u0027 % vgpu_type, None)"},{"line_number":182,"context_line":"        if group is None or not group.device_addresses:"},{"line_number":183,"context_line":"            first_type \u003d CONF.devices.enabled_vgpu_types[0]"},{"line_number":184,"context_line":"            if len(CONF.devices.enabled_vgpu_types) \u003e 1:"},{"line_number":185,"context_line":"                # Only provide the warning if the operator provided more"},{"line_number":186,"context_line":"                # than one type as it\u0027s not needed to provide groups"},{"line_number":187,"context_line":"                # if you only use one vGPU type."}],"source_content_type":"text/x-python","patch_set":4,"id":"1af382f3_20d984d3","line":184,"range":{"start_line":184,"start_character":24,"end_line":184,"end_character":31},"in_reply_to":"bd7e3515_d524b4f1","updated":"2021-01-13 07:36:46.000000000","message":"Done","commit_id":"99fb28df9640c868372eb5af2a4137760819c9ec"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"281ccc06786ec8e3cf51aacf0286d8e04173eff5","unresolved":true,"context_lines":[{"line_number":185,"context_line":"                # Only provide the warning if the operator provided more"},{"line_number":186,"context_line":"                # than one type as it\u0027s not needed to provide groups"},{"line_number":187,"context_line":"                # if you only use one vGPU type."},{"line_number":188,"context_line":"                msg \u003d (\"The vGPU type \u0027%(type)s\u0027 was listed in \u0027[devices] \""},{"line_number":189,"context_line":"                       \"enabled_vgpu_types\u0027 but no corresponding \""},{"line_number":190,"context_line":"                       \"\u0027[vgpu_%(type)s]\u0027 group or \""},{"line_number":191,"context_line":"                       \"\u0027[vgpu_%(type)s] device_addresses\u0027 \""}],"source_content_type":"text/x-python","patch_set":4,"id":"a4e0043c_0a06cf82","line":188,"range":{"start_line":188,"start_character":65,"end_line":188,"end_character":72},"updated":"2021-01-13 02:03:05.000000000","message":"gpu_devices","commit_id":"99fb28df9640c868372eb5af2a4137760819c9ec"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"76e37eebd8ada5b75e75e24676d5af2d4892dd0a","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                # Only provide the warning if the operator provided more"},{"line_number":186,"context_line":"                # than one type as it\u0027s not needed to provide groups"},{"line_number":187,"context_line":"                # if you only use one vGPU type."},{"line_number":188,"context_line":"                msg \u003d (\"The vGPU type \u0027%(type)s\u0027 was listed in \u0027[devices] \""},{"line_number":189,"context_line":"                       \"enabled_vgpu_types\u0027 but no corresponding \""},{"line_number":190,"context_line":"                       \"\u0027[vgpu_%(type)s]\u0027 group or \""},{"line_number":191,"context_line":"                       \"\u0027[vgpu_%(type)s] device_addresses\u0027 \""}],"source_content_type":"text/x-python","patch_set":4,"id":"97c8626b_9e3f6bfc","line":188,"range":{"start_line":188,"start_character":65,"end_line":188,"end_character":72},"in_reply_to":"a4e0043c_0a06cf82","updated":"2021-01-13 07:36:46.000000000","message":"Done","commit_id":"99fb28df9640c868372eb5af2a4137760819c9ec"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"281ccc06786ec8e3cf51aacf0286d8e04173eff5","unresolved":true,"context_lines":[{"line_number":201,"context_line":"            return [first_type], pgpu_type_mapping"},{"line_number":202,"context_line":"        for device_address in group.device_addresses:"},{"line_number":203,"context_line":"            if device_address in pgpu_type_mapping:"},{"line_number":204,"context_line":"                raise exception.InvalidLibvirtGPUConfig("},{"line_number":205,"context_line":"                    reason\u003d\"duplicate types for PCI ID %s\" % device_address"},{"line_number":206,"context_line":"                )"},{"line_number":207,"context_line":"            # Just checking whether the operator fat-fingered the address."}],"source_content_type":"text/x-python","patch_set":4,"id":"c8cfee3b_cf65ebe3","line":204,"range":{"start_line":204,"start_character":32,"end_line":204,"end_character":55},"updated":"2021-01-13 02:03:05.000000000","message":"InvalidGPUConfig","commit_id":"99fb28df9640c868372eb5af2a4137760819c9ec"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"76e37eebd8ada5b75e75e24676d5af2d4892dd0a","unresolved":false,"context_lines":[{"line_number":201,"context_line":"            return [first_type], pgpu_type_mapping"},{"line_number":202,"context_line":"        for device_address in group.device_addresses:"},{"line_number":203,"context_line":"            if device_address in pgpu_type_mapping:"},{"line_number":204,"context_line":"                raise exception.InvalidLibvirtGPUConfig("},{"line_number":205,"context_line":"                    reason\u003d\"duplicate types for PCI ID %s\" % device_address"},{"line_number":206,"context_line":"                )"},{"line_number":207,"context_line":"            # Just checking whether the operator fat-fingered the address."}],"source_content_type":"text/x-python","patch_set":4,"id":"4f045567_951aff37","line":204,"range":{"start_line":204,"start_character":32,"end_line":204,"end_character":55},"in_reply_to":"c8cfee3b_cf65ebe3","updated":"2021-01-13 07:36:46.000000000","message":"Done","commit_id":"99fb28df9640c868372eb5af2a4137760819c9ec"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"281ccc06786ec8e3cf51aacf0286d8e04173eff5","unresolved":true,"context_lines":[{"line_number":202,"context_line":"        for device_address in group.device_addresses:"},{"line_number":203,"context_line":"            if device_address in pgpu_type_mapping:"},{"line_number":204,"context_line":"                raise exception.InvalidLibvirtGPUConfig("},{"line_number":205,"context_line":"                    reason\u003d\"duplicate types for PCI ID %s\" % device_address"},{"line_number":206,"context_line":"                )"},{"line_number":207,"context_line":"            # Just checking whether the operator fat-fingered the address."},{"line_number":208,"context_line":"            # If it\u0027s wrong, it will return an exception"}],"source_content_type":"text/x-python","patch_set":4,"id":"879b916d_15bd337c","line":205,"range":{"start_line":205,"start_character":52,"end_line":205,"end_character":54},"updated":"2021-01-13 02:03:05.000000000","message":"address:","commit_id":"99fb28df9640c868372eb5af2a4137760819c9ec"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"76e37eebd8ada5b75e75e24676d5af2d4892dd0a","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        for device_address in group.device_addresses:"},{"line_number":203,"context_line":"            if device_address in pgpu_type_mapping:"},{"line_number":204,"context_line":"                raise exception.InvalidLibvirtGPUConfig("},{"line_number":205,"context_line":"                    reason\u003d\"duplicate types for PCI ID %s\" % device_address"},{"line_number":206,"context_line":"                )"},{"line_number":207,"context_line":"            # Just checking whether the operator fat-fingered the address."},{"line_number":208,"context_line":"            # If it\u0027s wrong, it will return an exception"}],"source_content_type":"text/x-python","patch_set":4,"id":"e238bdac_448102a7","line":205,"range":{"start_line":205,"start_character":52,"end_line":205,"end_character":54},"in_reply_to":"879b916d_15bd337c","updated":"2021-01-13 07:36:46.000000000","message":"Done","commit_id":"99fb28df9640c868372eb5af2a4137760819c9ec"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"281ccc06786ec8e3cf51aacf0286d8e04173eff5","unresolved":true,"context_lines":[{"line_number":208,"context_line":"            # If it\u0027s wrong, it will return an exception"},{"line_number":209,"context_line":"            try:"},{"line_number":210,"context_line":"                # Validates whether it\u0027s a PCI ID..."},{"line_number":211,"context_line":"                utils.parse_address(device_address)"},{"line_number":212,"context_line":"            except exception.PciDeviceWrongAddressFormat:"},{"line_number":213,"context_line":"                raise exception.InvalidLibvirtGPUConfig("},{"line_number":214,"context_line":"                    reason\u003d\"incorrect PCI address: %s\" % device_address"}],"source_content_type":"text/x-python","patch_set":4,"id":"c3642470_42c06535","line":211,"range":{"start_line":211,"start_character":22,"end_line":211,"end_character":35},"updated":"2021-01-13 02:03:05.000000000","message":"undefined","commit_id":"99fb28df9640c868372eb5af2a4137760819c9ec"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"76e37eebd8ada5b75e75e24676d5af2d4892dd0a","unresolved":false,"context_lines":[{"line_number":208,"context_line":"            # If it\u0027s wrong, it will return an exception"},{"line_number":209,"context_line":"            try:"},{"line_number":210,"context_line":"                # Validates whether it\u0027s a PCI ID..."},{"line_number":211,"context_line":"                utils.parse_address(device_address)"},{"line_number":212,"context_line":"            except exception.PciDeviceWrongAddressFormat:"},{"line_number":213,"context_line":"                raise exception.InvalidLibvirtGPUConfig("},{"line_number":214,"context_line":"                    reason\u003d\"incorrect PCI address: %s\" % device_address"}],"source_content_type":"text/x-python","patch_set":4,"id":"db3fd1ce_9e9d9b57","line":211,"range":{"start_line":211,"start_character":22,"end_line":211,"end_character":35},"in_reply_to":"c3642470_42c06535","updated":"2021-01-13 07:36:46.000000000","message":"Done","commit_id":"99fb28df9640c868372eb5af2a4137760819c9ec"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"281ccc06786ec8e3cf51aacf0286d8e04173eff5","unresolved":true,"context_lines":[{"line_number":209,"context_line":"            try:"},{"line_number":210,"context_line":"                # Validates whether it\u0027s a PCI ID..."},{"line_number":211,"context_line":"                utils.parse_address(device_address)"},{"line_number":212,"context_line":"            except exception.PciDeviceWrongAddressFormat:"},{"line_number":213,"context_line":"                raise exception.InvalidLibvirtGPUConfig("},{"line_number":214,"context_line":"                    reason\u003d\"incorrect PCI address: %s\" % device_address"},{"line_number":215,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":4,"id":"29322880_ba091453","line":212,"range":{"start_line":212,"start_character":29,"end_line":212,"end_character":56},"updated":"2021-01-13 02:03:05.000000000","message":"undefined","commit_id":"99fb28df9640c868372eb5af2a4137760819c9ec"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"76e37eebd8ada5b75e75e24676d5af2d4892dd0a","unresolved":false,"context_lines":[{"line_number":209,"context_line":"            try:"},{"line_number":210,"context_line":"                # Validates whether it\u0027s a PCI ID..."},{"line_number":211,"context_line":"                utils.parse_address(device_address)"},{"line_number":212,"context_line":"            except exception.PciDeviceWrongAddressFormat:"},{"line_number":213,"context_line":"                raise exception.InvalidLibvirtGPUConfig("},{"line_number":214,"context_line":"                    reason\u003d\"incorrect PCI address: %s\" % device_address"},{"line_number":215,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":4,"id":"8ba98192_ddff89f3","line":212,"range":{"start_line":212,"start_character":29,"end_line":212,"end_character":56},"in_reply_to":"29322880_ba091453","updated":"2021-01-13 07:36:46.000000000","message":"Done","commit_id":"99fb28df9640c868372eb5af2a4137760819c9ec"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"281ccc06786ec8e3cf51aacf0286d8e04173eff5","unresolved":true,"context_lines":[{"line_number":210,"context_line":"                # Validates whether it\u0027s a PCI ID..."},{"line_number":211,"context_line":"                utils.parse_address(device_address)"},{"line_number":212,"context_line":"            except exception.PciDeviceWrongAddressFormat:"},{"line_number":213,"context_line":"                raise exception.InvalidLibvirtGPUConfig("},{"line_number":214,"context_line":"                    reason\u003d\"incorrect PCI address: %s\" % device_address"},{"line_number":215,"context_line":"                )"},{"line_number":216,"context_line":"            pgpu_type_mapping[device_address] \u003d vgpu_type"}],"source_content_type":"text/x-python","patch_set":4,"id":"56464e88_cc499c7e","line":213,"range":{"start_line":213,"start_character":32,"end_line":213,"end_character":55},"updated":"2021-01-13 02:03:05.000000000","message":"ditto","commit_id":"99fb28df9640c868372eb5af2a4137760819c9ec"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"76e37eebd8ada5b75e75e24676d5af2d4892dd0a","unresolved":false,"context_lines":[{"line_number":210,"context_line":"                # Validates whether it\u0027s a PCI ID..."},{"line_number":211,"context_line":"                utils.parse_address(device_address)"},{"line_number":212,"context_line":"            except exception.PciDeviceWrongAddressFormat:"},{"line_number":213,"context_line":"                raise exception.InvalidLibvirtGPUConfig("},{"line_number":214,"context_line":"                    reason\u003d\"incorrect PCI address: %s\" % device_address"},{"line_number":215,"context_line":"                )"},{"line_number":216,"context_line":"            pgpu_type_mapping[device_address] \u003d vgpu_type"}],"source_content_type":"text/x-python","patch_set":4,"id":"5abbac78_49123ee6","line":213,"range":{"start_line":213,"start_character":32,"end_line":213,"end_character":55},"in_reply_to":"56464e88_cc499c7e","updated":"2021-01-13 07:36:46.000000000","message":"Done","commit_id":"99fb28df9640c868372eb5af2a4137760819c9ec"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"281ccc06786ec8e3cf51aacf0286d8e04173eff5","unresolved":true,"context_lines":[{"line_number":226,"context_line":"    supported_vgpu_types, pgpu_type_mapping \u003d _get_supported_vgpu_types()"},{"line_number":227,"context_line":"    # Bail out quickly if we don\u0027t support vGPUs"},{"line_number":228,"context_line":"    if not supported_vgpu_types:"},{"line_number":229,"context_line":"        LOG.error(\u0027Unable to load vGPU_type from [devices] \u0027"},{"line_number":230,"context_line":"                  \u0027Ensure \"enabled_vgpu_types\" is set.\u0027)"},{"line_number":231,"context_line":"        return"},{"line_number":232,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"8ed833c2_ff6cebfb","line":229,"range":{"start_line":229,"start_character":50,"end_line":229,"end_character":57},"updated":"2021-01-13 02:03:05.000000000","message":"ditto","commit_id":"99fb28df9640c868372eb5af2a4137760819c9ec"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"76e37eebd8ada5b75e75e24676d5af2d4892dd0a","unresolved":false,"context_lines":[{"line_number":226,"context_line":"    supported_vgpu_types, pgpu_type_mapping \u003d _get_supported_vgpu_types()"},{"line_number":227,"context_line":"    # Bail out quickly if we don\u0027t support vGPUs"},{"line_number":228,"context_line":"    if not supported_vgpu_types:"},{"line_number":229,"context_line":"        LOG.error(\u0027Unable to load vGPU_type from [devices] \u0027"},{"line_number":230,"context_line":"                  \u0027Ensure \"enabled_vgpu_types\" is set.\u0027)"},{"line_number":231,"context_line":"        return"},{"line_number":232,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"71362ba7_b88bab0b","line":229,"range":{"start_line":229,"start_character":50,"end_line":229,"end_character":57},"in_reply_to":"8ed833c2_ff6cebfb","updated":"2021-01-13 07:36:46.000000000","message":"Done","commit_id":"99fb28df9640c868372eb5af2a4137760819c9ec"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"722e18b52248d7638a3c9859d5b490a1ae4a0362","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Modifications Copyright (C) 2020 ZTE Corporation"},{"line_number":2,"context_line":"# Copyright 2018 Beijing Lenovo Software Ltd."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":5,"id":"7e10b71c_5036c547","line":1,"range":{"start_line":1,"start_character":30,"end_line":1,"end_character":34},"updated":"2021-01-13 07:03:09.000000000","message":"2021","commit_id":"2a4bb14cd1c31dc8e80f10929799f05c2661060c"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"76e37eebd8ada5b75e75e24676d5af2d4892dd0a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Modifications Copyright (C) 2020 ZTE Corporation"},{"line_number":2,"context_line":"# Copyright 2018 Beijing Lenovo Software Ltd."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":5,"id":"4ace9d95_3a7748c1","line":1,"range":{"start_line":1,"start_character":30,"end_line":1,"end_character":34},"in_reply_to":"7e10b71c_5036c547","updated":"2021-01-13 07:36:46.000000000","message":"Done","commit_id":"2a4bb14cd1c31dc8e80f10929799f05c2661060c"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"722e18b52248d7638a3c9859d5b490a1ae4a0362","unresolved":true,"context_lines":[{"line_number":101,"context_line":"    # NOTE(wangzhh): The name of deployable should be unique, its format is"},{"line_number":102,"context_line":"    # under disscussion, may looks like"},{"line_number":103,"context_line":"    # \u003cComputeNodeName\u003e_\u003cNumaNodeName\u003e_\u003cCyborgName\u003e_\u003cNumInHost\u003e"},{"line_number":104,"context_line":"    # NOTE(yumeng) Now the TECS-Cyborg naming method is as the following:"},{"line_number":105,"context_line":"    # For kvm devices,the deployable_name is"},{"line_number":106,"context_line":"    # named \u003cCompute_hostname\u003e_\u003cDevice_address\u003e"},{"line_number":107,"context_line":"    driver_dep.name \u003d gpu.get(\u0027hostname\u0027, \u0027\u0027) + \u0027_\u0027 + gpu[\"devices\"]"},{"line_number":108,"context_line":"    driver_dep.driver_name \u003d \\"},{"line_number":109,"context_line":"        gpu_utils.VENDOR_MAPS.get(gpu[\"vendor_id\"]).upper()"}],"source_content_type":"text/x-python","patch_set":5,"id":"27158205_e1e52e62","line":106,"range":{"start_line":104,"start_character":5,"end_line":106,"end_character":47},"updated":"2021-01-13 07:03:09.000000000","message":"delete this","commit_id":"2a4bb14cd1c31dc8e80f10929799f05c2661060c"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"76e37eebd8ada5b75e75e24676d5af2d4892dd0a","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    # NOTE(wangzhh): The name of deployable should be unique, its format is"},{"line_number":102,"context_line":"    # under disscussion, may looks like"},{"line_number":103,"context_line":"    # \u003cComputeNodeName\u003e_\u003cNumaNodeName\u003e_\u003cCyborgName\u003e_\u003cNumInHost\u003e"},{"line_number":104,"context_line":"    # NOTE(yumeng) Now the TECS-Cyborg naming method is as the following:"},{"line_number":105,"context_line":"    # For kvm devices,the deployable_name is"},{"line_number":106,"context_line":"    # named \u003cCompute_hostname\u003e_\u003cDevice_address\u003e"},{"line_number":107,"context_line":"    driver_dep.name \u003d gpu.get(\u0027hostname\u0027, \u0027\u0027) + \u0027_\u0027 + gpu[\"devices\"]"},{"line_number":108,"context_line":"    driver_dep.driver_name \u003d \\"},{"line_number":109,"context_line":"        gpu_utils.VENDOR_MAPS.get(gpu[\"vendor_id\"]).upper()"}],"source_content_type":"text/x-python","patch_set":5,"id":"777d31ea_5c3749f1","line":106,"range":{"start_line":104,"start_character":5,"end_line":106,"end_character":47},"in_reply_to":"27158205_e1e52e62","updated":"2021-01-13 07:36:46.000000000","message":"Done","commit_id":"2a4bb14cd1c31dc8e80f10929799f05c2661060c"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"bf1349ac73ea4d3a344f7307a32ff97def116063","unresolved":true,"context_lines":[{"line_number":214,"context_line":"                    reason\u003d\"incorrect PCI address: %s\" % device_address"},{"line_number":215,"context_line":"                )"},{"line_number":216,"context_line":"            pgpu_type_mapping[device_address] \u003d vgpu_type"},{"line_number":217,"context_line":"    return CONF.devices.enabled_vgpu_types, pgpu_type_mapping"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"def _get_vgpu_type_per_pgpu(device_address):"}],"source_content_type":"text/x-python","patch_set":6,"id":"a52b4cf9_6320c290","line":217,"range":{"start_line":217,"start_character":16,"end_line":217,"end_character":23},"updated":"2021-01-25 01:18:26.000000000","message":"gpu_devices","commit_id":"b1e32e5d91cbc165dee7df2b06b027aec7337cae"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"7f36234c21b3cb7bfe0a87237f030f89a24f9ff4","unresolved":false,"context_lines":[{"line_number":214,"context_line":"                    reason\u003d\"incorrect PCI address: %s\" % device_address"},{"line_number":215,"context_line":"                )"},{"line_number":216,"context_line":"            pgpu_type_mapping[device_address] \u003d vgpu_type"},{"line_number":217,"context_line":"    return CONF.devices.enabled_vgpu_types, pgpu_type_mapping"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"def _get_vgpu_type_per_pgpu(device_address):"}],"source_content_type":"text/x-python","patch_set":6,"id":"91d3f2d2_ecc2f0c3","line":217,"range":{"start_line":217,"start_character":16,"end_line":217,"end_character":23},"in_reply_to":"a52b4cf9_6320c290","updated":"2021-02-23 05:43:26.000000000","message":"Done","commit_id":"b1e32e5d91cbc165dee7df2b06b027aec7337cae"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"af774095dd5fbf4922f0d428b728221c8033ae5b","unresolved":true,"context_lines":[{"line_number":181,"context_line":"        group \u003d getattr(CONF, \u0027vgpu_%s\u0027 % vgpu_type, None)"},{"line_number":182,"context_line":"        if group is None or not group.device_addresses:"},{"line_number":183,"context_line":"            first_type \u003d CONF.gpu_devices.enabled_vgpu_types[0]"},{"line_number":184,"context_line":"            if len(CONF.gpu_devices.enabled_vgpu_types) \u003e 1:"},{"line_number":185,"context_line":"                # Only provide the warning if the operator provided more"},{"line_number":186,"context_line":"                # than one type as it\u0027s not needed to provide groups"},{"line_number":187,"context_line":"                # if you only use one vGPU type."},{"line_number":188,"context_line":"                msg \u003d (\"The vGPU type \u0027%(type)s\u0027 was listed in [gpu_devices] \""},{"line_number":189,"context_line":"                       \"enabled_vgpu_types\u0027 but no corresponding \""},{"line_number":190,"context_line":"                       \"\u0027[vgpu_%(type)s]\u0027 group or \""},{"line_number":191,"context_line":"                       \"\u0027[vgpu_%(type)s] device_addresses\u0027 \""},{"line_number":192,"context_line":"                       \"option was defined. Only the first type \""},{"line_number":193,"context_line":"                       \"\u0027%(ftype)s\u0027 will be used.\" % {\u0027type\u0027: vgpu_type,"},{"line_number":194,"context_line":"                                                      \u0027ftype\u0027: first_type})"},{"line_number":195,"context_line":"                LOG.warning(msg)"},{"line_number":196,"context_line":"            # We need to reset the mapping table that we started to provide"},{"line_number":197,"context_line":"            # keys and values from previously processed vGPUs but since"}],"source_content_type":"text/x-python","patch_set":8,"id":"e7833bac_6e0f6248","line":194,"range":{"start_line":184,"start_character":0,"end_line":194,"end_character":75},"updated":"2021-02-26 09:26:43.000000000","message":"According to our discussion in irc meeting, this part need to be improved.","commit_id":"8c2beacac114a8b0ce24962144a6cc62ad8acf71"}],"cyborg/accelerator/drivers/gpu/utils.py":[{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"722e18b52248d7638a3c9859d5b490a1ae4a0362","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Modifications Copyright (C) 2020 ZTE Corporation"},{"line_number":2,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":3,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":4,"context_line":"# a copy of the License at"}],"source_content_type":"text/x-python","patch_set":5,"id":"da4fa97d_bec0c1ca","line":1,"range":{"start_line":1,"start_character":30,"end_line":1,"end_character":34},"updated":"2021-01-13 07:03:09.000000000","message":"2021","commit_id":"2a4bb14cd1c31dc8e80f10929799f05c2661060c"}],"cyborg/tests/unit/accelerator/drivers/gpu/test_utils.py":[{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"bf1349ac73ea4d3a344f7307a32ff97def116063","unresolved":true,"context_lines":[{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import six"},{"line_number":16,"context_line":"import sys"},{"line_number":17,"context_line":"from unittest import mock"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"672ecc41_d3307643","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":10},"updated":"2021-01-25 01:18:26.000000000","message":"we have move six package.","commit_id":"b1e32e5d91cbc165dee7df2b06b027aec7337cae"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"7f36234c21b3cb7bfe0a87237f030f89a24f9ff4","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import six"},{"line_number":16,"context_line":"import sys"},{"line_number":17,"context_line":"from unittest import mock"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"b62eb030_48162490","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":10},"in_reply_to":"672ecc41_d3307643","updated":"2021-02-23 05:43:26.000000000","message":"Done","commit_id":"b1e32e5d91cbc165dee7df2b06b027aec7337cae"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"bf1349ac73ea4d3a344f7307a32ff97def116063","unresolved":true,"context_lines":[{"line_number":143,"context_line":"    @mock.patch(\u0027os.listdir\u0027)"},{"line_number":144,"context_line":"    @mock.patch(\u0027os.path.exists\u0027)"},{"line_number":145,"context_line":"    @mock.patch(\u0027cyborg.accelerator.drivers.gpu.utils.lspci_privileged\u0027)"},{"line_number":146,"context_line":"    def test_discover_gpus_report_vGPU(self, mock_devices_for_vendor,"},{"line_number":147,"context_line":"                                       mock_path_exists,"},{"line_number":148,"context_line":"                                       mock_supported_mdev_types):"},{"line_number":149,"context_line":"        mock_devices_for_vendor.return_value \u003d self.p.stdout.readlines_T4()"}],"source_content_type":"text/x-python","patch_set":6,"id":"d02ad6da_d7211ab1","line":146,"range":{"start_line":146,"start_character":8,"end_line":146,"end_character":38},"updated":"2021-01-25 01:18:26.000000000","message":"this test is invalid, i cannot step into.","commit_id":"b1e32e5d91cbc165dee7df2b06b027aec7337cae"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"7f36234c21b3cb7bfe0a87237f030f89a24f9ff4","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    @mock.patch(\u0027os.listdir\u0027)"},{"line_number":144,"context_line":"    @mock.patch(\u0027os.path.exists\u0027)"},{"line_number":145,"context_line":"    @mock.patch(\u0027cyborg.accelerator.drivers.gpu.utils.lspci_privileged\u0027)"},{"line_number":146,"context_line":"    def test_discover_gpus_report_vGPU(self, mock_devices_for_vendor,"},{"line_number":147,"context_line":"                                       mock_path_exists,"},{"line_number":148,"context_line":"                                       mock_supported_mdev_types):"},{"line_number":149,"context_line":"        mock_devices_for_vendor.return_value \u003d self.p.stdout.readlines_T4()"}],"source_content_type":"text/x-python","patch_set":6,"id":"497070cd_1aba158f","line":146,"range":{"start_line":146,"start_character":8,"end_line":146,"end_character":38},"in_reply_to":"d02ad6da_d7211ab1","updated":"2021-02-23 05:43:26.000000000","message":"Done","commit_id":"b1e32e5d91cbc165dee7df2b06b027aec7337cae"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"54a339d86027ae694b952767eb5044e71e89fc67","unresolved":true,"context_lines":[{"line_number":147,"context_line":"                                       mock_path_exists,"},{"line_number":148,"context_line":"                                       mock_supported_mdev_types,"},{"line_number":149,"context_line":"                                       mock_open"},{"line_number":150,"context_line":"                                       ):"},{"line_number":151,"context_line":"        mock_devices_for_vendor.return_value \u003d self.p.stdout.readlines_T4()"},{"line_number":152,"context_line":"        mock_path_exists.return_value \u003d True"},{"line_number":153,"context_line":"        mock_supported_mdev_types.return_value \u003d NVIDIA_T4_SUPPORTED_MDEV_TYPES"}],"source_content_type":"text/x-python","patch_set":7,"id":"8b17a3fd_a4985e95","line":150,"range":{"start_line":150,"start_character":39,"end_line":150,"end_character":41},"updated":"2021-02-23 07:06:40.000000000","message":"This is no need have a white blank line","commit_id":"9b823419418ba37d6f31c343357994240be6ee1d"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"4ba3f16c4500307664229828d012c8d2725bc68c","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                                       mock_path_exists,"},{"line_number":148,"context_line":"                                       mock_supported_mdev_types,"},{"line_number":149,"context_line":"                                       mock_open"},{"line_number":150,"context_line":"                                       ):"},{"line_number":151,"context_line":"        mock_devices_for_vendor.return_value \u003d self.p.stdout.readlines_T4()"},{"line_number":152,"context_line":"        mock_path_exists.return_value \u003d True"},{"line_number":153,"context_line":"        mock_supported_mdev_types.return_value \u003d NVIDIA_T4_SUPPORTED_MDEV_TYPES"}],"source_content_type":"text/x-python","patch_set":7,"id":"49674656_1ee3419b","line":150,"range":{"start_line":150,"start_character":39,"end_line":150,"end_character":41},"in_reply_to":"8b17a3fd_a4985e95","updated":"2021-02-24 07:26:41.000000000","message":"Done","commit_id":"9b823419418ba37d6f31c343357994240be6ee1d"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"54a339d86027ae694b952767eb5044e71e89fc67","unresolved":true,"context_lines":[{"line_number":224,"context_line":""},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"def multi_mock_open(*file_contents):"},{"line_number":227,"context_line":"    \"\"\"Create a mock \"open\" that will mock open multiple files in sequence"},{"line_number":228,"context_line":"    Args:"},{"line_number":229,"context_line":"        *file_contents ([str]): a list of file contents to be returned by open"},{"line_number":230,"context_line":"    Returns:"},{"line_number":231,"context_line":"        (MagicMock) a mock opener that will return the contents of the first"},{"line_number":232,"context_line":"            file when opened the first time, the second file when opened the"},{"line_number":233,"context_line":"            second time, etc."},{"line_number":234,"context_line":"    \"\"\""},{"line_number":235,"context_line":"    mock_files \u003d ["},{"line_number":236,"context_line":"        mock.mock_open(read_data\u003dcontent).return_value for content in"}],"source_content_type":"text/x-python","patch_set":7,"id":"0ad4fff7_e6fab88d","line":233,"range":{"start_line":227,"start_character":0,"end_line":233,"end_character":29},"updated":"2021-02-23 07:06:40.000000000","message":"indent these sentence","commit_id":"9b823419418ba37d6f31c343357994240be6ee1d"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"4ba3f16c4500307664229828d012c8d2725bc68c","unresolved":false,"context_lines":[{"line_number":224,"context_line":""},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"def multi_mock_open(*file_contents):"},{"line_number":227,"context_line":"    \"\"\"Create a mock \"open\" that will mock open multiple files in sequence"},{"line_number":228,"context_line":"    Args:"},{"line_number":229,"context_line":"        *file_contents ([str]): a list of file contents to be returned by open"},{"line_number":230,"context_line":"    Returns:"},{"line_number":231,"context_line":"        (MagicMock) a mock opener that will return the contents of the first"},{"line_number":232,"context_line":"            file when opened the first time, the second file when opened the"},{"line_number":233,"context_line":"            second time, etc."},{"line_number":234,"context_line":"    \"\"\""},{"line_number":235,"context_line":"    mock_files \u003d ["},{"line_number":236,"context_line":"        mock.mock_open(read_data\u003dcontent).return_value for content in"}],"source_content_type":"text/x-python","patch_set":7,"id":"d6a3081c_287ac459","line":233,"range":{"start_line":227,"start_character":0,"end_line":233,"end_character":29},"in_reply_to":"0ad4fff7_e6fab88d","updated":"2021-02-24 07:26:41.000000000","message":"Done","commit_id":"9b823419418ba37d6f31c343357994240be6ee1d"}]}
