Commit 5964c948 authored by delanoe's avatar delanoe

[REST] urls factorisation.

parent 407d6778
...@@ -16,7 +16,7 @@ from rest_framework.authentication import SessionAuthentication, BasicAuthentica ...@@ -16,7 +16,7 @@ from rest_framework.authentication import SessionAuthentication, BasicAuthentica
from node.models import Node from node.models import Node
from gargantext_web.db import * from gargantext_web.db import *
from ngram.lists import listIds, listNgramIds from ngram.lists import listIds, listNgramIds
from rest.api import JsonHttpResponse from rest_v1_0.api import JsonHttpResponse
@login_required @login_required
......
...@@ -49,7 +49,7 @@ from sqlalchemy import desc, asc, or_, and_, Date, cast, select ...@@ -49,7 +49,7 @@ from sqlalchemy import desc, asc, or_, and_, Date, cast, select
from gargantext_web import about from gargantext_web import about
from rest.api import JsonHttpResponse from rest_v1_0.api import JsonHttpResponse
from ngram.lists import listIds, listNgramIds, ngramList , doList from ngram.lists import listIds, listNgramIds, ngramList , doList
......
...@@ -97,6 +97,7 @@ INSTALLED_APPS = ( ...@@ -97,6 +97,7 @@ INSTALLED_APPS = (
'scrappers.scrap_pubmed', 'scrappers.scrap_pubmed',
'djcelery', 'djcelery',
'aldjemy', 'aldjemy',
'rest_v1_0',
'rest_framework', 'rest_framework',
) )
......
...@@ -4,17 +4,14 @@ from django.contrib import admin ...@@ -4,17 +4,14 @@ from django.contrib import admin
from django.contrib.auth.views import login from django.contrib.auth.views import login
from gargantext_web import views, views_optimized from gargantext_web import views, views_optimized
import gargantext_web.corpus_views as corpus_views
from annotations import urls as annotations_urls from annotations import urls as annotations_urls
from annotations.views import main as annotations_main_view from annotations.views import main as annotations_main_view
import rest.ngrams
import rest.api
import scrappers.scrap_pubmed.views as pubmedscrapper import scrappers.scrap_pubmed.views as pubmedscrapper
import tests.ngramstable.views as samtest import tests.ngramstable.views as samtest
import gargantext_web.corpus_views as corpus_views
admin.autodiscover() admin.autodiscover()
...@@ -34,6 +31,27 @@ urlpatterns = patterns('', ...@@ -34,6 +31,27 @@ urlpatterns = patterns('',
url(r'^img/logo.svg$', views.logo), url(r'^img/logo.svg$', views.logo),
url(r'^css/bootstrap.css$', views.css), url(r'^css/bootstrap.css$', views.css),
# REST
url(r'^api/', include('rest_v1_0.urls')),
url(r'^v1.0/', include('rest_v1_0.urls')),
# TODO below to put in the rest
url(r'^project/(\d+)/corpus/(\d+)/corpus.csv$', views.corpus_csv),
url(r'^project/(\d+)/corpus/(tests_mvc_listdocuments+)/corpus.tests_mvc_listdocuments$', views.corpus_csv),
url(r'^delete/(\d+)$', views.delete_node), # => api.node('id' = id, children = 'True', copies = False)
# Visualizations
url(r'^project/(\d+)/corpus/(\d+)/chart$', views.chart),
url(r'^project/(\d+)/corpus/(\d+)/explorer$', views.graph),
url(r'^project/(\d+)/corpus/(\d+)/matrix$', views.matrix),
url(r'^chart/corpus/(\d+)/data.csv$', views.send_csv), # => api.node.children('type' : 'data', 'format' : 'csv')
url(r'^corpus/(\d+)/node_link.json$', views.node_link), # => api.analysis('type': 'node_link', 'format' : 'json')
url(r'^corpus/(\d+)/adjacency.json$', views.adjacency), # => api.analysis('type': 'adjacency', 'format' : 'json')
url(r'^ngrams$', views.ngrams), # to be removed
url(r'^nodeinfo/(\d+)$', views.nodeinfo), # to be removed ?
# TODO above put in the rest
############################################################################ ############################################################################
# User Home view # User Home view
url(r'^$', views.home_view), url(r'^$', views.home_view),
...@@ -44,7 +62,6 @@ urlpatterns = patterns('', ...@@ -44,7 +62,6 @@ urlpatterns = patterns('',
# Project Management # Project Management
url(r'^projects/$', views.projects), url(r'^projects/$', views.projects),
url(r'^project/(\d+)/$', views_optimized.project), url(r'^project/(\d+)/$', views_optimized.project),
url(r'^delete/(\d+)$', views.delete_node), # => api.node('id' = id, children = 'True', copies = False)
############################################################################ ############################################################################
# Corpus management # Corpus management
...@@ -56,66 +73,19 @@ urlpatterns = patterns('', ...@@ -56,66 +73,19 @@ urlpatterns = patterns('',
url(r'^project/(\d+)/corpus/(\d+)/journals/journals.json$', samtest.get_journals_json), url(r'^project/(\d+)/corpus/(\d+)/journals/journals.json$', samtest.get_journals_json),
url(r'^project/(\d+)/corpus/(\d+)/journals$', samtest.get_journals), url(r'^project/(\d+)/corpus/(\d+)/journals$', samtest.get_journals),
# # # Terms view # TODO rest to update corpus and information for progress bar
# url(r'^project/(\d+)/corpus/(\d+)/terms/ngrams.json$', corpus_views.test_ngrams),
# url(r'^project/(\d+)/corpus/(\d+)/terms/?$', corpus_views.get_ngrams),
# Update corpus
url(r'^project/(\d+)/corpus/(\d+)/(\w+)/update$', views.update_nodes), url(r'^project/(\d+)/corpus/(\d+)/(\w+)/update$', views.update_nodes),
############################################################################ ############################################################################
# annotations App # annotations App
url(r'^project/(\d+)/corpus/(\d+)/document/(\d+)/$', annotations_main_view), url(r'^project/(\d+)/corpus/(\d+)/document/(\d+)/$', annotations_main_view),
url(r'^annotations/', include(annotations_urls)), url(r'^annotations/', include(annotations_urls)),
# #
url(r'^project/(\d+)/corpus/(\d+)/corpus.csv$', views.corpus_csv),
url(r'^project/(\d+)/corpus/(tests_mvc_listdocuments+)/corpus.tests_mvc_listdocuments$', views.corpus_csv),
############################################################################ ############################################################################
# Visualizations
url(r'^project/(\d+)/corpus/(\d+)/chart$', views.chart),
url(r'^project/(\d+)/corpus/(\d+)/explorer$', views.graph),
url(r'^project/(\d+)/corpus/(\d+)/matrix$', views.matrix),
############################################################################ ############################################################################
# Data management
url(r'^chart/corpus/(\d+)/data.csv$', views.send_csv), # => api.node.children('type' : 'data', 'format' : 'csv')
url(r'^corpus/(\d+)/node_link.json$', views.node_link), # => api.analysis('type': 'node_link', 'format' : 'json')
url(r'^corpus/(\d+)/adjacency.json$', views.adjacency), # => api.analysis('type': 'adjacency', 'format' : 'json')
url(r'^api/tfidf/(\d+)/(\w+)$', views_optimized.tfidf),
############################################################################ ############################################################################
# TODO put in test folder Provisory tests
# Data management
#url(r'^api$', rest.api.Root), # = ?
url(r'^api/nodes$', rest.api.NodesList.as_view()),
url(r'^v1.0/nodes$', rest.api.NodesList.as_view()),
url(r'^api/nodes/(\d+)$', rest.api.Nodes.as_view()),
url(r'^v1.0/nodes/(\d+)$', rest.api.Nodes.as_view()),
url(r'^api/nodes/(\d+)/children/ngrams$', rest.api.NodesChildrenNgrams.as_view()), # => repeated children ?
url(r'^v1.0/nodes/(\d+)/children/ngrams$', rest.api.NodesChildrenNgrams.as_view()), # => repeated children ?
url(r'^api/node/(\d+)/ngrams$', rest.ngrams.Ngrams.as_view()),
url(r'^v1.0/node/(\d+)/ngrams$', rest.ngrams.Ngrams.as_view()),
url(r'^api/nodes/(\d+)/children/hyperdata$', rest.api.NodesChildrenMetatadata.as_view()),
url(r'^v1.0/nodes/(\d+)/children/hyperdata$', rest.api.NodesChildrenMetatadata.as_view()),
url(r'^api/nodes/(\d+)/children/queries$', rest.api.NodesChildrenQueries.as_view()),
url(r'^v1.0/nodes/(\d+)/children/queries$', rest.api.NodesChildrenQueries.as_view()),
url(r'^api/nodes/(\d+)/children/duplicates$', rest.api.NodesChildrenDuplicates.as_view()),
url(r'^v1.0/nodes/(\d+)/children/duplicates$', rest.api.NodesChildrenDuplicates.as_view()),
# url(r'^api/nodes/(\d+)/children/duplicates/delete$', rest.api.NodesChildrenDuplicates.delete ),
url(r'^api/nodes/(\d+)/ngrams$', rest.api.CorpusController.ngrams),
url(r'^v1.0/nodes/(\d+)/ngrams$', rest.api.CorpusController.ngrams),
# Provisory tests
url(r'^ngrams$', views.ngrams), # to be removed
url(r'^nodeinfo/(\d+)$', views.nodeinfo), # to be removed ?
url(r'^tests/mvc$', views.tests_mvc), url(r'^tests/mvc$', views.tests_mvc),
url(r'^tests/mvc-listdocuments$', views.tests_mvc_listdocuments), url(r'^tests/mvc-listdocuments$', views.tests_mvc_listdocuments),
......
...@@ -684,7 +684,7 @@ def send_csv(request, corpus_id): ...@@ -684,7 +684,7 @@ def send_csv(request, corpus_id):
return response return response
# To get the data # To get the data
from rest.api import JsonHttpResponse from rest_v1_0.api import JsonHttpResponse
from analysis.functions import get_cooc from analysis.functions import get_cooc
def node_link(request, corpus_id): def node_link(request, corpus_id):
''' '''
......
...@@ -16,7 +16,7 @@ from threading import Thread ...@@ -16,7 +16,7 @@ from threading import Thread
from node.admin import CustomForm from node.admin import CustomForm
from gargantext_web.db import * from gargantext_web.db import *
from gargantext_web.settings import DEBUG, MEDIA_ROOT from gargantext_web.settings import DEBUG, MEDIA_ROOT
from rest.api import JsonHttpResponse from rest_v1_0.api import JsonHttpResponse
import json import json
import re import re
......
...@@ -11,7 +11,8 @@ import datetime ...@@ -11,7 +11,8 @@ import datetime
import copy import copy
from gargantext_web.views import move_to_trash from gargantext_web.views import move_to_trash
from gargantext_web.db import session, Node, NodeNgram, NodeNgramNgram, NodeNodeNgram, Ngram, Hyperdata, Node_Ngram from gargantext_web.db import session, Node, NodeNgram, NodeNgramNgram, NodeNodeNgram, Ngram, Hyperdata, Node_Ngram\
, NodeType
from gargantext_web.validation import validate, ValidationException from gargantext_web.validation import validate, ValidationException
from node import models from node import models
...@@ -143,7 +144,6 @@ class NodesChildrenNgrams(APIView): ...@@ -143,7 +144,6 @@ class NodesChildrenNgrams(APIView):
from gargantext_web.db import get_or_create_node from gargantext_web.db import get_or_create_node
class Ngrams(APIView): class Ngrams(APIView):
def get(self, request, node_id): def get(self, request, node_id):
# query ngrams # query ngrams
ParentNode = aliased(Node) ParentNode = aliased(Node)
...@@ -262,10 +262,7 @@ class Ngrams(APIView): ...@@ -262,10 +262,7 @@ class Ngrams(APIView):
], ],
}) })
class NodesChildrenDuplicates(APIView): class NodesChildrenDuplicates(APIView):
def _fetch_duplicates(self, request, node_id, extra_columns=None, min_count=1): def _fetch_duplicates(self, request, node_id, extra_columns=None, min_count=1):
# input validation # input validation
if extra_columns is None: if extra_columns is None:
...@@ -352,9 +349,7 @@ class NodesChildrenDuplicates(APIView): ...@@ -352,9 +349,7 @@ class NodesChildrenDuplicates(APIView):
'deleted': count 'deleted': count
}) })
class NodesChildrenMetatadata(APIView): class NodesChildrenMetatadata(APIView):
def get(self, request, node_id): def get(self, request, node_id):
# query hyperdata keys # query hyperdata keys
...@@ -412,9 +407,7 @@ class NodesChildrenMetatadata(APIView): ...@@ -412,9 +407,7 @@ class NodesChildrenMetatadata(APIView):
'data': collection, 'data': collection,
}) })
class NodesChildrenQueries(APIView): class NodesChildrenQueries(APIView):
def _sql(self, input, node_id): def _sql(self, input, node_id):
fields = dict() fields = dict()
tables = set('nodes') tables = set('nodes')
...@@ -594,7 +587,6 @@ class NodesChildrenQueries(APIView): ...@@ -594,7 +587,6 @@ class NodesChildrenQueries(APIView):
raise ValidationException('queried fields are mixing incompatible types of fields') raise ValidationException('queried fields are mixing incompatible types of fields')
return JsonHttpResponse(method(input, node_id), 201) return JsonHttpResponse(method(input, node_id), 201)
class NodesList(APIView): class NodesList(APIView):
authentication_classes = (SessionAuthentication, BasicAuthentication) authentication_classes = (SessionAuthentication, BasicAuthentication)
...@@ -615,9 +607,7 @@ class NodesList(APIView): ...@@ -615,9 +607,7 @@ class NodesList(APIView):
for node in query.all() for node in query.all()
]}) ]})
class Nodes(APIView): class Nodes(APIView):
def get(self, request, node_id): def get(self, request, node_id):
node = session.query(Node).filter(Node.id == node_id).first() node = session.query(Node).filter(Node.id == node_id).first()
if node is None: if node is None:
...@@ -651,9 +641,7 @@ class Nodes(APIView): ...@@ -651,9 +641,7 @@ class Nodes(APIView):
except Exception as error: except Exception as error:
msgres ="error deleting : " + node_id + str(error) msgres ="error deleting : " + node_id + str(error)
class CorpusController: class CorpusController:
@classmethod @classmethod
def get(cls, corpus_id): def get(cls, corpus_id):
try: try:
......
...@@ -2,6 +2,7 @@ from django.http import HttpResponse, Http404 ...@@ -2,6 +2,7 @@ from django.http import HttpResponse, Http404
from django.core.exceptions import PermissionDenied, SuspiciousOperation from django.core.exceptions import PermissionDenied, SuspiciousOperation
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.contrib.auth.decorators import login_required
from sqlalchemy import text, distinct, or_,not_ from sqlalchemy import text, distinct, or_,not_
from sqlalchemy.sql import func, desc from sqlalchemy.sql import func, desc
...@@ -69,6 +70,7 @@ class APIException(_APIException): ...@@ -69,6 +70,7 @@ class APIException(_APIException):
from rest_framework.decorators import api_view from rest_framework.decorators import api_view
@login_required
class Ngrams(APIView): class Ngrams(APIView):
''' '''
REST application to manage ngrams REST application to manage ngrams
......
from django.conf.urls import patterns, url
from rest_v1_0 import api, ngrams
urlpatterns = patterns('',
# REST URLS
# What is REST ?
# https://en.wikipedia.org/wiki/Representational_state_transfer
#url(r'^api$', rest_v1_0.api.Root), # = ?
url(r'nodes$', api.NodesList.as_view()),
url(r'nodes$', api.NodesList.as_view()),
url(r'nodes/(\d+)$', api.Nodes.as_view()),
url(r'nodes/(\d+)$', api.Nodes.as_view()),
url(r'nodes/(\d+)/children/ngrams$', api.NodesChildrenNgrams.as_view()), # => repeated children ?
url(r'nodes/(\d+)/children/ngrams$', api.NodesChildrenNgrams.as_view()), # => repeated children ?
url(r'node/(\d+)/ngrams$', ngrams.Ngrams.as_view()),
url(r'node/(\d+)/ngrams$', ngrams.Ngrams.as_view()),
url(r'nodes/(\d+)/children/hyperdata$', api.NodesChildrenMetatadata.as_view()),
url(r'nodes/(\d+)/children/hyperdata$', api.NodesChildrenMetatadata.as_view()),
url(r'nodes/(\d+)/children/queries$', api.NodesChildrenQueries.as_view()),
url(r'nodes/(\d+)/children/queries$', api.NodesChildrenQueries.as_view()),
url(r'nodes/(\d+)/children/duplicates$', api.NodesChildrenDuplicates.as_view()),
url(r'nodes/(\d+)/children/duplicates$', api.NodesChildrenDuplicates.as_view()),
# url(r'^api/nodes/(\d+)/children/duplicates/delete$', api.NodesChildrenDuplicates.delete ),
url(r'nodes/(\d+)/ngrams$', api.CorpusController.ngrams),
url(r'nodes/(\d+)/ngrams$', api.CorpusController.ngrams),
#url(r'tfidf/(\d+)/(\w+)$', views_optimized.tfidf),
)
...@@ -30,7 +30,7 @@ import threading ...@@ -30,7 +30,7 @@ import threading
from node.admin import CustomForm from node.admin import CustomForm
from gargantext_web.db import * from gargantext_web.db import *
from gargantext_web.settings import DEBUG, MEDIA_ROOT from gargantext_web.settings import DEBUG, MEDIA_ROOT
from rest.api import JsonHttpResponse from rest_v1_0.api import JsonHttpResponse
from parsing.corpustools import add_resource, parse_resources, extract_ngrams from parsing.corpustools import add_resource, parse_resources, extract_ngrams
from ngram.tfidf import compute_tfidf from ngram.tfidf import compute_tfidf
......
...@@ -50,7 +50,7 @@ from sqlalchemy import or_, func ...@@ -50,7 +50,7 @@ from sqlalchemy import or_, func
from gargantext_web import about from gargantext_web import about
from rest.api import JsonHttpResponse from rest_v1_0.api import JsonHttpResponse
from ngram.lists import listIds, listNgramIds, ngramList , doList from ngram.lists import listIds, listNgramIds, ngramList , doList
......
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