Commit 7aadc2db authored by Mathieu Rodic's avatar Mathieu Rodic

[FEATURE] Added a RESTful URL : /api/corpus/95/ngrams/metadata

parent 17c17579
from django.http import HttpResponseNotFound, HttpResponse, HttpResponseBadRequest
from django.http import HttpResponseNotFound, HttpResponse, Http404
from django.core.exceptions import PermissionDenied, SuspiciousOperation
from django.core.exceptions import ValidationError
from django.db.models import Avg, Max, Min, Count
from node.models import NodeType, Node, Ngram
from django.db import connection
# from node.models import Language, ResourceType, Resource
# from node.models import Node, NodeType, Node_Resource, Project, Corpus
# from node.admin import CorpusForm, ProjectForm, ResourceForm
......@@ -14,23 +18,26 @@ def JsonHttpResponse(data, status=200):
content_type = "application/json",
status = status
)
Http400 = SuspiciousOperation
Http403 = PermissionDenied
_ngrams_order_columns = {
"frequency" : "-count",
"alphabetical" : "terms"
}
def ngrams(request, corpus_id):
def corpus_ngrams(request, corpus_id):
# parameters retrieval and control
corpusQuery = Node.objects.filter(id = corpus_id)
if not corpusQuery:
return HttpResponseNotFound("No such corpus.")
raise Http404("No such corpus.")
corpus = corpusQuery.first()
if corpus.type.name != 'Corpus':
return HttpResponseNotFound("No such corpus.")
raise Http404("No such corpus.")
order = request.GET.get('order', 'frequency')
if order not in _ngrams_order_columns:
return HttpResponseBadRequest('The order parameter should take one of the following values: ' + ', '.join(_ngrams_order_columns))
raise ValidationError('The order parameter should take one of the following values: ' + ', '.join(_ngrams_order_columns), 400)
order_column = _ngrams_order_columns[order]
# query building
ngramsQuery = Ngram.objects.filter(
......@@ -46,4 +53,32 @@ def ngrams(request, corpus_id):
# response building
return JsonHttpResponse({
"list" : [ngram.terms for ngram in ngramsQuery],
})
def corpus_metadata(request, corpus_id):
# parameters retrieval and control
corpusQuery = Node.objects.filter(id = corpus_id)
if not corpusQuery:
raise Http404("No such corpus.")
corpus = corpusQuery.first()
if corpus.type.name != 'Corpus':
raise Http404("No such corpus.")
# query building
cursor = connection.cursor()
cursor.execute(
''' SELECT
key,
COUNT(*) AS count
FROM (
SELECT skeys(metadata) AS key
FROM %s
) AS keys
GROUP BY
key
ORDER BY
count DESC
''' % (Node._meta.db_table, ))
# response building
return JsonHttpResponse({
"list" : [row[0] for row in cursor.fetchall()],
})
\ No newline at end of file
......@@ -40,7 +40,8 @@ urlpatterns = patterns('',
url(r'^chart/corpus/(\d+)/data.csv$', send_csv),
url(r'^graph.json$', send_graph),
url(r'^api/corpus/(\d+)/ngrams$', gargantext_web.api.ngrams),
url(r'^api/corpus/(\d+)/ngrams$', gargantext_web.api.corpus_ngrams),
url(r'^api/corpus/(\d+)/metadata$', gargantext_web.api.corpus_metadata),
)
from django.conf import settings
......
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