Diff for /cdli/cdli_files.py between versions 1.27 and 1.37

version 1.27, 2006/06/17 15:03:19 version 1.37, 2006/07/14 19:08:30
Line 215  class uploadATFThread(Thread): Line 215  class uploadATFThread(Thread):
         ctx = self.getContext(app,serverport=self.serverport)          ctx = self.getContext(app,serverport=self.serverport)
         self.uploadATFThread(ctx,self.upload,self.basketId)          self.uploadATFThread(ctx,self.upload,self.basketId)
             
         ctx.cdliRoot.cdli_main.tmpStore2[self.getName()[0:]]=self.returnValue          #ctx.cdliRoot.cdli_main.tmpStore2[self.getName()[0:]]=self.returnValue
   
         get_transaction().commit()          get_transaction().commit()
                   
Line 295  class uploadATFThread(Thread): Line 295  class uploadATFThread(Thread):
                 #analyse the differences to the actual file                  #analyse the differences to the actual file
                 obj=found.getObject()                  obj=found.getObject()
                 
                 if (not obj.lockedBy=='') and (not obj.lockedBy==self.username):                  if (not (str(obj.lockedBy))=='') and (not (str(obj.lockedBy)==str(self.username))):
                     errors.append(obj)                      errors.append(obj)
                 else:                  else:
                     data=file(os.path.join(dir,fn)).read()                      data=file(os.path.join(dir,fn)).read()
Line 560  class CDLIBasketContainer(OrderedFolder) Line 560  class CDLIBasketContainer(OrderedFolder)
     security=ClassSecurityInfo()      security=ClassSecurityInfo()
     meta_type="CDLIBasketContainer"      meta_type="CDLIBasketContainer"
           
       security.declareProtected('manage','deleteBaskets')        
     def deleteBaskets(self,ids=None):      def deleteBaskets(self,ids=None):
         """delete baskets, i.e. move them into trash folder"""          """delete baskets, i.e. move them into trash folder"""
                   
Line 577  class CDLIBasketContainer(OrderedFolder) Line 578  class CDLIBasketContainer(OrderedFolder)
         cut=self.manage_cutObjects(ids)          cut=self.manage_cutObjects(ids)
         trash.manage_pasteObjects(cut)          trash.manage_pasteObjects(cut)
                   
       security.declareProtected('manage','manageBaskets')       
     def manageBaskets(self,ids,submit,REQUEST=None,RESPONSE=None):      def manageBaskets(self,ids,submit,REQUEST=None,RESPONSE=None):
         """manage baskets, delete or copy"""          """manage baskets, delete or copy"""
         if submit=="delete":          if submit=="delete":
Line 586  class CDLIBasketContainer(OrderedFolder) Line 588  class CDLIBasketContainer(OrderedFolder)
                           
         if RESPONSE:          if RESPONSE:
             RESPONSE.redirect(self.absolute_url())              RESPONSE.redirect(self.absolute_url())
       
       security.declareProtected('View','getBasketIdfromName')       
     def getBasketIdfromName(self,basketname):      def getBasketIdfromName(self,basketname):
         """get id from name"""          """get id from name"""
   
Line 611  class CDLIBasketContainer(OrderedFolder) Line 615  class CDLIBasketContainer(OrderedFolder)
         return pt(basketId=basketId,basketName=basketName)          return pt(basketId=basketId,basketName=basketName)
         
   
               security.declareProtected('View','index_html')    
     def index_html(self):      def index_html(self):
         """stanadard ansicht"""          """stanadard ansicht"""
                   
Line 689  class CDLIBasketContainer(OrderedFolder) Line 693  class CDLIBasketContainer(OrderedFolder)
             baskets.sort(sortAuthor)              baskets.sort(sortAuthor)
         elif sortField=='comment':          elif sortField=='comment':
             baskets.sort(sortComment)              baskets.sort(sortComment)
           print "got the baskets"
         return baskets          return baskets
   
   
