alcatel/controller/DocumentaryFile.py
changeset 27 8ca7f2cea729
child 37 3848e1813a30
equal deleted inserted replaced
26:94f586daa623 27:8ca7f2cea729
       
     1 '''
       
     2 Created on 27 juil. 2012
       
     3 
       
     4 @author: gerard
       
     5 '''
       
     6 import datetime
       
     7 import logging
       
     8 
       
     9 from time import  mktime 
       
    10 from django.core.cache import cache
       
    11 
       
    12 from dataparser.ClientDocumentaryFileAttributes import ClientDocumentaryFileAttributes
       
    13 from dataparser.ClientDocumentaryFileVisibilityAttributes import ClientDocumentaryFileVisibilityAttribute
       
    14 from dataparser.ClientDocumentaryFileDeleteAttributes import ClientDocumentaryFileDeleteAttributes
       
    15 from document.models import Cluster
       
    16 from document.models import Image
       
    17 from document.models import Document
       
    18 from document.models import Documentaryfile
       
    19 from document.models import Clusterdocumentweight
       
    20 from django.contrib.auth.models import User
       
    21 
       
    22 logger = logging.getLogger('document')
       
    23 
       
    24 class DocumentaryFile(object):
       
    25 
       
    26     def __init__(self, request):
       
    27         logger.info('DocumentaryFile init')
       
    28         self.request = request
       
    29            
       
    30     def create(self):
       
    31         logger.info('create DocumentaryFile')
       
    32         attr = ClientDocumentaryFileAttributes(self.request)
       
    33         logger.info('user = ' + str(attr.get_user()))
       
    34         logger.info('query_id = ' + str(attr.get_query_id()))
       
    35         logger.info('public = ' + str(attr.get_visibility()))
       
    36         query_id = attr.get_query_id()   
       
    37         print query_id   
       
    38         key1 = cache.get(query_id)
       
    39         if key1:
       
    40             context = cache.get(key1['weblab_data_key'])
       
    41             if context == None:
       
    42                 print "cache empty"
       
    43                 json = '{"Error": "Invalid query id"}'
       
    44                 logger.info(json)
       
    45             else:
       
    46                 print "cache not empty"
       
    47                 list_concepts,concepts_with_detailed_documents_list = context
       
    48                 logger.info('list_concepts' + str(list_concepts))
       
    49                 logger.info('concepts_with_detailed_documents_list' + str(concepts_with_detailed_documents_list))
       
    50                 #parse to get the value to save the documentary file
       
    51                 json = self.parseAndSaveValue(list_concepts,concepts_with_detailed_documents_list, attr )
       
    52         else:
       
    53             json = '{"Error": "Invalid query id"}'
       
    54             logger.info(json)
       
    55         return json
       
    56     
       
    57     def visibilityChange(self):
       
    58         logger.info('visibilityChange')
       
    59         attr = ClientDocumentaryFileVisibilityAttribute(self.request)
       
    60         logger.info('get_user = ' + str(attr.get_user()))
       
    61         logger.info('get_documentary_file_id = ' + str(attr.get_documentary_file_id()))
       
    62         logger.info('get_visibility = ' + str(attr.get_visibility()))
       
    63         try:
       
    64             documentaryfile = Documentaryfile.objects.get(pk=attr.get_documentary_file_id())
       
    65         except Documentaryfile.DoesNotExist:
       
    66             json = '{"Error": "Invalid documentary id"}'
       
    67             logger.info(json)
       
    68             return json
       
    69         
       
    70         logger.info('documentaryfile.user.name = ' + str(documentaryfile.user.username))
       
    71         if documentaryfile.user.username == attr.get_user():
       
    72             if attr.get_visibility() == 'public':
       
    73                 visibility_attr = True
       
    74             elif attr.get_visibility() == 'private':
       
    75                 visibility_attr = False
       
    76             else:
       
    77                 json = '{"Error" : "Invalid visibility parameter"}'
       
    78                 logger.info(json)
       
    79                 return json
       
    80             
       
    81             for thecluster in documentaryfile.cluster_set.all():
       
    82                 for thedocument in thecluster.document.all():
       
    83                     for theannotationdoc in thedocument.annotationdocument_set.all():
       
    84                         theannotationdoc.visibility = visibility_attr
       
    85                         theannotationdoc.save()
       
    86                        
       
    87             documentaryfile.visibility = visibility_attr
       
    88             documentaryfile.save()
       
    89             json = '{"visibility": "' + attr.get_visibility() + '"}'
       
    90             logger.info(json)
       
    91         else:
       
    92             json = '{"Error": "User does not matched"}'
       
    93             logger.info(json)
       
    94        
       
    95         return json
       
    96         
       
    97     def delete(self):
       
    98         logger.info('delete DocumentaryFile')
       
    99         attr = ClientDocumentaryFileDeleteAttributes(self.request)
       
   100         logger.info('get_user = ' + str(attr.get_user()))
       
   101         logger.info('get_documentary_file_id = ' + str(attr.get_documentary_file_id()))
       
   102         docId = attr.get_documentary_file_id()
       
   103         if docId == '':
       
   104             json= '{"Error": "No documentary_file_id attribute in the http post request"}'
       
   105             logger.info(json)
       
   106             return json
       
   107         
       
   108         try:
       
   109             documentaryfile = Documentaryfile.objects.get(pk=attr.get_documentary_file_id())
       
   110         except Documentaryfile.DoesNotExist:
       
   111             json= '{"Error": "Invalid documentary_file_id"}'
       
   112             logger.info(json)
       
   113             return json
       
   114         
       
   115         logger.info('documentaryfile.user.username = ' + str(documentaryfile.user.username))
       
   116         if documentaryfile.user.username == attr.get_user():
       
   117             #verify if the associated documents are associated to another documentaryfile. if not delete the documents
       
   118             for thecluster in documentaryfile.cluster_set.all():     
       
   119                 for thedocument in thecluster.document.all():
       
   120                     nb = (Clusterdocumentweight.objects.filter(document_id=thedocument.documentId)).count()
       
   121                     logger.info('nb' + str(nb))
       
   122                     if nb == 1:
       
   123                         thedocument.delete()
       
   124            
       
   125             documentaryfile.delete()
       
   126             json = '{"documentary_file_deleted" :' + str(docId) + '}'
       
   127             logger.info(json)
       
   128         else:
       
   129             json= '{"Error": "User does not match"}'
       
   130             logger.info(json)
       
   131        
       
   132         return json  
       
   133     
       
   134     def parseAndSaveValue(self, list_concepts,concepts_with_detailed_documents_list, attr):
       
   135         #parse the context
       
   136 
       
   137         try:
       
   138             user_attr = User.objects.get(username=attr.get_user)
       
   139         except User.DoesNotExist, err:
       
   140             logger.info(' Error: '+ str(err))
       
   141             json = '{"Error": "User does not existed"}' 
       
   142             return json
       
   143         
       
   144         visibility_attr = attr.get_visibility()
       
   145         if visibility_attr == 'public':
       
   146             visibility_bool = True
       
   147         else:
       
   148             visibility_bool = False
       
   149             
       
   150         title_attr = attr.get_title()
       
   151         description_attr = attr.get_description()
       
   152         #query_id_attr = attr.get_query_id()
       
   153         #TODO url image
       
   154         image1 = Image(url='url')
       
   155         image1.save()
       
   156         
       
   157         now = datetime.datetime.now()
       
   158         mktime(now.timetuple())
       
   159         print mktime(now.timetuple())
       
   160            
       
   161         # create the documentary file
       
   162         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)
       
   163         dossierDoc1.save()
       
   164         nb_concept = len(concepts_with_detailed_documents_list)
       
   165         logger.info('nb_concept = ' + str(nb_concept))
       
   166         for concept_index, concept_with_detailed_documents_list in enumerate(concepts_with_detailed_documents_list) :
       
   167             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)
       
   168             for detailed_document in concept_with_detailed_documents_list:
       
   169                 logger.info(detailed_document)
       
   170                 logger.info('cluster_id and doc_id = ' + str(list_concepts[concept_index]['title']+' and '+detailed_document['id']))
       
   171                 #Verify if the document exist already in database
       
   172                 try:
       
   173                     doc1 = Document.objects.get(pk=detailed_document['id'])
       
   174                 except Document.DoesNotExist:
       
   175                     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)
       
   176                     
       
   177                 clusterDocWeight1 = Clusterdocumentweight(cluster=cluster1, document=doc1, weight=detailed_document['weight'])
       
   178                 clusterDocWeight1.save()
       
   179         json= '{"documentary_file_created":' + str(dossierDoc1.id) + '}'
       
   180         logger.info(json)
       
   181         return json