Skip to content

Commit

Permalink
Add handling for f-strings
Browse files Browse the repository at this point in the history
  • Loading branch information
connesy committed Dec 10, 2024
1 parent 69c72f8 commit 9b148e0
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 6 deletions.
8 changes: 6 additions & 2 deletions src/griffe_warnings_deprecated/extension.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,12 @@
def _deprecated(obj: Class | Function) -> str | None:
for decorator in obj.decorators:
if decorator.callable_path in _decorators and isinstance(decorator.value, ExprCall):
message = str(decorator.value.arguments[0]).removeprefix("f")
return ast.literal_eval(message)
first_arg = decorator.value.arguments[0]
try:
return ast.literal_eval(first_arg) # type: ignore
except ValueError:
logger.debug("%s is not a static string", str(first_arg))
return None
return None


Expand Down
25 changes: 21 additions & 4 deletions tests/test_extension.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from __future__ import annotations

import logging
from textwrap import dedent

import pytest
Expand Down Expand Up @@ -37,10 +38,6 @@ def hello(): ...
def hello(): ...
""",
"""
@warnings.deprecated(f"message", category=DeprecationWarning)
def hello(): ...
""",
"""
@warnings.deprecated("message", category=DeprecationWarning)
def hello():
'''Summary.'''
Expand Down Expand Up @@ -85,3 +82,23 @@ def test_extension(code: str) -> None:
assert adm.title == "Deprecated"
assert adm.value.kind == "danger"
assert adm.value.contents == "message"


def test_extension_fstring(caplog: pytest.LogCaptureFixture) -> None:
"""Test the extension with an f-string as the deprecation message."""
code = dedent(
"""
import warnings
@warnings.deprecated(f"message")
def hello(): ...
""",
)
with (
caplog.at_level(logging.DEBUG),
temporary_visited_module(code, extensions=load_extensions(WarningsDeprecatedExtension)) as module,
):
adm = module["hello"].docstring

# Expect no deprecation message in the docstring.
assert adm is None
assert "f'message' is not a static string" in caplog.records[0].message

0 comments on commit 9b148e0

Please sign in to comment.