pytilpack.fastapi¶
必要なextra
pip install pytilpack[fastapi]
pytilpack.fastapi
¶
FastAPI関連のユーティリティ。
I18nMiddleware(app, state)
¶
Accept-Languageからロケールを自動設定するASGIミドルウェア。
ソースコード位置: pytilpack/fastapi/i18n.py
__call__(scope, receive, send)
async
¶
ASGIインターフェース。
ソースコード位置: pytilpack/fastapi/i18n.py
JSONResponse
¶
Bases: Response
インデント付きJSONを返すFastAPIのresponse_class。
デフォルトのJSONResponseはインデントなしでJSONを返すが、 このクラスはindent=2のインデント付きで返す。 Pydanticモデルやdatetime等もfastapi.encoders.jsonable_encoderで変換する。
Usage
@app.get("/pretty", response_class=pytilpack.fastapi.JSONResponse) def pretty(): return {"message": "indented JSON"}
@app.get("/model", response_model=MyModel, response_class=pytilpack.fastapi.JSONResponse) def model(): return MyModel(field="value")
render(content)
¶
コンテンツをインデント付きJSONのバイト列に変換する。
assert_bytes(response, status_code=200, content_type=None)
¶
テストコード用。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
response
|
Response
|
レスポンス |
必須 |
status_code
|
int
|
期待するステータスコード |
200
|
content_type
|
str | Iterable[str] | None
|
期待するContent-Type |
None
|
発生:
| タイプ | デスクリプション |
|---|---|
AssertionError
|
ステータスコードが異なる場合 |
戻り値:
| タイプ | デスクリプション |
|---|---|
bytes
|
レスポンスボディ |
ソースコード位置: pytilpack/fastapi/asserts.py
assert_html(response, status_code=200, content_type='__default__', tmp_path=None, strict=False)
¶
テストコード用。
html5libが必要なので注意。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
response
|
Response
|
レスポンス |
必須 |
status_code
|
int
|
期待するステータスコード |
200
|
content_type
|
str | Iterable[str] | None
|
期待するContent-Type |
'__default__'
|
tmp_path
|
Path | None
|
一時ファイルを保存するディレクトリ |
None
|
strict
|
bool
|
HTML解析を厳格に行うかどうか |
False
|
発生:
| タイプ | デスクリプション |
|---|---|
AssertionError
|
ステータスコードが異なる場合 |
戻り値:
| タイプ | デスクリプション |
|---|---|
str
|
レスポンスボディ (bs4.BeautifulSoup) |
ソースコード位置: pytilpack/fastapi/asserts.py
assert_json(response, status_code=200, content_type='application/json')
¶
テストコード用。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
response
|
Response
|
レスポンス |
必須 |
status_code
|
int
|
期待するステータスコード |
200
|
content_type
|
str | Iterable[str] | None
|
期待するContent-Type |
'application/json'
|
発生:
| タイプ | デスクリプション |
|---|---|
AssertionError
|
ステータスコードが異なる場合 |
戻り値:
| タイプ | デスクリプション |
|---|---|
Any
|
レスポンスのjson |
ソースコード位置: pytilpack/fastapi/asserts.py
assert_xml(response, status_code=200, content_type='__default__')
¶
テストコード用。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
response
|
Response
|
レスポンス |
必須 |
status_code
|
int
|
期待するステータスコード |
200
|
content_type
|
str | Iterable[str] | None
|
期待するContent-Type |
'__default__'
|
発生:
| タイプ | デスクリプション |
|---|---|
AssertionError
|
ステータスコードが異なる場合 |
戻り値:
| タイプ | デスクリプション |
|---|---|
str
|
レスポンスのxml |
ソースコード位置: pytilpack/fastapi/asserts.py
assert_sse(response, status_code=200)
¶
テストコード用。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
response
|
Response
|
レスポンス |
必須 |
status_code
|
int
|
期待するステータスコード |
200
|
発生:
| タイプ | デスクリプション |
|---|---|
AssertionError
|
ステータスコードが異なる場合、またはContent-Typeが異なる場合 |
戻り値:
| タイプ | デスクリプション |
|---|---|
Response
|
レスポンス |
ソースコード位置: pytilpack/fastapi/asserts.py
assert_response(response, status_code=200)
¶
テストコード用。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
response
|
Response
|
レスポンス |
必須 |
status_code
|
int
|
期待するステータスコード |
200
|
発生:
| タイプ | デスクリプション |
|---|---|
AssertionError
|
ステータスコードが異なる場合 |
戻り値:
| タイプ | デスクリプション |
|---|---|
Response
|
レスポンス |
ソースコード位置: pytilpack/fastapi/asserts.py
init_app(app, locale_dir, domain='messages', supported_locales=None, default_locale='en', fallback=True)
¶
FastAPI/Starletteアプリにi18nを統合する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
app
|
ASGIApp
|
FastAPI/Starletteアプリ |
必須 |
locale_dir
|
str | Path
|
localeディレクトリのパス |
必須 |
domain
|
str
|
gettextドメイン名 |
'messages'
|
supported_locales
|
list[str] | None
|
サポートするロケール一覧 |
None
|
default_locale
|
str
|
デフォルトロケール |
'en'
|
fallback
|
bool
|
フォールバック有無 |
True
|
戻り値:
| タイプ | デスクリプション |
|---|---|
I18nMiddleware
|
I18nMiddlewareインスタンス(app.add_middlewareを使う場合はこの関数ではなく |
I18nMiddleware
|
直接I18nMiddlewareを使用する) |
ソースコード位置: pytilpack/fastapi/i18n.py
asserts
¶
FastAPIのテストコード用アサーション関数。
assert_bytes(response, status_code=200, content_type=None)
¶
テストコード用。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
response
|
Response
|
レスポンス |
必須 |
status_code
|
int
|
期待するステータスコード |
200
|
content_type
|
str | Iterable[str] | None
|
期待するContent-Type |
None
|
発生:
| タイプ | デスクリプション |
|---|---|
AssertionError
|
ステータスコードが異なる場合 |
戻り値:
| タイプ | デスクリプション |
|---|---|
bytes
|
レスポンスボディ |
ソースコード位置: pytilpack/fastapi/asserts.py
assert_html(response, status_code=200, content_type='__default__', tmp_path=None, strict=False)
¶
テストコード用。
html5libが必要なので注意。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
response
|
Response
|
レスポンス |
必須 |
status_code
|
int
|
期待するステータスコード |
200
|
content_type
|
str | Iterable[str] | None
|
期待するContent-Type |
'__default__'
|
tmp_path
|
Path | None
|
一時ファイルを保存するディレクトリ |
None
|
strict
|
bool
|
HTML解析を厳格に行うかどうか |
False
|
発生:
| タイプ | デスクリプション |
|---|---|
AssertionError
|
ステータスコードが異なる場合 |
戻り値:
| タイプ | デスクリプション |
|---|---|
str
|
レスポンスボディ (bs4.BeautifulSoup) |
ソースコード位置: pytilpack/fastapi/asserts.py
assert_json(response, status_code=200, content_type='application/json')
¶
テストコード用。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
response
|
Response
|
レスポンス |
必須 |
status_code
|
int
|
期待するステータスコード |
200
|
content_type
|
str | Iterable[str] | None
|
期待するContent-Type |
'application/json'
|
発生:
| タイプ | デスクリプション |
|---|---|
AssertionError
|
ステータスコードが異なる場合 |
戻り値:
| タイプ | デスクリプション |
|---|---|
Any
|
レスポンスのjson |
ソースコード位置: pytilpack/fastapi/asserts.py
assert_xml(response, status_code=200, content_type='__default__')
¶
テストコード用。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
response
|
Response
|
レスポンス |
必須 |
status_code
|
int
|
期待するステータスコード |
200
|
content_type
|
str | Iterable[str] | None
|
期待するContent-Type |
'__default__'
|
発生:
| タイプ | デスクリプション |
|---|---|
AssertionError
|
ステータスコードが異なる場合 |
戻り値:
| タイプ | デスクリプション |
|---|---|
str
|
レスポンスのxml |
ソースコード位置: pytilpack/fastapi/asserts.py
assert_sse(response, status_code=200)
¶
テストコード用。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
response
|
Response
|
レスポンス |
必須 |
status_code
|
int
|
期待するステータスコード |
200
|
発生:
| タイプ | デスクリプション |
|---|---|
AssertionError
|
ステータスコードが異なる場合、またはContent-Typeが異なる場合 |
戻り値:
| タイプ | デスクリプション |
|---|---|
Response
|
レスポンス |
ソースコード位置: pytilpack/fastapi/asserts.py
assert_response(response, status_code=200)
¶
テストコード用。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
response
|
Response
|
レスポンス |
必須 |
status_code
|
int
|
期待するステータスコード |
200
|
発生:
| タイプ | デスクリプション |
|---|---|
AssertionError
|
ステータスコードが異なる場合 |
戻り値:
| タイプ | デスクリプション |
|---|---|
Response
|
レスポンス |
ソースコード位置: pytilpack/fastapi/asserts.py
i18n
¶
FastAPI用i18n統合。
I18nMiddleware(app, state)
¶
Accept-Languageからロケールを自動設定するASGIミドルウェア。
ソースコード位置: pytilpack/fastapi/i18n.py
__call__(scope, receive, send)
async
¶
ASGIインターフェース。
ソースコード位置: pytilpack/fastapi/i18n.py
init_app(app, locale_dir, domain='messages', supported_locales=None, default_locale='en', fallback=True)
¶
FastAPI/Starletteアプリにi18nを統合する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
app
|
ASGIApp
|
FastAPI/Starletteアプリ |
必須 |
locale_dir
|
str | Path
|
localeディレクトリのパス |
必須 |
domain
|
str
|
gettextドメイン名 |
'messages'
|
supported_locales
|
list[str] | None
|
サポートするロケール一覧 |
None
|
default_locale
|
str
|
デフォルトロケール |
'en'
|
fallback
|
bool
|
フォールバック有無 |
True
|
戻り値:
| タイプ | デスクリプション |
|---|---|
I18nMiddleware
|
I18nMiddlewareインスタンス(app.add_middlewareを使う場合はこの関数ではなく |
I18nMiddleware
|
直接I18nMiddlewareを使用する) |
ソースコード位置: pytilpack/fastapi/i18n.py
misc
¶
FastAPI関連のその他のユーティリティ。
JSONResponse
¶
Bases: Response
インデント付きJSONを返すFastAPIのresponse_class。
デフォルトのJSONResponseはインデントなしでJSONを返すが、 このクラスはindent=2のインデント付きで返す。 Pydanticモデルやdatetime等もfastapi.encoders.jsonable_encoderで変換する。
Usage
@app.get("/pretty", response_class=pytilpack.fastapi.JSONResponse) def pretty(): return {"message": "indented JSON"}
@app.get("/model", response_model=MyModel, response_class=pytilpack.fastapi.JSONResponse) def model(): return MyModel(field="value")
render(content)
¶
コンテンツをインデント付きJSONのバイト列に変換する。