Example #1
0
def build_tutorial_form(tutorial = None, disabled = False):
    base_fields = {'name' : forms.CharField(max_length = 75,  
                                            min_length = 3,  
                                            required = True,  
                                            label = 'Tutorial Name', 
                                            widget = form_widgets.BigCharfield(attrs={'class':'required',  'minlength':'3'}),
                                            help_text = 'Must be <= 75 characters.'),
                                            
                    'description' : form_fields.WMDField(max_length = 2000,  
                                                        min_length = 15, 
                                                        widget = form_widgets.WMDTextarea(attrs={'class':'required',  'minlength':'3', 'rows':15}, preview_id='tutorial_form_wmd_preview'), 
                                                        required = True, 
                                                        label = 'Description', 
                                                        help_text = 'Description of this tutorial.  Markdown enabled.'),
                                
                    'url' : forms.CharField(max_length = 70,  
                                            min_length = 6,  
                                            required = True,  
                                            label = 'URL', 
                                            widget = form_widgets.BigCharfield(attrs={'class':'required',  'minlength':'6'}),
                                            help_text = 'Location of this tutorial.'),
                    
                    'tags': forms.CharField(max_length = 200, 
                                required = True, 
                                widget = form_widgets.StandardCharfield(attrs={'class':'required code_form'}), 
                                help_text = 'Combine multiple words into single-words. Seperate tags using commas. Maximum five tags. At least one tag required.')
                }
    
    if tutorial:
        del base_fields['tags']
        base_fields['name'].initial = tutorial.name
        base_fields['description'].initial = tutorial.description
        base_fields['url'].initial = tutorial.url
    
    def clean_name(self):
        name = self.data['name']
        if not models.Tutorial.objects.can_add(self.user):
            raise forms.ValidationError("You can only submit a max of 5 django tutorials a day.  Please wait to submit more.")
        if models.Tutorial.objects.filter(name__iexact = name):
            raise forms.ValidationError("There is already a tutorial with that name.")
        return name
    
    TutorialForm = type('TutorialForm',  (DivForm, ),  base_fields)
    TutorialForm.clean_name = clean_name
    if disabled:
        disable_form(TutorialForm)
    return TutorialForm
Example #2
0
def build_question_form(question = None, disabled = False):
    base_fields = {'title':  forms.CharField(max_length = 200,  min_length = 3,  required = True,  label = 'Title',  
                             widget = form_widgets.StandardCharfield(attrs={'class':'required question_form',  'minlength':'3'})) , 
                    'question': form_fields.WMDField(max_length = 5000,  
                                min_length = 5, 
                                widget = form_widgets.WMDTextarea(attrs={'class':'required',  'minlength':'10'}, preview_id='question_form_wmd_preview'), 
                                required = True, 
                                label = '', 
                                help_text = 'What is this question?. Be descriptive. Required.'),
                    'tags': forms.CharField(max_length = 200, 
                                min_length = 3, 
                                required = True, 
                                widget = form_widgets.StandardCharfield(attrs={'class':'required question_form',  'minlength':'3'}), 
                                help_text = 'Combine multiple words into single-words. Seperate tags using commas. Maximum five tags. At least one tag required.')
                    }
    
    if question:
        del base_fields['tags']
        base_fields['title'].initial = question.name
        base_fields['question'].initial = question.question
    
    def clean_title(self):
        title = self.data['title']
        if not models.Question.objects.can_add(self.user):
            raise forms.ValidationError("You can only ask a max of 5 questions per day.  Please wait to ask more.")
        if not question and models.Question.objects.filter(name__iexact = title):
            raise forms.ValidationError("There is already a question with that title.")
        if question:
            try:
                existing_question = models.Question.objects.get(name__iexact = title)
                if not existing_question.id == question.id:
                    raise forms.ValidationError("There is already a question with that title.")
            except ObjectDoesNotExist:
                pass
        return title
    
    QuestionForm = type('QuestionForm',  (DivForm, ),  base_fields)
    QuestionForm.clean_title = clean_title
    if disabled:
        disable_form(QuestionForm)
    return QuestionForm
