)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6886b7a279f39498d72904bcc476990b44726c2e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"3b55dd73_302369e8","updated":"2026-07-14 18:43:57.000000000","message":"I\u0027d prefer the change to ``get(\u0027key_id\u0027)`` but not sure I can call it a blocker.\n\nTwo follow-ups:\n- a test improvement to perhaps squash in\n- a WIP to address the off-topic false claim about \u0027one error log per listing\u0027","commit_id":"cf16994ac5c6525c06242db6038ac412629c4398"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"314cb5a0a153c0ec383e5a72682c87c692f76b63","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"c3eb6219_2aca3d74","updated":"2026-07-09 15:40:35.000000000","message":"That said, we really should merge this sooner than later! 7 years!","commit_id":"cf16994ac5c6525c06242db6038ac412629c4398"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"08682f79211ccff26a5ad5fdbb041565a7138633","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"99dac5f3_8946aae8","updated":"2026-07-15 10:12:35.000000000","message":"As Alistair wrote - no blocker here, let\u0027s merge it!","commit_id":"c7748ac9287eab81c319a574937d153387f64e0b"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f219505ddcdec0a1fb43cc53065b7bf1522a9163","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"23221d1d_b421c5fa","updated":"2026-07-15 09:14:32.000000000","message":"leaving for Christian to +A if he\u0027s happy","commit_id":"c7748ac9287eab81c319a574937d153387f64e0b"}],"swift/common/middleware/crypto/decrypter.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"42eb7e235db608d86d92a33c809414765120a4c9","unresolved":false,"context_lines":[{"line_number":410,"context_line":"                        decoder\u003dlambda x: x.decode(\u0027utf-8\u0027))"},{"line_number":411,"context_line":"                except (EncryptionException, UnicodeDecodeError) as err:"},{"line_number":412,"context_line":"                    if not isinstance(err, UnknownSecretIdError):"},{"line_number":413,"context_line":"                        self.logger.error("},{"line_number":414,"context_line":"                            \"Error decrypting container listing for \""},{"line_number":415,"context_line":"                            \"%s/%s with key %s: %s\","},{"line_number":416,"context_line":"                            req.path_info, obj_dict[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_29d07cf7","line":413,"range":{"start_line":413,"start_character":36,"end_line":413,"end_character":41},"updated":"2019-02-07 18:15:14.000000000","message":"Maybe that should be exception, so we get the traceback?","commit_id":"e9546d5c198a150ace2632188e736882d1d0af40"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"42eb7e235db608d86d92a33c809414765120a4c9","unresolved":false,"context_lines":[{"line_number":412,"context_line":"                    if not isinstance(err, UnknownSecretIdError):"},{"line_number":413,"context_line":"                        self.logger.error("},{"line_number":414,"context_line":"                            \"Error decrypting container listing for \""},{"line_number":415,"context_line":"                            \"%s/%s with key %s: %s\","},{"line_number":416,"context_line":"                            req.path_info, obj_dict[\u0027name\u0027],"},{"line_number":417,"context_line":"                            crypto_meta[\u0027key_id\u0027], err)"},{"line_number":418,"context_line":"                    elif err.args[0] not in bad_keys:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_0971f80c","line":415,"range":{"start_line":415,"start_character":40,"end_line":415,"end_character":43},"updated":"2019-02-07 18:15:14.000000000","message":"Probably more robust to log the meta -- the meta *should* always include a key_id, but just in case...","commit_id":"e9546d5c198a150ace2632188e736882d1d0af40"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"e04881248644d63d6beefe316e69342ade492b48","unresolved":true,"context_lines":[{"line_number":443,"context_line":"                            \"Error decrypting container listing for \""},{"line_number":444,"context_line":"                            \"%s/%s with key %s: %s\","},{"line_number":445,"context_line":"                            req.path_info, obj_dict[\u0027name\u0027],"},{"line_number":446,"context_line":"                            crypto_meta[\u0027key_id\u0027], err)"},{"line_number":447,"context_line":"                    elif err.args[0] not in bad_keys:"},{"line_number":448,"context_line":"                        # Only warn about an unknown key once per listing"},{"line_number":449,"context_line":"                        self.logger.error("}],"source_content_type":"text/x-python","patch_set":3,"id":"5b7d1e56_329f7a11","line":446,"range":{"start_line":446,"start_character":28,"end_line":446,"end_character":39},"updated":"2026-07-09 15:40:06.000000000","message":"`key_id` might not be set, right? And would lead again to a 500? WDYT about this small change?\n\n    crypto_meta.get(\u0027key_id\u0027), err)","commit_id":"cf16994ac5c6525c06242db6038ac412629c4398"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"9c601c1ef950976b0cc1c6820433466512067338","unresolved":true,"context_lines":[{"line_number":443,"context_line":"                            \"Error decrypting container listing for \""},{"line_number":444,"context_line":"                            \"%s/%s with key %s: %s\","},{"line_number":445,"context_line":"                            req.path_info, obj_dict[\u0027name\u0027],"},{"line_number":446,"context_line":"                            crypto_meta[\u0027key_id\u0027], err)"},{"line_number":447,"context_line":"                    elif err.args[0] not in bad_keys:"},{"line_number":448,"context_line":"                        # Only warn about an unknown key once per listing"},{"line_number":449,"context_line":"                        self.logger.error("}],"source_content_type":"text/x-python","patch_set":3,"id":"3e1f8621_61fcce59","line":446,"range":{"start_line":446,"start_character":28,"end_line":446,"end_character":39},"in_reply_to":"0d974f60_0e1eb5ea","updated":"2026-07-13 13:13:41.000000000","message":"Oh yes, you\u0027re right! I thought it is missing b/c of the change in test_cont_get_json_req_with_cipher_mismatch - using \u0027.get()\u0027 would not require a change in test_cont_get_json_req_with_cipher_mismatch.\n\nHowever, that\u0027s only the test that is lacking a key_id - so this is fine with me (nit: could still use a .get() and drop the test change).","commit_id":"cf16994ac5c6525c06242db6038ac412629c4398"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e484be0af5cb812c0129a7b390dace5cf45e08ce","unresolved":true,"context_lines":[{"line_number":443,"context_line":"                            \"Error decrypting container listing for \""},{"line_number":444,"context_line":"                            \"%s/%s with key %s: %s\","},{"line_number":445,"context_line":"                            req.path_info, obj_dict[\u0027name\u0027],"},{"line_number":446,"context_line":"                            crypto_meta[\u0027key_id\u0027], err)"},{"line_number":447,"context_line":"                    elif err.args[0] not in bad_keys:"},{"line_number":448,"context_line":"                        # Only warn about an unknown key once per listing"},{"line_number":449,"context_line":"                        self.logger.error("}],"source_content_type":"text/x-python","patch_set":3,"id":"762ec2df_803daa65","line":446,"range":{"start_line":446,"start_character":28,"end_line":446,"end_character":39},"in_reply_to":"3e1f8621_61fcce59","updated":"2026-07-13 17:04:34.000000000","message":"I feel like it\u0027s better to have tests more accurately reflect the code -- and have the code remain a little brittle in the face of unexpected states. Then we can better characterize how we arrive at those states, decide how we ought to handle them, and fix things so they\u0027re no longer unexpected.\n\nFWIW, I also looked at fixing `fake_get_crypto_meta` to default in some `key_id` if not provided -- but then realized that while `X-Object-Sysmeta-Container-Update-Override-Etag` always gets a `key_id` in its crypto meta, not every place we store crypto meta does 😕 Notably:\n- Anything in the `X-Object-Transient-Sysmeta-Crypto-Meta-*` namespace just has `cipher` and `iv` keys, relying on `X-Object-Transient-Sysmeta-Crypto-Meta` to provide the `key_id`\n- `X-Object-Sysmeta-Crypto-Etag` also just has `cipher` and `iv` keys, relying on `X-Object-Sysmeta-Crypto-Body-Meta` to provide the `key_id`","commit_id":"cf16994ac5c6525c06242db6038ac412629c4398"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ddc3a31a9a12f9f2c91c849d7b7103e38139d431","unresolved":true,"context_lines":[{"line_number":443,"context_line":"                            \"Error decrypting container listing for \""},{"line_number":444,"context_line":"                            \"%s/%s with key %s: %s\","},{"line_number":445,"context_line":"                            req.path_info, obj_dict[\u0027name\u0027],"},{"line_number":446,"context_line":"                            crypto_meta[\u0027key_id\u0027], err)"},{"line_number":447,"context_line":"                    elif err.args[0] not in bad_keys:"},{"line_number":448,"context_line":"                        # Only warn about an unknown key once per listing"},{"line_number":449,"context_line":"                        self.logger.error("}],"source_content_type":"text/x-python","patch_set":3,"id":"0d974f60_0e1eb5ea","line":446,"range":{"start_line":446,"start_character":28,"end_line":446,"end_character":39},"in_reply_to":"5b7d1e56_329f7a11","updated":"2026-07-09 16:37:00.000000000","message":"`key_id` should [always be set](https://github.com/openstack/swift/blob/2.38.0/swift/common/middleware/crypto/encrypter.py#L173-L176) -- but it [might not contain a `secret_id`](https://github.com/openstack/swift/blob/2.38.0/swift/common/middleware/crypto/keymaster.py#L53-L61) (which is I think what you were thinking of).","commit_id":"cf16994ac5c6525c06242db6038ac412629c4398"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6886b7a279f39498d72904bcc476990b44726c2e","unresolved":true,"context_lines":[{"line_number":443,"context_line":"                            \"Error decrypting container listing for \""},{"line_number":444,"context_line":"                            \"%s/%s with key %s: %s\","},{"line_number":445,"context_line":"                            req.path_info, obj_dict[\u0027name\u0027],"},{"line_number":446,"context_line":"                            crypto_meta[\u0027key_id\u0027], err)"},{"line_number":447,"context_line":"                    elif err.args[0] not in bad_keys:"},{"line_number":448,"context_line":"                        # Only warn about an unknown key once per listing"},{"line_number":449,"context_line":"                        self.logger.error("}],"source_content_type":"text/x-python","patch_set":3,"id":"d45fb1e6_e9ed7df8","line":446,"range":{"start_line":446,"start_character":28,"end_line":446,"end_character":39},"in_reply_to":"762ec2df_803daa65","updated":"2026-07-14 18:43:57.000000000","message":"I\u0027d raise the same original comment. We do NOT assume ``key_id`` is set earlier in the execution path in ``get_decryption_keys`` https://github.com/openstack/swift/blob/7e05e539f7171adc8375361d012a542a9512e1c6/swift/common/middleware/crypto/decrypter.py#L152\n\nIt feels tenuous to rely on the encryter module always setting it for this module to be safe - so I\u0027d prefer we use ``get(\u0027key_id\u0027)`` even if we could prove that we\u0027d have an UnknownSecretIdError is ``key_id`` didn\u0027t exist, because it\u0027s just less mental gymnastics to understand that the code is safe.","commit_id":"cf16994ac5c6525c06242db6038ac412629c4398"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"df0fcfde3b2acad0ca93c68d4cdbe1e44598bb70","unresolved":false,"context_lines":[{"line_number":443,"context_line":"                            \"Error decrypting container listing for \""},{"line_number":444,"context_line":"                            \"%s/%s with key %s: %s\","},{"line_number":445,"context_line":"                            req.path_info, obj_dict[\u0027name\u0027],"},{"line_number":446,"context_line":"                            crypto_meta[\u0027key_id\u0027], err)"},{"line_number":447,"context_line":"                    elif err.args[0] not in bad_keys:"},{"line_number":448,"context_line":"                        # Only warn about an unknown key once per listing"},{"line_number":449,"context_line":"                        self.logger.error("}],"source_content_type":"text/x-python","patch_set":3,"id":"e08bba18_bf8c620a","line":446,"range":{"start_line":446,"start_character":28,"end_line":446,"end_character":39},"in_reply_to":"d45fb1e6_e9ed7df8","updated":"2026-07-14 21:28:08.000000000","message":"Done","commit_id":"cf16994ac5c6525c06242db6038ac412629c4398"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6886b7a279f39498d72904bcc476990b44726c2e","unresolved":true,"context_lines":[{"line_number":445,"context_line":"                            req.path_info, obj_dict[\u0027name\u0027],"},{"line_number":446,"context_line":"                            crypto_meta[\u0027key_id\u0027], err)"},{"line_number":447,"context_line":"                    elif err.args[0] not in bad_keys:"},{"line_number":448,"context_line":"                        # Only warn about an unknown key once per listing"},{"line_number":449,"context_line":"                        self.logger.error("},{"line_number":450,"context_line":"                            \"Error decrypting container listing: %s\","},{"line_number":451,"context_line":"                            err)"}],"source_content_type":"text/x-python","patch_set":3,"id":"a837960e_22f07a05","line":448,"updated":"2026-07-14 18:43:57.000000000","message":"not true! see follow-up patch","commit_id":"cf16994ac5c6525c06242db6038ac412629c4398"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"df0fcfde3b2acad0ca93c68d4cdbe1e44598bb70","unresolved":false,"context_lines":[{"line_number":445,"context_line":"                            req.path_info, obj_dict[\u0027name\u0027],"},{"line_number":446,"context_line":"                            crypto_meta[\u0027key_id\u0027], err)"},{"line_number":447,"context_line":"                    elif err.args[0] not in bad_keys:"},{"line_number":448,"context_line":"                        # Only warn about an unknown key once per listing"},{"line_number":449,"context_line":"                        self.logger.error("},{"line_number":450,"context_line":"                            \"Error decrypting container listing: %s\","},{"line_number":451,"context_line":"                            err)"}],"source_content_type":"text/x-python","patch_set":3,"id":"4caf9179_bc8bde29","line":448,"in_reply_to":"a837960e_22f07a05","updated":"2026-07-14 21:28:08.000000000","message":"Acknowledged","commit_id":"cf16994ac5c6525c06242db6038ac412629c4398"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6886b7a279f39498d72904bcc476990b44726c2e","unresolved":true,"context_lines":[{"line_number":448,"context_line":"                        # Only warn about an unknown key once per listing"},{"line_number":449,"context_line":"                        self.logger.error("},{"line_number":450,"context_line":"                            \"Error decrypting container listing: %s\","},{"line_number":451,"context_line":"                            err)"},{"line_number":452,"context_line":"                        bad_keys.add(err.args[0])"},{"line_number":453,"context_line":"                    obj_dict[\u0027hash\u0027] \u003d \u0027\u003cunknown\u003e\u0027"},{"line_number":454,"context_line":"        return obj_dict"}],"source_content_type":"text/x-python","patch_set":3,"id":"eab105d5_1da1a984","line":451,"updated":"2026-07-14 18:43:57.000000000","message":"off-topic: why doesn\u0027t this have the path?","commit_id":"cf16994ac5c6525c06242db6038ac412629c4398"}],"test/unit/common/middleware/crypto/test_decrypter.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6886b7a279f39498d72904bcc476990b44726c2e","unresolved":true,"context_lines":[{"line_number":1162,"context_line":""},{"line_number":1163,"context_line":"    def test_cont_get_json_req_with_bad_key(self):"},{"line_number":1164,"context_line":"        key_id \u003d {\u0027path\u0027: \u0027/a/c/testfile\u0027}"},{"line_number":1165,"context_line":"        bad_crypto_meta \u003d fake_get_crypto_meta(key_id\u003dkey_id)"},{"line_number":1166,"context_line":"        key \u003d fetch_crypto_keys()[\u0027container\u0027]"},{"line_number":1167,"context_line":"        pt_etag \u003d \u0027c6e8196d7f0fff6444b90861fe8d609d\u0027"},{"line_number":1168,"context_line":"        ct_etag \u003d encrypt_and_append_meta(pt_etag, key[:-1] + b\u0027x\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"67a9b04d_86a2d1bc","line":1165,"range":{"start_line":1165,"start_character":8,"end_line":1165,"end_character":23},"updated":"2026-07-14 18:43:57.000000000","message":"IIUC this isn\u0027t \u0027bad\u0027 in this test?","commit_id":"cf16994ac5c6525c06242db6038ac412629c4398"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6886b7a279f39498d72904bcc476990b44726c2e","unresolved":true,"context_lines":[{"line_number":1165,"context_line":"        bad_crypto_meta \u003d fake_get_crypto_meta(key_id\u003dkey_id)"},{"line_number":1166,"context_line":"        key \u003d fetch_crypto_keys()[\u0027container\u0027]"},{"line_number":1167,"context_line":"        pt_etag \u003d \u0027c6e8196d7f0fff6444b90861fe8d609d\u0027"},{"line_number":1168,"context_line":"        ct_etag \u003d encrypt_and_append_meta(pt_etag, key[:-1] + b\u0027x\u0027,"},{"line_number":1169,"context_line":"                                          crypto_meta\u003dbad_crypto_meta)"},{"line_number":1170,"context_line":""},{"line_number":1171,"context_line":"        obj_dict_1 \u003d {\"bytes\": 16,"}],"source_content_type":"text/x-python","patch_set":3,"id":"33bad613_7b254ed5","line":1168,"range":{"start_line":1168,"start_character":51,"end_line":1168,"end_character":66},"updated":"2026-07-14 18:43:57.000000000","message":"ok, that IS bad though","commit_id":"cf16994ac5c6525c06242db6038ac412629c4398"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6886b7a279f39498d72904bcc476990b44726c2e","unresolved":true,"context_lines":[{"line_number":1174,"context_line":"                      \"name\": \"testfile\","},{"line_number":1175,"context_line":"                      \"content_type\": \"image/jpeg\"}"},{"line_number":1176,"context_line":""},{"line_number":1177,"context_line":"        listing \u003d [obj_dict_1]"},{"line_number":1178,"context_line":"        fake_body \u003d json.dumps(listing).encode(\u0027ascii\u0027)"},{"line_number":1179,"context_line":""},{"line_number":1180,"context_line":"        resp \u003d self._make_cont_get_req(fake_body, \u0027json\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"8c929fff_d5911071","line":1177,"range":{"start_line":1177,"start_character":8,"end_line":1177,"end_character":30},"updated":"2026-07-14 18:43:57.000000000","message":"there\u0027s no verification that the error is emitted for each listing item, vs the (claimed) one-log-per listing for the missing key error\n\n(turns out that claim is wrong but that\u0027s off-topic)","commit_id":"cf16994ac5c6525c06242db6038ac412629c4398"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"df0fcfde3b2acad0ca93c68d4cdbe1e44598bb70","unresolved":false,"context_lines":[{"line_number":1174,"context_line":"                      \"name\": \"testfile\","},{"line_number":1175,"context_line":"                      \"content_type\": \"image/jpeg\"}"},{"line_number":1176,"context_line":""},{"line_number":1177,"context_line":"        listing \u003d [obj_dict_1]"},{"line_number":1178,"context_line":"        fake_body \u003d json.dumps(listing).encode(\u0027ascii\u0027)"},{"line_number":1179,"context_line":""},{"line_number":1180,"context_line":"        resp \u003d self._make_cont_get_req(fake_body, \u0027json\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7be29d39_5e2a32fe","line":1177,"range":{"start_line":1177,"start_character":8,"end_line":1177,"end_character":30},"in_reply_to":"8c929fff_d5911071","updated":"2026-07-14 21:28:08.000000000","message":"Done, thanks!","commit_id":"cf16994ac5c6525c06242db6038ac412629c4398"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6886b7a279f39498d72904bcc476990b44726c2e","unresolved":true,"context_lines":[{"line_number":1186,"context_line":"        self.assertIn(\"invalid continuation byte\","},{"line_number":1187,"context_line":"                      self.decrypter.logger.get_lines_for_level(\u0027error\u0027)[0])"},{"line_number":1188,"context_line":"        self.assertIn(\u0027Error decrypting container listing\u0027,"},{"line_number":1189,"context_line":"                      self.decrypter.logger.get_lines_for_level(\u0027error\u0027)[0])"},{"line_number":1190,"context_line":""},{"line_number":1191,"context_line":"    def test_cont_get_json_req_with_unknown_secret_id(self):"},{"line_number":1192,"context_line":"        bad_crypto_meta \u003d fake_get_crypto_meta()"}],"source_content_type":"text/x-python","patch_set":3,"id":"9b54ea5c_697d3372","line":1189,"updated":"2026-07-14 18:43:57.000000000","message":"this ought to cover the new additional message text\n\n```\nself.assertIn(\"Error decrypting container listing for \"\n                      \"/v1/a/c//testfile with key {\u0027path\u0027: \u0027/a/c/testfile\u0027}\",\n                      self.decrypter.logger.get_lines_for_level(\u0027error\u0027)[0])\n```","commit_id":"cf16994ac5c6525c06242db6038ac412629c4398"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"df0fcfde3b2acad0ca93c68d4cdbe1e44598bb70","unresolved":false,"context_lines":[{"line_number":1186,"context_line":"        self.assertIn(\"invalid continuation byte\","},{"line_number":1187,"context_line":"                      self.decrypter.logger.get_lines_for_level(\u0027error\u0027)[0])"},{"line_number":1188,"context_line":"        self.assertIn(\u0027Error decrypting container listing\u0027,"},{"line_number":1189,"context_line":"                      self.decrypter.logger.get_lines_for_level(\u0027error\u0027)[0])"},{"line_number":1190,"context_line":""},{"line_number":1191,"context_line":"    def test_cont_get_json_req_with_unknown_secret_id(self):"},{"line_number":1192,"context_line":"        bad_crypto_meta \u003d fake_get_crypto_meta()"}],"source_content_type":"text/x-python","patch_set":3,"id":"fb60935c_48db9d1c","line":1189,"in_reply_to":"9b54ea5c_697d3372","updated":"2026-07-14 21:28:08.000000000","message":"Done, thanks!","commit_id":"cf16994ac5c6525c06242db6038ac412629c4398"}]}
