54 lines
2.2 KiB
Python
54 lines
2.2 KiB
Python
|
import re
|
||
|
|
||
|
from Utils.ErrorUtil import ReturnConditionCheckFailed
|
||
|
|
||
|
|
||
|
class ValidateAttr(object):
|
||
|
|
||
|
def __init__(self, **kwargs):
|
||
|
""""""
|
||
|
self.kwargs = kwargs
|
||
|
|
||
|
def __get__(self, instance, owner):
|
||
|
if self.kwargs['field'] in instance.__dict__:
|
||
|
return instance.__dict__[self.kwargs['field']]
|
||
|
|
||
|
def __set__(self, instance, value):
|
||
|
""""""
|
||
|
|
||
|
if 'type' in self.kwargs:
|
||
|
"""检查实例的属性类型"""
|
||
|
if not isinstance(value, self.kwargs['type']):
|
||
|
raise ReturnConditionCheckFailed(self.kwargs['error_info'], self.kwargs['error_code'])
|
||
|
|
||
|
if 'length' in self.kwargs:
|
||
|
"""检查实例的属性值长度(一般是str类型)"""
|
||
|
if len(value) != self.kwargs['length']:
|
||
|
raise ReturnConditionCheckFailed(self.kwargs['error_info'], self.kwargs['error_code'])
|
||
|
|
||
|
if 'in_list' in self.kwargs:
|
||
|
"""检查实例属性是否包含于列表中(属性有列表和非列表两种情况)"""
|
||
|
if type(value) is not list:
|
||
|
if value not in self.kwargs['in_list']:
|
||
|
raise ReturnConditionCheckFailed(self.kwargs['error_info'], self.kwargs['error_code'])
|
||
|
else:
|
||
|
for item in value:
|
||
|
if item not in self.kwargs['in_list']:
|
||
|
raise ReturnConditionCheckFailed(self.kwargs['error_info'], self.kwargs['error_code'])
|
||
|
|
||
|
if 'instance_list' in self.kwargs:
|
||
|
"""检查实例列表"""
|
||
|
if type(value) is not list:
|
||
|
raise ReturnConditionCheckFailed(self.kwargs['error_info'], self.kwargs['error_code'])
|
||
|
else:
|
||
|
for item in value:
|
||
|
if not isinstance(item, self.kwargs['instance_list']):
|
||
|
ReturnConditionCheckFailed(self.kwargs['error_info'], self.kwargs['error_code'])
|
||
|
|
||
|
if 'func' in self.kwargs:
|
||
|
"""属性检查函数"""
|
||
|
if not list(map(self.kwargs['func'], [value]))[0]:
|
||
|
raise ReturnConditionCheckFailed(self.kwargs['error_info'], self.kwargs['error_code'])
|
||
|
|
||
|
instance.__dict__[self.kwargs['field']] = value
|