view PersonasBackend/personas/forms.py @ 91:cad201e72d73

Added validation for the text_color and accent_color fields.
author Atul Varma <varmaa@toolness.com>
date Thu, 27 Mar 2008 17:52:19 -0700
parents 663f0410ff39
children c5d76a735410
line wrap: on
line source

from django.newforms import ModelForm, ValidationError
from PersonasBackend.personas import models

def newforms_validator( func ):
    """
    Turns a framework-independent validator that throws a ValueError
    into a newforms-style validator that throws a ValidationError.

    This is needed because Django's admin interface currently uses
    old-style forms.
    """

    def wrapper( *args, **kwargs ):
        try:
            func( *args, **kwargs )
        except ValueError, e:
            raise ValidationError( e.message )

    return wrapper

class PersonaForm( ModelForm ):
    """
    Form given to normal users who don't have the permission to
    publish Personas.
    """

    class Meta:
        model = models.Persona
        exclude = ["owner", "date_published", "popularity", "status"]

    @newforms_validator
    def _color_cleaner( self, value ):
        models.ensure_color_is_valid( value )
        return value

    def clean_text_color( self ):
        return self._color_cleaner( self.data["text_color"] )

    def clean_accent_color( self ):
        return self._color_cleaner( self.data["accent_color"] )

    def clean( self ):
        form_data = dict( self.cleaned_data )
        form_data.update( self.files )
        newforms_validator(
            models.ensure_header_and_footer_are_valid
            )( form_data )

        return self.cleaned_data