1

docoptを使用してHTTPieのCLIを実装しようとしていますが、何らかの理由で、最初の引数としてMETHODをオプションにすることができません。この問題を切り分けるために、ほとんどのオプションを削除しました。

さらに、HTTPieの作成者がREQUEST ITEMを取得する方法は、docopt docsで間違っているように思われるため、その部分を実装するための最良の代替手段は何かと考えていました。

HTTPieの完全なドキュメント:https ://github.com/jkbr/httpie

私のdocoptの例:https ://gist.github.com/dasickis/4711926

4

1 に答える 1

3

docoptは、パターンを一致させようとすると貪欲になります。したがって、パターンが次の場合:

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

そして、実行する$ http google.com blaと、docoptはとして一致google.comしますMETHOD。なぜなら、それが最初の位置引数だからです!この場合、docoptMETHODにはどのように見えるかを差し引くための情報がありません。ただし、次の使用法がある場合:

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...]

この場合、2番目のサブパターンは一致しません(docoptはURLとメソッドについて何も知らないため、最初のパターンが2番目のパターンのスーパーセットになります)。次に、引数を次のように分解します。

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

positional_arguments次に、最初の引数がurlのように見えるか、要求動詞のように見えるかに応じて、手動で解析します。

docoptがこのケースをエレガントに処理していないことを残念に思います。このユースケースについて詳しく考えます。何か提案があれば、問題を作成してください:https ://github.com/docopt/docopt/issues

PSあなたは正しいです、それREQUEST ITEMは間違っていて、非常に型破りで混乱しています。REQUEST-ITEMまたはREQUEST_ITEMまたは単にである必要がありますITEM

于 2013-02-05T09:46:47.127 に答える