diff -r 94f586daa623 -r 8ca7f2cea729 alcatel/controller/Clusters.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/alcatel/controller/Clusters.py Thu Jan 24 16:58:55 2013 +0100 @@ -0,0 +1,89 @@ +''' +Created on 7 aout 2012 + +@author: gerard +''' +import logging +import simplejson + +from dataparser.ClustersGetAttributes import ClustersGetAttributes +from document.models import Annotationcluster +from document.models import Cluster +from document.models import Clusterdocumentweight +from document.models import Document +from document.models import Documentaryfile +from django.contrib.auth.models import User +from mediapartdb.MediapartReader import MediapartReader + +logger = logging.getLogger('document') + +# List of documents of a cluster with annotations +class Clusters(object): + + def __init__(self, request): + self.request = request + + def get_treemap_of_clusters(self): + attr = ClustersGetAttributes(self.request) + + if not attr.get_user(): + json = '{"error msg": "user is not defined"}' + return json + if not attr.get_documentary_file_id(): + json = '{"error msg": "documentary_file_id is not defined"}' + return json + + the_user = User.objects.get(username=attr.get_user()) + + if the_user: + docFiles = Documentaryfile.objects.filter(id=int(attr.get_documentary_file_id()), user_id=the_user.id ) + if len(docFiles) == 0: + json = '{"error msg": "There is no documentary file belonging to the user specified"}' + return json + + reader = MediapartReader() + + json = {"clusters":[]} + clusters = Cluster.objects.filter(documentaryfile=int(attr.get_documentary_file_id())) + for cluster in clusters: + jsoncluster = {'id':cluster.id} + jsoncluster['title'] = cluster.title + jsoncluster['abstract'] = cluster.description + jsoncluster['weight'] = cluster.weight + + jsoncluster['annotations'] = [] + + annotations = Annotationcluster.objects.filter(cluster=cluster.id) + for annotation in annotations: + jsonanno = {'id':annotation.id} + jsonanno['user'] = str(annotation.user) + jsonanno['text'] = str(annotation.description) + jsoncluster['annotations'].append(jsonanno) + + jsoncluster['documents'] = [] + + doc_weights = Clusterdocumentweight.objects.filter(cluster_id=cluster.id) + sorted_doc_weights = sorted(doc_weights, key=lambda a_cluster_doc_weight: a_cluster_doc_weight.weight) + + for index_doc, doc_weights in enumerate(sorted_doc_weights): + if index_doc < 3: + jsondoc = {'id':doc_weights.document.documentId} + doc = Document.objects.get(documentId=doc_weights.document.documentId) + jsondoc['title'] = str(doc.title.encode("utf8")) + url = reader.get_url(str(doc_weights.document.documentId)) + jsondoc['url_document'] = url + jsondoc['date'] = str(doc.date.isoformat()) + category = reader.get_category(str(doc_weights.document.documentId)) + jsondoc['category'] = category + jsondoc['url_image'] = 'TO BE DEFINED' + jsondoc['weight'] = float(doc_weights.weight) + + jsoncluster['documents'].append(jsondoc) + else: + break + jsoncluster['document_number'] = len(sorted_doc_weights) + json['clusters'].append(jsoncluster) + + result = simplejson.dumps(json) + logger.debug(result) + return result