Commit c12d928c authored by Mathieu Rodic's avatar Mathieu Rodic

[FEATURE] Added CSV format support to the API

parent f422c7cd
...@@ -44,6 +44,22 @@ def JsonHttpResponse(data, status=200): ...@@ -44,6 +44,22 @@ def JsonHttpResponse(data, status=200):
Http400 = SuspiciousOperation Http400 = SuspiciousOperation
Http403 = PermissionDenied Http403 = PermissionDenied
import csv
def CsvHttpResponse(data, headers=None, status=200):
response = HttpResponse(
content_type = "text/csv",
status = status
)
writer = csv.writer(response)
if headers:
writer.writerow(headers)
for row in data:
writer.writerow(row)
return response
Http400 = SuspiciousOperation
Http403 = PermissionDenied
_ngrams_order_columns = { _ngrams_order_columns = {
"frequency" : "-count", "frequency" : "-count",
"alphabetical" : "terms" "alphabetical" : "terms"
...@@ -161,7 +177,6 @@ class CorpusController: ...@@ -161,7 +177,6 @@ class CorpusController:
columns.append("COUNT(%s.id) AS c%d " % (Node._meta.db_table, c, )) columns.append("COUNT(%s.id) AS c%d " % (Node._meta.db_table, c, ))
elif mesured == "ngrams.count": elif mesured == "ngrams.count":
columns.append("COUNT(%s.id) AS c%d " % (Ngram._meta.db_table, c, )) columns.append("COUNT(%s.id) AS c%d " % (Ngram._meta.db_table, c, ))
# return HttpResponse(query)
join_ngrams = True join_ngrams = True
else: else:
raise ValidationError('The "mesured" parameter should take one of the following values: "documents.count", "ngrams.count"') raise ValidationError('The "mesured" parameter should take one of the following values: "documents.count", "ngrams.count"')
...@@ -177,15 +192,19 @@ class CorpusController: ...@@ -177,15 +192,19 @@ class CorpusController:
else: else:
raise ValidationError('Unrecognized "filter[]=%s"' % (filter, )) raise ValidationError('Unrecognized "filter[]=%s"' % (filter, ))
# query building: initializing SQL # query building: initializing SQL
sql_0 = _sql_cte sql_0 = ''
sql_1 = '\nSELECT ' sql_1 = '\nSELECT '
sql_2 = '\nFROM %s\nINNER JOIN cte ON cte."id" = %s.id' % (Node._meta.db_table, Node._meta.db_table, ) sql_2 = '\nFROM %s' % (Node._meta.db_table, )
sql_3 = '\nWHERE ((NOT cte.id = \'%d\') AND (\'%d\' = ANY(cte."path")))' % (corpus.id, corpus.id, ) sql_3 = '\nWHERE (%s.parent_id = %d)' % (Node._meta.db_table, corpus.id, )
# sql_0 = _sql_cte
# sql_1 = '\nSELECT '
# sql_2 = '\nFROM %s\nINNER JOIN cte ON cte."id" = %s.id' % (Node._meta.db_table, Node._meta.db_table, )
# sql_3 = '\nWHERE ((NOT cte.id = \'%d\') AND (\'%d\' = ANY(cte."path")))' % (corpus.id, corpus.id, )
# query building: assembling SQL # query building: assembling SQL
sql_1 += ", ".join(columns) sql_1 += ", ".join(columns)
sql_2 += "\nINNER JOIN %s ON %s.id = %s.type_id" % (NodeType._meta.db_table, NodeType._meta.db_table, Node._meta.db_table, ) sql_2 += "\nINNER JOIN %s ON %s.id = %s.type_id" % (NodeType._meta.db_table, NodeType._meta.db_table, Node._meta.db_table, )
if join_ngrams: if join_ngrams:
sql_2 += "\nINNER JOIN %s ON %s.node_id = cte.id" % (Node_Ngram._meta.db_table, Node_Ngram._meta.db_table, ) sql_2 += "\nINNER JOIN %s ON %s.node_id = %s.id" % (Node_Ngram._meta.db_table, Node_Ngram._meta.db_table, Node._meta.db_table, )
sql_2 += "\nINNER JOIN %s ON %s.id = %s.ngram_id" % (Ngram._meta.db_table, Ngram._meta.db_table, Node_Ngram._meta.db_table, ) sql_2 += "\nINNER JOIN %s ON %s.id = %s.ngram_id" % (Ngram._meta.db_table, Ngram._meta.db_table, Node_Ngram._meta.db_table, )
sql_3 += "\nAND %s.name = 'Document'" % (NodeType._meta.db_table, ) sql_3 += "\nAND %s.name = 'Document'" % (NodeType._meta.db_table, )
if conditions: if conditions:
...@@ -200,7 +219,13 @@ class CorpusController: ...@@ -200,7 +219,13 @@ class CorpusController:
cursor = connection.cursor() cursor = connection.cursor()
cursor.execute(sql) cursor.execute(sql)
# response building # response building
return JsonHttpResponse({ format = request.GET.get('format', 'json')
"list": [row for row in cursor.fetchall()], if format == 'json':
}) return JsonHttpResponse({
"list": [row for row in cursor.fetchall()],
})
elif format == 'csv':
return CsvHttpResponse(row for row in cursor.fetchall())
else:
raise ValidationError('Unrecognized "format=%s", should be "csv" or "json"' % (format, ))
/home/alexandre/local/logiciels/Treetagger/pythonwrapperP3/treetagger /home/mat/projects/gargantext/old/gargantext-stable-2/shared/treetagger
\ No newline at end of file \ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment