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))
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))
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))
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
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()
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)
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)
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'))
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, ' '), ' ')
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, ' '))
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
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)