def setUp(self): super(TestModelRunOutput, self).setUp() self.clean_database() self.user = self.login() self.valid_params = { 'submit': u'Next', 'ov_select_1': 1, 'ov_yearly_1': 1, 'ov_monthly_1': 1, 'ov_select_2': 1, 'ov_hourly_2': 1, 'ov_daily_2': 1, 'ov_select_3': 1, 'ov_monthly_3': 1 } self.model_run_service = ModelRunService() param_run_start = self.model_run_service.get_parameter_by_constant(JULES_PARAM_RUN_START) param_run_end = self.model_run_service.get_parameter_by_constant(JULES_PARAM_RUN_END) with session_scope(Session) as session: self.model_run = self.model_run_service._create_new_model_run(session, self.user) self.model_run.name = "MR1" pv_run_start = ParameterValue() pv_run_start.parameter_id = param_run_start.id pv_run_start.value = "'1901-01-01 00:00:00'" pv_run_end = ParameterValue() pv_run_end.parameter_id = param_run_end.id pv_run_end.value = "'1902-01-01 00:00:00'" self.model_run.parameter_values = [pv_run_start, pv_run_end] session.add(self.model_run)
def test_GIVEN_model_with_parameters_WHEN_get_parameter_value_THEN_parameter_value_returned(self): with session_scope(Session) as session: user = User() user.name = 'user1' session.add(user) session.commit() param = session.query(Parameter).first() param_id = param.id param_name = param.name param_namelist = param.namelist.name model_run = ModelRun() model_run.name = "MR1" model_run.user_id = user.id model_run.status = self._status(constants.MODEL_RUN_STATUS_CREATED) session.add(model_run) session.commit() parameter1 = ParameterValue() parameter1.parameter_id = param_id parameter1.set_value_from_python("param1 value") parameter1.model_run_id = model_run.id session.add(parameter1) model_run_returned = self.model_run_service.get_model_being_created_with_non_default_parameter_values(user) param_value_returned = model_run_returned.get_python_parameter_value([param_namelist, param_name]) assert_that(param_value_returned, is_("param1 value"))
def test_GIVEN_model_run_has_parameters_WHEN_get_model_run_by_id_THEN_model_run_has_parameter_values_loaded(self): # Add a user and give them a model user = self.login() model_run = self.create_run_model(0, "MR1", user) with session_scope(Session) as session: # Add parameter value parameter_value = ParameterValue() parameter_value.parameter_id = 1 parameter_value.set_value_from_python(123) parameter = Parameter() parameter.name = "Param" parameter.parameter_values = [parameter_value] # Give them a model model_run = session.query(ModelRun).filter(ModelRun.id == model_run.id).one() model_run.parameter_values = [parameter_value] session.add(model_run) with session_scope(Session) as session: model_run_id = session.query(ModelRun).filter(ModelRun.name == model_run.name).one().id # Get the users model runs model_run_returned = self.model_run_service.get_model_by_id(user, model_run_id) pv = model_run_returned.parameter_values[0] assert_that(pv.value, is_('123')) assert_that(pv.parameter.name, is_("Param"))
def _create_uploaded_driving_dataset(self, start_date, end_date, lat, lon, model_run_service): class UploadedDrivingDataset(object): """ An uploaded driving dataset """ def __init__(self): self.id = DatasetService().get_id_for_user_upload_driving_dataset() self.driving_data_lat = None self.driving_data_lon = None self.driving_data_rows = None self.parameter_values = [] driving_dataset = UploadedDrivingDataset() driving_dataset.driving_data_lat = lat driving_dataset.driving_data_lon = lon driving_dataset.driving_data_rows = self.n_lines driving_dataset.parameter_values = [] params_to_save = [[constants.JULES_PARAM_DRIVE_DATA_START, start_date], [constants.JULES_PARAM_DRIVE_DATA_END, end_date], [constants.JULES_PARAM_DRIVE_DATA_PERIOD, self.period], [constants.JULES_PARAM_DRIVE_FILE, constants.USER_UPLOAD_FILE_NAME], [constants.JULES_PARAM_DRIVE_NVARS, len(self.var_list or [])], [constants.JULES_PARAM_DRIVE_VAR, self.var_list], [constants.JULES_PARAM_DRIVE_INTERP, self.interp_list], [constants.JULES_PARAM_LATLON_LATITUDE, lat], [constants.JULES_PARAM_LATLON_LONGITUDE, lon], [constants.JULES_PARAM_FRAC_FILE, constants.FRACTIONAL_FILENAME]] for param in params_to_save: parameter = model_run_service.get_parameter_by_constant(param[0]) param_val = ParameterValue() param_val.set_value_from_python(param[1]) param_val.parameter_id = parameter.id driving_dataset.parameter_values.append(param_val) user_upload_id = self.dataset_service.get_id_for_user_upload_driving_dataset() ds = self.dataset_service.get_driving_dataset_by_id(user_upload_id) for pv in ds.parameter_values: parameter_value = ParameterValue() parameter_value.parameter_id = pv.parameter_id parameter_value.value = pv.value driving_dataset.parameter_values.append(parameter_value) return driving_dataset
def set_up_single_cell_user_driving_data(self): self.clean_database() del self.driving_data self.user = self.login() user_upload_id = DatasetService().get_id_for_user_upload_driving_dataset() with session_scope(Session) as session: self.model_run = ModelRun() self.model_run.name = "MR1" self.model_run.status = self._status(MODEL_RUN_STATUS_CREATED) self.model_run.driving_dataset_id = user_upload_id self.model_run.user = self.user self.model_run.driving_data_lat = 25 self.model_run.driving_data_lon = 40 self.model_run.driving_data_rows = 248 self.model_run.science_configuration_id = 2 param1 = self.model_run_service.get_parameter_by_constant(JULES_PARAM_DRIVE_INTERP) pv1 = ParameterValue() pv1.parameter_id = param1.id pv1.set_value_from_python(8 * ['nf']) param2 = self.model_run_service.get_parameter_by_constant(JULES_PARAM_DRIVE_DATA_PERIOD) pv2 = ParameterValue() pv2.parameter_id = param2.id pv2.set_value_from_python(60 * 60) param3 = self.model_run_service.get_parameter_by_constant(JULES_PARAM_DRIVE_DATA_START) pv3 = ParameterValue() pv3.parameter_id = param3.id pv3.value = "'1901-01-01 00:00:00'" param4 = self.model_run_service.get_parameter_by_constant(JULES_PARAM_DRIVE_DATA_END) pv4 = ParameterValue() pv4.parameter_id = param4.id pv4.value = "'1901-01-31 21:00:00'" self.model_run.parameter_values = [pv1, pv2, pv3, pv4] session.add(self.model_run)
def _copy_parameter_set_into_model(self, parameter_values, model_run, session): """ Copy the parameters into a model :param parameter_values: the values to copy :param model_run: the model run to copy them to :param session: the session to use :return: nothing """ for parameter_value in parameter_values: val = ParameterValue() val.value = parameter_value.value val.parameter_id = parameter_value.parameter_id val.model_run = model_run session.add(val)
def setUp(self): super(TestModelRunExtents, self).setUp() self.clean_database() self.user = self.login() self.model_run_service = ModelRunService() with session_scope(Session) as session: self.driving_data = DrivingDataset() self.driving_data.name = "d1" self.driving_data.boundary_lat_north = 47.5 self.driving_data.boundary_lat_south = 13.8 self.driving_data.boundary_lon_east = 123.1 self.driving_data.boundary_lon_west = -15.0 self.driving_data.time_start = datetime.datetime(1901, 1, 1, 0, 0, 0) self.driving_data.time_end = datetime.datetime(2001, 1, 1, 0, 0, 0) session.add(self.driving_data) session.commit() self.model_run = ModelRun() self.model_run.name = "MR1" self.model_run.status = self._status(MODEL_RUN_STATUS_CREATED) self.model_run.driving_dataset_id = self.driving_data.id self.model_run.user = self.user self.model_run.science_configuration_id = 2 param1 = self.model_run_service.get_parameter_by_constant(JULES_PARAM_DRIVE_INTERP) pv1 = ParameterValue() pv1.parameter_id = param1.id pv1.set_value_from_python(8 * ['nf']) param2 = self.model_run_service.get_parameter_by_constant(JULES_PARAM_DRIVE_DATA_PERIOD) pv2 = ParameterValue() pv2.parameter_id = param2.id pv2.set_value_from_python(60 * 60) self.model_run.parameter_values = [pv1, pv2] session.add(self.model_run)
def set_up_single_cell_model_run(self): self.clean_database() self.user = self.login() self.create_two_driving_datasets() user_upload_id = DatasetService().get_id_for_user_upload_driving_dataset() with session_scope(Session) as session: self.model_run = ModelRun() self.model_run.name = "MR1" self.model_run.status = self._status(MODEL_RUN_STATUS_CREATED) self.model_run.driving_dataset_id = user_upload_id self.model_run.user = self.user self.model_run.driving_data_lat = 51.75 self.model_run.driving_data_lon = -0.25 self.model_run.driving_data_rows = 248 param1 = self.model_run_service.get_parameter_by_constant(JULES_PARAM_DRIVE_INTERP) pv1 = ParameterValue() pv1.parameter_id = param1.id pv1.set_value_from_python(8 * ['nf']) param2 = self.model_run_service.get_parameter_by_constant(JULES_PARAM_DRIVE_DATA_PERIOD) pv2 = ParameterValue() pv2.parameter_id = param2.id pv2.set_value_from_python(60 * 60) param3 = self.model_run_service.get_parameter_by_constant(JULES_PARAM_DRIVE_DATA_START) pv3 = ParameterValue() pv3.parameter_id = param3.id pv3.value = "'1901-01-01 00:00:00'" param4 = self.model_run_service.get_parameter_by_constant(JULES_PARAM_DRIVE_DATA_END) pv4 = ParameterValue() pv4.parameter_id = param4.id pv4.value = "'1901-01-31 21:00:00'" param5 = self.model_run_service.get_parameter_by_constant(JULES_PARAM_LATLON_REGION) pv5 = ParameterValue() pv5.parameter_id = param5.id pv5.value = ".false." param6 = self.model_run_service.get_parameter_by_constant(JULES_PARAM_POINTS_FILE) pv6 = ParameterValue() pv6.parameter_id = param6.id pv6.value = "51.75 -0.25" self.model_run.parameter_values = [pv1, pv2, pv3, pv4, pv5, pv6] session.add(self.model_run)