)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"466da9f8df0ec38a53afdacc92046a869edd6501","unresolved":true,"context_lines":[{"line_number":9,"context_line":"Since py34, unittest has included a subTest context manager; however,"},{"line_number":10,"context_line":"pytest alone will stop processing the test after the first failure and"},{"line_number":11,"context_line":"will not display any of the context provided to subTest. pytest-subtests"},{"line_number":12,"context_line":"is a plugin that addresses both deficiencies."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"* Is the library actively maintained?"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"de924259_2bbb18b5","line":12,"updated":"2025-02-14 19:13:17.000000000","message":"Given something like\n\n```\nimport unittest\n\ndef is_odd(x):\n    return bool(x \u0026 1)\n\nclass Test(unittest.TestCase):\n    def test_is_odd(self):\n        for value in [0,1,3,5,-1,8]:\n            with self.subTest(value\u003dvalue):\n                self.assertEqual(is_odd(value), True)\n```\n\nPlain `pytest`:\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\u003d test session starts \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\u003d\u003d\nplatform linux -- Python 3.12.3, pytest-8.3.2, pluggy-1.5.0\nrootdir: /home/tburke/code/requirements\nplugins: requests-mock-1.12.1, cov-5.0.0, anyio-4.4.0\ncollected 1 item                                                         \n\ntest.py F                                                          [100%]\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\u003d\u003d\u003d\u003d\u003d\u003d\u003d FAILURES \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\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n____________________________ Test.test_is_odd ____________________________\n\nself \u003d \u003ctest.Test testMethod\u003dtest_is_odd\u003e\n\n    def test_is_odd(self):\n        for value in [0,1,3,5,-1,8]:\n            with self.subTest(value\u003dvalue):\n\u003e               self.assertEqual(is_odd(value), True)\nE               AssertionError: False !\u003d True\n\ntest.py:10: AssertionError\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 short test summary info \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\nFAILED test.py::Test::test_is_odd - AssertionError: False !\u003d True\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\u003d\u003d 1 failed in 0.04s \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\u003d\u003d\u003d\n```\n\n`pytest` with `pytest-subtests`:\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\u003d test session starts \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\u003d\u003d\nplatform linux -- Python 3.12.3, pytest-8.3.2, pluggy-1.5.0\nrootdir: /home/tburke/code/requirements\nplugins: requests-mock-1.12.1, subtests-0.14.1, cov-5.0.0, anyio-4.4.0\ncollected 1 item                                                         \n\ntest.py .                                                        [100%]\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\u003d\u003d\u003d\u003d\u003d\u003d\u003d FAILURES \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\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n_______________________ Test.test_is_odd (value\u003d0) _______________________\n\nself \u003d \u003ctest.Test testMethod\u003dtest_is_odd\u003e\n\n    def test_is_odd(self):\n        for value in [0,1,3,5,-1,8]:\n            with self.subTest(value\u003dvalue):\n\u003e               self.assertEqual(is_odd(value), True)\nE               AssertionError: False !\u003d True\n\ntest.py:10: AssertionError\n_______________________ Test.test_is_odd (value\u003d8) _______________________\n\nself \u003d \u003ctest.Test testMethod\u003dtest_is_odd\u003e\n\n    def test_is_odd(self):\n        for value in [0,1,3,5,-1,8]:\n            with self.subTest(value\u003dvalue):\n\u003e               self.assertEqual(is_odd(value), True)\nE               AssertionError: False !\u003d True\n\ntest.py:10: AssertionError\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 short test summary info \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(value\u003d0) SUBFAIL test.py::Test::test_is_odd - AssertionError: False !\u003d True\n(value\u003d8) SUBFAIL test.py::Test::test_is_odd - AssertionError: False !\u003d True\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d 2 failed, 1 passed in 0.04s \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n```","commit_id":"acdb247f3be70ced75988d37f6e40dbdef1a7872"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"dcf4fea632cff83742cea9ea48ef5a6a42e8b98a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"fd5ed1bc_f49dafa4","updated":"2025-04-09 16:11:30.000000000","message":"Anything I can do to help move this forward? Getting those extra annotations on failures would be handy.","commit_id":"acdb247f3be70ced75988d37f6e40dbdef1a7872"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"ba1e49a6ff54bad2dc3dbe28e6229bce0ae1b125","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"4b1ca46b_38fd67b8","updated":"2025-05-15 05:49:02.000000000","message":"I was hoping for some response from the real reqs team, but yeah, let\u0027s just move ahead","commit_id":"acdb247f3be70ced75988d37f6e40dbdef1a7872"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4dc2fd6ecace3b5ed24e3f47b93c6b7fa939a726","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"2aa13284_61581546","updated":"2025-05-14 19:40:59.000000000","message":"It\u0027s been a couple months -- anything for this?","commit_id":"acdb247f3be70ced75988d37f6e40dbdef1a7872"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"9215da65493bc60e28c2409c856eee8a0f5e58f2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"cb658d75_54425cc4","updated":"2025-02-28 18:33:04.000000000","message":"procedural -2 for reqs freeze","commit_id":"acdb247f3be70ced75988d37f6e40dbdef1a7872"}]}
