Skip to content

Commit 4d19e49

Browse files
authored
Merge pull request #280 from havardthom/dev
Add support for UUIDs
2 parents 4c6fe59 + fecfdb8 commit 4d19e49

File tree

4 files changed

+81
-1
lines changed

4 files changed

+81
-1
lines changed

AUTHORS.md

+1
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,4 @@ Authors in order of the timeline of their contributions:
4141
- Sun Ao [eggachecat](https://github.com/eggachecat) for adding custom operators.
4242
- Sun Ao [eggachecat](https://github.com/eggachecat) for adding ignore_order_func.
4343
- [SlavaSkvortsov](https://github.com/SlavaSkvortsov) for fixing unprocessed key error.
44+
- [havardthom](https://github.com/havardthom) for adding UUID support.

deepdiff/diff.py

+9-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from collections import defaultdict
1414
from itertools import zip_longest
1515
from ordered_set import OrderedSet
16-
from deepdiff.helper import (strings, bytes_type, numbers, times, ListItemRemovedOrAdded, notpresent,
16+
from deepdiff.helper import (strings, bytes_type, numbers, uuids, times, ListItemRemovedOrAdded, notpresent,
1717
IndexedHash, unprocessed, add_to_frozen_set,
1818
convert_item_or_items_into_set_else_none, get_type,
1919
convert_item_or_items_into_compiled_regexes_else_none,
@@ -1148,6 +1148,11 @@ def _diff_datetimes(self, level):
11481148
if level.t1 != level.t2:
11491149
self._report_result('values_changed', level)
11501150

1151+
def _diff_uuids(self, level):
1152+
"""Diff UUIDs"""
1153+
if level.t1.int != level.t2.int:
1154+
self._report_result('values_changed', level)
1155+
11511156
def _diff_numpy_array(self, level, parents_ids=frozenset()):
11521157
"""Diff numpy arrays"""
11531158
if level.path() not in self._numpy_paths:
@@ -1318,6 +1323,9 @@ def _diff(self, level, parents_ids=frozenset(), _original_type=None):
13181323
elif isinstance(level.t1, times):
13191324
self._diff_datetimes(level)
13201325

1326+
elif isinstance(level.t1, uuids):
1327+
self._diff_uuids(level)
1328+
13211329
elif isinstance(level.t1, numbers):
13221330
self._diff_numbers(level)
13231331

deepdiff/helper.py

+2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import re
33
import os
44
import datetime
5+
import uuid
56
import logging
67
import warnings
78
import time
@@ -126,6 +127,7 @@ def copy(self): # pragma: no cover. Only used in pypy3 and py3.5
126127
bytes_type = bytes
127128
only_numbers = (int, float, complex, Decimal) + numpy_numbers
128129
datetimes = (datetime.datetime, datetime.date, datetime.timedelta, datetime.time)
130+
uuids = (uuid.UUID)
129131
times = (datetime.datetime, datetime.time)
130132
numbers = only_numbers + datetimes
131133
booleans = (bool, np_bool_)

tests/test_diff_text.py

+69
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import datetime
33
import pytest
44
import logging
5+
import uuid
56
from decimal import Decimal
67
from deepdiff import DeepDiff
78
from deepdiff.helper import pypy3
@@ -157,6 +158,74 @@ def test_diffs_times(self):
157158
assert DeepDiff(t1, t2) == expected_result
158159
assert DeepDiff(t1, t3) == {}
159160

161+
def test_diffs_uuid1(self):
162+
t1 = uuid.uuid1()
163+
t2 = uuid.uuid1()
164+
ddiff = DeepDiff(t1, t2)
165+
result = {
166+
'values_changed': {
167+
'root': {
168+
'new_value': t2,
169+
'old_value': t1
170+
}
171+
}
172+
}
173+
assert result == ddiff
174+
ddiff = DeepDiff(t1, t1)
175+
result = {}
176+
assert result == ddiff
177+
178+
def test_diffs_uuid3(self):
179+
t1 = uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org')
180+
t2 = uuid.uuid3(uuid.NAMESPACE_DNS, 'stackoverflow.com')
181+
ddiff = DeepDiff(t1, t2)
182+
result = {
183+
'values_changed': {
184+
'root': {
185+
'new_value': t2,
186+
'old_value': t1
187+
}
188+
}
189+
}
190+
assert result == ddiff
191+
ddiff = DeepDiff(t1, t1)
192+
result = {}
193+
assert result == ddiff
194+
195+
def test_diffs_uuid4(self):
196+
t1 = uuid.uuid4()
197+
t2 = uuid.uuid4()
198+
ddiff = DeepDiff(t1, t2)
199+
result = {
200+
'values_changed': {
201+
'root': {
202+
'new_value': t2,
203+
'old_value': t1
204+
}
205+
}
206+
}
207+
assert result == ddiff
208+
ddiff = DeepDiff(t1, t1)
209+
result = {}
210+
assert result == ddiff
211+
212+
def test_diffs_uuid5(self):
213+
t1 = uuid.uuid5(uuid.NAMESPACE_DNS, 'python.org')
214+
t2 = uuid.uuid5(uuid.NAMESPACE_DNS, 'stackoverflow.com')
215+
ddiff = DeepDiff(t1, t2)
216+
result = {
217+
'values_changed': {
218+
'root': {
219+
'new_value': t2,
220+
'old_value': t1
221+
}
222+
}
223+
}
224+
assert result == ddiff
225+
ddiff = DeepDiff(t1, t1)
226+
result = {}
227+
assert result == ddiff
228+
160229
def test_string_difference(self):
161230
t1 = {1: 1, 2: 2, 3: 3, 4: {"a": "hello", "b": "world"}}
162231
t2 = {1: 1, 2: 4, 3: 3, 4: {"a": "hello", "b": "world!"}}

0 commit comments

Comments
 (0)