web/ldt/text/views.py
changeset 17 683ce4109c28
parent 16 d0f617472760
child 19 7cf81d58a968
--- a/web/ldt/text/views.py	Wed Nov 17 18:57:34 2010 +0100
+++ b/web/ldt/text/views.py	Fri Nov 19 14:29:17 2010 +0100
@@ -31,8 +31,7 @@
 import lucene
 import tempfile
 import uuid
-from urllib import urlopen
-
+from tagging.models import Tag
 
 ## Filters the annotation depending on the request parameters
 ## Returns an xml containing the resulting annotations
@@ -59,40 +58,7 @@
     doc = lxml.etree.ElementTree(iri)
     
     for annot in annotlist:
-        textannotation = lxml.etree.SubElement(iri, 'text-annotation')
-        id = lxml.etree.SubElement(textannotation,'id')
-        id.text = annot.external_id
-        uri = lxml.etree.SubElement(textannotation,'uri')
-        uri.text = annot.uri
-        
-        if annot.tags:
-            if type(annot.tags) is unicode:
-                annot.tags = eval(annot.tags)
-            tags = lxml.etree.SubElement(textannotation,'tags')
-            ltags = normalize_tags(annot.tags)
-            for t in ltags:
-                tag = lxml.etree.SubElement(tags, 'tag')
-                tag.text = t
-            
-        content = lxml.etree.SubElement(textannotation,'content')
-        color = lxml.etree.SubElement(content,'color')
-        color.text = annot.color
-        description = lxml.etree.SubElement(content,'description')
-        description.text = annot.description
-        title = lxml.etree.SubElement(content,'title')
-        title.text = annot.title
-        text = lxml.etree.SubElement(content,'text')
-        text.text = annot.text
-        
-        meta = lxml.etree.SubElement(textannotation,'meta')
-        contributor = lxml.etree.SubElement(meta, "contributor")
-        contributor.text = annot.contributor
-        creator = lxml.etree.SubElement(meta, "contributor")
-        creator.text = annot.creator
-        creationdate = lxml.etree.SubElement(meta, "created")
-        creationdate.text = str(annot.creation_date)
-        updatedate = lxml.etree.SubElement(meta, "modified")
-        updatedate.text = str(annot.update_date)
+        annot.serialize(iri)
         
     return HttpResponse(lxml.etree.tostring(doc, pretty_print=True), mimetype="text/xml;charset=utf-8")
 
@@ -105,30 +71,59 @@
     cont = request.POST["content"]
     doc = lxml.etree.fromstring(cont)
     
-    id = unicode(doc.xpath("/iri/text-annotation/id/text()")[0])
-    if id is None:
+    id_nodes = doc.xpath("/iri/text-annotation/id/text()")
+    if id_nodes:
+        id = unicode(id_nodes[0])
+    else:
         id = generate_uuid()
         
     uri = unicode(doc.xpath("/iri/text-annotation/uri/text()")[0])
-    ltags = []
-    for tag in doc.xpath("/iri/text-annotation/tags/tag/text()"):
-        ltags.append(unicode(tag))
-    tags=normalize_tags(ltags)
+
+    ltags = list(set([unicode(tag.text).lower().strip() for tag in doc.xpath("/iri/text-annotation/tags/tag")]))
+    tags = ",".join(ltags)
+    if len(ltags) == 1:
+        tags += ","
+    
     
-    title = unicode(doc.xpath("/iri/text-annotation/content/title/text()")[0])
-    desc = unicode(doc.xpath("/iri/text-annotation/content/description/text()")[0])
-    text = unicode(doc.xpath("/iri/text-annotation/content/text/text()")[0])
-    color = unicode(doc.xpath("/iri/text-annotation/content/color/text()")[0])
+    title_nodes = doc.xpath("/iri/text-annotation/content/title/text()")
+    if title_nodes:
+        title = unicode(title_nodes[0])
+    else:
+        title = None
+    desc_nodes = doc.xpath("/iri/text-annotation/content/description/text()")
+    if desc_nodes:
+        desc = unicode(desc_nodes[0])
+    else:
+        desc = None
+    text_nodes = doc.xpath("/iri/text-annotation/content/text/text()")
+    if text_nodes:
+        text = unicode(text_nodes[0])
+    else:
+        text = None
+    color_nodes = doc.xpath("/iri/text-annotation/content/color/text()")
+    if color_nodes:
+        color = unicode(color_nodes[0])
+    else:
+        color = None
     
