Facebook
From Bulky Crane, 6 Years ago, written in Python.
Embed
Download Paste or View Raw
Hits: 239
  1. class ConversionMixin:
  2.     converters = []
  3.  
  4.     def clean(self, raw_value):
  5.         for converter in self.converters:
  6.             raw_value = converter(raw_value)
  7.  
  8.         return super().clean(raw_value)
  9.  
  10. def create_conversion_field(field, *new_converters):
  11.     class NewConversionField(ConversionMixin, field):
  12.         converters = new_converters
  13.  
  14.         def __reduce__(self):
  15.             return (create_conversion_field, (field, new_converters))
  16.  
  17.     NewConversionField.__name__ = 'Conversion{}'.format(field.__name__)
  18.  
  19.     return NewConversionField
  20.  
  21.  
  22. def with_converters(field, *converters, **field_kwargs):
  23.     return partial(create_conversion_field(field, *converters), **field_kwargs)
  24.