Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 20 additions & 8 deletions samcli/commands/logs/logs_context.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,12 @@ class InvalidTimestampError(UserException):
"""


class TimeParseError(UserException):
"""
Used to throw if parsing of the given time string or UTC conversion is failed
"""


def parse_time(time_str: str, property_name: str):
"""
Parse the time from the given string, convert to UTC, and return the datetime object
Expand All @@ -47,14 +53,20 @@ def parse_time(time_str: str, property_name: str):
InvalidTimestampError
If the string cannot be parsed as a timestamp
"""
if not time_str:
return None

parsed = parse_date(time_str)
if not parsed:
raise InvalidTimestampError("Unable to parse the time provided by '{}'".format(property_name))

return to_utc(parsed)
try:
if not time_str:
return None

parsed = parse_date(time_str)
if not parsed:
raise InvalidTimestampError(f"Unable to parse the time provided by '{property_name}'")

return to_utc(parsed)
except InvalidTimestampError as ex:
raise ex
except Exception as ex:
LOG.error("Failed to parse given time information %s", time_str, exc_info=ex)
raise TimeParseError(f"Unable to parse the time information '{property_name}': '{time_str}'") from ex


class ResourcePhysicalIdResolver:
Expand Down
10 changes: 10 additions & 0 deletions tests/unit/commands/logs/test_logs_context.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,16 @@ def test_parse_time_raises_exception(self, parse_date_mock):

self.assertEqual(str(ctx.exception), "Unable to parse the time provided by 'some prop'")

@patch("samcli.commands.logs.logs_context.parse_date")
def test_parse_time_internal_call_raises_exception(self, parse_date_mock):
given_input = "some time"
parse_date_mock.side_effect = ValueError("Invalid date time")

with self.assertRaises(UserException) as ctx:
parse_time(given_input, "some prop")

self.assertEqual(str(ctx.exception), "Unable to parse the time information 'some prop': 'some time'")

def test_parse_time_empty_time(self):
result = parse_time(None, "some prop")
self.assertIsNone(result)
Expand Down