28 |
28 |
29 from django import forms |
29 from django import forms |
30 from django.utils.translation import ugettext_lazy |
30 from django.utils.translation import ugettext_lazy |
31 |
31 |
32 from soc.logic import dicts |
32 from soc.logic import dicts |
33 from soc.logic import validate |
33 from soc.logic import cleaning |
34 from soc.logic import models |
34 from soc.logic import models |
35 from soc.views import helper |
35 from soc.views import helper |
|
36 from soc.views.helper import dynaform |
36 from soc.views.helper import widgets |
37 from soc.views.helper import widgets |
37 from soc.views.models import base |
38 from soc.views.models import base |
38 |
39 |
39 import soc.models.sponsor |
40 import soc.models.sponsor |
40 import soc.logic.models.sponsor |
41 import soc.logic.models.sponsor |
41 import soc.logic.dicts |
42 import soc.logic.dicts |
42 import soc.views.helper |
43 import soc.views.helper |
43 import soc.views.helper.widgets |
44 import soc.views.helper.widgets |
44 |
45 |
45 |
46 |
46 class CreateForm(helper.forms.BaseForm): |
47 CreateForm = dynaform.newDynaForm( |
47 """Django form displayed when creating a Sponsor. |
48 dynabase = helper.forms.BaseForm, |
48 """ |
49 dynamodel = soc.models.sponsor.Sponsor, |
49 class Meta: |
50 dynaexclude = ['scope', 'scope_path', 'founder', 'home'], |
50 """Inner Meta class that defines some behavior for the form. |
51 dynafields = { |
51 """ |
52 'clean_link_id': cleaning.clean_new_link_id(models.sponsor.logic), |
52 #: db.Model subclass for which the form will gather information |
53 'clean_feed_url': cleaning.clean_feed_url, |
53 model = soc.models.sponsor.Sponsor |
54 }, |
54 |
55 ) |
55 #: list of model fields which will *not* be gathered by the form |
|
56 exclude = ['scope', 'scope_path', 'founder', 'home'] |
|
57 |
|
58 # TODO(pawel.solyga): write validation functions for other fields |
|
59 def clean_link_id(self): |
|
60 link_id = self.cleaned_data.get('link_id') |
|
61 if not validate.isLinkIdFormatValid(link_id): |
|
62 raise forms.ValidationError("This link ID is in wrong format.") |
|
63 if models.sponsor.logic.getFromFields(link_id=link_id): |
|
64 raise forms.ValidationError("This link ID is already in use.") |
|
65 return link_id |
|
66 |
|
67 def clean_feed_url(self): |
|
68 feed_url = self.cleaned_data.get('feed_url') |
|
69 |
|
70 if feed_url == '': |
|
71 # feed url not supplied (which is OK), so do not try to validate it |
|
72 return None |
|
73 |
|
74 if not validate.isFeedURLValid(feed_url): |
|
75 raise forms.ValidationError('This URL is not a valid ATOM or RSS feed.') |
|
76 |
|
77 return feed_url |
|
78 |
56 |
79 |
57 |
80 class EditForm(CreateForm): |
58 EditForm = dynaform.extendDynaForm( |
81 """Django form displayed when editing a Sponsor. |
59 dynaform = CreateForm, |
82 """ |
60 dynafields = { |
83 link_id = forms.CharField(widget=helper.widgets.ReadOnlyInput()) |
61 'clean_link_id': cleaning.clean_link_id, |
84 founded_by = forms.CharField(widget=helper.widgets.ReadOnlyInput(), |
62 'link_id': forms.CharField(widget=helper.widgets.ReadOnlyInput()), |
85 required=False) |
63 'founded_by': forms.CharField(widget=helper.widgets.ReadOnlyInput(), |
86 |
64 required=False), |
87 def clean_link_id(self): |
65 }, |
88 link_id = self.cleaned_data.get('link_id') |
66 ) |
89 if not validate.isLinkIdFormatValid(link_id): |
|
90 raise forms.ValidationError("This link ID is in wrong format.") |
|
91 return link_id |
|
92 |
67 |
93 |
68 |
94 class View(base.View): |
69 class View(base.View): |
95 """View methods for the Sponsor model. |
70 """View methods for the Sponsor model. |
96 """ |
71 """ |