marshmallow

marshmallow-polyfieldを使ってoneOf的な構造のdataを扱う

はじめに 例えば、以下のよう1つのfieldに複数の形状の値が入ることがある。そして、その形状を決めるためにtypeなどfieldを含まれているJSONがあるとする。 以下の様な感じ(下の例では、personとgroupという2つの形状がobに入る可能性がある)。 { "ob": { …

marshmallowで相互排他的なfieldを定義する方法

はじめに こういうJSONを許したい。 { "left": { "name": "foo", "value": 100, } } あるいはこう。 { "right": { "name": "foo", "value": 100.0, } } left,rightというfieldの内どちらか1つだけ値が入るデータをvalidとしたい。例えば以下はダメ。 {} これ…

marshmallowでschemaに制限を加えてみる

marshmallowでschemaに制限を加えてみる。この制限をprotocolと呼ぶとしてこのprotocolの実装をどうするかと言うとこんな感じ。 marshmallowの流儀に従うならSchemaOptsを拡張するのが自然そう。 marshmallow_protocol.py class CustomOpts(SchemaOpts): pro…

marshmallowのコード生成でadditionalPropertiesをサポートするのがだるかった話し

最近作っている swagger-marshmallow-codegen というライブラリでswaggerの additionalProperties に対応するのがだるかったという話。 additionalProperties? additionalProperties というのはjsonschemaの方にもある。このあたりに書いてあるので読めばど…

swagger-marshmallow-codegen でpaths以下も見るようにした

swagger-marshmallow-codegen でpaths以下も見るようにした。あまりきれいとはいえない感じかもしれないけれど。 paths以下を見るということ 今まではdefinitions以下しか見なかったのだけれど。通常swaggerでapiの定義をするときにはpaths以下にも色々書く…

swagger-marshmallow-codegenでカスタマイズ出来るようにした

swagger-marshmallow-codegenで簡単なカスタマイズ出来るようにした。 例えば以下の様なことができるようになった defaultで使うschema classをMySchemaに変える 特定の条件を満たした値のときには自分で作った独自のfieldを使うように変える ただこれらはす…

swagger-marshmallow-codegen というライブラリを作りました

swagger-marshmallow-codegen というライブラリを作りました。swaggerの定義ファイルからmarshmallow のschemaを生成するライブラリです。 ライブラリ? 正確にはライブラリでは無くコマンドです。marshmallowのschema定義のコードを生成するコマンドです。 …

FormとSchemaの違いvalidation編

FormとSchemaの違いvalidation編 FormとSchemaの違いをプレゼンテーション側からみた話を前に書来ましたが validation側から見た場合にも両者は違うようです。 エラー時にSchemaは元の入力値を捨てても良いが、Formは元の入力値にアクセスできることが重要 S…

marshmallowのdumpをupdate_fieldsを指定せずに使うと型の調査が入るので遅い。

http://marshmallow.readthedocs.org/en/latest/api_reference.html#marshmallow.Schema.dump update_fieldsという引数がdefaultでTrueになっていて。これは値のtypeを見て、変換する関数を変えている。具体的なmappingはmarshmallow.schemaにかかれていて以…

marshmallow-formにform-factoryが誕生しました。Nestedなフィールドのmany=Trueが有効になりました

marshmallow-formにform-factoryが誕生しました。Nestedなフィールドのmany=Trueが有効になりました。 今回の主な変更点は以下の3つです 必要なら 各フィールドに描画関数を設定することができるようになりました form_factoryが使えるようになりました(exp…

marshmallow-formにfrom_objectを追加しました。

marshmallow-formにfrom_objectを追加しました。 今まで受け取る値が辞書だけでしたが。ORMのmodelなどオブジェクトを受け取りたい場合があります。 そのような場合に対応するためにfrom_objectを追加しました。 以下の様にして使います。 import marshmallo…

marshmallow-formのvalidation部分の機能を修正しました。

marshmallow-formのvalidation部分の機能を修正しました。 昨日時点のままでも以下の様なコードは動いていました*1。 from marshmallo.validate import Length class AuthenticationForm(mf.Form): name = mf.String() password = mf.String(Length(5)) pass…

marshmallow-formに継承の対応とlayoutシステム付けました

marshmallow-formに継承の対応とlayoutシステム付けました。 marshmallow-form に以下のような機能を付けました。 継承の対応 ネストしたフォームを順序付きで利用 Layoutシステム 今回一番の変更はLayoutシステムな気がします。 継承の対応 むしろ無かった…

marshmallow-formというもの作っています

marshmallow-formというもの作っています(wip) marshmallow-form というもの作っています。これは、marshmallow をフォームライブラリっぽく使えるようにラッピングしたライブラリです。 フォームライブラリとは フォームライブラリとはhtmlのフォーム要素を…