Black as a server (blackd)¶
blackd
は、シンプルなプロトコルを介してBlackの機能を提供する小型のHTTPサーバーです。これを使用する主な利点は、ファイルを整形するたびに新しいBlackプロセスを起動するコストを回避できることです。
警告
blackd
は、悪用を防ぐためのセキュリティ対策がないため、公開アクセス可能なサーバーとして実行しないでください。**ローカルでのみ使用することを目的としています**。
使用方法¶
blackd
は、追加の依存関係があるため、デフォルトではBlackと共にパッケージ化されていません。pip install 'black[d]'
を実行してインストールする必要があります。
ローカルインターフェースのみにバインドしてデフォルトポートでサーバーを起動するには、blackd
を実行します。サーバーのバージョン、およびリスニングしているホストとポートを示す1行が表示されます。blackd
はその後、ほとんどのWebサーバーと同様に、標準出力にアクセスログを出力します。無効なフォーマット要求によって発生した例外トレースもマージされます。
blackd
はBlackよりも少ないオプションしか提供しません。blackd --help
を実行して確認できます。
Usage: blackd [OPTIONS]
Options:
--bind-host TEXT Address to bind the server to. [default: localhost]
--bind-port INTEGER Port to listen on [default: 45484]
--version Show the version and exit.
-h, --help Show this message and exit.
公式のblackd
クライアントツールはまだありません!curl
を使用してblackdが動作していることをテストできます。
blackd --bind-port 9090 & # or let blackd choose a port
curl -s -XPOST "localhost:9090" -d "print('valid')"
プロトコル¶
blackd
は/
パスでPOST
リクエストのみを受け付けます。リクエストの本文には、Content-Type
リクエストヘッダーのcharset
フィールドに従ってエンコードされた、フォーマットするPythonソースコードを含める必要があります。charset
が指定されていない場合、blackd
はUTF-8
を想定します。
ソースコードのフォーマット方法を制御するHTTPヘッダーがいくつかあります。これらは、Blackのコマンドラインフラグに対応します。ただし、例外としてX-Protocol-Version
があり、存在する場合は値を1
にする必要があります。そうでない場合、リクエストはHTTP 501
(未実装)で拒否されます。
ソースコードのフォーマット方法を制御するヘッダーは次のとおりです。
X-Line-Length
:--line-length
コマンドラインフラグに対応します。X-Skip-Source-First-Line
:--skip-source-first-line
コマンドラインフラグに対応します。存在し、その値が空文字列でない場合、ソースコードの最初の行は無視されます。X-Skip-String-Normalization
:--skip-string-normalization
コマンドラインフラグに対応します。存在し、その値が空文字列でない場合、文字列の正規化は実行されません。X-Skip-Magic-Trailing-Comma
:--skip-magic-trailing-comma
コマンドラインフラグに対応します。存在し、その値が空文字列でない場合、行を分割する理由として末尾のコンマは使用されません。X-Preview
:--preview
コマンドラインフラグに対応します。存在し、その値が空文字列でない場合、実験的な、破壊的な可能性のあるスタイル変更が使用されます。X-Unstable
:--unstable
コマンドラインフラグに対応します。存在し、その値が空文字列でない場合、バグがあることがわかっている実験的なスタイル変更が使用されます。X-Enable-Unstable-Feature
:--enable-unstable-feature
フラグに対応します。フラグの内容は、有効にする不安定な機能のコンマ区切りリストである必要があります。例:X-Enable-Unstable-Feature: feature1, feature2
。X-Fast-Or-Safe
:fast
に設定されている場合、blackd
は--fast
コマンドラインフラグが渡された場合のBlackのように動作します。X-Python-Variant
:pyi
に設定されている場合、blackd
は--pyi
コマンドラインフラグが渡された場合のBlackのように動作します。それ以外の場合は、その値はPythonバージョンまたはコンマ区切りのPythonバージョンのセットに対応する必要があり、オプションでpy
を接頭辞として付けることができます。たとえば、Python 3.5と3.6と互換性のあるコードを要求するには、ヘッダーをpy3.5,py3.6
に設定します。X-Diff
:--diff
コマンドラインフラグに対応します。存在する場合、フォーマットの差分が出力されます。
これらのヘッダーのいずれかが無効な値に設定されている場合、blackd
はHTTP 400
エラー応答を返し、メッセージ本文で問題のあるヘッダーの名前を記載します。
上記の他に、blackd
は次の応答コードを生成できます。
HTTP 204
:入力が既に適切にフォーマットされている場合。応答本文は空です。HTTP 200
:入力にフォーマットが必要だった場合。応答本文には整形されたPythonコードが含まれ、Content-Type
ヘッダーが適切に設定されます。HTTP 400
:入力が構文エラーを含む場合。エラーの詳細が応答本文で返されます。HTTP 500
:入力をフォーマットしようとしたときに他の種類のエラーが発生した場合。応答本文には、エラーのテキスト表現が含まれます。
応答ヘッダーには、Blackのバージョンを含むX-Black-Version
ヘッダーが含まれています。