A lot of code moved to ungleich-common
This commit is contained in:
parent
ce709c3b6f
commit
cee92f2e99
6 changed files with 18 additions and 268 deletions
86
schemas.py
86
schemas.py
|
|
@ -5,91 +5,7 @@ import math
|
|||
|
||||
from config import ldap_manager, etcd_client
|
||||
from helper import resolve_product
|
||||
|
||||
|
||||
class ValidationException(Exception):
|
||||
"""Validation Error"""
|
||||
|
||||
|
||||
class Field:
|
||||
def __init__(self, _name, _type, _value=None, validators=None, disable_validation=False):
|
||||
self.validation_disabled = disable_validation
|
||||
self.name = _name
|
||||
self.value = _value
|
||||
self.type = _type
|
||||
self.validators = validators or []
|
||||
|
||||
def is_valid(self):
|
||||
if not self.validation_disabled:
|
||||
if not isinstance(self.value, self.type):
|
||||
try:
|
||||
self.value = self.type(self.value)
|
||||
except Exception:
|
||||
raise ValidationException("Incorrect Type for '{}' field".format(self.name))
|
||||
|
||||
for validator in self.validators:
|
||||
validator()
|
||||
|
||||
def __repr__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class BaseSchema:
|
||||
def __init__(self):
|
||||
self.objects = {}
|
||||
|
||||
def validation(self):
|
||||
# custom validation is optional
|
||||
return True
|
||||
|
||||
def get_fields(self):
|
||||
return [getattr(self, field) for field in dir(self) if isinstance(getattr(self, field), Field)]
|
||||
|
||||
def is_valid(self):
|
||||
for field in self.get_fields():
|
||||
field.is_valid()
|
||||
self.validation()
|
||||
|
||||
def get_cleaned_values(self):
|
||||
field_kv_dict = {
|
||||
field.name: field.value
|
||||
for field in self.get_fields()
|
||||
}
|
||||
cleaned_values = field_kv_dict
|
||||
cleaned_values.update(self.objects)
|
||||
|
||||
return cleaned_values
|
||||
|
||||
def add_schema(self, schema, data, under_field_name=None):
|
||||
s = schema(data)
|
||||
s.is_valid()
|
||||
|
||||
base = self
|
||||
if under_field_name:
|
||||
# Create a field in self
|
||||
setattr(self, under_field_name, Field(under_field_name, dict, _value={}, disable_validation=True))
|
||||
base = getattr(self, under_field_name)
|
||||
|
||||
for field in s.get_fields():
|
||||
if under_field_name:
|
||||
getattr(base, 'value')[field.name] = field.value
|
||||
else:
|
||||
setattr(base, field.name, field)
|
||||
|
||||
self.objects.update(s.objects)
|
||||
|
||||
@staticmethod
|
||||
def get(dictionary: dict, key: str, return_default=False, default=None):
|
||||
if dictionary is None:
|
||||
raise ValidationException('No data provided at all.')
|
||||
try:
|
||||
value = dictionary[key]
|
||||
except KeyError:
|
||||
if return_default:
|
||||
return {'_value': default, 'disable_validation': True}
|
||||
raise ValidationException("Missing data for '{}' field.".format(key))
|
||||
else:
|
||||
return {'_value': value, 'disable_validation': False}
|
||||
from ungleich_common.schemas import BaseSchema, Field, ValidationException
|
||||
|
||||
|
||||
class AddProductSchema(BaseSchema):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue