Commit 03e54597 authored by Mathieu Rodic's avatar Mathieu Rodic

[FEATURE] super-custom charts are now working on /graph-it

parent 0d3dedb9
...@@ -189,7 +189,7 @@ class CorpusController: ...@@ -189,7 +189,7 @@ class CorpusController:
WHERE parent_id = \'%d\' WHERE parent_id = \'%d\'
) AS keys ) AS keys
GROUP BY key GROUP BY key
ORDER BY count DESC ORDER BY count
''' % (Node._meta.db_table, Node._meta.db_table, corpus.id, )) ''' % (Node._meta.db_table, Node._meta.db_table, corpus.id, ))
# response building # response building
collection = [] collection = []
...@@ -267,13 +267,41 @@ class CorpusController: ...@@ -267,13 +267,41 @@ class CorpusController:
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"')
# query building: filters # query building: filters
for filter in request.GET.getlist('filters[]', ''): for filter in request.GET.getlist('filters[]', ''):
if '|' in filter: splitFilter = filter.split('.')
filter_array = filter.split("|") origin = splitFilter[0]
key = filter_array[0] # 127.0.0.1:8000/api/corpus/13410/data
values = filter_array[1].replace("'", "\\'").split(",") # ?mesured=ngrams.count
if key == 'ngram.terms': # &parameters[]=metadata.publication_date
conditions.append("%s.terms IN ('%s')" % (Ngram._meta.db_table, "', '".join(values), )) # &format=json
# &filters[]=ngrams.in.bee,bees
# &filters[]=metadata.language_fullname.eq.English
# &filters[]=metadata.publication_date.gt.1950-01-01
# &filters[]=metadata.publication_date.lt.2000-01-01
# &filters[]=metadata.title.contains.e
if origin == 'ngrams':
if splitFilter[1] == 'in':
ngrams = '.'.join(splitFilter[2:]).split(',')
map(str.strip, ngrams)
map(lambda ngram: ngram.replace("'", "''"), ngrams)
conditions.append(
"%s.terms IN ('%s')" % (Ngram._meta.db_table, "', '".join(ngrams), )
)
join_ngrams = True join_ngrams = True
elif origin == 'metadata':
key = splitFilter[1].replace("'", "''")
operator = splitFilter[2]
value = '.'.join(splitFilter[3:]).replace("'", "''")
condition = "%s.metadata->'%s' " % (Node._meta.db_table, key, )
if operator == 'contains':
condition += "LIKE '%%%s%%'" % (value, )
else:
condition += {
'eq': '=',
'lt': '<=',
'gt': '>=',
}[operator]
condition += " '%s'" % (value, )
conditions.append(condition)
else: else:
raise ValidationError('Unrecognized "filter[]=%s"' % (filter, )) raise ValidationError('Unrecognized "filter[]=%s"' % (filter, ))
# query building: initializing SQL # query building: initializing SQL
......
This diff is collapsed.
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