ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/WorkSpace.py
Revision: 1.5
Committed: Tue Aug 30 14:26:10 2005 UTC (19 years, 8 months ago) by spiga
Content type: text/x-python
Branch: MAIN
Changes since 1.4: +5 -1 lines
Log Message:
crab-mon

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
9 #_instance = None
10
11 #def getInstance():
12 # if not WorkSpace._instance :
13 # raise CrabException('There is no instance of WorkSpace.')
14 # return WorkSpace._instance
15
16 #getInstance = staticmethod(getInstance)
17
18 def __init__(self, top_dir):
19 #if WorkSpace._instance:
20 # raise CrabException('WorkSpace already exists.')
21
22 self.lock = RLock()
23 self._top_dir = top_dir # top working directory
24 self._log_dir = self._top_dir + '/log' # log-directory
25 self._job_dir = self._top_dir + '/job' # job pars, scripts, jdl's
26 self._res_dir = self._top_dir + '/res' # dir to store job results
27 self._share_dir = self._top_dir + '/share' # directory for common stuff
28
29 #WorkSpace._instance = self
30 return
31
32 def create(self):
33 if not os.path.exists(self._top_dir):
34 os.mkdir(self._top_dir)
35 os.mkdir(self._log_dir)
36 os.mkdir(self._job_dir)
37 os.mkdir(self._res_dir)
38 os.mkdir(self._share_dir)
39
40 fileCODE1 = open(self._log_dir+"/.code","w")
41 fileCODE1.write(str(time.time()))
42 fileCODE1.close()
43 pass
44 return
45
46 def delete(self):
47 """
48 delete the whole workspace without doing any test!!!
49 """
50 if os.path.exists(self._top_dir):
51 shutil.rmtree(self._top_dir)
52 pass
53 return
54
55 def topDir(self):
56 return self._top_dir + '/'
57
58 def logDir(self):
59 return self._log_dir + '/'
60
61 def jobDir(self):
62 return self._job_dir + '/'
63
64 def resDir(self):
65 return self._res_dir + '/'
66
67 def shareDir(self):
68 return self._share_dir + '/'
69
70 def setResDir(self, dir):
71 self._res_dir = dir
72 return
73
74 def saveFileName(self):
75 return self.shareDir() + common.prog_name + '.sav'
76
77 def cfgFileName(self):
78 return self.shareDir() + common.prog_name + '.cfg'
79
80 def saveConfiguration(self, opts, cfg_fname):
81
82 # Save options
83
84 save_file = open(self.saveFileName(), 'w')
85
86 for k in opts.keys():
87 if opts[k] : save_file.write(k+'='+opts[k]+'\n')
88 else : save_file.write(k+'\n')
89 pass
90
91 save_file.close()
92
93 # Save cfg-file
94
95 shutil.copyfile(cfg_fname, self.cfgFileName())
96
97 return
98
99 def loadSavedOptions(self):
100
101 # Open save-file
102
103 try:
104 save_file = open(self.saveFileName(), 'r')
105 except IOError, e:
106 msg = 'Misconfigured continuation directory:\n'
107 msg += str(e)
108 raise CrabException(msg)
109
110 # Read saved options
111
112 save_opts = {}
113 for line in save_file:
114 line = line[:-1] # drop '\n'
115 try:
116 (k, v) = string.split(line, '=')
117 except:
118 k=line
119 v=''
120 pass
121 save_opts[k] = v
122 pass
123
124 save_file.close()
125 return save_opts
126