私は簡単にすべきだと思うことをしようとしていますが、それを機能させるのに問題が発生しています。これが私が今持っているもので、期待どおりに機能します。
some_schema = Schema(
multiples = ForEach(UnicodeString(), convert_to_list=True),
single = OneOf(['a', 'b'])
)
私がやりたいことは、ユニコード文字列のリストに変換された後、複数値フィールドに MaxLength バリデーターを適用することです。ただし、複合 (All、Pipe など) またはカスタム バリデータを使用した私の試みは気に入らないようです。私の考えでは、これがこれを達成するための最も簡単な方法です。
some_schema = Schema(
multiples = All(MaxLength(5), ForEach(UnicodeString(), convert_to_list=True)),
single = OneOf(['a', 'b'])
)
ドキュメントに基づいて、複数値フィールドを Unicode 文字列のリストに変換してから、MaxLength バリデーターを実行し、要素数が 5 を超えると失敗します。失敗部分は機能します:
>>> some_schema.to_python({'single':'a', 'multiples': range(6)})
>>> Invalid: multiples: Enter a value less than 5 characters long
ただし、合格するはずの例が実際には失敗します。
>>> some_schema.to_python({'single':'a', 'multiples': range(3)})
>>> Invalid: multiples: Please provide only one value
formencode のドキュメンテーションは、概して非常に優れていますが、この主題を明らかにすることはできませんでした。ソース コードを見ると、これは Schema クラスからの単一値の予期される例外です。引数をスキーマに渡そうとしaccepts_iterator=Trueましたが、それも失敗します。
スキーマ内のフィールドが Unicode 文字列のリストであり、長さが N 未満であることを確認するにはどうすればよいですか?