Diff for /cdli/cdli_files.py between versions 1.82 and 1.83

version 1.82, 2008/06/26 18:08:02 version 1.83, 2008/09/25 12:37:54
Line 21  from ZPublisher.HTTPRequest import HTTPR Line 21  from ZPublisher.HTTPRequest import HTTPR
 from ZPublisher.HTTPResponse import HTTPResponse  from ZPublisher.HTTPResponse import HTTPResponse
 from ZPublisher.BaseRequest import RequestContainer  from ZPublisher.BaseRequest import RequestContainer
 import threading  import threading
 from BTrees.OOBTree import OOBTree  from BTrees.OOBTree import OOBTree, OOTreeSet
 import logging  import logging
 import transaction  import transaction
 import copy  import copy
 import codecs  import codecs
 import sys  import sys
   from BTrees.IOBTree import IOBTree 
 import cdliSplitter  import cdliSplitter
   from sets import Set
   import md5
   
 def unicodify(s):  def unicodify(s):
     """decode str (utf-8 or latin-1 representation) into unicode object"""      """decode str (utf-8 or latin-1 representation) into unicode object"""
Line 925  class CDLIBasketContainer(OrderedFolder) Line 926  class CDLIBasketContainer(OrderedFolder)
         if not ids:          if not ids:
             ids=self.REQUEST.SESSION['fileIds']              ids=self.REQUEST.SESSION['fileIds']
                           
         if type(ids) is not ListType:          if (type(ids) is not ListType) and (not isinstance(ids,Set)):
             ids=[ids]              ids=[ids]
                   
           if isinstance(ids,Set):
               ids=list(ids)
               
         if (submit.lower()=="store in new basket") or (submit.lower()=="new basket"):          if (submit.lower()=="store in new basket") or (submit.lower()=="new basket"):
             basketRet=self.addBasket(newBasketName)              basketRet=self.addBasket(newBasketName)
             self.setActiveBasket(basketRet.getId())              self.setActiveBasket(basketRet.getId())
Line 941  class CDLIBasketContainer(OrderedFolder) Line 945  class CDLIBasketContainer(OrderedFolder)
                   
         if fromFileList:          if fromFileList:
   
             return self.cdli_main.findObjectsFromList(list=self.REQUEST.SESSION['fileIds'],basketName=basket.title,numberOfObjects=added)              return self.cdli_main.findObjectsFromList(list=ids,basketName=basket.title,numberOfObjects=added)
                 
         if RESPONSE:          if RESPONSE:
                           
Line 1177  class CDLIBasket(Folder,CatalogAware): Line 1181  class CDLIBasket(Folder,CatalogAware):
           
     def addObjects(self,ids,deleteOld=None,username=None):      def addObjects(self,ids,deleteOld=None,username=None):
         """generate a new version of the basket with objects added"""          """generate a new version of the basket with objects added"""
           
           def swap(x):
               return (x[1],x[0])
               
         logging.info("add to basket (%s)"%(self.getId()))          logging.info("add to basket (%s)"%(self.getId()))
         lastVersion=self.getLastVersion()          lastVersion=self.getLastVersion()
                   
