diff -r 94f586daa623 -r 8ca7f2cea729 alcatel/controller/DocumentaryFile.py --- /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