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

1from enum import Enum 

2from typing import Any 

3 

4 

5class Statuses(Enum): 

6 ADDED = "+" 

7 DELETED = "-" 

8 REPLACED = "r" 

9 MODIFIED = "m" 

10 NO_DIFF = " " 

11 UNKNOWN = "?" 

12 

13 

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 

22 

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 

36 

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 ) 

45 

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 )