Line 1188  class CDLIBasket(Folder,CatalogAware): Line 1196  class CDLIBasket(Folder,CatalogAware):
         if deleteOld:          if deleteOld:
             oldContent=[]              oldContent=[]
   
         newContent=[]  
         added=0          added=0
         for id in ids:  #        for id in ids:
             try:  #            logging.debug("adding:"+id)
                 founds=self.CDLICatalog.search({'title':id})  #            try:
             except:  #                founds=self.CDLICatalog.search({'title':id})
                 founds=[]  #            except:
   #                founds=[]
   #           
   #            for found in founds:
   #                if found.getObject() not in oldContent:
   #                    #TODO: was passiert wenn, man eine Object dazufŸgt, das schon da ist aber eine neuere version
   #                    newContent.append((found.getObject().getLastVersion(),found.getObject()))
   #                    added+=1
   
           hash = md5.new(repr(self.makelist(ids))).digest() # erzeuge hash als identification
           #logging.debug("JJJJJJJ:"+repr(self.makelist(ids)))
           logging.debug("JJJJJJJ:"+repr(hash))
                         
           if hasattr(self.cdliRoot,'_v_tmpStore') and self.cdliRoot._v_tmpStore.has_key(hash): 
               logging.debug("from store!")
               newContent=Set(map(swap,self.cdliRoot._v_tmpStore[hash]))
                         
             for found in founds:          else:
                 if found.getObject() not in oldContent:              logging.debug("not from store!")
                     #TODO: was passiert wenn, man eine Object dazufŸgt, das schon da ist aber eine neuere version              newContent=Set([(self.getFileObjectLastVersion(x),self.getFileObject(x)) for x in ids])
                     newContent.append((found.getObject().getLastVersion(),found.getObject()))  
                     added+=1  
   
         content=oldContent+newContent          
           content=Set(oldContent).union(newContent)
           added = len(content)-len(oldContent)
         if not username:          if not username:
             user=self.getActualUserName()              user=self.getActualUserName()
         else:          else:
             user = username              user = username
                           
         ob=manage_addCDLIBasketVersion(self,user,comment="",basketContent=content)          #logging.debug("content:"+repr(list(content)))
           ob=manage_addCDLIBasketVersion(self,user,comment="",basketContent=list(content))
         logging.info("add to basket (%s) done"%(self.getId()))          logging.info("add to basket (%s) done"%(self.getId()))
         return added          return added
           