Example #3
0
def build_answer_form(answer = None, disabled = False):
    base_fields = {'answer': form_fields.WMDField(max_length = 2000,  
                                min_length = 5,  
                                widget = form_widgets.WMDTextarea(attrs={'class':'required',  'minlength':'10'}, preview_id='answer_form_wmd_preview'), 
                                required = True, 
                                label = '', 
                                help_text = 'Markdown enabled.')
                           }
    if answer:
        base_fields['answer'].initial = answer.answer
        base_fields['answer'].label = 'Answer'
    
    def clean_answer(self):
        answer = self.cleaned_data['answer']
        if not settings.MULTIPLE_ANSWERS_PER_USER and models.Answer.objects.filter(question = self.question, user = self.user):
            raise forms.ValidationError("You can ony submit one answer per question.  Please edit the answer you posted previously.")
        return answer
    
    AnswerForm = type('AnswerForm',  (DivForm, ),  base_fields)
    if disabled:
        disable_form(AnswerForm)
    return AnswerForm
Example #4
0
def build_code_form(code = None, disabled = False):
    base_fields = {'title': forms.CharField(max_length = 70,  
                                            min_length = 3,  
                                            required = True,  
                                            label = 'Code Name',  
                                            widget = form_widgets.BigCharfield(attrs={'class':'required code_form',  'minlength':'3'}),
                                            help_text = 'Must be <= 75 characters.'),
                                            
                    'mode': forms.ChoiceField(choices = models.CodeMode.MODES, 
                                              help_text = 'What kind of code snippet is this?'),
                                              
                    'description': form_fields.WMDField(max_length = 2000,  
                                                        min_length = 15, 
                                                        widget = form_widgets.WMDTextarea(attrs={'class':'required',  'minlength':'3'}, preview_id='code_form_wmd_preview'), 
                                                        required = True, 
                                                        help_text = 'Give a detailed description of this code snippet.  Markdown enabled.'),
                    
                    'code': forms.CharField(max_length = 5000,  
                                            min_length = 25, 
                                            widget = form_widgets.GiantTextarea(attrs={'class':'required code_form',  'minlength':'5'}), 
                                            required = True, 
                                            label = 'Code', 
                                            help_text = 'The actual code.'),
                                            
                    'tags': forms.CharField(max_length = 200, 
                                required = True, 
                                widget = form_widgets.StandardCharfield(attrs={'class':'required code_form'}), 
                                help_text = 'Combine multiple words into single-words. Seperate tags using commas. Maximum five tags. At least one tag required.')
                    }
    
    if code:
        del base_fields['tags']
        base_fields['title'].initial = code.name
        base_fields['mode'].initial = code.mode.name
        base_fields['description'].initial = code.description
        base_fields['code'].initial = code.code
        
    def clean_title(self):
        title = self.data['title']
        mode = self.data['mode']
        
        try:
            code_mode = models.CodeMode.objects.get(name = mode)
        except ObjectDoesNotExist:
            code_mode = None
                
        if models.Code.objects.filter(name__iexact = title, mode = code_mode):
            raise forms.ValidationError("A code snippet with that title already exists.")
        if not models.Code.objects.can_add(self.user):
            raise forms.ValidationError("You can only submit a max of 5 code snippets a day.  Please wait to submit more.")
        return title
    
    def clean_code(self):
        code = self.cleaned_data['code']
        return code
    
    CodeForm = type('CodeForm',  (DivForm, ),  base_fields)
    CodeForm.clean_title = clean_title
    if disabled:
        disable_form(CodeForm)
    return CodeForm
