Ejemplo n.º 1
0
    def test_integer_field_parse(self):
        field = forms.IntegerField()

        self.assertEqual(format_data(field, 1), 1)
        self.assertEqual(format_data(field, '1'), 1)
        self.assertEqual(format_data(field, '0'), 0)
        self.assertRaises(ValidationError, lambda: format_data(field, 1.1))
Ejemplo n.º 2
0
 def test_datetime_field_parse(self):
     field = forms.DateTimeField()
     self.assertEqual(format_data(field, '06/26/1997'),
                      datetime(1997, 6, 26))
     self.assertEqual(format_data(field, '06/26/1997 3:0:0'),
                      datetime(1997, 6, 26, 3, 0, 0))
     self.assertRaises(ValidationError, lambda: format_data(field, ''))
     self.assertRaises(AttributeError, lambda: format_data(field, 1))
Ejemplo n.º 3
0
    def test_model_choice_field_parse(self):
        qs = MockSet(MockModel(pk=0), MockModel(pk=1), MockModel(pk=2))
        field = forms.ModelChoiceField(queryset=qs)

        self.assertEqual(format_data(field, 0), 0)
        self.assertEqual(format_data(field, 1), 1)
        self.assertEqual(format_data(field, 2), 2)
        self.assertRaises(AttributeError, lambda: format_data(field, 4))
Ejemplo n.º 4
0
    def advanced_search_query(self, request, query, param_values):
        """
            Get form and mount filter query if form is not none
        """
        form = self.advanced_search_form()
        if form is None:
            return query

        for field, form_field in self.advanced_search_form().fields.items():
            field_value = param_values[field][
                0] if field in param_values else None

            # to overide default filter for a sigle field
            if hasattr(self, ('search_' + field)):
                query &= getattr(self, 'search_' + field)(field, field_value,
                                                          form_field, request,
                                                          param_values)
                continue

            if field_value in [None, '']:
                continue

            field_name = form_field.widget.attrs.get('filter_field', field)
            field_filter = field_name + form_field.widget.attrs.get(
                'filter_method', '')

            try:
                field_value = u.format_data(
                    form_field, field_value)  # format by field type
                query &= Q(**{field_filter: field_value})
            except:
                continue

        return query
Ejemplo n.º 5
0
    def get_field_value_default(field, form_field, field_value,
                                has_field_value, request):
        """
            mount default field value
        """
        if has_field_value:
            field_name = form_field.widget.attrs.get('filter_field', field)
            field_filter = field_name + form_field.widget.attrs.get(
                'filter_method', '')

            try:
                field_value = utils.format_data(
                    form_field, field_value)  # format by field type
                return Q(**{field_filter: field_value})
            except ValidationError:
                messages.add_message(
                    request, messages.ERROR,
                    _(f"Filter in field `{field_name}` "
                      "ignored, because value "
                      f"`{field_value}` isn't valid"))
            except Exception:
                messages.add_message(
                    request, messages.ERROR,
                    _(f"Filter in field `{field_name}` "
                      "ignored, error has occurred."))

        return Q()
Ejemplo n.º 6
0
    def test_decimal_field_parse(self):
        field = forms.DecimalField()

        self.assertEqual(format_data(field, 1), 1.0)
        self.assertEqual(isinstance(format_data(field, 1), Decimal), True)

        self.assertEqual(format_data(field, '1'), 1.0)
        self.assertEqual(isinstance(format_data(field, '1'), Decimal), True)

        self.assertEqual(format_data(field, 0), 0.0)
        self.assertEqual(isinstance(format_data(field, 0), Decimal), True)

        self.assertEqual(format_data(field, '0'), 0.0)
        self.assertEqual(isinstance(format_data(field, '0'), Decimal), True)
Ejemplo n.º 7
0
 def test_boolean_field_parse(self):
     field = forms.BooleanField()
     self.assertEqual(format_data(field, True), True)
     self.assertEqual(format_data(field, 1), True)
     self.assertEqual(format_data(field, '1'), True)
     self.assertEqual(format_data(field, False), False)
     self.assertEqual(format_data(field, 0), False)
     self.assertEqual(format_data(field, ''), False)
Ejemplo n.º 8
0
 def test_choice_field_parse(self):
     field = forms.ChoiceField(choices=[(True, 'True'), (False, 'False')])
     self.assertEqual(format_data(field, True), True)
     self.assertEqual(format_data(field, False), False)
     self.assertRaises(ValidationError, lambda: format_data(field, 'TRUE'))
     self.assertRaises(ValidationError, lambda: format_data(field, 'FALSE'))
     self.assertRaises(ValidationError, lambda: format_data(field, 'true'))
     self.assertRaises(ValidationError, lambda: format_data(field, 'false'))
Ejemplo n.º 9
0
 def test_text_field_parse(self):
     field = forms.TextInput()
     self.assertEqual(format_data(field, '1'), '1')
     self.assertEqual(format_data(field, 1), '1')
     self.assertEqual(format_data(field, False), 'False')
     self.assertEqual(format_data(field, 0), '0')
     self.assertEqual(format_data(field, '%20F'), '%20F')
     self.assertEqual(format_data(field, ' '), ' ')
Ejemplo n.º 10
0
 def test_char_field_parse(self):
     field = forms.CharField()
     self.assertEqual(format_data(field, '1'), '1')
     self.assertEqual(format_data(field, 1), '1')
     self.assertEqual(format_data(field, False), 'False')
     self.assertEqual(format_data(field, 0), '0')
     self.assertEqual(format_data(field, '%20F'), '%20F')
     self.assertRaises(ValidationError, lambda: format_data(field, ' '))
Ejemplo n.º 11
0
    def advanced_search_query(self, request):
        """
            Get form and mount filter query if form is not none
        """
        query = Q()
        param_values = self.advanced_search_fields

        form = self.search_form_data
        if not param_values or form is None:
            return query

        for field, form_field in self.search_form_data.fields.items():
            field_value = param_values[field][
                0] if field in param_values else None

            # to overide default filter for a sigle field
            if hasattr(self, ('search_' + field)):
                query &= getattr(self, 'search_' + field)(field, field_value,
                                                          form_field, request,
                                                          param_values)
                continue

            if field_value in [None, '']:
                continue

            field_name = form_field.widget.attrs.get('filter_field', field)
            field_filter = field_name + form_field.widget.attrs.get(
                'filter_method', '')

            try:
                field_value = utils.format_data(
                    form_field, field_value)  # format by field type
                query &= Q(**{field_filter: field_value})
            except ValidationError:
                messages.add_message(
                    request, messages.ERROR,
                    _(f"Filter in field `{field_value}` "
                      "ignored, because value "
                      "`{field_name}` isn't valid"))
                continue
            except Exception:
                messages.add_message(
                    request, messages.ERROR,
                    _(f"Filter in field `{field_name}` "
                      "ignored, error has occurred."))
                continue

        return query
Ejemplo n.º 12
0
 def test_float_field_parse(self):
     field = forms.FloatField()
     self.assertEqual(format_data(field, 1), 1.0)
     self.assertEqual(format_data(field, '1'), 1.0)
     self.assertEqual(format_data(field, 0), 0.0)
     self.assertEqual(format_data(field, '0'), 0.0)