from django import forms

""" slower clean() method using regex

    def clean(self, value):
        import re
        if not re.search('[a-zA-Z]+', value) or not re.search('[0-9]+', value):
            raise forms.ValidationError(u'Your password must include at least \
                                       one letter and at least one number.')
"""

# Password Field (Extends CharField) (Optimized Version)
import string
class PasswordField(forms.CharField):
    
    # Setup the Field
    def __init__(self, *args, **kwargs):
        super(PasswordField, self).__init__(min_length = 7, required = True,
                        label = u'Password',
                        widget = forms.PasswordInput(render_value = False),       
                        *args, **kwargs)
    
    # Validate - 1+ Numbers, 1+ Letters
    def clean (self, value):
        
        # Setup Our Lists of Characters and Numbers
        characters = list(string.letters)
        numbers = [str(i) for i in range(10)]
        
        # Assume False until Proven Otherwise
        numCheck = False
        charCheck = False

        # Loop until we Match        
        for char in value: 
            if not charCheck:
                if char in characters:
                    charCheck = True
            if not numCheck:
                if char in numbers:
                    numCheck = True
            if numCheck and charCheck:
                break
        
        if not numCheck or not charCheck:
            raise forms.ValidationError(u'Your password must include at least \
                                          one letter and at least one number.')

        return super(PasswordField, self).clean(value)