Example #5
0
def build_app_form(app = None, disabled = False):
    dependencies_content_type_object = ContentType.objects.get_for_model(models.App)
    dependencies_object_id = -1 # default id to denote new object
    dependencies_usage = 'dependency'
    
    base_fields = {'name' : forms.CharField(max_length = 75,  
                                            min_length = 3,  
                                            required = True,  
                                            label = 'App Name',  
                                            widget = form_widgets.BigCharfield(attrs={'class':'required'}),
                                            help_text = 'Must be <= 75 characters.'),
                                            
                    'version' : forms.CharField(max_length = 75,  
                                                min_length = 3,  
                                                required = True,  
                                                label = 'Version',  
                                                widget = form_widgets.BigCharfield(attrs={'class':'required'}),
                                                help_text = 'Version number.  Must be unique when combined with app name.'),
                                                
                    'url' : forms.URLField(max_length = 50,  
                                            min_length = 3,  
                                            required = True,  
                                            label = 'Homepage',  
                                            widget = form_widgets.BigCharfield(attrs={'class':'required'}),
                                            help_text = 'Required.  Homepage of this app.'),
                                            
                    'sources' : forms.CharField(max_length = 100,  
                                                min_length = 3,  
                                                required = True,  
                                                label = 'Sources',  
                                                widget = form_widgets.BigCharfield(),
                                                help_text = 'Location(s) where the source code can be downloaded from.  Comma separated.'),
                    
                    'description' : form_fields.WMDField(max_length = 2000,  
                                                        min_length = 15, 
                                                        widget = form_widgets.WMDTextarea(attrs={'class':'required',  'minlength':'10'}, preview_id='app_form_wmd_preview'), 
                                                        required = True, 
                                                        label = 'Description', 
                                                        help_text = 'Give a detailed description of this app.  Markdown enabled.'),
                    
                    'python' : forms.MultipleChoiceField(choices = Python.objects.versions(),
                                                         widget = forms.widgets.CheckboxSelectMultiple(),
                                                         label = 'Python Dependency',
                                                         help_text = 'Which versions of Python is this app compatible with?  Minimum one required.'),
                    
                    'django' : forms.MultipleChoiceField(widget = forms.widgets.CheckboxSelectMultiple(),
                                                         label = 'Django Dependency',
                                                         choices = Django.objects.versions(),
                                                         help_text = 'Which versions of Django is this app compatible with?  Minimum one required.'),
                    
                    'dependencies' : RelatedContentField(base_content_type = dependencies_content_type_object.id,
                                                         object_id = dependencies_object_id,
                                                         usage = dependencies_usage,
                                                         iframe_width = 800,
                                                         required = False,
                                                         iframe_height = 600,
                                                         help_text = 'Other apps on which this apps depends to function.'),
                    
                    'tags' : forms.CharField(max_length = 200, 
                                             required = True, 
                                             widget = form_widgets.StandardCharfield(attrs={'class':'required code_form'}), 
                                             help_text = 'Combine multiple words into single-words. Seperate tags using commas. Maximum five tags. At least one tag required.')
                }
    
    if app:
        del base_fields['dependencies']
        del base_fields['tags']
        base_fields['name'].initial = app.name
        base_fields['version'].initial = app.version
        base_fields['url'].initial = app.url
        base_fields['sources'].initial = ",".join(models.App.objects.sources(app))
        base_fields['description'].initial = app.description
        base_fields['python'].initial = models.App.objects.python_versions(app)
        base_fields['django'].initial = models.App.objects.django_versions(app)
    
    def clean_name(self):
        name = self.data['name']
        if not models.App.objects.can_add(self.user):
            raise forms.ValidationError("You can only submit a max of 5 django apps a day.  Please wait to submit more.")
        if models.App.objects.filter(name__iexact = name):
            raise forms.ValidationError("There is already an app with that name.")
        return name
    
    AppForm = type('AppForm', (DivForm, ), base_fields)
    AppForm.clean_name = clean_name
    if disabled:
        disable_form(AppForm)
    return AppForm