Skip to content

Commit 755b800

Browse files
committed
move Hook data type to a separate file
1 parent 5a62501 commit 755b800

File tree

19 files changed

+139
-163
lines changed

19 files changed

+139
-163
lines changed

pre_commit/commands/run.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@
2020
from pre_commit import git
2121
from pre_commit import output
2222
from pre_commit.clientlib import load_config
23+
from pre_commit.hook import Hook
24+
from pre_commit.languages.all import languages
2325
from pre_commit.repository import all_hooks
24-
from pre_commit.repository import Hook
2526
from pre_commit.repository import install_hook_envs
2627
from pre_commit.staged_files_only import staged_files_only
2728
from pre_commit.store import Store
@@ -160,7 +161,8 @@ def _run_single_hook(
160161
if not hook.pass_filenames:
161162
filenames = ()
162163
time_before = time.time()
163-
retcode, out = hook.run(filenames, use_color)
164+
language = languages[hook.language]
165+
retcode, out = language.run_hook(hook, filenames, use_color)
164166
duration = round(time.time() - time_before, 2) or 0
165167
diff_after = cmd_output_b(*diff_cmd, retcode=None)
166168

pre_commit/hook.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import logging
2+
import shlex
3+
from typing import Any
4+
from typing import Dict
5+
from typing import NamedTuple
6+
from typing import Sequence
7+
from typing import Tuple
8+
9+
from pre_commit.prefix import Prefix
10+
11+
logger = logging.getLogger('pre_commit')
12+
13+
14+
class Hook(NamedTuple):
15+
src: str
16+
prefix: Prefix
17+
id: str
18+
name: str
19+
entry: str
20+
language: str
21+
alias: str
22+
files: str
23+
exclude: str
24+
types: Sequence[str]
25+
exclude_types: Sequence[str]
26+
additional_dependencies: Sequence[str]
27+
args: Sequence[str]
28+
always_run: bool
29+
pass_filenames: bool
30+
description: str
31+
language_version: str
32+
log_file: str
33+
minimum_pre_commit_version: str
34+
require_serial: bool
35+
stages: Sequence[str]
36+
verbose: bool
37+
38+
@property
39+
def cmd(self) -> Tuple[str, ...]:
40+
return (*shlex.split(self.entry), *self.args)
41+
42+
@property
43+
def install_key(self) -> Tuple[Prefix, str, str, Tuple[str, ...]]:
44+
return (
45+
self.prefix,
46+
self.language,
47+
self.language_version,
48+
tuple(self.additional_dependencies),
49+
)
50+
51+
@classmethod
52+
def create(cls, src: str, prefix: Prefix, dct: Dict[str, Any]) -> 'Hook':
53+
# TODO: have cfgv do this (?)
54+
extra_keys = set(dct) - _KEYS
55+
if extra_keys:
56+
logger.warning(
57+
f'Unexpected key(s) present on {src} => {dct["id"]}: '
58+
f'{", ".join(sorted(extra_keys))}',
59+
)
60+
return cls(src=src, prefix=prefix, **{k: dct[k] for k in _KEYS})
61+
62+
63+
_KEYS = frozenset(set(Hook._fields) - {'src', 'prefix'})

pre_commit/languages/all.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
from typing import Optional
44
from typing import Sequence
55
from typing import Tuple
6-
from typing import TYPE_CHECKING
76

7+
from pre_commit.hook import Hook
88
from pre_commit.languages import conda
99
from pre_commit.languages import docker
1010
from pre_commit.languages import docker_image
@@ -21,9 +21,6 @@
2121
from pre_commit.languages import system
2222
from pre_commit.prefix import Prefix
2323

24-
if TYPE_CHECKING:
25-
from pre_commit.repository import Hook
26-
2724

2825
class Language(NamedTuple):
2926
name: str

pre_commit/languages/conda.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,18 @@
33
from typing import Generator
44
from typing import Sequence
55
from typing import Tuple
6-
from typing import TYPE_CHECKING
76

87
from pre_commit.envcontext import envcontext
98
from pre_commit.envcontext import PatchesT
109
from pre_commit.envcontext import SubstitutionT
1110
from pre_commit.envcontext import UNSET
1211
from pre_commit.envcontext import Var
12+
from pre_commit.hook import Hook
1313
from pre_commit.languages import helpers
1414
from pre_commit.prefix import Prefix
1515
from pre_commit.util import clean_path_on_failure
1616
from pre_commit.util import cmd_output_b
1717

18-
if TYPE_CHECKING:
19-
from pre_commit.repository import Hook
20-
2118
ENVIRONMENT_DIR = 'conda'
2219
get_default_version = helpers.basic_get_default_version
2320
healthy = helpers.basic_healthy

pre_commit/languages/docker.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,15 @@
22
import os
33
from typing import Sequence
44
from typing import Tuple
5-
from typing import TYPE_CHECKING
65

76
import pre_commit.constants as C
7+
from pre_commit.hook import Hook
88
from pre_commit.languages import helpers
99
from pre_commit.prefix import Prefix
1010
from pre_commit.util import CalledProcessError
1111
from pre_commit.util import clean_path_on_failure
1212
from pre_commit.util import cmd_output_b
1313

14-
if TYPE_CHECKING:
15-
from pre_commit.repository import Hook
16-
1714
ENVIRONMENT_DIR = 'docker'
1815
PRE_COMMIT_LABEL = 'PRE_COMMIT'
1916
get_default_version = helpers.basic_get_default_version

pre_commit/languages/docker_image.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
from typing import Sequence
22
from typing import Tuple
3-
from typing import TYPE_CHECKING
43

4+
from pre_commit.hook import Hook
55
from pre_commit.languages import helpers
66
from pre_commit.languages.docker import assert_docker_available
77
from pre_commit.languages.docker import docker_cmd
88

9-
if TYPE_CHECKING:
10-
from pre_commit.repository import Hook
11-
129
ENVIRONMENT_DIR = None
1310
get_default_version = helpers.basic_get_default_version
1411
healthy = helpers.basic_healthy

pre_commit/languages/fail.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
from typing import Sequence
22
from typing import Tuple
3-
from typing import TYPE_CHECKING
43

4+
from pre_commit.hook import Hook
55
from pre_commit.languages import helpers
66

7-
if TYPE_CHECKING:
8-
from pre_commit.repository import Hook
9-
107
ENVIRONMENT_DIR = None
118
get_default_version = helpers.basic_get_default_version
129
healthy = helpers.basic_healthy

pre_commit/languages/golang.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,20 @@
44
from typing import Generator
55
from typing import Sequence
66
from typing import Tuple
7-
from typing import TYPE_CHECKING
87

98
import pre_commit.constants as C
109
from pre_commit import git
1110
from pre_commit.envcontext import envcontext
1211
from pre_commit.envcontext import PatchesT
1312
from pre_commit.envcontext import Var
13+
from pre_commit.hook import Hook
1414
from pre_commit.languages import helpers
1515
from pre_commit.prefix import Prefix
1616
from pre_commit.util import clean_path_on_failure
1717
from pre_commit.util import cmd_output
1818
from pre_commit.util import cmd_output_b
1919
from pre_commit.util import rmtree
2020

21-
if TYPE_CHECKING:
22-
from pre_commit.repository import Hook
23-
2421
ENVIRONMENT_DIR = 'golangenv'
2522
get_default_version = helpers.basic_get_default_version
2623
healthy = helpers.basic_healthy

pre_commit/languages/helpers.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,13 @@
88
from typing import overload
99
from typing import Sequence
1010
from typing import Tuple
11-
from typing import TYPE_CHECKING
1211

1312
import pre_commit.constants as C
13+
from pre_commit.hook import Hook
1414
from pre_commit.prefix import Prefix
1515
from pre_commit.util import cmd_output_b
1616
from pre_commit.xargs import xargs
1717

18-
if TYPE_CHECKING:
19-
from pre_commit.repository import Hook
20-
2118
FIXED_RANDOM_SEED = 1542676186
2219

2320

pre_commit/languages/node.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,19 @@
44
from typing import Generator
55
from typing import Sequence
66
from typing import Tuple
7-
from typing import TYPE_CHECKING
87

98
import pre_commit.constants as C
109
from pre_commit.envcontext import envcontext
1110
from pre_commit.envcontext import PatchesT
1211
from pre_commit.envcontext import Var
12+
from pre_commit.hook import Hook
1313
from pre_commit.languages import helpers
1414
from pre_commit.languages.python import bin_dir
1515
from pre_commit.prefix import Prefix
1616
from pre_commit.util import clean_path_on_failure
1717
from pre_commit.util import cmd_output
1818
from pre_commit.util import cmd_output_b
1919

20-
if TYPE_CHECKING:
21-
from pre_commit.repository import Hook
22-
2320
ENVIRONMENT_DIR = 'node_env'
2421
get_default_version = helpers.basic_get_default_version
2522
healthy = helpers.basic_healthy

0 commit comments

Comments
 (0)