def test_unzip_file_pbzip2(self, mock_popen, mock_bz2): """Test the bz2 file unzipping techniques.""" process_mock = mock.Mock() attrs = {'communicate.return_value': (b'output', b'error'), 'returncode': 0} process_mock.configure_mock(**attrs) mock_popen.return_value = process_mock bz2_mock = mock.MagicMock() bz2_mock.read.return_value = b'TEST' mock_bz2.return_value = bz2_mock filename = 'tester.DAT.bz2' whichstr = 'satpy.readers.utils.which' # no bz2 installed with mock.patch(whichstr) as whichmock: whichmock.return_value = None new_fname = hf.unzip_file(filename) self.assertTrue(bz2_mock.read.called) self.assertTrue(os.path.exists(new_fname)) if os.path.exists(new_fname): os.remove(new_fname) # bz2 installed with mock.patch(whichstr) as whichmock: whichmock.return_value = '/usr/bin/pbzip2' new_fname = hf.unzip_file(filename) self.assertTrue(mock_popen.called) self.assertTrue(os.path.exists(new_fname)) if os.path.exists(new_fname): os.remove(new_fname) filename = 'tester.DAT' new_fname = hf.unzip_file(filename) self.assertIsNone(new_fname)
def __init__(self, filename, filename_info, filetype_info): """Init method.""" super(NcNWCSAF, self).__init__(filename, filename_info, filetype_info) self._unzipped = unzip_file(self.filename) if self._unzipped: self.filename = self._unzipped self.cache = {} self.nc = xr.open_dataset(self.filename, decode_cf=True, mask_and_scale=False, chunks=CHUNK_SIZE) self.nc = self.nc.rename({'nx': 'x', 'ny': 'y'}) self.sw_version = self.nc.attrs['source'] self.pps = False try: # MSG: sat_id = self.nc.attrs['satellite_identifier'] try: self.platform_name = PLATFORM_NAMES[sat_id] except KeyError: self.platform_name = PLATFORM_NAMES[sat_id.astype(str)] except KeyError: # PPS: self.platform_name = self.nc.attrs['platform'] self.pps = True self.sensor = SENSOR.get(self.platform_name, 'seviri')
def __init__(self, filename, filename_info, filetype_info): """Init method.""" super(NcNWCSAF, self).__init__(filename, filename_info, filetype_info) self._unzipped = unzip_file(self.filename) if self._unzipped: self.filename = self._unzipped self.cache = {} self.nc = xr.open_dataset(self.filename, decode_cf=True, mask_and_scale=False, chunks=CHUNK_SIZE) self.nc = self.nc.rename({'nx': 'x', 'ny': 'y'}) self.sw_version = self.nc.attrs['source'] self.pps = False self.platform_name = None self.sensor = None try: # NWCSAF/Geo: try: kwrgs = {'sat_id': self.nc.attrs['satellite_identifier']} except KeyError: kwrgs = { 'sat_id': self.nc.attrs['satellite_identifier'].astype(str) } except KeyError: # NWCSAF/PPS: kwrgs = {'platform_name': self.nc.attrs['platform']} self.set_platform_and_sensor(**kwrgs)
def __init__(self, filename, filename_info, filetype_info): """Init method.""" super(NcNWCSAF, self).__init__(filename, filename_info, filetype_info) self._unzipped = unzip_file(filename) if self._unzipped: filename = self._unzipped self.cache = {} self.nc = xr.open_dataset(filename, decode_cf=True, mask_and_scale=False, chunks=CHUNK_SIZE) self.nc = self.nc.rename({'nx': 'x', 'ny': 'y'}) self.pps = False try: # MSG: sat_id = self.nc.attrs['satellite_identifier'] try: self.platform_name = PLATFORM_NAMES[sat_id] except KeyError: self.platform_name = PLATFORM_NAMES[sat_id.astype(str)] except KeyError: # PPS: self.platform_name = self.nc.attrs['platform'] self.pps = True self.sensor = SENSOR.get(self.platform_name, 'seviri')
def __init__(self, filename, filename_info, filetype_info, mask_space=True, calib_mode='update', user_calibration=None, round_actual_position=True): """Initialize the reader.""" super(AHIHSDFileHandler, self).__init__(filename, filename_info, filetype_info) self.is_zipped = False self._unzipped = unzip_file(self.filename, prefix=str( filename_info['segment']).zfill(2)) # Assume file is not zipped if self._unzipped: # But if it is, set the filename to point to unzipped temp file self.is_zipped = True self.filename = self._unzipped self.channels = dict([(i, None) for i in AHI_CHANNEL_NAMES]) self.units = dict([(i, 'counts') for i in AHI_CHANNEL_NAMES]) self._data = dict([(i, None) for i in AHI_CHANNEL_NAMES]) self._header = dict([(i, None) for i in AHI_CHANNEL_NAMES]) self.lons = None self.lats = None self.segment_number = filename_info['segment'] self.total_segments = filename_info['total_segments'] with open(self.filename) as fd: self.basic_info = np.fromfile(fd, dtype=_BASIC_INFO_TYPE, count=1) self.data_info = np.fromfile(fd, dtype=_DATA_INFO_TYPE, count=1) self.proj_info = np.fromfile(fd, dtype=_PROJ_INFO_TYPE, count=1)[0] self.nav_info = np.fromfile(fd, dtype=_NAV_INFO_TYPE, count=1)[0] self.platform_name = np2str(self.basic_info['satellite']) self.observation_area = np2str(self.basic_info['observation_area']) self.sensor = 'ahi' self.mask_space = mask_space self.band_name = filetype_info['file_type'][4:].upper() calib_mode_choices = ('NOMINAL', 'UPDATE') if calib_mode.upper() not in calib_mode_choices: raise ValueError( 'Invalid calibration mode: {}. Choose one of {}'.format( calib_mode, calib_mode_choices)) self.calib_mode = calib_mode.upper() self.user_calibration = user_calibration self._round_actual_position = round_actual_position
def __init__(self, filename, filename_info, filetype_info): """Initialize the reader.""" super(AHIGriddedFileHandler, self).__init__(filename, filename_info, filetype_info) self._unzipped = unzip_file(self.filename) # Assume file is not zipped if self._unzipped: # But if it is, set the filename to point to unzipped temp file self.filename = self._unzipped # Get the band name, needed for finding area and dimensions self.product_name = filetype_info['file_type'] self.areaname = filename_info['area'] self.sensor = 'ahi' self.res = AHI_CHANNEL_RES[self.product_name[:3]] if self.areaname == 'fld': self.nlines = AHI_FULLDISK_SIZES[self.res]['y_size'] self.ncols = AHI_FULLDISK_SIZES[self.res]['x_size'] else: raise NotImplementedError("Only full disk data is supported.") # Set up directory path for the LUTs app_dirs = AppDirs('ahi_gridded_luts', 'satpy', '1.0.2') self.lut_dir = os.path.expanduser(app_dirs.user_data_dir) + '/' self.area = None