Are you calling lp_save() twice, or just once? It would be helpful if you made a GET request after every call to lp_save(), to see what the server thinks the ETag is at each stage.
This might be a problem with the way launchpadlib handles the 209 response code.
Here are the last two requests:
send: 'PATCH /beta/bugs/292317 3cfeb7e05896b38 208e23ddc75
if-match: "72a9365dbdc47f
send: '{"tags": ["needs-xorglog"]}'
reply: 'HTTP/1.1 209 Content Returned\r\n'
send: 'PATCH /beta/bugs/292317 a42d5d0e5bc4aaf 14be1e73123" lspci-vvnn" ]}'
if-match: "7f60495c065527
send: '{"tags": ["needs-xorglog", "needs-
reply: 'HTTP/1.1 412 Precondition Failed\r\n'
Are you calling lp_save() twice, or just once? It would be helpful if you made a GET request after every call to lp_save(), to see what the server thinks the ETag is at each stage.
This might be a problem with the way launchpadlib handles the 209 response code.