Commit 20f0882a authored by delanoe's avatar delanoe

[FEAT] GRAPH REST API with start=YEAR & end=YEAR filter. More precise date can be computed next.

parent 831b933b
......@@ -8,6 +8,7 @@ from gargantext_web.db import Node, Ngram, NodeNgram, NodeNgramNgram, \
from gargantext_web.db import session, cache, get_or_create_node, bulk_insert
from analysis.lists import WeightedMatrix, UnweightedList, Translations
import inspect
import datetime
def do_cooc(corpus=None
, field1='ngrams', field2='ngrams'
......@@ -116,22 +117,31 @@ def do_cooc(corpus=None
# Cooc between the dates start and end
if start is not None:
#date_start = datetime.datetime.strptime ("2001-2-3 10:11:12", "%Y-%m-%d %H:%M:%S")
# TODO : more complexe date format here.
date_start = datetime.datetime.strptime (str(start), "%Y")
date_start_utc = date_start.strftime("%Y-%m-%d %H:%M:%S")
Start=aliased(NodeHyperdata)
StartFormat = aliased(Hyperdata)
cooc_query = (cooc_query.join(Start, Start.node_id == Node.id)
.join(StartFormat, StartFormat.id == Start.hyperdata_id)
.filter(StartFormat.name == 'datetime')
.filter(Start.value_datetime >= start)
.filter(StartFormat.name == 'publication_date')
.filter(Start.value_datetime >= date_start_utc)
)
if end is not None:
# TODO : more complexe date format here.
date_end = datetime.datetime.strptime (str(end), "%Y")
date_end_utc = date_end.strftime("%Y-%m-%d %H:%M:%S")
End=aliased(NodeHyperdata)
EndFormat = aliased(Hyperdata)
cooc_query = (cooc_query.join(End, End.node_id == Node.id)
.join(EndFormat, EndFormat.id == End.hyperdata_id)
.filter(EndFormat.name == 'datetime')
.filter(End.value_datetime <= end)
.filter(EndFormat.name == 'publication_date')
.filter(End.value_datetime <= date_end_utc)
)
......
......@@ -139,7 +139,9 @@ def get_cooc(request=None, corpus=None
#cooc_id = get_or_create_node(nodetype='Cooccurrence', corpus=corpus).id
cooc_id = do_cooc(corpus=corpus, field1=field1, field2=field2
, miam_id=miam_id, group_id=group_id, stop_id=stop_id, limit=size
, isMonopartite=isMonopartite)
, isMonopartite=isMonopartite
, start=start
, end = end)
G, partition, ids, weight = do_distance(cooc_id, field1=field1, field2=field2, isMonopartite=isMonopartite)
......
......@@ -11,9 +11,14 @@ class Graph(APIView):
Graph.get :: Get graph data as REST api.
Get all the parameters first
graph?field1=ngrams&field2=ngrams&
graph?field1=ngrams&field2=ngrams&start=''&end=''
'''
field1 = request.GET.get('field1', 'ngrams')
field2 = request.GET.get('field2', 'ngrams')
start = request.GET.get('start', None)
end = request.GET.get('end' , None)
format_ = request.GET.get('format', 'json')
type_ = request.GET.get('type', 'node_link')
......@@ -25,7 +30,10 @@ class Graph(APIView):
if field1 in accepted_field1 :
if field2 in accepted_field2 :
data = get_cooc(corpus=corpus,field1=field1, field2=field2)
if start is not None and end is not None :
data = get_cooc(corpus=corpus,field1=field1, field2=field2, start=start, end=end)
else:
data = get_cooc(corpus=corpus,field1=field1, field2=field2)
if format_ == 'json':
return JsonHttpResponse(data)
else:
......
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