Skip to main content

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

odiff-0.1.7.tar.gz (9.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

odiff-0.1.7-py3-none-any.whl (10.9 kB view details)

Uploaded Python 3

File details

Details for the file odiff-0.1.7.tar.gz.

File metadata

  • Download URL: odiff-0.1.7.tar.gz
  • Upload date:
  • Size: 9.9 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

Hashes for odiff-0.1.7.tar.gz
Algorithm Hash digest
SHA256 7a22cf3f78befc91434bafb610e61385f1e0ed5e51f26a17648d41abc3c65d69
MD5 524c363d9b1af0ca28fcfb06109e2455
BLAKE2b-256 86ac6c25b238da059f5af1973da56372d5acb7ab059759be320ecf9c4e92f3c3

See more details on using hashes here.

File details

Details for the file odiff-0.1.7-py3-none-any.whl.

File metadata

  • Download URL: odiff-0.1.7-py3-none-any.whl
  • Upload date:
  • Size: 10.9 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

Hashes for odiff-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 e21e4fb3126f4f952b96930e0e9b68ff5da45a2678877be7172850cf51e6d527
MD5 94ec915d436bfa0472375e16515b9dac
BLAKE2b-256 030068dd125e4777ecaa09252d56702f656f5baccfa77e93c5cf83ad3965a02f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page