Skip to content
This repository was archived by the owner on Jul 11, 2022. It is now read-only.

Commit c891c65

Browse files
committed
Store grammar pickle caches in CACHE_DIR
Fixes pytest-dev#192 Fixes pytest-dev#203
1 parent 5070a24 commit c891c65

File tree

4 files changed

+45
-26
lines changed

4 files changed

+45
-26
lines changed

black.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,10 @@
4646

4747
__version__ = "18.5b0"
4848
DEFAULT_LINE_LENGTH = 88
49+
CACHE_DIR = Path(user_cache_dir("black", version=__version__))
50+
4951

5052
# types
51-
syms = pygram.python_symbols
5253
FileContent = str
5354
Encoding = str
5455
Depth = int
@@ -65,6 +66,9 @@
6566
out = partial(click.secho, bold=True, err=True)
6667
err = partial(click.secho, fg="red", err=True)
6768

69+
pygram.initialize(CACHE_DIR)
70+
syms = pygram.python_symbols
71+
6872

6973
class NothingChanged(UserWarning):
7074
"""Raised by :func:`format_file` when reformatted code is the same as source."""
@@ -3051,9 +3055,6 @@ def can_omit_invisible_parens(line: Line, line_length: int) -> bool:
30513055
return False
30523056

30533057

3054-
CACHE_DIR = Path(user_cache_dir("black", version=__version__))
3055-
3056-
30573058
def get_cache_file(line_length: int) -> Path:
30583059
return CACHE_DIR / f"cache.{line_length}.pickle"
30593060

blib2to3/pgen2/driver.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -149,11 +149,15 @@ def _partially_consume_prefix(self, prefix, column):
149149
return ''.join(lines), current_line
150150

151151

152-
def _generate_pickle_name(gt):
152+
def _generate_pickle_name(gt, cache_dir=None):
153153
head, tail = os.path.splitext(gt)
154154
if tail == ".txt":
155155
tail = ""
156-
return head + tail + ".".join(map(str, sys.version_info)) + ".pickle"
156+
name = head + tail + ".".join(map(str, sys.version_info)) + ".pickle"
157+
if cache_dir:
158+
return os.path.join(cache_dir, os.path.basename(name))
159+
else:
160+
return name
157161

158162

159163
def load_grammar(gt="Grammar.txt", gp=None,
@@ -186,7 +190,7 @@ def _newer(a, b):
186190
return os.path.getmtime(a) >= os.path.getmtime(b)
187191

188192

189-
def load_packaged_grammar(package, grammar_source):
193+
def load_packaged_grammar(package, grammar_source, cache_dir=None):
190194
"""Normally, loads a pickled grammar by doing
191195
pkgutil.get_data(package, pickled_grammar)
192196
where *pickled_grammar* is computed from *grammar_source* by adding the
@@ -198,8 +202,9 @@ def load_packaged_grammar(package, grammar_source):
198202
199203
"""
200204
if os.path.isfile(grammar_source):
201-
return load_grammar(grammar_source)
202-
pickled_name = _generate_pickle_name(os.path.basename(grammar_source))
205+
gp = _generate_pickle_name(grammar_source, cache_dir) if cache_dir else None
206+
return load_grammar(grammar_source, gp=gp)
207+
pickled_name = _generate_pickle_name(os.path.basename(grammar_source), cache_dir)
203208
data = pkgutil.get_data(package, pickled_name)
204209
g = grammar.Grammar()
205210
g.loads(data)

blib2to3/pygram.py

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,29 @@ def __init__(self, grammar):
2929
setattr(self, name, symbol)
3030

3131

32-
# Python 2
33-
python_grammar = driver.load_packaged_grammar("blib2to3", _GRAMMAR_FILE)
34-
35-
python_symbols = Symbols(python_grammar)
36-
37-
# Python 2 + from __future__ import print_function
38-
python_grammar_no_print_statement = python_grammar.copy()
39-
del python_grammar_no_print_statement.keywords["print"]
40-
41-
# Python 3
42-
python_grammar_no_print_statement_no_exec_statement = python_grammar.copy()
43-
del python_grammar_no_print_statement_no_exec_statement.keywords["print"]
44-
del python_grammar_no_print_statement_no_exec_statement.keywords["exec"]
45-
46-
pattern_grammar = driver.load_packaged_grammar("blib2to3", _PATTERN_GRAMMAR_FILE)
47-
pattern_symbols = Symbols(pattern_grammar)
32+
def initialize(cache_dir=None):
33+
global python_grammar
34+
global python_grammar_no_print_statement
35+
global python_grammar_no_print_statement_no_exec_statement
36+
global python_symbols
37+
global pattern_grammar
38+
global pattern_symbols
39+
40+
# Python 2
41+
python_grammar = driver.load_packaged_grammar("blib2to3", _GRAMMAR_FILE,
42+
cache_dir)
43+
44+
python_symbols = Symbols(python_grammar)
45+
46+
# Python 2 + from __future__ import print_function
47+
python_grammar_no_print_statement = python_grammar.copy()
48+
del python_grammar_no_print_statement.keywords["print"]
49+
50+
# Python 3
51+
python_grammar_no_print_statement_no_exec_statement = python_grammar.copy()
52+
del python_grammar_no_print_statement_no_exec_statement.keywords["print"]
53+
del python_grammar_no_print_statement_no_exec_statement.keywords["exec"]
54+
55+
pattern_grammar = driver.load_packaged_grammar("blib2to3", _PATTERN_GRAMMAR_FILE,
56+
cache_dir)
57+
pattern_symbols = Symbols(pattern_grammar)

blib2to3/pygram.pyi

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Stubs for lib2to3.pygram (Python 3.6)
22

3-
from typing import Any
3+
import os
4+
from typing import Any, Union
45
from blib2to3.pgen2.grammar import Grammar
56

67
class Symbols:
@@ -119,3 +120,5 @@ python_grammar_no_print_statement: Grammar
119120
python_grammar_no_print_statement_no_exec_statement: Grammar
120121
python_grammar_no_exec_statement: Grammar
121122
pattern_grammar: Grammar
123+
124+
def initialize(cache_dir: Union[str, os.PathLike, None]) -> None: ...

0 commit comments

Comments
 (0)