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