From 5cf40c79eb47807a2559f165a4ec3a234047650b Mon Sep 17 00:00:00 2001 From: Mackenzie Grimes - NOAA Affiliate Date: Fri, 28 Jul 2023 00:00:39 -0600 Subject: [PATCH] minor type hint corrections in aws_utils.py and utils.py --- python/idsse_common/idsse/common/aws_utils.py | 23 ++++++++++--------- python/idsse_common/idsse/common/config.py | 2 +- python/idsse_common/idsse/common/utils.py | 8 +++---- python/idsse_common/test/test_aws_utils.py | 6 ++--- 4 files changed, 20 insertions(+), 19 deletions(-) diff --git a/python/idsse_common/idsse/common/aws_utils.py b/python/idsse_common/idsse/common/aws_utils.py index 851be68d..f5a3135b 100644 --- a/python/idsse_common/idsse/common/aws_utils.py +++ b/python/idsse_common/idsse/common/aws_utils.py @@ -12,7 +12,7 @@ import logging import os from datetime import datetime, timedelta, timezone -from typing import Sequence, Tuple +from typing import List, Tuple, Optional, Sequence from .path_builder import PathBuilder from .utils import TimeDelta, datetime_gen, exec_cmd @@ -43,7 +43,7 @@ def get_path(self, issue: datetime, valid: datetime) -> str: lead = TimeDelta(valid-issue) return self.path_builder.build_path(issue=issue, valid=valid, lead=lead) - def aws_ls(self, path: str, prepend_path: bool = True) -> Sequence[str]: + def aws_ls(self, path: str, prepend_path: bool = True) -> List[str]: """Execute an 'ls' on the AWS s3 bucket specified by path Args: @@ -85,13 +85,13 @@ def aws_cp(self, path: str, dest: str) -> bool: commands = ['aws', 's3', '--no-sign-request', 'cp', path, dest] exec_cmd(commands) return True - except: + except Exception: # pytest: disable=broad-exception-caught return False finally: pass - - def check_for(self, issue: datetime, valid: datetime) -> Tuple[datetime, str]: + + def check_for(self, issue: datetime, valid: datetime) -> Optional[Tuple[datetime, str]]: """Checks if an object passed issue/valid exists Args: @@ -112,9 +112,9 @@ def check_for(self, issue: datetime, valid: datetime) -> Tuple[datetime, str]: return None def get_issues(self, - num_issues: int = 1, - issue_start: datetime = None, - issue_end: datetime = datetime.now(timezone.utc) + num_issues: Optional[int] = 1, + issue_start: Optional[datetime] = None, + issue_end: datetime = datetime.utcnow() ) -> Sequence[datetime]: """Determine the available issue date/times @@ -148,8 +148,8 @@ def get_issues(self, def get_valids(self, issue: datetime, - valid_start: datetime = None, - valid_end: datetime = None) -> Sequence[Tuple[datetime, str]]: + valid_start: Optional[datetime] = None, + valid_end: Optional[datetime] = None) -> Optional[Sequence[Tuple[datetime, str]]]: """Get all objects consistent with the passed issue date/time and filter by valid range Args: @@ -164,7 +164,8 @@ def get_valids(self, object's location) and the object's location (path) """ if valid_start and valid_start == valid_end: - return [self.check_for(issue, valid_start)] + valids_and_filenames = self.check_for(issue, valid_start) + return [valids_and_filenames] if valids_and_filenames is not None else None dir_path = self.path_builder.build_dir(issue=issue) diff --git a/python/idsse_common/idsse/common/config.py b/python/idsse_common/idsse/common/config.py index a0a4f2a5..03311ead 100644 --- a/python/idsse_common/idsse/common/config.py +++ b/python/idsse_common/idsse/common/config.py @@ -49,7 +49,7 @@ def __init__(self, filepaths = glob.glob(config, recursive=recursive) if len(filepaths) == 0: raise FileNotFoundError - elif len(filepaths) == 1: + if len(filepaths) == 1: self._from_filepath(filepaths[0], keys) else: self._from_filepaths(filepaths, keys) diff --git a/python/idsse_common/idsse/common/utils.py b/python/idsse_common/idsse/common/utils.py index 9deb79d7..96b47b33 100644 --- a/python/idsse_common/idsse/common/utils.py +++ b/python/idsse_common/idsse/common/utils.py @@ -13,7 +13,7 @@ import logging from datetime import datetime, timedelta from subprocess import Popen, PIPE, TimeoutExpired -from typing import Sequence +from typing import Sequence, Optional, Generator, Any logger = logging.getLogger(__name__) @@ -70,7 +70,7 @@ def __delitem__(self, key): del self.__dict__[key] -def exec_cmd(commands: Sequence[str], timeout: int = None) -> Sequence[str]: +def exec_cmd(commands: Sequence[str], timeout: Optional[int] = None) -> Sequence[str]: """Execute the passed commands via a Popen call Args: @@ -145,8 +145,8 @@ def dict_copy_with(old_dict: dict, **kwargs) -> dict: def datetime_gen(dt_: datetime, time_delta: timedelta, - end_dt: datetime = None, - max_num: int = 100) -> datetime: + end_dt: Optional[datetime] = None, + max_num: int = 100) -> Generator[datetime, Any, None]: """Create a date/time sequence generator, given a starting date/time and a time stride Args: diff --git a/python/idsse_common/test/test_aws_utils.py b/python/idsse_common/test/test_aws_utils.py index b0615fc2..1fd19816 100644 --- a/python/idsse_common/test/test_aws_utils.py +++ b/python/idsse_common/test/test_aws_utils.py @@ -107,7 +107,7 @@ def test_aws_cp_retries_with_s3_command_line(aws_utils: AwsUtils, monkeypatch: M mock_exec_cmd_failure) copy_success = aws_utils.aws_cp('s3:/some/path', 's3:/new/path') - assert copy_success == True + assert copy_success assert mock_exec_cmd_failure.call_count == 2 @@ -118,7 +118,7 @@ def test_aws_cp_fails(aws_utils: AwsUtils, monkeypatch: MonkeyPatch): mock_exec_cmd_failure) copy_success = aws_utils.aws_cp('s3:/some/path', 's3:/new/path') - assert copy_success == False + assert not copy_success mock_exec_cmd_failure.call_count == 2 @@ -146,7 +146,7 @@ def test_get_issues(aws_utils: AwsUtils, mock_exec_cmd): def test_get_issues_returns_latest_issue_from_today_if_no_args_passed(aws_utils: AwsUtils, mock_exec_cmd): result = aws_utils.get_issues() assert len(result) == 1 - assert result[0].date() == datetime.now().date() + assert result[0].date() == datetime.utcnow().date() def test_get_valids_all(aws_utils: AwsUtils, mock_exec_cmd):