)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"3cb8ca2deaf2ccd11ff3683406296c99730deaea","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Extends V3 os-hypervisor api for pci support"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"All pci passthrough code is merged into nova, but the APIs do not support."},{"line_number":10,"context_line":"this patch extends os-hypervisor to show PCI information for instance and"},{"line_number":11,"context_line":"compute node. This is a part of PCI APIs, for more information see the"},{"line_number":12,"context_line":"blueprint."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"AAAAUH%2F%2F8tg%3D","line":9,"updated":"2014-01-06 11:04:34.000000000","message":"do not support \u003d\u003e are not supported","commit_id":"cfa202f33c270800b46b1809255f077c14624c9e"}],"doc/v3/api_samples/os-hypervisors/hypervisors-detail-resp.json":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"5efd6353d9182768528253d8afe23a1b5c2388ef","unresolved":false,"context_lines":[{"line_number":14,"context_line":"            \"local_gb_used\": 0,"},{"line_number":15,"context_line":"            \"memory_mb\": 8192,"},{"line_number":16,"context_line":"            \"memory_mb_used\": 512,"},{"line_number":17,"context_line":"            \"pci_stats\": {},"},{"line_number":18,"context_line":"            \"running_vms\": 0,"},{"line_number":19,"context_line":"            \"service\": {"},{"line_number":20,"context_line":"                \"host\": \"e6a37ee802d74863ab8b91ade8f12a67\","}],"source_content_type":"application/json","patch_set":14,"id":"AAAATn%2F9XtA%3D","line":17,"updated":"2013-12-12 12:49:50.000000000","message":"Could you fake up some pci stats data for the tests so we have an example for the api sample?","commit_id":"35db6b71d1169a2929d9a18d1a8f9c5569cbb828"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"710b293438a85efb945a6bf080b1fec5c97c7e70","unresolved":false,"context_lines":[{"line_number":14,"context_line":"            \"local_gb_used\": 0,"},{"line_number":15,"context_line":"            \"memory_mb\": 8192,"},{"line_number":16,"context_line":"            \"memory_mb_used\": 512,"},{"line_number":17,"context_line":"            \"pci_stats\": {},"},{"line_number":18,"context_line":"            \"running_vms\": 0,"},{"line_number":19,"context_line":"            \"service\": {"},{"line_number":20,"context_line":"                \"host\": \"e6a37ee802d74863ab8b91ade8f12a67\","}],"source_content_type":"application/json","patch_set":14,"id":"AAAATn%2F9ReY%3D","line":17,"in_reply_to":"AAAATn%2F9XtA%3D","updated":"2013-12-13 08:03:17.000000000","message":"Done","commit_id":"35db6b71d1169a2929d9a18d1a8f9c5569cbb828"}],"doc/v3/api_samples/os-pci/hypervisors-pci-detail-resp.xml":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6d64ecbf9d928050f304975134e29cebc5d56f7c","unresolved":false,"context_lines":[{"line_number":2,"context_line":"\u003chypervisors xmlns:os-pci\u003d\"http://docs.openstack.org/compute/ext/os-pci/api/v3\"\u003e"},{"line_number":3,"context_line":"  \u003chypervisor vcpus_used\u003d\"0\" hypervisor_type\u003d\"fake\" local_gb_used\u003d\"0\" hypervisor_hostname\u003d\"fake-mini\" memory_mb_used\u003d\"512\" memory_mb\u003d\"8192\" current_workload\u003d\"0\" vcpus\u003d\"1\" cpu_info\u003d\"?\" running_vms\u003d\"0\" free_disk_gb\u003d\"1028\" hypervisor_version\u003d\"1\" disk_available_least\u003d\"0\" local_gb\u003d\"1028\" free_ram_mb\u003d\"7680\" id\u003d\"1\"\u003e"},{"line_number":4,"context_line":"    \u003cservice host\u003d\"043b3cacf6f34c90a7245151fc8ebcda\" id\u003d\"2\"/\u003e"},{"line_number":5,"context_line":"    \u003cos-pci:pci_stats xmlns:os-pci\u003d\"os-pci\"\u003e"},{"line_number":6,"context_line":"      \u003cos-pci:pci_stat\u003e"},{"line_number":7,"context_line":"        \u003ccount\u003e5\u003c/count\u003e"},{"line_number":8,"context_line":"        \u003ckeya\u003evaluea\u003c/keya\u003e"}],"source_content_type":"application/xml","patch_set":17,"id":"AAAAUH%2F%2F%2Bx8%3D","line":5,"updated":"2014-01-05 11:50:13.000000000","message":"xmlns:os-pci\u003d\"os-pci\" looks like shouldn\u0027t be there.","commit_id":"ee41dae21ee0d49a80fd5a9e690821492c11851a"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"eb1ec8d7d2f74885d2ce354f822d203e8d1c919e","unresolved":false,"context_lines":[{"line_number":2,"context_line":"\u003chypervisors xmlns:os-pci\u003d\"http://docs.openstack.org/compute/ext/os-pci/api/v3\"\u003e"},{"line_number":3,"context_line":"  \u003chypervisor vcpus_used\u003d\"0\" hypervisor_type\u003d\"fake\" local_gb_used\u003d\"0\" hypervisor_hostname\u003d\"fake-mini\" memory_mb_used\u003d\"512\" memory_mb\u003d\"8192\" current_workload\u003d\"0\" vcpus\u003d\"1\" cpu_info\u003d\"?\" running_vms\u003d\"0\" free_disk_gb\u003d\"1028\" hypervisor_version\u003d\"1\" disk_available_least\u003d\"0\" local_gb\u003d\"1028\" free_ram_mb\u003d\"7680\" id\u003d\"1\"\u003e"},{"line_number":4,"context_line":"    \u003cservice host\u003d\"043b3cacf6f34c90a7245151fc8ebcda\" id\u003d\"2\"/\u003e"},{"line_number":5,"context_line":"    \u003cos-pci:pci_stats xmlns:os-pci\u003d\"os-pci\"\u003e"},{"line_number":6,"context_line":"      \u003cos-pci:pci_stat\u003e"},{"line_number":7,"context_line":"        \u003ccount\u003e5\u003c/count\u003e"},{"line_number":8,"context_line":"        \u003ckeya\u003evaluea\u003c/keya\u003e"}],"source_content_type":"application/xml","patch_set":17,"id":"AAAAUH%2F%2F%2BL4%3D","line":5,"in_reply_to":"AAAAUH%2F%2F%2Bx8%3D","updated":"2014-01-06 01:38:01.000000000","message":"@Alex\nThe xmlutil doesn\u0027t support the \u0027:\u0027 in tag name like \"\u003cos-pci: pci_stats\u003e\" , look here :https://github.com/openstack/nova/blob/master/nova/api/openstack/xmlutil.py#L379","commit_id":"ee41dae21ee0d49a80fd5a9e690821492c11851a"}],"doc/v3/api_samples/os-pci/hypervisors-pci-show-resp.xml":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6d64ecbf9d928050f304975134e29cebc5d56f7c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e"},{"line_number":2,"context_line":"\u003chypervisor xmlns:os-pci\u003d\"http://docs.openstack.org/compute/ext/os-pci/api/v3\" vcpus_used\u003d\"0\" hypervisor_type\u003d\"fake\" local_gb_used\u003d\"0\" hypervisor_hostname\u003d\"fake-mini\" memory_mb_used\u003d\"512\" memory_mb\u003d\"8192\" current_workload\u003d\"0\" vcpus\u003d\"1\" cpu_info\u003d\"?\" running_vms\u003d\"0\" free_disk_gb\u003d\"1028\" hypervisor_version\u003d\"1\" disk_available_least\u003d\"0\" local_gb\u003d\"1028\" free_ram_mb\u003d\"7680\" id\u003d\"1\"\u003e"},{"line_number":3,"context_line":"  \u003cservice host\u003d\"043b3cacf6f34c90a7245151fc8ebcda\" id\u003d\"2\"/\u003e"},{"line_number":4,"context_line":"  \u003cos-pci:pci_stats xmlns:os-pci\u003d\"os-pci\"\u003e"},{"line_number":5,"context_line":"    \u003cos-pci:pci_stat\u003e"},{"line_number":6,"context_line":"      \u003ccount\u003e5\u003c/count\u003e"},{"line_number":7,"context_line":"      \u003ckeya\u003evaluea\u003c/keya\u003e"}],"source_content_type":"application/xml","patch_set":17,"id":"AAAAUH%2F%2F%2Bx4%3D","line":4,"updated":"2014-01-05 11:50:13.000000000","message":"ditto","commit_id":"ee41dae21ee0d49a80fd5a9e690821492c11851a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ba42d78557f941b1e68660ab3dda932cb2b8fe6d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e"},{"line_number":2,"context_line":"\u003chypervisor xmlns:os-pci\u003d\"http://docs.openstack.org/compute/ext/os-pci/api/v3\" vcpus_used\u003d\"0\" hypervisor_type\u003d\"fake\" local_gb_used\u003d\"0\" hypervisor_hostname\u003d\"fake-mini\" memory_mb_used\u003d\"512\" memory_mb\u003d\"8192\" current_workload\u003d\"0\" vcpus\u003d\"1\" cpu_info\u003d\"?\" running_vms\u003d\"0\" free_disk_gb\u003d\"1028\" hypervisor_version\u003d\"1\" disk_available_least\u003d\"0\" local_gb\u003d\"1028\" free_ram_mb\u003d\"7680\" id\u003d\"1\"\u003e"},{"line_number":3,"context_line":"  \u003cservice host\u003d\"043b3cacf6f34c90a7245151fc8ebcda\" id\u003d\"2\"/\u003e"},{"line_number":4,"context_line":"  \u003cos-pci:pci_stats xmlns:os-pci\u003d\"os-pci\"\u003e"},{"line_number":5,"context_line":"    \u003cos-pci:pci_stat\u003e"},{"line_number":6,"context_line":"      \u003ccount\u003e5\u003c/count\u003e"},{"line_number":7,"context_line":"      \u003ckeya\u003evaluea\u003c/keya\u003e"}],"source_content_type":"application/xml","patch_set":18,"id":"AAAAUH%2F%2FBo8%3D","line":4,"updated":"2014-01-18 16:01:17.000000000","message":"I still think xmlns:os-pci\u003d\"os-pic\" isn\u0027t right. I need a little to figure out what happend.","commit_id":"cfa202f33c270800b46b1809255f077c14624c9e"}],"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":"f5987ff92b4e5174d4c1a9405b3359d592d1fcdb","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"class PciHypervisorController(wsgi.Controller):"},{"line_number":112,"context_line":"    def _extend_hypervisor(self, hypervisor, compute_node):"},{"line_number":113,"context_line":"        hypervisor[\u0027pci_stats\u0027] \u003d jsonutils.loads(compute_node[\u0027pci_stats\u0027])"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    @wsgi.extends"},{"line_number":116,"context_line":"    def show(self, req, resp_obj, id):"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F8s5Q%3D","line":113,"updated":"2013-12-22 16:08:48.000000000","message":"this should be \u0027os-pci:pci_stats\u0027, and also need namespace for xml","commit_id":"03ee9f5625a8c5a26a103bf50a174682ae9b47a3"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c935922df63cdb73fabf6efd46f399eea6095d85","unresolved":false,"context_lines":[{"line_number":136,"context_line":"    name \u003d \"PCIAccess\""},{"line_number":137,"context_line":"    alias \u003d ALIAS"},{"line_number":138,"context_line":"    namespace \u003d \"http://docs.openstack.org/compute/ext/%s/api/v3\" % ALIAS"},{"line_number":139,"context_line":"    version \u003d 1"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def get_resources(self):"},{"line_number":142,"context_line":"        return []"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAT3%2F%2Fsj0%3D","line":139,"updated":"2014-01-03 10:04:38.000000000","message":"I think you need to bump the version here, but not sure if everyone agrees with me on that.","commit_id":"ee41dae21ee0d49a80fd5a9e690821492c11851a"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"0db1353b2a708dfe7622135cf1d644cd2386ca7a","unresolved":false,"context_lines":[{"line_number":136,"context_line":"    name \u003d \"PCIAccess\""},{"line_number":137,"context_line":"    alias \u003d ALIAS"},{"line_number":138,"context_line":"    namespace \u003d \"http://docs.openstack.org/compute/ext/%s/api/v3\" % ALIAS"},{"line_number":139,"context_line":"    version \u003d 1"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def get_resources(self):"},{"line_number":142,"context_line":"        return []"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2F%2FsY%3D","line":139,"in_reply_to":"AAAAT3%2F%2Fsj0%3D","updated":"2014-01-04 10:25:53.000000000","message":"Given the V3 API is still experimental I don\u0027t think its necessary yet. We\u0027ve been making a lot of completely backward incompatible changes elsewhere. Perhaps we start enforcing version bumping in I-3?","commit_id":"ee41dae21ee0d49a80fd5a9e690821492c11851a"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"23d21c72ba973c787c4737ce226ce2766228c9f1","unresolved":false,"context_lines":[{"line_number":136,"context_line":"    name \u003d \"PCIAccess\""},{"line_number":137,"context_line":"    alias \u003d ALIAS"},{"line_number":138,"context_line":"    namespace \u003d \"http://docs.openstack.org/compute/ext/%s/api/v3\" % ALIAS"},{"line_number":139,"context_line":"    version \u003d 1"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def get_resources(self):"},{"line_number":142,"context_line":"        return []"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2F8xY%3D","line":139,"in_reply_to":"AAAAUH%2F%2F%2FsY%3D","updated":"2014-01-06 10:50:04.000000000","message":"Yeah, I am easy on this one really. I just think we should get into good habits sooner rather than later.","commit_id":"ee41dae21ee0d49a80fd5a9e690821492c11851a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4aaa63c2ec6a009b75e5f586d3db4e56b7bfda50","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                                      selector\u003d\u0027%s:pci_stats\u0027 % Pci.alias,"},{"line_number":89,"context_line":"                                      colon_ns\u003dTrue,"},{"line_number":90,"context_line":"                                      root\u003dpci_stats,"},{"line_number":91,"context_line":"                                      ignore_sub_dicts\u003dTrue)"},{"line_number":92,"context_line":"    extra \u003d xmlutil.make_flat_dict(\u0027extra_info\u0027, selector\u003d\u0027extra_info\u0027)"},{"line_number":93,"context_line":"    pci_stat.append(extra)"},{"line_number":94,"context_line":"    pci_stats.append(pci_stat)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAUH%2F%2B9%2FM%3D","line":91,"updated":"2014-01-20 09:30:28.000000000","message":"Shuangtai, we should try this:\n\n    pci_stats \u003d xmlutil.TemplateElement(\u0027{%s}pci_stats\u0027 % Pci.namespace,\n                                        colon_ns\u003dFalse)\n    elem.append(pci_stats)\n    pci_stat \u003d xmlutil.make_flat_dict(\u0027{%s}pci_stat\u0027 % Pci.namespace,\n                                      selector\u003d\u0027%s:pci_stats\u0027 % Pci.alias,\n                                      colon_ns\u003dFalse,\n                                      root\u003dpci_stats,\n                                      ignore_sub_dicts\u003dTrue)","commit_id":"cfa202f33c270800b46b1809255f077c14624c9e"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"4a4df99eec3be76b90abca2102771a51a3f43d32","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                                      selector\u003d\u0027%s:pci_stats\u0027 % Pci.alias,"},{"line_number":89,"context_line":"                                      colon_ns\u003dTrue,"},{"line_number":90,"context_line":"                                      root\u003dpci_stats,"},{"line_number":91,"context_line":"                                      ignore_sub_dicts\u003dTrue)"},{"line_number":92,"context_line":"    extra \u003d xmlutil.make_flat_dict(\u0027extra_info\u0027, selector\u003d\u0027extra_info\u0027)"},{"line_number":93,"context_line":"    pci_stat.append(extra)"},{"line_number":94,"context_line":"    pci_stats.append(pci_stat)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAUH%2F%2B8YM%3D","line":91,"in_reply_to":"AAAAUH%2F%2B9%2FM%3D","updated":"2014-01-20 15:05:15.000000000","message":"OH, Sorry for seeing this late, I will file a new patch to change this and the sever extension, Alex ,thanks!","commit_id":"cfa202f33c270800b46b1809255f077c14624c9e"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"156bf23f15c880c2e3155749678ff6dd5f7cfaa3","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        return xmlutil.SlaveTemplate(root, 1, nsmap\u003d{Pci.alias: Pci.namespace})"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"class HypervisorDetailTemplate(xmlutil.TemplateBuilder):"},{"line_number":105,"context_line":"    def construct(self):"},{"line_number":106,"context_line":"        root \u003d xmlutil.TemplateElement(\u0027hypervisors\u0027)"},{"line_number":107,"context_line":"        elem \u003d xmlutil.SubTemplateElement(root, \u0027hypervisor\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAUH%2F%2FS6w%3D","line":104,"updated":"2014-01-15 11:28:01.000000000","message":"For consistency should this be called PciHypervisorDetailTemplate?","commit_id":"cfa202f33c270800b46b1809255f077c14624c9e"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"7e78e17170370f4932f6e3f8baf2c23df3c05e91","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        return xmlutil.SlaveTemplate(root, 1, nsmap\u003d{Pci.alias: Pci.namespace})"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"class HypervisorDetailTemplate(xmlutil.TemplateBuilder):"},{"line_number":105,"context_line":"    def construct(self):"},{"line_number":106,"context_line":"        root \u003d xmlutil.TemplateElement(\u0027hypervisors\u0027)"},{"line_number":107,"context_line":"        elem \u003d xmlutil.SubTemplateElement(root, \u0027hypervisor\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAUH%2F%2FSo8%3D","line":104,"in_reply_to":"AAAAUH%2F%2FS6w%3D","updated":"2014-01-15 12:23:24.000000000","message":"@Chris, if  this patch needs to be rebased, I will change it tomorrow, or i will  submit a small patch, thanks very much.","commit_id":"cfa202f33c270800b46b1809255f077c14624c9e"}],"nova/api/openstack/xmlutil.py":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"5efd6353d9182768528253d8afe23a1b5c2388ef","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    return list(obj.items())"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"def get_items_without_dic(obj):"},{"line_number":105,"context_line":"    \"\"\"Get items in obj but remove the item containing dict.\"\"\""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    obj_list \u003d list(obj.items())"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9XsM%3D","line":104,"updated":"2013-12-12 12:49:50.000000000","message":"typo? get_items_without_dict","commit_id":"35db6b71d1169a2929d9a18d1a8f9c5569cbb828"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"710b293438a85efb945a6bf080b1fec5c97c7e70","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    return list(obj.items())"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"def get_items_without_dic(obj):"},{"line_number":105,"context_line":"    \"\"\"Get items in obj but remove the item containing dict.\"\"\""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    obj_list \u003d list(obj.items())"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9ReE%3D","line":104,"in_reply_to":"AAAATn%2F9XsM%3D","updated":"2013-12-13 08:03:17.000000000","message":"Done","commit_id":"35db6b71d1169a2929d9a18d1a8f9c5569cbb828"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"5efd6353d9182768528253d8afe23a1b5c2388ef","unresolved":false,"context_lines":[{"line_number":902,"context_line":"    return elem"},{"line_number":903,"context_line":""},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"def make_flat_dict(name, root\u003dNone, selector\u003dNone, subselector\u003dNone,"},{"line_number":906,"context_line":"                   ns\u003dNone, colon_ns\u003dFalse, enable_dicts\u003dFalse):"},{"line_number":907,"context_line":"    \"\"\""},{"line_number":908,"context_line":"    Utility for simple XML templates that traditionally used"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9XsA%3D","line":905,"updated":"2013-12-12 12:49:50.000000000","message":"I don\u0027t think you should insert a new optional parameter at the start","commit_id":"35db6b71d1169a2929d9a18d1a8f9c5569cbb828"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"710b293438a85efb945a6bf080b1fec5c97c7e70","unresolved":false,"context_lines":[{"line_number":902,"context_line":"    return elem"},{"line_number":903,"context_line":""},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"def make_flat_dict(name, root\u003dNone, selector\u003dNone, subselector\u003dNone,"},{"line_number":906,"context_line":"                   ns\u003dNone, colon_ns\u003dFalse, enable_dicts\u003dFalse):"},{"line_number":907,"context_line":"    \"\"\""},{"line_number":908,"context_line":"    Utility for simple XML templates that traditionally used"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9ReQ%3D","line":905,"in_reply_to":"AAAATn%2F9XsA%3D","updated":"2013-12-13 08:03:17.000000000","message":"Done","commit_id":"35db6b71d1169a2929d9a18d1a8f9c5569cbb828"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"5efd6353d9182768528253d8afe23a1b5c2388ef","unresolved":false,"context_lines":[{"line_number":903,"context_line":""},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"def make_flat_dict(name, root\u003dNone, selector\u003dNone, subselector\u003dNone,"},{"line_number":906,"context_line":"                   ns\u003dNone, colon_ns\u003dFalse, enable_dicts\u003dFalse):"},{"line_number":907,"context_line":"    \"\"\""},{"line_number":908,"context_line":"    Utility for simple XML templates that traditionally used"},{"line_number":909,"context_line":"    XMLDictSerializer with no metadata.  Returns a template element"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9WLI%3D","line":906,"updated":"2013-12-12 12:49:50.000000000","message":"how about ignore_sub_dicts instead since it appears thats what the flag does - ignore dictionaries in the dictionary.","commit_id":"35db6b71d1169a2929d9a18d1a8f9c5569cbb828"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"710b293438a85efb945a6bf080b1fec5c97c7e70","unresolved":false,"context_lines":[{"line_number":903,"context_line":""},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"def make_flat_dict(name, root\u003dNone, selector\u003dNone, subselector\u003dNone,"},{"line_number":906,"context_line":"                   ns\u003dNone, colon_ns\u003dFalse, enable_dicts\u003dFalse):"},{"line_number":907,"context_line":"    \"\"\""},{"line_number":908,"context_line":"    Utility for simple XML templates that traditionally used"},{"line_number":909,"context_line":"    XMLDictSerializer with no metadata.  Returns a template element"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9ReM%3D","line":906,"in_reply_to":"AAAATn%2F9WLI%3D","updated":"2013-12-13 08:03:17.000000000","message":"Done","commit_id":"35db6b71d1169a2929d9a18d1a8f9c5569cbb828"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"5efd6353d9182768528253d8afe23a1b5c2388ef","unresolved":false,"context_lines":[{"line_number":916,"context_line":"                         objects, not dictionaries containing nested lists or"},{"line_number":917,"context_line":"                         dictionaries.if True, Allows the dictionary contain"},{"line_number":918,"context_line":"                         dictionaries but doesn\u0027t work on the nested"},{"line_number":919,"context_line":"                         dictionaries"},{"line_number":920,"context_line":"    \"\"\""},{"line_number":921,"context_line":""},{"line_number":922,"context_line":"    # Set up the names we need..."}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9WK8%3D","line":919,"updated":"2013-12-12 12:49:50.000000000","message":"How about:\n\n:param ignore_sub_dicts: If True, ignores any dict objects inside the object. If False, causes an error if there is a dict object present.","commit_id":"35db6b71d1169a2929d9a18d1a8f9c5569cbb828"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"710b293438a85efb945a6bf080b1fec5c97c7e70","unresolved":false,"context_lines":[{"line_number":916,"context_line":"                         objects, not dictionaries containing nested lists or"},{"line_number":917,"context_line":"                         dictionaries.if True, Allows the dictionary contain"},{"line_number":918,"context_line":"                         dictionaries but doesn\u0027t work on the nested"},{"line_number":919,"context_line":"                         dictionaries"},{"line_number":920,"context_line":"    \"\"\""},{"line_number":921,"context_line":""},{"line_number":922,"context_line":"    # Set up the names we need..."}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9ReI%3D","line":919,"in_reply_to":"AAAATn%2F9WK8%3D","updated":"2013-12-13 08:03:17.000000000","message":"Done","commit_id":"35db6b71d1169a2929d9a18d1a8f9c5569cbb828"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"5b862f3b9ff5be5f2f171950d7fbf19898d355ca","unresolved":false,"context_lines":[{"line_number":904,"context_line":""},{"line_number":905,"context_line":"def make_flat_dict(name, selector\u003dNone, subselector\u003dNone,"},{"line_number":906,"context_line":"                   ns\u003dNone, colon_ns\u003dFalse, root\u003dNone,"},{"line_number":907,"context_line":"                   ignore_sub_dicts\u003dFalse):"},{"line_number":908,"context_line":"    \"\"\""},{"line_number":909,"context_line":"    Utility for simple XML templates that traditionally used"},{"line_number":910,"context_line":"    XMLDictSerializer with no metadata.  Returns a template element"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F9RYs%3D","line":907,"updated":"2013-12-13 08:45:00.000000000","message":"Is this a common case which worth to be added here? I am wondering whether this is the right way to go, how about to me keeping the logic which just to deal with this case in api\u0027s related method?","commit_id":"5c23494a25d9bdbfb45f79c19e3fe5da0164efd9"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"9251fa9a46b118741039e7fd8764b1be6d3340e2","unresolved":false,"context_lines":[{"line_number":904,"context_line":""},{"line_number":905,"context_line":"def make_flat_dict(name, selector\u003dNone, subselector\u003dNone,"},{"line_number":906,"context_line":"                   ns\u003dNone, colon_ns\u003dFalse, root\u003dNone,"},{"line_number":907,"context_line":"                   ignore_sub_dicts\u003dFalse):"},{"line_number":908,"context_line":"    \"\"\""},{"line_number":909,"context_line":"    Utility for simple XML templates that traditionally used"},{"line_number":910,"context_line":"    XMLDictSerializer with no metadata.  Returns a template element"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F9Pko%3D","line":907,"in_reply_to":"AAAATn%2F9RYs%3D","updated":"2013-12-13 15:45:18.000000000","message":"@GUohui,\nthis change  makes the common function more scalability. I think dictinoary containing nested dictionariies is a common case in APIs\u0027s result?this not only solve my problem, but also can be used in common case, just not dictionary cotaining nested list. Specifically?the case we do not know the key name in the dictinary.","commit_id":"5c23494a25d9bdbfb45f79c19e3fe5da0164efd9"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"0db1353b2a708dfe7622135cf1d644cd2386ca7a","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"def get_items_without_dict(obj):"},{"line_number":107,"context_line":"    \"\"\"Get items in obj but remove the item containing dict.\"\"\""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    obj_list \u003d list(obj.items())"},{"line_number":110,"context_line":"    for item in obj_list:"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2F%2FsQ%3D","line":107,"updated":"2014-01-04 10:25:53.000000000","message":"How about: \"Get items in obj but omit any items containing a dict\"","commit_id":"ee41dae21ee0d49a80fd5a9e690821492c11851a"}],"nova/tests/api/openstack/compute/plugins/v3/test_pcis.py":[{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"534cbc2883d5dac3fb2237e94069e1cb174ee727","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from lxml import etree"},{"line_number":19,"context_line":"import mox"},{"line_number":20,"context_line":"from nova.api.openstack.compute.plugins.v3 import pci"},{"line_number":21,"context_line":"from nova.api.openstack.compute.plugins.v3 import servers"},{"line_number":22,"context_line":"from nova.api.openstack import wsgi"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2F6sE%3D","line":19,"updated":"2013-10-25 09:03:43.000000000","message":"nit: there should be a blank line between the third party import and os import.","commit_id":"aa6b576f43bb2f7be75aff04602151f0f34f70d4"}],"nova/tests/integrated/v3/test_hypervisors.py":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"5efd6353d9182768528253d8afe23a1b5c2388ef","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        subs.update(self._get_regexes())"},{"line_number":85,"context_line":"        self._verify_response(\u0027hypervisors-show-resp\u0027, subs, response, 200)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def test_hypervisors_show_with_pci_stats(self):"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        def fake_compute_node_get(context, id):"},{"line_number":90,"context_line":"            self.fake_compute_node[\u0027pci_stats\u0027] \u003d jsonutils.dumps("}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9XsU%3D","line":87,"updated":"2013-12-12 12:49:50.000000000","message":"This becomes an integral part of hypervisors show (eg its not only enabled when an extension is loaded) so I think its fine just to modify test_hypervisors_show to have the example pci_stats fake data","commit_id":"35db6b71d1169a2929d9a18d1a8f9c5569cbb828"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"710b293438a85efb945a6bf080b1fec5c97c7e70","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        subs.update(self._get_regexes())"},{"line_number":85,"context_line":"        self._verify_response(\u0027hypervisors-show-resp\u0027, subs, response, 200)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def test_hypervisors_show_with_pci_stats(self):"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        def fake_compute_node_get(context, id):"},{"line_number":90,"context_line":"            self.fake_compute_node[\u0027pci_stats\u0027] \u003d jsonutils.dumps("}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9ReA%3D","line":87,"in_reply_to":"AAAATn%2F9XsU%3D","updated":"2013-12-13 08:03:17.000000000","message":"Done","commit_id":"35db6b71d1169a2929d9a18d1a8f9c5569cbb828"}],"nova/tests/integrated/v3/test_pci.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7e211aee68bcfe95836d38613b6c553bcf2d6404","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    ctype \u003d \u0027xml\u0027"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"class ExtendedHyervisorPciSampleJsonTest(api_sample_base.ApiSampleTestBaseV3):"},{"line_number":45,"context_line":"    extra_extensions_to_load \u003d [\u0027os-hypervisors\u0027]"},{"line_number":46,"context_line":"    extension_name \u003d \u0027os-pci\u0027"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F8s44%3D","line":44,"updated":"2013-12-22 16:14:40.000000000","message":"looks like ExtendedHyervisorPciSampleJsonTest can be based on \u0027test_hypervisors.HypervisorsSampleJsonTests\u0027","commit_id":"03ee9f5625a8c5a26a103bf50a174682ae9b47a3"},{"author":{"_account_id":7641,"name":"Shuangtai Tian","email":"hitianst@gmail.com","username":"shuangtai"},"change_message_id":"7778844f8ade9af61cc4256130fe6fca0fc632d3","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    ctype \u003d \u0027xml\u0027"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"class ExtendedHyervisorPciSampleJsonTest(api_sample_base.ApiSampleTestBaseV3):"},{"line_number":45,"context_line":"    extra_extensions_to_load \u003d [\u0027os-hypervisors\u0027]"},{"line_number":46,"context_line":"    extension_name \u003d \u0027os-pci\u0027"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F8sdU%3D","line":44,"in_reply_to":"AAAATn%2F8s44%3D","updated":"2013-12-23 03:56:04.000000000","message":"@Alex, it does not seems necessary, because the  HypervisorsSampleJsonTests is not a base class. here only test show and detial is enough.","commit_id":"03ee9f5625a8c5a26a103bf50a174682ae9b47a3"}]}
