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 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)
    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 _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 _create_parameter_value_for_parameter(self, parameters, parameter_dict_name, parameter_dict_value, group_id):
        """
        Create parameter value for a parameter
        :param parameters: the parameters list
        :param parameter_dict_name: the name of the parameter in the dictionary
        :param parameter_dict_value: the value in the dictionary
        :param group_id: group id
        :return: the parameter value
        """
        for parameter in parameters:
            if parameter_dict_name.lower() == parameter.name.lower():
                pv = ParameterValue()
                pv.parameter = parameter
                pv.group_id = group_id
                pv.value = parameter_dict_value
                return pv

        log.critical("Can not find matching parameter for %s" % parameter_dict_name)
        exit()