1

既にフロント ページを持っているアプリの 1 つの API を作成しようとしています。入力引数は次のようになります。

ケース1

{'_field_1_': 'current_coupon', '_1_>=_1': 'True', '_1_value_1': '10', '_1_value_2': '', '_1_compare_field': '', 'output-columns': 'cusip,isin,description'}

ケース 2

{'_field_1_': 'cusip', '_1_exactly': 'True', '_1_value': 'ads', '_1_compare_field': '', '_field_2_': 'semi_mod_duration', '_2_>=_1': 'True', '_2_value_1': '', '_2_value_2': '', '_2_compare_field': 'eff_dur', 'output-columns': 'cusip,isin,description,ticker,current_coupon'}

ドキュメントで簡単な引数の検証を行う方法を見つけました。webargs別のアプリのコードは次のようになります。

heatmap_args = \
    {
        'seniority': fields.Str(required=True,
                                validate=lambda senority: True if any(senority == sen_val for sen_val in seniority) else
                                raise_(ValidationError("Invalid value for seniority: {}. "
                                                       "Valid values: {}".format(senority, seniority)))),
        'sector':   fields.Str(required=True,
                               validate=lambda sectora: True if any(sectora == sector_val for sector_val in sector) else
                               raise_(ValidationError("Invalid value for sector: {}. "
                                                      "Valid values: {}".format(sectora, sector)))),
        'currency': fields.Str(required=True,
                               validate=lambda curr: True if any(curr == curr_val for curr_val in currency) else
                               raise_(ValidationError("Invalid value for currency: {}. "
                                                      "Valid values: {}".format(curr, currency)))),
        'field':    fields.Str(required=True,
                               validate=lambda fielda: True if any(fielda == field_val for field_val in
                                                                   list(field.keys()))
                               else raise_(ValidationError("Invalid value for field: {}. "
                                                           "Valid values: {}".format(fielda, list(field.keys())))))
    }

ただし、このアプリでは、2 番目のケースからわかるように、フィールドの数は可変です。引数を含む辞書でこれらの引数を複数回再定義することなく、引数に存在する場合、すべて_field_x_が同じ方法で検証されるようにするにはどうすればよいですか。別の手動の方法は、POST エンドポイントに到達したときにそれを検証することですが、それは奇妙に感じます。x_field_x_

ここにも条件付きロジックがあります。たとえば、選択したフィールドのタイプがテキストの場合、ユーザーは正確なチェックボックス オプションを使用できますが (_1_exactlyケース 2 の場合)、フィールドが数値の場合は_1_value_1、ケース 1 のように上にロジックが必要です。

これにアプローチする方法は?

4

0 に答える 0