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

# User Rev Content
1 nsmirnov 1.1 from crab_exceptions import *
2 slacapra 1.7 #from threading import RLock
3 nsmirnov 1.1 import common
4    
5 spiga 1.5 import os, shutil, string, time
6 nsmirnov 1.1
7     class WorkSpace:
8 fanzago 1.10 def __init__(self, top_dir, cfg_params):
9 spiga 1.6 self._cwd_dir = os.getcwd()+'/'
10 nsmirnov 1.1 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 corvo 1.14 self._pathForTgz = string.split(top_dir, '/')[-1]
16 corvo 1.16 self._boss_cache = self._share_dir + '/.boss_cache'
17 nsmirnov 1.1
18 fanzago 1.10 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 nsmirnov 1.1 return
27    
28     def create(self):
29 slacapra 1.18 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 nsmirnov 1.1 if not os.path.exists(self._top_dir):
36     os.mkdir(self._top_dir)
37 fanzago 1.9 pass
38     if not os.listdir(self._top_dir):
39 nsmirnov 1.1 os.mkdir(self._log_dir)
40     os.mkdir(self._job_dir)
41     os.mkdir(self._res_dir)
42     os.mkdir(self._share_dir)
43 corvo 1.16 os.mkdir(self._boss_cache)
44 spiga 1.5
45 slacapra 1.13 common.taskDB.setDict("CODE",(str(time.time())))
46 nsmirnov 1.1 pass
47 fanzago 1.10
48     # fede
49     if not os.path.exists(self.outDir):
50 fanzago 1.11 try:
51     os.mkdir(self.outDir)
52     except:
53     msg = 'Cannot mkdir ' + self.outDir + ' Check permission'
54     raise CrabException(msg)
55 fanzago 1.10 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 fanzago 1.11 try:
60     os.mkdir(self.log_outDir)
61     except:
62     msg = 'Cannot mkdir ' + self.log_outDir + ' Check permission'
63     raise CrabException(msg)
64 fanzago 1.10 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 nsmirnov 1.1 return
69    
70 slacapra 1.4 def delete(self):
71     """
72     delete the whole workspace without doing any test!!!
73     """
74     if os.path.exists(self._top_dir):
75 corvo 1.14 # shutil.rmtree(self._top_dir)
76 slacapra 1.17 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 corvo 1.14 os.system("rm -rf %s" % self._top_dir )
79 slacapra 1.4 pass
80     return
81    
82 spiga 1.6 def cwdDir(self):
83     return self._cwd_dir + '/'
84    
85 nsmirnov 1.1 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 corvo 1.14
100     def pathForTgz(self):
101     return self._pathForTgz + '/'
102    
103     def bossCache(self):
104     return self._boss_cache + '/'
105    
106 nsmirnov 1.1
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 nsmirnov 1.2 if opts[k] : save_file.write(k+'='+opts[k]+'\n')
125     else : save_file.write(k+'\n')
126 nsmirnov 1.1 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 slacapra 1.3 try:
153     (k, v) = string.split(line, '=')
154     except:
155     k=line
156     v=''
157     pass
158 nsmirnov 1.1 save_opts[k] = v
159     pass
160    
161     save_file.close()
162     return save_opts
163