view PersonasBackend/personas/forms.py @ 92:c5d76a735410

Fixed a validation bug w/ colors
author Atul Varma <varmaa@toolness.com>
date Thu, 27 Mar 2008 18:21:22 -0700
parents cad201e72d73
children e1bfeffce0f0
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:
            return 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, field ):
        models.ensure_color_is_valid( self.cleaned_data[field] )
        return self.cleaned_data[field]

    def clean_text_color( self ):
        return self._color_cleaner( "text_color" )

    def clean_accent_color( self ):
        return self._color_cleaner( "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