Diff for /cdli/cdli_files.py between versions 1.101 and 1.102

version 1.101, 2008/10/15 10:00:06 version 1.102, 2008/10/29 12:10:05
Line 1 Line 1
 """CDLI extensions of the filearchive"""      """CDLI extensions of the filearchive"""    
 from Products.versionedFile.extVersionedFile import *  from Products.versionedFile.extVersionedFile import *
 from Products.ZCatalog.CatalogPathAwareness import CatalogAware  from Products.ZCatalog.CatalogPathAwareness import CatalogAware
 from tempfile import mkstemp,mkdtemp      
 import os.path  import os.path
 import os  import os
 from types import *  
 import urlparse  import urlparse
 import urllib  import urllib
 import cgi  import cgi
Line 32  import cdliSplitter Line 30  import cdliSplitter
 from sets import Set  from sets import Set
 import md5  import md5
 from DownloadBasket import DownloadBasketFinallyThread  from DownloadBasket import DownloadBasketFinallyThread
   from types import *
                                                                                 
 def makelist(mySet):  def makelist(mySet):
         x = list(mySet)          x = list(mySet)
Line 224  def unique(s): Line 223  def unique(s):
 class BasketContent(SimpleItem):  class BasketContent(SimpleItem):
     """classe fuer den Inhalt eines Baskets"""      """classe fuer den Inhalt eines Baskets"""
         
       def getFileAndVersionFromId(self,pnum,versionNr):
          
           obj=self.cdliRoot.getFileObject(pnum)
           logging.debug("obj : %s"%obj)
           version=obj.getVersionNr(versionNr)
           logging.debug("-------vs: %s"%version.getFileName())
           return version,obj
       
     def __init__(self,content=[]):      def __init__(self,content=[]):
         """content"""          """content"""
         self.contentList=content[0:]          
           self.setContent(content[0:])
           
     def getContent(self,filtered=True):      def getContent(self,filtered=True):
           return self.contentList
       
       def getContentOld(self,filtered=True):
         """get content"""          """get content"""
           logging.debug("content object: content List %s"%self.contentList)
         ret=[]          ret=[]
         if filtered:  
             for x in self.contentList:  
                     if not((x[0] is None) or (x[1] is None)):  
                             ret.append(x)  
             return ret  
                           
         else:          return [self.getFileAndVersionFromId(x[0],x[1]) for x in self.contentList]
             return self.contentList  #            
   #       if filtered:
   #           for x in self.contentList:
   #                    if not((x[0] is None) or (x[1] is None)):
   #                            ret.append(x)
   #            logging.debug("content object: content List -done filtered")
   #            return ret
   #           
   #       else:
   #            logging.debug("content object: content List -done  not filtered")
   #           return self.contentList
   
     def allContent(self):      def allContent(self):
         """get all content"""          """get all content"""
         return self.getContent(filtered=False)          return self.getContent(filtered=False)
   
     def setContent(self,content):      def setContent(self,content):
         self.contentList=content[0:]          contentList=[]
           for x in content:
               if not((x[0] is None) or (x[1] is None)):
               
                   contentList.append((x[1].getId(),x[0].getVersionNumber()))
           logging.debug("cl: %s"%contentList)
           self.contentList=contentList[0:]
           
     def numberOfItems(self):      def numberOfItems(self):
         """number"""          """number"""
Line 627  class CDLIBasketContainer(OrderedFolder) Line 650  class CDLIBasketContainer(OrderedFolder)
         if not basketId:          if not basketId:
             return []              return []
                   
         ob=getattr(self,basketId).getContent()          ob=getattr(self,basketId).getContent() #get the content of a basket
                   
         ret=[x[0].split(".")[0] for x in ob]          ret=[x[0].split(".")[0] for x in ob]
                   
