Commit 3d76dc07 authored by Administrator's avatar Administrator

Merge branch 'dbmigration'

Towards node db
parents 3d16819e f5839388
Here informations for installation:
I - Local Installation
1) Create virtualenv with python version 3.4
2) pip install -r requirements.txt
3) Manually install nltk (inside the sources)
nltk==3.0a4
4) adapt database configuration in gargantext_web settings
(Development done on postgresql)
5) source env/bin/activate
6) ./manage.py runserver
That's it
...@@ -71,13 +71,13 @@ class CorpusAdmin(admin.ModelAdmin): ...@@ -71,13 +71,13 @@ class CorpusAdmin(admin.ModelAdmin):
#importateur.importer(obj) #importateur.importer(obj)
except Exception as e: except Exception as e:
print("Error importateur", e) print("Error importateur", e)
class DocumentAdmin(admin.ModelAdmin): class DocumentAdmin(admin.ModelAdmin):
exclude = ('user',) exclude = ('user',)
list_display = ('date', 'source', 'title') list_display = ('date', 'source', 'title')
list_per_page = 20 list_per_page = 20
list_filter = ('project', 'corpus') list_filter = ('project', 'corpus')
search_fields = ('title',) search_fields = ('title',)
def has_change_permission(self, request, obj=None): def has_change_permission(self, request, obj=None):
has_class_permission = super(DocumentAdmin, self).has_change_permission(request, obj) has_class_permission = super(DocumentAdmin, self).has_change_permission(request, obj)
......
...@@ -60,8 +60,9 @@ INSTALLED_APPS = ( ...@@ -60,8 +60,9 @@ INSTALLED_APPS = (
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'django_extensions', 'django_extensions',
#'south', #'south',
'documents', #'documents',
'node', 'node',
'ngram',
'django_hstore', 'django_hstore',
) )
...@@ -84,7 +85,7 @@ WSGI_APPLICATION = 'wsgi.application' ...@@ -84,7 +85,7 @@ WSGI_APPLICATION = 'wsgi.application'
DATABASES = { DATABASES = {
'default': { 'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2', 'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'gargantext', 'NAME': 'ggdev',
'USER': 'alexandre', 'USER': 'alexandre',
'PASSWORD': 'C8kdcUrAQy66U', 'PASSWORD': 'C8kdcUrAQy66U',
'HOST': '127.0.0.1', 'HOST': '127.0.0.1',
......
...@@ -6,6 +6,7 @@ from django.template.loader import get_template ...@@ -6,6 +6,7 @@ from django.template.loader import get_template
from django.template import Context from django.template import Context
from documents.models import Project, Corpus, Document from documents.models import Project, Corpus, Document
from node.models import Node, NodeType
from django.contrib.auth.models import User from django.contrib.auth.models import User
...@@ -73,10 +74,12 @@ def projects(request): ...@@ -73,10 +74,12 @@ def projects(request):
return redirect('/login/?next=%s' % request.path) return redirect('/login/?next=%s' % request.path)
t = get_template('projects.html') t = get_template('projects.html')
user = request.user user = request.user
date = datetime.datetime.now() date = datetime.datetime.now()
projects = Project.objects.all().filter(user=request.user.pk).order_by("-date")
project = NodeType.objects.get(name='Project')
projects = Node.objects.filter(user=user, type_id = project.id).order_by("-date")
number = len(projects) number = len(projects)
html = t.render(Context({\ html = t.render(Context({\
...@@ -88,12 +91,12 @@ def projects(request): ...@@ -88,12 +91,12 @@ def projects(request):
return HttpResponse(html) return HttpResponse(html)
def project(request, p_id): def project(request, project_id):
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)
try: try:
offset = str(p_id) offset = str(project_id)
except ValueError: except ValueError:
raise Http404() raise Http404()
...@@ -101,10 +104,11 @@ def project(request, p_id): ...@@ -101,10 +104,11 @@ def project(request, p_id):
user = request.user user = request.user
date = datetime.datetime.now() date = datetime.datetime.now()
project = Project.objects.get(pk=p_id)
corpora = Corpus.objects.all().filter(project_id=p_id,user=request.user.pk)
number = len(corpora)
project = Node.objects.get(id=project_id)
corpora = project.get_children()
number = len(corpora)
html = t.render(Context({\ html = t.render(Context({\
'user': user,\ 'user': user,\
'date': date,\ 'date': date,\
...@@ -112,7 +116,7 @@ def project(request, p_id): ...@@ -112,7 +116,7 @@ def project(request, p_id):
'corpora' : corpora,\ 'corpora' : corpora,\
'number': number,\ 'number': number,\
})) }))
return HttpResponse(html) return HttpResponse(html)
def corpus(request, p_id, c_id): def corpus(request, p_id, c_id):
......
from django.contrib import admin from django.contrib import admin
# Register your models here. from ngram.models import Ngram, NodeNgram, NodeNgramNgram
admin.site.register(Ngram)
admin.site.register(NodeNgram)
admin.site.register(NodeNgramNgram)
from django.db import models from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from node.models import Node
class Ngram(models.Model):
terms = models.TextField(unique=True)
n = models.IntegerField()
def __str__(self):
return "[%d] %s" % (self.pk, self.terms)
class NodeNgram(models.Model):
node = models.ForeignKey(Node)
ngram = models.ForeignKey(Ngram, related_name="nodengram")
def __str__(self):
return "%s: %s" % (self.node.name, self.ngram.terms)
class NodeNgramNgram(models.Model):
node = models.ForeignKey(Node)
ngramX = models.ForeignKey(Ngram, related_name="nodengramngramx")
ngramY = models.ForeignKey(Ngram, related_name="nodengramngramy")
score = models.FloatField(default=0)
def __str__(self):
return "%s: %s / %s" % (self.node.name, self.ngramX.terms, self.ngramY.terms)
# Create your models here.
from django.contrib import admin from django.contrib import admin
from django.forms import ModelForm, ModelChoiceField
# Register your models here. from node.models import NodeType, Node, Project, Corpus, Document
from node.models import NodeType, Node, Ngram, NodeNgramNgram, Project
class NodeAdmin(admin.ModelAdmin): class NodeAdmin(admin.ModelAdmin):
...@@ -39,17 +38,19 @@ class NodeAdmin(admin.ModelAdmin): ...@@ -39,17 +38,19 @@ class NodeAdmin(admin.ModelAdmin):
nodeTypeParent = NodeType.objects.get(name=self._parent_nodetype_name) nodeTypeParent = NodeType.objects.get(name=self._parent_nodetype_name)
try: try:
nodeParent = Node.objects.get(type = nodeTypeParent, user = request.user) if nodeType.name == 'Project':
nodeParent = Node.objects.get(type = nodeTypeParent, user = request.user)
else:
nodeParent = Node.objects.get(id = request.POST['parent'])
except: except:
nodeParent = Node.add_root(type = nodeTypeParent, user = request.user) nodeParent = Node.add_root(type = nodeTypeParent, user = request.user, name=request.user.username)
obj.user = request.user
obj.user = request.user
node = nodeParent.add_child(type = nodeType,\ node = nodeParent.add_child(type = nodeType,\
user = request.user,\ user = request.user,\
name=obj.name,\ name = obj.name,\
file=obj.file,\ file = obj.file,\
metadata=obj.metadata) metadata= obj.metadata)
#nodeParent.save() #nodeParent.save()
#node.save() #node.save()
...@@ -58,27 +59,44 @@ class NodeAdmin(admin.ModelAdmin): ...@@ -58,27 +59,44 @@ class NodeAdmin(admin.ModelAdmin):
else: else:
obj.save() obj.save()
######################################################################
class ProjectAdmin(NodeAdmin): class ProjectAdmin(NodeAdmin):
_parent_nodetype_name = 'Root' _parent_nodetype_name = 'Root'
_nodetype_name = 'Project' _nodetype_name = 'Project'
######################################################################
class CorpusForm(ModelForm):
#parent = ModelChoiceField(Node.objects.filter(user_id=request.user.id, type_id=2))
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request',None)
super(CorpusForm, self).__init__(*args, **kwargs)
#self.request = kwargs.pop('request', None)
#self.request = kwargs.pop("request")
#print(self.request)
parent = ModelChoiceField(Node.objects.filter(user_id=1, type_id=2))
class CorpusAdmin(NodeAdmin): class CorpusAdmin(NodeAdmin):
_parent_nodetype_name = 'Project' _parent_nodetype_name = 'Project'
_nodetype_name = 'Corpus' _nodetype_name = 'Corpus'
form = CorpusForm
######################################################################
class DocumentForm(ModelForm):
parent = ModelChoiceField(Node.objects.filter(user_id=1, type_id=3))
class DocumentAdmin(NodeAdmin): class DocumentAdmin(NodeAdmin):
_parent_nodetype_name = 'Corpus' _parent_nodetype_name = 'Corpus'
_nodetype_name = 'Document' _nodetype_name = 'Document'
form = DocumentForm
admin.site.register(NodeType) admin.site.register(NodeType)
admin.site.register(Project, ProjectAdmin) admin.site.register(Project, ProjectAdmin)
#admin.site.register(Corpus, CorpusAdmin) admin.site.register(Corpus, CorpusAdmin)
#admin.site.register(Document, DocumentAdmin) admin.site.register(Document, DocumentAdmin)
admin.site.register(Node)
admin.site.register(Ngram)
admin.site.register(NodeNgramNgram)
from django.db import models from django.db import models
from django.utils import timezone from django.utils import timezone
from django.contrib.auth.models import User from django.contrib.auth.models import User
...@@ -17,7 +16,6 @@ class NodeType(models.Model): ...@@ -17,7 +16,6 @@ class NodeType(models.Model):
def __str__(self): def __str__(self):
return self.name return self.name
class Node(MP_Node): class Node(MP_Node):
#parent = models.ForeignKey('self', related_name='children_set', null=True, db_index=True) #parent = models.ForeignKey('self', related_name='children_set', null=True, db_index=True)
user = models.ForeignKey(User) user = models.ForeignKey(User)
...@@ -32,6 +30,10 @@ class Node(MP_Node): ...@@ -32,6 +30,10 @@ class Node(MP_Node):
def __str__(self): def __str__(self):
return self.name return self.name
def liste(self, user):
for noeud in Node.objects.filter(user=user):
print(noeud.depth * " " + "[%d] %d" % (noeud.pk, noeud.name))
class Project(Node): class Project(Node):
class Meta: class Meta:
proxy=True proxy=True
...@@ -39,30 +41,10 @@ class Project(Node): ...@@ -39,30 +41,10 @@ class Project(Node):
class Corpus(Node): class Corpus(Node):
class Meta: class Meta:
proxy=True proxy=True
verbose_name_plural = 'Corpora'
class Document(Node): class Document(Node):
class Meta: class Meta:
proxy=True proxy=True
class Ngram(models.Model):
terms = models.TextField(unique=True)
n = models.IntegerField()
# post-tag = models.ManyToMany(blank=True)
# ajouter une table stem ?
def __str__(self):
return self.terms
class NodeNgramNgram(models.Model):
ngramX = models.ForeignKey(Ngram, related_name="X")
ngramY = models.ForeignKey(Ngram, related_name="Y")
node = models.ForeignKey(Node)
score = models.FloatField(default=0)
def __str__(self):
return self.node
...@@ -5,31 +5,42 @@ MarkupSafe==0.23 ...@@ -5,31 +5,42 @@ MarkupSafe==0.23
Pillow==2.5.3 Pillow==2.5.3
Pygments==1.6 Pygments==1.6
South==1.0 South==1.0
amqp==1.4.6
anyjson==0.3.3
billiard==3.3.0.18
celery==3.1.15
certifi==14.05.14 certifi==14.05.14
cffi==0.8.6
cryptography==0.6
decorator==3.4.0 decorator==3.4.0
django-extensions==1.4.0 django-extensions==1.4.0
django-grappelli==2.5.3 django-grappelli==2.5.3
django-hstore==1.3.1 django-hstore==1.3.1
django-mptt==0.6.1
django-nested-inlines==0.1 django-nested-inlines==0.1
django-treebeard==2.0
graphviz==0.4 graphviz==0.4
ipython==2.2.0 ipython==2.2.0
kombu==3.0.23
lxml==3.3.6 lxml==3.3.6
matplotlib==1.4.0 matplotlib==1.4.0
networkx==1.9 networkx==1.9
nltk==3.0a4
nose==1.3.4 nose==1.3.4
numpy==1.8.2 numpy==1.8.2
pandas==0.14.1 pandas==0.14.1
pexpect-u==2.5.1 pexpect-u==2.5.1
psycopg2==2.5.4 psycopg2==2.5.4
pycparser==2.10
pydot2==1.0.33 pydot2==1.0.33
pyparsing==2.0.2 pyparsing==2.0.2
python-dateutil==2.2 python-dateutil==2.2
pytz==2014.7 pytz==2014.7
pyzmq==14.3.1 pyzmq==14.3.1
readline==6.2.4.1 readline==6.2.4.1
redis==2.10.3
scikit-learn==0.15.1 scikit-learn==0.15.1
scipy==0.14.0 scipy==0.14.0
six==1.7.3 six==1.7.3
sympy==0.7.5 sympy==0.7.5
tornado==4.0.1 tornado==4.0.1
uWSGI==2.0.7
...@@ -16,8 +16,7 @@ ...@@ -16,8 +16,7 @@
<div class="container theme-showcase" role="main"> <div class="container theme-showcase" role="main">
<div class="jumbotron"> <div class="jumbotron">
{% if project %} {% if project %}
<h1>{{ project.title }}</h1> <h1>{{ project.name }}</h1>
<h2> {{ project.subtitle }}</h2>
<h3> {{number}} corpora </h3> <h3> {{number}} corpora </h3>
<p> <p>
<a class="btn btn-primary btn-lg" role="button" href="/admin/documents/corpus/add/">Add a corpus</a></p> <a class="btn btn-primary btn-lg" role="button" href="/admin/documents/corpus/add/">Add a corpus</a></p>
...@@ -32,11 +31,11 @@ ...@@ -32,11 +31,11 @@
{% if corpora %} {% if corpora %}
{% for corpus in corpora %} {% for corpus in corpora %}
<div class="col-md-4"> <div class="col-md-4">
<h3><a href="/project/{{ project.id }}/corpus/{{corpus.id}}">{{ corpus.title }}</a></h3> <h3><a href="/project/{{ project.id }}/corpus/{{corpus.id}}">{{ corpus.name }}</a></h3>
<h4>{{ corpus.subtitle }}</h4> <h4>{{ corpus.subtitle }}</h4>
<p>{{ corpus.language }}, {{ corpus.database}}</p> <p>{{ corpus.language }} {{ corpus.database}}</p>
<h5>Activity:</h5> <h5>Activity:</h5>
<div class="chart" data-percent="50">73%</div> <div class="chart" data-percent="73">73%</div>
</div> </div>
{% endfor %} {% endfor %}
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
{% for project in projects %} {% for project in projects %}
<!--<div class="col-md-offset-7 col-md-4 content" style="background-color:grey">!--> <!--<div class="col-md-offset-7 col-md-4 content" style="background-color:grey">!-->
<div class="col-md-3 content"> <div class="col-md-3 content">
<h3><a href="/project/{{ project.id }}">{{ project.title }}</a></h3> <h3><a href="/project/{{ project.id }}">{{ project.name }}</a></h3>
<h4>{{ project.subtitle }}<h4> <h4>{{ project.subtitle }}<h4>
<h5>Completed:</h5> <h5>Completed:</h5>
<div class="chart" barColor="#fffff" data-percent="75">75%</div> <div class="chart" barColor="#fffff" data-percent="75">75%</div>
......
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