changeset 36:be8640c08d99

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.
author dwinter
date Mon, 03 Mar 2014 17:32:06 +0100
parents d3ecbfd21e06
children 6a0873a913c5
files addDriToIndexMeta.py harvestToPurl.py managePurls/manageIndexMetaPURLs.py
diffstat 3 files changed, 76 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- 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)
--- 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)
--- 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: