)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1005035,"name":"Dimitris Christodoulou","email":"dimitris.christodoulou@couchbase.com","username":"DemetrisChr","avatars":[{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"1ed69d734b43ae6c1ac7c2fb28c65af32c9d5471","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"a672e84b_d46a8066","updated":"2026-02-03 16:38:02.000000000","message":"The changes look great! I\u0027ve just left some minor comments.","commit_id":"d4d04763ef56d32379101d988ff581835b28af34"}],"acouchbase/logic/client_adapter.py":[{"author":{"_account_id":1005035,"name":"Dimitris Christodoulou","email":"dimitris.christodoulou@couchbase.com","username":"DemetrisChr","avatars":[{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"1ed69d734b43ae6c1ac7c2fb28c65af32c9d5471","unresolved":true,"context_lines":[{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    def _reset_connection(self):"},{"line_number":262,"context_line":"        self._connect_ft \u003d None"},{"line_number":263,"context_line":"        self._connection \u003d None"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f3a3e0b_93cbc17f","line":263,"updated":"2026-02-03 16:38:02.000000000","message":"Is setting this to `None` thread safe?","commit_id":"d4d04763ef56d32379101d988ff581835b28af34"},{"author":{"_account_id":1004568,"name":"Jared Casey","email":"jared.casey@couchbase.com","username":"thejcfactor","avatars":[{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e3aa5aab47b78525676dc763954fe3e4980e4654","unresolved":false,"context_lines":[{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    def _reset_connection(self):"},{"line_number":262,"context_line":"        self._connect_ft \u003d None"},{"line_number":263,"context_line":"        self._connection \u003d None"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa05b941_cc154c31","line":263,"in_reply_to":"23ef18ec_02e2f67e","updated":"2026-02-04 21:51:28.000000000","message":"Good catch.  I have create PYCBC-1744 to come back and clean this up prior to release.","commit_id":"d4d04763ef56d32379101d988ff581835b28af34"},{"author":{"_account_id":1004568,"name":"Jared Casey","email":"jared.casey@couchbase.com","username":"thejcfactor","avatars":[{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"6f644a4bc138b312c16e8b762a5e476c5ec9c81d","unresolved":true,"context_lines":[{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    def _reset_connection(self):"},{"line_number":262,"context_line":"        self._connect_ft \u003d None"},{"line_number":263,"context_line":"        self._connection \u003d None"}],"source_content_type":"text/x-python","patch_set":6,"id":"23ef18ec_02e2f67e","line":263,"in_reply_to":"9f3a3e0b_93cbc17f","updated":"2026-02-04 01:26:23.000000000","message":"So, I will ping you about this offline, but I think I will remove the resetting of the connection.  The C++ client does not allow us to re-open a cluster, so I think this logic does not make sense.","commit_id":"d4d04763ef56d32379101d988ff581835b28af34"}],"couchbase/cluster.py":[{"author":{"_account_id":1005035,"name":"Dimitris Christodoulou","email":"dimitris.christodoulou@couchbase.com","username":"DemetrisChr","avatars":[{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"1ed69d734b43ae6c1ac7c2fb28c65af32c9d5471","unresolved":true,"context_lines":[{"line_number":50,"context_line":"    from couchbase.search import SearchQuery, SearchRequest"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"class Cluster:"},{"line_number":54,"context_line":"    \"\"\"Create a Couchbase Cluster instance."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    The cluster instance exposes the operations which are available to be performed against a cluster."}],"source_content_type":"text/x-python","patch_set":6,"id":"dc28fb11_02d2ae2e","line":53,"updated":"2026-02-03 16:38:02.000000000","message":"`ClusterLogic` (and `BucketLogic`) are no longer used, right? Should those classes be removed entirely?","commit_id":"d4d04763ef56d32379101d988ff581835b28af34"},{"author":{"_account_id":1004568,"name":"Jared Casey","email":"jared.casey@couchbase.com","username":"thejcfactor","avatars":[{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e3aa5aab47b78525676dc763954fe3e4980e4654","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    from couchbase.search import SearchQuery, SearchRequest"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"class Cluster:"},{"line_number":54,"context_line":"    \"\"\"Create a Couchbase Cluster instance."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    The cluster instance exposes the operations which are available to be performed against a cluster."}],"source_content_type":"text/x-python","patch_set":6,"id":"4e55404c_5e16af54","line":53,"in_reply_to":"c7ebd45d_e9c72516","updated":"2026-02-04 21:51:28.000000000","message":"Acknowledged","commit_id":"d4d04763ef56d32379101d988ff581835b28af34"},{"author":{"_account_id":1004568,"name":"Jared Casey","email":"jared.casey@couchbase.com","username":"thejcfactor","avatars":[{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"6f644a4bc138b312c16e8b762a5e476c5ec9c81d","unresolved":true,"context_lines":[{"line_number":50,"context_line":"    from couchbase.search import SearchQuery, SearchRequest"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"class Cluster:"},{"line_number":54,"context_line":"    \"\"\"Create a Couchbase Cluster instance."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    The cluster instance exposes the operations which are available to be performed against a cluster."}],"source_content_type":"text/x-python","patch_set":6,"id":"c7ebd45d_e9c72516","line":53,"in_reply_to":"dc28fb11_02d2ae2e","updated":"2026-02-04 01:26:23.000000000","message":"I created PYCBC-1743 to address removal of all the Logic and Wrapper classes.","commit_id":"d4d04763ef56d32379101d988ff581835b28af34"}],"couchbase/logic/binding_map.py":[{"author":{"_account_id":1005035,"name":"Dimitris Christodoulou","email":"dimitris.christodoulou@couchbase.com","username":"DemetrisChr","avatars":[{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"1ed69d734b43ae6c1ac7c2fb28c65af32c9d5471","unresolved":true,"context_lines":[{"line_number":129,"context_line":"    build_deferred_indexes: Callable[..., Any]"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"MgmtOperationMap \u003d Union[CollectionMgmtOperationMap, QueryIndexMgmtOperationMap]"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"class BindingMap:"}],"source_content_type":"text/x-python","patch_set":6,"id":"2f97938f_65990e40","line":132,"updated":"2026-02-03 16:38:02.000000000","message":"This is missing `BucketMgmtOperationMap`. I\u0027m guessing we can just remove it though? I don\u0027t see anywhere where this would be needed as a type hint.","commit_id":"d4d04763ef56d32379101d988ff581835b28af34"},{"author":{"_account_id":1004568,"name":"Jared Casey","email":"jared.casey@couchbase.com","username":"thejcfactor","avatars":[{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"6f644a4bc138b312c16e8b762a5e476c5ec9c81d","unresolved":true,"context_lines":[{"line_number":129,"context_line":"    build_deferred_indexes: Callable[..., Any]"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"MgmtOperationMap \u003d Union[CollectionMgmtOperationMap, QueryIndexMgmtOperationMap]"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"class BindingMap:"}],"source_content_type":"text/x-python","patch_set":6,"id":"357d5b77_4a72a357","line":132,"in_reply_to":"2f97938f_65990e40","updated":"2026-02-04 01:26:23.000000000","message":"I will remove this.  I had it originally b/c I thought it might be needed, but as the code evolved I did not.","commit_id":"d4d04763ef56d32379101d988ff581835b28af34"},{"author":{"_account_id":1004568,"name":"Jared Casey","email":"jared.casey@couchbase.com","username":"thejcfactor","avatars":[{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e3aa5aab47b78525676dc763954fe3e4980e4654","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    build_deferred_indexes: Callable[..., Any]"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"MgmtOperationMap \u003d Union[CollectionMgmtOperationMap, QueryIndexMgmtOperationMap]"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"class BindingMap:"}],"source_content_type":"text/x-python","patch_set":6,"id":"c5a46759_76204303","line":132,"in_reply_to":"357d5b77_4a72a357","updated":"2026-02-04 21:51:28.000000000","message":"Acknowledged","commit_id":"d4d04763ef56d32379101d988ff581835b28af34"},{"author":{"_account_id":1005035,"name":"Dimitris Christodoulou","email":"dimitris.christodoulou@couchbase.com","username":"DemetrisChr","avatars":[{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"1ed69d734b43ae6c1ac7c2fb28c65af32c9d5471","unresolved":true,"context_lines":[{"line_number":132,"context_line":"MgmtOperationMap \u003d Union[CollectionMgmtOperationMap, QueryIndexMgmtOperationMap]"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"class BindingMap:"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def __init__(self) -\u003e None:"},{"line_number":138,"context_line":"        self._op_map \u003d {}"}],"source_content_type":"text/x-python","patch_set":6,"id":"f59a0059_4ba0a3bb","line":135,"updated":"2026-02-03 16:38:02.000000000","message":"From what I understand, currently, cluster/bucket/etc objects will each hold identical instances of the `BindingMap` class. Do you expect that in the future there would be differences between the `BindingMap` instances?\n\nWould it make sense to access the operation map via a class method instead? We could also have them use something like `BindingMap.INSTANCE` to avoid creating many identical copies.","commit_id":"d4d04763ef56d32379101d988ff581835b28af34"},{"author":{"_account_id":1004568,"name":"Jared Casey","email":"jared.casey@couchbase.com","username":"thejcfactor","avatars":[{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e3aa5aab47b78525676dc763954fe3e4980e4654","unresolved":false,"context_lines":[{"line_number":132,"context_line":"MgmtOperationMap \u003d Union[CollectionMgmtOperationMap, QueryIndexMgmtOperationMap]"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"class BindingMap:"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def __init__(self) -\u003e None:"},{"line_number":138,"context_line":"        self._op_map \u003d {}"}],"source_content_type":"text/x-python","patch_set":6,"id":"4606215f_1878d41d","line":135,"in_reply_to":"8d1078ad_31086146","updated":"2026-02-04 21:51:28.000000000","message":"Acknowledged","commit_id":"d4d04763ef56d32379101d988ff581835b28af34"},{"author":{"_account_id":1004568,"name":"Jared Casey","email":"jared.casey@couchbase.com","username":"thejcfactor","avatars":[{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"6f644a4bc138b312c16e8b762a5e476c5ec9c81d","unresolved":true,"context_lines":[{"line_number":132,"context_line":"MgmtOperationMap \u003d Union[CollectionMgmtOperationMap, QueryIndexMgmtOperationMap]"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"class BindingMap:"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def __init__(self) -\u003e None:"},{"line_number":138,"context_line":"        self._op_map \u003d {}"}],"source_content_type":"text/x-python","patch_set":6,"id":"8d1078ad_31086146","line":135,"in_reply_to":"f59a0059_4ba0a3bb","updated":"2026-02-04 01:26:23.000000000","message":"We talked about this one offline 😊","commit_id":"d4d04763ef56d32379101d988ff581835b28af34"}],"couchbase/logic/bucket_req_builder.py":[{"author":{"_account_id":1005035,"name":"Dimitris Christodoulou","email":"dimitris.christodoulou@couchbase.com","username":"DemetrisChr","avatars":[{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"31b1cb6d16d9498951f1d3ef1cbee7c904d5bbf9","unresolved":true,"context_lines":[{"line_number":61,"context_line":"                                                                  *options,"},{"line_number":62,"context_line":"                                                                  **kwargs))"},{"line_number":63,"context_line":"        if num_workers:"},{"line_number":64,"context_line":"            req.num_works \u003d num_workers"},{"line_number":65,"context_line":"        return req"}],"source_content_type":"text/x-python","patch_set":9,"id":"cae61b5b_73063b7d","line":64,"updated":"2026-02-13 10:58:09.000000000","message":"I spotted this while reviewing the scope/collection patch. This should be `req.num_workers` (The field in the request is named `num_workers`).","commit_id":"25439c38cb67962bad117dc6849db608b0398e21"},{"author":{"_account_id":1004568,"name":"Jared Casey","email":"jared.casey@couchbase.com","username":"thejcfactor","avatars":[{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"a8f7ac05ab2bfb8b6f8c7cd6ca6eeac239df12df","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                                                                  *options,"},{"line_number":62,"context_line":"                                                                  **kwargs))"},{"line_number":63,"context_line":"        if num_workers:"},{"line_number":64,"context_line":"            req.num_works \u003d num_workers"},{"line_number":65,"context_line":"        return req"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a2599cb_b91d8042","line":64,"in_reply_to":"cae61b5b_73063b7d","updated":"2026-02-13 16:26:00.000000000","message":"Done","commit_id":"25439c38cb67962bad117dc6849db608b0398e21"}],"couchbase/logic/client_adapter.py":[{"author":{"_account_id":1005035,"name":"Dimitris Christodoulou","email":"dimitris.christodoulou@couchbase.com","username":"DemetrisChr","avatars":[{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"1ed69d734b43ae6c1ac7c2fb28c65af32c9d5471","unresolved":true,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @property"},{"line_number":50,"context_line":"    def connected(self) -\u003e bool:"},{"line_number":51,"context_line":"        return self._connection is not None"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @property"},{"line_number":54,"context_line":"    def connection(self) -\u003e Optional[PyCapsuleType]:"}],"source_content_type":"text/x-python","patch_set":6,"id":"55ab832e_0e2908c3","line":51,"updated":"2026-02-03 16:38:02.000000000","message":"Can this ever return `False`? The connection is always created in the constructor. `close_connection` doesn\u0027t seem to clear `self._connection`. Does this need something like the `_reset_connection` after closing, as in the acouchbase API?\n\nIf so, then we might also need some kind of concurrency control around the connection object.","commit_id":"d4d04763ef56d32379101d988ff581835b28af34"},{"author":{"_account_id":1005035,"name":"Dimitris Christodoulou","email":"dimitris.christodoulou@couchbase.com","username":"DemetrisChr","avatars":[{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"fb1cdebe624de39053d79e7f5d4d2b189bedea4c","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @property"},{"line_number":50,"context_line":"    def connected(self) -\u003e bool:"},{"line_number":51,"context_line":"        return self._connection is not None"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @property"},{"line_number":54,"context_line":"    def connection(self) -\u003e Optional[PyCapsuleType]:"}],"source_content_type":"text/x-python","patch_set":6,"id":"49f87fc8_d6f88b50","line":51,"in_reply_to":"0bfb321c_b2c61c2e","updated":"2026-02-05 18:12:40.000000000","message":"\u003e Well, it can be False if the _execute_connect_request() errors out.\n\nYep, I didn\u0027t consider this. It makes sense to have it in this case.\n\n\u003e I made a note about _reset_connection(), but as the C++ client does not allow us to re-open a connection after we close, I think I can remove any logic around resetting the connection. \n\nSounds good to me","commit_id":"d4d04763ef56d32379101d988ff581835b28af34"},{"author":{"_account_id":1004568,"name":"Jared Casey","email":"jared.casey@couchbase.com","username":"thejcfactor","avatars":[{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"6f644a4bc138b312c16e8b762a5e476c5ec9c81d","unresolved":true,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @property"},{"line_number":50,"context_line":"    def connected(self) -\u003e bool:"},{"line_number":51,"context_line":"        return self._connection is not None"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @property"},{"line_number":54,"context_line":"    def connection(self) -\u003e Optional[PyCapsuleType]:"}],"source_content_type":"text/x-python","patch_set":6,"id":"0bfb321c_b2c61c2e","line":51,"in_reply_to":"55ab832e_0e2908c3","updated":"2026-02-04 01:26:23.000000000","message":"Well, it can be `False` if the `_execute_connect_request()` errors out.  I think this is there in the event a user catches on that and attempts to move forward w/ using the cluster.  However, I recognize that is probably an absurd edge-case.\n\nI made a note about `_reset_connection()`, but as the C++ client does not allow us to re-open a connection after we close, I think I can remove any logic around resetting the connection.  We can go back and address that if we decide to change that functionality in the C++ client.","commit_id":"d4d04763ef56d32379101d988ff581835b28af34"},{"author":{"_account_id":1005035,"name":"Dimitris Christodoulou","email":"dimitris.christodoulou@couchbase.com","username":"DemetrisChr","avatars":[{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"1ed69d734b43ae6c1ac7c2fb28c65af32c9d5471","unresolved":true,"context_lines":[{"line_number":102,"context_line":"            return self._binding_map.op_map[op_name](**req_dict)"},{"line_number":103,"context_line":"        except KeyError as e:"},{"line_number":104,"context_line":"            msg \u003d f\u0027KeyError, most likely from op not found in binding_map.  Details: {e}\u0027"},{"line_number":105,"context_line":"            raise InternalSDKException(message\u003dmsg) from None"},{"line_number":106,"context_line":"        except (CouchbaseException, HTTPException):"},{"line_number":107,"context_line":"            raise"},{"line_number":108,"context_line":"        except Exception as ex:"}],"source_content_type":"text/x-python","patch_set":6,"id":"8aca91c0_d1d447cf","line":105,"updated":"2026-02-03 16:38:02.000000000","message":"What is the reason for suppressing the exception chain with the `from None` statement? Same with the other `raise` statement below","commit_id":"d4d04763ef56d32379101d988ff581835b28af34"},{"author":{"_account_id":1004568,"name":"Jared Casey","email":"jared.casey@couchbase.com","username":"thejcfactor","avatars":[{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"6f644a4bc138b312c16e8b762a5e476c5ec9c81d","unresolved":true,"context_lines":[{"line_number":102,"context_line":"            return self._binding_map.op_map[op_name](**req_dict)"},{"line_number":103,"context_line":"        except KeyError as e:"},{"line_number":104,"context_line":"            msg \u003d f\u0027KeyError, most likely from op not found in binding_map.  Details: {e}\u0027"},{"line_number":105,"context_line":"            raise InternalSDKException(message\u003dmsg) from None"},{"line_number":106,"context_line":"        except (CouchbaseException, HTTPException):"},{"line_number":107,"context_line":"            raise"},{"line_number":108,"context_line":"        except Exception as ex:"}],"source_content_type":"text/x-python","patch_set":6,"id":"e73a2f2f_3affe9eb","line":105,"in_reply_to":"8aca91c0_d1d447cf","updated":"2026-02-04 01:26:23.000000000","message":"My thought was that for errors that are most likely internal to the SDK, suppressing the long error messages (e.g. \"During handling of the above exception...\") was better UX b/c the nested messages weren\u0027t actually helpful when it comes to debugging.\n\nAdmittedly it has been a while since I dug into this, so maybe something to revisit?","commit_id":"d4d04763ef56d32379101d988ff581835b28af34"},{"author":{"_account_id":1005035,"name":"Dimitris Christodoulou","email":"dimitris.christodoulou@couchbase.com","username":"DemetrisChr","avatars":[{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"fb1cdebe624de39053d79e7f5d4d2b189bedea4c","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            return self._binding_map.op_map[op_name](**req_dict)"},{"line_number":103,"context_line":"        except KeyError as e:"},{"line_number":104,"context_line":"            msg \u003d f\u0027KeyError, most likely from op not found in binding_map.  Details: {e}\u0027"},{"line_number":105,"context_line":"            raise InternalSDKException(message\u003dmsg) from None"},{"line_number":106,"context_line":"        except (CouchbaseException, HTTPException):"},{"line_number":107,"context_line":"            raise"},{"line_number":108,"context_line":"        except Exception as ex:"}],"source_content_type":"text/x-python","patch_set":6,"id":"fad2c30c_949859d7","line":105,"in_reply_to":"e73a2f2f_3affe9eb","updated":"2026-02-05 18:12:40.000000000","message":"Yep, that\u0027s reasonable. I don\u0027t think there is much useful information coming from the bindings anyway.","commit_id":"d4d04763ef56d32379101d988ff581835b28af34"},{"author":{"_account_id":1005035,"name":"Dimitris Christodoulou","email":"dimitris.christodoulou@couchbase.com","username":"DemetrisChr","avatars":[{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"1ed69d734b43ae6c1ac7c2fb28c65af32c9d5471","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"22898654_a9b6fa9b","line":112,"range":{"start_line":109,"start_character":0,"end_line":112,"end_character":1},"updated":"2026-02-03 16:38:02.000000000","message":"```suggestion\n            raise InternalSDKException(message\u003dstr(ex)) from None\n\n```\n\nCould this be simplified to the above? The `PYCBC_ERROR_MAP` is constructed from the `ExceptionMap` enum so it will always have `InternalSDKException`.","commit_id":"d4d04763ef56d32379101d988ff581835b28af34"},{"author":{"_account_id":1004568,"name":"Jared Casey","email":"jared.casey@couchbase.com","username":"thejcfactor","avatars":[{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"6f644a4bc138b312c16e8b762a5e476c5ec9c81d","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"4e6b0159_6fe195bf","line":112,"range":{"start_line":109,"start_character":0,"end_line":112,"end_character":1},"in_reply_to":"22898654_a9b6fa9b","updated":"2026-02-04 01:26:23.000000000","message":"Yes, this is good.  Will make the change.","commit_id":"d4d04763ef56d32379101d988ff581835b28af34"},{"author":{"_account_id":1004568,"name":"Jared Casey","email":"jared.casey@couchbase.com","username":"thejcfactor","avatars":[{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"98789700a1c6d2a681c340cf9c03a09a334b1ebb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"0f47da7e_f914b6d2","line":112,"range":{"start_line":109,"start_character":0,"end_line":112,"end_character":1},"in_reply_to":"4e6b0159_6fe195bf","updated":"2026-02-06 16:33:52.000000000","message":"Done","commit_id":"d4d04763ef56d32379101d988ff581835b28af34"},{"author":{"_account_id":1005035,"name":"Dimitris Christodoulou","email":"dimitris.christodoulou@couchbase.com","username":"DemetrisChr","avatars":[{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"87ae952df898bdd1eb23f0d462b4a90aa2984059","unresolved":true,"context_lines":[{"line_number":101,"context_line":"        except KeyError as e:"},{"line_number":102,"context_line":"            msg \u003d f\u0027KeyError, most likely from op not found in binding_map.  Details: {e}\u0027"},{"line_number":103,"context_line":"            raise InternalSDKException(message\u003dmsg) from None"},{"line_number":104,"context_line":"        except (CouchbaseException, HTTPException):"},{"line_number":105,"context_line":"            raise"},{"line_number":106,"context_line":"        except Exception as ex:"},{"line_number":107,"context_line":"            raise InternalSDKException(message\u003dstr(ex)) from None"}],"source_content_type":"text/x-python","patch_set":7,"id":"b8cd0b34_9d3f619f","line":104,"updated":"2026-02-05 18:17:24.000000000","message":"NIT: Does `HTTPException` need to be mentioned specifically here? It looks like it extends `CouchbaseException`, so it might not be needed.","commit_id":"4e9091535064f90d576d45ef7ed0dbe479ee1788"},{"author":{"_account_id":1004568,"name":"Jared Casey","email":"jared.casey@couchbase.com","username":"thejcfactor","avatars":[{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e3320a19bb151f7cf977e3bd819ec9902f7e7d8d","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        except KeyError as e:"},{"line_number":102,"context_line":"            msg \u003d f\u0027KeyError, most likely from op not found in binding_map.  Details: {e}\u0027"},{"line_number":103,"context_line":"            raise InternalSDKException(message\u003dmsg) from None"},{"line_number":104,"context_line":"        except (CouchbaseException, HTTPException):"},{"line_number":105,"context_line":"            raise"},{"line_number":106,"context_line":"        except Exception as ex:"},{"line_number":107,"context_line":"            raise InternalSDKException(message\u003dstr(ex)) from None"}],"source_content_type":"text/x-python","patch_set":7,"id":"f7c7a66e_1e101da1","line":104,"in_reply_to":"b8cd0b34_9d3f619f","updated":"2026-02-06 16:09:33.000000000","message":"Good point.  Fixed in latest patchset.","commit_id":"4e9091535064f90d576d45ef7ed0dbe479ee1788"}],"couchbase/logic/cluster_req_builder.py":[{"author":{"_account_id":1005035,"name":"Dimitris Christodoulou","email":"dimitris.christodoulou@couchbase.com","username":"DemetrisChr","avatars":[{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"31b1cb6d16d9498951f1d3ef1cbee7c904d5bbf9","unresolved":true,"context_lines":[{"line_number":55,"context_line":"        num_workers \u003d kwargs.pop(\u0027num_workers\u0027, None)"},{"line_number":56,"context_line":"        req \u003d AnalyticsQueryRequest(AnalyticsQuery.create_query_object(statement, *options, **kwargs))"},{"line_number":57,"context_line":"        if num_workers:"},{"line_number":58,"context_line":"            req.num_works \u003d num_workers"},{"line_number":59,"context_line":"        return req"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def build_cluster_info_request(self) -\u003e ClusterInfoRequest:"}],"source_content_type":"text/x-python","patch_set":9,"id":"474cca2f_b6922901","line":58,"updated":"2026-02-13 10:58:09.000000000","message":"Ditto here, and below at the query request, it should be `req.num_workers`.","commit_id":"25439c38cb67962bad117dc6849db608b0398e21"},{"author":{"_account_id":1004568,"name":"Jared Casey","email":"jared.casey@couchbase.com","username":"thejcfactor","avatars":[{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"a8f7ac05ab2bfb8b6f8c7cd6ca6eeac239df12df","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        num_workers \u003d kwargs.pop(\u0027num_workers\u0027, None)"},{"line_number":56,"context_line":"        req \u003d AnalyticsQueryRequest(AnalyticsQuery.create_query_object(statement, *options, **kwargs))"},{"line_number":57,"context_line":"        if num_workers:"},{"line_number":58,"context_line":"            req.num_works \u003d num_workers"},{"line_number":59,"context_line":"        return req"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def build_cluster_info_request(self) -\u003e ClusterInfoRequest:"}],"source_content_type":"text/x-python","patch_set":9,"id":"47d505ca_160f4d02","line":58,"in_reply_to":"474cca2f_b6922901","updated":"2026-02-13 16:26:00.000000000","message":"Done","commit_id":"25439c38cb67962bad117dc6849db608b0398e21"}],"couchbase/logic/transforms.py":[{"author":{"_account_id":1005035,"name":"Dimitris Christodoulou","email":"dimitris.christodoulou@couchbase.com","username":"DemetrisChr","avatars":[{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"1ed69d734b43ae6c1ac7c2fb28c65af32c9d5471","unresolved":true,"context_lines":[{"line_number":71,"context_line":"                                                f\"Union[timedelta, float, int] instead of {value}\"))"},{"line_number":72,"context_line":"    if not value:"},{"line_number":73,"context_line":"        total_secs \u003d 0"},{"line_number":74,"context_line":"    elif isinstance(value, timedelta):"},{"line_number":75,"context_line":"        total_secs \u003d int(value.total_seconds())"},{"line_number":76,"context_line":"    else:"},{"line_number":77,"context_line":"        total_secs \u003d int(value)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    return total_secs"}],"source_content_type":"text/x-python","patch_set":6,"id":"769da211_586e7063","line":77,"range":{"start_line":74,"start_character":0,"end_line":77,"end_character":31},"updated":"2026-02-03 16:38:02.000000000","message":"NIT: Would rounding make more sense than dropping the fractional part here?","commit_id":"d4d04763ef56d32379101d988ff581835b28af34"},{"author":{"_account_id":1005035,"name":"Dimitris Christodoulou","email":"dimitris.christodoulou@couchbase.com","username":"DemetrisChr","avatars":[{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"fb1cdebe624de39053d79e7f5d4d2b189bedea4c","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                                                f\"Union[timedelta, float, int] instead of {value}\"))"},{"line_number":72,"context_line":"    if not value:"},{"line_number":73,"context_line":"        total_secs \u003d 0"},{"line_number":74,"context_line":"    elif isinstance(value, timedelta):"},{"line_number":75,"context_line":"        total_secs \u003d int(value.total_seconds())"},{"line_number":76,"context_line":"    else:"},{"line_number":77,"context_line":"        total_secs \u003d int(value)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    return total_secs"}],"source_content_type":"text/x-python","patch_set":6,"id":"f801c56b_bc911ea9","line":77,"range":{"start_line":74,"start_character":0,"end_line":77,"end_character":31},"in_reply_to":"09221ecd_2a0939a7","updated":"2026-02-05 18:12:40.000000000","message":"I see this is used for history retention duration and max expiry. In both of those cases it doesn\u0027t sound like we need high precision, so whether we round or not probably doesn\u0027t matter. I think it would be ok to just leave it as is (even though a breaking change here probably wouldn\u0027t be significant).","commit_id":"d4d04763ef56d32379101d988ff581835b28af34"},{"author":{"_account_id":1004568,"name":"Jared Casey","email":"jared.casey@couchbase.com","username":"thejcfactor","avatars":[{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"6f644a4bc138b312c16e8b762a5e476c5ec9c81d","unresolved":true,"context_lines":[{"line_number":71,"context_line":"                                                f\"Union[timedelta, float, int] instead of {value}\"))"},{"line_number":72,"context_line":"    if not value:"},{"line_number":73,"context_line":"        total_secs \u003d 0"},{"line_number":74,"context_line":"    elif isinstance(value, timedelta):"},{"line_number":75,"context_line":"        total_secs \u003d int(value.total_seconds())"},{"line_number":76,"context_line":"    else:"},{"line_number":77,"context_line":"        total_secs \u003d int(value)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    return total_secs"}],"source_content_type":"text/x-python","patch_set":6,"id":"09221ecd_2a0939a7","line":77,"range":{"start_line":74,"start_character":0,"end_line":77,"end_character":31},"in_reply_to":"769da211_586e7063","updated":"2026-02-04 01:26:23.000000000","message":"Hmmm, fair point. This method comes into play for PYCBC-1733 (bucket mgmt changes). It is to help out w/ removing the BidirectionTransform (I\u0027m ashamed I added all that logic 😐) for TimeDeltaToSeconds.  So, this would be a breaking change...but I don\u0027t know how \"risky\".  I think it might be all right to make...\n\nhttps://github.com/couchbase/couchbase-python-client/blob/f614e465ed02397be8edf5b4c99b2975aa62df98/couchbase/management/logic/buckets_logic.py#L408\n\nhttps://github.com/couchbase/couchbase-python-client/blob/f614e465ed02397be8edf5b4c99b2975aa62df98/couchbase/_utils.py#L211","commit_id":"d4d04763ef56d32379101d988ff581835b28af34"}],"couchbase/logic/validation.py":[{"author":{"_account_id":1005035,"name":"Dimitris Christodoulou","email":"dimitris.christodoulou@couchbase.com","username":"DemetrisChr","avatars":[{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/4291f7baa025a5558b77019a9c264ab2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"1ed69d734b43ae6c1ac7c2fb28c65af32c9d5471","unresolved":true,"context_lines":[{"line_number":52,"context_line":"        vals_okay \u003d all(validate_type(v, val_types) for v in val.values())"},{"line_number":53,"context_line":"        return keys_okay and vals_okay"},{"line_number":54,"context_line":"    elif type_origin is list:"},{"line_number":55,"context_line":"        type_args \u003d get_args(type_)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    if type_ is Any:"},{"line_number":58,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":6,"id":"01456cbb_9e8e5e32","line":55,"updated":"2026-02-03 16:38:02.000000000","message":"The validation is missing here, and it falls back to the `isinstance` call below which fails with:\n```\n    return isinstance(val, type_)\n           ^^^^^^^^^^^^^^^^^^^^^^\nTypeError: isinstance() argument 2 cannot be a parameterized generic\n\n```","commit_id":"d4d04763ef56d32379101d988ff581835b28af34"},{"author":{"_account_id":1004568,"name":"Jared Casey","email":"jared.casey@couchbase.com","username":"thejcfactor","avatars":[{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e3aa5aab47b78525676dc763954fe3e4980e4654","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        vals_okay \u003d all(validate_type(v, val_types) for v in val.values())"},{"line_number":53,"context_line":"        return keys_okay and vals_okay"},{"line_number":54,"context_line":"    elif type_origin is list:"},{"line_number":55,"context_line":"        type_args \u003d get_args(type_)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    if type_ is Any:"},{"line_number":58,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":6,"id":"eb45f6bd_7ef62628","line":55,"in_reply_to":"01456cbb_9e8e5e32","updated":"2026-02-04 21:51:28.000000000","message":"Acknowledged","commit_id":"d4d04763ef56d32379101d988ff581835b28af34"}]}
