app/soc/views/models/sponsor.py
changeset 603 8ce6268a37bc
parent 583 12960609a69c
child 605 4a384d412640
equal deleted inserted replaced
602:1caee6675fa7 603:8ce6268a37bc
    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   """