)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":33582,"name":"Mark Powers","email":"markpowers@uchicago.edu","username":"markpowers"},"change_message_id":"415271e041042bb237246e2e3726c7ee03eda53f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"6163d2b3_16f3a135","updated":"2026-04-01 14:52:58.000000000","message":"Looks great!","commit_id":"003fb7aaee87efdc87cf34da362f37603ee2beb5"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"42872055f91d6be50d4b63b67b775c00af8a9ad4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"08e7e76b_97a524f9","updated":"2026-08-28 08:47:56.000000000","message":"Thanks for making the changes. Reusing previous +2 from @markpowers@uchicago.edu","commit_id":"bbce338f28e4603f9caec8431be239b6cb17f936"}],"blazar/__init__.py":[{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"eb00f631b9e69e3ae202a4dba4e927aae17a8aed","unresolved":true,"context_lines":[{"line_number":1,"context_line":"from oslo_service import backend as oslo_service_backend"},{"line_number":2,"context_line":"import warnings"},{"line_number":3,"context_line":"try:"},{"line_number":4,"context_line":"    oslo_service_backend.init_backend("}],"source_content_type":"text/x-python","patch_set":8,"id":"27e3e956_b54e31a4","line":1,"updated":"2026-03-19 15:31:04.000000000","message":"Should we have a license header in this file?","commit_id":"82e91c20643696ad4428aed0e74edbb9a49b09b4"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"c56e29330953805ba9ef8abe2a4a2d2bda6ef8d3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"from oslo_service import backend as oslo_service_backend"},{"line_number":2,"context_line":"import warnings"},{"line_number":3,"context_line":"try:"},{"line_number":4,"context_line":"    oslo_service_backend.init_backend("}],"source_content_type":"text/x-python","patch_set":8,"id":"f43445a6_29ba4311","line":1,"in_reply_to":"27e3e956_b54e31a4","updated":"2026-03-30 12:00:52.000000000","message":"Done. Not sure who, if anyone, should have copyright so I\u0027ve left that line off.","commit_id":"82e91c20643696ad4428aed0e74edbb9a49b09b4"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"e5d37742705735b258b66a7888e38201d7f9b4e3","unresolved":true,"context_lines":[{"line_number":12,"context_line":"# limitations under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"from oslo_service import backend as oslo_service_backend"},{"line_number":15,"context_line":"import warnings"},{"line_number":16,"context_line":"try:"},{"line_number":17,"context_line":"    oslo_service_backend.init_backend("},{"line_number":18,"context_line":"        oslo_service_backend.BackendType.THREADING)"}],"source_content_type":"text/x-python","patch_set":9,"id":"8bc01c56_7599749c","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":15},"updated":"2026-08-25 13:23:59.000000000","message":"This should be above the oslo_service import, in a separate block.","commit_id":"003fb7aaee87efdc87cf34da362f37603ee2beb5"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"952155f58a77bee8788eea91559bd55269106524","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# limitations under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"from oslo_service import backend as oslo_service_backend"},{"line_number":15,"context_line":"import warnings"},{"line_number":16,"context_line":"try:"},{"line_number":17,"context_line":"    oslo_service_backend.init_backend("},{"line_number":18,"context_line":"        oslo_service_backend.BackendType.THREADING)"}],"source_content_type":"text/x-python","patch_set":9,"id":"826ca7ca_76d5c562","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":15},"in_reply_to":"8bc01c56_7599749c","updated":"2026-08-25 15:01:02.000000000","message":"Done","commit_id":"003fb7aaee87efdc87cf34da362f37603ee2beb5"}],"blazar/tests/manager/test_service.py":[{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"e5d37742705735b258b66a7888e38201d7f9b4e3","unresolved":true,"context_lines":[{"line_number":16,"context_line":"import copy"},{"line_number":17,"context_line":"import datetime"},{"line_number":18,"context_line":"from unittest import mock"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import asyncio"},{"line_number":21,"context_line":"import ddt"},{"line_number":22,"context_line":"import importlib"},{"line_number":23,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":9,"id":"dff00f42_34ab4c84","line":20,"range":{"start_line":19,"start_character":0,"end_line":20,"end_character":14},"updated":"2026-08-25 13:23:59.000000000","message":"This should move to the block above with the standard library imports. Same for the importlib below actually.","commit_id":"003fb7aaee87efdc87cf34da362f37603ee2beb5"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"952155f58a77bee8788eea91559bd55269106524","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import copy"},{"line_number":17,"context_line":"import datetime"},{"line_number":18,"context_line":"from unittest import mock"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import asyncio"},{"line_number":21,"context_line":"import ddt"},{"line_number":22,"context_line":"import importlib"},{"line_number":23,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":9,"id":"0d742213_75a5f66e","line":20,"range":{"start_line":19,"start_character":0,"end_line":20,"end_character":14},"in_reply_to":"dff00f42_34ab4c84","updated":"2026-08-25 15:01:02.000000000","message":"Done","commit_id":"003fb7aaee87efdc87cf34da362f37603ee2beb5"}],"requirements.txt":[{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"e5d37742705735b258b66a7888e38201d7f9b4e3","unresolved":true,"context_lines":[{"line_number":19,"context_line":"oslo.middleware\u003e\u003d3.31.0 # Apache-2.0"},{"line_number":20,"context_line":"oslo.policy\u003e\u003d4.5.0 # Apache-2.0"},{"line_number":21,"context_line":"oslo.serialization!\u003d2.19.1,\u003e\u003d2.18.0 # Apache-2.0"},{"line_number":22,"context_line":"oslo.service\u003e\u003d1.34.0 # Apache-2.0"},{"line_number":23,"context_line":"oslo.upgradecheck\u003e\u003d1.3.0 # Apache-2.0"},{"line_number":24,"context_line":"oslo.utils\u003e\u003d7.0.0 # Apache-2.0"},{"line_number":25,"context_line":"python-neutronclient\u003e\u003d6.0.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":9,"id":"a691d399_4851e8c5","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":33},"updated":"2026-08-25 13:23:59.000000000","message":"We should now depend on oslo.service[threading] which will install cotyledon and futurist.","commit_id":"003fb7aaee87efdc87cf34da362f37603ee2beb5"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"e5d37742705735b258b66a7888e38201d7f9b4e3","unresolved":true,"context_lines":[{"line_number":19,"context_line":"oslo.middleware\u003e\u003d3.31.0 # Apache-2.0"},{"line_number":20,"context_line":"oslo.policy\u003e\u003d4.5.0 # Apache-2.0"},{"line_number":21,"context_line":"oslo.serialization!\u003d2.19.1,\u003e\u003d2.18.0 # Apache-2.0"},{"line_number":22,"context_line":"oslo.service\u003e\u003d1.34.0 # Apache-2.0"},{"line_number":23,"context_line":"oslo.upgradecheck\u003e\u003d1.3.0 # Apache-2.0"},{"line_number":24,"context_line":"oslo.utils\u003e\u003d7.0.0 # Apache-2.0"},{"line_number":25,"context_line":"python-neutronclient\u003e\u003d6.0.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":9,"id":"5a49c5dd_c2b0e024","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":33},"updated":"2026-08-25 13:23:59.000000000","message":"```suggestion\noslo.service[threading]\u003e\u003d4.2.0 # Apache-2.0\n```","commit_id":"003fb7aaee87efdc87cf34da362f37603ee2beb5"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"952155f58a77bee8788eea91559bd55269106524","unresolved":false,"context_lines":[{"line_number":19,"context_line":"oslo.middleware\u003e\u003d3.31.0 # Apache-2.0"},{"line_number":20,"context_line":"oslo.policy\u003e\u003d4.5.0 # Apache-2.0"},{"line_number":21,"context_line":"oslo.serialization!\u003d2.19.1,\u003e\u003d2.18.0 # Apache-2.0"},{"line_number":22,"context_line":"oslo.service\u003e\u003d1.34.0 # Apache-2.0"},{"line_number":23,"context_line":"oslo.upgradecheck\u003e\u003d1.3.0 # Apache-2.0"},{"line_number":24,"context_line":"oslo.utils\u003e\u003d7.0.0 # Apache-2.0"},{"line_number":25,"context_line":"python-neutronclient\u003e\u003d6.0.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":9,"id":"0e3b19ad_ca7b1c17","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":33},"in_reply_to":"5a49c5dd_c2b0e024","updated":"2026-08-25 15:01:02.000000000","message":"Done","commit_id":"003fb7aaee87efdc87cf34da362f37603ee2beb5"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"952155f58a77bee8788eea91559bd55269106524","unresolved":false,"context_lines":[{"line_number":19,"context_line":"oslo.middleware\u003e\u003d3.31.0 # Apache-2.0"},{"line_number":20,"context_line":"oslo.policy\u003e\u003d4.5.0 # Apache-2.0"},{"line_number":21,"context_line":"oslo.serialization!\u003d2.19.1,\u003e\u003d2.18.0 # Apache-2.0"},{"line_number":22,"context_line":"oslo.service\u003e\u003d1.34.0 # Apache-2.0"},{"line_number":23,"context_line":"oslo.upgradecheck\u003e\u003d1.3.0 # Apache-2.0"},{"line_number":24,"context_line":"oslo.utils\u003e\u003d7.0.0 # Apache-2.0"},{"line_number":25,"context_line":"python-neutronclient\u003e\u003d6.0.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":9,"id":"d55e1dab_c6cc6924","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":33},"in_reply_to":"a691d399_4851e8c5","updated":"2026-08-25 15:01:02.000000000","message":"Done","commit_id":"003fb7aaee87efdc87cf34da362f37603ee2beb5"}],"test-requirements.txt":[{"author":{"_account_id":33582,"name":"Mark Powers","email":"markpowers@uchicago.edu","username":"markpowers"},"change_message_id":"415271e041042bb237246e2e3726c7ee03eda53f","unresolved":true,"context_lines":[{"line_number":1,"context_line":"hacking\u003e\u003d7.0.0,\u003c7.1.0 # Apache-2.0"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"cotyledon\u003e\u003d2.2.0 # Apache-2.0"},{"line_number":4,"context_line":"ddt\u003e\u003d1.0.1 # MIT"},{"line_number":5,"context_line":"fixtures\u003e\u003d3.0.0 # Apache-2.0/BSD"},{"line_number":6,"context_line":"stestr\u003e\u003d2.0.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":9,"id":"0b829e78_55097a12","line":3,"updated":"2026-04-01 14:52:58.000000000","message":"Is this needed? I don\u0027t see it used anywhere.","commit_id":"003fb7aaee87efdc87cf34da362f37603ee2beb5"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"a9818c81f08b9cd459a9594c41d10796419d0103","unresolved":false,"context_lines":[{"line_number":1,"context_line":"hacking\u003e\u003d7.0.0,\u003c7.1.0 # Apache-2.0"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"cotyledon\u003e\u003d2.2.0 # Apache-2.0"},{"line_number":4,"context_line":"ddt\u003e\u003d1.0.1 # MIT"},{"line_number":5,"context_line":"fixtures\u003e\u003d3.0.0 # Apache-2.0/BSD"},{"line_number":6,"context_line":"stestr\u003e\u003d2.0.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":9,"id":"edbd6edd_13e205a4","line":3,"in_reply_to":"0b829e78_55097a12","updated":"2026-04-07 09:52:05.000000000","message":"Without it, we hit the following failure. It is required for the threading backend of oslo.service.\n\n```\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nFailures during discovery\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n--- import errors ---\nFailed to import test module: blazar.tests\nTraceback (most recent call last):\n  File \"/home/matt/Documents/blazar/.tox/cover/lib/python3.12/site-packages/oslo_service/backend/__init__.py\", line 106, in init_backend\n    module \u003d importlib.import_module(module_name)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/usr/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n    return _bootstrap._gcd_import(name[level:], package, level)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"\u003cfrozen importlib._bootstrap\u003e\", line 1387, in _gcd_import\n  File \"\u003cfrozen importlib._bootstrap\u003e\", line 1360, in _find_and_load\n  File \"\u003cfrozen importlib._bootstrap\u003e\", line 1331, in _find_and_load_unlocked\n  File \"\u003cfrozen importlib._bootstrap\u003e\", line 935, in _load_unlocked\n  File \"\u003cfrozen importlib._bootstrap_external\u003e\", line 995, in exec_module\n  File \"\u003cfrozen importlib._bootstrap\u003e\", line 488, in _call_with_frames_removed\n  File \"/home/matt/Documents/blazar/.tox/cover/lib/python3.12/site-packages/oslo_service/backend/_threading/__init__.py\", line 17, in \u003cmodule\u003e\n    from oslo_service.backend._threading import service\n  File \"/home/matt/Documents/blazar/.tox/cover/lib/python3.12/site-packages/oslo_service/backend/_threading/service.py\", line 26, in \u003cmodule\u003e\n    import cotyledon\nModuleNotFoundError: No module named \u0027cotyledon\u0027\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/usr/lib/python3.12/unittest/loader.py\", line 427, in _find_test_path\n    package \u003d self._get_module_from_name(name)\n              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/usr/lib/python3.12/unittest/loader.py\", line 337, in _get_module_from_name\n    __import__(name)\n  File \"/home/matt/Documents/blazar/blazar/__init__.py\", line 17, in \u003cmodule\u003e\n    oslo_service_backend.init_backend(\n  File \"/home/matt/Documents/blazar/.tox/cover/lib/python3.12/site-packages/oslo_service/backend/__init__.py\", line 114, in init_backend\n    raise ValueError(f\"Unknown backend: {backend_name!r}\")\nValueError: Unknown backend: \u0027threading\u0027\n\n```","commit_id":"003fb7aaee87efdc87cf34da362f37603ee2beb5"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"952155f58a77bee8788eea91559bd55269106524","unresolved":false,"context_lines":[{"line_number":1,"context_line":"hacking\u003e\u003d7.0.0,\u003c7.1.0 # Apache-2.0"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"cotyledon\u003e\u003d2.2.0 # Apache-2.0"},{"line_number":4,"context_line":"ddt\u003e\u003d1.0.1 # MIT"},{"line_number":5,"context_line":"fixtures\u003e\u003d3.0.0 # Apache-2.0/BSD"},{"line_number":6,"context_line":"stestr\u003e\u003d2.0.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":9,"id":"d656c284_2eb90a64","line":3,"in_reply_to":"c3f9e356_ac83eb63","updated":"2026-08-25 15:01:02.000000000","message":"Done","commit_id":"003fb7aaee87efdc87cf34da362f37603ee2beb5"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"e5d37742705735b258b66a7888e38201d7f9b4e3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"hacking\u003e\u003d7.0.0,\u003c7.1.0 # Apache-2.0"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"cotyledon\u003e\u003d2.2.0 # Apache-2.0"},{"line_number":4,"context_line":"ddt\u003e\u003d1.0.1 # MIT"},{"line_number":5,"context_line":"fixtures\u003e\u003d3.0.0 # Apache-2.0/BSD"},{"line_number":6,"context_line":"stestr\u003e\u003d2.0.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":9,"id":"c3f9e356_ac83eb63","line":3,"in_reply_to":"edbd6edd_13e205a4","updated":"2026-08-25 13:23:59.000000000","message":"It doesn\u0027t seem right that you would need it only in test-requirements? See my other comment for requirements.txt anyway. This can be removed if you apply it.","commit_id":"003fb7aaee87efdc87cf34da362f37603ee2beb5"}]}
