Skip to content

Commit

Permalink
Merge pull request #1303 from djhoese/bugfix-nucaps-kwargs
Browse files Browse the repository at this point in the history
Fix nucaps reader failing when kwargs are passed
  • Loading branch information
mraspaud committed Sep 9, 2020
2 parents 5085b84 + 1b47726 commit 78da121
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 28 deletions.
3 changes: 3 additions & 0 deletions satpy/readers/nucaps.py
Expand Up @@ -68,6 +68,9 @@ class NUCAPSFileHandler(NetCDF4FileHandler):

def __init__(self, *args, **kwargs):
"""Initialize file handler."""
# remove kwargs that reader instance used that file handler does not
kwargs.pop('mask_surface', None)
kwargs.pop('mask_quality', None)
kwargs.setdefault('xarray_kwargs', {}).setdefault(
'decode_times', False)
super(NUCAPSFileHandler, self).__init__(*args, **kwargs)
Expand Down
12 changes: 10 additions & 2 deletions satpy/tests/reader_tests/test_netcdf_utils.py
Expand Up @@ -31,14 +31,22 @@
class FakeNetCDF4FileHandler(NetCDF4FileHandler):
"""Swap-in NetCDF4 File Handler for reader tests to use."""

def __init__(self, filename, filename_info, filetype_info, **kwargs):
def __init__(self, filename, filename_info, filetype_info,
auto_maskandscale=False, xarray_kwargs=None,
cache_var_size=0, cache_handle=False, extra_file_content=None):
"""Get fake file content from 'get_test_content'."""
# unused kwargs from the real file handler
del auto_maskandscale
del xarray_kwargs
del cache_var_size
del cache_handle
if NetCDF4FileHandler is object:
raise ImportError("Base 'NetCDF4FileHandler' could not be "
"imported.")
super(NetCDF4FileHandler, self).__init__(filename, filename_info, filetype_info)
self.file_content = self.get_test_content(filename, filename_info, filetype_info)
self.file_content.update(kwargs)
if extra_file_content:
self.file_content.update(extra_file_content)

def get_test_content(self, filename, filename_info, filetype_info):
"""Mimic reader input file content.
Expand Down
67 changes: 41 additions & 26 deletions satpy/tests/reader_tests/test_nucaps.py
Expand Up @@ -54,9 +54,10 @@


class FakeNetCDF4FileHandler2(FakeNetCDF4FileHandler):
"""Swap-in NetCDF4 File Handler"""
"""Swap-in NetCDF4 File Handler."""

def get_test_content(self, filename, filename_info, filetype_info):
"""Mimic reader input file content"""
"""Mimic reader input file content."""
file_content = {
'/attr/time_coverage_start': filename_info['start_time'].strftime('%Y-%m-%dT%H:%M:%S.%fZ'),
'/attr/time_coverage_end': filename_info['end_time'].strftime('%Y-%m-%dT%H:%M:%S.%fZ'),
Expand Down Expand Up @@ -149,11 +150,12 @@ def get_test_content(self, filename, filename_info, filetype_info):


class TestNUCAPSReader(unittest.TestCase):
"""Test NUCAPS Reader"""
"""Test NUCAPS Reader."""

yaml_file = "nucaps.yaml"

def setUp(self):
"""Wrap NetCDF4 file handler with our own fake handler"""
"""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))
Expand All @@ -163,7 +165,7 @@ def setUp(self):
self.p.is_local = True

def tearDown(self):
"""Stop wrapping the NetCDF4 file handler"""
"""Stop wrapping the NetCDF4 file handler."""
self.p.stop()

def test_init(self):
Expand All @@ -178,8 +180,20 @@ def test_init(self):
# make sure we have some files
self.assertTrue(r.file_handlers)

def test_init_with_kwargs(self):
"""Test basic init with extra parameters."""
from satpy.readers import load_reader
r = load_reader(self.reader_configs, mask_surface=False)
loadables = r.select_files_from_pathnames([
'NUCAPS-EDR_v1r0_npp_s201603011158009_e201603011158307_c201603011222270.nc',
])
self.assertEqual(len(loadables), 1)
r.create_filehandlers(loadables, fh_kwargs={'mask_surface': False})
# make sure we have some files
self.assertTrue(r.file_handlers)

