pytilpack.web¶
必要なextra
pip install pytilpack[web]
pytilpack.web
¶
Web関連のユーティリティ集。
RouteInfo
¶
Bases: NamedTuple
ルーティング情報を保持するクラス。
Flask/Quartなど、<name> / <type:name> 形式のURLルールを扱うフレームワーク向け。
属性:
| 名前 | タイプ | デスクリプション |
|---|---|---|
endpoint |
str
|
エンドポイント名 |
url_parts |
list[str]
|
URLのパーツのリスト |
arg_names |
list[str]
|
URLパーツの引数名のリスト |
validate_forwarded_prefix(value)
¶
X-Forwarded-Prefixヘッダー値を検証し、正規化したprefixを返す。
受け入れ時は末尾の/を除去した値を返す(先頭の/は保持する)。
/単独の場合もNoneを返す(prefix無し相当のため)。
不正条件
- 空文字列
- 先頭が
/でない //で始まる(プロトコル相対形式)- CR/LF/NUL等の制御文字を含む
- 許可文字集合外の文字を含む(RFC3986のpchar相当。query/fragmentは含めない)
許可文字集合: 英数字 / - _ . ~ / : @ ! $
& ' ( ) * + , ; = %
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
value
|
str
|
検証対象の文字列 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
str | None
|
正規化したprefix(末尾 |
ソースコード位置: pytilpack/web.py
validate_forwarded_host(value)
¶
X-Forwarded-Hostヘッダー値を検証する。
受け入れ時はそのまま返す。
不正条件
- 空文字列
//で始まる- CR/LF/NUL等の制御文字を含む
- 空白を含む
[で始まるがその値に]が含まれない(不完全なIPv6形式)
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
value
|
str
|
検証対象の文字列 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
str | None
|
valueそのまま、不正値の場合はNone |
ソースコード位置: pytilpack/web.py
is_host_in_trusted(host_value, trusted_hosts)
¶
ホスト値(ポート含む可能性あり)を許可リストと照合する。
ホスト値からホスト名部分のみを抽出して許可リストと突き合わせる。
ポート番号は無視する。IPv6アドレス([::1]:8080形式)にも対応する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
host_value
|
str
|
検証対象のホスト値。 |
必須 |
trusted_hosts
|
Iterable[str]
|
許可するホスト名のイテラブル |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
bool
|
ホスト名が許可リストに含まれる場合True |
ソースコード位置: pytilpack/web.py
build_next_url(script_root, path, query_string)
¶
ログイン後遷移用のnextパラメーター用のURLを組み立てる。
Flask/Quartのrequest情報を引数で受け取り、フレームワーク非依存で処理する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
script_root
|
str
|
リクエストのscript_root |
必須 |
path
|
str
|
リクエストパス |
必須 |
query_string
|
str
|
クエリ文字列(デコード済み) |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
str
|
nextパラメーター用のURL |
ソースコード位置: pytilpack/web.py
is_prefer_markdown(accept_header)
¶
AcceptヘッダーでmarkdownがHTMLより優先されているかを返す。
参考: https://vercel.com/blog/making-agent-friendly-pages-with-content-negotiation
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
accept_header
|
str
|
Acceptヘッダーの値 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
bool
|
markdownがHTMLより優先されている場合True、そうでなければFalse |
ソースコード位置: pytilpack/web.py
build_routes(rules, application_root)
¶
url_map.iter_rules()相当のイテラブルからRouteInfoのリストを構築する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
rules
|
Iterable[Any]
|
各要素が |
必須 |
application_root
|
str | None
|
アプリケーションルートパス。Noneや"/"の場合は無視する。 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
list[RouteInfo]
|
|
ソースコード位置: pytilpack/web.py
resolve_static_url(static_folder, filename, debug, cache_busting, cache_timestamp, url_for_static, timestamp_cache, **kwargs)
¶
静的ファイルのURLを生成する共通処理。
Flask/Quartから共通で呼び出す。url_for呼び出しはフレームワークごとに異なるため callable経由で受け取る。キャッシュはフレームワーク側で保持する辞書を受け取る。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
static_folder
|
str | None
|
静的ファイルのディレクトリ |
必須 |
filename
|
str
|
静的ファイルのファイル名 |
必須 |
debug
|
bool
|
デバッグモードかどうか |
必須 |
cache_busting
|
bool
|
キャッシュバスティングを有効にするかどうか |
必須 |
cache_timestamp
|
bool | Literal['when_not_debug']
|
ファイル最終更新日時のキャッシュ可否 |
必須 |
url_for_static
|
Callable[..., str]
|
|
必須 |
timestamp_cache
|
dict[str, int]
|
プロセス単位のタイムスタンプキャッシュ辞書 |
必須 |
**kwargs
|
Any
|
url_for_staticに渡す追加引数 |
{}
|
戻り値:
| タイプ | デスクリプション |
|---|---|
str
|
静的ファイルのURL |
ソースコード位置: pytilpack/web.py
get_safe_url(target, host_url, default_url)
¶
ログイン時のリダイレクトとして安全なURLを返す。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
target
|
str | None
|
リダイレクト先のURL |
必須 |
host_url
|
str
|
ホストのURL |
必須 |
default_url
|
str
|
デフォルトのURL |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
str
|
安全なURL |
ソースコード位置: pytilpack/web.py
check_status_code(status_code, valid_status_code)
¶
check_content_type(content_type, valid_content_types)
¶
Content-Typeのチェック。
ソースコード位置: pytilpack/web.py
check_html(input_stream, strict=False)
¶
HTMLのチェック。