version 1.72, 2007/03/22 19:56:22
|
version 1.73, 2007/03/23 13:58:10
|
Line 27 import transaction
|
Line 27 import transaction
|
import copy |
import copy |
import codecs |
import codecs |
|
|
|
def generateXMLReturn(hash): |
|
"""erzeugt das xml file als returnwert fuer uploadATFRPC""" |
|
|
|
ret="<return>" |
|
|
|
ret+="<errors>" |
|
for error in hash['errors']: |
|
ret+="""<error atf="%s">%s</error>"""%error |
|
|
|
ret+="</errors>" |
|
|
|
ret+="<changes>" |
|
for changed in hash['changed']: |
|
ret+="""<change atf="%s">%s</change>"""%changed |
|
ret+="</changes>" |
|
|
|
ret+="<newPs>" |
|
for new in hash['newPs']: |
|
ret+="""<new atf="%s"/>"""%new |
|
ret+="</newPs>" |
|
|
|
ret+="</return>" |
|
return ret |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def unique(s): |
def unique(s): |
"""Return a list of the elements in s, but without duplicates. |
"""Return a list of the elements in s, but without duplicates. |
|
|
Line 196 class uploadATFfinallyThread(Thread):
|
Line 229 class uploadATFfinallyThread(Thread):
|
self.result+="<h2>Start processing</h2>" |
self.result+="<h2>Start processing</h2>" |
|
|
#shall I only upload the changed files? |
#shall I only upload the changed files? |
|
logging.info("uploadATFfinally procedure: %s"%procedure) |
if procedure=="uploadchanged": |
if procedure=="uploadchanged": |
changed=[x[0] for x in SESSION.get('changed',[])] |
changed=[x[0] for x in SESSION.get('changed',[])] |
uploadFns=changed+SESSION.get('newPs',[]) |
uploadFns=changed+SESSION.get('newPs',[]) |
Line 341 class uploadATFThread(Thread):
|
Line 375 class uploadATFThread(Thread):
|
ctx = self.getContext(app,serverport=self.serverport) |
ctx = self.getContext(app,serverport=self.serverport) |
logging.info("run intern") |
logging.info("run intern") |
try: |
try: |
|
logging.info("created: %s"%idTmp) |
ctx.temp_folder._setObject(idTmp,tmpStore(idTmp)) |
ctx.temp_folder._setObject(idTmp,tmpStore(idTmp)) |
except: |
except: |
logging.error("thread upload: %s %s"%sys.exc_info()[0:2]) |
logging.error("thread upload: %s %s"%sys.exc_info()[0:2]) |
Line 355 class uploadATFThread(Thread):
|
Line 390 class uploadATFThread(Thread):
|
|
|
conn.close() |
conn.close() |
|
|
|
return getattr(ctx.temp_folder,idTmp) |
|
|
def getResult(self): |
def getResult(self): |
"""method for accessing result""" |
"""method for accessing result""" |
Line 479 class CDLIBasketContainer(OrderedFolder)
|
Line 515 class CDLIBasketContainer(OrderedFolder)
|
security=ClassSecurityInfo() |
security=ClassSecurityInfo() |
meta_type="CDLIBasketContainer" |
meta_type="CDLIBasketContainer" |
|
|
|
def getPNumbersOfBasket(self,basketName): |
|
"""get all pnumbers of a basket as a list, returns an empty list if basket not found |
|
@param basketName: name of the basket |
|
""" |
|
ret=[] |
|
basketId=self.getBasketIdfromName(basketName) |
|
if not basketId: |
|
return [] |
|
|
|
ob=getattr(self,basketId).getContent() |
|
|
|
ret=[x[0].split(".")[0] for x in ob] |
|
|
|
return ret |
|
|
|
def getBasketAsOneFile(self,basketName,current="no"): |
|
"""returns all files of the basket combined in one file |
|
@param basketName: Name of the basket |
|
@param current: (optional) if current is set to "yes" then the most current version of |
|
all files are downloaded and not the versions of the files as stored in the basket |
|
""" |
|
ret="" |
|
basketId=self.getBasketIdfromName(basketName) |
|
if not basketId: |
|
return "" |
|
|
|
ob=getattr(self,basketId).getLastVersion() |
|
for object in ob.getContent(): |
|
if current=="no": #version as they are in the basket |
|
ret+=str(object[0].getData())+"\n" |
|
elif current=="yes": |
|
#search current object |
|
logging.info("crrent: %s"%object[1].getId().split(".")[0]) |
|
founds=self.CDLICatalog.search({'title':object[1].getId().split(".")[0]}) |
|
if len(founds)>0: |
|
ret+=str(founds[0].getObject().getLastVersion().getData())+"\n" |
|
return ret |
|
|
def upDateBaskets(self): |
def upDateBaskets(self): |
"""update content in to objects""" |
"""update content in to objects""" |
|
|
Line 506 class CDLIBasketContainer(OrderedFolder)
|
Line 580 class CDLIBasketContainer(OrderedFolder)
|
trash.manage_pasteObjects(cut) |
trash.manage_pasteObjects(cut) |
|
|
security.declareProtected('manage','manageBaskets') |
security.declareProtected('manage','manageBaskets') |
def manageBaskets(self,submit,ids=None,basket1="",basket2="",REQUEST=None,RESPONSE=None): |
def manageBaskets(self,submit,ids=None,basket1="",basket2="",joinBasket="",subtractBasket="",REQUEST=None,RESPONSE=None): |
"""manage baskets, delete or copy""" |
"""manage baskets, delete or copy""" |
if submit=="delete": |
if submit=="delete": |
self.deleteBaskets(ids) |
self.deleteBaskets(ids) |
|
|
elif submit=="join": |
elif submit=="join": |
flag,msg=self.joinBasket("joinedBasket", ids) |
flag,msg=self.joinBasket(joinBasket, ids) |
logging.info("joining %s %s"%(flag,msg)) |
logging.info("joining %s %s"%(flag,msg)) |
|
|
elif submit=="subtract": |
elif submit=="subtract": |
logging.info("BBBb %s %s"%(basket1,basket2)) |
logging.info("BBBb %s %s"%(basket1,basket2)) |
flag,msg=self.subtractBasket("subtractedBasket", basket1,basket2) |
flag,msg=self.subtractBasket(subtractBasket, basket1,basket2) |
logging.info("subtract %s %s"%(flag,msg)) |
logging.info("subtract %s %s"%(flag,msg)) |
|
|
if RESPONSE: |
if RESPONSE: |
Line 1202 class CDLIBasketVersion(Implicit,Persist
|
Line 1276 class CDLIBasketVersion(Implicit,Persist
|
ret+=str(object[0].getData())+"\n" |
ret+=str(object[0].getData())+"\n" |
elif current=="yes": |
elif current=="yes": |
#search current object |
#search current object |
founds=self.CDLICatalog.search({'title':object[0].getId()}) |
founds=self.CDLICatalog.search({'title':object[1].getId().split(".")[0]}) |
if len(founds)>0: |
if len(founds)>0: |
ret+=str(founds[0].getObject().getLastVersion().getData())+"\n" |
ret+=str(founds[0].getObject().getLastVersion().getData())+"\n" |
|
|
Line 1613 def splitatf(fh,dir=None,ext=None):
|
Line 1687 def splitatf(fh,dir=None,ext=None):
|
nf=None |
nf=None |
i=0 |
i=0 |
|
|
for lineTmp in fh.readlines(): |
if (type(fh) is StringType) or (type(fh) is UnicodeType): |
|
iter=fh.split("\n") |
|
else: |
|
iter=fh.readlines() |
|
|
|
for lineTmp in iter: |
lineTmp=lineTmp.replace(codecs.BOM_UTF8,'') # make sure that all BOM are removed.. |
lineTmp=lineTmp.replace(codecs.BOM_UTF8,'') # make sure that all BOM are removed.. |
for line in lineTmp.split("\r"): |
for line in lineTmp.split("\r"): |
#logging.log("Deal with: %s"%line) |
#logging.log("Deal with: %s"%line) |
Line 1650 def splitatf(fh,dir=None,ext=None):
|
Line 1729 def splitatf(fh,dir=None,ext=None):
|
nf.close() |
nf.close() |
except: |
except: |
pass |
pass |
|
|
|
if not((type(fh) is StringType) or (type(fh) is UnicodeType)): |
fh.close() |
fh.close() |
return ret,len(os.listdir(dir)) |
return ret,len(os.listdir(dir)) |
|
|
Line 1705 class CDLIFileFolder(extVersionedFileFol
|
Line 1786 class CDLIFileFolder(extVersionedFileFol
|
"""get the content of the file fn""" |
"""get the content of the file fn""" |
founds=self.CDLICatalog.search({'title':fn}) |
founds=self.CDLICatalog.search({'title':fn}) |
if not founds: |
if not founds: |
return [] |
return "" |
else: |
else: |
obj=founds[0].getObject().getLastVersion() |
obj=founds[0].getObject().getLastVersion() |
|
|
Line 1921 class CDLIRoot(Folder):
|
Line 2002 class CDLIRoot(Folder):
|
meta_type="CDLIRoot" |
meta_type="CDLIRoot" |
downloadCounterBaskets=0# counts the current basket downloads if counter > 10 no downloads are possible |
downloadCounterBaskets=0# counts the current basket downloads if counter > 10 no downloads are possible |
|
|
|
def deleteFiles(self,ids): |
|
"""delete files (resp. move into .trash folder)""" |
|
# find or generete trash folder |
|
|
|
found=self.ZopeFind(self,obj_ids=['.trash']) |
|
|
|
if len(found)<1: |
|
manage_addCDLIFileFolder(self, '.trash',title="Trash") |
|
trash=self._getOb('.trash') |
|
else: |
|
logging.info(found) |
|
trash=found[0][1] |
|
|
|
|
|
for id in ids: |
|
founds=self.CDLICatalog.search({'title':id.split(".")[0]}) |
|
if founds: |
|
logging.info(founds) |
|
folder=founds[0].getObject().aq_parent #get the parent folder of the object |
|
logging.info(folder) |
|
cut=folder.manage_cutObjects([founds[0].getId]) #cut it out |
|
trash.manage_pasteObjects(cut) #paste it in the trash |
|
|
|
|
def findWordRegExp(self,indexName,searchTerm): |
def findWordRegExp(self,indexName,searchTerm): |
"""find all words in index which match regexp in SearchTerm |
"""find all words in index which match regexp in SearchTerm |
@param indexName: name of the index to be searched in |
@param indexName: name of the index to be searched in |
Line 2210 class CDLIRoot(Folder):
|
Line 2315 class CDLIRoot(Folder):
|
return ret |
return ret |
|
|
|
|
|
def uploadATFRPC(self,data,username): |
|
"""upload an atffile via xml-rpc""" |
|
uploader=uploadATFThread() |
|
|
|
#generate an random id for the upload object |
|
from random import randint |
|
if (not self.REQUEST.SESSION.get('idTmp',None)): |
|
|
|
idTmp=str(randint(0,1000000000)) |
|
self.REQUEST.SESSION['idTmp']=idTmp |
|
else: |
|
idTmp=self.REQUEST.SESSION.get('idTmp',None) |
|
|
|
|
|
uploader.set(data,0,username,idTmp) |
|
|
|
stObj=uploader.run() |
|
|
|
processor=uploadATFfinallyThread() |
|
|
|
basketname=stObj.returnValue['basketNameFromFile'] |
|
|
|
processor.set("uploadchanged",basketname=basketname,SESSION=stObj.returnValue,username=username,serverport=self.REQUEST['SERVER_PORT']) |
|
|
|
processor.run() |
|
|
|
|
|
return generateXMLReturn(stObj.returnValue) |
|
|
def uploadATF(self,repeat=None,upload=None,basketId=0,RESPONSE=None): |
def uploadATF(self,repeat=None,upload=None,basketId=0,RESPONSE=None): |
"""upload an atf file / basket file""" |
"""upload an atf file / basket file""" |