gostyle: the basic library, intitial commit.
[gostyle.git] / result_file.py
blob609d687a6616ec4aadb0854d0973c5839757cf27
1 from os.path import abspath, exists
2 import os
4 from config import OUTPUT_DIR
6 from utils.colors import *
7 from utils import misc
9 class ResultFile:
10 def __init__(self, filename, create_empty=False):
11 self.filename = filename
12 if create_empty:
13 assert not self.exists()
14 open(self.filename,'w').close()
16 def exists(self, warn=False):
17 status = exists(self.filename)
18 if not status and warn:
19 logging.warn("File '%s' does not exist."%(self.filename,))
20 return status
22 def __repr__(self):
23 return "ResultFile('%s')"%(self.filename,)
25 def get_random_output_base(sub_len=3, levels=2):
26 h = misc.unique_hash()
27 assert len(h) > levels * sub_len
28 assert levels >= 1
29 l = [OUTPUT_DIR]
30 for x in xrange(levels):
31 l.append( h[ x * sub_len : (x+1) * sub_len ] )
33 d = os.path.join(*l)
34 if not os.path.isdir(d):
35 os.makedirs(d)
36 return os.path.join(d, h)
38 def get_output_resultfile(suffix=''):
39 ret = ResultFile( get_random_output_base() + suffix)
40 if ret.exists():
41 raise RuntimeError("New output result file '%s' already exists, unique hash not really unique..."%(ret))
42 return ret
44 def get_output_resultpair(suffix=''):
45 basename = get_random_output_base()
46 ret1 = ResultFile(basename + '_B' + suffix)
47 ret2 = ResultFile(basename + '_W' + suffix)
48 rettup = BlackWhite(ret1, ret2)
49 for ret in rettup:
50 if ret.exists():
51 raise RuntimeError("New output result file '%s' already exists, unique hash not really unique..."%(ret))
52 return rettup