src/ldt/ldt/forms/fields.py
author rougeronj
Mon, 14 Jan 2013 14:58:03 +0100
changeset 1062 14c98d369c5a
parent 1061 92e3a410e192
child 1064 d8b2af693c69
permissions -rw-r--r--
update LdtDurationField to correctly test if the value is an integer, and send custom message error if it's not

"""
Field classes.
"""

from django import forms
from django.utils.translation import ugettext_lazy as _
from django.core.exceptions import ValidationError
import logging
import time
import math

__all__ = (
    'LdtDurationField'
)

class LdtDurationField (forms.TimeField):
    """
    A field allowing to enter the duration format (eg: XhMM, XXhMM, HH:MM:SS)
    """
    
    default_error_messages = {
        'required': _(u'The duration field can not be empty.'),
        'invalid': _(u'Enter a valid duration format;'),
    }
    
    def __init__(self, formats, *args, **kwargs):
        self.formats = formats
        super(LdtDurationField, self).__init__(*args, **kwargs)
    
    def to_python(self, value):
        logging.debug(value)
        dur = value
        for format in self.formats:
            try:
                dur = time.strptime(dur, format)
                dur = dur.tm_hour*3600 + dur.tm_min*60 + dur.tm_sec
                dur = dur*1000
                break
            except:
                logging.debug("trying next format")
        logging.debug(str(dur))
        return dur
    
    def validate(self, value):
        if value==None or value=="":
            raise ValidationError(self.default_error_messages['required'])
        else:
            try:
                int(value)
            except (ValueError, TypeError):
                raise ValidationError(self.default_error_messages['invalid'])