def __call__(self, filenames=None, sensor=None, reader=None): reader_instances = {} if not filenames and sensor is None and reader is None: # we weren't given anything to search through LOG.info("Not enough information provided to find readers.") return reader_instances if reader is not None: # given a config filename or reader name if not reader.endswith(".yaml") and not reader.endswith(".cfg"): reader += ".yaml" config_files = [reader] else: config_files = set(self.config_files()) # FUTURE: Allow for a reader instance to be passed remaining_filenames = set(filenames) if filenames is not None else None for config_file in config_files: config_basename = os.path.basename(config_file) reader_configs = config_search_paths( os.path.join("readers", config_basename), self.ppp_config_dir) if not reader_configs: LOG.warning("No reader configs found for '%s'", reader) continue try: reader_info = self._read_reader_config(reader_configs) except (MalformedConfigError, yaml.YAMLError) as err: LOG.info('Cannot use %s', str(reader_configs)) LOG.debug(str(err)) continue try: reader_instance = reader_info['reader']( config_files=reader_configs, start_time=self.start_time, end_time=self.end_time, area=self.area, ) except KeyError as err: LOG.info('Cannot use %s', str(reader_configs)) LOG.debug(str(err)) continue remaining_filenames, loadable_files = reader_instance.select_files( self.base_dir, remaining_filenames, sensor) if loadable_files and reader_instance: reader_instances[reader_instance.name] = reader_instance if filenames is not None and not remaining_filenames: # we were given filenames to look through and found a reader # for all of them break if remaining_filenames: LOG.warning( "Don't know how to open the following files: {}".format( str(remaining_filenames))) if not reader_instances: raise ValueError("No supported files found") return reader_instances
def __init__(self, ppp_config_dir=None, default_config_filename=None, config_files=None, **kwargs): """Load configuration files related to this plugin. This initializes a `self.config` dictionary that can be used to customize the subclass. Args: ppp_config_dir (str): Base "etc" directory for all configuration files. default_config_filename (str): Configuration filename to use if no other files have been specified with `config_files`. config_files (list or str): Configuration files to load instead of those automatically found in `ppp_config_dir` and other default configuration locations. kwargs (dict): Unused keyword arguments. """ self.ppp_config_dir = ppp_config_dir or get_environ_config_dir() self.default_config_filename = default_config_filename self.config_files = config_files if self.config_files is None and self.default_config_filename is not None: # Specify a default self.config_files = config_search_paths( self.default_config_filename, self.ppp_config_dir) if not isinstance(self.config_files, (list, tuple)): self.config_files = [self.config_files] self.config = {} if self.config_files: for config_file in self.config_files: self.load_yaml_config(config_file)
def configs_for_reader(reader=None, ppp_config_dir=None): """Generator of reader configuration files for one or more readers Args: reader (Optional[str]): Yield configs only for this reader ppp_config_dir (Optional[str]): Additional configuration directory to search for reader configuration files. Returns: Generator of lists of configuration files """ search_paths = (ppp_config_dir,) if ppp_config_dir else tuple() if reader is not None: if not isinstance(reader, (list, tuple)): reader = [reader] # given a config filename or reader name config_files = [r if r.endswith('.yaml') else r + '.yaml' for r in reader] else: reader_configs = glob_config(os.path.join('readers', '*.yaml'), *search_paths) config_files = set(reader_configs) for config_file in config_files: config_basename = os.path.basename(config_file) reader_configs = config_search_paths( os.path.join("readers", config_basename), *search_paths) if not reader_configs: LOG.warning("No reader configs found for '%s'", reader) continue yield reader_configs
def configs_for_writer(writer=None, ppp_config_dir=None): """Generate writer configuration files for one or more writers. Args: writer (Optional[str]): Yield configs only for this writer ppp_config_dir (Optional[str]): Additional configuration directory to search for writer configuration files. Returns: Generator of lists of configuration files """ search_paths = (ppp_config_dir, ) if ppp_config_dir else tuple() if writer is not None: if not isinstance(writer, (list, tuple)): writer = [writer] # given a config filename or writer name config_files = [ w if w.endswith('.yaml') else w + '.yaml' for w in writer ] else: writer_configs = glob_config(os.path.join('writers', '*.yaml'), *search_paths) config_files = set(writer_configs) for config_file in config_files: config_basename = os.path.basename(config_file) writer_configs = config_search_paths( os.path.join("writers", config_basename), *search_paths) if not writer_configs: LOG.warning("No writer configs found for '%s'", writer) continue yield writer_configs
def configs_for_reader(reader=None, ppp_config_dir=None): """Generator of reader configuration files for one or more readers Args: reader (Optional[str]): Yield configs only for this reader ppp_config_dir (Optional[str]): Additional configuration directory to search for reader configuration files. Returns: Generator of lists of configuration files """ search_paths = (ppp_config_dir, ) if ppp_config_dir else tuple() if reader is not None: if not isinstance(reader, (list, tuple)): reader = [reader] # given a config filename or reader name config_files = [ r if r.endswith('.yaml') else r + '.yaml' for r in reader ] else: reader_configs = glob_config(os.path.join('readers', '*.yaml'), *search_paths) config_files = set(reader_configs) for config_file in config_files: config_basename = os.path.basename(config_file) reader_configs = config_search_paths( os.path.join("readers", config_basename), *search_paths) if not reader_configs: LOG.warning("No reader configs found for '%s'", reader) continue yield reader_configs
def configs_for_reader(reader=None, ppp_config_dir=None): """Generator of reader configuration files for one or more readers Args: reader (Optional[str]): Yield configs only for this reader ppp_config_dir (Optional[str]): Additional configuration directory to search for reader configuration files. Returns: Generator of lists of configuration files """ search_paths = (ppp_config_dir, ) if ppp_config_dir else tuple() if reader is not None: if not isinstance(reader, (list, tuple)): reader = [reader] # given a config filename or reader name config_files = [ r if r.endswith('.yaml') else r + '.yaml' for r in reader ] else: reader_configs = glob_config(os.path.join('readers', '*.yaml'), *search_paths) config_files = set(reader_configs) for config_file in config_files: config_basename = os.path.basename(config_file) reader_configs = config_search_paths( os.path.join("readers", config_basename), *search_paths) if not reader_configs: # either the reader they asked for does not exist # or satpy is improperly configured and can't find its own readers raise ValueError("No reader(s) named: {}".format(reader)) yield reader_configs
def __init__(self, ppp_config_dir=None, enhancement_config_file=None): """ Args: ppp_config_dir: Points to the base configuration directory enhancement_config_file: The enhancement configuration to apply, False to leave as is. """ self.ppp_config_dir = ppp_config_dir or get_environ_config_dir() self.enhancement_config_file = enhancement_config_file # Set enhancement_config_file to False for no enhancements if self.enhancement_config_file is None: # it wasn't specified in the config or in the kwargs, we should # provide a default config_fn = os.path.join("enhancements", "generic.cfg") self.enhancement_config_file = config_search_paths( config_fn, self.ppp_config_dir) if not isinstance(self.enhancement_config_file, (list, tuple)): self.enhancement_config_file = [self.enhancement_config_file] if self.enhancement_config_file: self.enhancement_tree = EnhancementDecisionTree( *self.enhancement_config_file) else: # They don't want any automatic enhancements self.enhancement_tree = None self.sensor_enhancement_configs = []
def __init__(self, ppp_config_dir=None, enhancement_config_file=None): """Initialize an Enhancer instance. Args: ppp_config_dir: Points to the base configuration directory enhancement_config_file: The enhancement configuration to apply, False to leave as is. """ self.ppp_config_dir = ppp_config_dir or get_environ_config_dir() self.enhancement_config_file = enhancement_config_file # Set enhancement_config_file to False for no enhancements if self.enhancement_config_file is None: # it wasn't specified in the config or in the kwargs, we should # provide a default config_fn = os.path.join("enhancements", "generic.yaml") self.enhancement_config_file = config_search_paths( config_fn, self.ppp_config_dir) if not self.enhancement_config_file: # They don't want any automatic enhancements self.enhancement_tree = None else: if not isinstance(self.enhancement_config_file, (list, tuple)): self.enhancement_config_file = [self.enhancement_config_file] self.enhancement_tree = EnhancementDecisionTree( *self.enhancement_config_file) self.sensor_enhancement_configs = []
def configs_for_writer(writer=None, ppp_config_dir=None): """Generator of writer configuration files for one or more writers Args: writer (Optional[str]): Yield configs only for this writer ppp_config_dir (Optional[str]): Additional configuration directory to search for writer configuration files. Returns: Generator of lists of configuration files """ search_paths = (ppp_config_dir,) if ppp_config_dir else tuple() if writer is not None: if not isinstance(writer, (list, tuple)): writer = [writer] # given a config filename or writer name config_files = [w if w.endswith('.yaml') else w + '.yaml' for w in writer] else: writer_configs = glob_config(os.path.join('writers', '*.yaml'), *search_paths) config_files = set(writer_configs) for config_file in config_files: config_basename = os.path.basename(config_file) writer_configs = config_search_paths( os.path.join("writers", config_basename), *search_paths) if not writer_configs: LOG.warning("No writer configs found for '%s'", writer) continue yield writer_configs
def setUp(self): """Wrap file handler with own fake file handler""" from satpy.config import config_search_paths from satpy.readers.viirs_edr_active_fires import VIIRSActiveFiresTextFileHandler self.reader_configs = config_search_paths(os.path.join('readers', self.yaml_file)) self.p = mock.patch.object(VIIRSActiveFiresTextFileHandler, '__bases__', (FakeImgFiresTextFileHandler,)) self.fake_handler = self.p.start() self.p.is_local = True
def setUp(self): """Wrap HDF4 file handler with own fake file handler.""" from satpy.config import config_search_paths from satpy.readers.viirs_edr_flood import VIIRSEDRFlood self.reader_configs = config_search_paths(os.path.join('readers', self.yaml_file)) self.p = mock.patch.object(VIIRSEDRFlood, '__bases__', (FakeHDF4FileHandler2,)) self.fake_handler = self.p.start() self.p.is_local = True
def setUp(self): """Wrap HDF4 file handler with own fake file handler.""" from satpy.config import config_search_paths from satpy.readers.seviri_l1b_icare import SEVIRI_ICARE self.reader_configs = config_search_paths(os.path.join('readers', self.yaml_file)) self.p = mock.patch.object(SEVIRI_ICARE, '__bases__', (FakeHDF4FileHandler2,)) self.fake_handler = self.p.start() self.p.is_local = True
def setUp(self): """Wrap HDF5 file handler with our own fake handler.""" from satpy.readers.hy2_scat_l2b_h5 import HY2SCATL2BH5FileHandler from satpy.config import config_search_paths self.reader_configs = config_search_paths(os.path.join('readers', self.yaml_file)) # http://stackoverflow.com/questions/12219967/how-to-mock-a-base-class-with-python-mock-library self.p = mock.patch.object(HY2SCATL2BH5FileHandler, '__bases__', (FakeHDF5FileHandler2,)) self.fake_handler = self.p.start() self.p.is_local = True
def fixture_reader(): """Return MVIRI FIDUCEO FCDR reader.""" from satpy.config import config_search_paths from satpy.readers import load_reader reader_configs = config_search_paths( os.path.join("readers", "mviri_l1b_fiduceo_nc.yaml")) reader = load_reader(reader_configs) return reader
def reader(): """Return reader for CMSAF CLAAS-2.""" from satpy.config import config_search_paths from satpy.readers import load_reader reader_configs = config_search_paths( os.path.join("readers", "cmsaf-claas2_l2_nc.yaml")) reader = load_reader(reader_configs) return reader
def setUp(self): """Wrap HDF5 file handler with our own fake handler""" from satpy.config import config_search_paths from satpy.readers.viirs_sdr import VIIRSSDRFileHandler self.reader_configs = config_search_paths(os.path.join('readers', self.yaml_file)) # http://stackoverflow.com/questions/12219967/how-to-mock-a-base-class-with-python-mock-library self.p = mock.patch.object(VIIRSSDRFileHandler, '__bases__', (FakeHDF5FileHandlerAggr,)) self.fake_handler = self.p.start() self.p.is_local = True
def setUp(self): """Wrap NetCDF4 file handler with our own fake handler""" from satpy.config import config_search_paths from satpy.readers.nucaps import NUCAPSFileHandler self.reader_configs = config_search_paths(os.path.join('readers', self.yaml_file)) # http://stackoverflow.com/questions/12219967/how-to-mock-a-base-class-with-python-mock-library self.p = mock.patch.object(NUCAPSFileHandler, '__bases__', (FakeNetCDF4FileHandler2,)) self.fake_handler = self.p.start() self.p.is_local = True
def setUp(self): """Wrap HDF4 file handler with our own fake handler""" from satpy.config import config_search_paths from satpy.readers.clavrx import CLAVRXFileHandler self.reader_configs = config_search_paths(os.path.join('readers', self.yaml_file)) # http://stackoverflow.com/questions/12219967/how-to-mock-a-base-class-with-python-mock-library self.p = mock.patch.object(CLAVRXFileHandler, '__bases__', (FakeHDF4FileHandler2,)) self.fake_handler = self.p.start() self.p.is_local = True
def get_area_file(): """Find area file(s) to use. The files are to be named `areas.yaml` or `areas.def`. """ paths = config_search_paths('areas.yaml') if paths: return paths else: return get_config_path('areas.def')
def configs_for_reader(reader=None, ppp_config_dir=None): """Generator of reader configuration files for one or more readers Args: reader (Optional[str]): Yield configs only for this reader ppp_config_dir (Optional[str]): Additional configuration directory to search for reader configuration files. Returns: Generator of lists of configuration files """ search_paths = (ppp_config_dir, ) if ppp_config_dir else tuple() if reader is not None: if not isinstance(reader, (list, tuple)): reader = [reader] # check for old reader names new_readers = [] for reader_name in reader: if reader_name.endswith( '.yaml') or reader_name not in OLD_READER_NAMES: new_readers.append(reader_name) continue new_name = OLD_READER_NAMES[reader_name] # SatPy 0.11 only displays a warning warnings.warn( "Reader name '{}' has been deprecated, use '{}' instead.". format(reader_name, new_name), DeprecationWarning) # SatPy 0.12 will raise an exception # raise ValueError("Reader name '{}' has been deprecated, use '{}' instead.".format(reader_name, new_name)) # SatPy 0.13 or 1.0, remove exception and mapping new_readers.append(new_name) reader = new_readers # given a config filename or reader name config_files = [ r if r.endswith('.yaml') else r + '.yaml' for r in reader ] else: reader_configs = glob_config(os.path.join('readers', '*.yaml'), *search_paths) config_files = set(reader_configs) for config_file in config_files: config_basename = os.path.basename(config_file) reader_configs = config_search_paths( os.path.join("readers", config_basename), *search_paths) if not reader_configs: # either the reader they asked for does not exist # or satpy is improperly configured and can't find its own readers raise ValueError("No reader(s) named: {}".format(reader)) yield reader_configs
def setUp(self): """Wrap pygrib to read fake data""" from satpy.config import config_search_paths self.reader_configs = config_search_paths(os.path.join('readers', self.yaml_file)) try: import pygrib except ImportError: pygrib = None self.orig_pygrib = pygrib sys.modules['pygrib'] = mock.MagicMock()
def setup_method(self): """Wrap pygrib to read fake data.""" from satpy.config import config_search_paths self.reader_configs = config_search_paths(os.path.join('readers', self.yaml_file)) try: import pygrib except ImportError: pygrib = None self.orig_pygrib = pygrib sys.modules['pygrib'] = mock.MagicMock()
def load_sensor_composites(self, sensor_name): """Load all compositor configs for the provided sensor.""" config_filename = sensor_name + ".yaml" LOG.debug("Looking for composites config file %s", config_filename) composite_configs = config_search_paths( os.path.join("composites", config_filename), self.ppp_config_dir, check_exists=True) if not composite_configs: LOG.debug("No composite config found called {}".format( config_filename)) return self._load_config(composite_configs)
def get_sensor_enhancement_config(self, sensor): if isinstance(sensor, str): # one single sensor sensor = [sensor] for sensor_name in sensor: config_fn = os.path.join("enhancements", sensor_name + ".yaml") config_files = config_search_paths(config_fn, self.ppp_config_dir) # Note: Enhancement configuration files can't overwrite individual # options, only entire sections are overwritten for config_file in config_files: yield config_file
def get_sensor_enhancement_config(self, sensor): if isinstance(sensor, str): # one single sensor sensor = [sensor] for sensor_name in sensor: config_fn = os.path.join("enhancements", sensor_name + ".cfg") config_files = config_search_paths(config_fn, self.ppp_config_dir) # Note: Enhancement configuration files can't overwrite individual # options, only entire sections are overwritten for config_file in config_files: yield config_file
def load_sensor_composites(self, sensor_names): config_filenames = [sensor_name + ".yaml" for sensor_name in sensor_names] for config_filename in config_filenames: LOG.debug("Looking for composites config file %s", config_filename) composite_configs = config_search_paths( os.path.join("composites", config_filename), self.ppp_config_dir) if not composite_configs: LOG.debug("No composite config found called %s", config_filename) continue self._load_config(composite_configs)
def setUp(self, xr_): """Create a fake reader to test.""" from satpy.readers import load_reader from satpy.config import config_search_paths self.reader_configs = config_search_paths(os.path.join('readers', self.yaml_file)) fake_dataset = setup_fake_dataset() xr_.open_dataset.return_value = fake_dataset r = load_reader(self.reader_configs) loadables = r.select_files_from_pathnames([ 'OR_GLM-L2-GLMC-M3_G16_s20192862159000_e20192862200000_c20192862200350.nc', ]) self.assertTrue(len(loadables), 1) r.create_filehandlers(loadables) self.reader = r
def setUp(self): """Wrap NetCDF4 FileHandler with our own fake handler """ # implementation strongly inspired by test_viirs_l1b.py from satpy.config import config_search_paths from satpy.readers.fci_l1c_fdhsi import FCIFDHSIFileHandler self.reader_configs = config_search_paths( os.path.join("readers", self.yaml_file)) self.p = mock.patch.object(FCIFDHSIFileHandler, "__bases__", (self._alt_handler, )) self.fake_handler = self.p.start() self.p.is_local = True
def load_sensor_composites(self, sensor_name): """Load all compositor configs for the provided sensor.""" config_filename = sensor_name + ".yaml" logger.debug("Looking for composites config file %s", config_filename) paths = get_entry_points_config_dirs('satpy.composites') paths.append(self.ppp_config_dir) composite_configs = config_search_paths(os.path.join( "composites", config_filename), *paths, check_exists=True) if not composite_configs: logger.debug("No composite config found called %s", config_filename) return self._load_config(composite_configs)
def load_writer(writer, ppp_config_dir=None, **writer_kwargs): """Find and load writer `writer` in the available configuration files.""" if ppp_config_dir is None: ppp_config_dir = get_environ_config_dir() config_fn = writer + ".yaml" if "." not in writer else writer config_files = config_search_paths(os.path.join("writers", config_fn), ppp_config_dir) writer_kwargs.setdefault("config_files", config_files) if not writer_kwargs['config_files']: raise ValueError("Unknown writer '{}'".format(writer)) try: return load_writer_configs(writer_kwargs['config_files'], ppp_config_dir=ppp_config_dir, **writer_kwargs) except ValueError: raise ValueError("Writer '{}' does not exist or could not be " "loaded".format(writer))
def load_writer(writer, ppp_config_dir=None, **writer_kwargs): """Find and load writer `writer` in the available configuration files.""" if ppp_config_dir is None: ppp_config_dir = get_environ_config_dir() config_fn = writer + ".yaml" if "." not in writer else writer config_files = config_search_paths( os.path.join("writers", config_fn), ppp_config_dir) writer_kwargs.setdefault("config_files", config_files) if not writer_kwargs['config_files']: raise ValueError("Unknown writer '{}'".format(writer)) try: return load_writer_configs(writer_kwargs['config_files'], ppp_config_dir=ppp_config_dir, **writer_kwargs) except ValueError: raise ValueError("Writer '{}' does not exist or could not be " "loaded".format(writer))
def __init__(self, ppp_config_dir=None, default_config_filename=None, config_files=None, **kwargs): self.ppp_config_dir = ppp_config_dir or get_environ_config_dir() self.default_config_filename = default_config_filename self.config_files = config_files if self.config_files is None and self.default_config_filename is not None: # Specify a default self.config_files = config_search_paths( self.default_config_filename, self.ppp_config_dir) if not isinstance(self.config_files, (list, tuple)): self.config_files = [self.config_files] self.config = {} if self.config_files: for config_file in self.config_files: self.load_yaml_config(config_file)
def __init__(self, ppp_config_dir=None, default_config_filename=None, config_files=None, **kwargs): self.ppp_config_dir = ppp_config_dir or get_environ_config_dir() self.default_config_filename = default_config_filename self.config_files = config_files if self.config_files is None and self.default_config_filename is not None: # Specify a default self.config_files = config_search_paths( self.default_config_filename, self.ppp_config_dir) if not isinstance(self.config_files, (list, tuple)): self.config_files = [self.config_files] if self.config_files: conf = configparser.RawConfigParser() conf.read(self.config_files) self.load_config(conf)
def setup_method(self): """Wrap pygrib to read fake data.""" from satpy.config import config_search_paths self.reader_configs = config_search_paths( os.path.join('readers', self.yaml_file))
def __call__(self, filenames=None, sensor=None, reader=None): reader_instances = {} if not filenames and sensor is None and reader is None: # we weren't given anything to search through LOG.info("Not enough information provided to find readers.") return reader_instances if reader is not None: # given a config filename or reader name if not reader.endswith(".yaml") and not reader.endswith(".cfg"): reader += ".yaml" config_files = [reader] else: config_files = set(self.config_files()) # FUTURE: Allow for a reader instance to be passed remaining_filenames = set(filenames) if filenames is not None else None for config_file in config_files: config_basename = os.path.basename(config_file) reader_configs = config_search_paths( os.path.join("readers", config_basename), self.ppp_config_dir) if not reader_configs: LOG.warning("No reader configs found for '%s'", reader) continue try: reader_info = self._read_reader_config(reader_configs) except (MalformedConfigError, yaml.YAMLError) as err: LOG.info('Cannot use %s', str(reader_configs)) LOG.debug(str(err)) continue try: reader_instance = reader_info['reader']( config_files=reader_configs, start_time=self.start_time, end_time=self.end_time, area=self.area, ) except KeyError as err: LOG.info('Cannot use %s', str(reader_configs)) LOG.debug(str(err)) continue remaining_filenames, loadable_files = reader_instance.select_files( self.base_dir, remaining_filenames, sensor) if loadable_files and reader_instance: reader_instances[reader_instance.name] = reader_instance if filenames is not None and not remaining_filenames: # we were given filenames to look through and found a reader # for all of them break if remaining_filenames: LOG.warning( "Don't know how to open the following files: {}".format(str( remaining_filenames))) if not reader_instances: raise ValueError("No supported files found") return reader_instances
def get_writer(self, writer="geotiff", **kwargs): config_fn = writer + ".cfg" if "." not in writer else writer config_files = config_search_paths( os.path.join("writers", config_fn), self.ppp_config_dir) kwargs.setdefault("config_files", config_files) return self.load_writer_config(**kwargs)
def __call__(self, filenames=None, sensor=None, reader=None, reader_kwargs=None, metadata=None): reader_instances = {} reader_kwargs = reader_kwargs or {} if not filenames and reader is None and not self.base_dir: # we weren't given anything to search through LOG.info("Not enough information provided to find readers.") return reader_instances if reader is not None: # given a config filename or reader name if not reader.endswith(".yaml"): reader += ".yaml" config_files = [reader] else: config_files = set(self.config_files()) # FUTURE: Allow for a reader instance to be passed sensor_supported = False remaining_filenames = set( filenames) if filenames is not None else set() for config_file in config_files: config_basename = os.path.basename(config_file) reader_configs = config_search_paths( os.path.join("readers", config_basename), self.ppp_config_dir) if not reader_configs: LOG.warning("No reader configs found for '%s'", reader) continue try: reader_instance = load_reader(reader_configs, start_time=self.start_time, end_time=self.end_time, area=self.area, metadata=metadata, **reader_kwargs) except (KeyError, MalformedConfigError, yaml.YAMLError) as err: LOG.info('Cannot use %s', str(reader_configs)) LOG.debug(str(err)) continue if not reader_instance.supports_sensor(sensor): continue elif sensor is not None: # sensor was specified and a reader supports it sensor_supported = True if remaining_filenames: loadables = reader_instance.select_files_from_pathnames( remaining_filenames) else: loadables = reader_instance.select_files_from_directory( self.base_dir) if loadables: reader_instance.create_filehandlers(loadables) reader_instances[reader_instance.name] = reader_instance remaining_filenames -= set(loadables) if filenames is not None and not remaining_filenames: # we were given filenames to look through and found a reader # for all of them break if sensor and not sensor_supported: LOG.warning( "Sensor '{}' not supported by any readers".format(sensor)) if remaining_filenames: LOG.warning( "Don't know how to open the following files: {}".format( str(remaining_filenames))) if not reader_instances: raise ValueError("No supported files found") return reader_instances
def get_writer(self, writer="geotiff", **kwargs): config_fn = writer + ".cfg" if "." not in writer else writer config_files = config_search_paths(os.path.join("writers", config_fn), self.ppp_config_dir) kwargs.setdefault("config_files", config_files) return self.load_writer_config(**kwargs)
def reader_configs(): """Return reader configs for FCI.""" from satpy.config import config_search_paths return config_search_paths(os.path.join("readers", "fci_l1c_fdhsi.yaml"))