def create_valid_post_values(self): self.new_driving_dataset = DrivingDataset() self.new_driving_dataset.name = "new_driving_dataset" self.new_driving_dataset.description = "description" self.new_driving_dataset.geographic_region = "geographic_region" self.new_driving_dataset.spatial_resolution = "spatial_resolution" self.new_driving_dataset.temporal_resolution = "temporal_resolution" self.new_driving_dataset.boundary_lat_north = 30 self.new_driving_dataset.boundary_lat_south = -30 self.new_driving_dataset.boundary_lon_east = 30 self.new_driving_dataset.boundary_lon_west = -30 self.new_driving_dataset.view_order_index = 1 self.new_driving_dataset.usage_order_index = 1 self.new_driving_dataset.is_restricted_to_admins = True self.new_driving_dataset.time_start = datetime.datetime(2010, 1, 1, 10, 00) self.new_driving_dataset.time_end = datetime.datetime(2010, 2, 1, 10, 00) self.drive_var = ['drive var 1', 'drive var 2'] jules_params = DrivingDatasetJulesParams( driving_dateset=self.new_driving_dataset, data_start="2010-01-01 10:00", data_end="2010-02-01 10:00", dataperiod=1800, drive_file="jules_param_drive_file", drive_var=self.drive_var, var_names=['name1', 'name2'], var_templates=['template1', 'template2'], var_interps=['interp1', 'interp2'], nx=10, ny=20, x_dim_name='jules_param_x_dim_name', y_dim_name='jules_param_y_dim_name', time_dim_name='jules_param_time_dim_name', latlon_file='latlon_file', latlon_lat_name='latlon_lat_name', latlon_lon_name='latlon_lon_name', land_frac_file='land_frac_file', land_frac_frac_name='land_frac_frac_name', frac_file='frac_file_file_name', frac_frac_dim_name='frac_frac_dim_name', frac_type_dim_name='frac_type_dim_name', soil_props_file='soil_props_file', extra_parameters={1: self.extra_parameter}, post_processing_script_id=0 ) valid_params = jules_params.create_values_dict({}) return valid_params
def create_driving_dataset(self, driving_dataset_id, results, locations, model_run_service, land_cover_service): """ Create a driving dataset object from a results dictionary :param driving_dataset_id: id of the driving dataset to edit (None for create new) :param locations: locations list to use :param results: the results :param model_run_service: model run service :param land_cover_service: land cover service :return: nothing """ with self.transaction_scope() as session: if driving_dataset_id is None: driving_dataset = DrivingDataset() session.add(driving_dataset) else: session\ .query(DrivingDatasetParameterValue)\ .filter(DrivingDatasetParameterValue.driving_dataset_id == driving_dataset_id)\ .delete() session\ .query(DrivingDatasetLocation)\ .filter(DrivingDatasetLocation.driving_dataset_id == driving_dataset_id)\ .delete() driving_dataset = self._get_driving_dataset_by_id_in_session(driving_dataset_id, session) driving_dataset_jules_params = DrivingDatasetJulesParams() driving_dataset_jules_params.update_driving_dataset_from_dict( driving_dataset, session, model_run_service, land_cover_service, results, locations)
for parameter_index in range(int(values["params_count"])): parameter_id = values.get("param-{}.id".format(str(parameter_index))) if str(parameter.id) == parameter_id: values["param_names"].append("{}::{}".format(parameter.namelist.name, parameter.name)) helpers.error_flash("Some of the values entered below are incorrect, please correct them") else: if id is None: driving_dataset = DrivingDataset() driving_dataset.is_restricted_to_admins = True c.regions = [] else: driving_dataset = self._dataset_service.get_driving_dataset_by_id(id) c.regions = self._landcover_service.get_land_cover_regions(id) jules_params = DrivingDatasetJulesParams() jules_params.set_from(driving_dataset, c.regions) values = jules_params.create_values_dict(c.namelist) c.masks = int(values['mask_count']) c.mask_can_be_deleted = [] for mask_index in range(c.masks): mask_id = values['region-{}.id'.format(mask_index)] c.mask_can_be_deleted.append(mask_id is None or mask_id == "") try: c.nvar = int(values['drive_nvars']) except (ValueError, KeyError): c.nvar = 0