36
|
1 # -*- coding: utf-8 -*-
|
0
|
2 '''
|
36
|
3
|
0
|
4 Created on 31.10.2012
|
|
5
|
|
6 @author: dwinter
|
36
|
7
|
|
8 wesentlich hier ist: harvestIndexMeta
|
0
|
9 '''
|
|
10
|
36
|
11
|
|
12
|
10
|
13 import managePurls.manageIndexMetaPURLs as manageIndexMetaPURLs
|
36
|
14 import addDriToIndexMeta
|
0
|
15
|
|
16
|
|
17 import os
|
|
18 from os.path import join, getsize
|
|
19 import sys
|
|
20 import re
|
3
|
21 from lxml import etree
|
0
|
22
|
3
|
23 def harvestIndexMeta(path,user,delpath="",replacepath="", update=False):
|
36
|
24 """
|
|
25 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
|
|
26 dort enthaltenenn dris mit denen Übereinstimmen, die in der Datenbank gespeichert sind.
|
0
|
27
|
36
|
28 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.
|
|
29 angenommen path="/mpiwg/online/permanent" und delpath="/mpiwg/online" dann wird in der Datenbank nach Pfaden gesucht die mit /permanent beginnen.
|
|
30
|
|
31 Ist replacepath gesetzt wird der mit delpath geloeschte Teil durch replacepath ersetzt, dh.h
|
|
32 path="/Volumes/online_permanent/library" und delpath="/Volumes/online_permanent", replacepath="/permanent" ann wird in der Datenbank nach Pfaden gesucht die mit /permanent beginnen.
|
|
33
|
|
34
|
|
35 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!
|
|
36
|
|
37 Falls es eine gibt und das update Flag gesetzt ist, wird die Dri aus den Index.meta in die Datenbank zu dem Pfad geschrieben.
|
|
38 """
|
0
|
39 md = manageIndexMetaPURLs.IndexMetaPURLManager()
|
|
40
|
|
41 for root, dirs, files in os.walk(path):
|
|
42
|
|
43
|
|
44 for name in files:
|
|
45 if name.endswith(".meta"):
|
|
46 fl=join(root, name)
|
36
|
47
|
|
48
|
|
49 driIndexMeta=addDriToIndexMeta.getDRIfromIndexMeta(fl)
|
|
50
|
3
|
51 imagePath=createImagePath(fl,root)
|
36
|
52
|
3
|
53 imagePath=re.sub("^"+delpath,replacepath,imagePath)
|
|
54
|
0
|
55 fl=re.sub("^"+delpath,replacepath,fl) #loesche den teil vom path der mir delpath beginnt
|
|
56
|
36
|
57
|
|
58
|
|
59 val,purl = md.register(fl, True, user=user,imagePath=imagePath,driIndexMeta=driIndexMeta,update=update)
|
4
|
60 try:
|
|
61 if val==manageIndexMetaPURLs.ALREADY_EXISTS:
|
|
62 print "found %s -> %s"%(fl,purl)
|
3
|
63
|
4
|
64 elif val==manageIndexMetaPURLs.UPDATED:
|
|
65 print "updated %s -> %s"%(fl,purl)
|
|
66 else:
|
|
67 print "added %s -> %s"%(fl,purl)
|
|
68 except:
|
|
69 print "cannot print: %s"%purl
|
|
70
|
0
|
71 if 'pageimg' in dirs:
|
|
72 dirs.remove('pageimg') # don't visit pageimf
|
|
73 for dir in dirs:
|
|
74 if dir== "pageimg":
|
|
75 dirs.remove('pageimg')
|
|
76 if dir.startswith("."):
|
|
77 dirs.remove(dir)
|
|
78
|
4
|
79 if dir.startswith(":"):
|
|
80 dirs.remove(dir)
|
|
81
|
0
|
82
|
3
|
83 # erzeugt einen imagepath wenn kein texttooltag existiert
|
|
84 def createImagePath(path,root):
|
4
|
85 print "parsing: %s"%path
|
|
86 try:
|
|
87 tree= etree.parse(path)
|
|
88 except:
|
|
89 print "cannot parse %s"%path
|
|
90 return ""
|
|
91
|
3
|
92 #teste ob texttool tag, dann kein imagePath
|
|
93 tt =tree.xpath('//texttool')
|
|
94 if len(tt)>0:
|
|
95 return ""
|
0
|
96
|
3
|
97
|
|
98 #im anderen fall, heuristic
|
|
99
|
|
100 imageFolders=["pageimg","pages"]
|
|
101
|
|
102 for imageFolder in imageFolders:
|
|
103 fl=join(root, imageFolder)
|
|
104 if os.path.exists(fl): # gibt es einen der folder
|
|
105 return fl
|
|
106
|
|
107 return ""
|
|
108
|
|
109
|
|
110
|
0
|
111
|
|
112 if __name__ == '__main__':
|
|
113 args = sys.argv[1:]
|
|
114 if not (len(args)==2 or len(args)==3 or len(args)==4):
|
|
115 print "USAGE: python harvestToPurl.py path user (optional)pathPrefixToDelete (optional)replacedeleted"
|
|
116 sys.exit(2)
|
|
117 path=args[0]
|
|
118 user=args[1]
|
|
119
|
|
120 delpath=""
|
|
121 replacepath=""
|
|
122
|
|
123 if len(args)==3:
|
|
124 delpath=args[2]
|
|
125 elif len(args)==4:
|
|
126 delpath=args[2]
|
|
127 replacepath=args[3]
|
|
128
|
|
129
|
|
130 if not os.path.exists(path):
|
|
131 print "ERROR: path %s does not exist!"%path
|
|
132 sys.exit(2)
|
|
133
|
3
|
134 harvestIndexMeta(path,user,delpath=delpath,replacepath=replacepath,update=True)
|
0
|
135
|
4
|
136
|