-    creator = unicode(doc.xpath("/iri/text-annotation/meta/creator/text()")[0])
-    contributor = unicode(doc.xpath("/iri/text-annotation/meta/contributor/text()")[0])
-    creation_date = unicode(doc.xpath("/iri/text-annotation/meta/created/text()")[0])
-    update_date = unicode(doc.xpath("/iri/text-annotation/meta/modified/text()")[0])
+    creator_nodes = doc.xpath("/iri/text-annotation/meta/creator/text()")
+    if creator_nodes:
+        creator = unicode(creator_nodes[0])
+    else:
+        creator = None
+    contributor_nodes = doc.xpath("/iri/text-annotation/meta/contributor/text()")
+    if contributor_nodes:
+        contributor = unicode(contributor_nodes[0])
+    else:
+        contributor = None
+    
+    #creation_date = unicode(doc.xpath("/iri/text-annotation/meta/created/text()")[0])
+    #update_date = unicode(doc.xpath("/iri/text-annotation/meta/modified/text()")[0])
     
     try:
-        annotation = Annotation.create_annotation(external_id=id, uri=uri, tags=tags, title=title, description=desc, text=text, color=color, creator=creator, contributor=contributor, creation_date=creation_date, update_date=update_date)
+        annotation = Annotation.create_annotation(external_id=id, uri=uri, tags=tags, title=title, description=desc, text=text, color=color, creator=creator, contributor=contributor)
         annotation.save()
-        return HttpResponse(lxml.etree.tostring(doc, pretty_print=True), mimetype="text/xml;charset=utf-8")
+        return HttpResponse(lxml.etree.tostring(annotation.serialize(), pretty_print=True), mimetype="text/xml;charset=utf-8")
     except IntegrityError:
         return HttpResponse(status=409)
 
@@ -141,43 +136,8 @@
         annot = Annotation.objects.get(external_id=request.GET.get('id',''))
     except Annotation.DoesNotExist:
         raise Http404
-    iri = lxml.etree.Element('iri')
-    doc = lxml.etree.ElementTree(iri)
-    
-    textannotation = lxml.etree.SubElement(iri, 'text-annotation')
-    id = lxml.etree.SubElement(textannotation,'id')
-    id.text = annot.external_id
-    uri = lxml.etree.SubElement(textannotation,'uri')
-    uri.text = annot.uri
-    
-    if annot.tags:
-        if type(annot.tags) is unicode:
-            annot.tags = eval(annot.tags)
-        tags = lxml.etree.SubElement(textannotation,'tags')
-        ltags = normalize_tags(annot.tags)
-        for t in ltags:
-            tag = lxml.etree.SubElement(tags, 'tag')
-            tag.text = t
-    
-    content = lxml.etree.SubElement(textannotation,'content')
-    color = lxml.etree.SubElement(content,'color')
-    color.text = annot.color
-    description = lxml.etree.SubElement(content,'description')
-    description.text = annot.description
-    title = lxml.etree.SubElement(content,'title')
-    title.text = annot.title
-    text = lxml.etree.SubElement(content,'text')
-    text.text = annot.text
-    
-    meta = lxml.etree.SubElement(textannotation,'meta')
-    contributor = lxml.etree.SubElement(meta, "contributor")
-    contributor.text = annot.contributor
-    creator = lxml.etree.SubElement(meta, "creator")
-    creator.text = annot.creator
-    creationdate = lxml.etree.SubElement(meta, "created")
-    creationdate.text = str(annot.creation_date)
-    updatedate = lxml.etree.SubElement(meta, "modified")
-    updatedate.text = str(annot.update_date)
+
+    doc = annot.serialize()
 
     return HttpResponse(lxml.etree.tostring(doc, pretty_print=True), mimetype="text/xml;charset=utf-8")
 
