web/ldt/text/models.py
changeset 17 683ce4109c28
parent 9 22ab430e9b64
child 21 1a061f244254
child 22 83b28fc0d731
equal deleted inserted replaced
16:d0f617472760 17:683ce4109c28
     2 from django.db import models
     2 from django.db import models
     3 from django.utils.translation import ugettext_lazy as _
     3 from django.utils.translation import ugettext_lazy as _
     4 from ldt.core.models import Document, Owner
     4 from ldt.core.models import Document, Owner
     5 from django.contrib.auth.models import User
     5 from django.contrib.auth.models import User
     6 import tagging.fields
     6 import tagging.fields
       
     7 from tagging.models import Tag
     7 from utils import generate_uuid
     8 from utils import generate_uuid
     8 import os.path
     9 import os.path
     9 import uuid
    10 import uuid
       
    11 import lxml
    10 #from django.core.management.validation import max_length
    12 #from django.core.management.validation import max_length
       
    13 
       
    14 def Property(func):
       
    15     return property(**func()) 
    11 
    16 
    12 
    17 
    13 class Annotation(models.Model):
    18 class Annotation(models.Model):
    14     external_id = models.CharField(max_length=1024, null=False, unique=True, default=generate_uuid, verbose_name=_('annotation.external_id'))
    19     external_id = models.CharField(max_length=1024, null=False, unique=True, default=generate_uuid, verbose_name=_('annotation.external_id'))
    15     uri = models.CharField(max_length=1024, verbose_name=_('annotation.uri'))
    20     uri = models.CharField(max_length=1024, verbose_name=_('annotation.uri'))
    16     tags = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('annotation.tags'))
    21     tags_field = tagging.fields.TagField(max_length=2048, null=True, blank=True, verbose_name=_('annotation.tags'))
    17     title = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('annotation.title'))
    22     title = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('annotation.title'))
    18     description = models.TextField(null=True, blank=True, verbose_name=_('annotation.description'))
    23     description = models.TextField(null=True, blank=True, verbose_name=_('annotation.description'))
    19     text = models.TextField(null=True, blank=True, verbose_name=_('annotation.text'))
    24     text = models.TextField(null=True, blank=True, verbose_name=_('annotation.text'))
    20     color = models.CharField(max_length=1024, verbose_name=_('annotation.color'))
    25     color = models.CharField(max_length=1024, verbose_name=_('annotation.color'))
    21     creator = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('creator.title'))
    26     creator = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('creator.title'))
    22     contributor = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('contributor.title'))
    27     contributor = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('contributor.title'))
    23     creation_date = models.DateTimeField(auto_now_add=True, verbose_name=_('annotation.creation_date'))
    28     creation_date = models.DateTimeField(auto_now_add=True, verbose_name=_('annotation.creation_date'))
    24     update_date = models.DateTimeField(auto_now=True, verbose_name=_('annotation.update_date'))
    29     update_date = models.DateTimeField(auto_now=True, verbose_name=_('annotation.update_date'))
       
    30     
       
    31     @Property
       
    32     def tags():
       
    33         
       
    34         def fget(self):
       
    35             return ",".join(self.tag_list)
       
    36         
       
    37         def fset(self, value):
       
    38             values = None
       
    39             if type(value) == type([]):
       
    40                 values = value
       
    41             elif value is not None:
       
    42                 values = [v.lower().strip() for v in unicode(value).split(",")]
       
    43             
       
    44             if values is not None:
       
    45                 self.tags_field = ",".join(values) + ","
       
    46             else:
       
    47                 self.tags_field = None
       
    48 
       
    49         return locals()
       
    50     
       
    51     @Property
       
    52     def tag_list():
       
    53         def fget(self):
       
    54             return [t.name for t in Tag.objects.get_for_object(self)]
       
    55         
       
    56         return locals()
       
    57         
       
    58     
       
    59     def get_tag_list(self):
       
    60         tags = []
       
    61         if self.tags:
       
    62             tags_list = unicode(self.tags)
       
    63             for t in tags_list.split(","):
       
    64                 tags.append(t.strip()) 
       
    65         return tags
       
    66         #return self.tags
    25 
    67 
    26 
    68 
    27     def __unicode__(self):
    69     def __unicode__(self):
    28         return unicode(self.external_id) + u": " + unicode(self.title)
    70         return unicode(self.external_id) + u": " + unicode(self.title)
       
    71 
       
    72     def serialize(self, root_element=None):
       
    73         
       
    74         if root_element is not None:
       
    75             iri = root_element
       
    76         else :
       
    77             iri = lxml.etree.Element('iri')
       
    78             doc = lxml.etree.ElementTree(iri)
       
    79         
       
    80         
       
    81         textannotation = lxml.etree.SubElement(iri, 'text-annotation')
       
    82         id = lxml.etree.SubElement(textannotation,'id')
       
    83         id.text = self.external_id
       
    84         uri = lxml.etree.SubElement(textannotation,'uri')
       
    85         uri.text = self.uri
       
    86         
       
    87         if self.tags:
       
    88             tags = lxml.etree.SubElement(textannotation, 'tags')
       
    89             for t in self.get_tag_list():
       
    90                 tag = lxml.etree.SubElement(tags, 'tag')
       
    91                 tag.text = t
       
    92         
       
    93         content = lxml.etree.SubElement(textannotation,'content')
       
    94         color = lxml.etree.SubElement(content,'color')
       
    95         color.text = self.color
       
    96         description = lxml.etree.SubElement(content,'description')
       
    97         description.text = self.description
       
    98         title = lxml.etree.SubElement(content,'title')
       
    99         title.text = self.title
       
   100         text = lxml.etree.SubElement(content,'text')
       
   101         text.text = self.text
       
   102         
       
   103         meta = lxml.etree.SubElement(textannotation,'meta')
       
   104         contributor = lxml.etree.SubElement(meta, "contributor")
       
   105         contributor.text = self.contributor
       
   106         creator = lxml.etree.SubElement(meta, "creator")
       
   107         creator.text = self.creator
       
   108         creationdate = lxml.etree.SubElement(meta, "created")
       
   109         creationdate.text = str(self.creation_date)
       
   110         updatedate = lxml.etree.SubElement(meta, "modified")
       
   111         updatedate.text = str(self.update_date)
       
   112 
       
   113         if root_element is not None:
       
   114             return root_element
       
   115         else:        
       
   116             return doc
       
   117 
    29 
   118 
    30     @staticmethod
   119     @staticmethod
    31     def create_annotation(external_id, uri=None, tags=None, title=None, description=None, text=None, color=None, creator=None, contributor=None, creation_date=None, update_date=None):
   120     def create_annotation(external_id, uri=None, tags=None, title=None, description=None, text=None, color=None, creator=None, contributor=None, creation_date=None, update_date=None):
    32         annotation = Annotation(external_id=external_id, uri=uri, tags=tags, title=title, description=description, text=text, color=color, creator=creator, contributor=contributor, creation_date=creation_date, update_date=update_date)
   121         annotation = Annotation(external_id=external_id, uri=uri, tags=tags, title=title, description=description, text=text, color=color, creator=creator, contributor=contributor, creation_date=creation_date, update_date=update_date)
    33         annotation.save()
   122         annotation.save()
    34         
   123         
    35         return annotation
   124         return annotation
    36     
       
    37 
   125