def test_load_nonpressure_based(self):
"""Test loading all channels that aren't based on pressure"""
"""Test loading all channels that aren't based on pressure."""
from satpy.readers import load_reader
r = load_reader(self.reader_configs)
loadables = r.select_files_from_pathnames([
Expand All @@ -201,7 +215,7 @@ def test_load_nonpressure_based(self):
self.assertEqual(v.attrs['sensor'], ['CrIS', 'ATMS', 'VIIRS'])

def test_load_pressure_based(self):
"""Test loading all channels based on pressure"""
"""Test loading all channels based on pressure."""
from satpy.readers import load_reader
r = load_reader(self.reader_configs)
loadables = r.select_files_from_pathnames([
Expand Down Expand Up @@ -234,7 +248,7 @@ def test_load_pressure_based(self):
self.assertEqual(v.ndim, 2)

def test_load_individual_pressure_levels_true(self):
"""Test loading Temperature with individual pressure datasets"""
"""Test loading Temperature with individual pressure datasets."""
from satpy.readers import load_reader
r = load_reader(self.reader_configs)
loadables = r.select_files_from_pathnames([
Expand All @@ -247,7 +261,7 @@ def test_load_individual_pressure_levels_true(self):
self.assertEqual(v.ndim, 1)

def test_load_individual_pressure_levels_min_max(self):
"""Test loading individual Temperature with min/max level specified"""
"""Test loading individual Temperature with min/max level specified."""
from satpy.readers import load_reader
r = load_reader(self.reader_configs)
loadables = r.select_files_from_pathnames([
Expand All @@ -260,7 +274,7 @@ def test_load_individual_pressure_levels_min_max(self):
self.assertEqual(v.ndim, 1)

def test_load_individual_pressure_levels_single(self):
"""Test loading individual Temperature with specific levels"""
"""Test loading individual Temperature with specific levels."""
from satpy.readers import load_reader
r = load_reader(self.reader_configs)
loadables = r.select_files_from_pathnames([
Expand All @@ -273,7 +287,7 @@ def test_load_individual_pressure_levels_single(self):
self.assertEqual(v.ndim, 1)

def test_load_pressure_levels_true(self):
"""Test loading Temperature with all pressure levels"""
"""Test loading Temperature with all pressure levels."""
from satpy.readers import load_reader
r = load_reader(self.reader_configs)
loadables = r.select_files_from_pathnames([
Expand All @@ -287,7 +301,7 @@ def test_load_pressure_levels_true(self):
self.assertTupleEqual(v.shape, DEFAULT_PRES_FILE_SHAPE)

def test_load_pressure_levels_min_max(self):
"""Test loading Temperature with min/max level specified"""
"""Test loading Temperature with min/max level specified."""
from satpy.readers import load_reader
r = load_reader(self.reader_configs)
loadables = r.select_files_from_pathnames([
Expand All @@ -302,7 +316,7 @@ def test_load_pressure_levels_min_max(self):
(DEFAULT_PRES_FILE_SHAPE[0], 6))

def test_load_pressure_levels_single(self):
"""Test loading a specific Temperature level"""
"""Test loading a specific Temperature level."""
from satpy.readers import load_reader
r = load_reader(self.reader_configs)
loadables = r.select_files_from_pathnames([
Expand All @@ -317,7 +331,7 @@ def test_load_pressure_levels_single(self):
(DEFAULT_PRES_FILE_SHAPE[0], 1))

def test_load_pressure_levels_single_and_pressure_levels(self):
"""Test loading a specific Temperature level and pressure levels"""
"""Test loading a specific Temperature level and pressure levels."""
from satpy.readers import load_reader
r = load_reader(self.reader_configs)
loadables = r.select_files_from_pathnames([
Expand All @@ -335,11 +349,12 @@ def test_load_pressure_levels_single_and_pressure_levels(self):


class TestNUCAPSScienceEDRReader(unittest.TestCase):
"""Test NUCAPS Science EDR Reader"""
"""Test NUCAPS Science EDR Reader."""

yaml_file = "nucaps.yaml"

def setUp(self):
"""Wrap NetCDF4 file handler with our own fake handler"""
"""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))
Expand All @@ -349,7 +364,7 @@ def setUp(self):
self.p.is_local = True

def tearDown(self):
"""Stop wrapping the NetCDF4 file handler"""
"""Stop wrapping the NetCDF4 file handler."""
self.p.stop()

def test_init(self):
Expand All @@ -365,7 +380,7 @@ def test_init(self):
self.assertTrue(r.file_handlers)

def test_load_nonpressure_based(self):
"""Test loading all channels that aren't based on pressure"""
"""Test loading all channels that aren't based on pressure."""
from satpy.readers import load_reader
r = load_reader(self.reader_configs)
loadables = r.select_files_from_pathnames([
Expand All @@ -384,7 +399,7 @@ def test_load_nonpressure_based(self):
self.assertEqual(v.attrs['sensor'], ['CrIS', 'ATMS', 'VIIRS'])

def test_load_pressure_based(self):
"""Test loading all channels based on pressure"""
"""Test loading all channels based on pressure."""
from satpy.readers import load_reader
r = load_reader(self.reader_configs)
loadables = r.select_files_from_pathnames([
Expand Down Expand Up @@ -414,7 +429,7 @@ def test_load_pressure_based(self):
self.assertEqual(v.ndim, 2)

def test_load_individual_pressure_levels_true(self):
"""Test loading Temperature with individual pressure datasets"""
"""Test loading Temperature with individual pressure datasets."""
from satpy.readers import load_reader
r = load_reader(self.reader_configs)
loadables = r.select_files_from_pathnames([
Expand All @@ -427,7 +442,7 @@ def test_load_individual_pressure_levels_true(self):
self.assertEqual(v.ndim, 1)

def test_load_individual_pressure_levels_min_max(self):
"""Test loading individual Temperature with min/max level specified"""
"""Test loading individual Temperature with min/max level specified."""
from satpy.readers import load_reader
r = load_reader(self.reader_configs)
loadables = r.select_files_from_pathnames([
Expand All @@ -440,7 +455,7 @@ def test_load_individual_pressure_levels_min_max(self):
self.assertEqual(v.ndim, 1)

def test_load_individual_pressure_levels_single(self):
"""Test loading individual Temperature with specific levels"""
"""Test loading individual Temperature with specific levels."""
from satpy.readers import load_reader
r = load_reader(self.reader_configs)
loadables = r.select_files_from_pathnames([
Expand All @@ -453,7 +468,7 @@ def test_load_individual_pressure_levels_single(self):
self.assertEqual(v.ndim, 1)

def test_load_pressure_levels_true(self):
"""Test loading Temperature with all pressure levels"""
"""Test loading Temperature with all pressure levels."""
from satpy.readers import load_reader
r = load_reader(self.reader_configs)
loadables = r.select_files_from_pathnames([
Expand All @@ -467,7 +482,7 @@ def test_load_pressure_levels_true(self):
self.assertTupleEqual(v.shape, DEFAULT_PRES_FILE_SHAPE)

def test_load_pressure_levels_min_max(self):
"""Test loading Temperature with min/max level specified"""
"""Test loading Temperature with min/max level specified."""
from satpy.readers import load_reader
r = load_reader(self.reader_configs)
loadables = r.select_files_from_pathnames([
Expand All @@ -482,7 +497,7 @@ def test_load_pressure_levels_min_max(self):
(DEFAULT_PRES_FILE_SHAPE[0], 6))

def test_load_pressure_levels_single(self):
"""Test loading a specific Temperature level"""
"""Test loading a specific Temperature level."""
from satpy.readers import load_reader
r = load_reader(self.reader_configs)
loadables = r.select_files_from_pathnames([
Expand All @@ -497,7 +512,7 @@ def test_load_pressure_levels_single(self):
(DEFAULT_PRES_FILE_SHAPE[0], 1))

def test_load_pressure_levels_single_and_pressure_levels(self):
"""Test loading a specific Temperature level and pressure levels"""
"""Test loading a specific Temperature level and pressure levels."""
from satpy.readers import load_reader
r = load_reader(self.reader_configs)
loadables = r.select_files_from_pathnames([
Expand Down

0 comments on commit 78da121

Please sign in to comment.