Line 792  class CDLIBasket(Folder,CatalogAware): Line 796  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):
         """teste ob im basket die aktuelle version ist"""          """teste ob im basket die aktuelle version ist"""
         actualNo=obj[1].getLastVersion().getVersionNumber()          actualNo=obj[1].getLastVersion().getVersionNumber()
         storedNo=obj[0].getVersionNumber()          storedNo=obj[0].getVersionNumber()
                   
         founds=self.CDLICatalog.search({'title':obj[0].getId()})          founds=self.CDLICatalog.search({'title':obj[0].getId()})
           if len(founds)>0:
               actualNo=founds[0].getObject().getLastVersion().getVersionNumber()
               
         if len(founds)>0 and founds[0].getObject().aq_parent.getId()==".trash":          if len(founds)>0 and founds[0].getObject().aq_parent.getId()==".trash":
             return False, -1              return False, -1
                   
Line 846  class CDLIBasket(Folder,CatalogAware): Line 854  class CDLIBasket(Folder,CatalogAware):
         return versions          return versions
   
         
       def updateObjects(self,ids,RESPONSE=None,REQUEST=None):
           """update ids, ids not in the basket the add"""
           if type(ids) is not ListType:
               ids=[ids]
          
           lastVersion=self.getLastVersion() 
           oldContent=lastVersion.basketContent[0:]
           newContent=[]
           
           #first copy the old
           for obj in oldContent:
               if obj[1].getId() not in ids:
                   newContent.append(obj)
           #now add the new
                  
           for id in ids:
               founds=self.CDLICatalog.search({'title':id})
   
               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()))
           
   
           content=newContent 
           user=self.getActualUserName()
           
           ob=manage_addCDLIBasketVersion(self,user,comment="",basketContent=newContent)
           
           if RESPONSE:
               obj=self._getOb(ob.getId())
               RESPONSE.redirect(obj.absolute_url())
           
     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"""
Line 881  class CDLIBasket(Folder,CatalogAware): Line 921  class CDLIBasket(Folder,CatalogAware):
           
         return added          return added
           
       def changeBasket(self,ids,submit,RESPONSE=None,REQUEST=None):
           """change a basket"""
           if submit=="update":
               return self.updateObjects(ids,RESPONSE=RESPONSE,REQUEST=REQUEST)
           elif submit=="delete":
               return self.deleteObjects(ids,RESPONSE=RESPONSE,REQUEST=REQUEST)
               
     def deleteObjects(self,ids,RESPONSE=None,REQUEST=None):      def deleteObjects(self,ids,RESPONSE=None,REQUEST=None):
         """delete objects"""          """delete objects"""
                   
Line 926  class CDLIBasketVersion(SimpleItem): Line 973  class CDLIBasketVersion(SimpleItem):
     """version of a basket"""      """version of a basket"""
           
     meta_type="CDLIBasketVersion"      meta_type="CDLIBasketVersion"
       security=ClassSecurityInfo()
           
     def downloadObjectsAsOneFile(self,lock=None,procedure=None,REQUEST=None):      def containsNonActualFiles(self):
           """returns True if basket contains one or more non current files"""
           
           objs=self.getContent()
           for obj in objs:
               if not self.isActual(obj)[0]:
                   return True
           return False
       
       security.declareProtected('View','downloadObjectsAsOneFile')
       def downloadObjectsAsOneFile(self,lock=None,procedure=None,REQUEST=None,check="yes",current="no"):
         """download all selected files in one file"""          """download all selected files in one file"""
                   
           if (check=="yes") and self.containsNonActualFiles():
               pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','downloadObjectAsOneFile_check.zpt')).__of__(self)
               return pt(lock=lock)
               
         ret=""          ret=""
         lockedObjects={}          lockedObjects={}
                   
Line 963  class CDLIBasketVersion(SimpleItem): Line 1025  class CDLIBasketVersion(SimpleItem):
         for object in self.basketContent:          for object in self.basketContent:
                           
                 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']):
                     ret+=object[0].data                      if current=="no": #version as they are in the basket
                           ret+=str(object[0].data)+"\n"
                       elif current=="yes":
                           #search current object
                           founds=self.CDLICatalog.search({'title':object[0].getId()})
                           if len(founds)>0:      
                               ret+=str(founds[0].getObject().getLastVersion().data)+"\n"
                                   
                 if lock and object[1].lockedBy=='':                  if lock and object[1].lockedBy=='':
                     object[1].lockedBy=self.REQUEST['AUTHENTICATED_USER']                      object[1].lockedBy=self.REQUEST['AUTHENTICATED_USER']
Line 1017  class CDLIBasketVersion(SimpleItem): Line 1085  class CDLIBasketVersion(SimpleItem):
         """get Comment"""          """get Comment"""
         return self.comment          return self.comment
     
       security.declareProtected('View','index_html')
     def index_html(self):      def index_html(self):
             """view the basket"""              """view the basket"""
   
               if self.REQUEST.get('change',False):
   
                       self.aq_parent.updateObjects(self.REQUEST['change'])
                                           
             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()
             
Line 1054  def manage_addCDLIBasketVersion(self,use Line 1128  def manage_addCDLIBasketVersion(self,use
     else:      else:
         return ob          return ob
           
 class CDLIFileObject(versionedFileObject,CatalogAware):  class CDLIFileObject(CatalogAware,versionedFileObject):
     """CDLI file object"""      """CDLI file object"""
           
     meta_type="CDLI File Object"      meta_type="CDLI File Object"
Line 1065  class CDLIFileObject(versionedFileObject Line 1139  class CDLIFileObject(versionedFileObject
     
     security.declarePublic('makeThisVersionCurrent')      security.declarePublic('makeThisVersionCurrent')
           
       def PrincipiaSearchSource(self):
              """Return cataloguable key for ourselves."""
              return str(self)
          
     def makeThisVersionCurrent_html(self):      def makeThisVersionCurrent_html(self):
         """form for making this version current"""          """form for making this version current"""
                   
Line 1189  class CDLIFile(versionedFile,CatalogAwar Line 1267  class CDLIFile(versionedFile,CatalogAwar
         else:          else:
             return "Sorry file is locked by somebody else"              return "Sorry file is locked by somebody else"
                   
     def manage_addCDLIFileObject(self,id,vC,author,file='',title='',precondition='', content_type='',changeName='no',newName='', RESPONSE=None):      def manage_addCDLIFileObject(self,id,vC,author,
                                    file='',title='',
                                    precondition='', 
                                    content_type='',
                                    changeName='no',newName='', 
                                    come_from=None,RESPONSE=None):
         """add"""          """add"""
         try: #TODO: der ganze vC unsinn muss ueberarbeitet werden          try: #TODO: der ganze vC unsinn muss ueberarbeitet werden
             vC=self.REQUEST['vC']              vC=self.REQUEST['vC']
Line 1211  class CDLIFile(versionedFile,CatalogAwar Line 1294  class CDLIFile(versionedFile,CatalogAwar
                   
   
                   
           
         positionVersionNum=getattr(self,'positionVersionNum','front')          positionVersionNum=getattr(self,'positionVersionNum','front')
                   
         if positionVersionNum=='front':          if positionVersionNum=='front':
Line 1231  class CDLIFile(versionedFile,CatalogAwar Line 1313  class CDLIFile(versionedFile,CatalogAwar
           self.REQUEST.SESSION['objID_parent']=self.getId()            self.REQUEST.SESSION['objID_parent']=self.getId()
         except:          except:
           pass            pass
     
         if RESPONSE:          if RESPONSE:
       
             obj=self.ZopeFind(self,obj_ids=[id])[0][1]              obj=self.ZopeFind(self,obj_ids=[id])[0][1]
             if obj.getSize()==0:              if obj.getSize()==0:
                 self.REQUEST.SESSION['objID']=obj.getId()                  self.REQUEST.SESSION['objID']=obj.getId()
Line 1239  class CDLIFile(versionedFile,CatalogAwar Line 1323  class CDLIFile(versionedFile,CatalogAwar
                 return pt()                  return pt()
   
             else:              else:
                   if come_from and (come_from!=""):
                                           RESPONSE.redirect(come_from+"?change="+self.getId())
                   else:
                 RESPONSE.redirect(self.REQUEST['URL2']+'?uploaded=%s'%self.title)                  RESPONSE.redirect(self.REQUEST['URL2']+'?uploaded=%s'%self.title)
   
         else:          else:
Line 1373  class CDLIFileFolder(versionedFileFolder Line 1460  class CDLIFileFolder(versionedFileFolder
           
           
                           
     def findObjectsFromList(self,display=False,start=None,upload=None,list=None,basketName=None,numberOfObjects=None,RESPONSE=None):      def findObjectsFromList(self,enterList=None,display=False,start=None,upload=None,list=None,basketName=None,numberOfObjects=None,RESPONSE=None):
         """findObjectsFromList (, TAB oder LINE separated)"""          """findObjectsFromList (, TAB oder LINE separated)"""
                                                                                 
                   
         if upload: # list from file upload          if upload: # list from file upload
             txt=upload.read()              txt=upload.read()
                                          
           if enterList:
               txt=enterList
               
           if upload or enterList:
             txt=txt.replace(",","\n")              txt=txt.replace(",","\n")
             txt=txt.replace("\t","\n")              txt=txt.replace("\t","\n")
             txt=txt.replace("\r","\n")              txt=txt.replace("\r","\n")
Line 1405  class CDLIFileFolder(versionedFileFolder Line 1497  class CDLIFileFolder(versionedFileFolder
         if list is not None: # got already a list          if list is not None: # got already a list
             ret=[]              ret=[]
             for fileId in list:              for fileId in list:
                 if len(fileId.split("."))==1:                  if fileId.find("*"): #check for wildcards
                           fileId=fileId
                   elif len(fileId.split("."))==1:
                         fileId=fileId+".atf"                          fileId=fileId+".atf"
   
                 ret+=self.CDLICatalog({'title':fileId})                  ret+=self.CDLICatalog({'title':fileId})
Line 1495  class CDLIFileFolder(versionedFileFolder Line 1589  class CDLIFileFolder(versionedFileFolder
                         len(getattr(self,self.default_catalog)({'path':folder[0]}))                          len(getattr(self,self.default_catalog)({'path':folder[0]}))
                         ))                          ))
         return ret          return ret
           security.declareProtected('View','index_html')
     def index_html(self):      def index_html(self):
         """main"""          """main"""
         ext=self.ZopeFind(self,obj_ids=["index.html"])          ext=self.ZopeFind(self,obj_ids=["index.html"])
Line 1543  class CDLIRoot(Folder): Line 1637  class CDLIRoot(Folder):
           
     meta_type="CDLIRoot"      meta_type="CDLIRoot"
           
       def URLquote(self,str):
           """quote url"""
           return urllib.quote(str)
       
       def URLunquote(self,str):
           """unquote url"""
           return urllib.unquote(str)
       
       
     def forceunlock(self):      def forceunlock(self):
         "break all locks"          "break all locks"
         ret=[]          ret=[]
Line 1620  class CDLIRoot(Folder): Line 1723  class CDLIRoot(Folder):
                 
             thread=uploadATFThread()              thread=uploadATFThread()
             threadName=thread.getName()[0:]                                              threadName=thread.getName()[0:]                                
             if not hasattr(self,'_v_uploadATF'):              if (not hasattr(self,'_v_uploadATF')):
                    self._v_uploadATF={}                     self._v_uploadATF={}
                                                                                 
             self._v_uploadATF[threadName]=thread              self._v_uploadATF[threadName]=thread
Line 1643  class CDLIRoot(Folder): Line 1746  class CDLIRoot(Folder):
                           
         else:          else:
             #recover thread, if lost              #recover thread, if lost
             if not hasattr(self,'_v_uploadATF'):              if (not hasattr(self,'_v_uploadATF')):
                self._v_uploadATF={}                 self._v_uploadATF={}
             if not self._v_uploadATF.get(threadName,None):              if not self._v_uploadATF.get(threadName,None):
                  for thread in threading.enumerate():                   for thread in threading.enumerate():
Line 1669  class CDLIRoot(Folder): Line 1772  class CDLIRoot(Folder):
 #                                       tmp[key]=self._v_uploadATF[threadName].returnValue[key][0:]  #                                       tmp[key]=self._v_uploadATF[threadName].returnValue[key][0:]
 #                        else:  #                        else:
 #                                       tmp[key]=self._v_uploadATF[threadName].returnValue[key]  #                                       tmp[key]=self._v_uploadATF[threadName].returnValue[key]
   #                        print repr(tmp[key]),repr(key)
   #                                       
   #                #
                   #tmp=self.cdli_main.tmpStore2[threadName]
                   tmp=self._v_uploadATF[threadName].returnValue
                   
                   #self._v_uploadATF[threadName].continueVar=False
                               
                 tmp=self.cdli_main.tmpStore2[threadName]  
                 del(self.cdli_main.tmpStore2[threadName])  
                 self._v_uploadATF[threadName].continueVar=False  
                 self.REQUEST.SESSION['changed']=[x[0].getId() for x in tmp['changed']]                  self.REQUEST.SESSION['changed']=[x[0].getId() for x in tmp['changed']]
                 self.REQUEST.SESSION['errors']=[x.getId() for x in tmp['errors']]                  self.REQUEST.SESSION['errors']=[x.getId() for x in tmp['errors']]
                 self.REQUEST.SESSION['newPs']=tmp['newPs']                  self.REQUEST.SESSION['newPs']=tmp['newPs']
                 self.REQUEST.SESSION['tmpdir']=tmp['dir']                  self.REQUEST.SESSION['tmpdir']=tmp['dir']
                   #del(self.cdli_main.tmpStore2[threadName])
                   print "here the templates"
               
                 pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','uploadCheck.zpt')).__of__(self)                  pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','uploadCheck.zpt')).__of__(self)
                   print "init p"
                   return pt(changed=tmp['changed'],errors=tmp['errors'],dir=tmp['dir'],newPs=tmp['newPs'],basketLen=tmp['basketLen'],numberOfFiles=tmp['numberOfFiles'],
                     basketNameFromId=tmp['basketNameFromId'],basketNameFromFile=tmp['basketNameFromFile'],basketId=tmp['basketId'])
                        
       def redoUpload(self,threadName):
          """redo the upload"""
          tmp=self.cdli_main.tmpStore2[threadName]
          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','uploadCheck.zpt')).__of__(self)
                 return pt(changed=tmp['changed'],errors=tmp['errors'],dir=tmp['dir'],newPs=tmp['newPs'],basketLen=tmp['basketLen'],numberOfFiles=tmp['numberOfFiles'],                  return pt(changed=tmp['changed'],errors=tmp['errors'],dir=tmp['dir'],newPs=tmp['newPs'],basketLen=tmp['basketLen'],numberOfFiles=tmp['numberOfFiles'],
                   basketNameFromId=tmp['basketNameFromId'],basketNameFromFile=tmp['basketNameFromFile'],basketId=tmp['basketId'])                    basketNameFromId=tmp['basketNameFromId'],basketNameFromFile=tmp['basketNameFromFile'],basketId=tmp['basketId'])
                                                                                 
Line 1691  class CDLIRoot(Folder): Line 1808  class CDLIRoot(Folder):
         if not threadName or threadName=="":          if not threadName or threadName=="":
             thread=uploadATFfinallyThread()              thread=uploadATFfinallyThread()
             threadName=thread.getName()[0:]              threadName=thread.getName()[0:]
   
               if (not hasattr(self,'_v_uploadATF')):
                   self._v_uploadATF={}
   
             self._v_uploadATF[threadName]=thread              self._v_uploadATF[threadName]=thread
   
                   
Line 1808  def manage_addCDLIRoot(self, id, title=' Line 1929  def manage_addCDLIRoot(self, id, title='
     if REQUEST is not None:      if REQUEST is not None:
         return self.manage_main(self, REQUEST, update_menu=1)              return self.manage_main(self, REQUEST, update_menu=1)    
     
   

Removed from v.1.27  
changed lines
  Added in v.1.37


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