csv: add parameters for id and text columns

This commit is contained in:
Frédéric Péters 2013-02-11 16:16:57 +01:00
parent 708f37c2ee
commit b3e1b35449
2 changed files with 15 additions and 2 deletions

View File

@ -14,6 +14,8 @@ class BaseDataSource(models.Model):
class CsvDataSource(BaseDataSource):
csv_file = models.FileField(upload_to='csv')
key_column = models.IntegerField()
value_columns = models.CommaSeparatedIntegerField(max_length=100)
def get_data(self):
data = []
@ -21,6 +23,17 @@ class CsvDataSource(BaseDataSource):
dialect = csv.Sniffer().sniff(self.csv_file.read(1024))
self.csv_file.seek(0)
reader = csv.reader(self.csv_file, dialect)
def get_value(row):
return (' '.join([unicode(row[int(x)-1], 'utf-8') for x in self.value_columns.split(',')]))
def get_key(row):
if self.key_column:
return unicode(row[self.key_column-1], 'utf-8')
else:
return get_value(row).lower().encode('ascii', 'ignore').replace(' ', '-')
for row in reader:
data.append(unicode(row[0], 'utf-8')) # 1st column only
data.append({'id': get_key(row), 'text': get_value(row)})
return data

View File

@ -8,6 +8,6 @@ def json(request, datasource):
q = request.GET.get('q')
if q:
q = q.lower()
return sorted([x for x in ds.get_data() if q in x.lower()])
return sorted([x for x in ds.get_data() if q in x['text'].lower()])
else:
return sorted(ds.get_data())