src/core/models/term.py
changeset 0 4095911a7830
child 15 8440c36660e5
equal deleted inserted replaced
-1:000000000000 0:4095911a7830
       
     1 # -*- coding: utf-8 -*-
       
     2 '''
       
     3 Created on Jun 8, 2013
       
     4 
       
     5 @author: ymh
       
     6 '''
       
     7 
       
     8 from django.db import models
       
     9 from django.contrib.auth import get_user_model
       
    10 from .. import settings 
       
    11 import datetime
       
    12 import logging
       
    13 
       
    14 logger = logging.getLogger(__name__)
       
    15 
       
    16 User = get_user_model()
       
    17 
       
    18 TERM_URL_STATUS_CHOICES = (
       
    19     (0, "null_result"),
       
    20     (1, "redirection"),
       
    21     (2, "homonyme"),
       
    22     (3, "match"),
       
    23     (4, "unsematized"),
       
    24 )
       
    25 
       
    26 TERM_URL_STATUS_DICT = {
       
    27     "null_result":0,
       
    28     "redirection":1,
       
    29     "homonyme":2,
       
    30     "match":3,
       
    31     "unsemantized":4,
       
    32 }
       
    33     
       
    34 class Thesaurus(models.Model):
       
    35     label = models.CharField(max_length=128, unique=True, blank=False, null=False, db_index=True)
       
    36     title = models.CharField(max_length=1024, unique=False, blank=False, null=False, db_index=False)
       
    37     description = models.TextField(blank=True, null=True)    
       
    38     uri = models.URLField(max_length=2048, blank=True, null=True, db_index=True)
       
    39     
       
    40     class Meta:
       
    41         app_label = 'core'
       
    42         ordering = ['label']
       
    43         
       
    44     def __unicode__(self):
       
    45         return self.label
       
    46 
       
    47 
       
    48 class Term(models.Model):
       
    49     label = models.CharField(max_length=1024, unique=False, blank=False, null=False, db_index=True)
       
    50     lang = models.CharField(max_length=128, unique=False, blank=True, null=True, db_index=True)
       
    51     uri = models.URLField(max_length=2048, blank=True, null=True, db_index=True)
       
    52     normalized_label = models.CharField(max_length=1024, unique=False, blank=False, null=False, db_index=True, editable=False)
       
    53     wp_label = models.CharField(max_length=1024, unique=False, blank=True, null=True, db_index=True)
       
    54     wp_alternative_label = models.CharField(max_length=1024, unique=False, blank=True, null=True, db_index=True)
       
    55     thesaurus = models.ForeignKey(Thesaurus, blank=False, null=False, db_index=True)
       
    56     created_at = models.DateTimeField(auto_now_add=True)
       
    57     wikipedia_url = models.URLField(max_length=2048, blank=True, null=True, db_index=True)
       
    58     wikipedia_pageid = models.BigIntegerField(unique=False, blank=True, null=True, db_index=True)
       
    59     wikipedia_revision_id = models.BigIntegerField(unique=False, blank=True, null=True)
       
    60     alternative_wikipedia_url = models.URLField(max_length=2048, blank=True, null=True, db_index=True)
       
    61     alternative_wikipedia_pageid = models.BigIntegerField(unique=False, blank=True, null=True, db_index=True)
       
    62     url_status = models.IntegerField(choices=TERM_URL_STATUS_CHOICES, blank=True, null=True, default=None, db_index=True)
       
    63     dbpedia_uri = models.URLField(max_length=2048, blank=True, null=True, db_index=True)
       
    64     validation_date = models.DateTimeField(null=True, blank=True, serialize=False)
       
    65     validated = models.BooleanField(default=False, db_index=True)
       
    66     validator = models.ForeignKey(User, null=True, blank=True, serialize=False)
       
    67     
       
    68     @property
       
    69     def alternative_labels_str(self):
       
    70         return " | ".join([l.label for l in self.alternative_labels.all()])
       
    71     
       
    72     @property
       
    73     def wikipedia_revision_permalink(self):
       
    74         return settings.WIKIPEDIA_VERSION_PERMALINK_TEMPLATE % (unicode(self.wikipedia_revision_id))
       
    75 
       
    76     @property
       
    77     def url_status_text(self):
       
    78         return TERM_URL_STATUS_CHOICES[self.url_status][1]
       
    79     
       
    80     def validate(self, user):
       
    81         if not self.validated:
       
    82             self.validation_date = datetime.datetime.utcnow()
       
    83             self.validated = True
       
    84             self.validator = user
       
    85             self.save()
       
    86     
       
    87     def unvalidate(self):
       
    88         if self.validated:
       
    89             self.validated = False
       
    90             self.validator = None
       
    91             self.validation_date = None
       
    92             self.save()
       
    93     
       
    94     class Meta:
       
    95         app_label = 'core'
       
    96 
       
    97 class TermLabel(models.Model):
       
    98     label = models.CharField(max_length=1024, unique=False, blank=False, null=False, db_index=True)
       
    99     lang = models.CharField(max_length=128, unique=False, blank=True, null=True, db_index=True)
       
   100     term = models.ForeignKey(Term, blank=False, null=False, db_index=True, related_name="alternative_labels")
       
   101     
       
   102     class Meta:
       
   103         app_label = 'core'