Commit 32c3b66f authored by delanoe's avatar delanoe

[FIX] Session issue with get_session() function.

parent afc6583f
...@@ -5,7 +5,7 @@ from sqlalchemy.sql import func ...@@ -5,7 +5,7 @@ from sqlalchemy.sql import func
from gargantext_web.db import Node, Ngram, NodeNgram, NodeNgramNgram, \ from gargantext_web.db import Node, Ngram, NodeNgram, NodeNgramNgram, \
NodeNodeNgram, NodeHyperdataNgram, NodeHyperdata, Hyperdata NodeNodeNgram, NodeHyperdataNgram, NodeHyperdata, Hyperdata
from gargantext_web.db import session, cache, get_or_create_node, bulk_insert from gargantext_web.db import get_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 import datetime
...@@ -40,24 +40,26 @@ def do_cooc(corpus=None ...@@ -40,24 +40,26 @@ def do_cooc(corpus=None
# Security test # Security test
field1,field2 = str(field1), str(field2) field1,field2 = str(field1), str(field2)
session = get_session()
# Get node # Get node
node_cooc = get_or_create_node(nodetype='Cooccurrence', corpus=corpus node_cooc = get_or_create_node(nodetype='Cooccurrence', corpus=corpus
, name_str="Cooccurrences corpus " \ , name_str="Cooccurrences corpus " \
+ str(corpus.id) + "list_id: " + str(miam_id) + str(corpus.id) + "list_id: " + str(miam_id)
#, hyperdata={'field1': field1, 'field2':field2} #, hyperdata={'field1': field1, 'field2':field2}
) , session=session)
# BEGIN # BEGIN
# Saving the parameters of the analysis in the Node JSONB hyperdata field # Saving the parameters of the analysis in the Node JSONB hyperdata field
args, _, _, parameters = inspect.getargvalues(inspect.currentframe()) args, _, _, parameters = inspect.getargvalues(inspect.currentframe())
hyperdata = dict() # hyperdata = dict()
#
for parameter in parameters.keys(): # for parameter in parameters.keys():
if parameter != 'corpus' and parameter != 'node_cooc': # if parameter != 'corpus' and parameter != 'node_cooc':
hyperdata[parameter] = parameters[parameter] # hyperdata[parameter] = parameters[parameter]
#
node_cooc.hyperdata = hyperdata # node_cooc.hyperdata = hyperdata
#
session.add(node_cooc) session.add(node_cooc)
session.commit() session.commit()
# END # END
......
from collections import defaultdict from collections import defaultdict
from math import sqrt from math import sqrt
from gargantext_web.db import session, NodeNgram, NodeNgramNgram, bulk_insert from gargantext_web.db import get_session, NodeNgram, NodeNgramNgram, bulk_insert
class BaseClass: class BaseClass:
...@@ -67,6 +67,7 @@ class Translations(BaseClass): ...@@ -67,6 +67,7 @@ class Translations(BaseClass):
self.items = defaultdict(int) self.items = defaultdict(int)
self.groups = defaultdict(set) self.groups = defaultdict(set)
elif isinstance(other, int): elif isinstance(other, int):
session = get_session()
query = (session query = (session
.query(NodeNgramNgram.ngramy_id, NodeNgramNgram.ngramx_id) .query(NodeNgramNgram.ngramy_id, NodeNgramNgram.ngramx_id)
.filter(NodeNgramNgram.node_id == other) .filter(NodeNgramNgram.node_id == other)
...@@ -118,6 +119,7 @@ class Translations(BaseClass): ...@@ -118,6 +119,7 @@ class Translations(BaseClass):
def save(self, node_id): def save(self, node_id):
# delete previous data # delete previous data
session = get_session()
session.query(NodeNgramNgram).filter(NodeNgramNgram.node_id == node_id).delete() session.query(NodeNgramNgram).filter(NodeNgramNgram.node_id == node_id).delete()
session.commit() session.commit()
# insert new data # insert new data
...@@ -134,6 +136,7 @@ class WeightedMatrix(BaseClass): ...@@ -134,6 +136,7 @@ class WeightedMatrix(BaseClass):
if other is None: if other is None:
self.items = defaultdict(lambda: defaultdict(float)) self.items = defaultdict(lambda: defaultdict(float))
elif isinstance(other, int): elif isinstance(other, int):
session = get_session()
query = (session query = (session
.query(NodeNgramNgram.ngramx_id, NodeNgramNgram.ngramy_id, NodeNgramNgram.score) .query(NodeNgramNgram.ngramx_id, NodeNgramNgram.ngramy_id, NodeNgramNgram.score)
.filter(NodeNgramNgram.node_id == other) .filter(NodeNgramNgram.node_id == other)
...@@ -159,6 +162,7 @@ class WeightedMatrix(BaseClass): ...@@ -159,6 +162,7 @@ class WeightedMatrix(BaseClass):
def save(self, node_id): def save(self, node_id):
# delete previous data # delete previous data
session = get_session()
session.query(NodeNgramNgram).filter(NodeNgramNgram.node_id == node_id).delete() session.query(NodeNgramNgram).filter(NodeNgramNgram.node_id == node_id).delete()
session.commit() session.commit()
# insert new data # insert new data
...@@ -243,6 +247,7 @@ class UnweightedList(BaseClass): ...@@ -243,6 +247,7 @@ class UnweightedList(BaseClass):
if other is None: if other is None:
self.items = set() self.items = set()
elif isinstance(other, int): elif isinstance(other, int):
session = get_session()
query = (session query = (session
.query(NodeNgram.ngram_id) .query(NodeNgram.ngram_id)
.filter(NodeNgram.node_id == other) .filter(NodeNgram.node_id == other)
...@@ -323,6 +328,7 @@ class UnweightedList(BaseClass): ...@@ -323,6 +328,7 @@ class UnweightedList(BaseClass):
def save(self, node_id): def save(self, node_id):
# delete previous data # delete previous data
session = get_session()
session.query(NodeNgram).filter(NodeNgram.node_id == node_id).delete() session.query(NodeNgram).filter(NodeNgram.node_id == node_id).delete()
session.commit() session.commit()
# insert new data # insert new data
...@@ -339,6 +345,7 @@ class WeightedList(BaseClass): ...@@ -339,6 +345,7 @@ class WeightedList(BaseClass):
if other is None: if other is None:
self.items = defaultdict(float) self.items = defaultdict(float)
elif isinstance(other, int): elif isinstance(other, int):
session = get_session()
query = (session query = (session
.query(NodeNgram.ngram_id, NodeNgram.weight) .query(NodeNgram.ngram_id, NodeNgram.weight)
.filter(NodeNgram.node_id == other) .filter(NodeNgram.node_id == other)
...@@ -435,6 +442,7 @@ class WeightedList(BaseClass): ...@@ -435,6 +442,7 @@ class WeightedList(BaseClass):
def save(self, node_id): def save(self, node_id):
# delete previous data # delete previous data
session = get_session()
session.query(NodeNgram).filter(NodeNgram.node_id == node_id).delete() session.query(NodeNgram).filter(NodeNgram.node_id == node_id).delete()
session.commit() session.commit()
# insert new data # insert new data
......
...@@ -13,7 +13,7 @@ from rest_framework.exceptions import APIException ...@@ -13,7 +13,7 @@ from rest_framework.exceptions import APIException
from rest_framework.authentication import SessionAuthentication, BasicAuthentication from rest_framework.authentication import SessionAuthentication, BasicAuthentication
from node.models import Node from node.models import Node
from gargantext_web.db import session, cache, Node, NodeNgram, Ngram from gargantext_web.db import get_session, cache, Node, NodeNgram, Ngram
from ngram.lists import listIds, listNgramIds from ngram.lists import listIds, listNgramIds
from gargantext_web.db import get_or_create_node from gargantext_web.db import get_or_create_node
...@@ -63,6 +63,7 @@ class NgramEdit(APIView): ...@@ -63,6 +63,7 @@ class NgramEdit(APIView):
""" """
renderer_classes = (JSONRenderer,) renderer_classes = (JSONRenderer,)
authentication_classes = (SessionAuthentication, BasicAuthentication) authentication_classes = (SessionAuthentication, BasicAuthentication)
session = get_session()
def post(self, request, list_id, ngram_ids): def post(self, request, list_id, ngram_ids):
""" """
...@@ -134,7 +135,8 @@ class NgramCreate(APIView): ...@@ -134,7 +135,8 @@ class NgramCreate(APIView):
""" """
renderer_classes = (JSONRenderer,) renderer_classes = (JSONRenderer,)
authentication_classes = (SessionAuthentication, BasicAuthentication) authentication_classes = (SessionAuthentication, BasicAuthentication)
session = get_session()
def post(self, request, list_id): def post(self, request, list_id):
""" """
create NGram in a given list create NGram in a given list
......
...@@ -11,13 +11,14 @@ import cProfile ...@@ -11,13 +11,14 @@ import cProfile
def debug_task(request): def debug_task(request):
print('Request: {0!r}'.format(request)) print('Request: {0!r}'.format(request))
from gargantext_web.db import session, cache, Node from gargantext_web.db import get_session, cache, Node
from ngram.workflow import ngram_workflow from ngram.workflow import ngram_workflow
@shared_task @shared_task
def apply_sum(x, y): def apply_sum(x, y):
print(x+y) print(x+y)
session = get_session()
print(session.query(Node.name).first()) print(session.query(Node.name).first())
...@@ -33,7 +34,8 @@ def apply_workflow(corpus_id): ...@@ -33,7 +34,8 @@ def apply_workflow(corpus_id):
dbg.show('ALL WORKFLOW') dbg.show('ALL WORKFLOW')
update_state = WorkflowTracking() update_state = WorkflowTracking()
session = get_session()
corpus = session.query(Node).filter(Node.id==corpus_id).first() corpus = session.query(Node).filter(Node.id==corpus_id).first()
update_state.processing_(corpus, "Parsing") update_state.processing_(corpus, "Parsing")
......
...@@ -2,7 +2,7 @@ from django.conf import settings ...@@ -2,7 +2,7 @@ from django.conf import settings
from node import models from node import models
__all__ = ['literalquery', 'session', 'cache', 'Session', 'bulk_insert', 'engine', 'get_cursor', 'User'] __all__ = ['literalquery', 'cache', 'Session', 'bulk_insert', 'engine', 'get_cursor', 'User']
# initialize sqlalchemy # initialize sqlalchemy
...@@ -136,10 +136,11 @@ def get_sessionmaker(): ...@@ -136,10 +136,11 @@ def get_sessionmaker():
from sqlalchemy.orm import sessionmaker from sqlalchemy.orm import sessionmaker
return sessionmaker(bind=engine) return sessionmaker(bind=engine)
Session = get_sessionmaker() def get_session():
session = scoped_session(Session) Session = get_sessionmaker()
return scoped_session(Session)
session = get_session()
# SQLAlchemy model objects caching # SQLAlchemy model objects caching
from sqlalchemy import or_ from sqlalchemy import or_
...@@ -161,6 +162,7 @@ class ModelCache(dict): ...@@ -161,6 +162,7 @@ class ModelCache(dict):
for column in self._columns for column in self._columns
if column.type.python_type == str or key.__class__ == column.type.python_type if column.type.python_type == str or key.__class__ == column.type.python_type
] ]
session = get_session()
element = session.query(self._model).filter(or_(*conditions)).first() element = session.query(self._model).filter(or_(*conditions)).first()
if element is None: if element is None:
raise KeyError raise KeyError
...@@ -169,6 +171,7 @@ class ModelCache(dict): ...@@ -169,6 +171,7 @@ class ModelCache(dict):
def preload(self): def preload(self):
self.clear() self.clear()
session = get_session()
for element in session.query(self._model).all(): for element in session.query(self._model).all():
for column_name in self._columns_names: for column_name in self._columns_names:
key = getattr(element, column_name) key = getattr(element, column_name)
...@@ -234,12 +237,15 @@ class bulk_insert: ...@@ -234,12 +237,15 @@ class bulk_insert:
readline = read readline = read
def get_or_create_node(nodetype=None,corpus=None,corpus_id=None,name_str=None,hyperdata=None): def get_or_create_node(nodetype=None,corpus=None,corpus_id=None,name_str=None,hyperdata=None, session=None):
''' '''
Should be a method of the object. __get_or_create__ ? Should be a method of the object. __get_or_create__ ?
name_str :: String name_str :: String
hyperdata :: Dict hyperdata :: Dict
''' '''
if session is None:
session = get_session()
if nodetype is None: if nodetype is None:
print("Need to give a type node") print("Need to give a type node")
else: else:
......
...@@ -39,14 +39,14 @@ from django.contrib.auth import authenticate, login, logout ...@@ -39,14 +39,14 @@ from django.contrib.auth import authenticate, login, logout
from scrappers.scrap_pubmed.admin import Logger from scrappers.scrap_pubmed.admin import Logger
from gargantext_web.db import *
from sqlalchemy import or_, func from sqlalchemy import or_, func
from gargantext_web import about from gargantext_web import about
from gargantext_web.celery import empty_trash from gargantext_web.celery import empty_trash
from gargantext_web.db import cache, NodeNgram, NodeNgramNgram from gargantext_web.db import *
from gargantext_web.db import get_session, cache, NodeNgram, NodeNgramNgram
def login_user(request): def login_user(request):
logout(request) logout(request)
...@@ -230,7 +230,7 @@ def projects(request): ...@@ -230,7 +230,7 @@ def projects(request):
date = datetime.datetime.now() date = datetime.datetime.now()
# print(Logger.write("STATIC_ROOT")) # print(Logger.write("STATIC_ROOT"))
session = get_session()
projects = session.query(Node).filter(Node.user_id == user_id, Node.type_id == project_type_id).order_by(Node.date).all() projects = session.query(Node).filter(Node.user_id == user_id, Node.type_id == project_type_id).order_by(Node.date).all()
number = len(projects) number = len(projects)
...@@ -300,6 +300,7 @@ def update_nodes(request, project_id, corpus_id, view=None): ...@@ -300,6 +300,7 @@ def update_nodes(request, project_id, corpus_id, view=None):
if not request.user.is_authenticated(): if not request.user.is_authenticated():
return redirect('/login/?next=%s' % request.path) return redirect('/login/?next=%s' % request.path)
session = get_session()
try: try:
offset = int(project_id) offset = int(project_id)
offset = int(corpus_id) offset = int(corpus_id)
...@@ -376,6 +377,8 @@ def corpus(request, project_id, corpus_id): ...@@ -376,6 +377,8 @@ def corpus(request, project_id, corpus_id):
corpus = cache.Node[int(corpus_id)] corpus = cache.Node[int(corpus_id)]
type_doc_id = cache.NodeType['Document'].id type_doc_id = cache.NodeType['Document'].id
session = get_session()
number = session.query(func.count(Node.id)).filter(Node.parent_id==corpus_id, Node.type_id==type_doc_id).all()[0][0] number = session.query(func.count(Node.id)).filter(Node.parent_id==corpus_id, Node.type_id==type_doc_id).all()[0][0]
...@@ -410,6 +413,7 @@ def newpaginatorJSON(request , corpus_id): ...@@ -410,6 +413,7 @@ def newpaginatorJSON(request , corpus_id):
# t = get_template('tests/newpag/thetable.html') # t = get_template('tests/newpag/thetable.html')
# project = session.query(Node).filter(Node.id==project_id).first() # project = session.query(Node).filter(Node.id==project_id).first()
session = get_session()
corpus = session.query(Node).filter(Node.id==corpus_id).first() corpus = session.query(Node).filter(Node.id==corpus_id).first()
type_document_id = cache.NodeType['Document'].id type_document_id = cache.NodeType['Document'].id
user_id = request.user.id user_id = request.user.id
...@@ -464,6 +468,7 @@ def newpaginatorJSON(request , corpus_id): ...@@ -464,6 +468,7 @@ def newpaginatorJSON(request , corpus_id):
def move_to_trash(node_id): def move_to_trash(node_id):
try: try:
session = get_session()
node = session.query(Node).filter(Node.id == node_id).first() node = session.query(Node).filter(Node.id == node_id).first()
previous_type_id = node.type_id previous_type_id = node.type_id
...@@ -493,6 +498,7 @@ def move_to_trash_multiple(request): ...@@ -493,6 +498,7 @@ def move_to_trash_multiple(request):
nodes2trash = json.loads(request.POST["nodeids"]) nodes2trash = json.loads(request.POST["nodeids"])
print("nodes to the trash:") print("nodes to the trash:")
print(nodes2trash) print(nodes2trash)
session = get_session()
nodes = session.query(Node).filter(Node.id.in_(nodes2trash)).all() nodes = session.query(Node).filter(Node.id.in_(nodes2trash)).all()
for node in nodes: for node in nodes:
node.type_id = cache.NodeType['Trash'].id node.type_id = cache.NodeType['Trash'].id
...@@ -508,6 +514,8 @@ def delete_node(request, node_id): ...@@ -508,6 +514,8 @@ def delete_node(request, node_id):
# do we have a valid user? # do we have a valid user?
user = request.user user = request.user
session = get_session()
node = session.query(Node).filter(Node.id == node_id).first() node = session.query(Node).filter(Node.id == node_id).first()
if not user.is_authenticated(): if not user.is_authenticated():
...@@ -549,6 +557,7 @@ def chart(request, project_id, corpus_id): ...@@ -549,6 +557,7 @@ def chart(request, project_id, corpus_id):
user = request.user user = request.user
date = datetime.datetime.now() date = datetime.datetime.now()
session = get_session()
project = session.query(Node).filter(Node.id==project_id).first() project = session.query(Node).filter(Node.id==project_id).first()
corpus = session.query(Node).filter(Node.id==corpus_id).first() corpus = session.query(Node).filter(Node.id==corpus_id).first()
...@@ -566,6 +575,7 @@ def sankey(request, corpus_id): ...@@ -566,6 +575,7 @@ def sankey(request, corpus_id):
user = request.user user = request.user
date = datetime.datetime.now() date = datetime.datetime.now()
session = get_session()
corpus = session.query(Node).filter(Node.id==corpus_id).first() corpus = session.query(Node).filter(Node.id==corpus_id).first()
html = t.render(Context({\ html = t.render(Context({\
...@@ -584,6 +594,7 @@ def matrix(request, project_id, corpus_id): ...@@ -584,6 +594,7 @@ def matrix(request, project_id, corpus_id):
user = request.user user = request.user
date = datetime.datetime.now() date = datetime.datetime.now()
session = get_session()
project = session.query(Node).filter(Node.id==project_id).first() project = session.query(Node).filter(Node.id==project_id).first()
corpus = session.query(Node).filter(Node.id==corpus_id).first() corpus = session.query(Node).filter(Node.id==corpus_id).first()
...@@ -602,6 +613,7 @@ def graph(request, project_id, corpus_id, generic=100, specific=100): ...@@ -602,6 +613,7 @@ def graph(request, project_id, corpus_id, generic=100, specific=100):
user = request.user user = request.user
date = datetime.datetime.now() date = datetime.datetime.now()
session = get_session()
project = session.query(Node).filter(Node.id==project_id).first() project = session.query(Node).filter(Node.id==project_id).first()
corpus = session.query(Node).filter(Node.id==corpus_id).first() corpus = session.query(Node).filter(Node.id==corpus_id).first()
...@@ -665,6 +677,7 @@ def corpus_csv(request, project_id, corpus_id): ...@@ -665,6 +677,7 @@ def corpus_csv(request, project_id, corpus_id):
writer = csv.writer(response) writer = csv.writer(response)
session = get_session()
corpus_id = session.query(Node.id).filter(Node.id==corpus_id).first() corpus_id = session.query(Node.id).filter(Node.id==corpus_id).first()
type_document_id = cache.NodeType['Document'].id type_document_id = cache.NodeType['Document'].id
documents = session.query(Node).filter(Node.parent_id==corpus_id, Node.type_id==type_document_id).all() documents = session.query(Node).filter(Node.parent_id==corpus_id, Node.type_id==type_document_id).all()
...@@ -737,6 +750,7 @@ def node_link(request, corpus_id): ...@@ -737,6 +750,7 @@ def node_link(request, corpus_id):
''' '''
data = [] data = []
session = get_session()
corpus = session.query(Node).filter(Node.id==corpus_id).first() corpus = session.query(Node).filter(Node.id==corpus_id).first()
data = get_cooc(request=request, corpus=corpus, type="node_link") data = get_cooc(request=request, corpus=corpus, type="node_link")
return JsonHttpResponse(data) return JsonHttpResponse(data)
...@@ -744,6 +758,7 @@ def node_link(request, corpus_id): ...@@ -744,6 +758,7 @@ def node_link(request, corpus_id):
def sankey_csv(request, corpus_id): def sankey_csv(request, corpus_id):
data = [] data = []
session = get_session()
corpus = session.query(Node).filter(Node.id==corpus_id).first() corpus = session.query(Node).filter(Node.id==corpus_id).first()
data = [ data = [
["source", "target", "value"] ["source", "target", "value"]
......
...@@ -15,7 +15,7 @@ from threading import Thread ...@@ -15,7 +15,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.db import get_or_create_node from gargantext_web.db import get_or_create_node, get_session
from gargantext_web.settings import DEBUG, MEDIA_ROOT from gargantext_web.settings import DEBUG, MEDIA_ROOT
from rest_v1_0.api import JsonHttpResponse from rest_v1_0.api import JsonHttpResponse
from django.db import connection from django.db import connection
...@@ -39,6 +39,8 @@ def project(request, project_id): ...@@ -39,6 +39,8 @@ def project(request, project_id):
raise Http404() raise Http404()
# do we have a valid project? # do we have a valid project?
session = get_session()
project = (session project = (session
.query(Node) .query(Node)
.filter(Node.id == project_id) .filter(Node.id == project_id)
...@@ -144,6 +146,7 @@ def project(request, project_id): ...@@ -144,6 +146,7 @@ def project(request, project_id):
language_id = None, language_id = None,
hyperdata = {'Processing' : "Parsing documents",} hyperdata = {'Processing' : "Parsing documents",}
) )
session = get_session()
session.add(corpus) session.add(corpus)
session.commit() session.commit()
...@@ -205,8 +208,10 @@ def tfidf(request, corpus_id, ngram_ids): ...@@ -205,8 +208,10 @@ def tfidf(request, corpus_id, ngram_ids):
# filter input # filter input
ngram_ids = ngram_ids.split('a') ngram_ids = ngram_ids.split('a')
ngram_ids = [int(i) for i in ngram_ids] ngram_ids = [int(i) for i in ngram_ids]
session = get_session()
corpus = session.query(Node).filter(Node.id==corpus_id).first() corpus = session.query(Node).filter(Node.id==corpus_id).first()
tfidf_id = get_or_create_node(corpus=corpus, nodetype='Tfidf').id tfidf_id = get_or_create_node(corpus=corpus, nodetype='Tfidf').id
print(tfidf_id) print(tfidf_id)
# request data # request data
...@@ -253,6 +258,8 @@ def tfidf(request, corpus_id, ngram_ids): ...@@ -253,6 +258,8 @@ def tfidf(request, corpus_id, ngram_ids):
def getCorpusIntersection(request , corpuses_ids): def getCorpusIntersection(request , corpuses_ids):
FinalDict = False FinalDict = False
session = get_session()
if request.method == 'POST' and "nodeids" in request.POST and len(request.POST["nodeids"])>0: if request.method == 'POST' and "nodeids" in request.POST and len(request.POST["nodeids"])>0:
import ast import ast
node_ids = [int(i) for i in (ast.literal_eval( request.POST["nodeids"] )) ] node_ids = [int(i) for i in (ast.literal_eval( request.POST["nodeids"] )) ]
...@@ -304,6 +311,7 @@ def getUserPortfolio(request , project_id): ...@@ -304,6 +311,7 @@ def getUserPortfolio(request , project_id):
corpus_type_id = cache.NodeType['Corpus'].id corpus_type_id = cache.NodeType['Corpus'].id
results = {} results = {}
session = get_session()
projs = session.query(Node).filter(Node.user_id == user_id,Node.type_id==project_type_id ).all() projs = session.query(Node).filter(Node.user_id == user_id,Node.type_id==project_type_id ).all()
......
...@@ -6,7 +6,8 @@ from admin.utils import PrintException,DebugTime ...@@ -6,7 +6,8 @@ from admin.utils import PrintException,DebugTime
from gargantext_web.db import NodeNgram,NodeNodeNgram from gargantext_web.db import NodeNgram,NodeNodeNgram
from gargantext_web.db import * from gargantext_web.db import *
from gargantext_web.db import get_or_create_node from gargantext_web.db import get_or_create_node, get_session
from parsing.corpustools import * from parsing.corpustools import *
...@@ -43,6 +44,7 @@ def getNgrams(corpus=None, limit=1000): ...@@ -43,6 +44,7 @@ def getNgrams(corpus=None, limit=1000):
terms = dict() terms = dict()
tfidf_node = get_or_create_node(nodetype='Tfidf (global)' tfidf_node = get_or_create_node(nodetype='Tfidf (global)'
, corpus=corpus) , corpus=corpus)
session = get_session()
#print(corpus.name) #print(corpus.name)
ngrams = (session.query(Ngram.id, Ngram.terms, func.sum(NodeNgram.weight), NodeNodeNgram.score) ngrams = (session.query(Ngram.id, Ngram.terms, func.sum(NodeNgram.weight), NodeNodeNgram.score)
.join(NodeNgram, NodeNgram.ngram_id == Ngram.id) .join(NodeNgram, NodeNgram.ngram_id == Ngram.id)
...@@ -122,6 +124,7 @@ def compute_cvalue(corpus=None, limit=1000): ...@@ -122,6 +124,7 @@ def compute_cvalue(corpus=None, limit=1000):
result = cvalueAll() result = cvalueAll()
#print([n for n in result]) #print([n for n in result])
session = get_session()
session.query(NodeNodeNgram).filter(NodeNodeNgram.nodex_id==cvalue_node.id).delete() session.query(NodeNodeNgram).filter(NodeNodeNgram.nodex_id==cvalue_node.id).delete()
session.commit() session.commit()
......
...@@ -5,7 +5,7 @@ from admin.utils import PrintException,DebugTime ...@@ -5,7 +5,7 @@ from admin.utils import PrintException,DebugTime
from gargantext_web.db import NodeNgram,NodeNodeNgram from gargantext_web.db import NodeNgram,NodeNodeNgram
from gargantext_web.db import * from gargantext_web.db import *
from gargantext_web.db import get_or_create_node from gargantext_web.db import get_or_create_node, get_session
from analysis.lists import Translations, UnweightedList from analysis.lists import Translations, UnweightedList
from parsing.corpustools import * from parsing.corpustools import *
...@@ -55,6 +55,7 @@ def compute_groups(corpus, limit_inf=None, limit_sup=None, how='Stem'): ...@@ -55,6 +55,7 @@ def compute_groups(corpus, limit_inf=None, limit_sup=None, how='Stem'):
dbg = DebugTime('Corpus #%d - group' % corpus.id) dbg = DebugTime('Corpus #%d - group' % corpus.id)
dbg.show('Group') dbg.show('Group')
session = get_session()
#spec,cvalue = getNgrams(corpus, limit_inf=limit_inf, limit_sup=limit_sup) #spec,cvalue = getNgrams(corpus, limit_inf=limit_inf, limit_sup=limit_sup)
#list_to_check=cvalue.union(spec) #list_to_check=cvalue.union(spec)
...@@ -62,16 +63,18 @@ def compute_groups(corpus, limit_inf=None, limit_sup=None, how='Stem'): ...@@ -62,16 +63,18 @@ def compute_groups(corpus, limit_inf=None, limit_sup=None, how='Stem'):
stemIt = getStemmer(corpus) stemIt = getStemmer(corpus)
group_to_insert = set() group_to_insert = set()
node_group = get_or_create_node(nodetype='Group', corpus=corpus) node_group = get_or_create_node(nodetype='Group', corpus=corpus, session=session)
miam_to_insert = set() miam_to_insert = set()
miam_node = get_or_create_node(nodetype='MiamList', corpus=corpus) miam_node = get_or_create_node(nodetype='MiamList', corpus=corpus, session=session)
stop_node = get_or_create_node(nodetype='StopList', corpus=corpus) stop_node = get_or_create_node(nodetype='StopList', corpus=corpus, session=session)
#stop_list = UnweightedList(stop_node.id) #stop_list = UnweightedList(stop_node.id)
Stop = aliased(NodeNgram) Stop = aliased(NodeNgram)
frequency = sa.func.count(NodeNgram.weight) frequency = sa.func.count(NodeNgram.weight)
ngrams = (session.query(Ngram.id, Ngram.terms, frequency ) ngrams = (session.query(Ngram.id, Ngram.terms, frequency )
.join(NodeNgram, NodeNgram.ngram_id == Ngram.id) .join(NodeNgram, NodeNgram.ngram_id == Ngram.id)
.join(Node, Node.id == NodeNgram.node_id) .join(Node, Node.id == NodeNgram.node_id)
......
...@@ -12,7 +12,7 @@ TODO : REFACTOR 2) improvements in ngram creation (?bulk like node_ngram links) ...@@ -12,7 +12,7 @@ TODO : REFACTOR 2) improvements in ngram creation (?bulk like node_ngram links)
""" """
from gargantext_web.db import Ngram, NodeNgram, NodeNodeNgram, NodeNgramNgram from gargantext_web.db import Ngram, NodeNgram, NodeNodeNgram, NodeNgramNgram
from gargantext_web.db import cache, session, get_or_create_node, bulk_insert from gargantext_web.db import cache, get_session, get_or_create_node, bulk_insert
# import sqlalchemy as sa # import sqlalchemy as sa
from sqlalchemy.sql import func, exists from sqlalchemy.sql import func, exists
...@@ -105,6 +105,7 @@ def exportNgramLists(node,filename,delimiter="\t"): ...@@ -105,6 +105,7 @@ def exportNgramLists(node,filename,delimiter="\t"):
2 <=> mapList 2 <=> mapList
""" """
# récupérer d'un coup les objets Ngram (avec terme) # récupérer d'un coup les objets Ngram (avec terme)
session = get_session()
if len(ngram_ids): if len(ngram_ids):
ng_objs = session.query(Ngram).filter(Ngram.id.in_(ngram_ids)).all() ng_objs = session.query(Ngram).filter(Ngram.id.in_(ngram_ids)).all()
else: else:
...@@ -187,7 +188,7 @@ def importNgramLists(node,filename,delimiter="\t", del_lists=[]): ...@@ -187,7 +188,7 @@ def importNgramLists(node,filename,delimiter="\t", del_lists=[]):
  (and ideally add its logic to analysis.lists.Translations)   (and ideally add its logic to analysis.lists.Translations)
''' '''
session = get_session()
# the node arg has to be a corpus here # the node arg has to be a corpus here
if not hasattr(node, "type_id") or node.type_id != 4: if not hasattr(node, "type_id") or node.type_id != 4:
raise TypeError("IMPORT: node argument must be a Corpus Node") raise TypeError("IMPORT: node argument must be a Corpus Node")
......
from admin.utils import PrintException from admin.utils import PrintException
from gargantext_web.db import NodeNgram from gargantext_web.db import NodeNgram, get_session
from gargantext_web.db import * from gargantext_web.db import *
from parsing.corpustools import * from parsing.corpustools import *
...@@ -20,6 +20,9 @@ def listIds(typeList=None, user_id=None, corpus_id=None): ...@@ -20,6 +20,9 @@ def listIds(typeList=None, user_id=None, corpus_id=None):
typeList :: String, Type of the Node that should be created typeList :: String, Type of the Node that should be created
[Node] :: List of Int, returned or created by the function [Node] :: List of Int, returned or created by the function
''' '''
session = get_session()
if typeList is None: if typeList is None:
typeList = 'MiamList' typeList = 'MiamList'
...@@ -74,6 +77,9 @@ def listNgramIds(list_id=None, typeList=None, ...@@ -74,6 +77,9 @@ def listNgramIds(list_id=None, typeList=None,
doc_id : to get specific ngrams related to a document with Node.id=doc_id doc_id : to get specific ngrams related to a document with Node.id=doc_id
user_id : needed to create list if it does not exist user_id : needed to create list if it does not exist
''' '''
session = get_session()
if typeList is None: if typeList is None:
typeList = ['MiamList', 'StopList'] typeList = ['MiamList', 'StopList']
elif isinstance(typeList, string): elif isinstance(typeList, string):
...@@ -124,6 +130,7 @@ def ngramList(do, list_id, ngram_ids=None) : ...@@ -124,6 +130,7 @@ def ngramList(do, list_id, ngram_ids=None) :
list_id = Int : list id (Node.id) list_id = Int : list id (Node.id)
''' '''
results = [] results = []
session = get_session()
if do == 'create': if do == 'create':
terms = copy(ngram_ids) terms = copy(ngram_ids)
...@@ -174,6 +181,7 @@ def ngrams2miam(user_id=None, corpus_id=None): ...@@ -174,6 +181,7 @@ def ngrams2miam(user_id=None, corpus_id=None):
''' '''
Create a Miam List only Create a Miam List only
''' '''
session = get_session()
miam_id = listIds(typeList='MiamList', user_id=user_id, corpus_id=corpus_id)[0][0] miam_id = listIds(typeList='MiamList', user_id=user_id, corpus_id=corpus_id)[0][0]
print(miam_id) print(miam_id)
...@@ -205,6 +213,8 @@ def ngrams2miamBis(corpus): ...@@ -205,6 +213,8 @@ def ngrams2miamBis(corpus):
miam_id = get_or_create_node(corpus=corpus, nodetype='MiamList') miam_id = get_or_create_node(corpus=corpus, nodetype='MiamList')
stop_id = get_or_create_node(corpus=corpus,nodetype='StopList') stop_id = get_or_create_node(corpus=corpus,nodetype='StopList')
session = get_session()
query = (session.query( query = (session.query(
literal_column(str(miam_id)).label("node_id"), literal_column(str(miam_id)).label("node_id"),
...@@ -247,6 +257,7 @@ def doList( ...@@ -247,6 +257,7 @@ def doList(
lem = equivalent Words which are lemmatized (but the main form) lem = equivalent Words which are lemmatized (but the main form)
cvalue = equivalent N-Words according to C-Value (but the main form) cvalue = equivalent N-Words according to C-Value (but the main form)
''' '''
session = get_session()
if type_list not in ['MiamList', 'MainList']: if type_list not in ['MiamList', 'MainList']:
raise Exception("Type List (%s) not supported, try: \'MiamList\' or \'MainList\'" % type_list) raise Exception("Type List (%s) not supported, try: \'MiamList\' or \'MainList\'" % type_list)
......
...@@ -5,7 +5,7 @@ from admin.env import * ...@@ -5,7 +5,7 @@ from admin.env import *
from admin.utils import PrintException,DebugTime from admin.utils import PrintException,DebugTime
from gargantext_web.db import NodeNgram,NodeNodeNgram,NodeNgramNgram from gargantext_web.db import NodeNgram,NodeNodeNgram,NodeNgramNgram
from gargantext_web.db import get_or_create_node, session, bulk_insert from gargantext_web.db import get_or_create_node, get_session, bulk_insert
from sqlalchemy.sql import func from sqlalchemy.sql import func
from sqlalchemy import desc, asc, or_, and_, Date, cast, select from sqlalchemy import desc, asc, or_, and_, Date, cast, select
...@@ -19,6 +19,7 @@ def compute_mapList(corpus,limit=500,n=1): ...@@ -19,6 +19,7 @@ def compute_mapList(corpus,limit=500,n=1):
''' '''
According to Specificities and stoplist, According to Specificities and stoplist,
''' '''
session = get_session()
monograms_part = 0.005 monograms_part = 0.005
monograms_limit = round(limit * monograms_part) monograms_limit = round(limit * monograms_part)
...@@ -89,7 +90,7 @@ def compute_mapList(corpus,limit=500,n=1): ...@@ -89,7 +90,7 @@ def compute_mapList(corpus,limit=500,n=1):
def insert_miam(corpus, ngrams=None, path_file_csv=None): def insert_miam(corpus, ngrams=None, path_file_csv=None):
dbg = DebugTime('Corpus #%d - computing Miam' % corpus.id) dbg = DebugTime('Corpus #%d - computing Miam' % corpus.id)
session = get_session()
node_miam = get_or_create_node(nodetype='MiamList', corpus=corpus) node_miam = get_or_create_node(nodetype='MiamList', corpus=corpus)
session.query(NodeNgram).filter(NodeNgram.node_id==node_miam.id).delete() session.query(NodeNgram).filter(NodeNgram.node_id==node_miam.id).delete()
session.commit() session.commit()
......
from gargantext_web.db import session, cache, get_cursor from gargantext_web.db import get_session, cache, get_cursor
from gargantext_web.db import Node, NodeNgram, NodeNodeNgram from gargantext_web.db import Node, NodeNgram, NodeNodeNgram
from gargantext_web.db import get_or_create_node from gargantext_web.db import get_or_create_node
from admin.utils import DebugTime from admin.utils import DebugTime
...@@ -9,6 +9,7 @@ def compute_occs(corpus): ...@@ -9,6 +9,7 @@ def compute_occs(corpus):
dbg.show('Calculate occurrences') dbg.show('Calculate occurrences')
occs_node = get_or_create_node(nodetype='Occurrences', corpus=corpus) occs_node = get_or_create_node(nodetype='Occurrences', corpus=corpus)
session = get_session()
#print(occs_node.id) #print(occs_node.id)
(session.query(NodeNodeNgram) (session.query(NodeNodeNgram)
......
...@@ -10,7 +10,7 @@ import numpy as np ...@@ -10,7 +10,7 @@ import numpy as np
import pandas as pd import pandas as pd
from analysis.cooccurrences import do_cooc from analysis.cooccurrences import do_cooc
from gargantext_web.db import session, cache, get_or_create_node, bulk_insert from gargantext_web.db import get_session, cache, get_or_create_node, bulk_insert
from gargantext_web.db import NodeNgramNgram, NodeNodeNgram from gargantext_web.db import NodeNgramNgram, NodeNodeNgram
from sqlalchemy import desc, asc, or_, and_, Date, cast, select from sqlalchemy import desc, asc, or_, and_, Date, cast, select
...@@ -19,7 +19,7 @@ def specificity(cooc_id=None, corpus=None, limit=100): ...@@ -19,7 +19,7 @@ def specificity(cooc_id=None, corpus=None, limit=100):
''' '''
Compute the specificity, simple calculus. Compute the specificity, simple calculus.
''' '''
session = get_session()
cooccurrences = (session.query(NodeNgramNgram) cooccurrences = (session.query(NodeNgramNgram)
.filter(NodeNgramNgram.node_id==cooc_id) .filter(NodeNgramNgram.node_id==cooc_id)
.order_by(NodeNgramNgram.score) .order_by(NodeNgramNgram.score)
...@@ -41,7 +41,7 @@ def specificity(cooc_id=None, corpus=None, limit=100): ...@@ -41,7 +41,7 @@ def specificity(cooc_id=None, corpus=None, limit=100):
m = ( xs - ys) / (2 * (x.shape[0] - 1)) m = ( xs - ys) / (2 * (x.shape[0] - 1))
m = m.sort(inplace=False) m = m.sort(inplace=False)
node = get_or_create_node(nodetype='Specificity',corpus=corpus) node = get_or_create_node(nodetype='Specificity',corpus=corpus,session=session)
data = zip( [node.id for i in range(1,m.shape[0])] data = zip( [node.id for i in range(1,m.shape[0])]
, [corpus.id for i in range(1,m.shape[0])] , [corpus.id for i in range(1,m.shape[0])]
...@@ -63,8 +63,9 @@ def compute_specificity(corpus,limit=100): ...@@ -63,8 +63,9 @@ def compute_specificity(corpus,limit=100):
2) Compute the specificity score, saving it in database, return its Node 2) Compute the specificity score, saving it in database, return its Node
''' '''
dbg = DebugTime('Corpus #%d - specificity' % corpus.id) dbg = DebugTime('Corpus #%d - specificity' % corpus.id)
list_cvalue = get_or_create_node(nodetype='Cvalue', corpus=corpus) session = get_session()
list_cvalue = get_or_create_node(nodetype='Cvalue', corpus=corpus, session=session)
cooc_id = do_cooc(corpus=corpus, cvalue_id=list_cvalue.id,limit=limit) cooc_id = do_cooc(corpus=corpus, cvalue_id=list_cvalue.id,limit=limit)
specificity(cooc_id=cooc_id,corpus=corpus,limit=limit) specificity(cooc_id=cooc_id,corpus=corpus,limit=limit)
......
...@@ -4,12 +4,13 @@ from parsing.corpustools import * ...@@ -4,12 +4,13 @@ from parsing.corpustools import *
from gargantext_web.db import NodeNgram from gargantext_web.db import NodeNgram
from sqlalchemy import desc, asc, or_, and_, Date, cast, select from sqlalchemy import desc, asc, or_, and_, Date, cast, select
from gargantext_web.db import get_cursor, bulk_insert from gargantext_web.db import get_cursor, bulk_insert, get_session
def get_ngramogram(corpus, limit=None): def get_ngramogram(corpus, limit=None):
""" """
Ngram is a composition of ograms (ogram = 1gram) Ngram is a composition of ograms (ogram = 1gram)
""" """
session = get_session()
try: try:
query = (session query = (session
.query(Ngram.id, Ngram.terms) .query(Ngram.id, Ngram.terms)
...@@ -303,6 +304,7 @@ def stem_corpus(corpus_id=None): ...@@ -303,6 +304,7 @@ def stem_corpus(corpus_id=None):
Returns Int as id of the Stem Node Returns Int as id of the Stem Node
stem_corpus :: Int stem_corpus :: Int
''' '''
session = get_session()
corpus = session.query(Node).filter(Node.id == corpus_id).first() corpus = session.query(Node).filter(Node.id == corpus_id).first()
#print('Number of new ngrams to stem:', #print('Number of new ngrams to stem:',
......
...@@ -2,7 +2,7 @@ import re ...@@ -2,7 +2,7 @@ import re
from admin.utils import PrintException from admin.utils import PrintException
from gargantext_web.db import Node, Ngram, NodeNgram,NodeNodeNgram from gargantext_web.db import Node, Ngram, NodeNgram,NodeNodeNgram
from gargantext_web.db import cache, session, get_or_create_node, bulk_insert from gargantext_web.db import cache, get_session, get_or_create_node, bulk_insert
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy.sql import func from sqlalchemy.sql import func
...@@ -14,6 +14,8 @@ from ngram.tools import insert_ngrams ...@@ -14,6 +14,8 @@ from ngram.tools import insert_ngrams
from analysis.lists import WeightedList, UnweightedList from analysis.lists import WeightedList, UnweightedList
def importStopList(node,filename,language='fr'): def importStopList(node,filename,language='fr'):
session = get_session()
with open(filename, "r") as f: with open(filename, "r") as f:
stop_list = f.read().splitlines() stop_list = f.read().splitlines()
...@@ -76,9 +78,10 @@ def compute_stop(corpus,limit=2000,debug=False): ...@@ -76,9 +78,10 @@ def compute_stop(corpus,limit=2000,debug=False):
''' '''
do some statitics on all stop lists of database of the same type do some statitics on all stop lists of database of the same type
''' '''
stop_node = get_or_create_node(nodetype='StopList', corpus=corpus) stop_node_id = get_or_create_node(nodetype='StopList', corpus=corpus).id
# TODO do a function to get all stop words with social scores # TODO do a function to get all stop words with social scores
session = get_session()
root = session.query(Node).filter(Node.type_id == cache.NodeType['Root'].id).first() root = session.query(Node).filter(Node.type_id == cache.NodeType['Root'].id).first()
root_stop_id = get_or_create_node(nodetype='StopList', corpus=root).id root_stop_id = get_or_create_node(nodetype='StopList', corpus=root).id
...@@ -108,5 +111,5 @@ def compute_stop(corpus,limit=2000,debug=False): ...@@ -108,5 +111,5 @@ def compute_stop(corpus,limit=2000,debug=False):
#print([n for n in ngrams_to_stop]) #print([n for n in ngrams_to_stop])
stop = WeightedList({ n[0] : -1 for n in ngrams_to_stop}) stop = WeightedList({ n[0] : -1 for n in ngrams_to_stop})
stop.save(stop_node.id) stop.save(stop_node_id)
#from admin.env import * #from admin.env import *
from math import log from math import log
from gargantext_web.db import * from gargantext_web.db import *
from gargantext_web.db import get_or_create_node from gargantext_web.db import get_session, get_or_create_node
from admin.utils import DebugTime from admin.utils import DebugTime
...@@ -128,6 +128,7 @@ def compute_tfidf_global(corpus): ...@@ -128,6 +128,7 @@ def compute_tfidf_global(corpus):
dbg.show('calculate terms frequencies sums') dbg.show('calculate terms frequencies sums')
tfidf_node = get_or_create_node(nodetype='Tfidf (global)', corpus=corpus) tfidf_node = get_or_create_node(nodetype='Tfidf (global)', corpus=corpus)
session = get_session()
# update would be better # update would be better
session.query(NodeNodeNgram).filter(NodeNodeNgram.nodex_id==tfidf_node.id).delete() session.query(NodeNodeNgram).filter(NodeNodeNgram.nodex_id==tfidf_node.id).delete()
session.commit() session.commit()
......
from gargantext_web.db import session
from gargantext_web.db import Ngram, NodeNgram, NodeNgramNgram from gargantext_web.db import Ngram, NodeNgram, NodeNgramNgram
from gargantext_web.db import get_cursor, bulk_insert, get_or_create_node from gargantext_web.db import get_cursor, bulk_insert, get_or_create_node, get_session
def insert_ngrams_to_list(list_of_ngrams, corpus, list_type='MapList', erase=True): def insert_ngrams_to_list(list_of_ngrams, corpus, list_type='MapList', erase=True):
''' '''
Works only for Stop and Map Works only for Stop and Map
''' '''
session = get_session()
list_node = get_or_create_node(corpus=corpus, nodetype=list_type) list_node = get_or_create_node(corpus=corpus, nodetype=list_type)
group_node = get_or_create_node(corpus=corpus, nodetype='GroupList') group_node = get_or_create_node(corpus=corpus, nodetype='GroupList')
group_list = (session.query(NodeNgramNgram.ngramy_id) group_list = (session.query(NodeNgramNgram.ngramy_id)
......
...@@ -8,7 +8,7 @@ from gargantext_web.db import get_or_create_node ...@@ -8,7 +8,7 @@ from gargantext_web.db import get_or_create_node
from ngram.mapList import compute_mapList from ngram.mapList import compute_mapList
from ngram.occurrences import compute_occs from ngram.occurrences import compute_occs
from gargantext_web.db import session , Node , NodeNgram from gargantext_web.db import Node , NodeNgram
from admin.utils import WorkflowTracking from admin.utils import WorkflowTracking
......
...@@ -7,6 +7,7 @@ from math import log ...@@ -7,6 +7,7 @@ from math import log
from admin.utils import DebugTime from admin.utils import DebugTime
from gargantext_web.db import * from gargantext_web.db import *
from gargantext_web.db import get_session
from .parsers_config import parsers as _parsers from .parsers_config import parsers as _parsers
from ngram.tools import insert_ngrams from ngram.tools import insert_ngrams
...@@ -30,7 +31,7 @@ parsers = Parsers() ...@@ -30,7 +31,7 @@ parsers = Parsers()
# resources management # resources management
def add_resource(corpus, **kwargs): def add_resource(corpus, **kwargs):
# only for tests # only for tests
session = Session() session = get_session()
resource = Resource(guid=str(random()), **kwargs ) resource = Resource(guid=str(random()), **kwargs )
# User # User
if 'user_id' not in kwargs: if 'user_id' not in kwargs:
...@@ -66,7 +67,9 @@ def add_resource(corpus, **kwargs): ...@@ -66,7 +67,9 @@ def add_resource(corpus, **kwargs):
def parse_resources(corpus, user=None, user_id=None): def parse_resources(corpus, user=None, user_id=None):
dbg = DebugTime('Corpus #%d - parsing' % corpus.id) dbg = DebugTime('Corpus #%d - parsing' % corpus.id)
session = Session()
session = get_session()
corpus_id = corpus.id corpus_id = corpus.id
type_id = cache.NodeType['Document'].id type_id = cache.NodeType['Document'].id
if user_id is None and user is not None: if user_id is None and user is not None:
...@@ -205,6 +208,7 @@ ngramsextractors = NgramsExtractors() ...@@ -205,6 +208,7 @@ ngramsextractors = NgramsExtractors()
def extract_ngrams(corpus, keys, nlp=True): def extract_ngrams(corpus, keys, nlp=True):
dbg = DebugTime('Corpus #%d - ngrams' % corpus.id) dbg = DebugTime('Corpus #%d - ngrams' % corpus.id)
session = get_session()
default_language_iso2 = None if corpus.language_id is None else cache.Language[corpus.language_id].iso2 default_language_iso2 = None if corpus.language_id is None else cache.Language[corpus.language_id].iso2
# query the hyperdata associated with the given keys # query the hyperdata associated with the given keys
columns = [Node.id, Node.language_id] + [Node.hyperdata[key] for key in keys] columns = [Node.id, Node.language_id] + [Node.hyperdata[key] for key in keys]
......
...@@ -11,7 +11,7 @@ import datetime ...@@ -11,7 +11,7 @@ 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, cache, Node, NodeNgram, NodeNgramNgram, NodeNodeNgram, Ngram, Hyperdata, Node_Ngram\ from gargantext_web.db import get_session, cache, Node, NodeNgram, NodeNgramNgram, NodeNodeNgram, Ngram, Hyperdata, Node_Ngram\
, NodeType, Node_Hyperdata , NodeType, Node_Hyperdata
from gargantext_web.validation import validate, ValidationException from gargantext_web.validation import validate, ValidationException
from node import models from node import models
...@@ -65,6 +65,7 @@ class APIException(_APIException): ...@@ -65,6 +65,7 @@ class APIException(_APIException):
self.status_code = code self.status_code = code
self.detail = message self.detail = message
session = get_session()
_operators_dict = { _operators_dict = {
"=": lambda field, value: (field == value), "=": lambda field, value: (field == value),
...@@ -102,6 +103,7 @@ class NodesChildrenNgrams(APIView): ...@@ -102,6 +103,7 @@ class NodesChildrenNgrams(APIView):
def get(self, request, node_id): def get(self, request, node_id):
# query ngrams # query ngrams
ParentNode = aliased(Node) ParentNode = aliased(Node)
session = get_session()
ngrams_query = (session ngrams_query = (session
.query(Ngram.terms, func.sum(Node_Ngram.weight).label('count')) .query(Ngram.terms, func.sum(Node_Ngram.weight).label('count'))
.join(Node_Ngram, Node_Ngram.ngram_id == Ngram.id) .join(Node_Ngram, Node_Ngram.ngram_id == Ngram.id)
...@@ -144,6 +146,7 @@ class NodesChildrenNgramsIds(APIView): ...@@ -144,6 +146,7 @@ class NodesChildrenNgramsIds(APIView):
def get(self, request, node_id): def get(self, request, node_id):
# query ngrams # query ngrams
ParentNode = aliased(Node) ParentNode = aliased(Node)
session = get_session()
ngrams_query = (session ngrams_query = (session
.query(Node.id, func.sum(Node_Ngram.weight).label('count')) .query(Node.id, func.sum(Node_Ngram.weight).label('count'))
.join(Node_Ngram, Node_Ngram.node_id == Node.id) .join(Node_Ngram, Node_Ngram.node_id == Node.id)
...@@ -189,6 +192,7 @@ class Ngrams(APIView): ...@@ -189,6 +192,7 @@ 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)
session = get_session()
corpus = session.query(Node).filter(Node.id==node_id).first() corpus = session.query(Node).filter(Node.id==node_id).first()
group_by = [] group_by = []
results = ['id', 'terms'] results = ['id', 'terms']
...@@ -315,6 +319,7 @@ class NodesChildrenDuplicates(APIView): ...@@ -315,6 +319,7 @@ class NodesChildrenDuplicates(APIView):
raise APIException('Missing GET parameter: "keys"', 400) raise APIException('Missing GET parameter: "keys"', 400)
keys = request.GET['keys'].split(',') keys = request.GET['keys'].split(',')
# hyperdata retrieval # hyperdata retrieval
session = get_session()
hyperdata_query = (session hyperdata_query = (session
.query(Hyperdata) .query(Hyperdata)
.filter(Hyperdata.name.in_(keys)) .filter(Hyperdata.name.in_(keys))
...@@ -398,6 +403,7 @@ def get_metadata(corpus_id_list): ...@@ -398,6 +403,7 @@ def get_metadata(corpus_id_list):
# query hyperdata keys # query hyperdata keys
ParentNode = aliased(Node) ParentNode = aliased(Node)
session = get_session()
hyperdata_query = (session hyperdata_query = (session
.query(Hyperdata) .query(Hyperdata)
.join(Node_Hyperdata, Node_Hyperdata.hyperdata_id == Hyperdata.id) .join(Node_Hyperdata, Node_Hyperdata.hyperdata_id == Hyperdata.id)
...@@ -472,6 +478,7 @@ class ApiNgrams(APIView): ...@@ -472,6 +478,7 @@ class ApiNgrams(APIView):
# query ngrams # query ngrams
ParentNode = aliased(Node) ParentNode = aliased(Node)
session = get_session()
ngrams_query = (session ngrams_query = (session
.query(Ngram.terms, func.sum(Node_Ngram.weight).label('count')) .query(Ngram.terms, func.sum(Node_Ngram.weight).label('count'))
.join(Node_Ngram, Node_Ngram.ngram_id == Ngram.id) .join(Node_Ngram, Node_Ngram.ngram_id == Ngram.id)
...@@ -696,6 +703,7 @@ class NodesList(APIView): ...@@ -696,6 +703,7 @@ class NodesList(APIView):
def get(self, request): def get(self, request):
print("user id : " + str(request.user)) print("user id : " + str(request.user))
session = get_session()
query = (session query = (session
.query(Node.id, Node.name, NodeType.name.label('type')) .query(Node.id, Node.name, NodeType.name.label('type'))
.filter(Node.user_id == int(request.user.id)) .filter(Node.user_id == int(request.user.id))
...@@ -713,6 +721,7 @@ class NodesList(APIView): ...@@ -713,6 +721,7 @@ class NodesList(APIView):
class Nodes(APIView): class Nodes(APIView):
def get(self, request, node_id): def get(self, request, node_id):
session = get_session()
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:
raise APIException('This node does not exist', 404) raise APIException('This node does not exist', 404)
...@@ -733,6 +742,7 @@ class Nodes(APIView): ...@@ -733,6 +742,7 @@ class Nodes(APIView):
def delete(self, request, node_id): def delete(self, request, node_id):
user = request.user user = request.user
session = get_session()
node = session.query(Node).filter(Node.id == node_id).first() node = session.query(Node).filter(Node.id == node_id).first()
msgres = str() msgres = str()
...@@ -752,6 +762,7 @@ class CorpusController: ...@@ -752,6 +762,7 @@ class CorpusController:
corpus_id = int(corpus_id) corpus_id = int(corpus_id)
except: except:
raise ValidationError('Corpora are identified by an integer.', 400) raise ValidationError('Corpora are identified by an integer.', 400)
session = get_session()
corpusQuery = session.query(Node).filter(Node.id == corpus_id).first() corpusQuery = session.query(Node).filter(Node.id == corpus_id).first()
# print(str(corpusQuery)) # print(str(corpusQuery))
# raise Http404("404 error.") # raise Http404("404 error.")
...@@ -773,6 +784,7 @@ class CorpusController: ...@@ -773,6 +784,7 @@ class CorpusController:
# build query # build query
ParentNode = aliased(Node) ParentNode = aliased(Node)
session = get_session()
query = (session query = (session
.query(Ngram.terms, func.count('*')) .query(Ngram.terms, func.count('*'))
.join(Node_Ngram, Node_Ngram.ngram_id == Ngram.id) .join(Node_Ngram, Node_Ngram.ngram_id == Ngram.id)
......
from rest_v1_0.api import APIView, APIException, JsonHttpResponse, CsvHttpResponse from rest_v1_0.api import APIView, APIException, JsonHttpResponse, CsvHttpResponse
from rest_framework.authentication import SessionAuthentication, BasicAuthentication from rest_framework.authentication import SessionAuthentication, BasicAuthentication
from gargantext_web.db import session, Node from gargantext_web.db import get_session, Node
from analysis.functions import get_cooc from analysis.functions import get_cooc
class Graph(APIView): class Graph(APIView):
authentication_classes = (SessionAuthentication, BasicAuthentication) authentication_classes = (SessionAuthentication, BasicAuthentication)
session = get_session()
def get(self, request, corpus_id): def get(self, request, corpus_id):
''' '''
Graph.get :: Get graph data as REST api. Graph.get :: Get graph data as REST api.
......
...@@ -16,7 +16,7 @@ from gargantext_web.db import cache ...@@ -16,7 +16,7 @@ from gargantext_web.db import cache
from gargantext_web.validation import validate, ValidationException from gargantext_web.validation import validate, ValidationException
from gargantext_web.db import session, Node, NodeNgram, NodeNgramNgram\ from gargantext_web.db import get_session, Node, NodeNgram, NodeNgramNgram\
, NodeNodeNgram, Ngram, Hyperdata, Node_Ngram, get_or_create_node , NodeNodeNgram, Ngram, Hyperdata, Node_Ngram, get_or_create_node
...@@ -84,6 +84,7 @@ class List(APIView): ...@@ -84,6 +84,7 @@ class List(APIView):
start_ = time.time() start_ = time.time()
session = get_session()
nodes_ngrams = session.query(Ngram.id , Ngram.terms).filter( Ngram.id.in_( list(ngram_ids.keys()))).all() nodes_ngrams = session.query(Ngram.id , Ngram.terms).filter( Ngram.id.in_( list(ngram_ids.keys()))).all()
for node in nodes_ngrams: for node in nodes_ngrams:
if node.id in ngram_ids: if node.id in ngram_ids:
...@@ -125,6 +126,7 @@ class List(APIView): ...@@ -125,6 +126,7 @@ class List(APIView):
def get(self, request, corpus_id , list_name ): def get(self, request, corpus_id , list_name ):
if not request.user.is_authenticated(): if not request.user.is_authenticated():
return JsonHttpResponse( {"request" : "forbidden"} ) return JsonHttpResponse( {"request" : "forbidden"} )
session = get_session()
corpus = session.query(Node).filter( Node.id==corpus_id ).first() corpus = session.query(Node).filter( Node.id==corpus_id ).first()
# if corpus==None: # if corpus==None:
# return JsonHttpResponse( {"request" : "forbidden"} ) # return JsonHttpResponse( {"request" : "forbidden"} )
...@@ -162,6 +164,7 @@ class Ngrams(APIView): ...@@ -162,6 +164,7 @@ class Ngrams(APIView):
def get(self, request, node_id): def get(self, request, node_id):
if not request.user.is_authenticated(): if not request.user.is_authenticated():
return JsonHttpResponse( {"request" : "forbidden"} ) return JsonHttpResponse( {"request" : "forbidden"} )
session = get_session()
corpus = session.query(Node).filter( Node.id==node_id).first() corpus = session.query(Node).filter( Node.id==node_id).first()
# if corpus==None: # if corpus==None:
# return JsonHttpResponse( {"request" : "forbidden"} ) # return JsonHttpResponse( {"request" : "forbidden"} )
...@@ -340,6 +343,7 @@ class Group(APIView): ...@@ -340,6 +343,7 @@ class Group(APIView):
''' '''
def get_group_id(self , node_id , user_id): def get_group_id(self , node_id , user_id):
node_id = int(node_id) node_id = int(node_id)
session = get_session()
corpus = session.query(Node).filter( Node.id==node_id).first() corpus = session.query(Node).filter( Node.id==node_id).first()
if corpus==None: return None if corpus==None: return None
group = get_or_create_node(corpus=corpus, nodetype='Group') group = get_or_create_node(corpus=corpus, nodetype='Group')
...@@ -370,6 +374,8 @@ class Group(APIView): ...@@ -370,6 +374,8 @@ class Group(APIView):
import networkx as nx import networkx as nx
G = nx.Graph() G = nx.Graph()
DG = nx.DiGraph() DG = nx.DiGraph()
session = get_session()
ngrams_ngrams = (session ngrams_ngrams = (session
.query(NodeNgramNgram) .query(NodeNgramNgram)
.filter(NodeNgramNgram.node_id==group_id) .filter(NodeNgramNgram.node_id==group_id)
...@@ -416,6 +422,8 @@ class Group(APIView): ...@@ -416,6 +422,8 @@ class Group(APIView):
def delete(self, request, corpus_id): def delete(self, request, corpus_id):
# input validation # input validation
session = get_session()
input = validate(request.DATA, {'data' : {'source': int, 'target': list}}) input = validate(request.DATA, {'data' : {'source': int, 'target': list}})
group_id = get_group_id(corpus_id , request.user.id) group_id = get_group_id(corpus_id , request.user.id)
...@@ -434,6 +442,7 @@ class Group(APIView): ...@@ -434,6 +442,7 @@ class Group(APIView):
raise APIException('Missing parameter: "{\'data\' : [\'source\': Int, \'target\': [Int]}"', 400) raise APIException('Missing parameter: "{\'data\' : [\'source\': Int, \'target\': [Int]}"', 400)
def put(self , request , corpus_id ): def put(self , request , corpus_id ):
session = get_session()
group_rawreq = dict(request.data) group_rawreq = dict(request.data)
...@@ -448,6 +457,8 @@ class Group(APIView): ...@@ -448,6 +457,8 @@ class Group(APIView):
gdict.append(subform) gdict.append(subform)
GDict.append( gdict ) GDict.append( gdict )
existing_group_id = self.get_group_id(corpus_id , request.user.id) existing_group_id = self.get_group_id(corpus_id , request.user.id)
session = get_session()
grouped_ngrams = (session grouped_ngrams = (session
.query(NodeNgramNgram) .query(NodeNgramNgram)
.filter(NodeNgramNgram.node_id==existing_group_id) .filter(NodeNgramNgram.node_id==existing_group_id)
...@@ -569,6 +580,7 @@ class Keep(APIView): ...@@ -569,6 +580,7 @@ class Keep(APIView):
""" """
renderer_classes = (JSONRenderer,) renderer_classes = (JSONRenderer,)
authentication_classes = (SessionAuthentication, BasicAuthentication) authentication_classes = (SessionAuthentication, BasicAuthentication)
session = get_session()
def get (self, request, corpus_id): def get (self, request, corpus_id):
# list_id = session.query(Node).filter(Node.id==list_id).first() # list_id = session.query(Node).filter(Node.id==list_id).first()
......
...@@ -42,7 +42,7 @@ from gargantext_web import settings ...@@ -42,7 +42,7 @@ from gargantext_web import settings
# from gargantext_web.db import * # from gargantext_web.db import *
from gargantext_web.db import session, cache, Node, NodeNgram from gargantext_web.db import get_session, cache, Node, NodeNgram
from sqlalchemy import func from sqlalchemy import func
from rest_v1_0.api import JsonHttpResponse from rest_v1_0.api import JsonHttpResponse
...@@ -65,6 +65,8 @@ def get_ngrams(request , project_id , corpus_id ): ...@@ -65,6 +65,8 @@ def get_ngrams(request , project_id , corpus_id ):
project = cache.Node[int(project_id)] project = cache.Node[int(project_id)]
corpus = cache.Node[int(corpus_id)] corpus = cache.Node[int(corpus_id)]
type_doc_id = cache.NodeType['Document'].id type_doc_id = cache.NodeType['Document'].id
session = get_session()
number = session.query(func.count(Node.id)).filter(Node.parent_id==corpus_id, Node.type_id==type_doc_id).all()[0][0] number = session.query(func.count(Node.id)).filter(Node.parent_id==corpus_id, Node.type_id==type_doc_id).all()[0][0]
myamlist_type_id = cache.NodeType['MiamList'].id myamlist_type_id = cache.NodeType['MiamList'].id
miamlist = session.query(Node).filter(Node.parent_id==corpus_id , Node.type_id == myamlist_type_id ).first() miamlist = session.query(Node).filter(Node.parent_id==corpus_id , Node.type_id == myamlist_type_id ).first()
...@@ -121,6 +123,8 @@ def get_journals(request , project_id , corpus_id ): ...@@ -121,6 +123,8 @@ def get_journals(request , project_id , corpus_id ):
project = cache.Node[int(project_id)] project = cache.Node[int(project_id)]
corpus = cache.Node[int(corpus_id)] corpus = cache.Node[int(corpus_id)]
type_doc_id = cache.NodeType['Document'].id type_doc_id = cache.NodeType['Document'].id
session = get_session()
number = session.query(func.count(Node.id)).filter(Node.parent_id==corpus_id, Node.type_id==type_doc_id).all()[0][0] number = session.query(func.count(Node.id)).filter(Node.parent_id==corpus_id, Node.type_id==type_doc_id).all()[0][0]
the_query = """ SELECT hyperdata FROM node_node WHERE id=%d """ % ( int(corpus_id) ) the_query = """ SELECT hyperdata FROM node_node WHERE id=%d """ % ( int(corpus_id) )
...@@ -150,7 +154,10 @@ def get_journals_json(request , project_id, corpus_id ): ...@@ -150,7 +154,10 @@ def get_journals_json(request , project_id, corpus_id ):
user_id = request.user.id user_id = request.user.id
document_type_id = cache.NodeType['Document'].id document_type_id = cache.NodeType['Document'].id
session = get_session()
documents = session.query(Node).filter( Node.parent_id==corpus_id , Node.type_id == document_type_id ).all() documents = session.query(Node).filter( Node.parent_id==corpus_id , Node.type_id == document_type_id ).all()
for doc in documents: for doc in documents:
if "journal" in doc.hyperdata: if "journal" in doc.hyperdata:
journal = doc.hyperdata["journal"] journal = doc.hyperdata["journal"]
...@@ -164,6 +171,8 @@ def get_journals_json(request , project_id, corpus_id ): ...@@ -164,6 +171,8 @@ def get_journals_json(request , project_id, corpus_id ):
def get_corpuses( request , node_ids ): def get_corpuses( request , node_ids ):
ngrams = [int(i) for i in node_ids.split("+") ] ngrams = [int(i) for i in node_ids.split("+") ]
session = get_session()
results = session.query(Node.id,Node.hyperdata).filter(Node.id.in_(ngrams) ).all() results = session.query(Node.id,Node.hyperdata).filter(Node.id.in_(ngrams) ).all()
for r in results: for r in results:
print(r) print(r)
...@@ -232,11 +241,15 @@ def graph_share(request, generic=100, specific=100): ...@@ -232,11 +241,15 @@ def graph_share(request, generic=100, specific=100):
# resource_id = cache.ResourceType["Pubmed (xml format)"].id # resource_id = cache.ResourceType["Pubmed (xml format)"].id
# corpus = session.query(Node).filter( Node.type_id==resource_id , Node.user_id==user_id , Node.id==corpus_id , Node.type_id == cache.NodeType['Corpus'].id ).first() # corpus = session.query(Node).filter( Node.type_id==resource_id , Node.user_id==user_id , Node.id==corpus_id , Node.type_id == cache.NodeType['Corpus'].id ).first()
# if corpus==None: return JsonHttpResponse( {"request" : "forbidden"} ) # if corpus==None: return JsonHttpResponse( {"request" : "forbidden"} )
session = get_session()
miamlist = session.query(Node).filter( Node.user_id==user_id , Node.parent_id==corpus_id , Node.type_id == cache.NodeType['MiamList'].id ).first() miamlist = session.query(Node).filter( Node.user_id==user_id , Node.parent_id==corpus_id , Node.type_id == cache.NodeType['MiamList'].id ).first()
if miamlist==None: return JsonHttpResponse( {"request" : "forbidden"} ) if miamlist==None: return JsonHttpResponse( {"request" : "forbidden"} )
graphurl = "node_link_share.json?token="+request.GET["token"] graphurl = "node_link_share.json?token="+request.GET["token"]
date = datetime.datetime.now() date = datetime.datetime.now()
t = get_template('explorer_share.html') t = get_template('explorer_share.html')
html = t.render(Context({\ html = t.render(Context({\
'debug': settings.DEBUG, 'debug': settings.DEBUG,
'date' : date,\ 'date' : date,\
...@@ -263,6 +276,8 @@ def node_link_share(request): ...@@ -263,6 +276,8 @@ def node_link_share(request):
from analysis.functions import get_cooc from analysis.functions import get_cooc
data = [] data = []
session = get_session()
corpus = session.query(Node).filter( Node.user_id==user_id , Node.id==corpus_id).first() corpus = session.query(Node).filter( Node.user_id==user_id , Node.id==corpus_id).first()
data = get_cooc(request=request, corpus=corpus, type="node_link") data = get_cooc(request=request, corpus=corpus, type="node_link")
...@@ -296,7 +311,10 @@ def share_resource(request , resource_id , group_id) : ...@@ -296,7 +311,10 @@ def share_resource(request , resource_id , group_id) :
# [ getting all childs ids of this project ] # [ getting all childs ids of this project ]
ids2changeowner = [ project2share.id ] ids2changeowner = [ project2share.id ]
session = get_session()
corpuses = session.query(Node.id).filter(Node.user_id == request.user.id, Node.parent_id==resource_id , Node.type_id == cache.NodeType["Corpus"].id ).all() corpuses = session.query(Node.id).filter(Node.user_id == request.user.id, Node.parent_id==resource_id , Node.type_id == cache.NodeType["Corpus"].id ).all()
for corpus in corpuses: for corpus in corpuses:
ids2changeowner.append(corpus.id) ids2changeowner.append(corpus.id)
lists = session.query(Node.id,Node.name).filter(Node.user_id == request.user.id, Node.parent_id==corpus.id ).all() lists = session.query(Node.id,Node.name).filter(Node.user_id == request.user.id, Node.parent_id==corpus.id ).all()
......
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