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, \ ...@@ -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 gargantext_web.db import session, cache, get_or_create_node, bulk_insert
from analysis.lists import WeightedMatrix, UnweightedList, Translations from analysis.lists import WeightedMatrix, UnweightedList, Translations
import inspect import inspect
import datetime
def do_cooc(corpus=None def do_cooc(corpus=None
, field1='ngrams', field2='ngrams' , field1='ngrams', field2='ngrams'
...@@ -116,22 +117,31 @@ def do_cooc(corpus=None ...@@ -116,22 +117,31 @@ def do_cooc(corpus=None
# Cooc between the dates start and end # Cooc between the dates start and end
if start is not None: 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) Start=aliased(NodeHyperdata)
StartFormat = aliased(Hyperdata) StartFormat = aliased(Hyperdata)
cooc_query = (cooc_query.join(Start, Start.node_id == Node.id) cooc_query = (cooc_query.join(Start, Start.node_id == Node.id)
.join(StartFormat, StartFormat.id == Start.hyperdata_id) .join(StartFormat, StartFormat.id == Start.hyperdata_id)
.filter(StartFormat.name == 'datetime') .filter(StartFormat.name == 'publication_date')
.filter(Start.value_datetime >= start) .filter(Start.value_datetime >= date_start_utc)
) )
if end is not None: 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) End=aliased(NodeHyperdata)
EndFormat = aliased(Hyperdata) EndFormat = aliased(Hyperdata)
cooc_query = (cooc_query.join(End, End.node_id == Node.id) cooc_query = (cooc_query.join(End, End.node_id == Node.id)
.join(EndFormat, EndFormat.id == End.hyperdata_id) .join(EndFormat, EndFormat.id == End.hyperdata_id)
.filter(EndFormat.name == 'datetime') .filter(EndFormat.name == 'publication_date')
.filter(End.value_datetime <= end) .filter(End.value_datetime <= date_end_utc)
) )
......
...@@ -139,7 +139,9 @@ def get_cooc(request=None, corpus=None ...@@ -139,7 +139,9 @@ def get_cooc(request=None, corpus=None
#cooc_id = get_or_create_node(nodetype='Cooccurrence', corpus=corpus).id #cooc_id = get_or_create_node(nodetype='Cooccurrence', corpus=corpus).id
cooc_id = do_cooc(corpus=corpus, field1=field1, field2=field2 cooc_id = do_cooc(corpus=corpus, field1=field1, field2=field2
, miam_id=miam_id, group_id=group_id, stop_id=stop_id, limit=size , 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) G, partition, ids, weight = do_distance(cooc_id, field1=field1, field2=field2, isMonopartite=isMonopartite)
......
...@@ -11,9 +11,14 @@ class Graph(APIView): ...@@ -11,9 +11,14 @@ class Graph(APIView):
Graph.get :: Get graph data as REST api. Graph.get :: Get graph data as REST api.
Get all the parameters first Get all the parameters first
graph?field1=ngrams&field2=ngrams& graph?field1=ngrams&field2=ngrams&
graph?field1=ngrams&field2=ngrams&start=''&end=''
''' '''
field1 = request.GET.get('field1', 'ngrams') field1 = request.GET.get('field1', 'ngrams')
field2 = request.GET.get('field2', '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') format_ = request.GET.get('format', 'json')
type_ = request.GET.get('type', 'node_link') type_ = request.GET.get('type', 'node_link')
...@@ -25,6 +30,9 @@ class Graph(APIView): ...@@ -25,6 +30,9 @@ class Graph(APIView):
if field1 in accepted_field1 : if field1 in accepted_field1 :
if field2 in accepted_field2 : if field2 in accepted_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) data = get_cooc(corpus=corpus,field1=field1, field2=field2)
if format_ == 'json': if format_ == 'json':
return JsonHttpResponse(data) return JsonHttpResponse(data)
......
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