Coverage for jsonschema_diff/core/abstraction.py: 94%
32 statements
« prev ^ index » next coverage.py v7.10.5, created at 2025-08-25 07:00 +0000
« prev ^ index » next coverage.py v7.10.5, created at 2025-08-25 07:00 +0000
1from enum import Enum
2from typing import Any
5class Statuses(Enum):
6 ADDED = "+"
7 DELETED = "-"
8 REPLACED = "r"
9 MODIFIED = "m"
10 NO_DIFF = " "
11 UNKNOWN = "?"
14class ToCompare:
15 def __init__(
16 self, old_key: str | None, old_value: Any, new_key: str | None, new_value: Any
17 ) -> None:
18 self.old_key = old_key
19 self.old_value = old_value
20 self.new_key = new_key
21 self.new_value = new_value
23 if old_key is None and new_key is not None:
24 self.status = Statuses.ADDED
25 self.key = new_key
26 self.value = new_value
27 elif old_key is not None and new_key is None:
28 self.status = Statuses.DELETED
29 self.key = old_key
30 self.value = old_value
31 elif old_key is not None and new_key is not None:
32 if str(new_value) == str(old_value):
33 self.status = Statuses.NO_DIFF
34 else:
35 self.status = Statuses.REPLACED
37 self.key = new_key
38 self.value = new_value
39 else:
40 raise ValueError(
41 "Cannot compare None to None: "
42 f"`{old_key}: {type(old_value).__name__} = {old_value}` -> "
43 f"`{new_key}: {type(new_value).__name__} = {new_value}`"
44 )
46 def __repr__(self) -> str:
47 return (
48 "ToCompare("
49 f"key={self.key}, old_value={self.old_value}, "
50 f"new_value={self.new_value}, status={self.status.name})"
51 )