Line 646  class CDLIBasketContainer(OrderedFolder) Line 669  class CDLIBasketContainer(OrderedFolder)
             return ""              return ""
                   
         ob=getattr(self,basketId).getLastVersion()          ob=getattr(self,basketId).getLastVersion()
         for object in ob.getContent():          for pnum,versionNr in ob.getContent():
               obj=self.cdliRoot.getFileObject(pnum)
          # logging.debug("obj : %s"%obj)
          # version=obj.getVersionNr(versionNr)
         
             if current=="no": #version as they are in the basket              if current=="no": #version as they are in the basket
                             ret+=str(object[0].getData())+"\n"                              cur= obj.getVersionNr(versionNr)
                               ret+=str(cur.getData())+"\n"
             elif current=="yes":              elif current=="yes":
                             #search current object                              #search current object
                             #logging.debug("current: %s"%object[1].getId().split(".")[0])                              #logging.debug("current: %s"%object[1].getId().split(".")[0])
                             founds=self.CDLICatalog.search({'title':object[1].getId().split(".")[0]})                              obj.getData()
                             if len(founds)>0:        
                                 ret+=str(founds[0].getObject().getLastVersion().getData())+"\n"  
         return ret          return ret
           
     security.declareProtected('manage','upDateBaskets')       security.declareProtected('manage','upDateBaskets') 
Line 1060  class CDLIBasket(Folder,CatalogAware): Line 1086  class CDLIBasket(Folder,CatalogAware):
         return [x[1].getId() for x in self.getLastVersion().getContent()]          return [x[1].getId() for x in self.getLastVersion().getContent()]
           
   
     def isActual(self,obj):      def isActual(self,obj,nummer):
           """teste ob im basket die aktuelle version ist, obj kann entweder ein CDLIFile sein oder eine 
           eine pnummer, die auf ein CDLIFile verweist"""
           try:
               #logging.debug("isActual:"+repr(obj))
               if isinstance(obj, CDLIFile):
                   actualNo=obj.getLastVersion().getVersionNumber()
               else:
                   actualNo=self.cdliRoot.getFileObjectLastVersion(obj).getVersionNumber()
               
               if actualNo==nummer:
                   return True , 0
               else:
                   return False, actualNo
           except:
               logging.error( """is actual: %s (%s %s)"""%(repr(obj),sys.exc_info()[0],sys.exc_info()[1]))
               logging.error("""         PARAMS: %s %s"""%(obj,nummer))
               return False, -1
       def isActualOld(self,obj):
         """teste ob im basket die aktuelle version ist"""          """teste ob im basket die aktuelle version ist"""
         try:          try:
             #logging.debug("isActual:"+repr(obj))              #logging.debug("isActual:"+repr(obj))
Line 1257  class CDLIBasket(Folder,CatalogAware): Line 1301  class CDLIBasket(Folder,CatalogAware):
         hash = md5.new(repr(makelist(ids))).hexdigest() # erzeuge hash als identification          hash = md5.new(repr(makelist(ids))).hexdigest() # erzeuge hash als identification
         #logging.debug("JJJJJJJ:"+repr(self.makelist(ids)))          #logging.debug("JJJJJJJ:"+repr(self.makelist(ids)))
                 
                                 retrieved = self.CDLICache.retrieve(hash)
         if hasattr(self.cdliRoot,'v_tmpStore') and self.cdliRoot.v_tmpStore.has_key("hash"):  #TODO: muss eigentlich  self.cdliRoot.v_tmpStore.has_key(hash): heissen (ohne "), erstmal so gesetzt damit der hash hier nie benutzt wird          if retrieved:
             logging.debug("from store!")              newContent=Set(map(swap,retrieved))
             newContent=Set(map(swap,self.cdliRoot.v_tmpStore[hash]))  
            
         else:          else:
             logging.debug("not from store!")  
             newContent=Set([(self.getFileObjectLastVersion(x),self.getFileObject(x)) for x in ids])              newContent=Set([(self.getFileObjectLastVersion(x),self.getFileObject(x)) for x in ids])
                   
        
           
         #remove all Elements which are not stored          #remove all Elements which are not stored
         if (None,None) in newContent:             if (None,None) in newContent:   
             newContent.remove((None,None))              newContent.remove((None,None))
