Exemple #1
0
 def test_is_field(self):
     # CharField
     form = forms.Form()
     raw_field = forms.CharField(label='test')
     field = forms.BoundField(form, raw_field, 'test_field')
     self.assertEqual(toolkit.is_field(field, None), 'charfield')
     self.assertTrue(toolkit.is_field(field, 'charfield'))
     # CharField with TextArea widget (...which of course doesn't change the result here)
     raw_field = forms.CharField(label='test', widget=forms.Textarea)
     field = forms.BoundField(form, raw_field, 'test_field')
     self.assertEqual(toolkit.is_field(field, None), 'charfield')
     self.assertTrue(toolkit.is_field(field, 'charfield'))
     # ChoiceField with Select widget
     raw_field = forms.ChoiceField(label='test',
                                   choices=((0, 'A'), (1, 'B'), (2, 'C')))
     field = forms.BoundField(form, raw_field, 'test_field')
     self.assertEqual(toolkit.is_field(field, None), 'choicefield')
     self.assertTrue(toolkit.is_field(field, 'choicefield'))
     # EmailField
     raw_field = forms.EmailField(label='test')
     field = forms.BoundField(form, raw_field, 'test_field')
     self.assertEqual(toolkit.is_field(field, None), 'emailfield')
     self.assertTrue(toolkit.is_field(field, 'emailfield'))
     # BooleanField with CheckboxInput widget
     raw_field = forms.BooleanField(label='test')
     field = forms.BoundField(form, raw_field, 'test_field')
     self.assertEqual(toolkit.is_field(field, None), 'booleanfield')
     self.assertTrue(toolkit.is_field(field, 'booleanfield'))
Exemple #2
0
 def test_is_widget(self):
     # CharField
     form = forms.Form()
     raw_field = forms.CharField(label='test')
     field = forms.BoundField(form, raw_field, 'test_field')
     self.assertEqual(toolkit.is_widget(field, None), 'textinput')
     self.assertTrue(toolkit.is_widget(field, 'textinput'))
     # CharField with TextArea widget
     raw_field = forms.CharField(label='test', widget=forms.Textarea)
     field = forms.BoundField(form, raw_field, 'test_field')
     self.assertEqual(toolkit.is_widget(field, None), 'textarea')
     self.assertTrue(toolkit.is_widget(field, 'textarea'))
     # ChoiceField with Select widget
     raw_field = forms.ChoiceField(label='test',
                                   choices=((0, 'A'), (1, 'B'), (2, 'C')))
     field = forms.BoundField(form, raw_field, 'test_field')
     self.assertEqual(toolkit.is_widget(field, None), 'select')
     self.assertTrue(toolkit.is_widget(field, 'select'))
     # EmailField
     raw_field = forms.EmailField(label='test')
     field = forms.BoundField(form, raw_field, 'test_field')
     self.assertEqual(toolkit.is_widget(field, None), 'emailinput')
     self.assertTrue(toolkit.is_widget(field, 'emailinput'))
     # BooleanField with CheckboxInput widget
     raw_field = forms.BooleanField(label='test')
     field = forms.BoundField(form, raw_field, 'test_field')
     self.assertEqual(toolkit.is_widget(field, None), 'checkboxinput')
     self.assertTrue(toolkit.is_widget(field, 'checkboxinput'))
Exemple #3
0
def render_fields_group(form, pattern):
    """Render a group of fields."""
    first = forms.BoundField(form, form.fields[pattern], pattern)
    configure_field_classes(first)
    label = first.label
    group = [first]
    cpt = 1
    haserror = len(first.errors) != 0
    while True:
        fname = "%s_%d" % (pattern, cpt)
        if fname not in form.fields:
            break
        bfield = forms.BoundField(form, form.fields[fname], fname)
        if len(bfield.errors):
            haserror = True
        configure_field_classes(bfield)
        group += [bfield]
        cpt += 1

    return render_to_string(
        "common/generic_fields_group.html", {
            "label": label,
            "help_text": first.help_text,
            "group": group,
            "haserror": haserror,
            "pattern": pattern
        })
 def test_field_value_file_field(self):
     form = MockForm(
         data=self.data,
         files={'file': SimpleUploadedFile('test.txt', b'some content')})
     field = form.fields.get('file')
     bf = forms.BoundField(form, field, 'file')
     value = filters.field_value(bf)
     assert value.name == 'test.txt'
Exemple #5
0
 def as_hidden(self):
     """
     Returns this form rendered entirely as hidden fields.
     """
     output = []
     for name, field in self.fields.items():
         bf = forms.BoundField(self, field, name)
         output.append(bf.as_hidden())
     return u'\n'.join(output)
Exemple #6
0
 def test_field_css(self):
     # CharField
     form = forms.Form()
     raw_field = forms.CharField(label='test')
     field = forms.BoundField(form, raw_field, 'test_field')
     self.assertEqual(
         toolkit.field_css(field, 'test-css'),
         '<input type="text" name="test_field" class="test-css" placeholder="test" required id="id_test_field">'
     )
     # CharField with TextArea widget
     raw_field = forms.CharField(label='test', widget=forms.Textarea)
     field = forms.BoundField(form, raw_field, 'test_field')
     self.assertEqual(
         toolkit.field_css(field, 'test-css'),
         '<textarea name="test_field" cols="40" rows="10" class="test-css" required id="id_test_field">\n</textarea>'
     )
     # ChoiceField with Select widget
     raw_field = forms.ChoiceField(label='test',
                                   choices=((0, 'A'), (1, 'B'), (2, 'C')))
     field = forms.BoundField(form, raw_field, 'test_field')
     self.assertEqual(
         toolkit.field_css(field, 'test-css'),
         '<select name="test_field" class="test-css" id="id_test_field">\n  <option value="0">A</option>\n\n  <option value="1">B</option>\n\n  <option value="2">C</option>\n\n</select>'
     )
     # EmailField
     raw_field = forms.EmailField(label='test')
     field = forms.BoundField(form, raw_field, 'test_field')
     self.assertEqual(
         toolkit.field_css(field, 'test-css'),
         '<input type="email" name="test_field" class="test-css" placeholder="test" required id="id_test_field">'
     )
     # BooleanField with CheckboxInput widget
     raw_field = forms.BooleanField(label='test')
     field = forms.BoundField(form, raw_field, 'test_field')
     self.assertEqual(
         toolkit.field_css(field, 'test-css'),
         '<input type="checkbox" name="test_field" class="test-css" required id="id_test_field">'
     )
