forbid overriding entry for meta hooks

This commit is contained in:
Anthony Sottile 2021-12-31 17:31:12 -08:00
parent 16f68254a8
commit d3b4f737b9
2 changed files with 16 additions and 0 deletions

View file

@ -251,12 +251,21 @@ _meta = (
), ),
) )
class NotAllowed(cfgv.OptionalNoDefault):
def check(self, dct: Dict[str, Any]) -> None:
if self.key in dct:
raise cfgv.ValidationError(f'{self.key!r} cannot be overridden')
META_HOOK_DICT = cfgv.Map( META_HOOK_DICT = cfgv.Map(
'Hook', 'id', 'Hook', 'id',
cfgv.Required('id', cfgv.check_string), cfgv.Required('id', cfgv.check_string),
cfgv.Required('id', cfgv.check_one_of(tuple(k for k, _ in _meta))), cfgv.Required('id', cfgv.check_one_of(tuple(k for k, _ in _meta))),
# language must be system # language must be system
cfgv.Optional('language', cfgv.check_one_of({'system'}), 'system'), cfgv.Optional('language', cfgv.check_one_of({'system'}), 'system'),
# entry cannot be overridden
NotAllowed('entry', cfgv.check_any),
*( *(
# default to the hook definition for the meta hooks # default to the hook definition for the meta hooks
cfgv.ConditionalOptional(key, cfgv.check_any, value, 'id', hook_id) cfgv.ConditionalOptional(key, cfgv.check_any, value, 'id', hook_id)

View file

@ -423,6 +423,13 @@ def test_migrate_to_sha_ok():
{'repo': 'meta', 'hooks': [{'id': 'identity', 'language': 'python'}]}, {'repo': 'meta', 'hooks': [{'id': 'identity', 'language': 'python'}]},
# name override must be string # name override must be string
{'repo': 'meta', 'hooks': [{'id': 'identity', 'name': False}]}, {'repo': 'meta', 'hooks': [{'id': 'identity', 'name': False}]},
pytest.param(
{
'repo': 'meta',
'hooks': [{'id': 'identity', 'entry': 'echo hi'}],
},
id='cannot override entry for meta hooks',
),
), ),
) )
def test_meta_hook_invalid(config_repo): def test_meta_hook_invalid(config_repo):