diff --git a/wetb/hawc2/htc_file.py b/wetb/hawc2/htc_file.py index c769185d2ee30e819bd95fcb49a61e8e88fb9eda..26a04a3c1e2bf675e09815edb29fb7a2a2edf708 100644 --- a/wetb/hawc2/htc_file.py +++ b/wetb/hawc2/htc_file.py @@ -38,23 +38,30 @@ class HTCFile(HTCContents, HTCDefaults): level = 0 modelpath = "../" initial_comments = None + _contents = None def __init__(self, filename=None, modelpath="../"): self.modelpath = modelpath - self.contents = OrderedDict() + + + self.filename = filename + + #assert 'simulation' in self.contents, "%s could not be loaded. 'simulation' section missing" % filename + + def _load(self): + self.reset() self.initial_comments = [] self.htc_inputfiles = [] - if filename is None: + self.contents = OrderedDict() + if self.filename is None: self.filename = 'empty.htc' - self.lines = self.empty_htc.split("\n") + lines = self.empty_htc.split("\n") else: - self.filename = filename - self.modelpath = os.path.realpath(os.path.join(os.path.dirname(self.filename), modelpath)) - self.lines = self.readlines(filename) -# with open(filename) as fid: -# self.lines = fid.readlines() - self.lines = [l.strip() for l in self.lines] + self.modelpath = os.path.realpath(os.path.join(os.path.dirname(self.filename), self.modelpath)) + lines = self.readlines(self.filename) + + lines = [l.strip() for l in lines] - lines = copy(self.lines) + #lines = copy(self.lines) while lines: if lines[0].startswith(";"): self.initial_comments.append(lines.pop(0).strip() + "\n") @@ -65,9 +72,23 @@ class HTCFile(HTCContents, HTCDefaults): self._add_contents(line) if line.name_ == "exit": break - #assert 'simulation' in self.contents, "%s could not be loaded. 'simulation' section missing" % filename + def reset(self): + self._contents = None + + + @property + def contents(self): + if self._contents is None: + self._load() + return self._contents + + @contents.setter + def contents(self, value): + self._contents = value + + def readfilelines(self, filename): with open(unix_filename(filename), encoding='cp1252') as fid: lines = list(fid.readlines()) @@ -97,9 +118,11 @@ class HTCFile(HTCContents, HTCDefaults): self.contents[key] = value def __str__(self): + self.contents #load return "".join(self.initial_comments + [c.__str__(1) for c in self]) def save(self, filename=None): + self.contents #load if not loaded if filename is None: filename = self.filename else: @@ -112,6 +135,7 @@ class HTCFile(HTCContents, HTCDefaults): def set_name(self, name, htc_folder="htc", log_folder="log", res_folder="res"): #if os.path.isabs(folder) is False and os.path.relpath(folder).startswith("htc" + os.path.sep): + self.contents #load if not loaded fmt_folder = lambda folder : "./" + os.path.relpath(folder).replace("\\", "/") self.filename = os.path.abspath(os.path.join(self.modelpath, fmt_folder(htc_folder), "%s.htc" % name)).replace("\\", "/") @@ -122,6 +146,7 @@ class HTCFile(HTCContents, HTCDefaults): self.output.filename = os.path.join(fmt_folder(res_folder), "%s" % name).replace("\\", "/") def set_time(self, start=None, stop=None, step=None): + self.contents # load if not loaded if stop is not None: self.simulation.time_stop = stop else: @@ -134,6 +159,7 @@ class HTCFile(HTCContents, HTCDefaults): self.wind.scale_time_start = start def input_files(self): + self.contents # load if not loaded files = self.htc_inputfiles if 'new_htc_structure' in self: for mb in [self.new_htc_structure[mb] for mb in self.new_htc_structure.keys() if mb.startswith('main_body')]: @@ -173,6 +199,7 @@ class HTCFile(HTCContents, HTCDefaults): return [f for f in set(files) if f] def output_files(self): + self.contents # load if not loaded files = [] for k, index in [('simulation/logfile', 0), ('simulation/animation', 0), @@ -204,6 +231,7 @@ class HTCFile(HTCContents, HTCDefaults): return [f for f in files if f] def turbulence_files(self): + self.contents # load if not loaded if 'wind' not in self.contents.keys() or self.wind.turb_format[0] == 0: return [] elif self.wind.turb_format[0] == 1: @@ -214,6 +242,7 @@ class HTCFile(HTCContents, HTCDefaults): def res_file_lst(self): + self.contents # load if not loaded if 'output' not in self: return [] dataformat = self.output.get('data_format', 'hawc_ascii') @@ -227,6 +256,7 @@ class HTCFile(HTCContents, HTCDefaults): def simulate(self, exe, skip_if_up_to_date=False): + self.contents # load if not loaded if skip_if_up_to_date: from os.path import isfile, getmtime, isabs res_file = os.path.join(self.modelpath, self.res_file_lst()[0]) diff --git a/wetb/hawc2/log_file.py b/wetb/hawc2/log_file.py index 3b8dc7f6bc7573f1e2e98e856e2a8dc8e2435f68..cf42b5d2d07963053505fb794d843ae39b92b4f0 100644 --- a/wetb/hawc2/log_file.py +++ b/wetb/hawc2/log_file.py @@ -140,9 +140,11 @@ class LogFile(LogInterpreter): @staticmethod - def from_htcfile(htcfile, modelpath): + def from_htcfile(htcfile, modelpath=None): logfilename = htcfile.simulation.logfile[0] if not os.path.isabs(logfilename): + if modelpath is None: + modelpath = htcfile.modelpath logfilename = os.path.join(modelpath, logfilename) return LogFile(logfilename, htcfile.simulation.time_stop[0]) diff --git a/wetb/hawc2/simulation.py b/wetb/hawc2/simulation.py index 01ae9412adf0d6484edc853c88a334f862abaf83..5501f146357967da90e69a31dd359216ed92c868 100755 --- a/wetb/hawc2/simulation.py +++ b/wetb/hawc2/simulation.py @@ -239,6 +239,8 @@ class Simulation(object): self.set_id(self.filename) if self.status != ERROR: self.status = CLEANED + self.logFile.reset() + self.htcFile.reset() diff --git a/wetb/hawc2/tests/test_htc_file.py b/wetb/hawc2/tests/test_htc_file.py index 8f0b94f398788df099f46c97b167c04b521a10a6..29d21f9ab62d3ebafe6b07500e40262030be4f41 100644 --- a/wetb/hawc2/tests/test_htc_file.py +++ b/wetb/hawc2/tests/test_htc_file.py @@ -247,6 +247,11 @@ class TestHtcFile(unittest.TestCase): self.assertEqual(str(htcfile)[0], ";") + def test_htc_reset(self): + htcfile = HTCFile(self.testfilepath + "test.htc") + self.assertEqual(htcfile.wind.wsp[0], 10) + + diff --git a/wetb/hawc2/tests/test_logfile.py b/wetb/hawc2/tests/test_logfile.py index 54bbca8fea5ece19a1d263fecaad1585205f0b98..3625e37562f8b060ba995af8b875236f2749b100 100644 --- a/wetb/hawc2/tests/test_logfile.py +++ b/wetb/hawc2/tests/test_logfile.py @@ -12,7 +12,7 @@ from future import standard_library standard_library.install_aliases() import unittest from wetb.hawc2.log_file import LogFile, \ - INITIALIZATION, SIMULATING, DONE, PENDING + INITIALIZATION, SIMULATING, DONE, PENDING, UNKNOWN import time from wetb.hawc2 import log_file import threading @@ -209,6 +209,15 @@ class TestLogFile(unittest.TestCase): self.assertEqual(logfile.remaining_time_str(), "1:02:05") + def test_reset(self): + htcfile = HTCFile(self.tfp + 'logfiles/model/htc/dlc14_iec61400-1ed3/dlc14_wsp10_wdir000_s0000.htc') + logfile = LogFile.from_htcfile(htcfile, self.tfp + 'logfiles/model/') + self.assertEqual(logfile.status, DONE) + logfile.reset() + self.assertEqual(logfile.status, UNKNOWN) + self.assertEqual(logfile.txt, "") + logfile.update_status() + self.assertEqual(logfile.status, DONE) if __name__ == "__main__":