1 import ConfigParser |
|
2 ##import io |
|
3 import sys |
|
4 import os |
|
5 import re |
|
6 import string |
|
7 import shutil |
|
8 |
|
9 active=1 |
|
10 iniFileName='updatecontentandfilenames.ini' |
|
11 |
|
12 def AddSearchReplacePair(src,dst): |
|
13 print "Will replace\t"+src+" with\t"+dst |
|
14 search_replace[src] = dst |
|
15 |
|
16 def DieAndWait(string): |
|
17 print string |
|
18 sys.exit() |
|
19 |
|
20 def TranslateString(string): |
|
21 # out = string |
|
22 # print "\ntranslating: "+string |
|
23 for src in search_replace.keys(): |
|
24 dest = search_replace[src] |
|
25 # print "src: "+src+" dest: "+dest |
|
26 string = string.replace(src,dest) |
|
27 # print "out: "+out |
|
28 return string |
|
29 |
|
30 |
|
31 def RenameIfNecessary(root,file): |
|
32 thisdest = TranslateString(file) |
|
33 if(thisdest != file): |
|
34 print "Renaming ["+file+"] to ["+thisdest+"]" |
|
35 if active: |
|
36 os.rename(os.path.join(root,file),os.path.join(root,thisdest)) |
|
37 |
|
38 def CorrectFile(file): |
|
39 # ini file is special |
|
40 if(file.upper() == iniFileName.upper()): |
|
41 CorrectIniFile(file) |
|
42 else: |
|
43 if(FileContainsSrc(file)): |
|
44 print "Modifying ["+file+"]" |
|
45 TranslateFile(file); |
|
46 |
|
47 def FileContainsSrc(file): |
|
48 # print "looking in ["+file+"]" |
|
49 f = open(file) |
|
50 found = 0 |
|
51 for line in f: |
|
52 # print "[[["+line |
|
53 for src in search_replace.keys(): |
|
54 if(-1 != string.find(line,src)): |
|
55 found = 1 |
|
56 # print "\n'"+src+"' found in "+line+".. so.." |
|
57 break |
|
58 if(found): |
|
59 break |
|
60 f.close() |
|
61 return found |
|
62 |
|
63 def TranslateFile(file): |
|
64 if (active == 0): |
|
65 return |
|
66 shutil.copyfile(file,file+".bak") |
|
67 i = open(file+".bak") |
|
68 o = open(file,"w+") |
|
69 for line in i: |
|
70 out=TranslateString(line) |
|
71 o.write(out) |
|
72 i.close() |
|
73 o.close() |
|
74 |
|
75 def CorrectIniFile(file): |
|
76 if (active == 0): |
|
77 return |
|
78 print "Correcting ini file "+file+" .." |
|
79 shutil.copyfile(file,file+".bak") |
|
80 i = open(file+".bak") |
|
81 o = open(file,"w+") |
|
82 searchfield='' |
|
83 for line in i: |
|
84 ms=re.match('^\s*Search\s*=\s*(.+)',line,flags=re.IGNORECASE) |
|
85 mr=re.match('^\s*Replace\s*=\s*(.+)',line,flags=re.IGNORECASE) |
|
86 if(ms): |
|
87 if(searchfield != ''): |
|
88 print "Multiple search sections found before a replace. fix config file manually" |
|
89 sys.exit() |
|
90 searchfield = ms.group(1) |
|
91 elif(mr): |
|
92 if(searchfield == ''): |
|
93 print "Replace section found before search section. fix config file manually" |
|
94 sys.exit() |
|
95 o.write("Search="+mr.group(1)+"\nReplace=CHANGEME\n") |
|
96 searchfield='' |
|
97 else: |
|
98 o.write(line) |
|
99 i.close() |
|
100 o.close() |
|
101 |
|
102 |
|
103 |
|
104 |
|
105 config = ConfigParser.ConfigParser() |
|
106 config.readfp(open(iniFileName)) |
|
107 |
|
108 print "1. Figuring out search/replace pairs.." |
|
109 |
|
110 search_replace = {} # empty map |
|
111 |
|
112 for section in config.sections(): |
|
113 src = config.get(section,'Search') |
|
114 if(src == ""): |
|
115 DieAndWait("Error in ini file section '"+section+"': Must specify Search field") |
|
116 if(src in search_replace): |
|
117 DieAndWait("Error in ini file section '"+section+"': Search field '"+src+"' specified more than once") |
|
118 dest = config.get(section,'Replace') |
|
119 if(dest == ""): |
|
120 DieAndWait("Error in ini file section '"+section+"': Must specify Replace field") |
|
121 if(dest == "CHANGEME"): |
|
122 DieAndWait("Error in ini file section '"+section+"': Must specify value to replace '"+src+"' with") |
|
123 |
|
124 AddSearchReplacePair(src,dest) |
|
125 |
|
126 # deal with upper / lower case variants |
|
127 ucsrc = src.upper() |
|
128 lcsrc = src.lower() |
|
129 lcapsrc = ucsrc[:1]+lcsrc[1:] |
|
130 ucdest = dest.upper() |
|
131 lcdest = dest.lower() |
|
132 lcapdest = ucdest[:1]+lcdest[1:] |
|
133 |
|
134 if(ucsrc != src): |
|
135 AddSearchReplacePair(ucsrc,ucdest) |
|
136 if(lcsrc != src): |
|
137 AddSearchReplacePair(lcsrc,lcdest) |
|
138 if(lcapsrc != src and lcapsrc != lcsrc): |
|
139 AddSearchReplacePair(lcapsrc,lcapdest) |
|
140 |
|
141 print "-----" |
|
142 print "2. Scanning for read-only files.." |
|
143 |
|
144 readOnlyFiles=0; |
|
145 for root, dirs, files in os.walk("",topdown=False): |
|
146 for file in files: |
|
147 # print "Testing readable : "+root+file |
|
148 try: |
|
149 fh = open(os.path.join(root,file),"a+") |
|
150 fh.close() |
|
151 except: |
|
152 print "Read-only file detected: "+os.path.join(root,file) |
|
153 readOnlyFiles=1 |
|
154 |
|
155 if(readOnlyFiles): |
|
156 print "Can't operate with read-only files present." |
|
157 sys.exit() |
|
158 else: |
|
159 print "No read-only files present. Proceeding to search/replace.." |
|
160 |
|
161 |
|
162 print "-----" |
|
163 print "3. Renaming files and folders.." |
|
164 |
|
165 for root, dirs, files in os.walk("",topdown=False): |
|
166 # print "ROOT: "+root |
|
167 for dir in dirs: |
|
168 RenameIfNecessary(root,dir) |
|
169 for file in files: |
|
170 RenameIfNecessary(root,file) |
|
171 |
|
172 |
|
173 print "-----" |
|
174 print "4. Search/replacing in files.." |
|
175 |
|
176 for root, dirs, files in os.walk("",topdown=False): |
|
177 for file in files: |
|
178 CorrectFile(os.path.join(root,file)) |
|
179 |
|
180 print "-----" |
|
181 print "Done." |
|