def perform_task_chunking(self, parameters, task_id=None): """Chunk parameter sets into more manageable sizes Uses functions provided by the task model to create a group of parameter sets that make up the arg. Args: parameters: parameter stream containing all kwargs to load data Returns: parameters with a list of geographic and time ranges """ if parameters is None: return None task = TsmTask.objects.get(pk=task_id) if check_cancel_task(self, task): return dc = DataAccessApi(config=task.config_path) dates = dc.list_combined_acquisition_dates(**parameters) task_chunk_sizing = task.get_chunk_size() geographic_chunks = create_geographic_chunks( longitude=parameters['longitude'], latitude=parameters['latitude'], geographic_chunk_size=task_chunk_sizing['geographic']) time_chunks = create_time_chunks( dates, _reversed=task.get_reverse_time(), time_chunk_size=task_chunk_sizing['time']) logger.info("Time chunks: {}, Geo chunks: {}".format(len(time_chunks), len(geographic_chunks))) dc.close() if check_cancel_task(self, task): return task.update_status("WAIT", "Chunked parameter set.") return {'parameters': parameters, 'geographic_chunks': geographic_chunks, 'time_chunks': time_chunks}
def validate_parameters(parameters, task_id=None): """Validate parameters generated by the parameter parsing task All validation should be done here - are there data restrictions? Combinations that aren't allowed? etc. Returns: parameter dict with all keyword args required to load data. -or- updates the task with ERROR and a message, returning None """ task = WaterDetectionTask.objects.get(pk=task_id) dc = DataAccessApi(config=task.config_path) acquisitions = dc.list_combined_acquisition_dates(**parameters) if len(acquisitions) < 1: task.complete = True task.update_status("ERROR", "There are no acquistions for this parameter set.") return None task.update_status("WAIT", "Validated parameters.") if not dc.validate_measurements(parameters['products'][0], parameters['measurements']): task.complete = True task.update_status( "ERROR", "The provided Satellite model measurements aren't valid for the product. Please check the measurements listed in the {} model.". format(task.satellite.name)) return None dc.close() return parameters
def validate_parameters(parameters, task_id=None): """Validate parameters generated by the parameter parsing task All validation should be done here - are there data restrictions? Combinations that aren't allowed? etc. Returns: parameter dict with all keyword args required to load data. -or- updates the task with ERROR and a message, returning None """ task = WaterDetectionTask.objects.get(pk=task_id) dc = DataAccessApi(config=task.config_path) acquisitions = dc.list_combined_acquisition_dates(**parameters) if len(acquisitions) < 1: task.complete = True task.update_status("ERROR", "There are no acquistions for this parameter set.") return None task.update_status("WAIT", "Validated parameters.") if not dc.validate_measurements(parameters['products'][0], parameters['measurements']): parameters['measurements'] = [ 'blue', 'green', 'red', 'nir', 'swir1', 'swir2', 'pixel_qa' ] dc.close() return parameters
def validate_parameters(self, parameters, task_id=None): """Validate parameters generated by the parameter parsing task All validation should be done here - are there data restrictions? Combinations that aren't allowed? etc. Returns: parameter dict with all keyword args required to load data. -or- updates the task with ERROR and a message, returning None """ task = CustomMosaicToolTask.objects.get(pk=task_id) if check_cancel_task(self, task): return logger.info(f"task.config_path: {task.config_path}") dc = DataAccessApi(config=task.config_path) #validate for any number of criteria here - num acquisitions, etc. acquisitions = dc.list_combined_acquisition_dates(**parameters) if len(acquisitions) < 1: task.complete = True task.update_status("ERROR", "There are no acquistions for this parameter set.") return None if task.animated_product.animation_id != "none" and not task.compositor.is_iterative( ): task.complete = True task.update_status( "ERROR", "Animations cannot be generated for median pixel operations.") return None if not (task.compositor.is_iterative() or task.pixel_drill_task) and ( task.time_end - task.time_start).days > 367: task.complete = True task.update_status( "ERROR", "Median pixel operations are only supported for single year time periods." ) return None if check_cancel_task(self, task): return task.update_status("WAIT", "Validated parameters.") if not dc.validate_measurements(parameters['products'][0], parameters['measurements']): task.complete = True task.update_status( "ERROR", "The provided Satellite model measurements aren't valid for the product. Please check the measurements listed in the {} model." .format(task.satellite.name)) return None dc.close() return parameters
def validate_parameters(parameters, task_id=None): """Validate parameters generated by the parameter parsing task All validation should be done here - are there data restrictions? Combinations that aren't allowed? etc. Returns: parameter dict with all keyword args required to load data. -or- updates the task with ERROR and a message, returning None """ task = CustomMosaicToolTask.objects.get(pk=task_id) dc = DataAccessApi(config=task.config_path) #validate for any number of criteria here - num acquisitions, etc. acquisitions = dc.list_combined_acquisition_dates(**parameters) if len(acquisitions) < 1: task.complete = True task.update_status("ERROR", "There are no acquistions for this parameter set.") return None if task.animated_product.animation_id != "none" and not task.compositor.is_iterative( ): task.complete = True task.update_status( "ERROR", "Animations cannot be generated for median pixel operations.") return None if not task.compositor.is_iterative() and (task.time_end - task.time_start).days > 367: task.complete = True task.update_status( "ERROR", "Median pixel operations are only supported for single year time periods." ) return None task.update_status("WAIT", "Validated parameters.") if not dc.validate_measurements(parameters['products'][0], parameters['measurements']): parameters['measurements'] = [ 'blue', 'green', 'red', 'nir', 'swir1', 'swir2', 'pixel_qa' ] dc.close() return parameters
def validate_parameters(parameters, task_id=None): """Validate parameters generated by the parameter parsing task All validation should be done here - are there data restrictions? Combinations that aren't allowed? etc. Returns: parameter dict with all keyword args required to load data. -or- updates the task with ERROR and a message, returning None """ task = AppNameTask.objects.get(pk=task_id) dc = DataAccessApi(config=task.config_path) #validate for any number of criteria here - num acquisitions, etc. # TODO: if this is not a multisensory app, replace list_combined_acquisition_dates with list_acquisition_dates acquisitions = dc.list_combined_acquisition_dates(**parameters) # TODO: are there any additional validations that need to be done here? if len(acquisitions) < 1: task.complete = True task.update_status("ERROR", "There are no acquistions for this parameter set.") return None if task.animated_product.animation_id != "none" and not task.compositor.is_iterative( ): task.complete = True task.update_status( "ERROR", "Animations cannot be generated for median pixel operations.") return None task.update_status("WAIT", "Validated parameters.") # TODO: Check that the measurements exist - replace ['products'][0] with ['products'] if this is not a multisensory app. if not dc.validate_measurements(parameters['products'][0], parameters['measurements']): task.complete = True task.update_status( "ERROR", "The provided Satellite model measurements aren't valid for the product. Please check the measurements listed in the {} model." .format(task.satellite.name)) return None dc.close() return parameters