Source code for veritranspay.mixins

from . import validators


[docs]class ValidatableMixin(object): ''' Provides a mechanism for validating the attributes of an object instance. Expects a dictionary named _validators to be provided with keys that represent the names of attributes to be validated, mapped to an instance of a class in the module :py:mod:`veritranspay.validators`. '''
[docs] def validate_attr(self, name, value, validator): ''' Tries to validate the provided value with a given validator. If validation fails, a ValidationError will be raised indicating the name of the property the failed, along with the error message. :arg name: Name of the attribute being validated. This is only used for the error message when validation fails. :type name: :py:class:`str` :arg value: The value that will actually be validated. :arg validator: The appropriate validator instance that value will be checked with. :type validator: Subclass of :py:class:`veritranspay.validators.ValidatorBase` :raises: :py:class:`veritranspay.validators.ValidationError` ''' try: validator.validate(value) except validators.ValidationError as e: msg = "{name} failed validation: {message}".format( name=name, message=e.message) raise validators.ValidationError(msg)
[docs] def validate_all(self): ''' Iterates over all the validators in this instances _validators dictionary, and validates a matching attribute on this object with a validator listed in the _validators dictionary. ''' for attr_name in self._validators: value = getattr(self, attr_name) validator = self._validators[attr_name] self.validate_attr(attr_name, value, validator)
[docs]class SerializableMixin(object): ''' An instance that can return a dictionary representation of it's properties by calling a serialize() method. '''
[docs] def serialize(self): ''' Returns a dictionary representing the current object. If attributes of the current object also implement a serialize method, their dictionary representation will be added as well, instead of the object itself. :returns: Dictionary representation of an object. :rtype: :py:class:`dict` ''' rv = {} for key in self.__dict__: val = getattr(self, key) # If a given attribute implements a 'serialize' method, call # that instead of just adding the attribute to the dictionary. if hasattr(val, 'serialize'): rv[key] = val.serialize() else: rv[key] = val return rv
[docs]class RequestEntity(ValidatableMixin, SerializableMixin): ''' Provides no functionality, other than incorporating SerializableMixin and ValiditableMixin in a single base class. ''' def __repr__(self): return '<{klass}()>'.format(klass=self.__class__.__name__)