Line 1288  class CDLIBasket(Folder,CatalogAware): Line 1331  class CDLIBasket(Folder,CatalogAware):
         ret=[]          ret=[]
                   
         lv=self.getLastVersion()          lv=self.getLastVersion()
         for obj in lv.content.getContent():          #for obj in lv.content.getContent():
             #logging.info("XXXXXXXXXX %s"%repr(obj))              #logging.info("XXXXXXXXXX %s"%repr(obj))
             ret.append((obj[1].getId(),obj[0].versionNumber))          #    ret.append((obj[1].getId(),obj[0].versionNumber))
                           
         return ret          return lv
                   
     def getContentIds(self):      def getContentIds(self):
         """print basket content"""          """print basket content"""
Line 1376  class CDLIBasketVersion(Implicit,Persist Line 1419  class CDLIBasketVersion(Implicit,Persist
                   
         objs=self.getContent()          objs=self.getContent()
         for obj in objs:          for obj in objs:
             if not self.isActual(obj)[0]:              if not self.isActual(obj[0],obj[1])[0]:
                 return True                  return True
         return False          return False
           
Line 1430  class CDLIBasketVersion(Implicit,Persist Line 1473  class CDLIBasketVersion(Implicit,Persist
             #check if a locked object exist in the basket.              #check if a locked object exist in the basket.
             lockedObjects={}              lockedObjects={}
             for object in self.content.getContent():              for object in self.content.getContent():
                   obj=self.getFileObject(object[0])
                 if (not str(object[1].lockedBy)=="") and (not (str(object[1].lockedBy)==str(self.REQUEST['AUTHENTICATED_USER']))):                  if (not str(obj.lockedBy)=="") and (not (str(obj.lockedBy)==str(self.REQUEST['AUTHENTICATED_USER']))):
                     lockedObjects[object[1].title]=repr(object[1].lockedBy)                      lockedObjects[obj.title]=repr(obj.lockedBy)
                                         
                                           
             keys=lockedObjects.keys()              keys=lockedObjects.keys()
Line 1483  class CDLIBasketVersion(Implicit,Persist Line 1526  class CDLIBasketVersion(Implicit,Persist
             if lock:              if lock:
                 logging.debug("-----start locking")                  logging.debug("-----start locking")
                 for object in self.content.getContent():                  for object in self.content.getContent():
                          if object[1].lockedBy =='':                           obj=self.ctx.getFileObject(object[0])
                              object[1].lockedBy=self.REQUEST['AUTHENTICATED_USER']                           if obj.lockedBy =='':
                                obj.lockedBy=self.REQUEST['AUTHENTICATED_USER']
                 logging.debug("-----finished locking")                  logging.debug("-----finished locking")
                                   
                     #obj.lockedBy=user                      #obj.lockedBy=user
Line 1559  class CDLIBasketVersion(Implicit,Persist Line 1603  class CDLIBasketVersion(Implicit,Persist
               self.REQUEST.RESPONSE.write(ret)                 self.REQUEST.RESPONSE.write(ret) 
                                     
               for fileName in files:                for fileName in files:
                   logging.debug("download: %s"%fileName)
                 try:                  try:
                   self.REQUEST.RESPONSE.write(file(fileName).read())                    self.REQUEST.RESPONSE.write(file(fileName).read())
                 except:                  except:
Line 1592  class CDLIBasketVersion(Implicit,Persist Line 1637  class CDLIBasketVersion(Implicit,Persist
           
     def getContent(self):      def getContent(self):
         """get Basket Content"""          """get Basket Content"""
         return self.content.getContent()          logging.debug("retrieving content A")
           cnt = self.content
           logging.debug("retrieving content: obj %s"%cnt)
           tmp = self.content.getContent()
           logging.debug("got content")
           return tmp
   
           
     def __init__(self,id,user,comment="",basketContent=[]):      def __init__(self,id,user,comment="",basketContent=[]):
Line 1615  class CDLIBasketVersion(Implicit,Persist Line 1665  class CDLIBasketVersion(Implicit,Persist
     security.declareProtected('manage','index_html')      security.declareProtected('manage','index_html')
     def index_html(self):      def index_html(self):
             """view the basket"""              """view the basket"""
               logging.debug("start index_html - Basket version")    
             if self.REQUEST.get('change',False):              if self.REQUEST.get('change',False):
                     ob=self.aq_parent.updateObjects(self.REQUEST['change'])                      ob=self.aq_parent.updateObjects(self.REQUEST['change'])
                                         
                     self.REQUEST.RESPONSE.redirect(ob.absolute_url())#go to new basket, because changing generates a new basket                      self.REQUEST.RESPONSE.redirect(ob.absolute_url())#go to new basket, because changing generates a new basket
                                                       logging.debug("start index_html - Basket version:template")    
             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','BasketVersionMain.zpt')).__of__(self)              pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','BasketVersionMain.zpt')).__of__(self)
             return pt()              return pt()
             
     def getObjUrl(self,result):      def getObjUrl(self,result):
         """getUrl of the version of the object"""          """getUrl of the version of the object"""
         objId=result[1].getTitle()        
         founds=self.CDLICatalog.search({'title':objId})          founds=self.CDLICatalog.search({'title':result})
         if len(founds)>0:          if len(founds)>0:
              return founds[0].getObject().getLastVersion().absolute_url()               return founds[0].getObject().getLastVersion().absolute_url()
                     
         else: #assume version number          else: #assume version number
             splitted=objId.split("_")              splitted=result.split("_")
             founds=self.CDLICatalog.search({'title':splitted[1]})                      founds=self.CDLICatalog.search({'title':splitted[1]})        
             return founds[0].getObject().getLastVersion().absolute_url()+'/'+objId              return founds[0].getObject().getLastVersion().absolute_url()+'/'+result
         
 def manage_addCDLIBasketVersion(self,user,comment="",basketContent=[],RESPONSE=None):  def manage_addCDLIBasketVersion(self,user,comment="",basketContent=[],RESPONSE=None):
     """add a version"""      """add a version"""
Line 2137  class CDLIFileFolder(extVersionedFileFol Line 2187  class CDLIFileFolder(extVersionedFileFol
             pt=getattr(self,'filelist.html')              pt=getattr(self,'filelist.html')
             return pt(basketName=basketName,numberOfObjects=numberOfObjects)              return pt(basketName=basketName,numberOfObjects=numberOfObjects)
                   
         if hash is not None and hasattr(self.cdliRoot,'v_tmpStore') and self.cdliRoot.v_tmpStore.has_key(hash):   
                                 
                logging.debug("asking for storage2")          result =self.CDLICache.retrieve(hash)
                result =self.cdliRoot.v_tmpStore[hash]  
                if result:                 if result:
                    logging.debug("give result from storage2")                     logging.debug("give result from storage2")
                    return hash,self.cdliRoot.v_tmpStore[hash]             return hash,result
                       
         if list is not None: # got already a list          if list is not None: # got already a list
                           
Line 2203  class CDLIFileFolder(extVersionedFileFol Line 2251  class CDLIFileFolder(extVersionedFileFol
                 return pt(search=ids)                  return pt(search=ids)
             else:                   else:     
                 #self.REQUEST.SESSION['hash'] = ret # store in session                   #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(self.makelist(ids)))
                 #logging.debug("HHHHHHNEU:"+repr(hash))                  #logging.debug("HHHHHHNEU:"+repr(hash))
                 self.cdliRoot.v_tmpStore[hash] = ret # store in session                   self.CDLICache.store(hash,ret)
                   
                 if returnHash == True:                  if returnHash == True:
                     return hash,ret                      return hash,ret
                 return ret                  return ret
Line 2344  class CDLIRoot(Folder): Line 2392  class CDLIRoot(Folder):
                 'graphemes':cdliSplitter.graphemeSplitter()}                  'graphemes':cdliSplitter.graphemeSplitter()}
           
           
       def unicodify(self,txt):
           return unicodify(txt)
       def invalidateOldCacheVersion(self):
           """loescht die alte Version des Cache"""
           del self.v_tmpStore
           return "done"
       
     def viewATF(self,id,RESPONSE):      def viewATF(self,id,RESPONSE):
         """view an Object"""          """view an Object"""
         ob = self.CDLICatalog({'title':id})          ob = self.CDLICatalog({'title':id})

Removed from v.1.101  
changed lines
  Added in v.1.102


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