Coverage for genschema / comparators / no_additional_prop.py: 100%
9 statements
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-14 22:23 +0000
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-14 22:23 +0000
1from typing import Any
3from .template import Comparator, ComparatorResult, ProcessingContext, ToDelete
6class NoAdditionalProperties(Comparator):
7 """
8 Компаратор, который всегда добавляет additionalProperties: false
9 ко всем объектам (type: "object"), если это поле ещё не задано.
11 Работает только на уровне объектов.
12 Не перезаписывает уже существующие значения additionalProperties.
13 """
15 name = "no_additional_properties"
17 def can_process(self, ctx: ProcessingContext, env: str, node: dict) -> bool:
18 # Обрабатываем только те узлы, где уже определён тип object
19 # и additionalProperties ещё не задан
20 return node.get("type") == "object" and "additionalProperties" not in node
22 def process(self, ctx: ProcessingContext, env: str, node: dict) -> ComparatorResult:
23 """
24 Добавляет additionalProperties: false, если его ещё нет.
25 Возвращает обновление только для текущего узла.
26 """
27 updated: dict[str, ToDelete | Any | bool] = {"additionalProperties": False}
28 return updated, None