Python 데이터 검증 cerberus 라이브러리 알아보기

오늘은 Python으로 데이터의 유효성을 검증할 수 있는 cerberus 패키지에 대하여 알아보려 합니다.

cerberus 설치

우선 virtualenv로 파이썬 환경을 분리해줍니다.

pip3 install virtualenv
virtualenv -mvenv env

env라는 이름의 가상 환경을 생성합니다.

source env/bin/activate

가상환경을 폴더에서 활성화합니다.

pip3 install --upgrade pip

pip의 업그레이드가 존재하는지 확인하고 진행합니다.

pip install cerberus

pip로 cerberus를 설치합니다.

실습

from cerberus import Validator

cerberus에서 Validator를 가져옵니다.

schema = {'id': {'type': 'string'}, 'login': {'type': 'integer', 'max': 999}}
v = Validator(schema)

스키마를 지정하면 검사할 수 있습니다.

위 코드에서는 id가 문자열이어야 하고, login은 정수형이면서 999이하로 설정되어야 합니다.

document = {'id': 'real_id'}
result = v.validate(document)
print(result)

위 id는 문자열이므로 검사했을 때에 true가 출력됩니다.

document = {'id': 10}
result = v.validate(document)
print(result)

위 id는 문자열이 아니므로 검사했을 때에 false가 출력됩니다.

document = {'email': 'example@exmpale.com'}
result = v.validate(document)
print(result)

email이라는 항목은 없기 때문에 false라고 출력됩니다.

document = {'id': 'real_id', 'login': 1000}
result = v.validate(document, schema)
print(result)

id는 문자열이지만, login의 max 값을 999로 설정했기 때문에 false라고 출력됩니다.

error = v.errors
print(error)

errors에 ‘max value is 999’처럼 어떤 항목에서 오류가 발생하는지 포함되어 있습니다.

document = {'id': 'real_id', 'hello': 'world'}
result = v.validate(document, schema)
print(result)

hello라는 새로운 항목으로 인하여 false라고 출력됩니다.

error = v.errors
print(error)

새로운 항목은 ‘unknown field’로 분류됩니다.

v.schema = {'pin': {'type': 'integer', 'coerce': int}}
v.validate({'pin': '0000'})
result_type = type(v.document['pin'])
print(result_type)

‘coerce’: int와 같이 작성하면 출력되는 타입이 해당 타입으로 변경됩니다.

해당 항목의 타입을 확인해보면 ‘int’로 출력됩니다.

normalized_doc = v.normalized(document, schema)
document_type = type(normalized_doc['hello'])
print(document_type)

스키마의 지정된 규칙에 따라 정규화된 문서를 반환하게 할 수 있습니다.

Written on April 20, 2019