pyparamvalidate 项目背景和需求分析

目录

一、前置说明

1、总体目录

2、本节目标

  • 阐述 pyparamvalidate 项目背景和需求分析。

二、主要内容

1、项目背景

在编写 easyuiautotest 自动化测试框架时,经常需要对用户输入的数据进行校验,并给出错误提示。

下面是一段典型的问题代码:

python 复制代码
def example_function(name, age, gender='male', **kwargs):

    # 校验代码
    if not name:
        raise ValueError('name is required')

    if not age:
        raise ValueError('age is required')

    if gender not in ['male', 'female']:
        raise ValueError("gender must be either 'male' or 'female'")

    profile = kwargs.get("profile")
    if profile is None:
        raise ValueError('profile is required')

    address = profile.get("address")
    if not address:
        raise ValueError("address is required")

    # 业务代码
    print(name, age, gender, profile)

它的问题是:大量的校验代码与业务代码混在一起,整体显得很杂乱冗余。

所以需要对它进行改造:将普遍的校验行为抽离出来模块化,最小化对业务代码的侵入。

下面是期望的改造效果:

python 复制代码
@ParamValidator("profile").is_similar_dict(reference_dict={"address": "", "others": {}})
@ParamValidator("gender", "gender must be either 'male' or 'female'").is_allowed("male", "female")
@ParamValidator("age", "age must be integer.").is_integer().is_not_empty()
@ParamValidator("name", "name must be string.").is_string().is_not_empty()
def example_function(name, age, gender='male', **kwargs):

    address = kwargs.get("profile").get("address")
    Validator(address).is_not_empty('address is required')

    # 业务代码
    print(name, age, gender, profile)
    

2、需求分析

从问题与期望中,大致提炼出需求如下:

  • 支持对函数参数进行校验,如:
python 复制代码
@ParamValidator("name", "name must be string.").is_string().is_not_empty()
def example_function(name, age, gender='male', **kwargs):
	...
  • 支持对一般数据进行校验,如:
python 复制代码
address = kwargs.get("profile").get("address")
Validator(address).is_not_empty('address is required')
  • 提供清晰的错误提示,在字段规则描述或在校验方法中给出错误提示,如:
python 复制代码
Validator(address, rule_des='address is required').is_not_empty()
Validator(address).is_not_empty('address is required')
  • 支持链式调用,方便用户连续调用多个校验方法,如:
python 复制代码
Validator(address).is_string().is_not_empty()
  • 支持用户自定义校验规则,如:
python 复制代码
def is_even_number(value):
    return value % 2 == 0

Validator(input).custom_validator(is_even_number, "Value must be an even number")

3、轮子调研

不重复造轮子,确定需求之后,使用 Chatgpt 做了一个简单的调研,发现有几个强大的校验数据结构的库:

暂未发现支持函数参数校验的现成项目(可能调研不全面),于是决定: do it now .

从特性出发,因此将项目命名为:pyparamvalidate .

三、后置说明

1、要点小结

  • 数据校验是一个通用行为,可以将其模块化;
  • do it now ,立即行动,开始实施;

2、下节准备

  • Validator 类的简单实现

点击返回主目录

相关推荐
小小张说故事1 分钟前
Python 的 list 为什么能装下任何类型?拆开 PyObject* 数组,以及它让你多付了多少内存
后端·python
chi11305 分钟前
【无标题】
前端·javascript·python
编程见习者18 分钟前
Deep Agents介绍
人工智能·python·langchain
梦幻精灵_cq21 分钟前
《SGR修行之路》——二○二一五二〇,初识终端点红裳
python·生活
我要见SA姐130 分钟前
Chrome 内存泄漏诊断指南:从现象定位到根因排查
ide·vscode·python·自动化·编辑器
应用市场1 小时前
用本机跑的开源音乐模型,给安卓小游戏做 20 秒无缝循环背景音乐
android·python·游戏开发·soundpool·音频处理
小lo想吃棒棒糖1 小时前
把 启元机器人Q1 的训练搬到昇腾 910B:从 MuJoCo 到 PPO 的一次完整迁移
人工智能·python·机器人·昇腾·具身智能
weixin_307779131 小时前
RAG 级联失效分析——面试中的错误归因艺术
人工智能·python·面试·职场和发展
AI创界者1 小时前
Python 进阶实战(十八):API 网关安全与异步鉴权中间件 —— 基于 AsyncIO 的 JWT 零拷贝验权与动态黑名单过滤
人工智能·python·aigc
前端精髓1 小时前
学会调用Qwen3.7-通用文本向量
python