)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4e6299ffc012cb5970ee0cc82c4fdd4dd08fd30f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"8b748b5a_5cd97d40","updated":"2026-05-14 13:57:59.000000000","message":"-1 is for the use of float. I assume this is not something broadly useful that we want to go upstream to `requests` with?","commit_id":"16c44f05640dcec84187a238067373d9266c3758"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"1d05b06c123e8be12f36fd9949c7ca02026c4717","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"f03e086c_7c9fa781","in_reply_to":"8b748b5a_5cd97d40","updated":"2026-05-14 14:39:55.000000000","message":"Great question!\n\nLargely claude went with this basic model because requests basically passes the buck to urllib3 in their docs, (while urllib3 also only exposes the knobs on create_urllib3_context (which largely just wraps sslcontext anyhow) with a specific style) and then basically says \"if you want fine-grained, just supply your own SSLContext override\". The urllib context creation option option requires an integer be supplied which maps to the enum, but I\u0027m worried the since that is also rooted in cpython c code.\n\nAlso, ultimately, if we want to go down the route of mtls, ever, we\u0027re going to need to use this same model.","commit_id":"16c44f05640dcec84187a238067373d9266c3758"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d525c015f4a5f2ca2918e8b3cca66a0b91d4354a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"41f2186c_92d431fb","updated":"2026-05-15 21:18:30.000000000","message":"One additional thing I missed previously","commit_id":"73f400f6159ac410484bee7b23213fcff86f7e25"}],"keystoneauth1/fixture/keystoneauth_betamax.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4e6299ffc012cb5970ee0cc82c4fdd4dd08fd30f","unresolved":true,"context_lines":[{"line_number":124,"context_line":"def _construct_session_with_betamax("},{"line_number":125,"context_line":"    fixture: BetamaxFixture,"},{"line_number":126,"context_line":"    session_obj: requests.Session | None \u003d None,"},{"line_number":127,"context_line":"    **kwargs: ty.Any,"},{"line_number":128,"context_line":") -\u003e requests.Session:"},{"line_number":129,"context_line":"    # NOTE(morganfainberg): This function should contain the logic of"},{"line_number":130,"context_line":"    # keystoneauth1.session._construct_session as it replaces the"}],"source_content_type":"text/x-python","patch_set":2,"id":"2c675125_9bf9dece","line":127,"updated":"2026-05-14 13:57:59.000000000","message":"Can you just sync these methods?\n\n```suggestion\n    tls_ciphers: str | None \u003d None,\n    tls_min_version: float | None \u003d None,\n```","commit_id":"16c44f05640dcec84187a238067373d9266c3758"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"1d05b06c123e8be12f36fd9949c7ca02026c4717","unresolved":true,"context_lines":[{"line_number":124,"context_line":"def _construct_session_with_betamax("},{"line_number":125,"context_line":"    fixture: BetamaxFixture,"},{"line_number":126,"context_line":"    session_obj: requests.Session | None \u003d None,"},{"line_number":127,"context_line":"    **kwargs: ty.Any,"},{"line_number":128,"context_line":") -\u003e requests.Session:"},{"line_number":129,"context_line":"    # NOTE(morganfainberg): This function should contain the logic of"},{"line_number":130,"context_line":"    # keystoneauth1.session._construct_session as it replaces the"}],"source_content_type":"text/x-python","patch_set":2,"id":"093a448d_e12df8fb","line":127,"in_reply_to":"2c675125_9bf9dece","updated":"2026-05-14 14:39:55.000000000","message":"sure","commit_id":"16c44f05640dcec84187a238067373d9266c3758"}],"keystoneauth1/loading/session.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d525c015f4a5f2ca2918e8b3cca66a0b91d4354a","unresolved":true,"context_lines":[{"line_number":271,"context_line":"            ),"},{"line_number":272,"context_line":"            cfg.StrOpt("},{"line_number":273,"context_line":"                \u0027tls-min-version\u0027,"},{"line_number":274,"context_line":"                deprecated_opts\u003ddeprecated_opts.get(\u0027tls-min-version\u0027),"},{"line_number":275,"context_line":"                help\u003d\u0027The minimum TLS version to require for \u0027"},{"line_number":276,"context_line":"                \"TLS connections, e.g. \u00271.2\u0027 or \u00271.3\u0027. \""},{"line_number":277,"context_line":"                \u0027Defers to the system crypto policy \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"a1677647_65dee258","line":274,"updated":"2026-05-15 21:18:30.000000000","message":"Should this have `choices`?","commit_id":"73f400f6159ac410484bee7b23213fcff86f7e25"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"fad9e64ed773abd68aaf79c3800a6e7fb1ab98b1","unresolved":true,"context_lines":[{"line_number":271,"context_line":"            ),"},{"line_number":272,"context_line":"            cfg.StrOpt("},{"line_number":273,"context_line":"                \u0027tls-min-version\u0027,"},{"line_number":274,"context_line":"                deprecated_opts\u003ddeprecated_opts.get(\u0027tls-min-version\u0027),"},{"line_number":275,"context_line":"                help\u003d\u0027The minimum TLS version to require for \u0027"},{"line_number":276,"context_line":"                \"TLS connections, e.g. \u00271.2\u0027 or \u00271.3\u0027. \""},{"line_number":277,"context_line":"                \u0027Defers to the system crypto policy \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"d93737cb_26078e42","line":274,"in_reply_to":"a1677647_65dee258","updated":"2026-05-19 14:14:31.000000000","message":"We could, Absent implies None,.. I guess the reason to include it is to signify what we expect value wise.","commit_id":"73f400f6159ac410484bee7b23213fcff86f7e25"}],"keystoneauth1/session.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4e6299ffc012cb5970ee0cc82c4fdd4dd08fd30f","unresolved":true,"context_lines":[{"line_number":1673,"context_line":"    def __init__("},{"line_number":1674,"context_line":"        self,"},{"line_number":1675,"context_line":"        *args: ty.Any,"},{"line_number":1676,"context_line":"        tls_ciphers: str | None \u003d None,"},{"line_number":1677,"context_line":"        tls_min_version: float | None \u003d None,"},{"line_number":1678,"context_line":"        **kwargs: ty.Any,"},{"line_number":1679,"context_line":"    ):"},{"line_number":1680,"context_line":"        self.tls_ciphers \u003d tls_ciphers"}],"source_content_type":"text/x-python","patch_set":2,"id":"927374a2_93abd661","line":1677,"range":{"start_line":1676,"start_character":39,"end_line":1677,"end_character":45},"updated":"2026-05-14 13:57:59.000000000","message":"I don\u0027t believe this is a float. Rather, it\u0027s a version number. I imagine a string would be more appropriate?\n\n```suggestion\n        tls_ciphers: str | None \u003d None,\n        tls_min_version: ty.Literal[\u00271.2\u0027, \u00271.3\u0027] | None \u003d None,\n```\n\nditto for other uses of float in this file","commit_id":"16c44f05640dcec84187a238067373d9266c3758"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"fad9e64ed773abd68aaf79c3800a6e7fb1ab98b1","unresolved":true,"context_lines":[{"line_number":1673,"context_line":"    def __init__("},{"line_number":1674,"context_line":"        self,"},{"line_number":1675,"context_line":"        *args: ty.Any,"},{"line_number":1676,"context_line":"        tls_ciphers: str | None \u003d None,"},{"line_number":1677,"context_line":"        tls_min_version: float | None \u003d None,"},{"line_number":1678,"context_line":"        **kwargs: ty.Any,"},{"line_number":1679,"context_line":"    ):"},{"line_number":1680,"context_line":"        self.tls_ciphers \u003d tls_ciphers"}],"source_content_type":"text/x-python","patch_set":2,"id":"c548db65_1d545d40","line":1677,"range":{"start_line":1676,"start_character":39,"end_line":1677,"end_character":45},"in_reply_to":"5b13e0c0_fcc60ad9","updated":"2026-05-19 14:14:31.000000000","message":"Yeah, A sign of how busy I also am, don\u0027t even remember what is precisely in my changes. Woohoo! 😉","commit_id":"16c44f05640dcec84187a238067373d9266c3758"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"1d05b06c123e8be12f36fd9949c7ca02026c4717","unresolved":true,"context_lines":[{"line_number":1673,"context_line":"    def __init__("},{"line_number":1674,"context_line":"        self,"},{"line_number":1675,"context_line":"        *args: ty.Any,"},{"line_number":1676,"context_line":"        tls_ciphers: str | None \u003d None,"},{"line_number":1677,"context_line":"        tls_min_version: float | None \u003d None,"},{"line_number":1678,"context_line":"        **kwargs: ty.Any,"},{"line_number":1679,"context_line":"    ):"},{"line_number":1680,"context_line":"        self.tls_ciphers \u003d tls_ciphers"}],"source_content_type":"text/x-python","patch_set":2,"id":"c426146f_66ae66c1","line":1677,"range":{"start_line":1676,"start_character":39,"end_line":1677,"end_character":45},"in_reply_to":"927374a2_93abd661","updated":"2026-05-14 14:39:55.000000000","message":"My perception is version to a user, in line with the overall protocol model, is more float style as opposed to semver, because of how widely used the base protocol model is, you can really only do major and semi-major revisions. No sub-versioning beyond that, so quite literally \"float\" seems right, but we could do string.","commit_id":"16c44f05640dcec84187a238067373d9266c3758"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b142dfe3f6a3d2fa2f2b09c961358fe0a5d7677a","unresolved":true,"context_lines":[{"line_number":1673,"context_line":"    def __init__("},{"line_number":1674,"context_line":"        self,"},{"line_number":1675,"context_line":"        *args: ty.Any,"},{"line_number":1676,"context_line":"        tls_ciphers: str | None \u003d None,"},{"line_number":1677,"context_line":"        tls_min_version: float | None \u003d None,"},{"line_number":1678,"context_line":"        **kwargs: ty.Any,"},{"line_number":1679,"context_line":"    ):"},{"line_number":1680,"context_line":"        self.tls_ciphers \u003d tls_ciphers"}],"source_content_type":"text/x-python","patch_set":2,"id":"a61f1b95_28201109","line":1677,"range":{"start_line":1676,"start_character":39,"end_line":1677,"end_character":45},"in_reply_to":"a0cfb03a_0685f632","updated":"2026-05-15 13:18:04.000000000","message":"Ahh! Okay, You\u0027ve got a really valid point there. I don\u0027t really like the idea of doing extra enforcement frameworking in the library and just passing it through. feels more future proof, but... It also took us over twenty years to go from 1.1 to 1.3. I feel old.... Expect a revision later today!","commit_id":"16c44f05640dcec84187a238067373d9266c3758"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"95939f6d77adcd2dc94cde34e6e4938c3464d66d","unresolved":true,"context_lines":[{"line_number":1673,"context_line":"    def __init__("},{"line_number":1674,"context_line":"        self,"},{"line_number":1675,"context_line":"        *args: ty.Any,"},{"line_number":1676,"context_line":"        tls_ciphers: str | None \u003d None,"},{"line_number":1677,"context_line":"        tls_min_version: float | None \u003d None,"},{"line_number":1678,"context_line":"        **kwargs: ty.Any,"},{"line_number":1679,"context_line":"    ):"},{"line_number":1680,"context_line":"        self.tls_ciphers \u003d tls_ciphers"}],"source_content_type":"text/x-python","patch_set":2,"id":"5b13e0c0_fcc60ad9","line":1677,"range":{"start_line":1676,"start_character":39,"end_line":1677,"end_character":45},"in_reply_to":"a61f1b95_28201109","updated":"2026-05-15 15:06:56.000000000","message":"\u003e Ahh! Okay, You\u0027ve got a really valid point there. I don\u0027t really like the idea of doing extra enforcement frameworking in the library and just passing it through. feels more future proof,\n\nWe already do this [below](https://review.opendev.org/c/openstack/keystoneauth/+/988544/2/keystoneauth1/session.py#1726)\n\n\u003e but...It also took us over twenty years to go from 1.1 to 1.3. I feel old.... \n\nYou and me both...\n\n\u003e Expect a revision later today!\n\n🙏","commit_id":"16c44f05640dcec84187a238067373d9266c3758"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"26b4111df4b1de355f35956291c1912b195745a1","unresolved":true,"context_lines":[{"line_number":1673,"context_line":"    def __init__("},{"line_number":1674,"context_line":"        self,"},{"line_number":1675,"context_line":"        *args: ty.Any,"},{"line_number":1676,"context_line":"        tls_ciphers: str | None \u003d None,"},{"line_number":1677,"context_line":"        tls_min_version: float | None \u003d None,"},{"line_number":1678,"context_line":"        **kwargs: ty.Any,"},{"line_number":1679,"context_line":"    ):"},{"line_number":1680,"context_line":"        self.tls_ciphers \u003d tls_ciphers"}],"source_content_type":"text/x-python","patch_set":2,"id":"a0cfb03a_0685f632","line":1677,"range":{"start_line":1676,"start_character":39,"end_line":1677,"end_character":45},"in_reply_to":"c426146f_66ae66c1","updated":"2026-05-14 14:54:01.000000000","message":"Right, but I\u0027m not saying it\u0027s semver either. By version I mean specifically the versioning schema used for TLS, i.e. a domain/enum of `{1.0, 1.1, 1.2, 1.3}` (though we only want to support the latter two now). `Literal` feels like the best way to capture _that_ here: an enum would be a good deal heavier weight and a plain string would prevent people catching issues with invalid versions (e.g. `1.0`) before runtime. A float by comparison would suggest `3.14`, `-2.0` or `0.001` would all be possible which isn\u0027t true and would be misleading, IMO.","commit_id":"16c44f05640dcec84187a238067373d9266c3758"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"1d05b06c123e8be12f36fd9949c7ca02026c4717","unresolved":true,"context_lines":[{"line_number":1679,"context_line":"    ):"},{"line_number":1680,"context_line":"        self.tls_ciphers \u003d tls_ciphers"},{"line_number":1681,"context_line":"        self.tls_min_version \u003d tls_min_version"},{"line_number":1682,"context_line":"        super().__init__(*args, **kwargs)"},{"line_number":1683,"context_line":""},{"line_number":1684,"context_line":"    def init_poolmanager(self, *args: ty.Any, **kwargs: ty.Any) -\u003e None:"},{"line_number":1685,"context_line":"        if \u0027socket_options\u0027 not in kwargs:"}],"source_content_type":"text/x-python","patch_set":2,"id":"8cd76205_d7878071","line":1682,"updated":"2026-05-14 14:39:55.000000000","message":"Todo: double check verify option logic doesn\u0027t need to be passed. I remember when we did similar in Ironic-Python-Agent, which doesn\u0027t use keystoneauth for an http session as it\u0027s calls are super simple without any keystone involvement, I think we may have hit an issue there and needed to define it. A cursory look doesn\u0027t indicate anything is broken, but a little more leg work is needed.","commit_id":"16c44f05640dcec84187a238067373d9266c3758"}]}
