--- versionedFile/extVersionedFile.py 2007/06/25 11:05:03 1.5 +++ versionedFile/extVersionedFile.py 2007/08/31 13:31:20 1.6 @@ -18,9 +18,9 @@ from Products.ExtFile.ExtFile import * from Products.ZCatalog.CatalogPathAwareness import CatalogAware try: - from Products.ImageArchive.ImageArchive import manage_AddImageZogiLib + from Products.ImageArchive.ImageArchive import manage_AddImageZogiLib except: - print "no images" + print "no images" from threading import Thread import shutil @@ -35,8 +35,8 @@ try: except: print "ECHO Elements not imported" class ECHO_basis: - """leer""" - manage_options=() + """leer""" + manage_options=() def sortv(x,y): @@ -56,19 +56,19 @@ class generateDownloadZip: def __call__(self): """call generate download zip""" storeTempDir=tempfile.tempdir - tempfile.tempdir=tdir + tempfile.tempdir=tdir tmpPath=tempfile.mktemp() - tmpZip=tempfile.mktemp()+".gtz" + tmpZip=tempfile.mktemp()+".tgz" tmpFn=os.path.split(tmpZip)[1] if not os.path.exists(tempfile.tempdir): os.mkdir(tempfile.tempdir) if not os.path.exists(tmpPath): - os.mkdir(tmpPath) + os.mkdir(tmpPath) - self.response="
Create gtar
"
+ self.response+="
Create gtar
"
self.response+="
This can take a while....
\n"
fh=os.popen2("tar zcvf %s %s/*"%(tmpZip,tmpPath),1)[1]
@@ -89,9 +89,6 @@ class generateDownloadZip:
self.response+=c
if c==")":
self.response+="
\n"
-
-
-
shutil.rmtree(tmpPath)
@@ -106,7 +103,7 @@ class generateDownloadZip:
self.done=True
-
+
def getResult(self):
"""get result"""
return self.response
@@ -120,28 +117,28 @@ class generateDownloadZip:
class extVersionedFileFolder(Folder,ECHO_basis):
"""Folder with versioned files"""
-
-
meta_type = "extVersionedFileFolder"
security= ClassSecurityInfo()
security.declareProtected('AUTHENTICATED_USER','addFileForm')
+
filesMetaType=['extVersionedFile']
+
if ECHO_basis:
optTMP= Folder.manage_options+ECHO_basis.manage_options
else:
optTMP= Folder.manage_options
manage_options =optTMP+(
- {'label':'Generate Index.html','action':'generateIndexHTML'},
- {'label':'Generate Image Index.html','action':'generateIndexHTML_image'},
- {'label':'Generate history_template.html','action':'generateHistoryHTML'},
- {'label':'Import Folder','action':'importFolderForm'},
- {'label':'Export Folder','action':'exportFolder'},
- {'label':'Position of version number','action':'changeHistoryFileNamesForm'},
- )
+ {'label':'Generate Index.html','action':'generateIndexHTML'},
+ {'label':'Generate Image Index.html','action':'generateIndexHTML_image'},
+ {'label':'Generate history_template.html','action':'generateHistoryHTML'},
+ {'label':'Import Folder','action':'importFolderForm'},
+ {'label':'Export Folder','action':'exportFolder'},
+ {'label':'Position of version number','action':'changeHistoryFileNamesForm'},
+ )
-
+
def changeHistoryFileNamesForm(self):
"""change position of version num"""
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeHistoryFileNamesForm.zpt')).__of__(self)
@@ -150,17 +147,14 @@ class extVersionedFileFolder(Folder,ECHO
def changeHistoryFileNames(self,positionVersionNum="front",RESPONSE=None):
"""change position of version num"""
-
-
-
versions=self.ZopeFind(self,obj_metatypes=['extVersionedFileObject'],search_sub=1)
if not (getattr(self,'positionVersionNum','front')==positionVersionNum):
for version in versions:
-
+
if positionVersionNum=="front":
-
+
titleTmp=os.path.splitext(version[1].title)
titleTmp2="_".join(titleTmp[0].split("_")[0:-1])
if len(titleTmp)>1:
@@ -176,12 +170,9 @@ class extVersionedFileFolder(Folder,ECHO
else:
id=tmp[0]+"_"+version[1].getId().split("_")[0]
-
-
version[1].aq_parent.manage_renameObjects(ids=[version[1].getId()],new_ids=[id])
version[1].title=id
-
self.positionVersionNum=positionVersionNum
if RESPONSE:
RESPONSE.redirect("manage_main")
@@ -192,7 +183,7 @@ class extVersionedFileFolder(Folder,ECHO
"""form fuer folder import"""
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','importFolderForm.zpt')).__of__(self)
return pt()
-
+
def importFolder(self,path,comment="",author=None,lockedBy=None,RESPONSE=None):
"""importiere inhalt eines folders"""
@@ -227,10 +218,10 @@ class extVersionedFileFolder(Folder,ECHO
## if not threadName or threadName=="":
## threadStart=generateDownloadZip(self,self.absolute_url())
## thread=Thread(target=threadStart)
-
+
## thread.start()
-
+
## self.zipThreads[thread.getName()[0:]]=threadStart
## self.zipThreads2[thread.getName()[0:]]=thread
## self.REQUEST.SESSION['threadName']=thread.getName()[0:]
@@ -239,7 +230,7 @@ class extVersionedFileFolder(Folder,ECHO
## return wait_template[0][1]()
## pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','zip_wait.zpt')).__of__(self)
## return pt()
-
+
## else:
## self.REQUEST.SESSION['threadName']=threadName
@@ -267,17 +258,17 @@ class extVersionedFileFolder(Folder,ECHO
## return pt()
def downloadSet(self,fn):
- """download prepared set"""
- filename=os.path.join(tdir,fn)
+ """download prepared set"""
+ filename=os.path.join(tdir,fn)
-
- self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s" """%"downloadFileFolder.tgz")
- self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream")
- len=os.stat(filename)[6]
- self.REQUEST.RESPONSE.setHeader("Content-Length",len)
- images=file(filename).read()
- self.REQUEST.RESPONSE.write(images)
- self.REQUEST.RESPONSE.close()
+
+ self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s" """%"downloadFileFolder.tgz")
+ self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream")
+ len=os.stat(filename)[6]
+ self.REQUEST.RESPONSE.setHeader("Content-Length",len)
+ images=file(filename).read()
+ self.REQUEST.RESPONSE.write(images)
+ self.REQUEST.RESPONSE.close()
@@ -295,7 +286,7 @@ class extVersionedFileFolder(Folder,ECHO
zt=ZopePageTemplate('index.html')
self._setObject('index.html',zt)
default_content_fn = os.path.join(package_home(globals()),
- 'zpt/versionFileFolderMain_image.zpt')
+ 'zpt/versionFileFolderMain_image.zpt')
text = open(default_content_fn).read()
zt.pt_edit(text, 'text/html')
@@ -314,7 +305,7 @@ class extVersionedFileFolder(Folder,ECHO
zt=ZopePageTemplate('index.html')
self._setObject('index.html',zt)
default_content_fn = os.path.join(package_home(globals()),
- 'zpt/versionFileFolderMain.zpt')
+ 'zpt/versionFileFolderMain.zpt')
text = open(default_content_fn).read()
zt.pt_edit(text, 'text/html')
@@ -327,13 +318,11 @@ class extVersionedFileFolder(Folder,ECHO
def generateIndexHTML(self,RESPONSE=None):
"""lege standard index.html an"""
-
-
if not self.ZopeFind(self,obj_ids=['index.html']):
zt=ZopePageTemplate('index.html')
self._setObject('index.html',zt)
default_content_fn = os.path.join(package_home(globals()),
- 'zpt/versionFileFolderMain.zpt')
+ 'zpt/versionFileFolderMain.zpt')
text = open(default_content_fn).read()
zt.pt_edit(text, 'text/html')
@@ -346,14 +335,11 @@ class extVersionedFileFolder(Folder,ECHO
def generateHistoryHTML(self,RESPONSE=None):
"""lege standard index.html an"""
-
-
-
if not self.ZopeFind(self,obj_ids=['history_template.html']):
zt=ZopePageTemplate('history_template.html')
self._setObject('history_template.html',zt)
default_content_fn = os.path.join(package_home(globals()),
- 'zpt/versionHistory.zpt')
+ 'zpt/versionHistory.zpt')
text = open(default_content_fn).read()
zt.pt_edit(text, 'text/html')
@@ -362,9 +348,7 @@ class extVersionedFileFolder(Folder,ECHO
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
-
-
-
+
def getVersionedFiles(self,sortField='title'):
"""get all versioned files"""
@@ -375,36 +359,30 @@ class extVersionedFileFolder(Folder,ECHO
def sortDate(x,y):
return cmp(y[1].getLastVersion().getTime(),x[1].getLastVersion().getTime())
-
def sortComment(x,y):
-
-
-
- try:
- xc=getattr(x[1],'comment','ZZZZZZZZZZZZZ').lower()
- except:
- xc='ZZZZZZZZZZZZZ'.lower()
- try:
- yc=getattr(y[1],'comment','ZZZZZZZZZZZZZ').lower()
- except:
- yc='ZZZZZZZZZZZZZ'.lower()
-
-
- if (xc=='') or (xc=='ZZZZZZZZZZZZZ'.lower()):
-
- try:
- xc=x[1].getLastVersion().getVComment().lower()
- except:
- xc='ZZZZZZZZZZZZZ'.lower()
-
- if (yc=='') or (yc=='ZZZZZZZZZZZZZ'.lower()):
- try:
- yc=y[1].getLastVersion().getVComment().lower()
- except:
- yc='ZZZZZZZZZZZZZ'.lower()
-
-
- return cmp(xc,yc)
+ try:
+ xc=getattr(x[1],'comment','ZZZZZZZZZZZZZ').lower()
+ except:
+ xc='ZZZZZZZZZZZZZ'.lower()
+
+ try:
+ yc=getattr(y[1],'comment','ZZZZZZZZZZZZZ').lower()
+ except:
+ yc='ZZZZZZZZZZZZZ'.lower()
+
+ if (xc=='') or (xc=='ZZZZZZZZZZZZZ'.lower()):
+ try:
+ xc=x[1].getLastVersion().getVComment().lower()
+ except:
+ xc='ZZZZZZZZZZZZZ'.lower()
+
+ if (yc=='') or (yc=='ZZZZZZZZZZZZZ'.lower()):
+ try:
+ yc=y[1].getLastVersion().getVComment().lower()
+ except:
+ yc='ZZZZZZZZZZZZZ'.lower()
+
+ return cmp(xc,yc)
def sortAuthor(x,y):
@@ -412,7 +390,6 @@ class extVersionedFileFolder(Folder,ECHO
versionedFiles=self.ZopeFind(self,obj_metatypes=self.filesMetaType)
-
if sortField=='title':
versionedFiles.sort(sortName)
elif sortField=='date':
@@ -461,9 +438,9 @@ class extVersionedFileFolder(Folder,ECHO
if newName=='':
filename=file.filename
id=filename[max(filename.rfind('/'),
- filename.rfind('\\'),
- filename.rfind(':'),
- )+1:]
+ filename.rfind('\\'),
+ filename.rfind(':'),
+ )+1:]
else:
id=newName
@@ -471,8 +448,8 @@ class extVersionedFileFolder(Folder,ECHO
vC=self.REQUEST.form['vC']
manage_addextVersionedFile(self,id,'','')
#if (getattr(self,'commentNonEmpty',0)==1) and vC.strip()=="":
-
-
+
+
ob=self._getOb(id)
ob.title=id
file2=file
@@ -506,9 +483,9 @@ manage_addextVersionedFileFolderForm=DTM
def manage_addextVersionedFileFolder(self, id, title='',
- createPublic=0,
- createUserF=0,
- REQUEST=None):
+ createPublic=0,
+ createUserF=0,
+ REQUEST=None):
"""Add a new Folder object with id *id*.
If the 'createPublic' and 'createUserF' parameters are set to any true
@@ -526,11 +503,11 @@ def manage_addextVersionedFileFolder(sel
if createUserF:
if not checkPermission('Add User Folders', ob):
raise Unauthorized, (
- 'You are not authorized to add User Folders.'
- )
+ 'You are not authorized to add User Folders.'
+ )
ob.manage_addUserFolder()
-
+
if REQUEST is not None:
return self.manage_main(self, REQUEST, update_menu=1)
@@ -545,15 +522,15 @@ class extVersionedFileObject(ExtFile):
Kind='File',kind='file')
manage_editForm._setName('manage_editForm')
-
-
-
security.declarePublic('getTitle')
-
def getTitle(self):
"""get title"""
return self.title
-
+
+ def getData(self):
+ """returns object content (calls ExtFile.index_html)"""
+ return ExtFile.index_html(self)
+
security.declarePublic('getVComment')
def getVComment(self):
"""get the comment of this file"""
@@ -562,14 +539,11 @@ class extVersionedFileObject(ExtFile):
else:
return self.vComment
-
+
def manageVCommentForm(self):
"""add a comment"""
self.REQUEST.SESSION['refer']=self.REQUEST['HTTP_REFERER']
-
-
-
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addVComment')).__of__(self)
return pt()
@@ -603,7 +577,7 @@ class extVersionedFileObject(ExtFile):
if hasattr(self,'time'):
return time.strftime("%Y-%m-%d %H:%M:%S",self.time)
elif hasattr(self,'timefixed'):
- return self.timefixed
+ return self.timefixed
else:
setattr(self,'timefixed',self.bobobase_modification_time().ISO())
return self.bobobase_modification_time().ISO()
@@ -652,7 +626,6 @@ class extVersionedFileObject(ExtFile):
security.declarePublic('getVersionNumber')
-
def getVersionNumber(self):
"""get version"""
return self.versionNumber
@@ -662,10 +635,9 @@ class extVersionedFileObject(ExtFile):
"""get version"""
return self.versionComment
-
+
security.declarePublic('lastEditor')
-
def lastEditor(self):
"""last Editor"""
if hasattr(self,'author'):
@@ -683,14 +655,12 @@ class extVersionedFileObject(ExtFile):
if jar is None or oid is None: return None
return jar.db().history(oid)[0]['user_name']
-
-
manage_addextVersionedFileObjectForm=DTMLFile('dtml/fileAdd', globals(),Kind='extVersionedFileObject',kind='extVersionedFileObject', version='1')
def manage_addextVersionedFileObject(self,id,vC='',author='', file='',title='',precondition='', content_type='',
- REQUEST=None):
+ REQUEST=None):
"""Add a new File object.
Creates a new File object 'id' with the contents of 'file'"""
@@ -737,9 +707,9 @@ class extVersionedFile(CatalogAware,Fold
return self.title
def PrincipiaSearchSource(self):
- """Return cataloguable key for ourselves."""
- return str(self)
-
+ """Return cataloguable key for ourselves."""
+ return str(self)
+
def __init__(self, id, title, lockedBy,author):
"""init"""
self.id=id
@@ -785,7 +755,7 @@ class extVersionedFile(CatalogAware,Fold
return REQUEST.RESPONSE.redirect(self.REQUEST.SESSION['refer'])
return REQUEST.RESPONSE.redirect(self.aq_parent.absolute_url())
-
+
def getImages(self):
@@ -795,7 +765,7 @@ class extVersionedFile(CatalogAware,Fold
return None
else:
return images
-
+
security.declarePublic('getComment')
def getComment(self):
"""get the comment of this file"""
@@ -804,7 +774,7 @@ class extVersionedFile(CatalogAware,Fold
else:
return self.comment
-
+
meta_type="extVersionedFile"
@@ -825,7 +795,7 @@ class extVersionedFile(CatalogAware,Fold
self.comment_date=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
return REQUEST.RESPONSE.redirect(self.aq_parent.absolute_url())
-
+
security.declarePublic('getLastChangeDate')
def getLastChangeDate(self):
@@ -843,14 +813,13 @@ class extVersionedFile(CatalogAware,Fold
def getLockedBy(self):
"""get locked by"""
return str(self.lockedBy)
-
+
security.declarePublic('getLastVersion')
def getLastVersion(self):
"""Last Version"""
tmp=0
lastVersion=None
-
for version in self.ZopeFind(self):
if hasattr(version[1],'versionNumber'):
@@ -870,7 +839,7 @@ class extVersionedFile(CatalogAware,Fold
tmp=self.getLastVersion().getData()
#print "XX",data,tmp
try:
- l=list(d.compare(data.splitlines(1),tmp.splitlines(1)))
+ l=list(d.compare(data.splitlines(1),tmp.splitlines(1)))
except:
return 0,""
plus=0
@@ -881,8 +850,9 @@ class extVersionedFile(CatalogAware,Fold
if a[0]=='-':
minus+=1
-
return max([plus,minus]),l
+
+
security.declarePublic('index_html')
def index_html(self):
"""main view"""
@@ -891,7 +861,7 @@ class extVersionedFile(CatalogAware,Fold
#return "File: %s Version:%i modified:%s size:%s modified by:%s"%(self.title,lastVersion.versionNumber,lastVersion.getTime(),lastVersion.getSize(),lastVersion.lastEditor())
return self.history()
-
+
security.declarePublic('getVersion')
def getVersion(self):
tmp=0
@@ -904,8 +874,6 @@ class extVersionedFile(CatalogAware,Fold
return tmp+1
- security.declareProtected('AUTHENTICATED_USER','unlock')
-
def history(self):
"""history"""
@@ -948,7 +916,6 @@ class extVersionedFile(CatalogAware,Fold
security.declareProtected('AUTHENTICATED_USER','addVersionedFileObjectForm')
-
def addVersionedFileObjectForm(self):
"""add a new version"""
@@ -976,18 +943,13 @@ class extVersionedFile(CatalogAware,Fold
if changeName=="yes":
filename=file.filename
self.title=filename[max(filename.rfind('/'),
- filename.rfind('\\'),
- filename.rfind(':'),
- )+1:]
-
+ filename.rfind('\\'),
+ filename.rfind(':'),
+ )+1:]
if not newName=='':
self.title=newName[0:]
-
-
-
-
positionVersionNum=getattr(self,'positionVersionNum','front')
if positionVersionNum=='front':
@@ -998,7 +960,6 @@ class extVersionedFile(CatalogAware,Fold
id=tmp[0]+"_V%i"%self.getVersion()+tmp[1]
else:
id=tmp[0]+"_V%i"%self.getVersion()
-
manage_addextVersionedFileObject(self,id,vC,author,file,id,precondition, content_type)
objs=self.ZopeFind(self,obj_ids=[id])[0][1].setVersionNumber(int(self.getVersion()))
@@ -1020,28 +981,13 @@ class extVersionedFile(CatalogAware,Fold
else:
return self.ZopeFind(self,obj_ids=[id])[0][1]
-
- security.declareProtected('AUTHENTICATED_USER','downloadLocked')
+
def download(self):
"""download and lock"""
-
self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename=%s"""%self.getLastVersion().getId())
self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream")
-
- #try:
- # txt=self.getLastVersion.index_html()
- #except:
- # txt=self.getLastVersion.index_html(REQUEST,RESPONSE)
-
- #self.REQUEST.RESPONSE.setHeader("Content-Length","str(len(txt)+1000)")
-
self.content_type="application/octet-stream"
- #self.REQUEST.RESPONSE.write("bl")
- #self.REQUEST.RESPONSE.write(txt)
- #self.REQUEST.close()
-
- #self.getLastVersion().content_type="application/octet-stream"
self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+'/'+self.getId()+'/'+self.getLastVersion().getId())
security.declareProtected('AUTHENTICATED_USER','downloadLocked')
@@ -1065,7 +1011,7 @@ def manage_addextVersionedFile(self,id,t
"""add the OSAS_root"""
newObj=extVersionedFile(id,title,lockedBy,author)
self._setObject(id,newObj)
-
+
if RESPONSE is not None:
RESPONSE.redirect('manage_main')