Mercurial > hgrepos > Python > libs > data-schema
diff data_schema/__init__.py @ 38:5a2fba996773
Implement a "forbidden" schema field for dicts
| author | Franz Glasner <f.glasner@feldmann-mg.com> |
|---|---|
| date | Wed, 19 Jul 2023 13:30:55 +0200 |
| parents | ef586378f79a |
| children | 78f5ef0ee087 |
line wrap: on
line diff
--- a/data_schema/__init__.py Wed Jul 19 13:26:06 2023 +0200 +++ b/data_schema/__init__.py Wed Jul 19 13:30:55 2023 +0200 @@ -118,6 +118,7 @@ E10056 = NC_("schema-msg", "failing `any-of' item") E10057 = NC_("schema-msg", "`all-of' failed") E10058 = NC_("schema-msg", "failing `all-of' item") + E10059 = NC_("schema-msg", "forbidden key detected") @enum.unique @@ -738,6 +739,14 @@ if not required_keys <= seen_keys: hs = [str(i) for i in required_keys - seen_keys] yield ValidationProblem(code=ERRORS.E10005, hint=sorted(hs), context=context) + # check whether no forbidden keys are seen + try: + forbidden_keys = set(schema.get("forbidden", set())) + except (TypeError, ValueError): + raise SchemaError("`forbidden` must be an iterable") + if forbidden_keys & seen_keys: + hs = [str(i) for i in forbidden_keys & seen_keys] + yield ValidationProblem(code=ERRORS.E10059, hint=sorted(hs), context=context) def validate_list(obj, schema, context):
