Python 스키마로 데이터 유효성 검사하는 Voluptuous 라이브러리 알아보기

오늘은 Python으로 사용자가 정의한 스키마로 데이터의 유효성을 검증할 수 있는 Voluptuous 패키지에 대하여 알아보려 합니다.

Voluptuous 설치

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

pip3 install virtualenv
virtualenv -mvenv env

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

source env/bin/activate

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

pip3 install --upgrade pip

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

pip install voluptuous

pip로 Voluptuous를 설치합니다.

hello world

간단한 예제입니다.

from voluptuous import Schema

schema = Schema({
    'hello': str,
})


schema({'hello': 'world'})

hello라는 키를 가진 스키마에 따라 데이터를 검증할 수 있습니다.

type

타입마다 다르게 스키마를 설정할 수 있습니다.

from voluptuous import Schema
from voluptuous import Url

Schema를 가져오고, Url도 주소 형식을 정의하기 위해서 가져옵니다.

schema = Schema(10)
num = schema(10)
print(num)

숫자 10이 아니면 올바르지 않는 값이라고 오류를 발생합니다.

schema = Schema('string')
string = schema('string')
print(string)

string이라는 문자열이 아니면 올바르지 않는 값이라고 오류를 발생합니다.

schema = Schema(int)
int_type = schema(1)
print(int_type)

하지만 int라고 정수형 타입만 정의하면 어느 숫자가 와도 괜찮습니다.

schema = Schema(Url())
url_type = schema('http://python.org')
print(url_type)

url 형식도 데이터 검증을 할 수 있습니다.

schema = Schema([10, 'test', 'string'])
ex1 = schema([10])
ex2 = schema([10, 'test'])
print(ex1)
print(ex2)

리스트에 정의되어 있는 값들이 들어있지 않으면 올바르지 않는 값이라고 오류를 발생합니다.

schema = Schema({1})
set = schema({1})
print(set)

셋도 스키마로 정의하여 데이터를 검증할 수 있습니다.

schema = Schema({'hello': 'world'})
dict_type = schema({'hello': 'world'})
print(dict_type)

딕셔너리 타입도 스키마로 검증할수 있습니다.

function

from datetime import datetime
from voluptuous import Schema


def check_date(fmt='%Y-%m-%d'):
    return lambda v: datetime.strptime(v, fmt)


schema = Schema(check_date())
schema('2019-04-23')

유효성 검사 함수로 스키마를 구성할 수 있습니다.

Written on April 23, 2019