Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
    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 = []
Ejemplo n.º 8
0
    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 = []
Ejemplo n.º 9
0
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
Ejemplo n.º 10
0
 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
Ejemplo n.º 11
0
 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
Ejemplo n.º 12
0
 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
Ejemplo n.º 13
0
 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
Ejemplo n.º 14
0
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
Ejemplo n.º 15
0
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
Ejemplo n.º 16
0
 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
Ejemplo n.º 17
0
 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
Ejemplo n.º 18
0
 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
Ejemplo n.º 19
0
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')
Ejemplo n.º 20
0
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')
Ejemplo n.º 21
0
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
Ejemplo n.º 22
0
    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()
Ejemplo n.º 23
0
    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()
Ejemplo n.º 24
0
 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)
Ejemplo n.º 25
0
    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
Ejemplo n.º 26
0
    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
Ejemplo n.º 27
0
 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)
Ejemplo n.º 28
0
 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)
Ejemplo n.º 29
0
 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)
Ejemplo n.º 30
0
 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
Ejemplo n.º 31
0
    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
Ejemplo n.º 32
0
 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)
Ejemplo n.º 33
0
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))
Ejemplo n.º 34
0
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))
Ejemplo n.º 35
0
    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)
Ejemplo n.º 36
0
    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)
Ejemplo n.º 37
0
    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)
Ejemplo n.º 38
0
    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)
Ejemplo n.º 39
0
 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))
Ejemplo n.º 40
0
    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
Ejemplo n.º 41
0
 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)
Ejemplo n.º 42
0
    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
Ejemplo n.º 43
0
 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)
Ejemplo n.º 44
0
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"))