Mercurial > hg > purlService
view harvestToPurl.py @ 37:6a0873a913c5
register updated die dri, wenn sie nicht gleich der gespeicherten dri ist, auch wenn update nicht gleich true ist.
author | dwinter |
---|---|
date | Mon, 03 Mar 2014 18:07:08 +0100 |
parents | be8640c08d99 |
children | a33fa2377075 |
line wrap: on
line source
# -*- coding: utf-8 -*- ''' Created on 31.10.2012 @author: dwinter wesentlich hier ist: harvestIndexMeta ''' import managePurls.manageIndexMetaPURLs as manageIndexMetaPURLs import addDriToIndexMeta import os from os.path import join, getsize import sys import re from lxml import etree def harvestIndexMeta(path,user,delpath="",replacepath="", update=False): """ Sucht in path und allen unterordnern nach index.meta dateien und schaut dann nach ob es dort schon ein index meta gibt. Wenn ja wird geschaut, ob die dort enthaltenenn dris mit denen Übereinstimmen, die in der Datenbank gespeichert sind. delpath ist ein optionaler Parameter, der angibt wird welcher Teil des Pfades in pfad aus dem Pfad zur Überprüfung gelöscht werden soll, d.h. angenommen path="/mpiwg/online/permanent" und delpath="/mpiwg/online" dann wird in der Datenbank nach Pfaden gesucht die mit /permanent beginnen. Ist replacepath gesetzt wird der mit delpath geloeschte Teil durch replacepath ersetzt, dh.h path="/Volumes/online_permanent/library" und delpath="/Volumes/online_permanent", replacepath="/permanent" ann wird in der Datenbank nach Pfaden gesucht die mit /permanent beginnen. Falls es keine DRI gibt, wird eine PURL in der Datenbank erzeugt. Diese wird NICHT in den index.meta gespeichert, dazu muss ein anderes Script "addDriToIndexMeta" aufgerufen werden! Falls es eine gibt und das update Flag gesetzt ist, wird die Dri aus den Index.meta in die Datenbank zu dem Pfad geschrieben. """ md = manageIndexMetaPURLs.IndexMetaPURLManager() for root, dirs, files in os.walk(path): for name in files: if name.endswith(".meta"): fl=join(root, name) driIndexMeta=addDriToIndexMeta.getDRIfromIndexMeta(fl) imagePath=createImagePath(fl,root) imagePath=re.sub("^"+delpath,replacepath,imagePath) fl=re.sub("^"+delpath,replacepath,fl) #loesche den teil vom path der mir delpath beginnt val,purl = md.register(fl, True, user=user,imagePath=imagePath,driIndexMeta=driIndexMeta,update=update) try: if val==manageIndexMetaPURLs.ALREADY_EXISTS: print "found %s -> %s"%(fl,purl) elif val==manageIndexMetaPURLs.UPDATED: print "updated %s -> %s"%(fl,purl) else: print "added %s -> %s"%(fl,purl) except: print "cannot print: %s"%purl if 'pageimg' in dirs: dirs.remove('pageimg') # don't visit pageimf for dir in dirs: if dir== "pageimg": dirs.remove('pageimg') if dir.startswith("."): dirs.remove(dir) if dir.startswith(":"): dirs.remove(dir) # erzeugt einen imagepath wenn kein texttooltag existiert def createImagePath(path,root): print "parsing: %s"%path try: tree= etree.parse(path) except: print "cannot parse %s"%path return "" #teste ob texttool tag, dann kein imagePath tt =tree.xpath('//texttool') if len(tt)>0: return "" #im anderen fall, heuristic imageFolders=["pageimg","pages"] for imageFolder in imageFolders: fl=join(root, imageFolder) if os.path.exists(fl): # gibt es einen der folder return fl return "" if __name__ == '__main__': args = sys.argv[1:] if not (len(args)==2 or len(args)==3 or len(args)==4): print "USAGE: python harvestToPurl.py path user (optional)pathPrefixToDelete (optional)replacedeleted" sys.exit(2) path=args[0] user=args[1] delpath="" replacepath="" if len(args)==3: delpath=args[2] elif len(args)==4: delpath=args[2] replacepath=args[3] if not os.path.exists(path): print "ERROR: path %s does not exist!"%path sys.exit(2) harvestIndexMeta(path,user,delpath=delpath,replacepath=replacepath,update=False)