ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/WorkSpace.py
Revision: 1.17
Committed: Mon Feb 26 12:59:42 2007 UTC (18 years, 2 months ago) by slacapra
Content type: text/x-python
Branch: MAIN
CVS Tags: CRAB_1_5_1_pre1, CRAB_1_5_0, CRAB_1_5_0_pre9, CRAB_1_5_0_pre8, CRAB_1_5_0_pre7
Changes since 1.16: +2 -0 lines
Log Message:
doble delete to overcome the failure of first try on log dir: no idea why it fails...

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     if not os.path.exists(self._top_dir):
30     os.mkdir(self._top_dir)
31 fanzago 1.9 pass
32     if not os.listdir(self._top_dir):
33 nsmirnov 1.1 os.mkdir(self._log_dir)
34     os.mkdir(self._job_dir)
35     os.mkdir(self._res_dir)
36     os.mkdir(self._share_dir)
37 corvo 1.16 os.mkdir(self._boss_cache)
38 spiga 1.5
39 slacapra 1.13 common.taskDB.setDict("CODE",(str(time.time())))
40 nsmirnov 1.1 pass
41 fanzago 1.10
42     # fede
43     if not os.path.exists(self.outDir):
44 fanzago 1.11 try:
45     os.mkdir(self.outDir)
46     except:
47     msg = 'Cannot mkdir ' + self.outDir + ' Check permission'
48     raise CrabException(msg)
49 fanzago 1.10 if os.listdir(self.outDir):
50     msg = self.outDir + ' already exists and is not empty. Please remove it before create new task'
51     raise CrabException(msg)
52     if not os.path.exists(self.log_outDir):
53 fanzago 1.11 try:
54     os.mkdir(self.log_outDir)
55     except:
56     msg = 'Cannot mkdir ' + self.log_outDir + ' Check permission'
57     raise CrabException(msg)
58 fanzago 1.10 pass
59     if os.listdir(self.log_outDir):
60     msg = self.log_outDir + ' already exists and is not empty. Please remove it before create new task'
61     raise CrabException(msg)
62 nsmirnov 1.1 return
63    
64 slacapra 1.4 def delete(self):
65     """
66     delete the whole workspace without doing any test!!!
67     """
68     if os.path.exists(self._top_dir):
69 corvo 1.14 # shutil.rmtree(self._top_dir)
70 slacapra 1.17 os.system("rm -rf %s" % self._top_dir )
71     # SL For some obscure reason the lgo dir is not removed at the first try
72 corvo 1.14 os.system("rm -rf %s" % self._top_dir )
73 slacapra 1.4 pass
74     return
75    
76 spiga 1.6 def cwdDir(self):
77     return self._cwd_dir + '/'
78    
79 nsmirnov 1.1 def topDir(self):
80     return self._top_dir + '/'
81    
82     def logDir(self):
83     return self._log_dir + '/'
84    
85     def jobDir(self):
86     return self._job_dir + '/'
87    
88     def resDir(self):
89     return self._res_dir + '/'
90    
91     def shareDir(self):
92     return self._share_dir + '/'
93 corvo 1.14
94     def pathForTgz(self):
95     return self._pathForTgz + '/'
96    
97     def bossCache(self):
98     return self._boss_cache + '/'
99    
100 nsmirnov 1.1
101     def setResDir(self, dir):
102     self._res_dir = dir
103     return
104    
105     def saveFileName(self):
106     return self.shareDir() + common.prog_name + '.sav'
107    
108     def cfgFileName(self):
109     return self.shareDir() + common.prog_name + '.cfg'
110    
111     def saveConfiguration(self, opts, cfg_fname):
112    
113     # Save options
114    
115     save_file = open(self.saveFileName(), 'w')
116    
117     for k in opts.keys():
118 nsmirnov 1.2 if opts[k] : save_file.write(k+'='+opts[k]+'\n')
119     else : save_file.write(k+'\n')
120 nsmirnov 1.1 pass
121    
122     save_file.close()
123    
124     # Save cfg-file
125    
126     shutil.copyfile(cfg_fname, self.cfgFileName())
127    
128     return
129    
130     def loadSavedOptions(self):
131    
132     # Open save-file
133    
134     try:
135     save_file = open(self.saveFileName(), 'r')
136     except IOError, e:
137     msg = 'Misconfigured continuation directory:\n'
138     msg += str(e)
139     raise CrabException(msg)
140    
141     # Read saved options
142    
143     save_opts = {}
144     for line in save_file:
145     line = line[:-1] # drop '\n'
146 slacapra 1.3 try:
147     (k, v) = string.split(line, '=')
148     except:
149     k=line
150     v=''
151     pass
152 nsmirnov 1.1 save_opts[k] = v
153     pass
154    
155     save_file.close()
156     return save_opts
157