No project description provided
Project description
Object Diff
Object diff (odiff) is a little tool/library for diffing objects - it's a little specific in a couple of places to a thing I'm doing at work but it might be useful elsewhere.
Essentially, you feed it two files, JSON or YAML, to compare and discrepancies are listed in the console.
Usage
usage: odiff [-h] [--log-level LOG_LEVEL] [--output-type OUTPUT_TYPE]
[--list-cfg LIST_CFG]
[files ...]
positional arguments:
files two files to diff
options:
-h, --help show this help message and exit
--log-level LOG_LEVEL
log level name
--output-type OUTPUT_TYPE, --output OUTPUT_TYPE, -o OUTPUT_TYPE
report output flavour
--config CONFIG, -c CONFIG
yaml config file
Example Output
odiff -c aux/eg-cfg.yaml aux/eg1.json aux/eg2.json
[WARN:odiff] Discrepancy found for path '.alpha' but was excluded
╭──────────────┬────────────┬────────────────┬───────────────────────╮
│ Variant │ Path │ Lvalue │ Rvalue │
├──────────────┼────────────┼────────────────┼───────────────────────┤
│ modification │ .beta │ world │ , world │
├──────────────┼────────────┼────────────────┼───────────────────────┤
│ subtraction │ .gamma[] │ None │ [ │
│ │ │ │ "isn't", │
│ │ │ │ "not-in-eg1" │
│ │ │ │ ] │
├──────────────┼────────────┼────────────────┼───────────────────────┤
│ addition │ .gamma[] │ [ │ None │
│ │ │ "is", │ │
│ │ │ "not-in-eg2" │ │
│ │ │ ] │ │
├──────────────┼────────────┼────────────────┼───────────────────────┤
│ subtraction │ .delta[ │ None │ { │
│ │ Ct2fhriU │ │ "_id": "Ct2fhriU", │
│ │ ] │ │ "key1": "i'm added" │
│ │ │ │ } │
├──────────────┼────────────┼────────────────┼───────────────────────┤
│ modification │ .delta[ │ value0 │ i've been modified │
│ │ vCjpIL2A │ │ │
│ │ ].key0 │ │ │
╰──────────────┴────────────┴────────────────┴───────────────────────╯
Instead of using a configuration file (see Configuration) you can also provide the same configuration directly in the command:
odiff aux/eg1.json aux/eg2.json --li '.delta: _id' --exc '.alpha'
Configuration
List Index Configuration
You may have spotted in the Example Output that we pass the -c option (--list-config) and that the output made use of this key in the children of .delta to "align" the list elements together - this allows us to diff matching objects despite them not necessarily being the correct order.
The format of this is a simple string-string, key-value pairing in YAML, e.g.:
.delta: _id
You can see it takes a JQ-ish form for the object pathing. So, if your input is a list of object, you should provide an index for the . key.
Exclusions
Another thing you may have spotted in the output is the log line at the top about the excluded discrepancy on .alpha.
This is what the .exclusions list is for, anything you wish to ignore in either the left or right file can be listed here.
Contributing
This repo uses Pre-commit for some sanity checks, so:
pre-commit install
There are literally zero tests aside the examples...
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file odiff-0.1.6.tar.gz.
File metadata
- Download URL: odiff-0.1.6.tar.gz
- Upload date:
- Size: 9.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.11.9 Linux/6.5.0-1022-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
12941d07583699630ba79503251cc7636ff4c4a9d642b58f3e2395ef2497442a
|
|
| MD5 |
6cdb54213c71edfead059efc4486d1dc
|
|
| BLAKE2b-256 |
69cb67968aa772f8a361e8d3cac79470f70258e90cbaad6e0344ba5f947d741c
|
File details
Details for the file odiff-0.1.6-py3-none-any.whl.
File metadata
- Download URL: odiff-0.1.6-py3-none-any.whl
- Upload date:
- Size: 10.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.11.9 Linux/6.5.0-1022-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dfdedf039705fafb89aba3b1e45ae6df1fe7288cb1f3fa33f9e59fdbda890a50
|
|
| MD5 |
2b05d2e714aefa752cb412b248db13af
|
|
| BLAKE2b-256 |
e08d82366f3cd79066f6251c76b2fcbc3b463cb3d47b0a2c788ea5721e92b91a
|