コード例 #1
0
ファイル: cli.py プロジェクト: CyanoAlert/xcube
    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
コード例 #2
0
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
コード例 #3
0
def get_input_processor(name: str):
    return get_obj_registry().get(name, type=InputProcessor)
コード例 #4
0
def register_input_processor(input_processor: InputProcessor):
    get_obj_registry().put(input_processor.name, input_processor, type=InputProcessor)
コード例 #5
0
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))
コード例 #6
0
def register_dataset_io(dataset_io: DatasetIO):
    # noinspection PyTypeChecker
    get_obj_registry().put(dataset_io.name, dataset_io, type=DatasetIO)
コード例 #7
0
ファイル: cli.py プロジェクト: CyanoAlert/xcube
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
コード例 #8
0
ファイル: test_objreg.py プロジェクト: CyanoAlert/xcube
 def test_get_obj_registry(self):
     self.assertIsInstance(get_obj_registry(), ObjRegistry)