Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 15 additions & 3 deletions src/pytest_deepassert/api.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,29 @@
from typing import Any

import pytest

from pytest_deepassert import diff_report


def equal(left: Any, right: Any) -> None:
def equal(left: Any, right: Any, verbose_level: int = 2) -> None:
"""
Assert that two objects are equal.
In case of inequality, a detailed diff report is generated for an assertion.

Args:
left: The left object.
right: The right object.
verbose_level: The level of verbosity for the diff report.
"""
assert left == right, diff_report.format_diff_report_lines(
diff_report.generate_diff_report_lines(left, right) or []
__tracebackhide__ = True

if left == right or right == left:
# Check the equality from both sides to avoid unnecessary diff report generation
# when one of the objects a special comparison helper type, for example mock.ANY or pytest.approx(...) instance.
return None

diff_message = diff_report.format_diff_report_lines(
diff_report.generate_diff_report_lines(left, right, verbose_level=verbose_level)
or []
)
pytest.fail(diff_message)
10 changes: 5 additions & 5 deletions src/pytest_deepassert/diff_report/report_generator.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import Any, Optional, List
from typing import Any, List

from . import compare_helpers_deepdiff_operator
import deepdiff
Expand All @@ -9,8 +9,8 @@


def generate_diff_report_lines(
expected: Any, actual: Any, **kwargs: Any
) -> Optional[List[str]]:
expected: Any, actual: Any, verbose_level: int = 2, **kwargs: Any
) -> List[str]:
try:
custom_operator = (
compare_helpers_deepdiff_operator.COMPARE_HELPERS_DEEPDIFF_OPERATOR
Expand All @@ -20,14 +20,14 @@ def generate_diff_report_lines(
expected,
actual,
custom_operators=[custom_operator],
verbose_level=2,
verbose_level=verbose_level,
**kwargs,
)

return diff.pretty().split("\n")
except Exception:
LOGGER.debug("Failed to generate diff report", exc_info=True)
return None
return []


def format_diff_report_lines(diff_report_lines: List[str]) -> str:
Expand Down
2 changes: 1 addition & 1 deletion src/pytest_deepassert/plugin/hook.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ def pytest_assertrepr_compare(

diff_lines = diff_report.generate_diff_report_lines(expected=left, actual=right)

if diff_lines is None or len(diff_lines) == 0:
if len(diff_lines) == 0:
return None

result = []
Expand Down