from django.db import models from django.utils import timezone from django_hstore import hstore from cte_tree.models import CTENode, Manager #from cte_tree.fields import DepthField, PathField, OrderingField from time import time from django.contrib.auth.models import User from collections import defaultdict # Some usefull functions def upload_to(instance, filename): return 'corpora/%s/%s' % (instance.user.username, filename) #return 'corpora/%s/%f/%s' % (instance.user.username, time(), filename) # All classes here class Language(models.Model): iso2 = models.CharField(max_length=2, unique=True) iso3 = models.CharField(max_length=3) fullname = models.CharField(max_length=255) implemented = models.BooleanField(blank=True) def __str__(self): return self.fullname class DatabaseType(models.Model): name = models.CharField(max_length=255) def __str__(self): return self.name class Ngram(models.Model): language = models.ForeignKey(Language, blank=True, null=True, on_delete=models.SET_NULL) n = models.IntegerField() terms = models.CharField(max_length=255) class Resource(models.Model): guid = models.CharField(max_length=255) bdd_type = models.ForeignKey(DatabaseType, blank=True, null=True) #file = models.FileField(upload_to=upload_to, blank=True) class NodeType(models.Model): name = models.CharField(max_length=200) def __str__(self): return self.name class Node(CTENode): objects = Manager() user = models.ForeignKey(User) type = models.ForeignKey(NodeType) name = models.CharField(max_length=200) language = models.ForeignKey(Language, blank=True, null=True, on_delete=models.SET_NULL) date = models.DateField(default=timezone.now, blank=True) metadata = hstore.DictionaryField(blank=True) fichier = models.FileField(upload_to=upload_to, blank=True) #resource = models.ForeignKey(Resource, blank=True, null=True) #ngrams = models.ManyToManyField(NGrams) def __str__(self): 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 Node_Ngram(models.Model): node = models.ForeignKey(Node, on_delete=models.CASCADE) ngram = models.ForeignKey(Ngram, on_delete=models.CASCADE) occurences = models.IntegerField() class Project(Node): class Meta: proxy=True class Corpus(Node): class Meta: proxy=True verbose_name_plural = 'Corpora' class Document(Node): class Meta: proxy=True