Skip to content

Commit

Permalink
PERF: minimize cost of introspection to detect jupyter dependencies
Browse files Browse the repository at this point in the history
  • Loading branch information
neutrinoceros committed Jul 11, 2023
1 parent a062d5c commit 0f8bd82
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 18 deletions.
2 changes: 2 additions & 0 deletions CHANGES.md
Expand Up @@ -30,6 +30,8 @@

<!-- Changes that improve Black's performance. -->

- minimize cost of introspection to detect jupyter dependencies (#3782)

### Output

<!-- Changes to Black's terminal output and error messages -->
Expand Down
27 changes: 9 additions & 18 deletions src/black/handle_ipynb_magics.py
Expand Up @@ -6,6 +6,7 @@
import secrets
import sys
from functools import lru_cache
from importlib.util import find_spec
from typing import Dict, List, Optional, Tuple

if sys.version_info >= (3, 10):
Expand Down Expand Up @@ -57,24 +58,14 @@ class Replacement:

@lru_cache
def jupyter_dependencies_are_installed(*, verbose: bool, quiet: bool) -> bool:
try:
# isort: off
# tokenize_rt is less commonly installed than IPython
# and IPython is expensive to import
import tokenize_rt # noqa:F401
import IPython # noqa:F401

# isort: on
except ModuleNotFoundError:
if verbose or not quiet:
msg = (
"Skipping .ipynb files as Jupyter dependencies are not installed.\n"
'You can fix this by running ``pip install "black[jupyter]"``'
)
out(msg)
return False
else:
return True
retv = find_spec("tokenize_rt") is not None and find_spec("IPython") is not None
if not retv and (verbose or not quiet):
msg = (
"Skipping .ipynb files as Jupyter dependencies are not installed.\n"
'You can fix this by running ``pip install "black[jupyter]"``'
)
out(msg)
return retv


def remove_trailing_semicolon(src: str) -> Tuple[str, bool]:
Expand Down

0 comments on commit 0f8bd82

Please sign in to comment.