Line 1392  class CDLIBasketVersion(Implicit,Persist Line 1415  class CDLIBasketVersion(Implicit,Persist
   
   
         for object in self.content.getContent():          for object in self.content.getContent():
                   logging.error("ret:"+repr(object[0]))
                   logging.error("    -"+repr(procedure))
                   logging.error("    -"+repr(object[1].lockedBy))
           
                 if (procedure=="downloadAll") or (object[1].lockedBy=='') or (object[1].lockedBy==self.REQUEST['AUTHENTICATED_USER']):                  if (procedure=="downloadAll") or (object[1].lockedBy=='') or (object[1].lockedBy==self.REQUEST['AUTHENTICATED_USER']):
                       logging.error("ret1")
                     if current=="no": #version as they are in the basket                      if current=="no": #version as they are in the basket
                           logging.error("ret2")
                         ret+=str(object[0].getData())+"\n"                          ret+=str(object[0].getData())+"\n"
                     elif current=="yes":                      elif current=="yes":
                           logging.error("ret3")
                         #search current object                          #search current object
                         founds=self.CDLICatalog.search({'title':object[1].getId().split(".")[0]})                          founds=self.CDLICatalog.search({'title':object[1].getId().split(".")[0]})
                         if len(founds)>0:                                if len(founds)>0:      
Line 1931  class CDLIFileFolder(extVersionedFileFol Line 1960  class CDLIFileFolder(extVersionedFileFol
             
         return ret          return ret
           
     def findObjectsFromList(self,enterList=None,display=False,start=None,upload=None,list=None,basketName=None,numberOfObjects=None,RESPONSE=None):      def expandFile(self,fileId,fileTree):
         """findObjectsFromList (, TAB oder LINE separated)"""          """wildcard in fileID suche alle Treffer"""
           founds=self.CDLICatalog({'title':fileId})
           for found in founds:
               fileTree.add(found.getId)
               logging.debug("ADDD:"+found.getId)
                                                                                 
       def findObjectsFromList(self,enterList=None,display=False,start=None,upload=None,list=None,basketName=None,numberOfObjects=None,RESPONSE=None,REQUEST=None):
           """findObjectsFromList (, TAB oder LINE separated)"""
                   
           logging.debug("start: findObjectsFromList")
         if upload: # list from file upload          if upload: # list from file upload
             txt=upload.read()              txt=upload.read()
                                                                                 
Line 1966  class CDLIFileFolder(extVersionedFileFol Line 2002  class CDLIFileFolder(extVersionedFileFol
             return pt(basketName=basketName,numberOfObjects=numberOfObjects)              return pt(basketName=basketName,numberOfObjects=numberOfObjects)
                   
         if list is not None: # got already a list          if list is not None: # got already a list
               
               logging.debug(" ----List version")
             ret=[]              ret=[]
               fileTree=Set()
               
             for fileId in list:              for fileId in list:
                 if fileId.find("*"): #check for wildcards                 
                         fileId=fileId                  if fileId.find("*")>-1: #check for wildcards
                           self.expandFile(fileId,fileTree)
                           
                 elif len(fileId.split("."))==1:                  elif len(fileId.split("."))==1:
                         fileId=fileId+".atf"                          fileId=fileId+".atf"
                           fileTree.add(fileId)
                   #logging.debug("   -----:"+fileId)
                   #ret+=self.CDLICatalog({'title':fileId})
                   #x =self.getFileObject(fileId)
                   #if x is not None:
                   #    ret.append(x)
                   
               
               
               ids = fileTree & self.v_file_ids
               
               
               hash = md5.new(repr(self.makelist(ids))).digest() # erzeuge hash als identification
               #TODO: do I need garbage collection for _v_tmpStore ?
               if hasattr(self.cdliRoot,'_v_tmpStore') and self.cdliRoot._v_tmpStore.has_key(hash): 
                  return self.cdliRoot._v_tmpStore[hash]
                                   
                 ret+=self.CDLICatalog({'title':fileId})  
             #TODO: get rid of one of these..              #TODO: get rid of one of these..
             ids=[x.getObject().getId() for x in ret]              #ids=[x.getObject().getId() for x in ret]
               ret=[(self.getFileObject(x),self.getFileObjectLastVersion(x)) for x in ids]
             self.REQUEST.SESSION['fileIds']=ids#store fieldIds in session for further usage              self.REQUEST.SESSION['fileIds']=ids#store fieldIds in session for further usage
             self.REQUEST.SESSION['searchList']=self.REQUEST.SESSION['fileIds']              self.REQUEST.SESSION['searchList']=self.REQUEST.SESSION['fileIds']
                           
Line 1984  class CDLIFileFolder(extVersionedFileFol Line 2042  class CDLIFileFolder(extVersionedFileFol
                                   
                 return pt(search=ids)                  return pt(search=ids)
             else:                    else:      
                   #self.REQUEST.SESSION['hash'] = ret # store in session 
                   if not hasattr(self,'_v_tmpStore'):
                       self.cdliRoot._v_tmpStore={}
                   #logging.debug("HHHHHHNEU:"+repr(self.makelist(ids)))
                   logging.debug("HHHHHHNEU:"+repr(hash))
                   self.cdliRoot._v_tmpStore[hash] = ret # store in session 
                 return ret                  return ret
                   
                   
Line 1991  class CDLIFileFolder(extVersionedFileFol Line 2055  class CDLIFileFolder(extVersionedFileFol
         if start:          if start:
             RESPONSE.redirect("filelist.html?start:int="+str(start))              RESPONSE.redirect("filelist.html?start:int="+str(start))
                                                                                 
       def makelist(self,mySet):
           x = list(mySet)
           x.sort()
           return x
   
     security.declareProtected('Manage','createAllFilesAsSingleFile')      security.declareProtected('Manage','createAllFilesAsSingleFile')
     def createAllFilesAsSingleFile(self,RESPONSE=None):      def createAllFilesAsSingleFile(self,RESPONSE=None):
Line 2119  class CDLIRoot(Folder): Line 2187  class CDLIRoot(Folder):
                 'graphemes':cdliSplitter.graphemeSplitter()}                  'graphemes':cdliSplitter.graphemeSplitter()}
           
           
       def getFileObject(self,fileId):
           x=self.v_files.get(fileId)
           #logging.debug(x)
           return x
       
       def getFileObjectLastVersion(self,fileId):
           x=self.v_files_lastVersion.get(fileId)
           #logging.debug(x)
           return x
       
       def generateFileBTree(self):
           """erzeuge einen Btree aus allen Files"""
           self.v_files = OOBTree()
           self.v_files_lastVersion = OOBTree()
           self.v_file_ids = Set()
           
           for x in self.CDLICatalog.searchResults():
               
               self.v_files.update({x.getId:x.getObject()})
               self.v_files_lastVersion.update({x.getId:x.getObject().getLastVersion()})
               self.v_file_ids.add(x.getId)
               logging.debug("add:"+x.getId+"XXX"+repr(x.getObject()))
           
           return "done"
     def deleteFiles(self,ids):      def deleteFiles(self,ids):
         """delete files"""          """delete files"""
         for id in ids:          for id in ids:

Removed from v.1.82  
changed lines
  Added in v.1.83


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>