)]}'
{"openstackclient/__init__.py":[{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"22e17761dcea79f09278b0f92a6fb76105a88894","unresolved":true,"context_lines":[{"line_number":18,"context_line":"try:"},{"line_number":19,"context_line":"    __version__ \u003d importlib.metadata.version(\u0027python-openstackclient\u0027)"},{"line_number":20,"context_line":"except AttributeError:"},{"line_number":21,"context_line":"    __version__ \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"655ebbb6_b68f175e","line":21,"updated":"2026-05-08 02:16:17.000000000","message":"@stephenfin@redhat.com should we standardize on some str value here? mypy is mad that the try block and the except block have different types.","commit_id":"cfbb267d5ab5f5abf5c3f2cfd55d684b01adaeb3"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b59d2294435938616688f2e86ac5cc4c29586f6a","unresolved":true,"context_lines":[{"line_number":18,"context_line":"try:"},{"line_number":19,"context_line":"    __version__ \u003d importlib.metadata.version(\u0027python-openstackclient\u0027)"},{"line_number":20,"context_line":"except AttributeError:"},{"line_number":21,"context_line":"    __version__ \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"6adbdc54_914c8c4c","line":21,"in_reply_to":"655ebbb6_b68f175e","updated":"2026-05-08 12:17:59.000000000","message":"Can we use `str | None` for now and decide it separately?","commit_id":"cfbb267d5ab5f5abf5c3f2cfd55d684b01adaeb3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"77fe5ff8d8f18570c1a9e9cbf1e747705dac2283","unresolved":true,"context_lines":[{"line_number":18,"context_line":"try:"},{"line_number":19,"context_line":"    __version__ \u003d importlib.metadata.version(\u0027python-openstackclient\u0027)"},{"line_number":20,"context_line":"except AttributeError:"},{"line_number":21,"context_line":"    __version__ \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"8fde8ae3_67118659","line":21,"in_reply_to":"6adbdc54_914c8c4c","updated":"2026-05-08 13:07:37.000000000","message":"Alternatively, let\u0027s just drop this try-except entirely? The package needs to be installed to be useful (it relies on entry points). This is also the wrong exception to catch now.\n\n```\n\u003e\u003e\u003e try:\n...     importlib.metadata.version(\u0027foo\u0027)\n... except Exception as e:\n...     print(e)\n...     print(e.__class__)\n...     print(e.__class__.__mro__)\n...     \nNo package metadata was found for foo\n\u003cclass \u0027importlib.metadata.PackageNotFoundError\u0027\u003e\n(\u003cclass \u0027importlib.metadata.PackageNotFoundError\u0027\u003e, \u003cclass \u0027ModuleNotFoundError\u0027\u003e, \u003cclass \u0027ImportError\u0027\u003e, \u003cclass \u0027Exception\u0027\u003e, \u003cclass \u0027BaseException\u0027\u003e, \u003cclass \u0027object\u0027\u003e)\n```\n\nWe might also want to deprecate this attribute entirely. I don\u0027t see why we need to provide it when users can just use `importlib.metadata` themselves. I\u0027ve proposed removing these across all packages https://review.opendev.org/q/topic:%22deprecate-version-module%22\n\nbtw, somewhat concerningly, `pbr` is also giving me junk data here 😥:\n\n```\n\u003e\u003e\u003e pbr.version.VersionInfo(\u0027foo\u0027)\npbr.version.VersionInfo(foo:1.2.1)\n\u003e\u003e\u003e pbr.version.VersionInfo(\u0027foobar\u0027)\npbr.version.VersionInfo(foobar:1.2.1)\n```","commit_id":"cfbb267d5ab5f5abf5c3f2cfd55d684b01adaeb3"}]}
