)]}'
{"doc/v3/api_samples/os-pci/pci-detail-resp.json":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"b20f84e75c408d64805d1f3a6b1776c985bb101a","unresolved":false,"context_lines":[{"line_number":5,"context_line":"            \"compute_node_id\": 1,"},{"line_number":6,"context_line":"            \"created_at\": null,"},{"line_number":7,"context_line":"            \"deleted\": false,"},{"line_number":8,"context_line":"            \"deleted_at\": null,"},{"line_number":9,"context_line":"            \"dev_id\": \"pci_0000_04_10_0\","},{"line_number":10,"context_line":"            \"dev_type\": \"type-VF\","},{"line_number":11,"context_line":"            \"extra_info\": {"}],"source_content_type":"application/json","patch_set":18,"id":"AAAAUX%2F%2F6%2Fs%3D","line":8,"updated":"2014-02-09 18:55:55.000000000","message":"Do we really want to be exposing things like deleted_at, created_at, deleted, updated_at through this api?","commit_id":"17b76e8e81a6e4cdc53db6d294fa7ab66b3d7951"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"5f1c1249ead25de0c5bbd792f7d3772e8e48db24","unresolved":false,"context_lines":[{"line_number":5,"context_line":"            \"compute_node_id\": 1,"},{"line_number":6,"context_line":"            \"created_at\": null,"},{"line_number":7,"context_line":"            \"deleted\": false,"},{"line_number":8,"context_line":"            \"deleted_at\": null,"},{"line_number":9,"context_line":"            \"dev_id\": \"pci_0000_04_10_0\","},{"line_number":10,"context_line":"            \"dev_type\": \"type-VF\","},{"line_number":11,"context_line":"            \"extra_info\": {"}],"source_content_type":"application/json","patch_set":18,"id":"AAAAUX%2F%2F5QY%3D","line":8,"in_reply_to":"AAAAUX%2F%2F6%2Fs%3D","updated":"2014-02-10 05:09:17.000000000","message":"Done","commit_id":"17b76e8e81a6e4cdc53db6d294fa7ab66b3d7951"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"8342691eb667481968d26ec1a0c9c7f22a8d9033","unresolved":false,"context_lines":[{"line_number":11,"context_line":"                \"phys_function\": \"0x004\""},{"line_number":12,"context_line":"            },"},{"line_number":13,"context_line":"            \"id\": 1,"},{"line_number":14,"context_line":"            \"instance_uuid\": \"246ca\","},{"line_number":15,"context_line":"            \"label\": \"label_8086_1520\","},{"line_number":16,"context_line":"            \"product_id\": \"1520\","},{"line_number":17,"context_line":"            \"status\": \"available\","}],"source_content_type":"application/json","patch_set":19,"id":"AAAAUX%2F%2FTzM%3D","line":14,"updated":"2014-02-14 02:44:43.000000000","message":"so for consistency we\u0027ve been changing all API exposed occurences for instance to server. So this should be server_uuid now. Also given this gets fed into a doc could you change the test so the value looks like a uuid?","commit_id":"71ac221a6ff0e7aea805e3008af3142c56569c48"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"f3eecd36327e533e1d3971d92fc5cfb0d76326d2","unresolved":false,"context_lines":[{"line_number":11,"context_line":"                \"phys_function\": \"0x004\""},{"line_number":12,"context_line":"            },"},{"line_number":13,"context_line":"            \"id\": 1,"},{"line_number":14,"context_line":"            \"instance_uuid\": \"246ca\","},{"line_number":15,"context_line":"            \"label\": \"label_8086_1520\","},{"line_number":16,"context_line":"            \"product_id\": \"1520\","},{"line_number":17,"context_line":"            \"status\": \"available\","}],"source_content_type":"application/json","patch_set":19,"id":"AAAAUX%2F%2FSz4%3D","line":14,"in_reply_to":"AAAAUX%2F%2FTzM%3D","updated":"2014-02-14 06:21:11.000000000","message":"@Christ\nyou mean we should change the instance_uuid to server_uuid  only in doc?  or also change in API, if in the API could you give me a link about that, thanks very much!","commit_id":"71ac221a6ff0e7aea805e3008af3142c56569c48"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"b4dc4f7fca760141d76c704fb6b04654e0829b77","unresolved":false,"context_lines":[{"line_number":11,"context_line":"                \"phys_function\": \"0x004\""},{"line_number":12,"context_line":"            },"},{"line_number":13,"context_line":"            \"id\": 1,"},{"line_number":14,"context_line":"            \"instance_uuid\": \"246ca\","},{"line_number":15,"context_line":"            \"label\": \"label_8086_1520\","},{"line_number":16,"context_line":"            \"product_id\": \"1520\","},{"line_number":17,"context_line":"            \"status\": \"available\","}],"source_content_type":"application/json","patch_set":19,"id":"AAAAUX%2F%2FSLU%3D","line":14,"in_reply_to":"AAAAUX%2F%2FTzM%3D","updated":"2014-02-14 08:21:38.000000000","message":"Done","commit_id":"71ac221a6ff0e7aea805e3008af3142c56569c48"}],"nova/api/openstack/compute/plugins/v3/pci.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a309c7057f07f99b60444f7e3ddf153e1944905f","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        return dev_dict"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    @wsgi.serializers(xml\u003dPciDetailTemplate)"},{"line_number":187,"context_line":"    def detail(self, req):"},{"line_number":188,"context_line":"        node \u003d req.GET.get(\u0027node\u0027)"},{"line_number":189,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":190,"context_line":"        authorize(context)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FS7s%3D","line":187,"updated":"2013-10-18 07:51:44.000000000","message":"missing decorator execpted_errors. And If there is nothing raised from this function, we still need @expected_errors(())","commit_id":"389c19212f2f19a12014a281cebe941833882c02"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a309c7057f07f99b60444f7e3ddf153e1944905f","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        pci_devs \u003d pci_device.PciDeviceList.get_by_compute_node(context, node)"},{"line_number":192,"context_line":"        if not pci_devs:"},{"line_number":193,"context_line":"            msg \u003d _(\"Pci in node  \u0027%s\u0027 could not be found.\") % node"},{"line_number":194,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":195,"context_line":"        return dict(pcis\u003d[self._view_pcidevice(dev, True) for dev in pci_devs])"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    @extensions.expected_errors(404)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FS7w%3D","line":194,"updated":"2013-10-18 07:51:44.000000000","message":"when nothing found just return empty list? looks like most of list action won\u0027t raise HTTPNotFound","commit_id":"389c19212f2f19a12014a281cebe941833882c02"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"036bf9b12eabb230b150e8c2d81f76c85929bf5d","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        pci_devs \u003d pci_device.PciDeviceList.get_by_compute_node(context, node)"},{"line_number":192,"context_line":"        if not pci_devs:"},{"line_number":193,"context_line":"            msg \u003d _(\"Pci in node  \u0027%s\u0027 could not be found.\") % node"},{"line_number":194,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":195,"context_line":"        return dict(pcis\u003d[self._view_pcidevice(dev, True) for dev in pci_devs])"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    @extensions.expected_errors(404)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FOJ4%3D","line":194,"in_reply_to":"AAAATH%2F%2FOK8%3D","updated":"2013-10-21 06:21:46.000000000","message":"@Alex Xu ,\nGot it , Thank you for your patience to answer. by the way,i will update V3 after V2 is ok.","commit_id":"389c19212f2f19a12014a281cebe941833882c02"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ae376886e5e6daa93ec72b26b9f397a4ba76414c","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        pci_devs \u003d pci_device.PciDeviceList.get_by_compute_node(context, node)"},{"line_number":192,"context_line":"        if not pci_devs:"},{"line_number":193,"context_line":"            msg \u003d _(\"Pci in node  \u0027%s\u0027 could not be found.\") % node"},{"line_number":194,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":195,"context_line":"        return dict(pcis\u003d[self._view_pcidevice(dev, True) for dev in pci_devs])"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    @extensions.expected_errors(404)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FOK8%3D","line":194,"in_reply_to":"AAAATH%2F%2FS2o%3D","updated":"2013-10-21 06:08:58.000000000","message":"I mean api should return {\"pcis\": []}. not just raise exception when nothing found.","commit_id":"389c19212f2f19a12014a281cebe941833882c02"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"5ec9ebf4ef1566890a3e87d32eb710015fecc714","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        pci_devs \u003d pci_device.PciDeviceList.get_by_compute_node(context, node)"},{"line_number":192,"context_line":"        if not pci_devs:"},{"line_number":193,"context_line":"            msg \u003d _(\"Pci in node  \u0027%s\u0027 could not be found.\") % node"},{"line_number":194,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":195,"context_line":"        return dict(pcis\u003d[self._view_pcidevice(dev, True) for dev in pci_devs])"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    @extensions.expected_errors(404)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FS2o%3D","line":194,"in_reply_to":"AAAATH%2F%2FS7w%3D","updated":"2013-10-18 08:26:07.000000000","message":"@ ALex\nyes, nothing found the pci_device.PciDeviceList.get_by_compute_node will just return empty list. In this patch yongli had pointed it","commit_id":"389c19212f2f19a12014a281cebe941833882c02"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a309c7057f07f99b60444f7e3ddf153e1944905f","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        pci_devs \u003d pci_device.PciDeviceList.get_by_compute_node(context, node)"},{"line_number":215,"context_line":"        if not pci_devs:"},{"line_number":216,"context_line":"            msg \u003d _(\"Pci in node  \u0027%s\u0027 could not be found.\") % node"},{"line_number":217,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":218,"context_line":"        return dict("},{"line_number":219,"context_line":"            pcis\u003d[self._view_pcidevice(dev, False) for dev in pci_devs])"},{"line_number":220,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FWEA%3D","line":217,"updated":"2013-10-18 07:51:44.000000000","message":"when nothing found just return empty list? looks like most of list action won\u0027t raise HTTPNotFound","commit_id":"389c19212f2f19a12014a281cebe941833882c02"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a309c7057f07f99b60444f7e3ddf153e1944905f","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        resources \u003d [extensions.ResourceExtension(ALIAS,"},{"line_number":232,"context_line":"                     PciController(),"},{"line_number":233,"context_line":"                     collection_actions\u003d{\u0027detail\u0027: \u0027GET\u0027},"},{"line_number":234,"context_line":"                     member_actions\u003d{\u0027pci_devices\u0027: \u0027GET\u0027})]"},{"line_number":235,"context_line":"        return resources"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    def get_controller_extensions(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FWEU%3D","line":234,"updated":"2013-10-18 07:51:44.000000000","message":"looks like didn\u0027t implement this action","commit_id":"389c19212f2f19a12014a281cebe941833882c02"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"2bf22e5a0fbfc02687f25626b7173db7dc9a8e1a","unresolved":false,"context_lines":[{"line_number":189,"context_line":"class PciController(object):"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def __init__(self):"},{"line_number":192,"context_line":"        super(PciController, self).__init__()"},{"line_number":193,"context_line":"        self.host_api \u003d compute.HostAPI()"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def _view_pcidevice(self, device, detail\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2F%2BxI%3D","line":192,"updated":"2014-01-05 11:57:16.000000000","message":"this is needless","commit_id":"74cd939b4d145f40af3169eba03e6fc231439b51"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"5b2232b287fac4f829566fe4bb87d9f3e410dce9","unresolved":false,"context_lines":[{"line_number":189,"context_line":"class PciController(object):"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def __init__(self):"},{"line_number":192,"context_line":"        super(PciController, self).__init__()"},{"line_number":193,"context_line":"        self.host_api \u003d compute.HostAPI()"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def _view_pcidevice(self, device, detail\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2F9uc%3D","line":192,"in_reply_to":"AAAAUH%2F%2F%2BxI%3D","updated":"2014-01-06 06:00:01.000000000","message":"Done","commit_id":"74cd939b4d145f40af3169eba03e6fc231439b51"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"9570f5b42e297561ade3a77878d9a09d3e0c606a","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        for node in compute_nodes:"},{"line_number":213,"context_line":"            pci_devs \u003d pci_device.PciDeviceList.get_by_compute_node("},{"line_number":214,"context_line":"                context, node[\u0027id\u0027])"},{"line_number":215,"context_line":"            results \u003d results + [self._view_pcidevice(dev, detail)"},{"line_number":216,"context_line":"                                 for dev in pci_devs]"},{"line_number":217,"context_line":"        return results"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2F%2Frg%3D","line":215,"updated":"2014-01-04 11:01:10.000000000","message":"Use results.extend instead?","commit_id":"74cd939b4d145f40af3169eba03e6fc231439b51"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"5b2232b287fac4f829566fe4bb87d9f3e410dce9","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        for node in compute_nodes:"},{"line_number":213,"context_line":"            pci_devs \u003d pci_device.PciDeviceList.get_by_compute_node("},{"line_number":214,"context_line":"                context, node[\u0027id\u0027])"},{"line_number":215,"context_line":"            results \u003d results + [self._view_pcidevice(dev, detail)"},{"line_number":216,"context_line":"                                 for dev in pci_devs]"},{"line_number":217,"context_line":"        return results"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2F9uY%3D","line":215,"in_reply_to":"AAAAUH%2F%2F%2Frg%3D","updated":"2014-01-06 06:00:01.000000000","message":"Done","commit_id":"74cd939b4d145f40af3169eba03e6fc231439b51"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"2bf22e5a0fbfc02687f25626b7173db7dc9a8e1a","unresolved":false,"context_lines":[{"line_number":251,"context_line":"    def get_resources(self):"},{"line_number":252,"context_line":"        resources \u003d [extensions.ResourceExtension(ALIAS,"},{"line_number":253,"context_line":"                     PciController(),"},{"line_number":254,"context_line":"                     collection_actions\u003d{\u0027detail\u0027: \u0027GET\u0027})]"},{"line_number":255,"context_line":"        return resources"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    def get_controller_extensions(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2F%2BxM%3D","line":254,"updated":"2014-01-05 11:57:16.000000000","message":"this is needless, detail is default action","commit_id":"74cd939b4d145f40af3169eba03e6fc231439b51"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"5b2232b287fac4f829566fe4bb87d9f3e410dce9","unresolved":false,"context_lines":[{"line_number":251,"context_line":"    def get_resources(self):"},{"line_number":252,"context_line":"        resources \u003d [extensions.ResourceExtension(ALIAS,"},{"line_number":253,"context_line":"                     PciController(),"},{"line_number":254,"context_line":"                     collection_actions\u003d{\u0027detail\u0027: \u0027GET\u0027})]"},{"line_number":255,"context_line":"        return resources"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    def get_controller_extensions(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2F9uI%3D","line":254,"in_reply_to":"AAAAUH%2F%2F%2BxM%3D","updated":"2014-01-06 06:00:01.000000000","message":"@Alex, detail seems is not default action :)","commit_id":"74cd939b4d145f40af3169eba03e6fc231439b51"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"0b47f66ead46daa9e0af9c6850e0d42bd3c40a7f","unresolved":false,"context_lines":[{"line_number":148,"context_line":"    elem.set(\u0027product_id\u0027)"},{"line_number":149,"context_line":"    elem.set(\u0027status\u0027)"},{"line_number":150,"context_line":"    elem.set(\u0027compute_node_id\u0027)"},{"line_number":151,"context_line":"    if detail:"},{"line_number":152,"context_line":"        elem.set(\u0027dev_type\u0027)"},{"line_number":153,"context_line":"        elem.set(\u0027label\u0027)"},{"line_number":154,"context_line":"        elem.set(\u0027instance_uuid\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2FCiQ%3D","line":151,"updated":"2014-01-18 03:07:53.000000000","message":"Can PCI_DETAILS_KEYS be used here instead of explicitly listing them","commit_id":"7f604e735b0647bed6eaa68ff206f7dfafbf5cdf"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"7682510d9d63229d7a42ff3e00592be9ba0abd2e","unresolved":false,"context_lines":[{"line_number":148,"context_line":"    elem.set(\u0027product_id\u0027)"},{"line_number":149,"context_line":"    elem.set(\u0027status\u0027)"},{"line_number":150,"context_line":"    elem.set(\u0027compute_node_id\u0027)"},{"line_number":151,"context_line":"    if detail:"},{"line_number":152,"context_line":"        elem.set(\u0027dev_type\u0027)"},{"line_number":153,"context_line":"        elem.set(\u0027label\u0027)"},{"line_number":154,"context_line":"        elem.set(\u0027instance_uuid\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2FBzY%3D","line":151,"in_reply_to":"AAAAUH%2F%2FCiQ%3D","updated":"2014-01-18 13:30:14.000000000","message":"Done","commit_id":"7f604e735b0647bed6eaa68ff206f7dfafbf5cdf"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"0b47f66ead46daa9e0af9c6850e0d42bd3c40a7f","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        self.host_api \u003d compute.HostAPI()"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def _view_pcidevice(self, device, detail\u003dFalse):"},{"line_number":195,"context_line":"        dev_dict \u003d {\u0027id\u0027: device[\u0027id\u0027],"},{"line_number":196,"context_line":"                    \u0027address\u0027: device[\u0027address\u0027],"},{"line_number":197,"context_line":"                    \u0027vendor_id\u0027: device[\u0027vendor_id\u0027],"},{"line_number":198,"context_line":"                    \u0027product_id\u0027: device[\u0027product_id\u0027],"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2FChw%3D","line":195,"updated":"2014-01-18 03:07:53.000000000","message":"Might be simpler if you did the same for this as you did for detail keys and define a list to iterate over?","commit_id":"7f604e735b0647bed6eaa68ff206f7dfafbf5cdf"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"7682510d9d63229d7a42ff3e00592be9ba0abd2e","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        self.host_api \u003d compute.HostAPI()"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def _view_pcidevice(self, device, detail\u003dFalse):"},{"line_number":195,"context_line":"        dev_dict \u003d {\u0027id\u0027: device[\u0027id\u0027],"},{"line_number":196,"context_line":"                    \u0027address\u0027: device[\u0027address\u0027],"},{"line_number":197,"context_line":"                    \u0027vendor_id\u0027: device[\u0027vendor_id\u0027],"},{"line_number":198,"context_line":"                    \u0027product_id\u0027: device[\u0027product_id\u0027],"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2FBy8%3D","line":195,"in_reply_to":"AAAAUH%2F%2FChw%3D","updated":"2014-01-18 13:30:14.000000000","message":"Done","commit_id":"7f604e735b0647bed6eaa68ff206f7dfafbf5cdf"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"0b47f66ead46daa9e0af9c6850e0d42bd3c40a7f","unresolved":false,"context_lines":[{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    @extensions.expected_errors(())"},{"line_number":219,"context_line":"    @wsgi.serializers(xml\u003dPciDetailTemplate)"},{"line_number":220,"context_line":"    def detail(self, req):"},{"line_number":221,"context_line":"        results \u003d self._get_all_nodes_pci_devices(req, True)"},{"line_number":222,"context_line":"        return dict(pci_devices\u003dresults)"},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2FChk%3D","line":220,"updated":"2014-01-18 03:07:53.000000000","message":"Should have an authorize(context) here?","commit_id":"7f604e735b0647bed6eaa68ff206f7dfafbf5cdf"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"89ae5acbd54317338dfe75330ba582cfefcd4103","unresolved":false,"context_lines":[{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    @extensions.expected_errors(())"},{"line_number":219,"context_line":"    @wsgi.serializers(xml\u003dPciDetailTemplate)"},{"line_number":220,"context_line":"    def detail(self, req):"},{"line_number":221,"context_line":"        results \u003d self._get_all_nodes_pci_devices(req, True)"},{"line_number":222,"context_line":"        return dict(pci_devices\u003dresults)"},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2FBzw%3D","line":220,"in_reply_to":"AAAAUH%2F%2FChk%3D","updated":"2014-01-18 13:04:34.000000000","message":"sorry,  I moved it to the  line: 208","commit_id":"7f604e735b0647bed6eaa68ff206f7dfafbf5cdf"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d8f41fdea683614d1e94339b097a0cfb907c452b","unresolved":false,"context_lines":[{"line_number":225,"context_line":"    @wsgi.serializers(xml\u003dPciTemplate)"},{"line_number":226,"context_line":"    def show(self, req, id):"},{"line_number":227,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":228,"context_line":"        authorize(context)"},{"line_number":229,"context_line":"        try:"},{"line_number":230,"context_line":"            pci_dev \u003d pci_device.PciDevice.get_by_dev_id(context, id)"},{"line_number":231,"context_line":"        except exception.PciDeviceNotFoundById as e:"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2FB7Y%3D","line":228,"updated":"2014-01-18 10:02:08.000000000","message":"how about use separated policy check for each action","commit_id":"7f604e735b0647bed6eaa68ff206f7dfafbf5cdf"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"7682510d9d63229d7a42ff3e00592be9ba0abd2e","unresolved":false,"context_lines":[{"line_number":225,"context_line":"    @wsgi.serializers(xml\u003dPciTemplate)"},{"line_number":226,"context_line":"    def show(self, req, id):"},{"line_number":227,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":228,"context_line":"        authorize(context)"},{"line_number":229,"context_line":"        try:"},{"line_number":230,"context_line":"            pci_dev \u003d pci_device.PciDevice.get_by_dev_id(context, id)"},{"line_number":231,"context_line":"        except exception.PciDeviceNotFoundById as e:"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2FBy4%3D","line":228,"in_reply_to":"AAAAUH%2F%2FB7Y%3D","updated":"2014-01-18 13:30:14.000000000","message":"Done","commit_id":"7f604e735b0647bed6eaa68ff206f7dfafbf5cdf"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"0b47f66ead46daa9e0af9c6850e0d42bd3c40a7f","unresolved":false,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    @extensions.expected_errors(())"},{"line_number":237,"context_line":"    @wsgi.serializers(xml\u003dPciIndexTemplate)"},{"line_number":238,"context_line":"    def index(self, req):"},{"line_number":239,"context_line":"        results \u003d self._get_all_nodes_pci_devices(req, False)"},{"line_number":240,"context_line":"        return dict(pci_devices\u003dresults)"},{"line_number":241,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2FChg%3D","line":238,"updated":"2014-01-18 03:07:53.000000000","message":"should have an authorize(context) here?","commit_id":"7f604e735b0647bed6eaa68ff206f7dfafbf5cdf"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"0b47f66ead46daa9e0af9c6850e0d42bd3c40a7f","unresolved":false,"context_lines":[{"line_number":250,"context_line":"    def get_resources(self):"},{"line_number":251,"context_line":"        resources \u003d [extensions.ResourceExtension(ALIAS,"},{"line_number":252,"context_line":"                     PciController(),"},{"line_number":253,"context_line":"                     collection_actions\u003d{\u0027detail\u0027: \u0027GET\u0027})]"},{"line_number":254,"context_line":"        return resources"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    def get_controller_extensions(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2FCi0%3D","line":253,"updated":"2014-01-18 03:07:53.000000000","message":"I don\u0027t think the collection_actions is required","commit_id":"7f604e735b0647bed6eaa68ff206f7dfafbf5cdf"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"89ae5acbd54317338dfe75330ba582cfefcd4103","unresolved":false,"context_lines":[{"line_number":250,"context_line":"    def get_resources(self):"},{"line_number":251,"context_line":"        resources \u003d [extensions.ResourceExtension(ALIAS,"},{"line_number":252,"context_line":"                     PciController(),"},{"line_number":253,"context_line":"                     collection_actions\u003d{\u0027detail\u0027: \u0027GET\u0027})]"},{"line_number":254,"context_line":"        return resources"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    def get_controller_extensions(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2FBz4%3D","line":253,"in_reply_to":"AAAAUH%2F%2FCi0%3D","updated":"2014-01-18 13:04:34.000000000","message":"@Chris, you mean I should remove it ?   When I test the fuction, it\u0027s always wrong without the \"detail\" here. Sorry,  I do not quite understand this place. How should I do ? thanks!","commit_id":"7f604e735b0647bed6eaa68ff206f7dfafbf5cdf"}],"nova/tests/api/openstack/compute/plugins/v3/test_pci.py":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"9570f5b42e297561ade3a77878d9a09d3e0c606a","unresolved":false,"context_lines":[{"line_number":297,"context_line":"    def _fake_pci_device_get_all_by_node(self, context, node):"},{"line_number":298,"context_line":"        return [test_pci_device.fake_db_dev]"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    def test_index(self):"},{"line_number":301,"context_line":"        self.stubs.Set(db, \u0027compute_node_get_all\u0027,"},{"line_number":302,"context_line":"                       self._fake_compute_node_get_all)"},{"line_number":303,"context_line":"        self.stubs.Set(db, \u0027pci_device_get_all_by_node\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2F%2FqU%3D","line":300,"updated":"2014-01-04 11:01:10.000000000","message":"I think these would be better tests if there were multiple fake nodes with multiple fake pci devices rather than just a single node with a single device","commit_id":"74cd939b4d145f40af3169eba03e6fc231439b51"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"5b2232b287fac4f829566fe4bb87d9f3e410dce9","unresolved":false,"context_lines":[{"line_number":297,"context_line":"    def _fake_pci_device_get_all_by_node(self, context, node):"},{"line_number":298,"context_line":"        return [test_pci_device.fake_db_dev]"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    def test_index(self):"},{"line_number":301,"context_line":"        self.stubs.Set(db, \u0027compute_node_get_all\u0027,"},{"line_number":302,"context_line":"                       self._fake_compute_node_get_all)"},{"line_number":303,"context_line":"        self.stubs.Set(db, \u0027pci_device_get_all_by_node\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2F9t4%3D","line":300,"in_reply_to":"AAAAUH%2F%2F%2FqU%3D","updated":"2014-01-06 06:00:01.000000000","message":"Done","commit_id":"74cd939b4d145f40af3169eba03e6fc231439b51"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"9570f5b42e297561ade3a77878d9a09d3e0c606a","unresolved":false,"context_lines":[{"line_number":340,"context_line":"    def setUp(self):"},{"line_number":341,"context_line":"        super(PciSerializersTest, self).setUp()"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"    def test_index_serializer(self):"},{"line_number":344,"context_line":"        expected \u003d (\"\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e\\n\""},{"line_number":345,"context_line":"                    \u0027\u003cpci_devices\u003e\u003cpci_device status\u003d\"available\" \u0027"},{"line_number":346,"context_line":"                    \u0027product_id\u003d\"1520\" vendor_id\u003d\"8086\" compute_node_id\u003d\"1\" \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2F%2FqQ%3D","line":343,"updated":"2014-01-04 11:01:10.000000000","message":"Again I think it would be a better test if there was multiple pci device data for the test","commit_id":"74cd939b4d145f40af3169eba03e6fc231439b51"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"5b2232b287fac4f829566fe4bb87d9f3e410dce9","unresolved":false,"context_lines":[{"line_number":340,"context_line":"    def setUp(self):"},{"line_number":341,"context_line":"        super(PciSerializersTest, self).setUp()"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"    def test_index_serializer(self):"},{"line_number":344,"context_line":"        expected \u003d (\"\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e\\n\""},{"line_number":345,"context_line":"                    \u0027\u003cpci_devices\u003e\u003cpci_device status\u003d\"available\" \u0027"},{"line_number":346,"context_line":"                    \u0027product_id\u003d\"1520\" vendor_id\u003d\"8086\" compute_node_id\u003d\"1\" \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2F9tw%3D","line":343,"in_reply_to":"AAAAUH%2F%2F%2FqQ%3D","updated":"2014-01-06 06:00:01.000000000","message":"Done","commit_id":"74cd939b4d145f40af3169eba03e6fc231439b51"}],"nova/tests/api/openstack/compute/plugins/v3/test_pcis.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a309c7057f07f99b60444f7e3ddf153e1944905f","unresolved":false,"context_lines":[{"line_number":385,"context_line":"        self.mox.ReplayAll()"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"        def fake_enforce(context, act, target):"},{"line_number":388,"context_line":"            return True"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"        self.stubs.Set(nova.policy, \u0027enforce\u0027, fake_enforce)"},{"line_number":391,"context_line":"        req \u003d fakes.HTTPRequestV3.blank(\u0027/os-pci/1\u0027, use_admin_context\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FS7Y%3D","line":388,"updated":"2013-10-18 07:51:44.000000000","message":"set fake policy empty, then needn\u0027t this","commit_id":"389c19212f2f19a12014a281cebe941833882c02"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a309c7057f07f99b60444f7e3ddf153e1944905f","unresolved":false,"context_lines":[{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    def test_detail(self):"},{"line_number":405,"context_line":"        def fake_enforce(context, act, target):"},{"line_number":406,"context_line":"            return True"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"        self.stubs.Set(nova.policy, \u0027enforce\u0027, fake_enforce)"},{"line_number":409,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FS7U%3D","line":406,"updated":"2013-10-18 07:51:44.000000000","message":"ditto","commit_id":"389c19212f2f19a12014a281cebe941833882c02"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"32653c486e6ee2e020214afa4e41bb3abbe0b354","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import mox"},{"line_number":19,"context_line":"from webob import exc"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from nova.api.openstack.compute.plugins.v3 import pci"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2FFcY%3D","line":18,"updated":"2013-11-14 16:00:09.000000000","message":"Could you please using mock than mox? consensus is we need to using mock in new unit tests, thanks.","commit_id":"4f1a11d5a522555c40491f5d6f0356f3336d71c2"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"32653c486e6ee2e020214afa4e41bb3abbe0b354","unresolved":false,"context_lines":[{"line_number":170,"context_line":"                               \u0027status\u0027: \u0027available\u0027,"},{"line_number":171,"context_line":"                               \u0027updated_at\u0027: None,"},{"line_number":172,"context_line":"                               \u0027vendor_id\u0027: \u0027v\u0027}}"},{"line_number":173,"context_line":"        self.assertEqual(result, dist)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def test_show_error_id(self):"},{"line_number":176,"context_line":"        def fake_pci_device_get_by_id(context, id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2FFbk%3D","line":173,"updated":"2013-11-14 16:00:09.000000000","message":"nit: assertEqual(self, expected, observed, message\u003d\u0027\u0027), and apply for all the assertEqual in this file, thanks.","commit_id":"4f1a11d5a522555c40491f5d6f0356f3336d71c2"}],"nova/tests/integrated/v3/test_pci.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"2bf22e5a0fbfc02687f25626b7173db7dc9a8e1a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":"# Copyright 2013 Intel."},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2F%2BxE%3D","line":3,"updated":"2014-01-05 11:57:16.000000000","message":"we shoudn\u0027t touch this line","commit_id":"74cd939b4d145f40af3169eba03e6fc231439b51"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"5b2232b287fac4f829566fe4bb87d9f3e410dce9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":"# Copyright 2013 Intel."},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2F9tk%3D","line":3,"in_reply_to":"AAAAUH%2F%2F%2BxE%3D","updated":"2014-01-06 06:00:01.000000000","message":"Done","commit_id":"74cd939b4d145f40af3169eba03e6fc231439b51"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"9570f5b42e297561ade3a77878d9a09d3e0c606a","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        subs \u003d self._get_regexes()"},{"line_number":153,"context_line":"        self._verify_response(\u0027pci-show-resp\u0027, subs, response, 200)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def test_pci_index(self):"},{"line_number":156,"context_line":"        self.stubs.Set(db, \u0027pci_device_get_all_by_node\u0027,"},{"line_number":157,"context_line":"                       self._fake_pci_device_get_all_by_node)"},{"line_number":158,"context_line":"        response \u003d self._do_get(\u0027os-pci\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2F%2FqM%3D","line":155,"updated":"2014-01-04 11:01:10.000000000","message":"For both index and detail I think we would have better api samples if there was multiple fake pci devices rather than a single one","commit_id":"74cd939b4d145f40af3169eba03e6fc231439b51"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"5b2232b287fac4f829566fe4bb87d9f3e410dce9","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        subs \u003d self._get_regexes()"},{"line_number":153,"context_line":"        self._verify_response(\u0027pci-show-resp\u0027, subs, response, 200)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def test_pci_index(self):"},{"line_number":156,"context_line":"        self.stubs.Set(db, \u0027pci_device_get_all_by_node\u0027,"},{"line_number":157,"context_line":"                       self._fake_pci_device_get_all_by_node)"},{"line_number":158,"context_line":"        response \u003d self._do_get(\u0027os-pci\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2F9tg%3D","line":155,"in_reply_to":"AAAAUH%2F%2F%2FqM%3D","updated":"2014-01-06 06:00:01.000000000","message":"Done","commit_id":"74cd939b4d145f40af3169eba03e6fc231439b51"}]}
