)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"302edbb16efc548198c953a633195eb6d7a007fb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"3ede66c6_ac53cb4e","updated":"2026-03-30 20:23:40.000000000","message":"the py314 fialure is \n\n```\nTraceback (most recent call last):\n  File \"/home/zuul/src/opendev.org/openstack/watcher-dashboard/.tox/py314/lib/python3.14/site-packages/django/core/handlers/exception.py\", line 55, in inner\n    response \u003d get_response(request)\n  File \"/home/zuul/src/opendev.org/openstack/watcher-dashboard/.tox/py314/lib/python3.14/site-packages/django/utils/deprecation.py\", line 134, in __call__\n    response \u003d response or self.get_response(request)\n                           ~~~~~~~~~~~~~~~~~^^^^^^^^^\n  File \"/home/zuul/src/opendev.org/openstack/watcher-dashboard/.tox/py314/lib/python3.14/site-packages/django/core/handlers/exception.py\", line 57, in inner\n    response \u003d response_for_exception(request, exc)\n  File \"/home/zuul/src/opendev.org/openstack/watcher-dashboard/.tox/py314/lib/python3.14/site-packages/django/core/handlers/exception.py\", line 141, in response_for_exception\n    response \u003d handle_uncaught_exception(\n        request, get_resolver(get_urlconf()), sys.exc_info()\n    )\n  File \"/home/zuul/src/opendev.org/openstack/watcher-dashboard/.tox/py314/lib/python3.14/site-packages/django/core/handlers/exception.py\", line 186, in handle_uncaught_exception\n    return callback(request)\n  File \"/home/zuul/src/opendev.org/openstack/watcher-dashboard/.tox/py314/lib/python3.14/site-packages/django/utils/decorators.py\", line 134, in _wrapper_view\n    response \u003d view_func(request, *args, **kwargs)\n  File \"/home/zuul/src/opendev.org/openstack/watcher-dashboard/.tox/py314/lib/python3.14/site-packages/django/views/defaults.py\", line 99, in server_error\n    return HttpResponseServerError(template.render())\n                                   ~~~~~~~~~~~~~~~^^\n  File \"/home/zuul/src/opendev.org/openstack/watcher-dashboard/.tox/py314/lib/python3.14/site-packages/django/template/backends/django.py\", line 61, in render\n    return self.template.render(context)\n           ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^\n  File \"/home/zuul/src/opendev.org/openstack/watcher-dashboard/.tox/py314/lib/python3.14/site-packages/django/template/base.py\", line 175, in render\n    return self._render(context)\n           ~~~~~~~~~~~~^^^^^^^^^\n  File \"/home/zuul/src/opendev.org/openstack/watcher-dashboard/.tox/py314/lib/python3.14/site-packages/django/test/utils.py\", line 111, in instrumented_test_render\n    template_rendered.send(sender\u003dself, template\u003dself, context\u003dcontext)\n    ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/zuul/src/opendev.org/openstack/watcher-dashboard/.tox/py314/lib/python3.14/site-packages/django/dispatch/dispatcher.py\", line 177, in send\n    (receiver, receiver(signal\u003dself, sender\u003dsender, **named))\n               ~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/zuul/src/opendev.org/openstack/watcher-dashboard/.tox/py314/lib/python3.14/site-packages/django/test/client.py\", line 267, in store_rendered_templates\n    store[\"context\"].append(copy(context))\n                            ~~~~^^^^^^^^^\n  File \"/usr/local/lib/python3.14/copy.py\", line 82, in copy\n    return copier(x)\n  File \"/home/zuul/src/opendev.org/openstack/watcher-dashboard/.tox/py314/lib/python3.14/site-packages/django/template/context.py\", line 158, in __copy__\n    duplicate \u003d super().__copy__()\n  File \"/home/zuul/src/opendev.org/openstack/watcher-dashboard/.tox/py314/lib/python3.14/site-packages/django/template/context.py\", line 39, in __copy__\n    duplicate.dicts \u003d self.dicts[:]\n    ^^^^^^^^^^^^^^^\nAttributeError: \u0027super\u0027 object has no attribute \u0027dicts\u0027 and no __dict__ for setting new attributes\n```\n\nwhich feels like a django bug but that is not a regerssion in this patch","commit_id":"13d1bd2278d1c750f352723bcccb8f1e0de97def"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"dd9e5b9df9c2b3c0de938f53ef5f877726ba83e4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"047400af_f07bdd94","updated":"2026-04-16 14:46:25.000000000","message":"ok, lots of changes but everything looks correct","commit_id":"2442c365140114098fdc30a377529105014ec973"}],"doc/source/contributor/code-conventions-and-testing.rst":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c6e9185617945c8ba76749002dbbbc126b7fcf14","unresolved":true,"context_lines":[{"line_number":5,"context_line":"This document captures the coding policies and testing conventions that apply"},{"line_number":6,"context_line":"across the Watcher Dashboard codebase. It complements the architectural"},{"line_number":7,"context_line":"guidance in :doc:`service-layer-pattern` and is the authoritative reference"},{"line_number":8,"context_line":"for day-to-day contribution decisions."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"File Structure"},{"line_number":11,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ecc7ab4a_08c26743","line":8,"in_reply_to":"8bfb77ff_f16deca0","updated":"2026-03-30 20:20:37.000000000","message":"this file is ment to be later in the series and should have been droped","commit_id":"13d1bd2278d1c750f352723bcccb8f1e0de97def"}],"pyproject.toml":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d177478f2a0e9e51b9b95a01634e0ba3455cae4c","unresolved":true,"context_lines":[{"line_number":42,"context_line":"target-version \u003d \"py310\""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"[tool.ruff.lint]"},{"line_number":45,"context_line":"select \u003d [\"E4\", \"E5\", \"E7\", \"E9\", \"F\", \"G\", \"I\", \"LOG\", \"S\", \"UP\", \"W\", \"C90\"]"},{"line_number":46,"context_line":"external \u003d [\"H\"]"},{"line_number":47,"context_line":"ignore \u003d ["},{"line_number":48,"context_line":"    # UP031 % format — defer f-string migration to a later pass"}],"source_content_type":"text/x-toml","patch_set":3,"id":"058cf12f_a2a41c56","line":45,"updated":"2026-02-28 13:44:17.000000000","message":"Want to move `C90` to the front of the list while you\u0027re doing this?","commit_id":"4b502b880a85c258ed1a9b0b2c9a938b5f818db7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b40260a089e2b98671f9d66b461b3be9989cc9b4","unresolved":true,"context_lines":[{"line_number":42,"context_line":"target-version \u003d \"py310\""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"[tool.ruff.lint]"},{"line_number":45,"context_line":"select \u003d [\"E4\", \"E5\", \"E7\", \"E9\", \"F\", \"G\", \"I\", \"LOG\", \"S\", \"UP\", \"W\", \"C90\"]"},{"line_number":46,"context_line":"external \u003d [\"H\"]"},{"line_number":47,"context_line":"ignore \u003d ["},{"line_number":48,"context_line":"    # UP031 % format — defer f-string migration to a later pass"}],"source_content_type":"text/x-toml","patch_set":3,"id":"1920bdf1_b84177bc","line":45,"in_reply_to":"058cf12f_a2a41c56","updated":"2026-02-28 20:19:39.000000000","message":"i can im not intetnally keepign this in alpahatical order even if they mostly are\nbut sure.","commit_id":"4b502b880a85c258ed1a9b0b2c9a938b5f818db7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c6e9185617945c8ba76749002dbbbc126b7fcf14","unresolved":false,"context_lines":[{"line_number":42,"context_line":"target-version \u003d \"py310\""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"[tool.ruff.lint]"},{"line_number":45,"context_line":"select \u003d [\"E4\", \"E5\", \"E7\", \"E9\", \"F\", \"G\", \"I\", \"LOG\", \"S\", \"UP\", \"W\", \"C90\"]"},{"line_number":46,"context_line":"external \u003d [\"H\"]"},{"line_number":47,"context_line":"ignore \u003d ["},{"line_number":48,"context_line":"    # UP031 % format — defer f-string migration to a later pass"}],"source_content_type":"text/x-toml","patch_set":3,"id":"78b2d1ac_73b78840","line":45,"in_reply_to":"1920bdf1_b84177bc","updated":"2026-03-30 20:20:37.000000000","message":"Done","commit_id":"4b502b880a85c258ed1a9b0b2c9a938b5f818db7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b40260a089e2b98671f9d66b461b3be9989cc9b4","unresolved":true,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"[tool.ruff.lint.mccabe]"},{"line_number":60,"context_line":"# Flag errors (`C901`) whenever the complexity level exceeds 5."},{"line_number":61,"context_line":"max-complexity \u003d 20"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"[tool.ruff.lint.isort]"},{"line_number":64,"context_line":"section-order \u003d [\"standard-library\", \"third-party\", \"openstack-third-party\", \"first-party\", \"local-folder\"]"}],"source_content_type":"text/x-toml","patch_set":3,"id":"6dd2310b_1eab62fe","line":61,"updated":"2026-02-28 20:19:39.000000000","message":"this is actually the value form watcher orginally.\ni probably can decrfess this in this repo or at least its likely i\ncan reduse it after the cleanup so i shoudl check where we are and reduce this","commit_id":"4b502b880a85c258ed1a9b0b2c9a938b5f818db7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d177478f2a0e9e51b9b95a01634e0ba3455cae4c","unresolved":true,"context_lines":[{"line_number":74,"context_line":"    \"python_watcherclient\","},{"line_number":75,"context_line":"]"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"[tool.ruff.format]"},{"line_number":78,"context_line":"# Ruff format is the project formatter; autopep8 has been removed."},{"line_number":79,"context_line":"# line-length is inherited from [tool.ruff] (79)."},{"line_number":80,"context_line":"quote-style \u003d \"preserve\"   # don\u0027t force-convert existing quote style"},{"line_number":81,"context_line":"indent-style \u003d \"space\""}],"source_content_type":"text/x-toml","patch_set":3,"id":"8e82ac69_d6b542e0","line":78,"range":{"start_line":77,"start_character":18,"end_line":78,"end_character":66},"updated":"2026-02-28 13:44:17.000000000","message":"this is redundant","commit_id":"4b502b880a85c258ed1a9b0b2c9a938b5f818db7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c6e9185617945c8ba76749002dbbbc126b7fcf14","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    \"python_watcherclient\","},{"line_number":75,"context_line":"]"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"[tool.ruff.format]"},{"line_number":78,"context_line":"# Ruff format is the project formatter; autopep8 has been removed."},{"line_number":79,"context_line":"# line-length is inherited from [tool.ruff] (79)."},{"line_number":80,"context_line":"quote-style \u003d \"preserve\"   # don\u0027t force-convert existing quote style"},{"line_number":81,"context_line":"indent-style \u003d \"space\""}],"source_content_type":"text/x-toml","patch_set":3,"id":"b63ff57a_d0453d75","line":78,"range":{"start_line":77,"start_character":18,"end_line":78,"end_character":66},"in_reply_to":"0f234a89_9488349e","updated":"2026-03-30 20:20:37.000000000","message":"Done","commit_id":"4b502b880a85c258ed1a9b0b2c9a938b5f818db7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b40260a089e2b98671f9d66b461b3be9989cc9b4","unresolved":true,"context_lines":[{"line_number":74,"context_line":"    \"python_watcherclient\","},{"line_number":75,"context_line":"]"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"[tool.ruff.format]"},{"line_number":78,"context_line":"# Ruff format is the project formatter; autopep8 has been removed."},{"line_number":79,"context_line":"# line-length is inherited from [tool.ruff] (79)."},{"line_number":80,"context_line":"quote-style \u003d \"preserve\"   # don\u0027t force-convert existing quote style"},{"line_number":81,"context_line":"indent-style \u003d \"space\""}],"source_content_type":"text/x-toml","patch_set":3,"id":"0f234a89_9488349e","line":78,"range":{"start_line":77,"start_character":18,"end_line":78,"end_character":66},"in_reply_to":"8e82ac69_d6b542e0","updated":"2026-02-28 20:19:39.000000000","message":"yep ill clean these up","commit_id":"4b502b880a85c258ed1a9b0b2c9a938b5f818db7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d177478f2a0e9e51b9b95a01634e0ba3455cae4c","unresolved":true,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"[tool.ruff.format]"},{"line_number":78,"context_line":"# Ruff format is the project formatter; autopep8 has been removed."},{"line_number":79,"context_line":"# line-length is inherited from [tool.ruff] (79)."},{"line_number":80,"context_line":"quote-style \u003d \"preserve\"   # don\u0027t force-convert existing quote style"},{"line_number":81,"context_line":"indent-style \u003d \"space\""},{"line_number":82,"context_line":"docstring-code-format \u003d true"}],"source_content_type":"text/x-toml","patch_set":3,"id":"c6446fa0_d5fc9878","line":79,"updated":"2026-02-28 13:44:17.000000000","message":"as is this (it\u0027s standard ruff behavior)","commit_id":"4b502b880a85c258ed1a9b0b2c9a938b5f818db7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c44f975caf9b53fa9fd102b8820a0465ce8acfb7","unresolved":true,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"[tool.ruff.format]"},{"line_number":78,"context_line":"# Ruff format is the project formatter; autopep8 has been removed."},{"line_number":79,"context_line":"# line-length is inherited from [tool.ruff] (79)."},{"line_number":80,"context_line":"quote-style \u003d \"preserve\"   # don\u0027t force-convert existing quote style"},{"line_number":81,"context_line":"indent-style \u003d \"space\""},{"line_number":82,"context_line":"docstring-code-format \u003d true"}],"source_content_type":"text/x-toml","patch_set":3,"id":"7c4b68f5_0ef5fbe9","line":79,"in_reply_to":"58f76970_0e3cb91c","updated":"2026-03-01 11:03:34.000000000","message":"No, it\u0027s always been configured in `[tool.ruff]`. There\u0027s a `pycodestyld.max-line-length` option but that\u0027s new and for a different purpose.","commit_id":"4b502b880a85c258ed1a9b0b2c9a938b5f818db7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c6e9185617945c8ba76749002dbbbc126b7fcf14","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"[tool.ruff.format]"},{"line_number":78,"context_line":"# Ruff format is the project formatter; autopep8 has been removed."},{"line_number":79,"context_line":"# line-length is inherited from [tool.ruff] (79)."},{"line_number":80,"context_line":"quote-style \u003d \"preserve\"   # don\u0027t force-convert existing quote style"},{"line_number":81,"context_line":"indent-style \u003d \"space\""},{"line_number":82,"context_line":"docstring-code-format \u003d true"}],"source_content_type":"text/x-toml","patch_set":3,"id":"2a5982fe_b8248e02","line":79,"in_reply_to":"7c4b68f5_0ef5fbe9","updated":"2026-03-30 20:20:37.000000000","message":"Acknowledged","commit_id":"4b502b880a85c258ed1a9b0b2c9a938b5f818db7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b40260a089e2b98671f9d66b461b3be9989cc9b4","unresolved":true,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"[tool.ruff.format]"},{"line_number":78,"context_line":"# Ruff format is the project formatter; autopep8 has been removed."},{"line_number":79,"context_line":"# line-length is inherited from [tool.ruff] (79)."},{"line_number":80,"context_line":"quote-style \u003d \"preserve\"   # don\u0027t force-convert existing quote style"},{"line_number":81,"context_line":"indent-style \u003d \"space\""},{"line_number":82,"context_line":"docstring-code-format \u003d true"}],"source_content_type":"text/x-toml","patch_set":3,"id":"58f76970_0e3cb91c","line":79,"in_reply_to":"c6446fa0_d5fc9878","updated":"2026-02-28 20:19:39.000000000","message":"it is now but you used to have to spcify it in both place but i not been a problem for a while so sure i cna drop this","commit_id":"4b502b880a85c258ed1a9b0b2c9a938b5f818db7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d177478f2a0e9e51b9b95a01634e0ba3455cae4c","unresolved":true,"context_lines":[{"line_number":78,"context_line":"# Ruff format is the project formatter; autopep8 has been removed."},{"line_number":79,"context_line":"# line-length is inherited from [tool.ruff] (79)."},{"line_number":80,"context_line":"quote-style \u003d \"preserve\"   # don\u0027t force-convert existing quote style"},{"line_number":81,"context_line":"indent-style \u003d \"space\""},{"line_number":82,"context_line":"docstring-code-format \u003d true"}],"source_content_type":"text/x-toml","patch_set":3,"id":"979d0859_1945b3ef","line":81,"updated":"2026-02-28 13:44:17.000000000","message":"this is the default","commit_id":"4b502b880a85c258ed1a9b0b2c9a938b5f818db7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b40260a089e2b98671f9d66b461b3be9989cc9b4","unresolved":false,"context_lines":[{"line_number":78,"context_line":"# Ruff format is the project formatter; autopep8 has been removed."},{"line_number":79,"context_line":"# line-length is inherited from [tool.ruff] (79)."},{"line_number":80,"context_line":"quote-style \u003d \"preserve\"   # don\u0027t force-convert existing quote style"},{"line_number":81,"context_line":"indent-style \u003d \"space\""},{"line_number":82,"context_line":"docstring-code-format \u003d true"}],"source_content_type":"text/x-toml","patch_set":3,"id":"80c670d3_7c336009","line":81,"in_reply_to":"979d0859_1945b3ef","updated":"2026-02-28 20:19:39.000000000","message":"Acknowledged","commit_id":"4b502b880a85c258ed1a9b0b2c9a938b5f818db7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c6e9185617945c8ba76749002dbbbc126b7fcf14","unresolved":false,"context_lines":[{"line_number":42,"context_line":"target-version \u003d \"py310\""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"[tool.ruff.lint]"},{"line_number":45,"context_line":"select \u003d [\"C90\", \"E4\", \"E5\", \"E7\", \"E9\", \"F\", \"G\", \"I\", \"LOG\", \"S\", \"UP\", \"W\"]"},{"line_number":46,"context_line":"external \u003d [\"H\"]"},{"line_number":47,"context_line":"ignore \u003d ["},{"line_number":48,"context_line":"    # UP031 % format — defer f-string migration to a later pass"}],"source_content_type":"text/x-toml","patch_set":5,"id":"71c473b2_5517f67a","line":45,"in_reply_to":"38324787_c9a19447","updated":"2026-03-30 20:20:37.000000000","message":"we only need comment if we are ignoring rules","commit_id":"13d1bd2278d1c750f352723bcccb8f1e0de97def"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c6e9185617945c8ba76749002dbbbc126b7fcf14","unresolved":false,"context_lines":[{"line_number":65,"context_line":"force-single-line \u003d true"},{"line_number":66,"context_line":"lines-after-imports \u003d 2"},{"line_number":67,"context_line":"lines-between-types \u003d 1"},{"line_number":68,"context_line":"section-order \u003d [\"future\", \"standard-library\", \"third-party\",  \"first-party\"]"},{"line_number":69,"context_line":"# this is the default but just being explicit about the behavior"},{"line_number":70,"context_line":"# in case that ever changes."},{"line_number":71,"context_line":"force-sort-within-sections \u003d false"}],"source_content_type":"text/x-toml","patch_set":5,"id":"b9676cc5_f4086b45","line":68,"in_reply_to":"d6507fb5_62a33515","updated":"2026-03-30 20:20:37.000000000","message":"that doc needs to be updatead and should not be in the commit.\n\n\nwhiel my personal convetion has alwasy been to grou openstack third-party-dep sperately form non openstack ones it was never strictly requried.\nso in automating it i intentionally remove that seciton.","commit_id":"13d1bd2278d1c750f352723bcccb8f1e0de97def"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f618ad05d3e25654a32fa7bde5e8a76ca7044b09","unresolved":true,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"[tool.ruff]"},{"line_number":41,"context_line":"line-length \u003d 79"},{"line_number":42,"context_line":"target-version \u003d \"py310\""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"[tool.ruff.lint]"},{"line_number":45,"context_line":"select \u003d [\"C90\", \"E4\", \"E5\", \"E7\", \"E9\", \"F\", \"G\", \"I\", \"LOG\", \"S\", \"UP\", \"W\"]"}],"source_content_type":"text/x-toml","patch_set":6,"id":"757726d0_22ce09f8","line":42,"updated":"2026-04-18 10:25:09.000000000","message":"You should drop this in a future change. It\u0027s unnecessary once you have `project.requires-python` like you do above.","commit_id":"2442c365140114098fdc30a377529105014ec973"}],"watcher_dashboard/common/exceptions.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c6e9185617945c8ba76749002dbbbc126b7fcf14","unresolved":true,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"NOT_FOUND \u003d exceptions.NOT_FOUND"},{"line_number":21,"context_line":"RECOVERABLE \u003d exceptions.RECOVERABLE + (watcherclient.ClientException,)"},{"line_number":22,"context_line":"UNAUTHORIZED \u003d exceptions.UNAUTHORIZED"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"87f76259_78c08827","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":71},"updated":"2026-03-30 20:20:37.000000000","message":"i think this can be \n\n```suggestion\nRECOVERABLE \u003d exceptions.RECOVERABLE, watcherclient.ClientException\n```","commit_id":"13d1bd2278d1c750f352723bcccb8f1e0de97def"}],"watcher_dashboard/test/local_fixtures/fixtures.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c6e9185617945c8ba76749002dbbbc126b7fcf14","unresolved":true,"context_lines":[{"line_number":49,"context_line":"    def _clear_config_caches(self):"},{"line_number":50,"context_line":"        \"\"\"Clear all memoized caches in ``watcher_dashboard.config``.\"\"\""},{"line_number":51,"context_line":"        try:"},{"line_number":52,"context_line":"            from watcher_dashboard import config"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"            for attr_name in dir(config):"},{"line_number":55,"context_line":"                attr \u003d getattr(config, attr_name)"},{"line_number":56,"context_line":"                if callable(attr) and hasattr(attr, \u0027cache_clear\u0027):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5c89c9ef_5716a09d","line":53,"range":{"start_line":52,"start_character":11,"end_line":53,"end_character":1},"updated":"2026-03-30 20:20:37.000000000","message":"there is no reason to import this inline it shoudl be at the top of the file.","commit_id":"13d1bd2278d1c750f352723bcccb8f1e0de97def"}],"watcher_dashboard/test/unit/api_tests/test_client.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c6e9185617945c8ba76749002dbbbc126b7fcf14","unresolved":true,"context_lines":[{"line_number":19,"context_line":"from watcher_dashboard.test import helpers as test"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class WatcherClientAPITests(test.APITestCase):"},{"line_number":23,"context_line":"    def test_audit_create_uses_1_1_when_start_end_present(self):"},{"line_number":24,"context_line":"        watcherclient \u003d self.stub_watcherclient()"},{"line_number":25,"context_line":"        watcherclient.audit.create \u003d mock.Mock(return_value\u003d{})"}],"source_content_type":"text/x-python","patch_set":5,"id":"362b3d10_4bf09d6d","line":22,"in_reply_to":"bc2c7584_23e6e333","updated":"2026-03-30 20:20:37.000000000","message":"ya so this file is in the location we will use in the next commit but this is not the correct location for this in the current commit.","commit_id":"13d1bd2278d1c750f352723bcccb8f1e0de97def"}]}
