Commit 89762429 authored by Mathieu Rodic's avatar Mathieu Rodic

[BUGFIX] Fixed problem with NodeManager in models.py

(could not access CTE methods such as .descendants(), etc.)
parent 5fc7c2d7
...@@ -29,15 +29,43 @@ _ngrams_order_columns = { ...@@ -29,15 +29,43 @@ _ngrams_order_columns = {
class CorpusController: class CorpusController:
@staticmethod @classmethod
def ngrams(request, corpus_id): def get(cls, corpus_id):
# parameters retrieval and control try:
corpus_id = int(corpus_id)
except:
raise ValidationError('Corpora are identified by an integer.', 400)
corpusQuery = Node.objects.filter(id = corpus_id) corpusQuery = Node.objects.filter(id = corpus_id)
if not corpusQuery: if not corpusQuery:
raise Http404("No such corpus.") raise Http404("No such corpus: %d" % (corpus_id, ))
corpus = corpusQuery.first() corpus = corpusQuery.first()
if corpus.type.name != 'Corpus': if corpus.type.name != 'Corpus':
raise Http404("No such corpus.") raise Http404("No such corpus. %d" % (corpus_id, ))
return corpus
@classmethod
def get_children(cls, corpus_id):
corpus = cls.get(corpus_id)
children = Node.objects.descendants(corpus)
# children = Node.objects.filter(id=corpus_id).descendants()
# children = cls.get(corpus_id).descendants()
# childrenQuery = (cls.get(corpus_id)
# .children
# # .children()
# # .filter()
# .all()
# )
return HttpResponse("str(children.query)")
return HttpResponse(str(children.query))
# return childrenQuery
@classmethod
def ngrams(cls, request, corpus_id):
# parameters retrieval and validation
corpus = cls.get(corpus_id)
order = request.GET.get('order', 'frequency') order = request.GET.get('order', 'frequency')
if order not in _ngrams_order_columns: if order not in _ngrams_order_columns:
raise ValidationError('The order parameter should take one of the following values: ' + ', '.join(_ngrams_order_columns), 400) raise ValidationError('The order parameter should take one of the following values: ' + ', '.join(_ngrams_order_columns), 400)
...@@ -58,15 +86,10 @@ class CorpusController: ...@@ -58,15 +86,10 @@ class CorpusController:
"list" : [ngram.terms for ngram in ngramsQuery], "list" : [ngram.terms for ngram in ngramsQuery],
}) })
@staticmethod @classmethod
def metadata(request, corpus_id): def metadata(cls, request, corpus_id):
# parameters retrieval and control # parameters retrieval and validation
corpusQuery = Node.objects.filter(id = corpus_id) corpus = cls.get(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 # query building
cursor = connection.cursor() cursor = connection.cursor()
cursor.execute( cursor.execute(
...@@ -87,15 +110,11 @@ class CorpusController: ...@@ -87,15 +110,11 @@ class CorpusController:
"list" : [row[0] for row in cursor.fetchall()], "list" : [row[0] for row in cursor.fetchall()],
}) })
@staticmethod @classmethod
def data(request, corpus_id): def data(cls, request, corpus_id):
# parameters retrieval and control # parameters retrieval and validation
corpusQuery = Node.objects.filter(id = corpus_id) return cls.get_children(corpus_id)
if not corpusQuery: corpus = cls.get(corpus_id)
raise Http404("No such corpus.")
corpus = corpusQuery.first()
if corpus.type.name != 'Corpus':
raise Http404("No such corpus.")
# query building: initialization # query building: initialization
columns = [] columns = []
conditions = [] conditions = []
......
...@@ -4,7 +4,7 @@ from django.utils import timezone ...@@ -4,7 +4,7 @@ from django.utils import timezone
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django_hstore import hstore from django_hstore import hstore
from cte_tree.models import CTENode, Manager from cte_tree.models import CTENode, CTENodeManager
#from cte_tree.fields import DepthField, PathField, OrderingField #from cte_tree.fields import DepthField, PathField, OrderingField
from parsing.Caches import LanguagesCache, NgramsExtractorsCache, NgramsCaches from parsing.Caches import LanguagesCache, NgramsExtractorsCache, NgramsCaches
...@@ -68,7 +68,7 @@ class NodeQuerySet(models.query.QuerySet): ...@@ -68,7 +68,7 @@ class NodeQuerySet(models.query.QuerySet):
for node in self: for node in self:
node.extract_ngrams(keys, ngramsextractorscache, ngramscaches) node.extract_ngrams(keys, ngramsextractorscache, ngramscaches)
class NodeManager(models.Manager): class NodeManager(CTENodeManager):
"""Methods available from Node.object.""" """Methods available from Node.object."""
def get_queryset(self): def get_queryset(self):
return NodeQuerySet(self.model) return NodeQuerySet(self.model)
......
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