)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"547b224ce87d03d5a581f149af96db7989d86bb3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"90092c54_25614638","updated":"2025-02-26 09:54:26.000000000","message":"recheck","commit_id":"8b474cea2bb2ea61d56519ee4069b37c218ab927"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"98a3eb203f201d13d8ee65d15987c0481f23d8cc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"756958e3_789b02ec","updated":"2025-03-05 14:10:14.000000000","message":"recheck ci fixed","commit_id":"8b474cea2bb2ea61d56519ee4069b37c218ab927"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4a2ccc18bb1b9b21e8c259aaa301ce926a2b92dc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"e4c56532_e6ab098a","updated":"2025-02-24 14:24:14.000000000","message":"recheck unrelated failure","commit_id":"8b474cea2bb2ea61d56519ee4069b37c218ab927"}],"networking_generic_switch/devices/netmiko_devices/__init__.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"dc740674a99a0ee4441142339589890db570e538","unresolved":true,"context_lines":[{"line_number":35,"context_line":"# NOTE(TheJulia) monkey patch paramiko\u0027s get_finerprint function"},{"line_number":36,"context_line":"# to use sha256 instead of md5, since Paramiko\u0027s maintainer doesn\u0027t"},{"line_number":37,"context_line":"# seem to be concerned about FIPS compliance."},{"line_number":38,"context_line":"_pkey.get_fingerprint \u003d lambda x: hashlib.sha256(x.asbytes()).digest()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":41,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":2,"id":"b9299a94_782cf17a","line":38,"updated":"2025-02-19 20:23:42.000000000","message":"I\u0027m confused as to how this is layered.\n\nI assume `import paramiko; paramiko.pkey \u003d lambda...` doesn\u0027t work for some reason? But I would expect if that broke, for us to have to monkeypatch *before* we imported paramiko?\n\nJust curious because it seems implied that ordering is important; maybe the comment should reflect that?","commit_id":"8b474cea2bb2ea61d56519ee4069b37c218ab927"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"7be1dc2dc43467e2a1928a8ec449fe7ac44561e5","unresolved":true,"context_lines":[{"line_number":35,"context_line":"# NOTE(TheJulia) monkey patch paramiko\u0027s get_finerprint function"},{"line_number":36,"context_line":"# to use sha256 instead of md5, since Paramiko\u0027s maintainer doesn\u0027t"},{"line_number":37,"context_line":"# seem to be concerned about FIPS compliance."},{"line_number":38,"context_line":"_pkey.get_fingerprint \u003d lambda x: hashlib.sha256(x.asbytes()).digest()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":41,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":2,"id":"e525f38a_5a96197a","line":38,"in_reply_to":"1ee72124_0020ace1","updated":"2025-02-19 21:02:26.000000000","message":"I\u0027m still confused as to how then this is effective, given we still import paramiko (and execute it\u0027s __init__ ... right?) before the monkey patch is done?\n\nAt this point I think this is less a question about your code and more about my mental model of what is going on being shaky...","commit_id":"8b474cea2bb2ea61d56519ee4069b37c218ab927"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ce569791501a129c09ef2d42afa4e0167bcd24de","unresolved":true,"context_lines":[{"line_number":35,"context_line":"# NOTE(TheJulia) monkey patch paramiko\u0027s get_finerprint function"},{"line_number":36,"context_line":"# to use sha256 instead of md5, since Paramiko\u0027s maintainer doesn\u0027t"},{"line_number":37,"context_line":"# seem to be concerned about FIPS compliance."},{"line_number":38,"context_line":"_pkey.get_fingerprint \u003d lambda x: hashlib.sha256(x.asbytes()).digest()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":41,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ee72124_0020ace1","line":38,"in_reply_to":"b9299a94_782cf17a","updated":"2025-02-19 20:58:58.000000000","message":"yeah, unfortunately part of the issue here is that loading paramiko __init__.py is initializing PKey, so doing it after the fact is too late.\n\nFor context: PKey is a class, get_fingerprint is the method on that class.","commit_id":"8b474cea2bb2ea61d56519ee4069b37c218ab927"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"589d3adb245cd0b6139b316cffb57de9966e79b8","unresolved":true,"context_lines":[{"line_number":35,"context_line":"# NOTE(TheJulia) monkey patch paramiko\u0027s get_finerprint function"},{"line_number":36,"context_line":"# to use sha256 instead of md5, since Paramiko\u0027s maintainer doesn\u0027t"},{"line_number":37,"context_line":"# seem to be concerned about FIPS compliance."},{"line_number":38,"context_line":"_pkey.get_fingerprint \u003d lambda x: hashlib.sha256(x.asbytes()).digest()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":41,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":2,"id":"d11f7aab_74539d72","line":38,"in_reply_to":"e525f38a_5a96197a","updated":"2025-02-19 21:53:12.000000000","message":"We load the first copy in memory which we then monkeypatch and it is effective as it is the original. At least, that is how I understand it. Loads after the fact use the original copy. I\u0027m sure someone somewhere has this written up on how the bytecode model works, but I\u0027m going from memory here.","commit_id":"8b474cea2bb2ea61d56519ee4069b37c218ab927"}]}
