ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/WorkSpace.py
Revision: 1.18
Committed: Thu May 10 13:52:05 2007 UTC (17 years, 11 months ago) by slacapra
Content type: text/x-python
Branch: MAIN
Changes since 1.17: +6 -0 lines
Log Message:
add check if executed from "data" directory

File Contents

# Content
1 from crab_exceptions import *
2 #from threading import RLock
3 import common
4
5 import os, shutil, string, time
6
7 class WorkSpace:
8 def __init__(self, top_dir, cfg_params):
9 self._cwd_dir = os.getcwd()+'/'
10 self._top_dir = top_dir # top working directory
11 self._log_dir = self._top_dir + '/log' # log-directory
12 self._job_dir = self._top_dir + '/job' # job pars, scripts, jdl's
13 self._res_dir = self._top_dir + '/res' # dir to store job results
14 self._share_dir = self._top_dir + '/share' # directory for common stuff
15 self._pathForTgz = string.split(top_dir, '/')[-1]
16 self._boss_cache = self._share_dir + '/.boss_cache'
17
18 try:
19 self.outDir = cfg_params["USER.outputdir"]
20 except:
21 self.outDir = self._res_dir
22 try:
23 self.log_outDir = cfg_params["USER.logdir"]
24 except:
25 self.log_outDir = self._res_dir
26 return
27
28 def create(self):
29 if (string.split(self._top_dir,'/')[-2]=='data'):
30 msg = 'Cannot run CRAB from "data" directory.\n'
31 msg += 'please change direcotry\n'
32 raise CrabException(msg)
33
34
35 if not os.path.exists(self._top_dir):
36 os.mkdir(self._top_dir)
37 pass
38 if not os.listdir(self._top_dir):
39 os.mkdir(self._log_dir)
40 os.mkdir(self._job_dir)
41 os.mkdir(self._res_dir)
42 os.mkdir(self._share_dir)
43 os.mkdir(self._boss_cache)
44
45 common.taskDB.setDict("CODE",(str(time.time())))
46 pass
47
48 # fede
49 if not os.path.exists(self.outDir):
50 try:
51 os.mkdir(self.outDir)
52 except:
53 msg = 'Cannot mkdir ' + self.outDir + ' Check permission'
54 raise CrabException(msg)
55 if os.listdir(self.outDir):
56 msg = self.outDir + ' already exists and is not empty. Please remove it before create new task'
57 raise CrabException(msg)
58 if not os.path.exists(self.log_outDir):
59 try:
60 os.mkdir(self.log_outDir)
61 except:
62 msg = 'Cannot mkdir ' + self.log_outDir + ' Check permission'
63 raise CrabException(msg)
64 pass
65 if os.listdir(self.log_outDir):
66 msg = self.log_outDir + ' already exists and is not empty. Please remove it before create new task'
67 raise CrabException(msg)
68 return
69
70 def delete(self):
71 """
72 delete the whole workspace without doing any test!!!
73 """
74 if os.path.exists(self._top_dir):
75 # shutil.rmtree(self._top_dir)
76 os.system("rm -rf %s" % self._top_dir )
77 # SL For some obscure reason the lgo dir is not removed at the first try
78 os.system("rm -rf %s" % self._top_dir )
79 pass
80 return
81
82 def cwdDir(self):
83 return self._cwd_dir + '/'
84
85 def topDir(self):
86 return self._top_dir + '/'
87
88 def logDir(self):
89 return self._log_dir + '/'
90
91 def jobDir(self):
92 return self._job_dir + '/'
93
94 def resDir(self):
95 return self._res_dir + '/'
96
97 def shareDir(self):
98 return self._share_dir + '/'
99
100 def pathForTgz(self):
101 return self._pathForTgz + '/'
102
103 def bossCache(self):
104 return self._boss_cache + '/'
105
106
107 def setResDir(self, dir):
108 self._res_dir = dir
109 return
110
111 def saveFileName(self):
112 return self.shareDir() + common.prog_name + '.sav'
113
114 def cfgFileName(self):
115 return self.shareDir() + common.prog_name + '.cfg'
116
117 def saveConfiguration(self, opts, cfg_fname):
118
119 # Save options
120
121 save_file = open(self.saveFileName(), 'w')
122
123 for k in opts.keys():
124 if opts[k] : save_file.write(k+'='+opts[k]+'\n')
125 else : save_file.write(k+'\n')
126 pass
127
128 save_file.close()
129
130 # Save cfg-file
131
132 shutil.copyfile(cfg_fname, self.cfgFileName())
133
134 return
135
136 def loadSavedOptions(self):
137
138 # Open save-file
139
140 try:
141 save_file = open(self.saveFileName(), 'r')
142 except IOError, e:
143 msg = 'Misconfigured continuation directory:\n'
144 msg += str(e)
145 raise CrabException(msg)
146
147 # Read saved options
148
149 save_opts = {}
150 for line in save_file:
151 line = line[:-1] # drop '\n'
152 try:
153 (k, v) = string.split(line, '=')
154 except:
155 k=line
156 v=''
157 pass
158 save_opts[k] = v
159 pass
160
161 save_file.close()
162 return save_opts
163