From ed52b724ef8762f9c1eea2c347a5276f49c9469b Mon Sep 17 00:00:00 2001 From: RussTreadon-NOAA Date: Wed, 18 Sep 2024 17:13:24 +0000 Subject: [PATCH] refactor jedi class method extract_tar (#2862) --- ush/python/pygfs/jedi/jedi.py | 43 +++++++++++------------- ush/python/pygfs/task/atm_analysis.py | 5 +-- ush/python/pygfs/task/atmens_analysis.py | 5 +-- 3 files changed, 26 insertions(+), 27 deletions(-) diff --git a/ush/python/pygfs/jedi/jedi.py b/ush/python/pygfs/jedi/jedi.py index 61ad820302..9e69065bb2 100644 --- a/ush/python/pygfs/jedi/jedi.py +++ b/ush/python/pygfs/jedi/jedi.py @@ -232,39 +232,36 @@ def get_bias_dict(self, task_config: AttrDict, bias_file) -> Dict[str, Any]: return bias_dict @logit(logger) - def extract_tar(self, task_config: AttrDict, tar_dict) -> Dict[str, Any]: - """Extract files from list of tarfiles + def extract_tar(self, tar_file: str) -> None: + """Extract bias correction files from a tarball - This method extract bias correction files from tarball(s) + This method extract files from a tarball Parameters ---------- - task_config: AttrDict - Attribute-dictionary of all configuration variables associated with a GDAS task. - tar_dict - a dictionary containing the list of tar files + tar_file + path/name of tarball Returns ---------- None """ - # extract bias correction files from tar file - for tar_file in tar_dict['copy']: - if tar_file[1].endswith('.tar'): - try: - with tarfile.open(tar_file[1], "r") as tarball: - tarball.extractall(path=os.path.join(task_config.DATA, 'obs')) - logger.info(f"Extract {tarball.getnames()}") - except tarfile.ReadError as err: - if tarfile.is_tarfile(tarfile[1]): - logger.error(f"FATAL ERROR: {tarfile[1]} could not be read") - raise tarfile.ReadError(f"FATAL ERROR: unable to read {tarfile[1]}") - else: - logger.info() - except tarfile.ExtractError as err: - logger.exception(f"FATAL ERROR: unable to extract from {tarfile[1]}") - raise tarfile.ExtractError("FATAL ERROR: unable to extract from {tarfile[1]}") + # extract files from tar file + tar_path = os.path.dirname(tar_file) + try: + with tarfile.open(tar_file, "r") as tarball: + tarball.extractall(path=tar_path) + logger.info(f"Extract {tarball.getnames()}") + except tarfile.ReadError as err: + if tarfile.is_tarfile(tarfile[1]): + logger.error(f"FATAL ERROR: {tarfile[1]} could not be read") + raise tarfile.ReadError(f"FATAL ERROR: unable to read {tarfile[1]}") + else: + logger.info() + except tarfile.ExtractError as err: + logger.exception(f"FATAL ERROR: unable to extract from {tarfile[1]}") + raise tarfile.ExtractError("FATAL ERROR: unable to extract from {tarfile[1]}") @logit(logger) diff --git a/ush/python/pygfs/task/atm_analysis.py b/ush/python/pygfs/task/atm_analysis.py index 27243159fa..badb01a74a 100644 --- a/ush/python/pygfs/task/atm_analysis.py +++ b/ush/python/pygfs/task/atm_analysis.py @@ -146,8 +146,9 @@ def initialize_analysis(self) -> None: logger.debug(f"Bias correction files:\n{pformat(bias_dict)}") # extract bias corrections - logger.info(f"Extract bias correction files from tarball") - self.jedi.extract_tar(self.task_config, bias_dict) + tar_file = os.path.join(self.task_config.DATA, 'obs', f"{self.task_config.GPREFIX}{bias_file}") + logger.info(f"Extract bias correction files from {tar_file}") + self.jedi.extract_tar(tar_file) # stage CRTM fix files logger.info(f"Staging CRTM fix files from {self.task_config.CRTM_FIX_YAML}") diff --git a/ush/python/pygfs/task/atmens_analysis.py b/ush/python/pygfs/task/atmens_analysis.py index 8bab631495..4b2f8ebbf4 100644 --- a/ush/python/pygfs/task/atmens_analysis.py +++ b/ush/python/pygfs/task/atmens_analysis.py @@ -145,8 +145,9 @@ def initialize_analysis(self) -> None: logger.debug(f"Bias correction files:\n{pformat(bias_dict)}") # extract bias corrections - logger.info(f"Extract bias correction files from tarball") - self.jedi.extract_tar(self.task_config, bias_dict) + tar_file = os.path.join(self.task_config.DATA, 'obs', f"{self.task_config.GPREFIX}{bias_file}") + logger.info(f"Extract bias correction files from {tar_file}") + self.jedi.extract_tar(tar_file) # stage CRTM fix files logger.info(f"Staging CRTM fix files from {self.task_config.CRTM_FIX_YAML}")