)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"37077c64824880d7bff64233d62c1025e9e2f464","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Drop usage of lxml\u0027s deprecated getchildren() method"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The getchildren() instance method of xml.etree.Element has been"},{"line_number":10,"context_line":"deprecated since lxml 2.7:"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"https://docs.python.org/2/library/xml.etree.elementtree.html#xml.etree.ElementTree.Element.getchildren"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7faddb67_b5cb7548","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":10},"updated":"2019-08-09 17:03:30.000000000","message":"✔","commit_id":"491d9c4c44779821b2afd460c77b625759a4b34b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"37077c64824880d7bff64233d62c1025e9e2f464","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"https://docs.python.org/2/library/xml.etree.elementtree.html#xml.etree.ElementTree.Element.getchildren"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Since requirements.txt already requires lxml \u003e\u003d 3.4.1, we can safely"},{"line_number":15,"context_line":"drop this in favour of the alternatives (using list(elem) or iteration"},{"line_number":16,"context_line":"or len(elem) as appropriate) which are much more pleasant to read."},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7faddb67_1504c97d","line":14,"range":{"start_line":14,"start_character":40,"end_line":14,"end_character":53},"updated":"2019-08-09 17:03:30.000000000","message":"✔","commit_id":"491d9c4c44779821b2afd460c77b625759a4b34b"}],"nova/virt/libvirt/config.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"81b585194f98551285022c2d5973ae8c90af1595","unresolved":false,"context_lines":[{"line_number":1082,"context_line":"                        self.source_hosts.append(d.get(\u0027name\u0027))"},{"line_number":1083,"context_line":"                        self.source_ports.append(d.get(\u0027port\u0027))"},{"line_number":1084,"context_line":"            elif c.tag \u003d\u003d \u0027backingStore\u0027:"},{"line_number":1085,"context_line":"                if len(c):"},{"line_number":1086,"context_line":"                    self.backing_store \u003d LibvirtConfigGuestDiskBackingStore()"},{"line_number":1087,"context_line":"                    self.backing_store.parse_dom(c)"},{"line_number":1088,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_7e6167d3","line":1085,"range":{"start_line":1085,"start_character":19,"end_line":1085,"end_character":26},"updated":"2019-08-09 10:20:39.000000000","message":"Do we need to do this? Assuming this returns a list, a simple \u0027if c\u0027 check will do. If it\u0027s an interator or something, don\u0027t you need to convert it to a list first for len to work?\n\n    \u003e\u003e\u003e x \u003d iter([])\n    \u003e\u003e\u003e len(x)\n    Traceback (most recent call last):\n      File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\n    TypeError: object of type \u0027listiterator\u0027 has no len()\n\n    \u003e\u003e\u003e len(x for x in range(5))\n    Traceback (most recent call last):\n      File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\n    TypeError: object of type \u0027generator\u0027 has no len()","commit_id":"491d9c4c44779821b2afd460c77b625759a4b34b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"00126e93b0758408351b9bb269a725fa4f401b78","unresolved":false,"context_lines":[{"line_number":1082,"context_line":"                        self.source_hosts.append(d.get(\u0027name\u0027))"},{"line_number":1083,"context_line":"                        self.source_ports.append(d.get(\u0027port\u0027))"},{"line_number":1084,"context_line":"            elif c.tag \u003d\u003d \u0027backingStore\u0027:"},{"line_number":1085,"context_line":"                if len(c):"},{"line_number":1086,"context_line":"                    self.backing_store \u003d LibvirtConfigGuestDiskBackingStore()"},{"line_number":1087,"context_line":"                    self.backing_store.parse_dom(c)"},{"line_number":1088,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_a15ede0f","line":1085,"range":{"start_line":1085,"start_character":19,"end_line":1085,"end_character":26},"in_reply_to":"7faddb67_5ed6eb29","updated":"2019-08-09 11:13:40.000000000","message":"++","commit_id":"491d9c4c44779821b2afd460c77b625759a4b34b"},{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"c9506eced128737fdd17c7770663689793d10c79","unresolved":false,"context_lines":[{"line_number":1082,"context_line":"                        self.source_hosts.append(d.get(\u0027name\u0027))"},{"line_number":1083,"context_line":"                        self.source_ports.append(d.get(\u0027port\u0027))"},{"line_number":1084,"context_line":"            elif c.tag \u003d\u003d \u0027backingStore\u0027:"},{"line_number":1085,"context_line":"                if len(c):"},{"line_number":1086,"context_line":"                    self.backing_store \u003d LibvirtConfigGuestDiskBackingStore()"},{"line_number":1087,"context_line":"                    self.backing_store.parse_dom(c)"},{"line_number":1088,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_5ed6eb29","line":1085,"range":{"start_line":1085,"start_character":19,"end_line":1085,"end_character":26},"in_reply_to":"7faddb67_7e6167d3","updated":"2019-08-09 10:38:02.000000000","message":"Yes we need it, and no, it doesn\u0027t need to be converted first.  Your test on iter([]) isn\u0027t valid; you need to test on an actual etree.Element.  I explicitly tested this before submitting, and then manually ran the unit tests to be extra sure:\n\n    Python 3.6.1 (default, May 16 2018, 13:42:16)\n    [GCC 4.8.5] on linux\n    Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n    \u003e\u003e\u003e import lxml.etree\n    \u003e\u003e\u003e root \u003d lxml.etree.fromstring(\"\u003ca\u003e\u003cb\u003eb1\u003c/b\u003e\u003cc\u003ec1\u003c/c\u003e\u003c/a\u003e\")\n    \u003e\u003e\u003e len(root)\n    2\n    \u003e\u003e\u003e childless \u003d lxml.etree.fromstring(\"\u003ca\u003e\u003c/a\u003e\")\n    \u003e\u003e\u003e len(childless)\n    0\n    \u003e\u003e\u003e if childless:\n    ...     print(\"True in boolean context even without children?\")\n    ...\n    __main__:1: FutureWarning: The behavior of this method will change in future versions. Use specific \u0027len(elem)\u0027 or \u0027elem is not None\u0027 test instead.","commit_id":"491d9c4c44779821b2afd460c77b625759a4b34b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"81b585194f98551285022c2d5973ae8c90af1595","unresolved":false,"context_lines":[{"line_number":2618,"context_line":"                        obj.parse_dom(d)"},{"line_number":2619,"context_line":"                        self.devices.append(obj)"},{"line_number":2620,"context_line":"            if c.tag \u003d\u003d \u0027idmap\u0027:"},{"line_number":2621,"context_line":"                for map in c:"},{"line_number":2622,"context_line":"                    obj \u003d None"},{"line_number":2623,"context_line":"                    if map.tag \u003d\u003d \u0027uid\u0027:"},{"line_number":2624,"context_line":"                        obj \u003d LibvirtConfigGuestUIDMap()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_beacbfee","line":2621,"range":{"start_line":2621,"start_character":20,"end_line":2621,"end_character":23},"updated":"2019-08-09 10:20:39.000000000","message":"While we\u0027re here, let\u0027s maybe not shadow keywords? I\u0027m surprised flake8 isn\u0027t complaining about this. Should probably be a separate change though","commit_id":"491d9c4c44779821b2afd460c77b625759a4b34b"},{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"c9506eced128737fdd17c7770663689793d10c79","unresolved":false,"context_lines":[{"line_number":2618,"context_line":"                        obj.parse_dom(d)"},{"line_number":2619,"context_line":"                        self.devices.append(obj)"},{"line_number":2620,"context_line":"            if c.tag \u003d\u003d \u0027idmap\u0027:"},{"line_number":2621,"context_line":"                for map in c:"},{"line_number":2622,"context_line":"                    obj \u003d None"},{"line_number":2623,"context_line":"                    if map.tag \u003d\u003d \u0027uid\u0027:"},{"line_number":2624,"context_line":"                        obj \u003d LibvirtConfigGuestUIDMap()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_1e871312","line":2621,"range":{"start_line":2621,"start_character":20,"end_line":2621,"end_character":23},"in_reply_to":"7faddb67_beacbfee","updated":"2019-08-09 10:38:02.000000000","message":"Done in https://review.opendev.org/#/c/675578/","commit_id":"491d9c4c44779821b2afd460c77b625759a4b34b"}]}
