You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
2.9 KiB
107 lines
2.9 KiB
#!/usr/bin/env python3 |
|
|
|
from cerberus import Validator |
|
from validation_functions import * |
|
|
|
|
|
def validate(entity): |
|
schema_fin = { |
|
'bic': { |
|
'type': 'string', |
|
'required': True, |
|
'check_with': valid_bic}, |
|
'iban': { |
|
'type': 'string', |
|
'required': True, |
|
'check_with': valid_iban}, |
|
'issuance': { |
|
'type': 'string', |
|
'required': True, |
|
'check_with': iso_date}, |
|
'reference': {'type': 'string'}, |
|
'scan-sepa-mandate': {'type': 'string'}, |
|
'holder': {'type': 'string'}} |
|
|
|
schema_membership = { |
|
'bis': { |
|
'type': 'string', |
|
'oneof': [{'check_with': iso_date}, {'empty': True}]}, |
|
'mitgliedsbeitrag': { |
|
'type': 'string', |
|
'check_with': valid_money_amount}, |
|
'scan-antrag': {'type': 'string'}, |
|
'schliessberechtigung': { |
|
'type': 'string', |
|
'allowed': ['Ja', 'Nein', 'J', 'N', 'j', 'n', 'y', 'Y']}, |
|
'spendenbeitrag': { |
|
'type': 'string', |
|
'check_with': valid_money_amount}, |
|
'status': { |
|
'type': 'string', |
|
'required': True, |
|
'allowed': ['V', 'E', 'F']}, |
|
'von': { |
|
'type': 'string', |
|
'required': True, |
|
'check_with': iso_date}} |
|
|
|
schema_base = { |
|
'address_code': { |
|
'type': 'string'}, |
|
'address_country': { |
|
'type': 'string'}, |
|
'address_label': { |
|
'type': 'string'}, |
|
'address_locality': { |
|
'type': 'string'}, |
|
'address_region': { |
|
'type': 'string'}, |
|
'address_street': { |
|
'type': 'string'}, |
|
'birth_date': { |
|
'type': 'string', |
|
'required': True, |
|
'check_with': iso_date}, |
|
'birth_location': { |
|
'type': 'string'}, |
|
'email': { |
|
'type': 'string', |
|
'required': True, |
|
'check_with': valid_email}, |
|
'fullname': { |
|
'type': 'string', |
|
'required': True}, |
|
'nickname': { |
|
'type': 'string'}, |
|
'pgp-key': { |
|
'type': 'string'}, |
|
'ssh-key': { |
|
'type': 'string'}} |
|
|
|
schema = { |
|
'finanzdaten': { |
|
'type': 'dict', |
|
'required': True, |
|
'schema': schema_fin}, |
|
'mitgliederdaten': { |
|
'type': 'dict', |
|
'required': True, |
|
'schema': schema_membership}, |
|
'stammdaten': { |
|
'type': 'dict', |
|
'required': True, |
|
'schema': schema_base}, |
|
'id': { |
|
'type': 'string', |
|
'required': True, |
|
'regex': '^[a-f0-9]{5}$'}, |
|
'timestamp': { |
|
'type': 'string', |
|
'required': True} |
|
} |
|
|
|
v = Validator() |
|
result = { |
|
'valid': v.validate(entity, schema), |
|
'errors': v.errors} |
|
return result
|
|
|