view harvestToPurl.py @ 39:a33fa2377075

outfiles are now set as parameter
author dwinter
date Wed, 05 Mar 2014 10:11:50 +0100
parents 6a0873a913c5
children
line wrap: on
line source

# -*- coding: utf-8 -*-
'''

Created on 31.10.2012

@author: dwinter

wesentlich hier ist: harvestIndexMeta
'''



import managePurls.manageIndexMetaPURLs as manageIndexMetaPURLs
from addDriToIndexMeta import getDRIfromIndexMeta


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)
                
                parseErrorFile = file("/tmp/HarvestToPurlParseErrors.txt","w")
                driIndexMeta=getDRIfromIndexMeta(fl,parseErrorFile=parseErrorFile)
                
                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)