Annotation of lise/archive.py, revision 1.1
1.1 ! wischi 1: """ TO DO generell falls noch ein File, das nicht index.meta -> archivierung ausgeben """
! 2: from types import *
! 3: import urllib
! 4: import os
! 5: import sys
! 6: import re
! 7: from AccessControl import ClassSecurityInfo
! 8: from AccessControl.Role import RoleManager
! 9: from Acquisition import Implicit
! 10: from Globals import Persistent
! 11: from time import strptime
! 12: from time import strftime
! 13: import time
! 14: import os.path
! 15: import dircache
! 16: import xml.dom.minidom
! 17: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
! 18: from Products.PageTemplates.PageTemplate import PageTemplate
! 19: import tempfile
! 20: tempfile.tempdir="/var/tmp/archiver"
! 21:
! 22: exclusion=[".HSResource","lost+found","Network Trash Folder","TheFindByContentFolder","TheVolumeSettingsFolder"]
! 23: class fsentry(Implicit, Persistent, RoleManager):
! 24: """File entry class"""
! 25: path = ""
! 26: user = ""
! 27: month = ""
! 28: date =""
! 29: time = ""
! 30:
! 31: security=ClassSecurityInfo()
! 32: def __init__(self,extpath):
! 33: """initialize class"""
! 34: extpath=os.path.abspath(re.search(r"(.*)\n",extpath).group(1))
! 35: self.all=extpath
! 36: self.path=extpath
! 37: self.user=""
! 38: self.mtime=os.path.getmtime(extpath)
! 39:
! 40:
! 41: security.declarePublic('getPath')
! 42: def getPath(self):
! 43: """Ausgabe von path"""
! 44: return self.path
! 45:
! 46: security.declarePublic('getUser')
! 47: def getUser(self):
! 48: """Ausgabe von user"""
! 49: return self.user
! 50:
! 51: security.declarePublic('getDate')
! 52: def getDate(self):
! 53: """Ausgabe von Date"""
! 54: return strftime("%Y%m%d%H%M",time.gmtime(self.mtime))
! 55:
! 56: security.declarePublic('getDate')
! 57: def getID(self):
! 58: """Ausgabe einer eindeutigen Sortierbaren ID"""
! 59: return self.getDate()+self.getPath()
! 60:
! 61: security.declarePublic('getTime')
! 62: def getTime(self):
! 63: """Ausgabe von path"""
! 64: return self.time
! 65: security.declarePublic('getAll')
! 66: def getAll(self):
! 67: """Ausgabe von path"""
! 68: return self.all
! 69:
! 70: class filesystem(Implicit, Persistent, RoleManager):
! 71: """store filesystem"""
! 72: node={}
! 73: hasindex={}
! 74: security=ClassSecurityInfo()
! 75:
! 76: def getfs(self,start):
! 77: """load filessystem"""
! 78: f = os.popen("find "+ start+" -name '*' ","r")
! 79: lines = f.readlines()
! 80:
! 81: return lines
! 82:
! 83: def loadfs(self,start):
! 84: """analyse filesystem"""
! 85: for line in self.getfs(start):
! 86:
! 87: g=re.search(r"(.*/)(.*)\n",line)
! 88: if not g==None:
! 89: path=g.group(1)
! 90: file=g.group(2)
! 91: if self.node.has_key(path):
! 92: elements=self.node[path]
! 93: elements.append(file)
! 94: self.node[path]=elements
! 95: else:
! 96: self.node[path]=[file]
! 97: if (file=="index.meta") | (file=="meta"):
! 98: self.hasindex[path]="1"
! 99:
! 100: def __init__(self,start,reload=0):
! 101: if reload==1:
! 102: self.node={}
! 103: self.hasindex={}
! 104: self.loadfs(start)
! 105:
! 106:
! 107: security.declarePublic('getNode')
! 108: def getNode(self):
! 109: return self.node
! 110:
! 111: security.declarePublic('getKeys')
! 112: def getKeys(self):
! 113: return self.node.keys()
! 114:
! 115: security.declarePublic('clearnode')
! 116: def clearnode(self):
! 117: self.node={}
! 118: return 0
! 119:
! 120: security.declarePublic('hasIndex')
! 121: def hasIndex(self,path):
! 122:
! 123: return self.hasindex.has_key(path)
! 124:
! 125:
! 126: def onlyIndex_old(self):
! 127: """return only files with archive material"""
! 128: j={}
! 129: for k in self.node:
! 130: if self.hasindex.has_key(k):
! 131: if len(self.node[k])>1:
! 132: if (len(self.node[k])==2) & ('meta' not in self.node[k]):
! 133: j[k]=self.node[k]
! 134: elif (len(self.node[k])==2) & ('meta' in self.node[k]):
! 135: """ nothing """
! 136: else:
! 137: j[k]=self.node[k]
! 138: return j
! 139:
! 140: def archive_the_path(self,path):
! 141: """parse indexmeta and return digilib path"""
! 142: try:
! 143: #f = os.popen("cat "+path+"/index.meta","r")
! 144: f =file(path+"/index.meta","r")
! 145:
! 146: lines = f.read()
! 147:
! 148: try:
! 149: dom = xml.dom.minidom.parseString(lines)
! 150: if getText(dom.getElementsByTagName("content-type")[0].childNodes)=="folder":
! 151: """folder nicht archivieren"""
! 152: return 0
! 153: else:
! 154: archive_storage_date=getText(dom.getElementsByTagName("archive-storage-date")[0].childNodes)
! 155:
! 156: if archive_storage_date=="":
! 157:
! 158: """leer also archivieren"""
! 159: return 1
! 160: else:
! 161: """nicht archivieren"""
! 162: return 0
! 163: except:
! 164: """kein tag also archivieren"""
! 165: return 1
! 166: except:
! 167: """kein index.meta also nicht archivieren"""
! 168: return 0
! 169:
! 170: security.declarePublic('onlyIndex')
! 171: def onlyIndex(self):
! 172: """return only files with archive material (archive-storage-date not set)"""
! 173: j={}
! 174:
! 175: for k in self.node:
! 176: if self.archive_the_path(k):
! 177: j[k]=self.node[k]
! 178: return j
! 179: security.declarePublic('getImageDirs')
! 180: def getImageDirs(self,dom,path):
! 181: dirs=dom.getElementsByTagName("dir")
! 182: dirback=[]
! 183: for dir in dirs:
! 184: temp=getText(dir.getElementsByTagName("name")[0].childNodes)
! 185: temp2=re.search(r"(.*)/mpiwg/online/(.*)",path+"/"+temp)
! 186: if not temp2==None:
! 187: try:
! 188: dirback.append(temp2.group(2))
! 189: except:
! 190: """nothing"""
! 191: else:
! 192: dirback.append(temp)
! 193: return dirback
! 194:
! 195:
! 196:
! 197:
! 198: security.declarePublic('digilib')
! 199: def digilib(self, path):
! 200: """check if folder is a container for digilib files"""
! 201: if self.hasindex.has_key(path+"/"):
! 202: return(self.parseIndexMeta(path))
! 203: else:
! 204: return "NO"
! 205:
! 206:
! 207:
! 208:
! 209: security.declarePublic('isdigilib')
! 210: def isdigilib(self, path):
! 211: """return number of possible image directories usefull for digilib"""
! 212: if self.hasindex.has_key(path+"/"):
! 213: return(len(self.parseIndexMeta(path)))
! 214: else:
! 215: return 0
! 216:
! 217: security.declarePublic('parseIndexMeta')
! 218: def parseIndexMeta(self,k):
! 219: """parse indexmeta and return digilib path"""
! 220: f = os.popen("cat "+k+"/index.meta","r")
! 221: lines = f.read()
! 222:
! 223: try:
! 224: dom = xml.dom.minidom.parseString(lines)
! 225: content_type=getText(dom.getElementsByTagName("content-type")[0].childNodes)
! 226: if (content_type=="scanned-document") or (content_type=="scanned document"):
! 227: dirs=self.getImageDirs(dom,k)
! 228:
! 229: return dirs
! 230: except:
! 231: return []
! 232:
! 233:
! 234: class filesystem2(Implicit, Persistent, RoleManager):
! 235: """store filesystem"""
! 236: node={}
! 237: hasindex={}
! 238: security=ClassSecurityInfo()
! 239:
! 240: def getfs(self,start):
! 241: """load filessystem"""
! 242: f = os.popen("find "+ start+" -name '*' ","r")
! 243: lines = f.readlines()
! 244:
! 245: return lines
! 246:
! 247: def loadfs(self,start):
! 248: """analyse filesystem"""
! 249: for line in self.getfs(start):
! 250:
! 251: g=re.search(r"(.*/)(.*)\n",line)
! 252: if not g==None:
! 253: try:
! 254: path=g.group(1)
! 255: file=g.group(2)
! 256: except:
! 257: """nothing"""
! 258: if self.node.has_key(path):
! 259: elements=self.node[path]
! 260: elements.append(file)
! 261: self.node[path]=elements
! 262: else:
! 263: self.node[path]=[file]
! 264: if (file=="index.meta") | (file=="meta"):
! 265: self.hasindex[path]="1"
! 266:
! 267: def __init__(self,start,reload=0):
! 268: """nothing"""
! 269:
! 270: security.declarePublic('getImageDirs')
! 271: def getImageDirs(self,dom,path):
! 272: dirs=dom.getElementsByTagName("dir")
! 273: dirback=[]
! 274: for dir in dirs:
! 275: temp=getText(dir.getElementsByTagName("name")[0].childNodes)
! 276: temp2=re.search(r"(.*)/mpiwg/online/(.*)",path+"/"+temp)
! 277: if not temp2==None:
! 278: try:
! 279: dirback.append(temp2.group(2))
! 280: except:
! 281: """nothing"""
! 282: else:
! 283: dirback.append(temp)
! 284: return dirback
! 285:
! 286:
! 287: security.declarePublic('digilib')
! 288: def digilib(self, path):
! 289: """check if folder is a container for digilib files"""
! 290: if os.path.exists(path+"/index.meta"):
! 291: return(self.parseIndexMeta(path))
! 292: else:
! 293: return "NO"
! 294:
! 295: security.declarePublic('isdigilib')
! 296: def isdigilib(self, path):
! 297: if os.path.exists(path+"/index.meta"):
! 298: return(len(self.parseIndexMeta(path)))
! 299: else:
! 300: return 0
! 301: security.declarePublic('parseIndexMeta')
! 302: def parseIndexMeta(self,k):
! 303: """parse indexmeta and return digilib path"""
! 304: f = os.popen("cat "+k+"/index.meta","r")
! 305: lines = f.read()
! 306:
! 307: try:
! 308: dom = xml.dom.minidom.parseString(lines)
! 309: content_type=getText(dom.getElementsByTagName("content-type")[0].childNodes)
! 310: if content_type=="scanned-document":
! 311: dirs=self.getImageDirs(dom,k)
! 312:
! 313: return dirs
! 314: except:
! 315: return []
! 316:
! 317:
! 318: class browse(Implicit, Persistent, RoleManager):
! 319:
! 320: security=ClassSecurityInfo()
! 321: tree={}
! 322: toggledict={}
! 323:
! 324: def filterExcluded(self,dir):
! 325: ret=[]
! 326: for item in dir:
! 327: if not item in exclusion:
! 328: ret.append(item)
! 329: return ret
! 330:
! 331: def __init__(self,startpath):
! 332: self.tree={}
! 333: self.tree[startpath]=self.filterExcluded(dircache.listdir(startpath))
! 334:
! 335: security.declarePublic('getTree')
! 336: def getTree(self,path):
! 337: if self.tree.has_key(path):
! 338: return self.tree[path]
! 339: else:
! 340: self.tree[path]=self.filterExcluded(dircache.listdir(path))
! 341: return self.tree[path]
! 342:
! 343: security.declarePublic('isDirectory')
! 344: def isDirectory(self,path,file):
! 345: return os.path.isdir(os.path.abspath(path+"/"+file))
! 346:
! 347: security.declarePublic('toggle')
! 348: def toggle(self,tmppath,file):
! 349: path=tmppath+"/"+file
! 350:
! 351: if self.toggledict.has_key(path):
! 352: if self.toggledict[path]==0:
! 353: self.toggledict[path]=1
! 354:
! 355: else:
! 356: self.toggledict[path]=0
! 357:
! 358: else:
! 359: self.toggledict[path]=4
! 360:
! 361:
! 362: security.declarePublic('isToggle')
! 363: def isToggle(self,tmppath,file):
! 364: path=tmppath+"/"+file
! 365:
! 366: if self.toggledict.has_key(path):
! 367:
! 368: return self.toggledict[path]
! 369: else:
! 370:
! 371: return 0
! 372:
! 373:
! 374: def getfs(start):
! 375: """return filesystem"""
! 376: f = os.popen("find "+ start+" -name '*'","r")
! 377: lines = f.readlines()
! 378: return lines
! 379:
! 380: def showall(start):
! 381: lines = getfs(start)
! 382: for line in lines:
! 383: print line
! 384: return 0
! 385:
! 386: def entries(start):
! 387: """retrun list of entries of a filesystem"""
! 388: i=0
! 389: fs=[]
! 390: lines=getfs(start)
! 391: for line in lines:
! 392: try:
! 393: if os.path.exists(os.path.abspath(re.search(r"(.*)\n",line).group(1))):
! 394: fs.append(fsentry(line))
! 395: i=i+1
! 396: except:
! 397: """nothing"""
! 398: return fs
! 399:
! 400: def getfilesystem(start,reload=0):
! 401: """load filesystem"""
! 402:
! 403: k=filesystem(start,1)
! 404: return k
! 405:
! 406: def getfilesystem2(start,reload=0):
! 407: """load filesystem"""
! 408:
! 409: k=filesystem2(start,1)
! 410: return k
! 411:
! 412: def tree(start):
! 413: """get the filetree"""
! 414: k=browse(start)
! 415: return k
! 416:
! 417: def sort_by_date(fs):
! 418: """sorts lists of fileentries"""
! 419: ls=[]
! 420: dict={}
! 421: for k in fs:
! 422: ls.append(k.getID())
! 423: dict[k.getID()]=k
! 424: ls.sort()
! 425: ls.reverse()
! 426: ret=[]
! 427: for j in ls:
! 428: ret.append(dict[j])
! 429: return ret
! 430:
! 431: def path_to_link(path):
! 432: """generates navigation bar for showfiles"""
! 433: string=""
! 434:
! 435: tmppath=os.path.dirname(path)
! 436: i=0
! 437: pathes=[[path, os.path.basename(path)]]
! 438:
! 439: while not (len(tmppath)==1):
! 440:
! 441: i=i+1
! 442: if i>20: break
! 443:
! 444: pathes.append([tmppath, os.path.basename(tmppath)])
! 445: tmppath=os.path.dirname(tmppath)
! 446:
! 447: while i>=0:
! 448: string=string+"<a href=showfiles?path="+pathes[i][0]+">"+pathes[i][1]+"</a>/"
! 449:
! 450: i=i-1
! 451: return string
! 452:
! 453: def path_to_link_view(path):
! 454: """generates navigation bar for viewfiles"""
! 455: string=""
! 456:
! 457: tmppath=os.path.dirname(path)
! 458: i=0
! 459: pathes=[[path, os.path.basename(path)]]
! 460:
! 461: while not (len(tmppath)==1):
! 462:
! 463: i=i+1
! 464: if i>20: break
! 465:
! 466: pathes.append([tmppath, os.path.basename(tmppath)])
! 467: tmppath=os.path.dirname(tmppath)
! 468:
! 469: while i>=0:
! 470: string=string+"<a href=viewfiles?path="+pathes[i][0]+">"+pathes[i][1]+"</a>/"
! 471:
! 472: i=i-1
! 473: return string
! 474:
! 475: def path_to_link_store(path):
! 476: """generates navigation bar for viewfiles"""
! 477: string=""
! 478:
! 479: tmppath=os.path.dirname(path)
! 480: i=0
! 481: pathes=[[path, os.path.basename(path)]]
! 482:
! 483: while not (len(tmppath)==1):
! 484:
! 485: i=i+1
! 486: if i>20: break
! 487:
! 488: pathes.append([tmppath, os.path.basename(tmppath)])
! 489: tmppath=os.path.dirname(tmppath)
! 490:
! 491: while i>=0:
! 492: string=string+"<a href=storefiles?path="+pathes[i][0]+">"+pathes[i][1]+"</a>/"
! 493:
! 494: i=i-1
! 495: return string
! 496:
! 497:
! 498: class Error(Implicit, Persistent, RoleManager):
! 499:
! 500: error=[]
! 501: security=ClassSecurityInfo()
! 502: def __init__(self,initerror):
! 503: self.error=initerror[0:]
! 504:
! 505: security.declarePublic('getError')
! 506: def getError(self):
! 507: return self.error
! 508:
! 509: class metacheck(Implicit, Persistent, RoleManager):
! 510: lines=[]
! 511: security=ClassSecurityInfo()
! 512: def parsearchive(self,str):
! 513: """parse for error"""
! 514: retstr=''
! 515:
! 516: if not len(str)==0:
! 517: for line in str:
! 518: retstr=retstr+line+"<br>"
! 519: check=re.search(r"(.*):(.*)",line)
! 520: if check.group(1)=='ABORT':
! 521: error="error"
! 522: elif check.group(1)=='DONE':
! 523: error="ok"
! 524: else:
! 525: error="running"
! 526:
! 527: return [retstr,error]
! 528: else:
! 529: return ['','running']
! 530: def __init__(self,path):
! 531: """archive the documents in path"""
! 532: self.lines=[]
! 533:
! 534: if type(path)==StringType:
! 535: f = os.popen("/usr/local/mpiwg/archive/metacheck "+path,"r")
! 536: self.lines.append(Error([path,self.parsearchive(f.readlines())]))
! 537: else:
! 538: for singlepath in path:
! 539: f = os.popen("/usr/local/mpiwg/archive/metacheck "+singlepath,"r")
! 540: self.lines.append(Error([singlepath,self.parsearchive(f.readlines())]))
! 541: security.declarePublic('messages')
! 542:
! 543: def messages(self):
! 544: return self.lines
! 545:
! 546:
! 547:
! 548:
! 549: class archive(Implicit, Persistent, RoleManager):
! 550: lines=[]
! 551: security=ClassSecurityInfo()
! 552: def parsearchive(self,str):
! 553: """parse for error"""
! 554: retstr=''
! 555:
! 556: if not len(str)==0:
! 557: for line in str:
! 558: retstr=retstr+line+"<br>"
! 559: check=re.search(r"(.*):(.*)",line)
! 560: if check.group(1)=='ABORT':
! 561: error="error"
! 562: elif check.group(1)=='DONE':
! 563: error="ok"
! 564: else:
! 565: error="running"
! 566:
! 567: return [retstr,error]
! 568: else:
! 569: return ['','running']
! 570:
! 571: def __init__(self,path,session):
! 572: """archive the documents in path"""
! 573: self.lines=[]
! 574: self.filenames={}
! 575: session['archiver']=self
! 576:
! 577:
! 578: if type(path)==StringType:
! 579: self.filenames[path]=tempfile.mktemp()
! 580: f = os.popen("/usr/local/mpiwg/archive/archiver "+path+" > "+self.filenames[path]+" &","r")
! 581: else:
! 582: for singlepath in path:
! 583: self.filenames[singlepath]=tempfile.mktemp()
! 584: f = os.popen("/usr/local/mpiwg/archive/archiver "+singlepath+" > "+self.filenames[singlepath]+" &","r")
! 585:
! 586: security.declarePublic('messages')
! 587: def messages(self):
! 588: self.lines=[]
! 589: for path in self.filenames.keys():
! 590:
! 591: self.lines.append(Error([path,self.parsearchive(open(self.filenames[path],"r").readlines())]))
! 592: return self.lines
! 593:
! 594:
! 595: def evalext(str):
! 596: return eval(str)
! 597:
! 598: def storeerror(ret,path,context,i):
! 599: session=context.REQUEST.SESSION
! 600: session['error%i'%i]=ret
! 601: session['path%i'%i]=path
! 602:
! 603: return 'error?number=%i'%i
! 604:
! 605: def geterror(str,context):
! 606: session=context.REQUEST.SESSION
! 607: return session[str]
! 608:
! 609: def readfile(path):
! 610:
! 611: ret=""
! 612: f=open(path,'r')
! 613: for g in f.readlines():
! 614: ret=ret+g
! 615: return ret
! 616:
! 617: def writefile(self,path,txt,REQUEST):
! 618: f=open(path,'w')
! 619: f.write(txt)
! 620: f.close()
! 621: rval=self.aq_acquire('archive2')
! 622: return rval()
! 623:
! 624:
! 625: def metachecker(self,path):
! 626: """check the metadata the documents in path"""
! 627: self.REQUEST.SESSION['path']=self.REQUEST['path']
! 628: return metacheck(path)
! 629:
! 630: def archiver(self,path):
! 631: """archive the documents in path"""
! 632: tmp=archive(path,self.REQUEST.SESSION)
! 633: return self.REQUEST.RESPONSE.redirect('archive4')
! 634:
! 635: def getText(nodelist):
! 636:
! 637: rc = ""
! 638: for node in nodelist:
! 639: if node.nodeType == node.TEXT_NODE:
! 640: rc = rc + node.data
! 641: return rc
! 642:
! 643: def getBib(nodelist):
! 644: rc= "<table border='0'>"
! 645: print "HI"
! 646: for node in nodelist:
! 647:
! 648: if node.nodeType == node.ELEMENT_NODE:
! 649: """nothing"""
! 650: rc = rc+"<tr><td valign='right'>"+str(node.nodeName)+":</td><td> "+getText(node.childNodes)+"</td></tr>"
! 651: #print rc
! 652: return rc+"</table>"
! 653:
! 654: def getMetafile(path):
! 655: """get index.meta"""
! 656: html=[]
! 657: if not os.path.exists(path+"/index.meta"):
! 658:
! 659: return "NO_METADATA"
! 660: else:
! 661: f = os.popen("cat "+path+"/index.meta","r")
! 662: lines = f.read()
! 663: dom = xml.dom.minidom.parseString(lines)
! 664: name=getText(dom.getElementsByTagName("name")[0].childNodes)
! 665: creator=getText(dom.getElementsByTagName("creator")[0].childNodes)
! 666: creation_date=getText(dom.getElementsByTagName("archive-creation-date")[0].childNodes)
! 667: description=getText(dom.getElementsByTagName("description")[0].childNodes)
! 668: try:
! 669: type=getText(dom.getElementsByTagName("content-type")[0].childNodes)
! 670: except:
! 671: type=""
! 672: if type=="scanned document":
! 673: html="<h3>Document: "+name+"</h3>"
! 674: elif type=="folder":
! 675: html="<h3>Folder: "+name+"</h3>"
! 676: else:
! 677: html="<h3>Document: "+name+"</h3>"
! 678:
! 679: html=html+"<p><i>created by: "+creator+" at: "+creation_date+"</i></p>"
! 680: html=html+"<h4>Description</h4><p>"+description+"</p>"
! 681: try:
! 682: bib = dom.getElementsByTagName("meta")[0].getElementsByTagName("bib")[0]
! 683: if bib.attributes.has_key('type'):
! 684: html=html+"<h4>Info ("+bib.attributes['type'].value+")</h4>"
! 685: else:
! 686: html=html+"<h4>Info</h4>"
! 687: html=html+getBib(bib.childNodes)
! 688: print html
! 689: except:
! 690: """none"""
! 691:
! 692: # html=html.encode('utf-8','replace')+getBib(bib.childNodes).encode('utf-8','replace')
! 693:
! 694: return html
! 695:
! 696: def hasMetafile(path):
! 697: """get index.meta"""
! 698: return os.path.exists(path+"/index.meta")
! 699: #return path
! 700:
! 701: def isdigilib2(path):
! 702: """check if folder is candidate for digilib without metadata"""
! 703: try:
! 704: dir=os.listdir(path)
! 705:
! 706: imagesuffixes=['.gif','.jpg','.jpeg','.png','.tiff','.tif','.JPG','.TIFF','.TIF']
! 707: ret=""
! 708: for a in dir:
! 709:
! 710: suffix=os.path.splitext(a)
! 711:
! 712: if suffix[1] in imagesuffixes:
! 713: return 1
! 714:
! 715: try:
! 716: dom=xml.dom.minidom.parse(os.path.split(path)[0]+"/index.meta")
! 717: for node in dom.getElementsByTagName("dir"):
! 718:
! 719: if getText(node.getElementsByTagName("content-type")[0].childNodes)=="images":
! 720:
! 721: if getText(node.getElementsByTagName("name")[0].childNodes)==os.path.split(path)[1]:
! 722: return 1
! 723: return 0
! 724: except:
! 725:
! 726: return 0
! 727:
! 728:
! 729:
! 730:
! 731:
! 732: except:
! 733: return 0
! 734:
! 735: def isFullText(path,folder_name):
! 736: """check if foldername in path is full text"""
! 737: try:
! 738: dom=xml.dom.minidom.parse(path+"/index.meta")
! 739: for node in dom.getElementsByTagName("dir"):
! 740:
! 741: if getText(node.getElementsByTagName("content-type")[0].childNodes)=="fulltext":
! 742:
! 743: if getText(node.getElementsByTagName("name")[0].childNodes)==folder_name:
! 744: return 1
! 745: return 0
! 746: except:
! 747:
! 748: return 0
! 749:
! 750:
! 751: def isPresentation(path,folder_name):
! 752: """check if foldername in path is full text"""
! 753: try:
! 754: dom=xml.dom.minidom.parse(path+"/index.meta")
! 755: #print dom.toxml()
! 756: for dirnode in dom.getElementsByTagName("dir"):
! 757: try:
! 758:
! 759: if getText(dirnode.getElementsByTagName('content-type')[0].childNodes)=='presentation':
! 760: if getText(dirnode.getElementsByTagName("name")[0].childNodes)==folder_name:
! 761: return 1
! 762: except:
! 763: """nothing"""
! 764: return 0
! 765: except:
! 766:
! 767: return 0
! 768:
! 769:
! 770:
! 771:
! 772:
! 773: def changeName(path):
! 774: try:
! 775: temp2=re.search(r"(.*)/mpiwg/online/(.*)",path)
! 776: if temp2==None:
! 777: return "digifiles/"+re.search(r"(.*)/mpiwg/production/docuserver/(.*)",path).group(2)
! 778: else:
! 779: return temp2.group(2)
! 780: except: # hack - im archivbereich keine online darstellung gibt jetzt ein no zurück.
! 781: return "NO"
! 782:
! 783:
! 784: def test(self):
! 785: self.i=1
! 786: #newtemplate=PageTemplateFile('/usr/local/mpiwg/Zope/Extensions/test').__of__(self)
! 787: self.manage_addProduct['OFSP'].manage_addDTMLMethod('neu','neu')
! 788: self.getattr('neu').manage_edit('HELLO','neu')
! 789: return "ok"
! 790:
! 791:
! 792: class ls(Implicit, Persistent, RoleManager):
! 793: """File entry class"""
! 794: path = ""
! 795: user = ""
! 796: month = ""
! 797: date =""
! 798: time = ""
! 799:
! 800: security=ClassSecurityInfo()
! 801:
! 802: def __init__(self,start):
! 803: self.outfile=tempfile.mktemp()
! 804: start['outfile']=self
! 805: os.popen("ls -R / >"+self.outfile+" &","r")
! 806:
! 807:
! 808: security.declarePublic('read')
! 809: def read(self):
! 810: return self.f.read()
! 811: security.declarePublic('retself')
! 812: def retself(self):
! 813: return self
! 814: security.declarePublic('all')
! 815: def all(self):
! 816: ret=""
! 817: for g in self.f:
! 818: ret=ret+g
! 819: return ret
! 820:
! 821: security.declarePublic('printOutfile')
! 822: def printOutfile(self):
! 823: while not os.path.exists(self.outfile):
! 824: """nothing"""
! 825: return open(self.outfile).readlines()
! 826:
! 827: class overview(Implicit,Persistent, RoleManager):
! 828: dir=[]
! 829: resources={}
! 830: security=ClassSecurityInfo()
! 831:
! 832: def __init__(self,path):
! 833: dir=os.listdir(path)
! 834:
! 835: for file in dir:
! 836: self.resources[self.getResource(path,file)]=path+"/"+file
! 837:
! 838:
! 839: def getResource(self,path,filename):
! 840: f=file(path+"/"+filename,'r')
! 841:
! 842: for line in f.readlines():
! 843:
! 844: if line[0:4]=="INFO":
! 845: if line[6:14]=="resource":
! 846: return line
! 847: return "error"
! 848:
! 849: def parsearchive(self,str):
! 850: """parse for error"""
! 851: retstr=''
! 852:
! 853: if not len(str)==0:
! 854: for line in str:
! 855: retstr=retstr+line+"<br>"
! 856: check=re.search(r"(.*):(.*)",line)
! 857: if check.group(1)=='ABORT':
! 858: error="error"
! 859: elif check.group(1)=='DONE':
! 860: error="ok"
! 861: else:
! 862: error="running"
! 863:
! 864: return [retstr,error]
! 865: else:
! 866: return ['','running']
! 867:
! 868: security.declarePublic('messages')
! 869: def messages(self):
! 870: self.lines=[]
! 871: for name in self.resources.keys():
! 872: path=self.resources[name]
! 873:
! 874: self.lines.append(Error([name,self.parsearchive(open(path,"r").readlines())]))
! 875: return self.lines
! 876:
! 877: security.declarePublic('printResource')
! 878: def printResource(self):
! 879: return self.resources
! 880:
! 881: def getoverview(path):
! 882:
! 883: return overview(path)
! 884:
! 885:
! 886: def ls_test(self):
! 887: tmp=ls(self.REQUEST.SESSION)
! 888: return self.REQUEST.RESPONSE.redirect('next')
! 889:
! 890: def storeFile(self,something):
! 891: self.REQUEST.SESSION['something']=something
! 892: return 1
! 893:
! 894: def getFile(self):
! 895: return self.REQUEST.SESSION['something']
! 896:
! 897: def isFolder(self,path):
! 898: """returns TRUE, wenn path ein Folder ist in den weitere Objekte Folder oder Dokumente gelegt werden dürfen"""
! 899: return not isScannedDocument(self,path) # vorläufig sind alle Documente die keine scanned documente sind folder.
! 900:
! 901: def isScannedDocument(self,path):
! 902: """returns TRUE, wenn path der Stammordner eines gescannten Documents ist"""
! 903: try:
! 904: f = file(path+"/index.meta","r")
! 905: lines = f.read()
! 906:
! 907: try:
! 908: dom = xml.dom.minidom.parseString(lines)
! 909: content_type=getText(dom.getElementsByTagName("content-type")[0].childNodes)
! 910: if (content_type=="scanned-document") or (content_type=="scanned document"):
! 911: return 1
! 912: else:
! 913: return 0
! 914: except:
! 915: return 0
! 916: except:
! 917: return 0
! 918:
! 919: from time import localtime,strftime
! 920:
! 921: def date(self):
! 922: return strftime("%d.%m.%Y",localtime())
! 923:
! 924:
! 925:
! 926: def EditIndex(self,path):
! 927: try:
! 928: dom=xml.dom.minidom.parse(path+"/index.meta")
! 929: indexmeta=dom.toxml()
! 930: except:
! 931: indexmeta=""
! 932: self.REQUEST.SESSION['indexmeta']=indexmeta
! 933: self.REQUEST.SESSION['path']=path
! 934: newtemplate=PageTemplateFile('/usr/local/mpiwg/Zope/Extensions/editindex').__of__(self)
! 935: return newtemplate()
! 936:
! 937: def EditIndex2(self):
! 938: if not self.REQUEST.has_key('fileupload'):
! 939: #newtext=urllib.unquote(self.REQUEST['indexmeta'])
! 940: newtext=self.REQUEST['indexmeta']
! 941: print newtext
! 942: else:
! 943: self.file_name=self.REQUEST['fileupload'].filename
! 944: #newtext=self.REQUEST.form['fileupload'].read()
! 945: # HACK DW
! 946: newtext=self.REQUEST['indexmeta']
! 947:
! 948: indexmeta=file(self.REQUEST.SESSION['path']+"/index.meta","w")
! 949: indexmeta.writelines(newtext)
! 950: return self.REQUEST.response.redirect("storage/storefiles?path="+self.REQUEST.SESSION['path'])
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>