Skip to content

[Feature Request] DSLの改善:基本バリデータの () 省略を可能にする #20

@harumaki4649

Description

@harumaki4649

概要
スキーマ定義時の視認性を向上させるため、オプション引数を持たない基本バリデータにおいて、インスタンス化のカッコ () を省略できるようにします。

変更内容

  1. VBuilder のメソッドを property 化
    v.str などにアクセスした時点で StringValidator() などのインスタンスを返すようにします。
  2. Validator.call の実装
    v.str() と呼び出された場合でもインスタンス自身を返すようにし、既存コードとの互換性を維持します。

実装コード案

# 1. 基底クラス Validator に __call__ を追加
class Validator:
    def __init__(self) -> None:
        # ... (既存の初期化)
        pass

    def __call__(self) -> "Validator":
        """
        v.str() のようにカッコ付きで呼ばれても、自分自身を返すことで
        カッコの有無を両方許容する(後方互換性の維持)。
        """
        return self


# 2. VBuilder の基本メソッドを property に変更
class VBuilder:
    @property
    def str(self) -> StringValidator:
        return StringValidator()

    @property
    def int(self) -> NumberValidator:
        return NumberValidator(int)

    @property
    def float(self) -> NumberValidator:
        return NumberValidator(float)

    @property
    def bool(self) -> BoolValidator:
        return BoolValidator()

    # 引数が必要なメソッドはそのまま維持
    def list(self, item_validator: Union[Validator, Dict[builtins.str, Any], Type[Any]]) -> ListValidator:
        return ListValidator(item_validator)

期待される効果
スキーマ定義の記述がより自然になります。

SCHEMA = {
    "ユーザー名": v.str.min(3),    # カッコなしで記述開始
    "レベル": v.int,               # オプションなしなら完全にプロパティ扱い
    "フラグ": v.bool(),            # 従来のカッコありも動作
    "スキル": v.list(v.str)        # 簡潔なネスト
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions