)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"e5772953b95fc9a745f97a09b2bfa940e4060b8c","unresolved":false,"context_lines":[{"line_number":9,"context_line":"The drivers now return diagnostics for a requested VM."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Implements blueprint vmware-vm-diagnostics"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I08f199f7e3b4edafe60ce73d2fc833f8c5a5574e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAATn%2F%2B6%2B8%3D","line":12,"updated":"2013-11-18 15:16:55.000000000","message":"DocImpact","commit_id":"6b5f25aed193464b41c74942a42360340b7346ff"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"3e10bff2f34115b64677ee8aeab496334f11e5ae","unresolved":false,"context_lines":[{"line_number":9,"context_line":"The drivers now return diagnostics for a requested VM."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Implements blueprint vmware-vm-diagnostics"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I08f199f7e3b4edafe60ce73d2fc833f8c5a5574e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAATn%2F%2B604%3D","line":12,"in_reply_to":"AAAATn%2F%2B6%2B8%3D","updated":"2013-11-18 15:38:58.000000000","message":"Done","commit_id":"6b5f25aed193464b41c74942a42360340b7346ff"}],"nova/tests/virt/vmwareapi/test_vmwareapi.py":[{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"81d8f0c1cfb2e869c875c4256c456a1941bf1a92","unresolved":false,"context_lines":[{"line_number":638,"context_line":"    def test_get_diagnostics(self):"},{"line_number":639,"context_line":"        self._create_vm()"},{"line_number":640,"context_line":"        diagnostics \u003d self.conn.get_diagnostics({\u0027uuid\u0027: \u0027fake-uuid\u0027,"},{"line_number":641,"context_line":"                                                 \u0027node\u0027: self.instance_node})"},{"line_number":642,"context_line":""},{"line_number":643,"context_line":"    def test_get_console_output(self):"},{"line_number":644,"context_line":"        self._create_instance_in_the_db()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FnRM%3D","line":641,"updated":"2013-10-12 20:15:46.000000000","message":"This doesn\u0027t make any statement about the shape of the returned diagnostics. Are they a dict? A set? An object?\n\nI think it would be good to have a matcher defined in nova/tests/virt/matchers.py (or something like that) that checks a diagnostics object matches the top level requirements, then you could do:\n\n self. _create_vm()\n self.assertThat(self.conn.get_diagnostics({...}), IsValidDiagnostic())","commit_id":"e3a0d1cdf2e60044e0a03339ed78867749c4dbfa"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"b9a286339513cc4bfe8d12d98808a09272e3288c","unresolved":false,"context_lines":[{"line_number":638,"context_line":"    def test_get_diagnostics(self):"},{"line_number":639,"context_line":"        self._create_vm()"},{"line_number":640,"context_line":"        diagnostics \u003d self.conn.get_diagnostics({\u0027uuid\u0027: \u0027fake-uuid\u0027,"},{"line_number":641,"context_line":"                                                 \u0027node\u0027: self.instance_node})"},{"line_number":642,"context_line":""},{"line_number":643,"context_line":"    def test_get_console_output(self):"},{"line_number":644,"context_line":"        self._create_instance_in_the_db()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2Fm68%3D","line":641,"in_reply_to":"AAAATH%2F%2FnRM%3D","updated":"2013-10-13 07:27:25.000000000","message":"good point. I\u0027ll do that.","commit_id":"e3a0d1cdf2e60044e0a03339ed78867749c4dbfa"}],"nova/virt/vmwareapi/vim.py":[{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"81d8f0c1cfb2e869c875c4256c456a1941bf1a92","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    return moref"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def asdict(obj):"},{"line_number":55,"context_line":"    \"\"\"Convert Suds object into serializable format.\"\"\""},{"line_number":56,"context_line":"    d \u003d {}"},{"line_number":57,"context_line":"    for k, v in suds.sudsobject.asdict(obj).iteritems():"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FnRI%3D","line":54,"updated":"2013-10-12 20:15:46.000000000","message":"pep8 - as_dict - please.","commit_id":"e3a0d1cdf2e60044e0a03339ed78867749c4dbfa"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"b9a286339513cc4bfe8d12d98808a09272e3288c","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    return moref"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def asdict(obj):"},{"line_number":55,"context_line":"    \"\"\"Convert Suds object into serializable format.\"\"\""},{"line_number":56,"context_line":"    d \u003d {}"},{"line_number":57,"context_line":"    for k, v in suds.sudsobject.asdict(obj).iteritems():"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2Fm64%3D","line":54,"in_reply_to":"AAAATH%2F%2FnRI%3D","updated":"2013-10-13 07:27:25.000000000","message":"Done","commit_id":"e3a0d1cdf2e60044e0a03339ed78867749c4dbfa"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"81d8f0c1cfb2e869c875c4256c456a1941bf1a92","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    d \u003d {}"},{"line_number":57,"context_line":"    for k, v in suds.sudsobject.asdict(obj).iteritems():"},{"line_number":58,"context_line":"        if isinstance(v, list):"},{"line_number":59,"context_line":"            continue"},{"line_number":60,"context_line":"        else:"},{"line_number":61,"context_line":"            d[k] \u003d v"},{"line_number":62,"context_line":"    return d"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FnQ8%3D","line":59,"updated":"2013-10-12 20:15:46.000000000","message":"You skip all lists? That seems surprising... I\u0027d love to see some tests for this function.","commit_id":"e3a0d1cdf2e60044e0a03339ed78867749c4dbfa"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"b9a286339513cc4bfe8d12d98808a09272e3288c","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    d \u003d {}"},{"line_number":57,"context_line":"    for k, v in suds.sudsobject.asdict(obj).iteritems():"},{"line_number":58,"context_line":"        if isinstance(v, list):"},{"line_number":59,"context_line":"            continue"},{"line_number":60,"context_line":"        else:"},{"line_number":61,"context_line":"            d[k] \u003d v"},{"line_number":62,"context_line":"    return d"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2Fm0Y%3D","line":59,"in_reply_to":"AAAATH%2F%2FnQ8%3D","updated":"2013-10-13 07:27:25.000000000","message":"the reason that the lists were skipped was that this would print out too much information. i\u0027ll change the function name\nbtw this is tested now following your comments on the unit tests","commit_id":"e3a0d1cdf2e60044e0a03339ed78867749c4dbfa"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"a2d8cfa7736a6e69784adbf696be2134daceb9fb","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def base_as_dict(obj):"},{"line_number":55,"context_line":"    \"\"\"Convert Suds object base entries into serializable format.\"\"\""},{"line_number":56,"context_line":"    d \u003d {}"},{"line_number":57,"context_line":"    for k, v in suds.sudsobject.asdict(obj).iteritems():"},{"line_number":58,"context_line":"        if isinstance(v, list):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2FmwE%3D","line":55,"updated":"2013-10-13 09:31:54.000000000","message":"I\u0027m find with the list skipping, but please put a note to that effect in the docstring (will aid future folk).","commit_id":"f6ded6724aec46cdf68bd8f563b66a8d7cb29103"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d6d774bfdcfd5ecdfaf7bca4d62fff39d67075b1","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def base_as_dict(obj):"},{"line_number":55,"context_line":"    \"\"\"Convert Suds object base entries into serializable format.\"\"\""},{"line_number":56,"context_line":"    d \u003d {}"},{"line_number":57,"context_line":"    for k, v in suds.sudsobject.asdict(obj).iteritems():"},{"line_number":58,"context_line":"        if isinstance(v, list):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2FgJQ%3D","line":55,"in_reply_to":"AAAATH%2F%2FmwE%3D","updated":"2013-10-15 10:58:28.000000000","message":"i have added support that the calling function can add the depth of the list to print out\nplease note that the unit tests also cover this","commit_id":"f6ded6724aec46cdf68bd8f563b66a8d7cb29103"}],"nova/virt/vmwareapi/vmops.py":[{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"81d8f0c1cfb2e869c875c4256c456a1941bf1a92","unresolved":false,"context_lines":[{"line_number":1299,"context_line":"                                                   \"continue_to_get_objects\","},{"line_number":1300,"context_line":"                                                   token)"},{"line_number":1301,"context_line":"            else:"},{"line_number":1302,"context_line":"                break"},{"line_number":1303,"context_line":"        return diagnostics"},{"line_number":1304,"context_line":""},{"line_number":1305,"context_line":"    def get_diagnostics(self, instance):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FnQw%3D","line":1302,"updated":"2013-10-12 20:15:46.000000000","message":"I had to read this twice to understand whats going on: if I\u0027m correct you\u0027re paginating through an object list until it\u0027s expired, and when you encouter diagnostic info in the list you capture it.\n\nI have two suggestions:\n - one, once you\u0027ve captured all the properties you want, you could stop paginating as you don\u0027t need more info.\n - two, if you factored the \u0027for elem in props.objects\u0027 bit out you could make this clearer:\n\n def _get_diagnostic_from_object_properties(self, props):\n     wanted_props \u003d set(\n         [\u0027summary.config\u0027, \u0027summary.quickStats\u0027, \u0027summary.runtime\u0027])\n     def extract_diagnostics_from_page():\n         for elem in props.objects:\n             if prop.name in wanted_props:\n                 return vim.as_dict(prop.val)\n while props:\n     diagnostics.update(_extract_diagnostics_from_page(props))\n     next_page_token \u003d vm_util._get_token(props)\n     if not next_page_token:\n         break\n     props \u003d self._session._call_method(\n         vim_util, \"continue_to_get_objects\", next_page_token)\n\nTo me this is a lot clearer (as well as being a few lines shorter :)).\n\nOf course, I may have misunderstood what it\u0027s doing.","commit_id":"e3a0d1cdf2e60044e0a03339ed78867749c4dbfa"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"b9a286339513cc4bfe8d12d98808a09272e3288c","unresolved":false,"context_lines":[{"line_number":1299,"context_line":"                                                   \"continue_to_get_objects\","},{"line_number":1300,"context_line":"                                                   token)"},{"line_number":1301,"context_line":"            else:"},{"line_number":1302,"context_line":"                break"},{"line_number":1303,"context_line":"        return diagnostics"},{"line_number":1304,"context_line":""},{"line_number":1305,"context_line":"    def get_diagnostics(self, instance):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2Fmzg%3D","line":1302,"in_reply_to":"AAAATH%2F%2FnQw%3D","updated":"2013-10-13 07:27:25.000000000","message":"Thanks. I have updated following your suggestions.","commit_id":"e3a0d1cdf2e60044e0a03339ed78867749c4dbfa"},{"author":{"_account_id":7575,"name":"Sabari","email":"smurugesan@vmware.com","username":"sabari"},"change_message_id":"3a878f959df565bc078827c7dd415244da627c68","unresolved":false,"context_lines":[{"line_number":1288,"context_line":"            for elem in props.objects:"},{"line_number":1289,"context_line":"                for prop in elem.propSet:"},{"line_number":1290,"context_line":"                    if prop.name in wanted_props:"},{"line_number":1291,"context_line":"                        values \u003d prop.val"},{"line_number":1292,"context_line":"                        prop_dict \u003d vim.base_as_dict(prop.val)"},{"line_number":1293,"context_line":"                        diagnostics.update(prop_dict)"},{"line_number":1294,"context_line":"            token \u003d vm_util._get_token(props)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2Fh68%3D","line":1291,"updated":"2013-10-14 22:38:27.000000000","message":"values is unused elsewhere.","commit_id":"f6ded6724aec46cdf68bd8f563b66a8d7cb29103"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d6d774bfdcfd5ecdfaf7bca4d62fff39d67075b1","unresolved":false,"context_lines":[{"line_number":1288,"context_line":"            for elem in props.objects:"},{"line_number":1289,"context_line":"                for prop in elem.propSet:"},{"line_number":1290,"context_line":"                    if prop.name in wanted_props:"},{"line_number":1291,"context_line":"                        values \u003d prop.val"},{"line_number":1292,"context_line":"                        prop_dict \u003d vim.base_as_dict(prop.val)"},{"line_number":1293,"context_line":"                        diagnostics.update(prop_dict)"},{"line_number":1294,"context_line":"            token \u003d vm_util._get_token(props)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2FgIg%3D","line":1291,"in_reply_to":"AAAATH%2F%2Fh68%3D","updated":"2013-10-15 10:58:28.000000000","message":"Done","commit_id":"f6ded6724aec46cdf68bd8f563b66a8d7cb29103"},{"author":{"_account_id":7575,"name":"Sabari","email":"smurugesan@vmware.com","username":"sabari"},"change_message_id":"3a878f959df565bc078827c7dd415244da627c68","unresolved":false,"context_lines":[{"line_number":1289,"context_line":"                for prop in elem.propSet:"},{"line_number":1290,"context_line":"                    if prop.name in wanted_props:"},{"line_number":1291,"context_line":"                        values \u003d prop.val"},{"line_number":1292,"context_line":"                        prop_dict \u003d vim.base_as_dict(prop.val)"},{"line_number":1293,"context_line":"                        diagnostics.update(prop_dict)"},{"line_number":1294,"context_line":"            token \u003d vm_util._get_token(props)"},{"line_number":1295,"context_line":"            if not token:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2Fh6o%3D","line":1292,"updated":"2013-10-14 22:38:27.000000000","message":"I am unclear why we need this. Can you please elaborate. Thanks!","commit_id":"f6ded6724aec46cdf68bd8f563b66a8d7cb29103"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d6d774bfdcfd5ecdfaf7bca4d62fff39d67075b1","unresolved":false,"context_lines":[{"line_number":1289,"context_line":"                for prop in elem.propSet:"},{"line_number":1290,"context_line":"                    if prop.name in wanted_props:"},{"line_number":1291,"context_line":"                        values \u003d prop.val"},{"line_number":1292,"context_line":"                        prop_dict \u003d vim.base_as_dict(prop.val)"},{"line_number":1293,"context_line":"                        diagnostics.update(prop_dict)"},{"line_number":1294,"context_line":"            token \u003d vm_util._get_token(props)"},{"line_number":1295,"context_line":"            if not token:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2FgH8%3D","line":1292,"in_reply_to":"AAAATH%2F%2Fh6o%3D","updated":"2013-10-15 10:58:28.000000000","message":"the data returned by the suds is a list of key values. we need to output this as a dictionary. for each object returned - we need to create the dictionary. that is the config, quiakstats and runtime stats","commit_id":"f6ded6724aec46cdf68bd8f563b66a8d7cb29103"},{"author":{"_account_id":7575,"name":"Sabari","email":"smurugesan@vmware.com","username":"sabari"},"change_message_id":"3a878f959df565bc078827c7dd415244da627c68","unresolved":false,"context_lines":[{"line_number":1307,"context_line":"                          \"summary.quickStats\","},{"line_number":1308,"context_line":"                          \"summary.runtime\"]"},{"line_number":1309,"context_line":"        vm_props \u003d self._session._call_method(vim_util,"},{"line_number":1310,"context_line":"                    \"get_object_properties\", None, vm_ref, \"VirtualMachine\","},{"line_number":1311,"context_line":"                    lst_properties)"},{"line_number":1312,"context_line":"        return self._get_diagnostic_from_object_properties(vm_props,"},{"line_number":1313,"context_line":"                                                           set(lst_properties))"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2Fh7I%3D","line":1310,"updated":"2013-10-14 22:38:27.000000000","message":"Why can\u0027t we use vim_util.get_dynamic_properties instead of get_object_properties ? Wouldn\u0027t that return a dict and avoid the processing here.","commit_id":"f6ded6724aec46cdf68bd8f563b66a8d7cb29103"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d6d774bfdcfd5ecdfaf7bca4d62fff39d67075b1","unresolved":false,"context_lines":[{"line_number":1307,"context_line":"                          \"summary.quickStats\","},{"line_number":1308,"context_line":"                          \"summary.runtime\"]"},{"line_number":1309,"context_line":"        vm_props \u003d self._session._call_method(vim_util,"},{"line_number":1310,"context_line":"                    \"get_object_properties\", None, vm_ref, \"VirtualMachine\","},{"line_number":1311,"context_line":"                    lst_properties)"},{"line_number":1312,"context_line":"        return self._get_diagnostic_from_object_properties(vm_props,"},{"line_number":1313,"context_line":"                                                           set(lst_properties))"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2Fgqg%3D","line":1310,"in_reply_to":"AAAATH%2F%2Fh7I%3D","updated":"2013-10-15 10:58:28.000000000","message":"That too is an option. I tried that by the problem would be that the data returned would be:\n{\u0027summary.config\u0027: suds object, ...}\nThe suds object would need to be translated to a dictionary. So I gathered doing it without the if and then rebuilding the dictionary would have been a better option","commit_id":"f6ded6724aec46cdf68bd8f563b66a8d7cb29103"},{"author":{"_account_id":7575,"name":"Sabari","email":"smurugesan@vmware.com","username":"sabari"},"change_message_id":"63f81ba9f10963cd1c59ccb5d8487738f6d44214","unresolved":false,"context_lines":[{"line_number":1281,"context_line":"                \u0027num_cpu\u0027: int(query[\u0027summary.config.numCpu\u0027]),"},{"line_number":1282,"context_line":"                \u0027cpu_time\u0027: 0}"},{"line_number":1283,"context_line":""},{"line_number":1284,"context_line":"    def _get_diagnostic_from_object_properties(self, props, wanted_props):"},{"line_number":1285,"context_line":"        diagnostics \u003d {}"},{"line_number":1286,"context_line":"        while props:"},{"line_number":1287,"context_line":"            for elem in props.objects:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2FdrI%3D","line":1284,"updated":"2013-10-15 20:41:04.000000000","message":"Hi Gary, I understand the need for the method, but can we name it more generic. Basically, the method converts DataObjects into dictionaries for the specified properties. May be this can be reused elsewhere too. Just a suggestion.","commit_id":"8974b44fa088ab10b10ea86491a153e2b51436df"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"51c80e292098f6e71f262c220020683d1db0d599","unresolved":false,"context_lines":[{"line_number":1281,"context_line":"                \u0027num_cpu\u0027: int(query[\u0027summary.config.numCpu\u0027]),"},{"line_number":1282,"context_line":"                \u0027cpu_time\u0027: 0}"},{"line_number":1283,"context_line":""},{"line_number":1284,"context_line":"    def _get_diagnostic_from_object_properties(self, props, wanted_props):"},{"line_number":1285,"context_line":"        diagnostics \u003d {}"},{"line_number":1286,"context_line":"        while props:"},{"line_number":1287,"context_line":"            for elem in props.objects:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2FRJY%3D","line":1284,"in_reply_to":"AAAATH%2F%2FdrI%3D","updated":"2013-10-18 18:09:16.000000000","message":"Thanks. I have done this in - please see https://review.openstack.org/52687","commit_id":"8974b44fa088ab10b10ea86491a153e2b51436df"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"551c91186e7aa317a3b69dddf32deeab8fd3c11e","unresolved":false,"context_lines":[{"line_number":1301,"context_line":"                \u0027num_cpu\u0027: int(query[\u0027summary.config.numCpu\u0027]),"},{"line_number":1302,"context_line":"                \u0027cpu_time\u0027: 0}"},{"line_number":1303,"context_line":""},{"line_number":1304,"context_line":"    def _get_diagnostic_from_object_properties(self, props, wanted_props):"},{"line_number":1305,"context_line":"        diagnostics \u003d {}"},{"line_number":1306,"context_line":"        while props:"},{"line_number":1307,"context_line":"            for elem in props.objects:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2FHdk%3D","line":1304,"updated":"2013-11-14 08:43:52.000000000","message":"this method doesn\u0027t look to be diagnostic specific but a general one;\nyou may consider to rename it to _get_object_properties","commit_id":"6b5f25aed193464b41c74942a42360340b7346ff"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"e27bdce7aa8549e2c06a9a2b9c505cab71b47929","unresolved":false,"context_lines":[{"line_number":1301,"context_line":"                \u0027num_cpu\u0027: int(query[\u0027summary.config.numCpu\u0027]),"},{"line_number":1302,"context_line":"                \u0027cpu_time\u0027: 0}"},{"line_number":1303,"context_line":""},{"line_number":1304,"context_line":"    def _get_diagnostic_from_object_properties(self, props, wanted_props):"},{"line_number":1305,"context_line":"        diagnostics \u003d {}"},{"line_number":1306,"context_line":"        while props:"},{"line_number":1307,"context_line":"            for elem in props.objects:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2B%2Faw%3D","line":1304,"in_reply_to":"AAAATn%2F%2FHdk%3D","updated":"2013-11-16 05:53:31.000000000","message":"hi, i have added a patch that makes this more generic. please see - https://review.openstack.org/#/c/52687/","commit_id":"6b5f25aed193464b41c74942a42360340b7346ff"}]}
