Skip to content

Commit e7d0f68

Browse files
[issue-381] change error type of datetime_from_str()
Signed-off-by: Armin Tänzer <armin.taenzer@tngtech.com>
1 parent 1797b85 commit e7d0f68

4 files changed

Lines changed: 40 additions & 27 deletions

File tree

src/datetime_conversions.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,9 @@
1515

1616
def datetime_from_str(date_str: str) -> datetime:
1717
if not isinstance(date_str, str):
18-
raise SPDXParsingError([f"Could not convert str to datetime, invalid type: {type(date_str).__name__}"])
19-
try:
20-
date = datetime.strptime(date_str, "%Y-%m-%dT%H:%M:%SZ")
21-
except ValueError:
22-
raise SPDXParsingError(
23-
[f'Could not convert str to datetime, format of {date_str} does not match "%Y-%m-%dT%H:%M:%SZ"'])
18+
raise TypeError(f"Could not convert str to datetime, invalid type: {type(date_str).__name__}")
19+
20+
date = datetime.strptime(date_str, "%Y-%m-%dT%H:%M:%SZ") # raises ValueError if format does not match
2421
return date
2522

2623
def datetime_to_iso_string(date: datetime) -> str:

src/parser/json/dict_parsing_functions.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,11 @@ def parse_field_or_log_error(logger: Logger, field: Any, parsing_method: Callabl
4040
return parse_list_of_elements(field, parsing_method)
4141
else:
4242
return parsing_method(field)
43-
except SPDXParsingError as err:
43+
except (SPDXParsingError, ValueError) as err:
4444
logger.extend(err.get_messages())
45-
return default
45+
except (TypeError, ValueError) as err:
46+
logger.extend(err.args[0])
47+
return default
4648

4749

4850
def append_parsed_field_or_log_error(logger: Logger, list_to_append_to: List[Any], field: Any,
@@ -52,6 +54,8 @@ def append_parsed_field_or_log_error(logger: Logger, list_to_append_to: List[Any
5254
list_to_append_to.append(parsed_element)
5355
except SPDXParsingError as err:
5456
logger.extend(err.get_messages())
57+
except (TypeError, ValueError) as err:
58+
logger.extend(err.args[0])
5559
return list_to_append_to
5660

5761

tests/parser/test_dict_parsing_functions.py

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,25 +21,6 @@
2121
from src.datetime_conversions import datetime_from_str
2222

2323

24-
def test_datetime_from_str():
25-
date_str = "2010-03-04T05:45:11Z"
26-
27-
date = datetime_from_str(date_str)
28-
29-
assert date == datetime(2010, 3, 4, 5, 45, 11)
30-
31-
32-
@pytest.mark.parametrize("invalid_date_str,expected_message",
33-
[(5, ["Could not convert str to datetime, invalid type: int"]),
34-
("2010-02-03", ['Could not convert str to datetime, format of 2010-02-03 does not match '
35-
'"%Y-%m-%dT%H:%M:%SZ"'])])
36-
def test_datetime_from_str_error(invalid_date_str, expected_message):
37-
with pytest.raises(SPDXParsingError) as err:
38-
datetime_from_str(invalid_date_str)
39-
40-
TestCase().assertCountEqual(err.value.get_messages(), expected_message)
41-
42-
4324
def test_json_str_to_enum():
4425
json_str = "BLAKE2b-256"
4526

tests/test_datetime_conversions.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Copyright (c) 2022 spdx contributors
2+
# Licensed under the Apache License, Version 2.0 (the "License");
3+
# you may not use this file except in compliance with the License.
4+
# You may obtain a copy of the License at
5+
# http://www.apache.org/licenses/LICENSE-2.0
6+
# Unless required by applicable law or agreed to in writing, software
7+
# distributed under the License is distributed on an "AS IS" BASIS,
8+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9+
# See the License for the specific language governing permissions and
10+
# limitations under the License.
11+
from datetime import datetime
12+
13+
import pytest
14+
15+
from src.datetime_conversions import datetime_from_str
16+
17+
18+
def test_datetime_from_str():
19+
date_str = "2010-03-04T05:45:11Z"
20+
21+
date = datetime_from_str(date_str)
22+
23+
assert date == datetime(2010, 3, 4, 5, 45, 11)
24+
25+
26+
@pytest.mark.parametrize("invalid_date_str, error_type, expected_message",
27+
[(5, TypeError, "Could not convert str to datetime, invalid type: int"),
28+
("2010-02-03", ValueError, "time data '2010-02-03' does not match format '%Y-%m-%dT%H:%M:%SZ'")])
29+
def test_datetime_from_str_error(invalid_date_str, error_type, expected_message):
30+
with pytest.raises(error_type, match=expected_message):
31+
datetime_from_str(invalid_date_str)

0 commit comments

Comments
 (0)