Skip to content

Commit

Permalink
fix assignment to env var
Browse files Browse the repository at this point in the history
  • Loading branch information
MarcoGorelli committed Nov 25, 2021
1 parent dfa45ce commit 3ca6f06
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 9 deletions.
1 change: 1 addition & 0 deletions CHANGES.md
Expand Up @@ -6,6 +6,7 @@

- Fixed Python 3.10 support on platforms without ProcessPoolExecutor (#2631)
- Fixed `match` statements with open sequence subjects, like `match a, b:` (#2639)
- Fixed assignment to environment variables in Jupyter Notebooks (#2642)

## 21.11b1

Expand Down
27 changes: 18 additions & 9 deletions src/black/handle_ipynb_magics.py
Expand Up @@ -403,20 +403,29 @@ def visit_Assign(self, node: ast.Assign) -> None:
For example,
black_version = !black --version
env = %env var
would have been transformed to
would have been (respectively) transformed to
black_version = get_ipython().getoutput('black --version')
env = get_ipython().run_line_magic('env', 'var')
and we look for instances of the latter.
and we look for instances of any of the latter.
"""
if (
isinstance(node.value, ast.Call)
and _is_ipython_magic(node.value.func)
and node.value.func.attr == "getoutput"
):
(arg,) = _get_str_args(node.value.args)
src = f"!{arg}"
if isinstance(node.value, ast.Call) and _is_ipython_magic(node.value.func):
args = _get_str_args(node.value.args)
if node.value.func.attr == "getoutput":
src = f"!{args[0]}"
elif node.value.func.attr == "run_line_magic":
src = f"%{args[0]}"
if args[1]:
assert src is not None
src += f" {args[1]}"
else:
raise AssertionError(
"Unexpected IPython magic found. "
"Please report a bug on https://github.com/psf/black/issues."
) from None
self.magics[node.value.lineno].append(
OffsetAndMagic(node.value.col_offset, src)
)
Expand Down
4 changes: 4 additions & 0 deletions tests/test_ipynb.py
Expand Up @@ -90,6 +90,10 @@ def test_cell_magic_noop() -> None:
id="Line magic with argument",
),
pytest.param("%time\n'foo'", '%time\n"foo"', id="Line magic without argument"),
pytest.param(
"env = %env var", "env = %env var", id="Assignment to environment variable"
),
pytest.param("env = %env", "env = %env", id="Assignment to magic"),
),
)
def test_magic(src: str, expected: str) -> None:
Expand Down

0 comments on commit 3ca6f06

Please sign in to comment.