)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"397fd7eb3a6aeb5d44b03dfb26fac7ba3b2b1e73","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"These weren\u0027t just special characters: they were invalid URLs."},{"line_number":10,"context_line":"SQLAlchemy 2.x appears to do more validation and no longer accepts"},{"line_number":11,"context_line":"these. The tests are therefore not useful. Remove them."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I23fd38465f7dec20b00dc25776dfde18318000b1"},{"line_number":14,"context_line":"Signed-off-by: Stephen Finucane \u003cstephenfin@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"0d8f4853_96f7e15a","line":11,"updated":"2023-04-21 18:39:17.000000000","message":"I don\u0027t think these are invalid URLs.. it\u0027s kind of the opposite, that these are valid URLs that had been parsed incorrectly by the nova code in the past [1] because they had special characters in them (special characters in the password, for example). This test is verifying that URLs with special characters are correctly accepted.\n\n[1] https://github.com/openstack/nova/commit/9a9a620ea2d06e51c01b0864d7275b57d7203e5a","commit_id":"6e506d28e30c7ccda4f47ef0da4fe2d73fb068ab"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4698195ad6071f37c61df8461d5afdf1641b9027","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"These weren\u0027t just special characters: they were invalid URLs."},{"line_number":10,"context_line":"SQLAlchemy 2.x appears to do more validation and no longer accepts"},{"line_number":11,"context_line":"these. The tests are therefore not useful. Remove them."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I23fd38465f7dec20b00dc25776dfde18318000b1"},{"line_number":14,"context_line":"Signed-off-by: Stephen Finucane \u003cstephenfin@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"bbec8edd_875ec79f","line":11,"in_reply_to":"0d8f4853_96f7e15a","updated":"2023-04-24 16:25:52.000000000","message":"So I was confused by the tracebacks I was seeing in failing tests:\n\n    Traceback (most recent call last):\n      File \"/openstack/nova/nova/objects/cell_mapping.py\", line 137, in format_db_url\n        return CellMapping._format_url(url, CONF.database.connection)\n      File \"/openstack/nova/nova/objects/cell_mapping.py\", line 106, in _format_url\n        \u0027port\u0027: default_url.port,\n      File \"/usr/lib64/python3.9/urllib/parse.py\", line 178, in port\n        raise ValueError(message) from None\n    ValueError: Port could not be cast to integer value as \u0027abcd0123\u0027\n    2023-04-24 16:58:52,821 ERROR [nova.objects.cell_mapping] Failed to parse [database]/connection to format cell mapping\n    Traceback (most recent call last):\n      File \"/openstack/nova/nova/objects/cell_mapping.py\", line 137, in format_db_url\n        return CellMapping._format_url(url, CONF.database.connection)\n      File \"/openstack/nova/nova/objects/cell_mapping.py\", line 106, in _format_url\n        \u0027port\u0027: default_url.port,\n      File \"/usr/lib64/python3.9/urllib/parse.py\", line 178, in port\n        raise ValueError(message) from None\n    ValueError: Port could not be cast to integer value as \u0027abcd0123\u0027\n\nThey\u0027re not the actual cause of the failures though. The failure is caused by sqlalchemy 2.0 now sanitising URLs and replaced passwords with \u0027***\u0027.\n\n    reference \u003d \u0027mysql+pymysql://test:abcd0123/AB@controller/nova_cell0?charset\u003dutf8\u0027\n    actual    \u003d \u0027mysql+pymysql://test:***@controller/nova_cell0?charset\u003dutf8\u0027\n\nBefore I address that though, that exception does suggest that _something_ is awry here. Are we sure the \u0027except Exception\u0027 in \u0027CellMapping.format_db_url\u0027 isn\u0027t preventing us seeing issues here?\n\n    \u003e\u003e\u003e import urllib.parse\n    \u003e\u003e\u003e urllib.parse.urlparse(\u0027mysql+pymysql://test:abcd0123/AB@controller/nova_cell0?charset\u003dutf8\u0027).path\n    \u0027/AB@controller/nova_cell0\u0027\n    \u003e\u003e\u003e urllib.parse.urlparse(\u0027mysql+pymysql://test:abcd0123/AB@controller/nova_cell0?charset\u003dutf8\u0027).username\n    \u003e\u003e\u003e urllib.parse.urlparse(\u0027mysql+pymysql://test:abcd0123/AB@controller/nova_cell0?charset\u003dutf8\u0027).password\n    \u003e\u003e\u003e urllib.parse.urlparse(\u0027mysql+pymysql://test:abcd0123/AB@controller/nova_cell0?charset\u003dutf8\u0027).hostname\n    \u0027test\u0027\n    \u003e\u003e\u003e urllib.parse.urlparse(\u0027mysql+pymysql://test:abcd0123/AB@controller/nova_cell0?charset\u003dutf8\u0027).port\n    Traceback (most recent call last):\n      File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\n      File \"/usr/lib64/python3.8/urllib/parse.py\", line 177, in port\n        raise ValueError(message) from None\n    ValueError: Port could not be cast to integer value as \u0027abcd0123\u0027\n\nHow are we _expecting_ that to parse? Personally, I\u0027d read \u0027abcd0123\u0027 as an invalid port and therefore that is an invalid URL. On the other hand\n\n    mysql+pymysql://nova:abcd0123@AB@controller/nova_cell0\n\nIs perfectly valid, since \u0027abcd0123@AB\u0027 is a password here.","commit_id":"6e506d28e30c7ccda4f47ef0da4fe2d73fb068ab"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9b37fddefcc1a6e7659aab27b20a36679995c780","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"These weren\u0027t just special characters: they were invalid URLs."},{"line_number":10,"context_line":"SQLAlchemy 2.x appears to do more validation and no longer accepts"},{"line_number":11,"context_line":"these. The tests are therefore not useful. Remove them."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I23fd38465f7dec20b00dc25776dfde18318000b1"},{"line_number":14,"context_line":"Signed-off-by: Stephen Finucane \u003cstephenfin@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5e5347d7_83157b80","line":11,"in_reply_to":"5970e3bb_547ce350","updated":"2023-07-12 15:14:50.000000000","message":"Done","commit_id":"6e506d28e30c7ccda4f47ef0da4fe2d73fb068ab"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"609558165341d17e20f5f44bc72acf8361460e83","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"These weren\u0027t just special characters: they were invalid URLs."},{"line_number":10,"context_line":"SQLAlchemy 2.x appears to do more validation and no longer accepts"},{"line_number":11,"context_line":"these. The tests are therefore not useful. Remove them."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I23fd38465f7dec20b00dc25776dfde18318000b1"},{"line_number":14,"context_line":"Signed-off-by: Stephen Finucane \u003cstephenfin@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"c5e91833_cd1c5f20","line":11,"in_reply_to":"bbec8edd_875ec79f","updated":"2023-04-24 16:32:51.000000000","message":"\u003e Before I address that though, that exception does suggest that _something_ is awry here. Are we sure the \u0027except Exception\u0027 in \u0027CellMapping.format_db_url\u0027 isn\u0027t preventing us seeing issues here?\n\u003e \n\u003e     \u003e\u003e\u003e import urllib.parse\n\u003e     \u003e\u003e\u003e urllib.parse.urlparse(\u0027mysql+pymysql://test:abcd0123/AB@controller/nova_cell0?charset\u003dutf8\u0027).path\n\u003e     \u0027/AB@controller/nova_cell0\u0027\n\u003e     \u003e\u003e\u003e urllib.parse.urlparse(\u0027mysql+pymysql://test:abcd0123/AB@controller/nova_cell0?charset\u003dutf8\u0027).username\n\u003e     \u003e\u003e\u003e urllib.parse.urlparse(\u0027mysql+pymysql://test:abcd0123/AB@controller/nova_cell0?charset\u003dutf8\u0027).password\n\u003e     \u003e\u003e\u003e urllib.parse.urlparse(\u0027mysql+pymysql://test:abcd0123/AB@controller/nova_cell0?charset\u003dutf8\u0027).hostname\n\u003e     \u0027test\u0027\n\u003e     \u003e\u003e\u003e urllib.parse.urlparse(\u0027mysql+pymysql://test:abcd0123/AB@controller/nova_cell0?charset\u003dutf8\u0027).port\n\u003e     Traceback (most recent call last):\n\u003e       File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\n\u003e       File \"/usr/lib64/python3.8/urllib/parse.py\", line 177, in port\n\u003e         raise ValueError(message) from None\n\u003e     ValueError: Port could not be cast to integer value as \u0027abcd0123\u0027\n\u003e \n\u003e How are we _expecting_ that to parse? Personally, I\u0027d read \u0027abcd0123\u0027 as an invalid port and therefore that is an invalid URL. On the other hand\n\nHmm, maybe not actually. There\u0027s an \u0027@\u0027 there also, so \u0027 \u0027test\u0027 is the username and \u0027abcd0123/AB\u0027 is the password.\n\nI wonder if this is a bug in \u0027urllib.parse.urlparse\u0027? Or more likely, should we be encoding passwords somehow? I don\u0027t even know how to do this without writing our own URL parser...","commit_id":"6e506d28e30c7ccda4f47ef0da4fe2d73fb068ab"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"405ba1597ec616e9e359ab9513926c25e6023814","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"These weren\u0027t just special characters: they were invalid URLs."},{"line_number":10,"context_line":"SQLAlchemy 2.x appears to do more validation and no longer accepts"},{"line_number":11,"context_line":"these. The tests are therefore not useful. Remove them."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I23fd38465f7dec20b00dc25776dfde18318000b1"},{"line_number":14,"context_line":"Signed-off-by: Stephen Finucane \u003cstephenfin@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5970e3bb_547ce350","line":11,"in_reply_to":"c5e91833_cd1c5f20","updated":"2023-04-25 21:46:40.000000000","message":"I looked into this and I think the urlparse issue is the same one that\u0027s in the code comment in the impl ... which I think means that the special characters in a URL will not work correctly with templated URLs (and maybe aren\u0027t expected to given the \u0027except Exception\u0027) but things work fine with regular non-templated URLs.\n\nSo I think that\u0027s OK or appears at least to be somewhat of a known limitation? Or it\u0027s a separate bug.\n\nI think you did uncover another bug here though with a non-special-characters password. And unfortunately I find test_map_cell0_default_database does not catch the bug because the fake URL it\u0027s using has no username and password in it 😩","commit_id":"6e506d28e30c7ccda4f47ef0da4fe2d73fb068ab"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b7b37d9a293d563d8f4377b0b7745c8cd1d5376c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"6ee146e6_cf110628","updated":"2023-06-13 22:54:25.000000000","message":"@melwitt: BTW, SQLAlchemy 1.4 insists on encoding \u0027@\u0027 in passwords. From [1]\n\n\u003e *Changed in version 1.4:* Support for @ signs in hostnames and database names has been fixed. As a side effect of this fix, @ signs in passwords must be escaped.\n\n[1] https://docs.sqlalchemy.org/en/20/core/engines.html#escaping-special-characters-such-as-signs-in-passwords","commit_id":"a1568e483df05d0f2b8c5e63b2492d126f2a77b1"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"4cbf78b6d092e4e4a439edea7508c37d9d3b292a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"756b7af9_f2b20e11","updated":"2023-06-20 20:34:24.000000000","message":"This fixes the issue when I test locally (and can also be seen in the next patch that adds a sqlalchemy 2.x job). LGTM","commit_id":"a1568e483df05d0f2b8c5e63b2492d126f2a77b1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c70fa7419c7f6392709cddceff57c40dd0cc80aa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"7ecbe94b_5cb05319","updated":"2023-07-18 13:51:45.000000000","message":"easy peasy","commit_id":"a1568e483df05d0f2b8c5e63b2492d126f2a77b1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f0620d8e48df27c74bf49ef607b6403e6dd90a9d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"5f93d8f9_d099783a","updated":"2023-07-20 11:13:42.000000000","message":"recheck another failure of the next and multi-cell jobs","commit_id":"a1568e483df05d0f2b8c5e63b2492d126f2a77b1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a09019f91ce687b5ced1072cdcbd222df64f2aa9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"2391cff3_2c7802d8","updated":"2023-07-26 09:35:26.000000000","message":"recheck unrelated failure","commit_id":"a1568e483df05d0f2b8c5e63b2492d126f2a77b1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c493f69ae6cfca8aa4dce0bfdd8a68b058feb5a0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"b18efa92_23f90ce8","updated":"2023-07-19 11:24:57.000000000","message":"recheck unrelated failure","commit_id":"a1568e483df05d0f2b8c5e63b2492d126f2a77b1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"513cd27640f82194004d02da92a13e6ffe047026","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"ecab59d2_c3e09d62","updated":"2023-07-24 16:56:24.000000000","message":"recheck unrelated failure","commit_id":"a1568e483df05d0f2b8c5e63b2492d126f2a77b1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d757accdb164d9b81028b1e83d348d4ea916eb62","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"74f1d9ff_38900809","updated":"2023-07-18 16:03:46.000000000","message":"recheck unrelated failure again 😞","commit_id":"a1568e483df05d0f2b8c5e63b2492d126f2a77b1"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3dfb759ea3635657a74df23f70ca61ae0da76a2c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"75798bd4_c3634cf8","updated":"2023-07-18 12:20:59.000000000","message":"thanks that would break a lot of things when we upgrade if we did not fix that.","commit_id":"a1568e483df05d0f2b8c5e63b2492d126f2a77b1"}],"nova/cmd/manage.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"405ba1597ec616e9e359ab9513926c25e6023814","unresolved":true,"context_lines":[{"line_number":754,"context_line":"            # sqlalchemy has a nice utility for parsing database connection"},{"line_number":755,"context_line":"            # URLs so we use that here to get the db name so we don\u0027t have to"},{"line_number":756,"context_line":"            # worry about parsing and splitting a URL which could have special"},{"line_number":757,"context_line":"            # characters in the password, which makes parsing a nightmare."},{"line_number":758,"context_line":"            url \u003d sqla_url.make_url(connection)"},{"line_number":759,"context_line":"            url \u003d url.set(database\u003durl.database + \u0027_cell0\u0027)"},{"line_number":760,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"e02c5515_9583f1a4","line":757,"updated":"2023-04-25 21:46:40.000000000","message":"This note is likely referencing the issue we\u0027re seeing with urlparse.","commit_id":"6e506d28e30c7ccda4f47ef0da4fe2d73fb068ab"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9b37fddefcc1a6e7659aab27b20a36679995c780","unresolved":false,"context_lines":[{"line_number":754,"context_line":"            # sqlalchemy has a nice utility for parsing database connection"},{"line_number":755,"context_line":"            # URLs so we use that here to get the db name so we don\u0027t have to"},{"line_number":756,"context_line":"            # worry about parsing and splitting a URL which could have special"},{"line_number":757,"context_line":"            # characters in the password, which makes parsing a nightmare."},{"line_number":758,"context_line":"            url \u003d sqla_url.make_url(connection)"},{"line_number":759,"context_line":"            url \u003d url.set(database\u003durl.database + \u0027_cell0\u0027)"},{"line_number":760,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"86b8eeda_549058e2","line":757,"in_reply_to":"23234d3c_2581c03b","updated":"2023-07-12 15:14:50.000000000","message":"Done","commit_id":"6e506d28e30c7ccda4f47ef0da4fe2d73fb068ab"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c3c1147a18af1ed5a52dab851932ea6532b70488","unresolved":true,"context_lines":[{"line_number":754,"context_line":"            # sqlalchemy has a nice utility for parsing database connection"},{"line_number":755,"context_line":"            # URLs so we use that here to get the db name so we don\u0027t have to"},{"line_number":756,"context_line":"            # worry about parsing and splitting a URL which could have special"},{"line_number":757,"context_line":"            # characters in the password, which makes parsing a nightmare."},{"line_number":758,"context_line":"            url \u003d sqla_url.make_url(connection)"},{"line_number":759,"context_line":"            url \u003d url.set(database\u003durl.database + \u0027_cell0\u0027)"},{"line_number":760,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"23234d3c_2581c03b","line":757,"in_reply_to":"e02c5515_9583f1a4","updated":"2023-06-13 21:52:48.000000000","message":"Yeah, this is a mistake. Operators should be encoding the special characters. I\u0027ll whip up a patch to start warning operators about this (with a future plan to error out).","commit_id":"6e506d28e30c7ccda4f47ef0da4fe2d73fb068ab"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"405ba1597ec616e9e359ab9513926c25e6023814","unresolved":true,"context_lines":[{"line_number":756,"context_line":"            # worry about parsing and splitting a URL which could have special"},{"line_number":757,"context_line":"            # characters in the password, which makes parsing a nightmare."},{"line_number":758,"context_line":"            url \u003d sqla_url.make_url(connection)"},{"line_number":759,"context_line":"            url \u003d url.set(database\u003durl.database + \u0027_cell0\u0027)"},{"line_number":760,"context_line":""},{"line_number":761,"context_line":"            return urlparse.unquote(str(url))"},{"line_number":762,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"b31a7d31_522a31ed","line":759,"updated":"2023-04-25 21:46:40.000000000","message":"You probably already know this but for my own curiosity I found that the way to fix this is to add .render_as_string(hide_password\u003dFalse) here.","commit_id":"6e506d28e30c7ccda4f47ef0da4fe2d73fb068ab"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c3c1147a18af1ed5a52dab851932ea6532b70488","unresolved":true,"context_lines":[{"line_number":756,"context_line":"            # worry about parsing and splitting a URL which could have special"},{"line_number":757,"context_line":"            # characters in the password, which makes parsing a nightmare."},{"line_number":758,"context_line":"            url \u003d sqla_url.make_url(connection)"},{"line_number":759,"context_line":"            url \u003d url.set(database\u003durl.database + \u0027_cell0\u0027)"},{"line_number":760,"context_line":""},{"line_number":761,"context_line":"            return urlparse.unquote(str(url))"},{"line_number":762,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ec13effd_0c52949b","line":759,"in_reply_to":"b31a7d31_522a31ed","updated":"2023-06-13 21:52:48.000000000","message":"🙏 I did not. Thanks!","commit_id":"6e506d28e30c7ccda4f47ef0da4fe2d73fb068ab"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9b37fddefcc1a6e7659aab27b20a36679995c780","unresolved":false,"context_lines":[{"line_number":756,"context_line":"            # worry about parsing and splitting a URL which could have special"},{"line_number":757,"context_line":"            # characters in the password, which makes parsing a nightmare."},{"line_number":758,"context_line":"            url \u003d sqla_url.make_url(connection)"},{"line_number":759,"context_line":"            url \u003d url.set(database\u003durl.database + \u0027_cell0\u0027)"},{"line_number":760,"context_line":""},{"line_number":761,"context_line":"            return urlparse.unquote(str(url))"},{"line_number":762,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"8d516784_fc51050e","line":759,"in_reply_to":"ec13effd_0c52949b","updated":"2023-07-12 15:14:50.000000000","message":"Done","commit_id":"6e506d28e30c7ccda4f47ef0da4fe2d73fb068ab"}],"nova/objects/cell_mapping.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"8961e25ff96230a15bfc5aebdcb216a8c930ee12","unresolved":true,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    @staticmethod"},{"line_number":99,"context_line":"    def _format_url(url, default):"},{"line_number":100,"context_line":"        default_url \u003d urlparse.urlparse(default)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        subs \u003d {"},{"line_number":103,"context_line":"            \u0027username\u0027: default_url.username,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9828c2a3_e0de3826","line":100,"updated":"2023-04-25 23:40:55.000000000","message":"We could do similar here (not in the scope of this patch) to fix the parsing issue by using sqlalchemy\u0027s make_url method instead of urlparse. The only thing that doesn\u0027t map directly is the \u0027query\u0027 and \u0027fragment\u0027 part below, but we could probably handle those without too much trouble?\n\nExample I tried:\n\n\u003e\u003e\u003e from sqlalchemy.engine import url as sqla_url\n\u003e\u003e\u003e u \u003d sqla_url.make_url(\u0027rabbit://bob:s3kret@myhost:123/nova?sync\u003dtrue#extra\u0027)\n\u003e\u003e\u003e u\nrabbit://bob:***@myhost:123/nova?sync\u003dtrue%23extra\n\u003e\u003e\u003e u.drivername\n\u0027rabbit\u0027\n\u003e\u003e\u003e u.username\n\u0027bob\u0027\n\u003e\u003e\u003e u.password\n\u0027s3kret\u0027\n\u003e\u003e\u003e u.port\n123\n\u003e\u003e\u003e u.host\n\u0027myhost\u0027\n\u003e\u003e\u003e u.database\n\u0027nova\u0027\n\u003e\u003e\u003e u.query\nimmutabledict({\u0027sync\u0027: \u0027true#extra\u0027})","commit_id":"6e506d28e30c7ccda4f47ef0da4fe2d73fb068ab"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9b37fddefcc1a6e7659aab27b20a36679995c780","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    @staticmethod"},{"line_number":99,"context_line":"    def _format_url(url, default):"},{"line_number":100,"context_line":"        default_url \u003d urlparse.urlparse(default)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        subs \u003d {"},{"line_number":103,"context_line":"            \u0027username\u0027: default_url.username,"}],"source_content_type":"text/x-python","patch_set":2,"id":"cd175b10_4a1e1dae","line":100,"in_reply_to":"9828c2a3_e0de3826","updated":"2023-07-12 15:14:50.000000000","message":"Done","commit_id":"6e506d28e30c7ccda4f47ef0da4fe2d73fb068ab"}]}
