29 января 2011 г.

DataDiff - человеко-понятные диффы для питоновских структур

Не знаю как Вам, а мне иногда очень не хватает возможности стандартного diff для сравнения двух питоновских кортежей или словарей. Особенно хочется получать такой дифф в тестах.

И как оказалось, Dave Brondsema реализовал все мои хотелки в своей библиотеке datadiff. На данный момент datadiff умеет сравнивать две структуры и обладает заменителем nose.tools.assert_equal:

>>> from datadiff import diff
>>> a = dict(foo=1, bar=2, baz=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
>>> b = dict(foo=1, bar=4, baz=[0, 1, 2, 3, 4, 5, 6, 7, 8])
>>> print diff(a, b)
--- a
+++ b
{
-'bar': 2,
+'bar': 4,
 'baz': [
 @@ -5,11 +5,8 @@
  6,
  7,
  8,
 -9,
 -10,
 -11,
 ],
 'foo': 1,
}
>>> from datadiff.tools import assert_equal
>>> assert_equal([1, 2, 3], [1, 2, 5])
Traceback (most recent call last):
  File "", line 1, in 
  File "datadiff/tools.py", line 29, in assert_equal
    raise AssertionError(msg)
AssertionError:
--- a
+++ b
[
@@ -0,2 +0,2 @@
 1,
 2,
-3,
+5,
]

Выглядит замечательно и я в ближайшее время добавлю поддержку datadiff, в tddspry.

blog comments powered by Disqus