)]}'
{"couchbase/management/logic/collection_mgmt_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":"8e86a869b83c8b4894cb3b2b3fd55e7b162c8afe","unresolved":true,"context_lines":[{"line_number":128,"context_line":"        obs_handler: ObservableRequestHandler \u003d kwargs.pop(\u0027obs_handler\u0027)"},{"line_number":129,"context_line":"        settings \u003d None"},{"line_number":130,"context_line":"        if args and isinstance(args[0], CollectionSpec):"},{"line_number":131,"context_line":"            collection_spec \u003d args[0]"},{"line_number":132,"context_line":"            options \u003d args[1:]"},{"line_number":133,"context_line":"            scope_name, collection_name, settings \u003d self._get_collection_spec_details(collection_spec,"},{"line_number":134,"context_line":"                                                                                      \u0027create_collection\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bd54aecb_f0e4d43f","line":131,"updated":"2026-05-14 16:45:04.000000000","message":"What happens if the `CollectionSpec` is provided as a keyword argument? The signature we have suggests that it\u0027s acceptable\n\ne.g.\n```python\nmgr.create_collection(collection\u003dCollectionSpec(\"test-coll\", \"test-scope\"))\n```","commit_id":"1902c90af56ac6359f2b4a91e24793c21a16a937"},{"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":"7e2bfc3dad6dc4e4ba9e2542db249dfad65e548a","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        obs_handler: ObservableRequestHandler \u003d kwargs.pop(\u0027obs_handler\u0027)"},{"line_number":129,"context_line":"        settings \u003d None"},{"line_number":130,"context_line":"        if args and isinstance(args[0], CollectionSpec):"},{"line_number":131,"context_line":"            collection_spec \u003d args[0]"},{"line_number":132,"context_line":"            options \u003d args[1:]"},{"line_number":133,"context_line":"            scope_name, collection_name, settings \u003d self._get_collection_spec_details(collection_spec,"},{"line_number":134,"context_line":"                                                                                      \u0027create_collection\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"d9471e6b_b6ef9b04","line":131,"in_reply_to":"bd54aecb_f0e4d43f","updated":"2026-05-19 19:53:42.000000000","message":"Good catch -- updated in latest patchset.","commit_id":"1902c90af56ac6359f2b4a91e24793c21a16a937"},{"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":"d392e43742a5b12b60879519124a16fc0621c98f","unresolved":true,"context_lines":[{"line_number":140,"context_line":"                settings \u003d pos.pop(0)"},{"line_number":141,"context_line":"            else:"},{"line_number":142,"context_line":"                settings \u003d kwargs.pop(\u0027settings\u0027, None)"},{"line_number":143,"context_line":"            options \u003d tuple(pos)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        final_args \u003d forward_args(kwargs, *options)"},{"line_number":146,"context_line":"        parent_span \u003d ObservableRequestHandler.maybe_get_parent_span(parent_span\u003dfinal_args.pop(\u0027parent_span\u0027, None))"}],"source_content_type":"text/x-python","patch_set":1,"id":"739807f2_83718d79","line":143,"updated":"2026-05-14 16:37:55.000000000","message":"I think it might be a good idea to move the argument parsing over to (a)couchbase/management/collections.py next to where the overloads are declared. That would let us use a more specific signature in `build_create_collection_request`, and removes the dependency of it on the public-facing API.\n\nI\u0027m less certain that this is a good idea, but I was also curious if the standard library offers anything to make this less error prone. There is `typing.get_overloads`, `inspect.signature` and `inspect.Signature.bind` which returns a mapping of arg name to value. This might allow us to iterate over the signatures and check which one matches.\n\nWhat do you think?","commit_id":"1902c90af56ac6359f2b4a91e24793c21a16a937"},{"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":"7e2bfc3dad6dc4e4ba9e2542db249dfad65e548a","unresolved":true,"context_lines":[{"line_number":140,"context_line":"                settings \u003d pos.pop(0)"},{"line_number":141,"context_line":"            else:"},{"line_number":142,"context_line":"                settings \u003d kwargs.pop(\u0027settings\u0027, None)"},{"line_number":143,"context_line":"            options \u003d tuple(pos)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        final_args \u003d forward_args(kwargs, *options)"},{"line_number":146,"context_line":"        parent_span \u003d ObservableRequestHandler.maybe_get_parent_span(parent_span\u003dfinal_args.pop(\u0027parent_span\u0027, None))"}],"source_content_type":"text/x-python","patch_set":1,"id":"de0dfcf2_48ee9f09","line":143,"in_reply_to":"739807f2_83718d79","updated":"2026-05-19 19:53:42.000000000","message":"Hmmm, so, I went down the path of keeping the parsing logic w/in `build_create_collection_request` as solving the argument parsing there solves it in all 3 APIs. I think w/ the added logic and tests we have covered all the scenarios.  And I think the logic is fairly straight-forward to reason about.  Happy to make other tweaks if you think that\u0027d be better.","commit_id":"1902c90af56ac6359f2b4a91e24793c21a16a937"},{"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":"d627692ab5ecc0959e9088eb33d99bd350586cc7","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                settings \u003d pos.pop(0)"},{"line_number":141,"context_line":"            else:"},{"line_number":142,"context_line":"                settings \u003d kwargs.pop(\u0027settings\u0027, None)"},{"line_number":143,"context_line":"            options \u003d tuple(pos)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        final_args \u003d forward_args(kwargs, *options)"},{"line_number":146,"context_line":"        parent_span \u003d ObservableRequestHandler.maybe_get_parent_span(parent_span\u003dfinal_args.pop(\u0027parent_span\u0027, None))"}],"source_content_type":"text/x-python","patch_set":1,"id":"8e305270_97fadcb9","line":143,"in_reply_to":"de0dfcf2_48ee9f09","updated":"2026-05-21 13:56:51.000000000","message":"Yeah, I think the way it is now is pretty good, no need for any changes.","commit_id":"1902c90af56ac6359f2b4a91e24793c21a16a937"}]}
