From 60f5a1c006463eb89e7d854d0d0c71fd5f3e7692 Mon Sep 17 00:00:00 2001 From: Serghei Mihai Date: Thu, 24 Sep 2015 13:25:23 +0200 Subject: [PATCH 1/3] csv: handle string filter criteria --- passerelle/apps/csvdatasource/models.py | 2 ++ tests/test_csv_datasource.py | 29 +++++++++++++++++++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/passerelle/apps/csvdatasource/models.py b/passerelle/apps/csvdatasource/models.py index e94fcfe..740e53a 100644 --- a/passerelle/apps/csvdatasource/models.py +++ b/passerelle/apps/csvdatasource/models.py @@ -44,6 +44,8 @@ class CsvDataSource(BaseResource): def filter_row(row, titles, filter_criteria): if 'text' in titles: col = titles.index('text') + if not isinstance(filter_criteria, unicode): + filter_criteria = unicode(filter_criteria, 'utf-8') if filter_criteria not in unicode(row[col], 'utf-8'): return False return True diff --git a/tests/test_csv_datasource.py b/tests/test_csv_datasource.py index 396fc31..fb6b8ed 100644 --- a/tests/test_csv_datasource.py +++ b/tests/test_csv_datasource.py @@ -1,3 +1,5 @@ +# -*- coding: utf-8 -*- + import pytest from StringIO import StringIO @@ -11,7 +13,7 @@ data = """121;69981;DELANOUE;Eliot;H 620;52156;ARNAUD;Mathis;H 902;36;BRIGAND;Coline;F 2179;48548;THEBAULT;Salima;F -3420;46;WILSON-LUZAYADIO;Anaelle;F +3420;46;WILSON-LUZAYADIO;Anaëlle;F 1421;55486;WONE;Fadouma;F 2841;51;FIDJI;Zakia;F 2431;59;BELICARD;Sacha;H @@ -21,8 +23,8 @@ data = """121;69981;DELANOUE;Eliot;H 4135;22231;SAVERIAS;Marius;H 4809;75;COROLLER;Maelys;F 5427;117;KANTE;Aliou;H -7017;118;ANGELOTTI;Esther;F 116642;118;ZAHMOUM;Yaniss;H +216352;38;Dupont;Benoît;H """ from csvdatasource.models import CsvDataSource @@ -80,3 +82,26 @@ def test_data(): result = csv.get_data('Sacha') assert result[0] == {'id': '59', 'text': 'Sacha', 'fam': '2431', 'sexe': 'H'} + +def test_unicode_filter_data(): + csv = CsvDataSource.objects.create(csv_file=File(StringIO(data), 'data.csv'), + columns_keynames=',id,,text,') + filter_criteria = u'noît' + result = csv.get_data(filter_criteria) + assert len(result) + for item in result: + assert 'id' in item + assert 'text' in item + assert filter_criteria in item['text'].decode('utf-8') + + +def test_str_filter_data(): + csv = CsvDataSource.objects.create(csv_file=File(StringIO(data), 'data.csv'), + columns_keynames=',id,,text,') + filter_criteria = 'aëlle' + result = csv.get_data(filter_criteria) + assert len(result) + for item in result: + assert 'id' in item + assert 'text' in item + assert filter_criteria in item['text'] -- 2.5.3