Eu escrevi o seguinte teste simples:
teste profundo.py
from deepdiff import DeepDiff, Delta
dict1 = {'catalog': {'uuid': 'e95fb23c-57d2-495f-8ab5-2c6b3152bcee', 'metadata': {'title': 'Catalog', 'last-modified': '2025-04-10T16:00:34.033789-05:00', 'version': '1.0', 'oscal-version': '1.1.2'}, 'controls': [{'id': 'ac-1', 'title': 'Access Control', 'parts': [{'id': 'ac-1_stmt', 'name': 'statement', 'prose': 'Access control text.'}]}]}}
dict2 = {}
diff = DeepDiff(dict1, dict2)
print(diff)
delta = Delta(diff)
print(f'delta {delta}')
No console observo:
$ python python/deep_test.py
{'dictionary_item_removed': ["root['catalog']"]}
delta <Delta: {"dictionary_item_removed":{"root['catalog']":{"uuid":""}}}>
Minha pergunta/problema é que o delta deveria ser a totalidade do dict1, mas nem tudo é mostrado... por quê?
Um DeepDiff retorna um objeto que já calculou a diferença entre os dois itens. O formato do objeto é escolhido pelo
view
parâmetro. Por padrão, ele usaview=’text’
, mas também hátree
view, que é mais complexo e detalhado, epretty()
method. Você pode ler sobre isso na documentação.Mas o que você provavelmente quer dizer é
verbose_level
opçãoUm nível mais alto de verbose mostra mais detalhes. Por exemplo, o nível 1 de verbose mostra quais itens do dicionário foram adicionados ou removidos. E o nível 2 de verbose mostra o valor dos itens adicionados ou removidos também.
Saída:
{'dictionary_item_removed': {"root['catalog']": {'uuid': 'e95fb23c-57d2-495f-8ab5-2c6b3152bcee', 'metadata': {'title': 'Catalog', 'last-modified': '2025-04-10T16:00:34.033789-05:00', 'version': '1.0', 'oscal-version': '1.1.2'}, 'controls': [{'id': 'ac-1', 'title': 'Access Control', 'parts': [{'id': 'ac-1_stmt', 'name': 'statement', 'prose': 'Access control text.'}]}]}}} delta <Delta: {"dictionary_item_removed":{"root['catalog']":{"uuid":""}}}>