Skip to content

Commit bdad930

Browse files
committed
Move pre_commit.schema to cfgv library
1 parent 8bb4d63 commit bdad930

File tree

9 files changed

+58
-791
lines changed

9 files changed

+58
-791
lines changed

pre_commit/clientlib.py

Lines changed: 42 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,18 @@
55
import collections
66
import functools
77

8+
import cfgv
89
from aspy.yaml import ordered_load
910
from identify.identify import ALL_TAGS
1011

1112
import pre_commit.constants as C
12-
from pre_commit import schema
1313
from pre_commit.error_handler import FatalError
1414
from pre_commit.languages.all import all_languages
1515

1616

17-
def check_language(v):
18-
if v not in all_languages:
19-
raise schema.ValidationError(
20-
'Expected {} to be in {!r}'.format(v, all_languages),
21-
)
22-
23-
2417
def check_type_tag(tag):
2518
if tag not in ALL_TAGS:
26-
raise schema.ValidationError(
19+
raise cfgv.ValidationError(
2720
'Type tag {!r} is not recognized. '
2821
'Try upgrading identify and pre-commit?'.format(tag),
2922
)
@@ -36,49 +29,48 @@ def _make_argparser(filenames_help):
3629
return parser
3730

3831

39-
MANIFEST_HOOK_DICT = schema.Map(
32+
MANIFEST_HOOK_DICT = cfgv.Map(
4033
'Hook', 'id',
4134

42-
schema.Required('id', schema.check_string),
43-
schema.Required('name', schema.check_string),
44-
schema.Required('entry', schema.check_string),
45-
schema.Required(
46-
'language', schema.check_and(schema.check_string, check_language),
35+
cfgv.Required('id', cfgv.check_string),
36+
cfgv.Required('name', cfgv.check_string),
37+
cfgv.Required('entry', cfgv.check_string),
38+
cfgv.Required(
39+
'language',
40+
cfgv.check_and(cfgv.check_string, cfgv.check_one_of(all_languages)),
4741
),
4842

49-
schema.Optional(
50-
'files', schema.check_and(schema.check_string, schema.check_regex),
51-
'',
43+
cfgv.Optional(
44+
'files', cfgv.check_and(cfgv.check_string, cfgv.check_regex), '',
5245
),
53-
schema.Optional(
54-
'exclude', schema.check_and(schema.check_string, schema.check_regex),
55-
'^$',
46+
cfgv.Optional(
47+
'exclude', cfgv.check_and(cfgv.check_string, cfgv.check_regex), '^$',
5648
),
57-
schema.Optional('types', schema.check_array(check_type_tag), ['file']),
58-
schema.Optional('exclude_types', schema.check_array(check_type_tag), []),
49+
cfgv.Optional('types', cfgv.check_array(check_type_tag), ['file']),
50+
cfgv.Optional('exclude_types', cfgv.check_array(check_type_tag), []),
5951

60-
schema.Optional(
61-
'additional_dependencies', schema.check_array(schema.check_string), [],
52+
cfgv.Optional(
53+
'additional_dependencies', cfgv.check_array(cfgv.check_string), [],
6254
),
63-
schema.Optional('args', schema.check_array(schema.check_string), []),
64-
schema.Optional('always_run', schema.check_bool, False),
65-
schema.Optional('pass_filenames', schema.check_bool, True),
66-
schema.Optional('description', schema.check_string, ''),
67-
schema.Optional('language_version', schema.check_string, 'default'),
68-
schema.Optional('log_file', schema.check_string, ''),
69-
schema.Optional('minimum_pre_commit_version', schema.check_string, '0'),
70-
schema.Optional('stages', schema.check_array(schema.check_string), []),
71-
schema.Optional('verbose', schema.check_bool, False),
55+
cfgv.Optional('args', cfgv.check_array(cfgv.check_string), []),
56+
cfgv.Optional('always_run', cfgv.check_bool, False),
57+
cfgv.Optional('pass_filenames', cfgv.check_bool, True),
58+
cfgv.Optional('description', cfgv.check_string, ''),
59+
cfgv.Optional('language_version', cfgv.check_string, 'default'),
60+
cfgv.Optional('log_file', cfgv.check_string, ''),
61+
cfgv.Optional('minimum_pre_commit_version', cfgv.check_string, '0'),
62+
cfgv.Optional('stages', cfgv.check_array(cfgv.check_string), []),
63+
cfgv.Optional('verbose', cfgv.check_bool, False),
7264
)
73-
MANIFEST_SCHEMA = schema.Array(MANIFEST_HOOK_DICT)
65+
MANIFEST_SCHEMA = cfgv.Array(MANIFEST_HOOK_DICT)
7466

7567

7668
class InvalidManifestError(FatalError):
7769
pass
7870

7971

8072
load_manifest = functools.partial(
81-
schema.load_from_filename,
73+
cfgv.load_from_filename,
8274
schema=MANIFEST_SCHEMA,
8375
load_strategy=ordered_load,
8476
exc_tp=InvalidManifestError,
@@ -101,40 +93,40 @@ def validate_manifest_main(argv=None):
10193
_LOCAL_SENTINEL = 'local'
10294
_META_SENTINEL = 'meta'
10395

104-
CONFIG_HOOK_DICT = schema.Map(
96+
CONFIG_HOOK_DICT = cfgv.Map(
10597
'Hook', 'id',
10698

107-
schema.Required('id', schema.check_string),
99+
cfgv.Required('id', cfgv.check_string),
108100

109101
# All keys in manifest hook dict are valid in a config hook dict, but
110102
# are optional.
111103
# No defaults are provided here as the config is merged on top of the
112104
# manifest.
113105
*[
114-
schema.OptionalNoDefault(item.key, item.check_fn)
106+
cfgv.OptionalNoDefault(item.key, item.check_fn)
115107
for item in MANIFEST_HOOK_DICT.items
116108
if item.key != 'id'
117109
]
118110
)
119-
CONFIG_REPO_DICT = schema.Map(
111+
CONFIG_REPO_DICT = cfgv.Map(
120112
'Repository', 'repo',
121113

122-
schema.Required('repo', schema.check_string),
123-
schema.RequiredRecurse('hooks', schema.Array(CONFIG_HOOK_DICT)),
114+
cfgv.Required('repo', cfgv.check_string),
115+
cfgv.RequiredRecurse('hooks', cfgv.Array(CONFIG_HOOK_DICT)),
124116

125-
schema.Conditional(
126-
'sha', schema.check_string,
117+
cfgv.Conditional(
118+
'sha', cfgv.check_string,
127119
condition_key='repo',
128-
condition_value=schema.NotIn(_LOCAL_SENTINEL, _META_SENTINEL),
120+
condition_value=cfgv.NotIn(_LOCAL_SENTINEL, _META_SENTINEL),
129121
ensure_absent=True,
130122
),
131123
)
132-
CONFIG_SCHEMA = schema.Map(
124+
CONFIG_SCHEMA = cfgv.Map(
133125
'Config', None,
134126

135-
schema.RequiredRecurse('repos', schema.Array(CONFIG_REPO_DICT)),
136-
schema.Optional('exclude', schema.check_regex, '^$'),
137-
schema.Optional('fail_fast', schema.check_bool, False),
127+
cfgv.RequiredRecurse('repos', cfgv.Array(CONFIG_REPO_DICT)),
128+
cfgv.Optional('exclude', cfgv.check_regex, '^$'),
129+
cfgv.Optional('fail_fast', cfgv.check_bool, False),
138130
)
139131

140132

@@ -160,7 +152,7 @@ def ordered_load_normalize_legacy_config(contents):
160152

161153

162154
load_config = functools.partial(
163-
schema.load_from_filename,
155+
cfgv.load_from_filename,
164156
schema=CONFIG_SCHEMA,
165157
load_strategy=ordered_load_normalize_legacy_config,
166158
exc_tp=InvalidConfigError,

pre_commit/commands/autoupdate.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
from aspy.yaml import ordered_dump
88
from aspy.yaml import ordered_load
9+
from cfgv import remove_defaults
910

1011
import pre_commit.constants as C
1112
from pre_commit import output
@@ -15,7 +16,6 @@
1516
from pre_commit.clientlib import load_config
1617
from pre_commit.commands.migrate_config import migrate_config
1718
from pre_commit.repository import Repository
18-
from pre_commit.schema import remove_defaults
1919
from pre_commit.util import CalledProcessError
2020
from pre_commit.util import cmd_output
2121
from pre_commit.util import cwd

pre_commit/meta_hooks/check_useless_excludes.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
import argparse
44
import re
55

6+
from cfgv import apply_defaults
7+
68
import pre_commit.constants as C
79
from pre_commit import git
810
from pre_commit.clientlib import load_config
911
from pre_commit.clientlib import MANIFEST_HOOK_DICT
10-
from pre_commit.schema import apply_defaults
1112

1213

1314
def exclude_matches_any(filenames, include, exclude):

pre_commit/repository.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
import pkg_resources
1313
from cached_property import cached_property
14+
from cfgv import apply_defaults
15+
from cfgv import validate
1416

1517
import pre_commit.constants as C
1618
from pre_commit import five
@@ -22,8 +24,6 @@
2224
from pre_commit.languages.all import languages
2325
from pre_commit.languages.helpers import environment_dir
2426
from pre_commit.prefix import Prefix
25-
from pre_commit.schema import apply_defaults
26-
from pre_commit.schema import validate
2727

2828

2929
logger = logging.getLogger('pre_commit')

0 commit comments

Comments
 (0)