entities_validation_svc/test_cerberus.py

76 lines
2.3 KiB
Python
Raw Normal View History

2020-12-02 22:47:40 +01:00
#!/usr/bin/python3
import cerberus
from schwifty import IBAN, BIC
import datetime
def valid_iban(field, value, error):
try:
IBAN(value)
return True
except ValueError:
error(field, 'not a valid IBAN')
def valid_bic(field, value, error):
try:
BIC(value)
return True
except ValueError:
error(field, 'not a valid BIC')
def iso_date(field, value, error):
try:
datetime.datetime.strptime(value, "%Y-%m-%d")
return True
except ValueError:
error(field, 'not a valid IDO 8601 date')
document = {
'finanzdaten':
{
'bic': 'PBNKDEFFXXX',
'holder': '',
'iban': 'DE89370400440532013000',
'issuance': '2012-01-01',
'reference': '0042',
'scan-sepa-mandate': ''
},
'mitgliederdaten':
{
'bis': '',
'mitgliedsbeitrag': '30',
'scan-antrag': '',
'schliessberechtigung': 'Ja',
'spendenbeitrag': '',
'status': 'V',
'von': '2012-01-01'
},
'stammdaten':
{
'address_code': '39104',
'address_country': 'DE',
'address_label': 'Max Hackerberg\nLeibnizstr. 32\n39104 Magdeburg',
'address_locality': 'Magdeburg',
'address_region': '',
'address_street': 'Leibnizstr. 32',
'birth_date': '1970-01-01',
'birth_location': 'Hackstadt',
'email': 'max.hackerberg@netz39.de',
'fullname': 'Max Hackerberg',
'nickname': 'maxH',
'pgp-key': '',
'ssh-key': ''
},
'timestamp': '2020-03-25T23:58:11',
'id': '6af68'
}
schema_fin={'bic': {'type': 'string', 'check_with': valid_bic},
'iban': {'type': 'string', 'check_with': valid_iban},
'issuance': {'type': 'string', 'check_with': iso_date},
'reference': {'type': 'string'},
'scan-sepa-mandate': {'type': 'string'},
'holder': {'type': 'string'}}
v = cerberus.Validator()
v.validate(document['finanzdaten'], schema_fin)