Skip to content

Commit

Permalink
Changed usage of DataParser to DataSource
Browse files Browse the repository at this point in the history
Includes:
  simDataParser -> simDataSource
  dataParser -> dataSource
Production and test code updated
  • Loading branch information
asgibson committed Nov 7, 2023
1 parent b17104e commit b056993
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 53 deletions.
28 changes: 14 additions & 14 deletions onair/src/run_scripts/execution_engine.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,17 @@

class ExecutionEngine:
def __init__(self, config_file='', run_name='', save_flag=False):
# Init Housekeeping

# Init Housekeeping
self.run_name = run_name
self.config_filepath = config_file

# Init Flags
# Init Flags
self.IO_Flag = False
self.Dev_Flag = False
self.Viz_Flag = False
# Init Paths

# Init Paths
self.dataFilePath = ''
self.telemetryFile = ''
self.fullTelemetryFileName = ''
Expand All @@ -46,7 +46,7 @@ def __init__(self, config_file='', run_name='', save_flag=False):

# Init parsing/sim info
self.parser_file_name = ''
self.simDataParser = None
self.simDataSource = None
self.sim = None

# Init plugins
Expand All @@ -69,7 +69,7 @@ def parse_configs(self, config_filepath):

if len(config.read(config_filepath)) == 0:
raise FileNotFoundError(f"Config file at '{config_filepath}' could not be read.")

try:
## Parse Required Data: Telementry Data & Configuration
self.dataFilePath = config['DEFAULT']['TelemetryDataFilePath']
Expand Down Expand Up @@ -97,7 +97,7 @@ def parse_configs(self, config_filepath):
except KeyError as e:
new_message = f"Config file: '{config_filepath}', missing key: {e.args[0]}"
raise KeyError(new_message) from e

## Parse Optional Data: Benchmarks
try:
self.benchmarkFilePath = config['DEFAULT']['BenchmarkFilePath']
Expand All @@ -106,7 +106,7 @@ def parse_configs(self, config_filepath):
except:
pass

