# HG changeset patch # User dwinter # Date 1393864326 -3600 # Node ID be8640c08d993d1a5aab7fc2f3ddd6338a6c7bfe # Parent d3ecbfd21e06bca058388f27880a3f58e313cb5d Updatedri in harbestToPUrl ge?ndert. jetzt werden gegebenenfalls dris aus den index.meta gelesen und in die db geschrieben, falls sie noch nicht existieren. ausserdem wird in den daten isdri=TRUE gesetzt, wenn es ich bei der PURL um eine handelt die auf ein DRI in den index.meta verweist. diff -r d3ecbfd21e06 -r be8640c08d99 addDriToIndexMeta.py --- a/addDriToIndexMeta.py Wed Oct 23 12:28:22 2013 +0200 +++ b/addDriToIndexMeta.py Mon Mar 03 17:32:06 2014 +0100 @@ -34,7 +34,23 @@ changed=True return changed + + +def getDRIfromIndexMeta(fl): + try: + tree = etree.parse(fl) + except: + parseErrorFile.write("PARSE ERROR:"+fl+"\n") + return False + dris = tree.xpath("/resource/meta/dri[@type='mpiwg']") + + if len(dris)==0: + return None + else: + return dris[0].text + + def addPURL(fl,purl,test=False): try: tree = etree.parse(fl) diff -r d3ecbfd21e06 -r be8640c08d99 harvestToPurl.py --- a/harvestToPurl.py Wed Oct 23 12:28:22 2013 +0200 +++ b/harvestToPurl.py Mon Mar 03 17:32:06 2014 +0100 @@ -1,11 +1,17 @@ +# -*- coding: utf-8 -*- ''' + Created on 31.10.2012 @author: dwinter + +wesentlich hier ist: harvestIndexMeta ''' + + import managePurls.manageIndexMetaPURLs as manageIndexMetaPURLs - +import addDriToIndexMeta import os @@ -15,7 +21,21 @@ 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): @@ -24,13 +44,19 @@ 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,update=update) + + + 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) diff -r d3ecbfd21e06 -r be8640c08d99 managePurls/manageIndexMetaPURLs.py --- a/managePurls/manageIndexMetaPURLs.py Wed Oct 23 12:28:22 2013 +0200 +++ b/managePurls/manageIndexMetaPURLs.py Mon Mar 03 17:32:06 2014 +0100 @@ -174,7 +174,7 @@ #erzeuge eine neue purl while self.exists(purl): - purl = self.gneratePurl() + purl = self.generatePurl() seq= self.purlDB.insert('purls',path=path,purl=purl,is_index_meta=isIndexMeta, image_path=imagePath, @@ -186,34 +186,53 @@ #register a new path - def updatePurl(self,purl,isIndexMeta,path="",imagePath="",server_url="",user=""): + def updatePurl(self,purl,isIndexMeta,path="",imagePath="",server_url="",user="",isDri=False): update= self.purlDB.update('purls',where="purl = '%s'"%web.sqlparam(purl),path=path,is_index_meta=isIndexMeta, image_path=imagePath, + server_url=server_url,validity=1,last_change_by=user,last_change_at=web.SQLLiteral("NOW()"),isdri=isDri) + + + return update + + + def updatePurlForPath(self,purl,isIndexMeta,path="",imagePath="",server_url="",user=""): + """schreibt zu einem Pfad die entsprechende purl""" + + + update= self.purlDB.update('purls',where="path = '%s'"%web.sqlparam(path),purl=purl,is_index_meta=isIndexMeta, image_path=imagePath, server_url=server_url,validity=1,last_change_by=user,last_change_at=web.SQLLiteral("NOW()")) return update - def register(self,path=None,isIndexMeta=False,imagePath="",server_url="",user="",update=False): + def register(self,path=None,isIndexMeta=False,imagePath="",server_url="",user="",driIndexMeta=None,update=False): #teste ob es zu dem Pfad schon eine Purl gibt - if path: # wenn ein pfad definiert ist teste ob es schon eine purl dazu gibt. - purl = self.getPurl(path) + if path: # wenn ein pfad definiert ist teste ob es schon eine purl in der Datenbank gibt. + purl = self.getPurl(path) + else: purl =None + + if update: # wenn update compare this with the purl which is stored in the index.meta file. + if (driIndexMeta is not None) & (purl!=driIndexMeta): + #wenn nicht gleich, dann trage die driIndexMeta in die purl db! + purl=driIndexMeta + + if purl!=None: if update: - up= self.updatePurl(purl, isIndexMeta, path, imagePath, server_url, user) - if up>0: - return UPDATED,purl - else: - return ERROR,None - + up= self.updatePurl(driIndexMeta, isIndexMeta, path, imagePath, server_url, user,isDri=True) + if up>0: + return UPDATED,purl + else: + return ERROR,None + return ALREADY_EXISTS,purl - + #wenn nicht dann neue erzeugen else: