Projet

Général

Profil

Télécharger (2,32 ko) Statistiques
| Branche: | Tag: | Révision:

root / corbo / forms.py @ aa90f191

1
import csv
2

    
3
from django import forms
4
from django.utils.translation import ugettext_lazy as _
5
from django.utils.text import slugify
6
from django.core.exceptions import ObjectDoesNotExist
7
from django.core import validators
8
from django.core.exceptions import ValidationError
9

    
10
from .models import Announce, Category, Broadcast, channel_choices
11

    
12

    
13
class AnnounceForm(forms.ModelForm):
14

    
15
    class Meta:
16
        model = Announce
17
        exclude = ('identifier',)
18
        widgets = {
19
            'publication_time': forms.TextInput(attrs={'class': 'datetimepicker',
20
                                                       'readonly': True}),
21
            'expiration_time': forms.TextInput(attrs={'class': 'datetimepicker',
22
                                                      'readonly': True}),
23
            'category': forms.HiddenInput()
24
        }
25

    
26
    def save(self, *args, **kwargs):
27
        instance = super(AnnounceForm, self).save(*args, **kwargs)
28
        if instance:
29
            Broadcast.objects.get_or_create(announce=instance)
30
        return instance
31

    
32

    
33
class CategoryForm(forms.ModelForm):
34
    class Meta:
35
        fields = ('name', 'rss_feed_url')
36
        model = Category
37

    
38
    def save(self, commit=True):
39
        slug = slugify(self.instance.name)
40
        base_slug = slug
41
        if not self.instance.slug:
42
            i = 1
43
            while True:
44
                try:
45
                    c = Category.objects.get(slug=slug)
46
                except ObjectDoesNotExist:
47
                    break
48
                i += 1
49
                slug = '%s-%s' % (base_slug, i)
50
            self.instance.slug = slug
51
        return super(CategoryForm, self).save(commit=commit)
52

    
53

    
54
class SubscriptionsImportForm(forms.Form):
55
    subscribers = forms.FileField(_('Subscribers'),
56
                    help_text=_('utf-8 encoded, comma separated file with email addresses on first column'))
57

    
58
    def clean_subscribers(self, *args, **kwargs):
59
        subscribers = []
60
        reader = csv.reader(self.cleaned_data['subscribers'])
61
        for idx, row in enumerate(reader, 1):
62
            if not row or not row[0]:
63
                continue
64
            try:
65
                validators.validate_email(row[0])
66
            except ValidationError:
67
                raise ValidationError(_('Invalid email address at line %d' % idx))
68
            subscribers.append(row[0])
69
        return subscribers
(4-4/11)