# HG changeset patch # User rougeronj # Date 1349343722 -7200 # Node ID 1762d071100840e538d715593197965db9075680 # Parent ec35bc26b8c2ae9dbf40eb7710b263caf29ca10c Add a custom duration field for the create content form diff -r ec35bc26b8c2 -r 1762d0711008 src/ldt/ldt/forms/__init__.py --- a/src/ldt/ldt/forms/__init__.py Wed Oct 03 16:00:23 2012 +0200 +++ b/src/ldt/ldt/forms/__init__.py Thu Oct 04 11:42:02 2012 +0200 @@ -1,1 +1,7 @@ +from __future__ import absolute_import +from django.core.exceptions import ValidationError +from django.forms.fields import * +from django.forms.forms import * +from django.forms.models import * +from django.forms.widgets import * \ No newline at end of file diff -r ec35bc26b8c2 -r 1762d0711008 src/ldt/ldt/forms/fields.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/ldt/ldt/forms/fields.py Thu Oct 04 11:42:02 2012 +0200 @@ -0,0 +1,34 @@ +""" +Field classes. +""" + +from django import forms +from django.utils.translation import ugettext_lazy as _ +import logging +import time +import math + +__all__ = ( + 'LdtDurationField' +) + +class LdtDurationField (forms.TimeField): + default_error_messages = { + 'invalid': _(u'Enter a valid duration format'), + } + + def __init__(self, formats, *args, **kwargs): + self.formats = formats + super(LdtDurationField, self).__init__(*args, **kwargs) + + def clean(self, data): + dur = data + 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") + return dur \ No newline at end of file diff -r ec35bc26b8c2 -r 1762d0711008 src/ldt/ldt/ldt_utils/forms.py --- a/src/ldt/ldt/ldt_utils/forms.py Wed Oct 03 16:00:23 2012 +0200 +++ b/src/ldt/ldt/ldt_utils/forms.py Thu Oct 04 11:42:02 2012 +0200 @@ -1,7 +1,7 @@ from django import forms from django.utils.translation import ugettext_lazy as _ from django.contrib.auth.models import Group -from ldt.forms import widgets as ldt_widgets +from ldt.forms import widgets as ldt_widgets, fields as ldt_fields from ldt.security.forms import ShareForm from models import Project, Content, Media from utils import generate_uuid @@ -54,7 +54,7 @@ groups = forms.ModelMultipleChoiceField(Group.objects.all(), required=False) is_public = forms.BooleanField(required=False) front_project = forms.ModelChoiceField(queryset=Project.objects.none(), required=False, label=_("content.front_project")) - duration = forms.IntegerField(required=True, label=_("content.duration")+" (Ms, H:M, H:M:S, HhM, Ss, Ssec)", widget=ldt_widgets.LdtParseVideoDuration(format=["%H:%M", "%H:%M:%S", "%Hh%M", "%Ss", "%Ssec"])) + duration = ldt_fields.LdtDurationField(required=True, label=_("content.duration")+" (Ms, M:S, H:M:S, HhM, Ss, Ssec)", formats=["%M:%S", "%H:%M:%S", "%Hh%M", "%Ss", "%Ssec"]) def clean_iri_id(self): data = self.cleaned_data.get('iri_id')