Skip to content

Commit

Permalink
Merge pull request #81 from Eastwu5788/2.0.9-dev
Browse files Browse the repository at this point in the history
feature(): support list filter
  • Loading branch information
Eastwu5788 committed May 8, 2020
2 parents 9184aaf + 0cb225b commit 1aef3d0
Show file tree
Hide file tree
Showing 8 changed files with 56 additions and 44 deletions.
2 changes: 1 addition & 1 deletion CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Version 2.0.9 (20200509)

Unreleased

- TODO: 强化处理数组类型参数能力
- 强化处理数组类型参数能力
- 过滤器剥离为普通过滤器和复杂跨字段过滤器
- TODO: 完善sphinx文档
- 新增Datetime日期处理能力
Expand Down
9 changes: 6 additions & 3 deletions pre_request/filters/simple/email_filter.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,18 @@ def filter_required(self):
if not self.rule.required and self.value is None:
return False

if not self.rule.email or not isinstance(self.value, str):
if not self.rule.email or self.rule.direct_type != str:
return False

return True

def __call__(self, *args, **kwargs):
super(EmailFilter, self).__call__()

if not EmailRegexp()(self.value):
raise ParamsValueError(self.error_code, filter=self)
fmt_value = self.value if isinstance(self.value, list) else [self.value]

for value in fmt_value:
if not EmailRegexp()(value):
raise ParamsValueError(self.error_code, filter=self)

return self.value
29 changes: 16 additions & 13 deletions pre_request/filters/simple/length_filter.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ def filter_required(self):
if not self.rule.required and self.value is None:
return False

if not isinstance(self.value, (str, list)):
if self.rule.direct_type not in [str, list]:
return False

if self.rule.gt is not None:
Expand All @@ -62,20 +62,23 @@ def filter_required(self):
def __call__(self, *args, **kwargs):
super(LengthFilter, self).__call__()

# 大于
if self.rule.gt is not None and not len(self.value) > self.rule.gt:
raise ParamsValueError(self.length_code_gt, filter=self)
fmt_value = self.value if isinstance(self.value, list) else [self.value]

# 大于等于
if self.rule.gte is not None and not len(self.value) >= self.rule.gte:
raise ParamsValueError(self.length_code_gte, filter=self)
for value in fmt_value:
# 大于
if self.rule.gt is not None and not len(value) > self.rule.gt:
raise ParamsValueError(self.length_code_gt, filter=self)

# 小于
if self.rule.lt is not None and not len(self.value) < self.rule.lt:
raise ParamsValueError(self.length_code_lt, filter=self)
# 大于等于
if self.rule.gte is not None and not len(value) >= self.rule.gte:
raise ParamsValueError(self.length_code_gte, filter=self)

# 小于等于
if self.rule.lte is not None and not len(self.value) <= self.rule.lte:
raise ParamsValueError(self.length_code_lte, filter=self)
# 小于
if self.rule.lt is not None and not len(value) < self.rule.lt:
raise ParamsValueError(self.length_code_lt, filter=self)

# 小于等于
if self.rule.lte is not None and not len(value) <= self.rule.lte:
raise ParamsValueError(self.length_code_lte, filter=self)

return self.value
13 changes: 8 additions & 5 deletions pre_request/filters/simple/location_filter.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ def filter_required(self):
if not self.rule.required and self.value is None:
return False

if not isinstance(self.value, str):
if self.rule.direct_type != str:
return False

if self.rule.latitude or self.rule.longitude:
Expand All @@ -43,10 +43,13 @@ def filter_required(self):
def __call__(self, *args, **kwargs):
super(LocationFilter, self).__call__()

if self.rule.longitude and not LongitudeRegexp()(self.value):
raise ParamsValueError(self.longitude_error_code, filter=self)
fmt_value = self.value if isinstance(self.value, list) else [self.value]

if self.rule.latitude and not LatitudeRegexp()(self.value):
raise ParamsValueError(self.latitude_error_code, filter=self)
for value in fmt_value:
if self.rule.longitude and not LongitudeRegexp()(value):
raise ParamsValueError(self.longitude_error_code, filter=self)

if self.rule.latitude and not LatitudeRegexp()(value):
raise ParamsValueError(self.latitude_error_code, filter=self)

return self.value
9 changes: 6 additions & 3 deletions pre_request/filters/simple/mobile_filter.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,18 @@ def filter_required(self):
if not self.rule.required and self.value is None:
return False

if not self.rule.mobile or not isinstance(self.value, str):
if not self.rule.mobile or self.rule.direct_type != str:
return False

return True

def __call__(self, *args, **kwargs):
super(MobileFilter, self).__call__()

if not MobileRegexp()(self.value):
raise ParamsValueError(self.error_code, filter=self)
value = self.value if isinstance(self.value, list) else [self.value]

for v in value:
if not MobileRegexp()(v):
raise ParamsValueError(self.error_code, filter=self)

return self.value
17 changes: 10 additions & 7 deletions pre_request/filters/simple/network_filter.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ def filter_required(self):
if not self.rule.required and self.value is None:
return False

if not isinstance(self.value, str):
if self.rule.direct_type != str:
return False

if self.rule.ipv4 or self.rule.ipv6 or self.rule.mac:
Expand Down Expand Up @@ -78,13 +78,16 @@ def _is_ipv6(value):
def __call__(self, *args, **kwargs):
super(NetworkFilter, self).__call__()

if self.rule.ipv4 and not self._is_ipv4(self.value):
raise ParamsValueError(self.ipv4_error_code, filter=self)
value = self.value if isinstance(self.value, list) else [self.value]

if self.rule.ipv6 and not self._is_ipv6(self.value):
raise ParamsValueError(self.ipv6_error_code, filter=self)
for v in value:
if self.rule.ipv4 and not self._is_ipv4(v):
raise ParamsValueError(self.ipv4_error_code, filter=self)

if self.rule.mac and not MacRegexp()(self.value):
raise ParamsValueError(self.mac_error_code, filter=self)
if self.rule.ipv6 and not self._is_ipv6(v):
raise ParamsValueError(self.ipv6_error_code, filter=self)

if self.rule.mac and not MacRegexp()(v):
raise ParamsValueError(self.mac_error_code, filter=self)

return self.value
16 changes: 8 additions & 8 deletions pre_request/filters/simple/regexp_filter.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,20 +28,20 @@ def filter_required(self):
if not self.rule.required and self.value is None:
return False

# 非字符串不处理正则
if not isinstance(self.value, str):
return False

if self.rule.reg is not None:
if self.rule.reg and self.rule.direct_type == str:
return True

return False

def __call__(self, *args, **kwargs):
super(RegexpFilter, self).__call__()

# 判断是否符合正则
if not Regexp(self.rule.reg, re.IGNORECASE)(self.value):
raise ParamsValueError(self.error_code, filter=self)
# 将参数转换成数组处理
fmt_value = self.value if isinstance(self.value, list) else [self.value]

for value in fmt_value:
# 判断是否符合正则
if not Regexp(self.rule.reg, re.IGNORECASE)(value):
raise ParamsValueError(self.error_code, filter=self)

return self.value
5 changes: 1 addition & 4 deletions pre_request/filters/simple/trim_filter.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,7 @@ def filter_required(self):
if not self.rule.required and self.value is None:
return False

if self.rule.trim and isinstance(self.value, str):
return True

if self.rule.trim and isinstance(self.value, list) and self.rule.direct_type == str:
if self.rule.trim and self.rule.direct_type == str:
return True

return False
Expand Down

0 comments on commit 1aef3d0

Please sign in to comment.