Exemple #7
0
 def _gather_fieldsets(self):
     if not self.fieldsets:
         self.fieldsets = (('main', {
             'fields': self.form.fields.keys(),
             'legend': ''
         }), )
     for name, options in self.fieldsets:
         try:
             field_names = [
                 n for n in options['fields'] if n in self.form.fields
             ]
         except KeyError:
             message = "Fieldset definition must include 'fields' option."
             raise ValueError(message)
         boundfields = [
             forms.BoundField(self.form, self.form.fields[n], n)
             for n in field_names
         ]
         self._cached_fieldsets.append(
             Fieldset(self.form, name, boundfields,
                      options.get('legend', None),
                      ' '.join(options.get('classes', ())),
                      options.get('description', '')))
Exemple #8
0
 def submission_fields(self):
     return [
         forms.BoundField(self, field, name)
         for name, field in self.fields.items()
         if field.question.target == 'submission'
     ]
Exemple #9
0
 def speaker_fields(self):
     return [
         forms.BoundField(self, field, name)
         for name, field in self.fields.items()
         if field.question.target == 'speaker'
     ]
Exemple #10
0
 def export_fields(self):
     result = [
         forms.BoundField(self, self.fields[field], field)
         for field in self.export_field_names + self.question_field_names
     ]
     return result
 def test_set_parsley_sanitize(self):
     form = MockForm(data={'name', 'Test'})
     field = form.fields.get('name')
     bf = forms.BoundField(form, field, 'name')
     filters.set_parsley_sanitize(bf)
     assert bf.field.widget.attrs == {'data-parsley-sanitize': '1'}
 def test_set_parsley_required(self):
     form = MockForm(data={'name', 'Test'})
     field = form.fields.get('type')
     bf = forms.BoundField(form, field, 'type')
     filters.set_parsley_required(bf)
     assert bf.field.widget.attrs == {'data-parsley-required': 'true'}
 def test_field_value_as_callable(self):
     form = MockForm()
     field = form.fields.get('date')
     bf = forms.BoundField(form, field, 'date')
     value = filters.field_value(bf)
     assert isinstance(value, datetime.datetime)
 def test_blank_file_field(self):
     form = MockForm(data=self.data)
     field = form.fields.get('file')
     bf = forms.BoundField(form, field, 'file')
     value = filters.field_value(bf)
     assert value == ''
 def test_display_choice_verbose(self):
     form = MockForm(data=self.data)
     field = form.fields.get('type')
     bf = forms.BoundField(form, field, 'type')
     value = filters.display_choice_verbose(bf)
     assert value == 'Group'
Exemple #16
0
    def render_field(self, field):
        """ Render a named field to HTML. """
        try:
            field_instance = self.fields[field]
        except KeyError:
            raise NoSuchFormField("Could not resolve form field '%s'." % field)

        bf = forms.BoundField(self, field_instance, field)

        output = ''

        if bf.errors:
            # If the field contains errors, render the errors to a <ul>
            # using the error_list helper function.
            # bf_errors = error_list([escape(error) for error in bf.errors])
            bf_errors = ', '.join([e for e in bf.errors])
        else:
            bf_errors = ''

        if bf.is_hidden:
            # If the field is hidden, add it at the top of the form
            self.prefix_fields.append(str(bf))

            # If the hidden field has errors, append them to the top_errors
            # list which will be printed out at the top of form
            if bf_errors:
                self.top_errors.extend(bf.errors)

        else:

            # Find field + widget type css classes
            css_class = type(field_instance).__name__ + " " + type(
                field_instance.widget).__name__

            # Add an extra class, Required, if applicable
            if field_instance.required:
                css_class += " required"

            if field_instance.help_text:
                # The field has a help_text, construct <span> tag
                help_text = '<span class="help-%s">%s</span>' % (
                    self.help_style, force_str(field_instance.help_text))
            else:
                help_text = ''

            auto_id = bf.auto_id

            field_hash = {
                'class': mark_safe(css_class),
                'label': mark_safe(bf.label or ''),
                'help_text': mark_safe(help_text),
                'field': field_instance,
                'bf': mark_safe(force_str(bf)),
                'bf_raw': bf,
                'errors': mark_safe(bf_errors),
                'field_type': mark_safe(field.__class__.__name__),
                'label_id': auto_id
            }

            if field in self.custom_fields:
                template = get_template(self.custom_fields[field])
            else:
                template = select_template([
                    os.path.join(
                        self.template_base, 'field_%s.html' %
                        type(field_instance.widget).__name__.lower()),
                    os.path.join(self.template_base, 'field_default.html'),
                ])

            # Finally render the field
            output = template.render(field_hash)

        return mark_safe(output)