Skip to content

Commit

Permalink
Replace deprecated ast.NameConstant usage and add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
lizdenhup committed Apr 3, 2024
1 parent f7bf3f7 commit 04fad89
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 1 deletion.
2 changes: 1 addition & 1 deletion scrapy/utils/misc.py
Expand Up @@ -264,7 +264,7 @@ def is_generator_with_return_value(callable: Callable) -> bool:
def returns_none(return_node: ast.Return) -> bool:
value = return_node.value
return (
value is None or isinstance(value, ast.NameConstant) and value.value is None
value is None or isinstance(value, ast.Constant) and value.value is None
)

if inspect.isgeneratorfunction(callable):
Expand Down
Expand Up @@ -12,6 +12,13 @@
def _indentation_error(*args, **kwargs):
raise IndentationError()

def create_ast_return(value=None):
return (
unittest.mock.MagicMock(name='ast.Return', value=None)
if value is None
else unittest.mock.MagicMock(name='ast.Return',
value=unittest.mock.MagicMock(name='ast.Constant', value=value))
)

def top_level_return_something():
"""
Expand Down Expand Up @@ -70,11 +77,16 @@ def i1():
yield url
return 1

def j1():
yield 1
return create_ast_return(value=42)

assert is_generator_with_return_value(top_level_return_something)
assert is_generator_with_return_value(f1)
assert is_generator_with_return_value(g1)
assert is_generator_with_return_value(h1)
assert is_generator_with_return_value(i1)
assert is_generator_with_return_value(j1)

with warnings.catch_warnings(record=True) as w:
warn_on_generator_with_return_value(None, top_level_return_something)
Expand Down Expand Up @@ -137,6 +149,9 @@ def k2():
def l2():
return

def m2():
return create_ast_return()

assert not is_generator_with_return_value(top_level_return_none)
assert not is_generator_with_return_value(f2)
assert not is_generator_with_return_value(g2)
Expand All @@ -145,6 +160,8 @@ def l2():
assert not is_generator_with_return_value(j2) # not recursive
assert not is_generator_with_return_value(k2) # not recursive
assert not is_generator_with_return_value(l2)
assert not is_generator_with_return_value(m2)


with warnings.catch_warnings(record=True) as w:
warn_on_generator_with_return_value(None, top_level_return_none)
Expand Down

0 comments on commit 04fad89

Please sign in to comment.