@@ -215,77 +175,40 @@
     if uri != [] and annot.uri != uri[0]:
         annot.uri = unicode(uri[0])
     
-    tags = []
-    for tag in doc.xpath("/iri/text-annotation/tags/tag"):
-        tags.append(unicode(tag.text))
-    if annot.tags is not None:
-        if type(annot.tags) is unicode:
-            annot.tags = eval(annot.tags)
-        tags += annot.tags
-    tags = normalize_tags(tags)
-    annot.tags=tags
+    tags_nodes = doc.xpath("/iri/text-annotation/tags")
     
+    if len(tags_nodes) > 0:
+        tags = list(set([unicode(tag.text).lower().strip() for tag in doc.xpath("/iri/text-annotation/tags/tag")]))
+        tags_str = ",".join(tags)
+        if len(tags) == 1:
+            tags_str += ","
+        annot.tags = tags_str
+        
+            
+        
+            
     title = doc.xpath("/iri/text-annotation/content/title/text()")
-    if title != [] and annot.title != title[0]:
+    if title and annot.title != title[0]:
         annot.title = unicode(title[0])
     desc = doc.xpath("/iri/text-annotation/content/description/text()")
-    if desc != [] and annot.description != desc[0]:
+    if desc and annot.description != desc[0]:
         annot.description = unicode(desc[0])
     text = doc.xpath("/iri/text-annotation/content/text/text()")
-    if text != [] and annot.text != text[0]:
+    if text and annot.text != text[0]:
         annot.text = unicode(text[0])
     color = doc.xpath("/iri/text-annotation/content/color/text()")
-    if color != [] and annot.color != color[0]:
+    if color and annot.color != color[0]:
         annot.color = unicode(color[0])
     
     contributor = doc.xpath("/iri/text-annotation/meta/contributor/text()")
-    if contributor != [] and annot.contributor != contributor[0]:
+    if contributor and annot.contributor != contributor[0]:
         annot.contributor = unicode(contributor[0])
     update_date = doc.xpath("/iri/text-annotation/meta/modified/text()")
-    if update_date != [] and annot.update_date != update_date[0]:
+    if update_date and annot.update_date != update_date[0]:
         annot.update_date = unicode(update_date[0])
 
     annot.save()
 
-    #create xml
-    iri = lxml.etree.Element('iri')
-    doc2 = lxml.etree.ElementTree(iri)
-    
-    textannotation = lxml.etree.SubElement(iri, 'text-annotation')
-    id = lxml.etree.SubElement(textannotation,'id')
-    id.text = annot.external_id
-    uri = lxml.etree.SubElement(textannotation,'uri')
-    uri.text = annot.uri
-    
-    if annot.tags:
-        if type(annot.tags) is unicode:
-            annot.tags = eval(annot.tags)
-        tags = lxml.etree.SubElement(textannotation,'tags')
-        ltags = normalize_tags(annot.tags)
-        for t in ltags:
-            tag = lxml.etree.SubElement(tags, 'tag')
-            tag.text = t
-    
-    content = lxml.etree.SubElement(textannotation,'content')
-    color = lxml.etree.SubElement(content,'color')
-    color.text = annot.color
-    description = lxml.etree.SubElement(content,'description')
-    description.text = annot.description
-    title = lxml.etree.SubElement(content,'title')
-    title.text = annot.title
-    text = lxml.etree.SubElement(content,'text')
-    text.text = annot.text
-    
-    meta = lxml.etree.SubElement(textannotation,'meta')
-    contributor = lxml.etree.SubElement(meta, "contributor")
-    contributor.text = annot.contributor
-    creator = lxml.etree.SubElement(meta, "creator")
-    creator.text = annot.creator
-    creationdate = lxml.etree.SubElement(meta, "created")
-    creationdate.text = str(annot.creation_date)
-    updatedate = lxml.etree.SubElement(meta, "modified")
-    updatedate.text = str(annot.update_date)
-
-    return HttpResponse(lxml.etree.tostring(doc2, pretty_print=True), mimetype="text/xml;charset=utf-8")
+    return HttpResponse(lxml.etree.tostring(annot.serialize(), pretty_print=True), mimetype="text/xml;charset=utf-8")