pytilpack.http¶
pytilpack.http
¶
HTTP関連。
ProblemDetails(type='about:blank', title=None, status=None, detail=None, instance=None, extensions=dict())
dataclass
¶
RFC 9457 Problem Detailsの解析結果。
RateLimitInfo
¶
Bases: NamedTuple
X-RateLimit系ヘッダーの解析結果。
select_accept(accept_header, candidates)
¶
Acceptヘッダーに基づいて候補MIMEタイプから優先度最上位の値を返す。
specificity・quality値を考慮して選択する。 全候補が品質値0(拒否)の場合はNoneを返す。
Acceptヘッダーが空の場合はRFC 7231に従い「何でも受け入れる」として扱い、 candidatesの先頭を返す。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
accept_header
|
str
|
Acceptヘッダーの値(生文字列) |
必須 |
candidates
|
Sequence[str]
|
候補MIMEタイプのリスト(サーバー側の優先順) |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
str | None
|
優先度最上位のMIMEタイプ。一致するものがなければNone。 |
ソースコード位置: pytilpack/http.py
select_accept_language(header, supported, default=None)
¶
Accept-Languageヘッダーからサポート済みロケールの優先度最上位の値を返す。
quality値を考慮して選択する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
header
|
str
|
Accept-Languageヘッダーの値(生文字列) |
必須 |
supported
|
Sequence[str]
|
サポートするロケールのリスト(例: ["en", "ja", "ko"]) |
必須 |
default
|
str | None
|
一致するものがない場合のデフォルト値 |
None
|
戻り値:
| タイプ | デスクリプション |
|---|---|
str | None
|
優先度最上位のロケール。一致するものがなければdefault。 |
ソースコード位置: pytilpack/http.py
make_problem_details(status, title=None, *, detail=None, type_=None, instance=None, **extensions)
¶
RFC 9457 Problem Detailsのレスポンスボディを組み立てる。
返り値をJSONレスポンスに変換する際は、Content-Typeへ
PROBLEM_JSON_CONTENT_TYPEを設定し、HTTPステータスコードにも
statusと同じ値を設定する。
Example
jsonify(make_problem_details(404)), 404, {"Content-Type": PROBLEM_JSON_CONTENT_TYPE}
発生:
| タイプ | デスクリプション |
|---|---|
ValueError
|
statusがHTTPステータスコードの範囲外か、extensionsにtypeが含まれる場合。 |
ソースコード位置: pytilpack/http.py
parse_problem_details(body, base_url=None)
¶
Problem DetailsのJSONボディを解析する。
base_urlを省略した場合、相対URIのtypeとinstanceは生値のまま返す。
ソースコード位置: pytilpack/http.py
get_problem_details_from_exception(exc)
¶
例外のレスポンスからProblem Detailsを取得して解析する。
requestsでは本文取得時に同期読み込みが発生する場合がある。未読または消費済みで 本文を取得できない場合はNoneを返し、通信・デコード失敗は元の例外を伝播する。
ソースコード位置: pytilpack/http.py
get_status_code_from_exception(exc)
¶
例外からステータスコードを取得する。
少なくともrequestsとhttpxのraise_for_status()で発生する例外に対応している。
ソースコード位置: pytilpack/http.py
get_retry_after_from_exception(exc)
¶
例外から Retry-After ヘッダーを取得して解析する。
少なくともrequestsとhttpxのraise_for_status()で発生する例外に対応している。
ソースコード位置: pytilpack/http.py
get_retry_after(retry_after_header)
¶
Retry-After ヘッダーを解析して、待機すべき秒数を返す。
ソースコード位置: pytilpack/http.py
get_rate_limit_info(headers)
¶
X-RateLimit-Limit/-Remaining/-Resetヘッダーを解析する。
headersは大文字小文字を区別しないMappingを想定する。
ソースコード位置: pytilpack/http.py
get_rate_limit_info_from_exception(exc)
¶
例外のレスポンスからX-RateLimit系ヘッダーを取得して解析する。