diff --git a/openapi_python_client/utils.py b/openapi_python_client/utils.py index c74598b70..35c8f5742 100644 --- a/openapi_python_client/utils.py +++ b/openapi_python_client/utils.py @@ -10,7 +10,7 @@ class PythonIdentifier(str): """A string which has been validated / transformed into a valid identifier for Python""" def __new__(cls, value: str, prefix: str) -> "PythonIdentifier": - new_value = fix_reserved_words(snake_case(sanitize(value))) + new_value = snake_case(sanitize(value)) if not new_value.isidentifier(): new_value = f"{prefix}{new_value}" @@ -54,7 +54,8 @@ def fix_reserved_words(value: str) -> str: def snake_case(value: str) -> str: """Converts to snake_case""" words = split_words(sanitize(value)) - return "_".join(words).lower() + value = "_".join(words).lower() + return fix_reserved_words(value) def pascal_case(value: str) -> str: diff --git a/tests/test_utils.py b/tests/test_utils.py index c50c8d0cc..26ab0f2d6 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -36,6 +36,22 @@ def test_split_words(before, after): assert utils.split_words(before) == after +@pytest.mark.parametrize( + "reserved_word, expected", + [ + ("self", "self_"), + ("int", "int_"), + ("dict", "dict_"), + ("not_reserved", "not_reserved"), + ("type", "type"), + ("id", "id"), + ("None", "none"), + ], +) +def test_snake_case_fix_reserved_words(reserved_word: str, expected: str): + assert utils.snake_case(reserved_word) == expected + + def test_snake_case_uppercase_str(): assert utils.snake_case("HTTP") == "http" assert utils.snake_case("HTTP RESPONSE") == "http_response"