Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def deep_equals(self, dst):
deep = DeepComparison(self._src, dst)
comparison = deep.compare()
if isinstance(comparison, bool):
return comparison
raise comparison.as_assertion(self._src, dst)
msg = "X{0} does not have the key {1!r} whereas Y{2} has it".format(
red(c.current_X_keys),
safe_repr(diff_y[0]),
green(c.current_Y_keys))
return DeepExplanation(msg)
elif X == Y:
return True
else:
for key_X in x_keys:
self.key_X = key_X
self.key_Y = key_X
value_X = X[key_X]
value_Y = Y[key_X]
child = DeepComparison(
value_X,
value_Y,
epsilon=self.epsilon,
parent=self,
).compare()
if isinstance(child, DeepExplanation):
return child
def equal(self, what, epsilon=None):
"""compares given object ``X`` with an expected ``Y`` object.
It primarily assures that the compared objects are absolute equal ``==``.
:param what: the expected value
:param epsilon: a delta to leverage upper-bound floating point permissiveness
"""
try:
comparison = DeepComparison(self.obj, what, epsilon).compare()
error = False
except AssertionError as e:
error = e
comparison = None
if isinstance(comparison, DeepExplanation):
error = comparison.get_assertion(self.obj, what)
if self.negative:
if error:
return True
msg = '%s should differ from %s, but is the same thing'
raise AssertionError(msg % (safe_repr(self.obj), safe_repr(what)))
else:
def compare_iterables(self, X, Y):
len_X, len_Y = map(len, (X, Y))
if len_X > len_Y:
msg = "X has {0} items whereas Y has only {1}".format(len_X, len_Y)
return DeepExplanation(msg)
elif len_X < len_Y:
msg = "Y has {0} items whereas X has only {1}".format(len_Y, len_X)
return DeepExplanation(msg)
elif X == Y:
return True
else:
for i, (value_X, value_Y) in enumerate(zip(X, Y)):
self.key_X = self.key_Y = i
child = DeepComparison(
value_X,
value_Y,
epsilon=self.epsilon,
parent=self,
).compare()
if isinstance(child, DeepExplanation):
return child