gpt4 book ai didi

python - 在 docopt 中实现 HTTPie

转载 作者:行者123 更新时间:2023-11-30 23:38:20 27 4
gpt4 key购买 nike

我正在尝试使用 docopt 实现 HTTPie 的 CLI,但由于某种原因,我无法将 METHOD 作为第一个参数可选。我删除了大部分选项来隔离此问题。

此外,HTTPie 的作者获取 REQUEST ITEM 的方式在 docopt 文档中似乎是错误的,因此想知道实现该部分的最佳替代方案是什么。

HTTPie 的完整文档:https://github.com/jkbr/httpie

我的文档示例:https://gist.github.com/dasickis/4711926

最佳答案

docopt 在尝试匹配模式时是贪婪的。所以如果你的模式是:

usage: http [METHOD] URL [ITEM...]

然后你运行 $ http google.com bla 然后 docopt 会将 google.com 匹配为 METHOD,因为,哟,这是第一个立场论证!在这种情况下,docopt 没有任何信息来推断 METHOD 应该是什么样子。但是,如果您有以下用法:

usage: http [get|post|put|delete] URL [ITEM...]

然后它知道如果它不是get/post/put/delete,那么它应该是一个URL。但是,我可以看到这不是最佳选择:1. httpie 使用大写名称(它们被解释为位置参数,而不是 docopt 的命令),2. 如果有很多命令,则用法可能会变成很长的一行。

如果您不关心与 httpie 的兼容性,我会使用 (A) 小写命令,因为命令按照惯例都是小写的。另一个不兼容的设计决策是 (B) 需要 METHOD:

usage: http METHOD URL [ITEM...]

通过这种方式,您可以使使用模式变得明确。 (C) 为了保持兼容性,我将采用以下用法:

usage: http URL [ITEM...] 
http METHOD URL [ITEM...]

在这种情况下,第二个子模式将永远不会匹配(docopt 不知道有关 url 和方法的任何信息,这使得第一个模式成为第二个模式的超集),然后我将分解参数如下:

positional_arguments = [args['URL']] + args['ITEM']

然后手动解析 positional_arguments,具体取决于第一个参数是像 url 还是像请求动词。

抱歉,docopt 不能优雅地处理这种情况,我会更多地考虑这个用例。如果您有任何建议,请创建问题:https://github.com/docopt/docopt/issues

P.S. 你是对的,REQUEST ITEM 是错误的,非常非常规且令人困惑。它应该是 REQUEST-ITEMREQUEST_ITEM 或只是 ITEM

关于python - 在 docopt 中实现 HTTPie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14699714/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com