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

# User Rev Content
1 nsmirnov 1.1 from crab_exceptions import *
2     from threading import RLock
3     import common
4    
5 spiga 1.5 import os, shutil, string, time
6 nsmirnov 1.1
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 spiga 1.5
40     fileCODE1 = open(self._log_dir+"/.code","w")
41     fileCODE1.write(str(time.time()))
42     fileCODE1.close()
43 nsmirnov 1.1 pass
44     return
45    
46 slacapra 1.4 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 nsmirnov 1.1 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 nsmirnov 1.2 if opts[k] : save_file.write(k+'='+opts[k]+'\n')
88     else : save_file.write(k+'\n')
89 nsmirnov 1.1 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 slacapra 1.3 try:
116     (k, v) = string.split(line, '=')
117     except:
118     k=line
119     v=''
120     pass
121 nsmirnov 1.1 save_opts[k] = v
122     pass
123    
124     save_file.close()
125     return save_opts
126