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

1from typing import Any 

2 

3from .template import Comparator, ComparatorResult, ProcessingContext, ToDelete 

4 

5 

6class NoAdditionalProperties(Comparator): 

7 """ 

8 Компаратор, который всегда добавляет additionalProperties: false 

9 ко всем объектам (type: "object"), если это поле ещё не задано. 

10 

11 Работает только на уровне объектов. 

12 Не перезаписывает уже существующие значения additionalProperties. 

13 """ 

14 

15 name = "no_additional_properties" 

16 

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 

21 

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