def parse_plugins_dict(self, config_plugin_dict):
def parse_plugins_dict(self, config_plugin_dict):
## Parse Required Data: Plugin name to path dict
ast_plugin_dict = self.ast_parse_eval(config_plugin_dict)
if isinstance(ast_plugin_dict.body, ast.Dict):
Expand All @@ -123,11 +123,11 @@ def parse_data(self, parser_file_name, data_file_name, metadata_file_name, subsy
data_source_spec = importlib.util.spec_from_file_location('data_source', parser_file_name)
data_source_module = importlib.util.module_from_spec(data_source_spec)
data_source_spec.loader.exec_module(data_source_module)
self.simDataParser = data_source_module.DataSource(data_file_name, metadata_file_name, subsystems_breakdown)
self.simDataSource = data_source_module.DataSource(data_file_name, metadata_file_name, subsystems_breakdown)

def setup_sim(self):
self.sim = Simulator(self.simDataParser,
self.knowledge_rep_plugin_dict,
self.sim = Simulator(self.simDataSource,
self.knowledge_rep_plugin_dict,
self.learners_plugin_dict,
self.planners_plugin_dict,
self.complex_plugin_dict)
Expand All @@ -154,7 +154,7 @@ def init_save_paths(self):
os.mkdir(temp_save_path)
os.mkdir(temp_models_path)
os.mkdir(temp_diagnosis_path)

os.environ['ONAIR_SAVE_PATH'] = save_path
os.environ['ONAIR_TMP_SAVE_PATH'] = temp_save_path
os.environ['ONAIR_MODELS_SAVE_PATH'] = temp_models_path
Expand All @@ -163,7 +163,7 @@ def init_save_paths(self):
def delete_save_paths(self):
save_path = os.environ['RESULTS_PATH']
sub_dirs = os.listdir(save_path)
if 'tmp' in sub_dirs:
if 'tmp' in sub_dirs:
try:
shutil.rmtree(save_path + '/tmp')
except OSError as e:
Expand Down
12 changes: 6 additions & 6 deletions onair/src/run_scripts/sim.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@
DIAGNOSIS_INTERVAL = 100

class Simulator:
def __init__(self, dataParser, knowledge_rep_plugin_dict, learners_plugin_dict, planners_plugin_dict, complex_plugin_dict):
self.simData = dataParser
headers, tests = dataParser.get_vehicle_metadata()
def __init__(self, dataSource, knowledge_rep_plugin_dict, learners_plugin_dict, planners_plugin_dict, complex_plugin_dict):
self.simData = dataSource
headers, tests = dataSource.get_vehicle_metadata()
vehicle = VehicleRepresentation(headers, tests, knowledge_rep_plugin_dict)
self.agent = Agent(vehicle, learners_plugin_dict, planners_plugin_dict, complex_plugin_dict)

Expand All @@ -41,8 +41,8 @@ def run_sim(self, IO_Flag=False, dev_flag=False, viz_flag = True):
next = self.simData.get_next()
self.agent.reason(next)
self.IO_check(time_step, IO_Flag)
### Stop when a fault is reached

### Stop when a fault is reached
if self.agent.mission_status == 'RED':
if last_fault == time_step - 1: #if they are consecutive
if (time_step - last_diagnosis) % DIAGNOSIS_INTERVAL == 0:
Expand All @@ -53,7 +53,7 @@ def run_sim(self, IO_Flag=False, dev_flag=False, viz_flag = True):
last_diagnosis = time_step
last_fault = time_step
time_step += 1

# Final diagnosis processing
if len(diagnosis_list) == 0:
diagnosis_list.append(self.agent.diagnose(time_step))
Expand Down
48 changes: 24 additions & 24 deletions test/onair/src/run_scripts/test_execution_engine.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ def test_ExecutionEngine__init__sets_expected_values_but_does_no_calls_when_conf
assert cut.benchmarkFiles == ''
assert cut.benchmarkIndices == ''
assert cut.parser_file_name == ''
assert cut.simDataParser == None
assert cut.simDataSource == None
assert cut.sim == None
assert cut.save_flag == arg_save_flag
assert cut.save_name == arg_run_name
Expand Down Expand Up @@ -110,7 +110,7 @@ def test_ExecutionEngine_parse_configs_raises_FileNotFoundError_when_config_cann

mocker.patch(execution_engine.__name__ + '.configparser.ConfigParser', return_value=fake_config)
mocker.patch.object(fake_config, 'read', return_value=fake_config_read_result)

# Act
with pytest.raises(FileNotFoundError) as e_info:
cut.parse_configs(arg_bad_config_filepath)
Expand Down Expand Up @@ -253,7 +253,7 @@ def test_ExecutionEngine_parse_configs_sets_all_items_without_error(mocker):

fake_keys.__len__.return_value = 1
fake_keys.__iter__.return_value = iter([str(fake_plugin)])

cut = ExecutionEngine.__new__(ExecutionEngine)

mocker.patch(execution_engine.__name__ + '.configparser.ConfigParser', return_value=fake_config)
Expand Down Expand Up @@ -331,7 +331,7 @@ def test_ExecutionEngine_parse_configs_bypasses_benchmarks_when_access_raises_er

fake_keys.__len__.return_value = 1
fake_keys.__iter__.return_value = iter([str(fake_plugin)])

cut = ExecutionEngine.__new__(ExecutionEngine)

mocker.patch(execution_engine.__name__ + '.configparser.ConfigParser', return_value=fake_config)
Expand Down Expand Up @@ -400,7 +400,7 @@ def test_ExecutionEngine_parse_plugins_list_raises_FileNotFoundError_when_single
mocker.patch(execution_engine.__name__ + '.ast.literal_eval', return_value=fake_temp_plugin_dict)
mocker.patch.object(fake_temp_plugin_dict, 'values', return_value=fake_values)
mocker.patch(execution_engine.__name__ + '.os.path.exists', return_value=False)

# Act
with pytest.raises(FileNotFoundError) as e_info:
cut.parse_plugins_dict(arg_config_plugin_dict)
Expand Down Expand Up @@ -444,7 +444,7 @@ def test_ExecutionEngine_parse_plugins_list_raises_FileNotFoundError_when_any_co
mocker.patch(execution_engine.__name__ + '.ast.literal_eval', return_value=fake_temp_plugin_dict)
mocker.patch.object(fake_temp_plugin_dict, 'values', return_value=fake_values)
mocker.patch(execution_engine.__name__ + '.os.path.exists', side_effect=exists_side_effects)

# Act
with pytest.raises(FileNotFoundError) as e_info:
cut.parse_plugins_dict(arg_config_plugin_dict)
Expand Down Expand Up @@ -478,7 +478,7 @@ def test_ExecutionEngine_returns_empty_dict_when_config_dict_is_empty(mocker):
mocker.patch.object(cut, 'ast_parse_eval', return_value=fake_plugin_dict)
mocker.patch(execution_engine.__name__ + '.isinstance', return_value=True)
mocker.patch(execution_engine.__name__ + '.ast.literal_eval', return_value=fake_temp_plugin_dict)

# Act
result = cut.parse_plugins_dict(arg_config_plugin_dict)

Expand Down Expand Up @@ -514,7 +514,7 @@ def test_ExecutionEngine_returns_expected_dict_when_all_mapped_files_exist(mocke
mocker.patch(execution_engine.__name__ + '.ast.literal_eval', return_value=fake_temp_plugin_dict)
mocker.patch.object(fake_temp_plugin_dict, 'values', return_value=fake_values)
mocker.patch(execution_engine.__name__ + '.os.path.exists', side_effect=exists_side_effects)

# Act
result = cut.parse_plugins_dict(arg_config_plugin_dict)

Expand All @@ -533,7 +533,7 @@ def test_ExecutionEngine_returns_expected_dict_when_all_mapped_files_exist(mocke
assert execution_engine.os.path.exists.call_args_list[i].args == (fake_path, )

# parse_data tests
def test_ExecutionEngine_parse_data_sets_the_simDataParser_to_the_data_parser(mocker):
def test_ExecutionEngine_parse_data_sets_the_simDataSource_to_the_data_parser(mocker):
# Arrange
arg_parser_file_name = MagicMock()
arg_dataFile = str(MagicMock())
Expand Down Expand Up @@ -562,7 +562,7 @@ def test_ExecutionEngine_parse_data_sets_the_simDataParser_to_the_data_parser(mo
assert fake_spec.loader.exec_module.call_count == 1
assert fake_module.DataSource.call_count == 1
assert fake_module.DataSource.call_args_list[0].args == (arg_dataFile, arg_metadataFile, arg_subsystems_breakdown, )
assert cut.simDataParser == fake_parser_class_instance
assert cut.simDataSource == fake_parser_class_instance

def test_ExecutionEngine_parse_data_argument_subsystems_breakdown_optional_default_is_False(mocker):
# Arrange
Expand Down Expand Up @@ -602,7 +602,7 @@ def __init__(self, data_file, meta_file, subsystems_breakdown):
def test_ExecutionEngine_setup_sim_sets_self_sim_to_new_Simulator_and_sets_benchmark_data_when_no_exceptions_are_encountered(mocker):
# Arrange
cut = ExecutionEngine()
cut.simDataParser = MagicMock()
cut.simDataSource = MagicMock()
cut.knowledge_rep_plugin_dict = MagicMock()
cut.learners_plugin_dict = MagicMock()
cut.planners_plugin_dict = MagicMock()
Expand Down Expand Up @@ -630,9 +630,9 @@ def test_ExecutionEngine_setup_sim_sets_self_sim_to_new_Simulator_and_sets_bench

# Assert
assert execution_engine.Simulator.call_count == 1
assert execution_engine.Simulator.call_args_list[0].args == (cut.simDataParser,
cut.knowledge_rep_plugin_dict,
cut.learners_plugin_dict,
assert execution_engine.Simulator.call_args_list[0].args == (cut.simDataSource,
cut.knowledge_rep_plugin_dict,
cut.learners_plugin_dict,
cut.planners_plugin_dict,
cut.complex_plugin_dict)
assert cut.sim == fake_sim
Expand All @@ -649,7 +649,7 @@ def test_ExecutionEngine_setup_sim_sets_self_sim_to_new_Simulator_and_sets_bench
def test_ExecutionEngine_setup_sim_sets_self_sim_to_new_Simulator_but_does_not_set_bencmark_data_because_exception_is_encountered(mocker):
# Arrange
cut = ExecutionEngine.__new__(ExecutionEngine)
cut.simDataParser = MagicMock()
cut.simDataSource = MagicMock()
cut.knowledge_rep_plugin_dict = MagicMock()
cut.learners_plugin_dict = MagicMock()
cut.planners_plugin_dict = MagicMock()
Expand All @@ -672,9 +672,9 @@ def test_ExecutionEngine_setup_sim_sets_self_sim_to_new_Simulator_but_does_not_s

# Assert
assert execution_engine.Simulator.call_count == 1
assert execution_engine.Simulator.call_args_list[0].args == (cut.simDataParser,
cut.knowledge_rep_plugin_dict,
cut.learners_plugin_dict,
assert execution_engine.Simulator.call_args_list[0].args == (cut.simDataSource,
cut.knowledge_rep_plugin_dict,
cut.learners_plugin_dict,
cut.planners_plugin_dict,
cut.complex_plugin_dict)
assert cut.sim == fake_sim
Expand Down Expand Up @@ -738,11 +738,11 @@ def test_ExecutionEngine_init_save_paths_makes_tmp_and_models_and_diagnosis_dire
cut = ExecutionEngine.__new__(ExecutionEngine)

mocker.patch.dict(execution_engine.__name__ + '.os.environ', fake_environ)
mocker.patch(execution_engine.__name__ + '.os.path.join',
mocker.patch(execution_engine.__name__ + '.os.path.join',
side_effect=[fake_tmp_save_path, fake_tmp_models_path, fake_tmp_diagnosis_path])
mocker.patch.object(cut, 'delete_save_paths')
mocker.patch(execution_engine.__name__ + '.os.mkdir')

# Act
cut.init_save_paths()

Expand Down Expand Up @@ -794,7 +794,7 @@ def test_ExecutionEngine_delete_save_paths_removes_tmp_tree_when_it_exists(mocke
fake_dirs.append('tmp')
for i in range(pytest.gen.randint(0, 5)): # 0 to 5
fake_dirs.append(str(MagicMock()))

cut = ExecutionEngine.__new__(ExecutionEngine)

mocker.patch.dict(execution_engine.__name__ + '.os.environ', fake_environ)
Expand Down Expand Up @@ -824,7 +824,7 @@ def test_ExecutionEngine_delete_save_paths_prints_error_message_when_rmtree_rais
fake_dirs.append('tmp')
for i in range(pytest.gen.randint(0, 5)): # 0 to 5
fake_dirs.append(str(MagicMock()))

cut = ExecutionEngine.__new__(ExecutionEngine)

mocker.patch.dict(execution_engine.__name__ + '.os.environ', fake_environ)
Expand Down Expand Up @@ -854,7 +854,7 @@ def test_ExecutionEngine_save_results_creates_expected_save_path_and_copies_prop
fake_onair_tmp_save_path = str(MagicMock())
fake_environ = {'ONAIR_SAVE_PATH':fake_onair_save_path, 'ONAIR_TMP_SAVE_PATH':fake_onair_tmp_save_path}
fake_save_path = fake_onair_save_path + '/saved/' + arg_save_name + '_' + fake_complete_time

cut = ExecutionEngine.__new__(ExecutionEngine)

mocker.patch(execution_engine.__name__ + '.gmtime', return_value=fake_gmtime)
Expand All @@ -875,7 +875,7 @@ def test_ExecutionEngine_save_results_creates_expected_save_path_and_copies_prop
assert execution_engine.os.mkdir.call_args_list[0].args == (fake_save_path, )
assert execution_engine.copy_tree.call_count == 1
assert execution_engine.copy_tree.call_args_list[0].args == (fake_onair_tmp_save_path, fake_save_path, )

# set_run_param tests
def test_ExecutionEngine_set_run_param_passes_given_arguments_to_setattr(mocker):
# Arrange
Expand Down
18 changes: 9 additions & 9 deletions test/onair/src/run_scripts/test_sim.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
# Licensed under the NASA Open Source Agreement version 1.3
# See "NOSA GSC-19165-1 OnAIR.pdf"

""" Test Simulator Functionality """
""" Test Simulator Functionality """
import pytest
from mock import MagicMock

Expand All @@ -23,7 +23,7 @@ def test_Simulator_DIAGNOSIS_INTERVAL_is_expected_value():
# __init__ tests
def test_Simulator__init__creates_Vehicle_and_Agent(mocker):
# Arrange
arg_dataParser = MagicMock()
arg_dataSource = MagicMock()
arg_knowledge_rep_plugin_list = MagicMock()
arg_learners_plugin_list = MagicMock()
arg_planners_plugin_list = MagicMock()
Expand All @@ -37,19 +37,19 @@ def test_Simulator__init__creates_Vehicle_and_Agent(mocker):

cut = Simulator.__new__(Simulator)

mocker.patch.object(arg_dataParser, 'get_vehicle_metadata', return_value=fake_vehicle_metadata)
mocker.patch.object(arg_dataSource, 'get_vehicle_metadata', return_value=fake_vehicle_metadata)
mocker.patch(sim.__name__ + '.VehicleRepresentation', return_value=fake_vehicle)
mocker.patch(sim.__name__ + '.Agent', return_value=fake_agent)

# Act
cut.__init__(arg_dataParser,
arg_knowledge_rep_plugin_list,
arg_learners_plugin_list,
arg_planners_plugin_list,
cut.__init__(arg_dataSource,
arg_knowledge_rep_plugin_list,
arg_learners_plugin_list,
arg_planners_plugin_list,
arg_complex_plugin_list)

# Assert
assert cut.simData == arg_dataParser
assert cut.simData == arg_dataSource
assert sim.VehicleRepresentation.call_count == 1
assert sim.VehicleRepresentation.call_args_list[0].args == (fake_headers, fake_tests, arg_knowledge_rep_plugin_list)
assert sim.Agent.call_count == 1
Expand Down Expand Up @@ -222,7 +222,7 @@ def test_Simulator_run_sim_diagnose_is_not_performed_again_when_faults_are_conse
result = cut.run_sim(fake_IO_Flag)

# Assert
assert cut.simData.get_next.call_count == num_fake_steps
assert cut.simData.get_next.call_count == num_fake_steps
for i in range(num_fake_steps):
assert cut.simData.get_next.call_args_list[i].args == ()
assert cut.agent.reason.call_count == num_fake_steps
Expand Down

0 comments on commit b056993

Please sign in to comment.