나는 두 개의 키 이상을 가지고있을 때 (사전 객체를 통해) 함수에 도착하는 매개 변수의 유효성을 검사하기 위해 데코레이터를 사용하고 있습니다. 하지만 키가 있으면 오류 (check_person)가 반환됩니다. 작동하려면파이썬 장식 자 유효성 검사
if _NAME in json_request:
return True
return False
: I가 check_person을 변경해야
def required(**mandatory):
"""
:param mandatory:
:return:
"""
def decorator(f):
@wraps(f)
def wrapper(**dicts):
for argname, d in dicts.items():
for key in mandatory.get(argname, []):
if key not in d:
raise Exception('Key "%s" is missing from argument "%s"' % (key, argname))
return f(**dicts)
return wrapper
return decorator
@required(json_request=(_PROVIDER, _REPORT))
def check_campaign(json_request):
"""
:param json_request:
:return:
"""
return True
@required(json_request=(_NAME))
def check_person(json_request=None):
"""
:param json_request:
:return:
"""
return True
: 나는 내 문제를 예시하기 위해이 개 기능을 정의했다.
내가하려고하면 :self.assertTrue(validator.check_person(json_request=json.loads("""{"name": "Elon Musk"}""")))
또는 특별히 :
{"name": "Elon Musk"}
내가 얻을 :
Error
Traceback (most recent call last):
File "/Users/spicyramen/Documents/OpenSource/Development/Python/gonzo/utils/validate/validator_test.py", line 46, in test_person
self.assertTrue(validator.check_person(json_request=json.loads("""{"name": "Elon Musk"}""")))
File "/Users/spicyramen/Documents/OpenSource/Development/Python/gonzo/utils/validate/validator.py", line 26, in wrapper
raise Exception('Key "%s" is missing from argument "%s"' % (key, argname))
Exception: Key "n" is missing from argument "json_request"
내 사전에 1 개 이상의 키가있는 경우 잘 작동 (check_campaign처럼) .