def format_help(self): # noinspection PyUnresolvedReferences help_text = super().format_help() input_processors = get_obj_registry().get_all(type=InputProcessor) output_writers = query_dataset_io(lambda ds_io: 'w' in ds_io.modes) help_text += '\ninput processors to be used with option --proc:\n' help_text += self._format_input_processors(input_processors) help_text += '\noutput formats to be used with option --writer:\n' help_text += self._format_dataset_ios(output_writers) help_text += '\n' return help_text
def find_dataset_io(format_name: str, modes: Iterable[str] = None, default: DatasetIO = None) -> Optional[DatasetIO]: modes = set(modes) if modes else None format_name = format_name.lower() dataset_ios = get_obj_registry().get_all(type=DatasetIO) for dataset_io in dataset_ios: # noinspection PyUnresolvedReferences if format_name == dataset_io.name.lower(): # noinspection PyTypeChecker if not modes or modes.issubset(dataset_io.modes): return dataset_io for dataset_io in dataset_ios: # noinspection PyUnresolvedReferences if format_name == dataset_io.ext.lower(): # noinspection PyTypeChecker if not modes or modes.issubset(dataset_io.modes): return dataset_io return default
def get_input_processor(name: str): return get_obj_registry().get(name, type=InputProcessor)
def register_input_processor(input_processor: InputProcessor): get_obj_registry().put(input_processor.name, input_processor, type=InputProcessor)
def query_dataset_io( filter_fn: Callable[[DatasetIO], bool] = None) -> List[DatasetIO]: dataset_ios = get_obj_registry().get_all(type=DatasetIO) if filter_fn is None: return dataset_ios return list(filter(filter_fn, dataset_ios))
def register_dataset_io(dataset_io: DatasetIO): # noinspection PyTypeChecker get_obj_registry().put(dataset_io.name, dataset_io, type=DatasetIO)
def main(args: Optional[List[str]] = None): """ Generate L2C data cubes from L2 data products. """ input_processor_names = [input_processor.name for input_processor in get_obj_registry().get_all(type=InputProcessor)] output_writer_names = [ds_io.name for ds_io in query_dataset_io(lambda ds_io: 'w' in ds_io.modes)] resampling_algs = NAME_TO_GDAL_RESAMPLE_ALG.keys() parser = argparse.ArgumentParser(description='Generate or extend a Level-2C data cube from Level-2 input files. ' 'Level-2C data cubes may be created in one go or in successively ' 'in append mode, input by input.', formatter_class=GenL2CHelpFormatter) parser.add_argument('--version', '-V', action='version', version=version) parser.add_argument('--proc', '-p', dest='input_processor', choices=input_processor_names, help=f'Input processor type name.') parser.add_argument('--config', '-c', dest='config_file', help='Data cube configuration file in YAML format.') parser.add_argument('--dir', '-d', dest='output_dir', help=f'Output directory. Defaults to {DEFAULT_OUTPUT_DIR!r}') parser.add_argument('--name', '-n', dest='output_name', help=f'Output filename pattern. Defaults to {DEFAULT_OUTPUT_NAME!r}.') parser.add_argument('--writer', '-w', dest='output_writer', choices=output_writer_names, help=f'Output writer type name. Defaults to {DEFAULT_OUTPUT_WRITER!r}.') parser.add_argument('--size', '-s', dest='output_size', help='Output size in pixels using format "<width>,<height>".') parser.add_argument('--region', '-r', dest='output_region', help='Output region using format "<lon-min>,<lat-min>,<lon-max>,<lat-max>"') parser.add_argument('--vars', '-v', dest='output_variables', help='Variables to be included in output. ' 'Comma-separated list of names which may contain wildcard characters "*" and "?".') parser.add_argument('--resamp', dest='output_resampling', choices=resampling_algs, help='Fallback spatial resampling algorithm to be used for all variables.' f'Defaults to {DEFAULT_OUTPUT_RESAMPLING!r}.') parser.add_argument('--traceback', dest='traceback_mode', default=False, action='store_true', help='On error, print Python traceback.') parser.add_argument('--append', '-a', dest='append_mode', default=False, action='store_true', help='Append successive outputs.') parser.add_argument('--dry-run', default=False, action='store_true', help='Just read and process inputs, but don\'t produce any outputs.') parser.add_argument('input_files', metavar='INPUT_FILES', nargs='+', help="One or more input files or a pattern that may contain wildcards '?', '*', and '**'.") try: arg_obj = parser.parse_args(args or sys.argv[1:]) except SystemExit as e: return int(str(e)) traceback_mode = arg_obj.traceback_mode append_mode = arg_obj.append_mode dry_run = arg_obj.dry_run try: config = get_config_dict(arg_obj, open) except ValueError as e: return _handle_error(e, traceback_mode) # noinspection PyBroadException try: generate_l2c_cube(append_mode=append_mode, dry_run=dry_run, monitor=print, **config) except Exception as e: return _handle_error(e, traceback_mode) return 0
def test_get_obj_registry(self): self.assertIsInstance(get_obj_registry(), ObjRegistry)