def _from_tree_type_changes(self, tree): if 'type_changes' in tree: for change in tree['type_changes']: include_values = None if type(change.t1) is type: include_values = False old_type = change.t1 new_type = change.t2 else: old_type = get_type(change.t1) new_type = get_type(change.t2) include_values = True try: if new_type in numpy_numbers: new_t1 = change.t1.astype(new_type) include_values = not np.array_equal( new_t1, change.t2) else: new_t1 = new_type(change.t1) # If simply applying the type from one value converts it to the other value, # there is no need to include the actual values in the delta. include_values = new_t1 != change.t2 except Exception: pass remap_dict = RemapDict({ 'old_type': old_type, 'new_type': new_type }) self['type_changes'][change.path( force=FORCE_DEFAULT)] = remap_dict if include_values: remap_dict.update(old_value=change.t1, new_value=change.t2)
def _get_pretty_format_args(diff, root): type_t1 = get_type(diff.t1).__name__ type_t2 = get_type(diff.t2).__name__ val_t1 = '"{}"'.format(str(diff.t1)) if type_t1 == "str" else str(diff.t1) val_t2 = '"{}"'.format(str(diff.t2)) if type_t2 == "str" else str(diff.t2) diff_path = diff.path(root) return diff_path, type_t1, type_t2, val_t1, val_t2
def pretty_print_diff(diff: DeepDiff) -> str: """Copy of deepdiff.serialization.pretty_print_diff to slighlty adapt the output format""" type_t1 = get_type(diff.t1).__name__ type_t2 = get_type(diff.t2).__name__ val_t1 = '"{}"'.format(str(diff.t1)) if type_t1 == "str" else str(diff.t1) val_t2 = '"{}"'.format(str(diff.t2)) if type_t2 == "str" else str(diff.t2) return PRETTY_FORM_TEXTS.get(diff.report_type, "").format(diff_path=diff_path(diff), type_t1=type_t1, type_t2=type_t2, val_t1=val_t1, val_t2=val_t2)
def __diff(self, level, parents_ids=frozenset({})): """The main diff method""" if level.t1 is level.t2: return if self.__skip_this(level): return if self.skip_after_n and self.total_diffed > self.skip_after_n: return self.total_diffed += 1 if get_type(level.t1) != get_type(level.t2): report_type_change = True for type_group in self.ignore_type_in_groups: if self.type_check_func(level.t1, type_group) and self.type_check_func( level.t2, type_group): report_type_change = False break if report_type_change: self.__diff_types(level) return if self.ignore_nan_inequality and isinstance( level.t1, float) and str(level.t1) == str(level.t2) == 'nan': return if isinstance(level.t1, strings): self.__diff_str(level) elif isinstance(level.t1, numbers): self.__diff_numbers(level) elif isinstance(level.t1, Mapping): self.__diff_dict(level, parents_ids) elif isinstance(level.t1, tuple): self.__diff_tuple(level, parents_ids) elif isinstance(level.t1, (set, frozenset, OrderedSet)): self.__diff_set(level) elif isinstance(level.t1, Iterable): if self.ignore_order: self.__diff_iterable_with_deephash(level) else: self.__diff_iterable(level, parents_ids) else: self.__diff_obj(level, parents_ids)
def pretty_print_diff(diff): type_t1 = get_type(diff.t1).__name__ type_t2 = get_type(diff.t2).__name__ val_t1 = '"{}"'.format(str(diff.t1)) if type_t1 == "str" else str(diff.t1) val_t2 = '"{}"'.format(str(diff.t2)) if type_t2 == "str" else str(diff.t2) diff_path = diff.path(root='root') return PRETTY_FORM_TEXTS.get(diff.report_type, "").format(diff_path=diff_path, type_t1=type_t1, type_t2=type_t2, val_t1=val_t1, val_t2=val_t2)
def _from_tree_type_changes(self, tree): if 'type_changes' in tree: for change in tree['type_changes']: if type(change.t1) is type: include_values = False old_type = change.t1 new_type = change.t2 else: include_values = True old_type = get_type(change.t1) new_type = get_type(change.t2) remap_dict = RemapDict({ 'old_type': old_type, 'new_type': new_type }) self['type_changes'][change.path( force=FORCE_DEFAULT)] = remap_dict if self.verbose_level and include_values: remap_dict.update(old_value=change.t1, new_value=change.t2)
def __diff(self, level, parents_ids=frozenset({})): """The main diff method""" if level.t1 is level.t2: return if self.__skip_this(level): return if get_type(level.t1) != get_type(level.t2): report_type_change = True for type_group in self.ignore_type_in_groups: if get_type(level.t1) in type_group and get_type( level.t2) in type_group: report_type_change = False break if report_type_change: self.__diff_types(level) return if isinstance(level.t1, strings): self.__diff_str(level) elif isinstance(level.t1, numbers): self.__diff_numbers(level) elif isinstance(level.t1, Mapping): self.__diff_dict(level, parents_ids) elif isinstance(level.t1, tuple): self.__diff_tuple(level, parents_ids) elif isinstance(level.t1, (set, frozenset, OrderedSet)): self.__diff_set(level) elif isinstance(level.t1, Iterable): if self.ignore_order: self.__diff_iterable_with_deephash(level) else: self.__diff_iterable(level, parents_ids) else: self.__diff_obj(level, parents_ids)
def __diff(self, level, parents_ids=frozenset({})): """The main diff method""" if level.t1 is level.t2: return if self.__skip_this(level): return if get_type(level.t1) != get_type(level.t2): report_type_change = True for type_group in self.ignore_type_in_groups: if self.type_check_func(level.t1, type_group) and self.type_check_func(level.t2, type_group): report_type_change = False break if report_type_change: self.__diff_types(level) return if isinstance(level.t1, strings): self.__diff_str(level) elif isinstance(level.t1, numbers): self.__diff_numbers(level) elif isinstance(level.t1, Mapping): self.__diff_dict(level, parents_ids) elif isinstance(level.t1, tuple): self.__diff_tuple(level, parents_ids) elif isinstance(level.t1, (set, frozenset, OrderedSet)): self.__diff_set(level) elif isinstance(level.t1, Iterable): if self.ignore_order: self.__diff_iterable_with_deephash(level) else: self.__diff_iterable(level, parents_ids) else: self.__diff_obj(level, parents_ids)