https://github.com/kazuki/pyramid-oas3
https://github.com/kazuki/pyramid-oas3
openapi openapi-validation openapi3 pyramid python
Last synced: 6 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/kazuki/pyramid-oas3
- Owner: kazuki
- License: mit
- Created: 2017-12-03T14:18:57.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2019-04-25T13:42:43.000Z (about 7 years ago)
- Last Synced: 2025-12-02T07:58:25.266Z (7 months ago)
- Topics: openapi, openapi-validation, openapi3, pyramid, python
- Language: Python
- Size: 68.4 KB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
pyramid_oas3
============
[Pyramid](https://trypyramid.com/) Webアプリケーションに対して、
[OpenAPI](https://www.openapis.org/) [3.0](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md)を利用した、
リクエストの検証・パースを実施するライブラリです。
[pyramid_swagger](https://github.com/striglia/pyramid_swagger)のOpenAPI 3.0対応版の様な位置づけです。
設定項目
--------
* pyramid_oas3.validate_response: bool
* レスポンスのJSONも検証するかを設定します(デフォルト: False)
* pyramid_oas3.fill_by_default: bool
* リクエストデータに対してOpenAPI定義で設定されたdefault値で埋めるかを設定します(デフォルト: False)
* pyramid_oas3.response_reviver: Optional[Callable[[Union[int, str], JSON_TYPES], Union[JSON_TYPES, pyramid_oas3.UNDEFINED]]]
* JSON_TYPES: Union[int, float, str, bool, None, list, dict]
* [JSON.parse](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse)のreviverと同様の処理を、
レスポンススキーマ検証実行前に適用するようにします
* デフォルト: None (reviverを適用しない)
使い方
------
以下のように設定してpyramidに組み込みます
```
settings = {
'pyramid.includes': 'pyramid_oas3',
'pyramid_oas3.schema': yaml.load(open('schema.yaml').read()),
'pyramid_oas3.validate_response': True,
'pyramid_oas3.fill_by_default': True,
}
```
検証失敗時は以下の例外が返却されるので、
適宜exception_view_configを設定してください
* pyramid_oas3.ValidationErrors: リクエストデータのスキーマ検証失敗時
* pyramid_oas3.ResponseValidationError: レスポンスデータのスキーマ検証失敗時
* pyramid.httpexceptions.HTTPBadRequest: クエリ文字列のパース失敗時
* pyramid.httpexceptions.HTTPNotAcceptable: リクエストのContentTypeに対応するものがスキーマにない
*pyramid.httpexceptions.HTTPUnauthorized: リクエストに認証情報がない
以下にexception_view_configの例を示します
```
from pyramid.view import exception_view_config
@exception_view_config(ValidationErrors)
def failed_request_validation(exc, request):
res = Response(str(exc))
res.status_int = 400
return res
@exception_view_config(ResponseValidationError)
def failed_response_validation(exc, request):
res = Response(str(exc))
res.status_int = 500
return res
```