--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alcatel/controller/DocumentaryFile.py Thu Jan 24 16:58:55 2013 +0100
@@ -0,0 +1,181 @@
+'''
+Created on 27 juil. 2012
+
+@author: gerard
+'''
+import datetime
+import logging
+
+from time import mktime
+from django.core.cache import cache
+
+from dataparser.ClientDocumentaryFileAttributes import ClientDocumentaryFileAttributes
+from dataparser.ClientDocumentaryFileVisibilityAttributes import ClientDocumentaryFileVisibilityAttribute
+from dataparser.ClientDocumentaryFileDeleteAttributes import ClientDocumentaryFileDeleteAttributes
+from document.models import Cluster
+from document.models import Image
+from document.models import Document
+from document.models import Documentaryfile
+from document.models import Clusterdocumentweight
+from django.contrib.auth.models import User
+
+logger = logging.getLogger('document')
+
+class DocumentaryFile(object):
+
+ def __init__(self, request):
+ logger.info('DocumentaryFile init')
+ self.request = request
+
+ def create(self):
+ logger.info('create DocumentaryFile')
+ attr = ClientDocumentaryFileAttributes(self.request)
+ logger.info('user = ' + str(attr.get_user()))
+ logger.info('query_id = ' + str(attr.get_query_id()))
+ logger.info('public = ' + str(attr.get_visibility()))
+ query_id = attr.get_query_id()
+ print query_id
+ key1 = cache.get(query_id)
+ if key1:
+ context = cache.get(key1['weblab_data_key'])
+ if context == None:
+ print "cache empty"
+ json = '{"Error": "Invalid query id"}'
+ logger.info(json)
+ else:
+ print "cache not empty"
+ list_concepts,concepts_with_detailed_documents_list = context
+ logger.info('list_concepts' + str(list_concepts))
+ logger.info('concepts_with_detailed_documents_list' + str(concepts_with_detailed_documents_list))
+ #parse to get the value to save the documentary file
+ json = self.parseAndSaveValue(list_concepts,concepts_with_detailed_documents_list, attr )
+ else:
+ json = '{"Error": "Invalid query id"}'
+ logger.info(json)
+ return json
+
+ def visibilityChange(self):
+ logger.info('visibilityChange')
+ attr = ClientDocumentaryFileVisibilityAttribute(self.request)
+ logger.info('get_user = ' + str(attr.get_user()))
+ logger.info('get_documentary_file_id = ' + str(attr.get_documentary_file_id()))
+ logger.info('get_visibility = ' + str(attr.get_visibility()))
+ try:
+ documentaryfile = Documentaryfile.objects.get(pk=attr.get_documentary_file_id())
+ except Documentaryfile.DoesNotExist:
+ json = '{"Error": "Invalid documentary id"}'
+ logger.info(json)
+ return json
+
+ logger.info('documentaryfile.user.name = ' + str(documentaryfile.user.username))
+ if documentaryfile.user.username == attr.get_user():
+ if attr.get_visibility() == 'public':
+ visibility_attr = True
+ elif attr.get_visibility() == 'private':
+ visibility_attr = False
+ else:
+ json = '{"Error" : "Invalid visibility parameter"}'
+ logger.info(json)
+ return json
+
+ for thecluster in documentaryfile.cluster_set.all():
+ for thedocument in thecluster.document.all():
+ for theannotationdoc in thedocument.annotationdocument_set.all():
+ theannotationdoc.visibility = visibility_attr
+ theannotationdoc.save()
+
+ documentaryfile.visibility = visibility_attr
+ documentaryfile.save()
+ json = '{"visibility": "' + attr.get_visibility() + '"}'
+ logger.info(json)
+ else:
+ json = '{"Error": "User does not matched"}'
+ logger.info(json)
+
+ return json
+
+ def delete(self):
+ logger.info('delete DocumentaryFile')
+ attr = ClientDocumentaryFileDeleteAttributes(self.request)
+ logger.info('get_user = ' + str(attr.get_user()))
+ logger.info('get_documentary_file_id = ' + str(attr.get_documentary_file_id()))
+ docId = attr.get_documentary_file_id()
+ if docId == '':
+ json= '{"Error": "No documentary_file_id attribute in the http post request"}'
+ logger.info(json)
+ return json
+
+ try:
+ documentaryfile = Documentaryfile.objects.get(pk=attr.get_documentary_file_id())
+ except Documentaryfile.DoesNotExist:
+ json= '{"Error": "Invalid documentary_file_id"}'
+ logger.info(json)
+ return json
+
+ logger.info('documentaryfile.user.username = ' + str(documentaryfile.user.username))
+ if documentaryfile.user.username == attr.get_user():
+ #verify if the associated documents are associated to another documentaryfile. if not delete the documents
+ for thecluster in documentaryfile.cluster_set.all():
+ for thedocument in thecluster.document.all():
+ nb = (Clusterdocumentweight.objects.filter(document_id=thedocument.documentId)).count()
+ logger.info('nb' + str(nb))
+ if nb == 1:
+ thedocument.delete()
+
+ documentaryfile.delete()
+ json = '{"documentary_file_deleted" :' + str(docId) + '}'
+ logger.info(json)
+ else:
+ json= '{"Error": "User does not match"}'
+ logger.info(json)
+
+ return json
+
+ def parseAndSaveValue(self, list_concepts,concepts_with_detailed_documents_list, attr):
+ #parse the context
+
+ try:
+ user_attr = User.objects.get(username=attr.get_user)
+ except User.DoesNotExist, err:
+ logger.info(' Error: '+ str(err))
+ json = '{"Error": "User does not existed"}'
+ return json
+
+ visibility_attr = attr.get_visibility()
+ if visibility_attr == 'public':
+ visibility_bool = True
+ else:
+ visibility_bool = False
+
+ title_attr = attr.get_title()
+ description_attr = attr.get_description()
+ #query_id_attr = attr.get_query_id()
+ #TODO url image
+ image1 = Image(url='url')
+ image1.save()
+
+ now = datetime.datetime.now()
+ mktime(now.timetuple())
+ print mktime(now.timetuple())
+
+ # create the documentary file
+ dossierDoc1 = Documentaryfile(title=title_attr, date=now , description=description_attr, visibility=visibility_bool, list_concepts=list_concepts, concepts_with_detailed_documents_list = concepts_with_detailed_documents_list, image=image1, user=user_attr)
+ dossierDoc1.save()
+ nb_concept = len(concepts_with_detailed_documents_list)
+ logger.info('nb_concept = ' + str(nb_concept))
+ for concept_index, concept_with_detailed_documents_list in enumerate(concepts_with_detailed_documents_list) :
+ cluster1 = Cluster.objects.create(title=list_concepts[concept_index]['title'], description=list_concepts[concept_index]['abstract'], weight=list_concepts[concept_index]['score'], documentaryfile=dossierDoc1, image=image1)
+ for detailed_document in concept_with_detailed_documents_list:
+ logger.info(detailed_document)
+ logger.info('cluster_id and doc_id = ' + str(list_concepts[concept_index]['title']+' and '+detailed_document['id']))
+ #Verify if the document exist already in database
+ try:
+ doc1 = Document.objects.get(pk=detailed_document['id'])
+ except Document.DoesNotExist:
+ doc1 = Document.objects.create(documentId=detailed_document['id'], title=detailed_document['title'],description=detailed_document['abstract'],date=datetime.datetime.fromtimestamp(int(detailed_document['date'])).isoformat(), image=image1)
+
+ clusterDocWeight1 = Clusterdocumentweight(cluster=cluster1, document=doc1, weight=detailed_document['weight'])
+ clusterDocWeight1.save()
+ json= '{"documentary_file_created":' + str(dossierDoc1.id) + '}'
+ logger.info(json)
+ return json
\ No newline at end of file