Skip to main content

Utility to diff classes

Project description

classdiff - Python Class Difffer

This is a small library to diff (data) classes or any other objects. It is intended two work one obejcts of the same time or NoneType. Diffing different classes is possible but might result in unexpected result. Different from most existing diff tools that produce data structures that show adds, removes or changes, this tool is intended to use for printing a dataclass and higlight the diff with different color coding, similar to the output of Terraform or Pulumi.

Usage

Just pass your classes to the diff function to get back a representation of the diff.

Given the following two classes:

new = SomeResource(
    name="my-data",
    price=2.3,
    quantity=4,
    dangerous=True,
    other=OtherClass(name="OA"),
    not_changed=OtherClass(name="Same"),
)

old = SomeResource(
    name="my-data",
    price=3.3,
    quantity=4,
    dangerous=False,
    other=OtherClass(name="OB"),
    not_changed=OtherClass(name="Same"),
)

Passing them to classdiff.diff in combinations of (None, new), (old, new) and (old, None) and printing the lines in the returned value, the following will be printed with colored output (green for added, red for removed and yellow for changed). Note that each element in the returned list is of type DiffInfo which implements __repr__ to print with proper prefix and color.

> diff(None, new)
----------------------------------------
+ SomeResource(
+   dangerous = True
+   name = my-data
+   not_changed = OtherClass(
+     name = Same
+   )
+   other = OtherClass(
+     name = OA
+   )
+   price = 2.3
+   quantity = 4
+ )

> diff(old, new)
----------------------------------------
~ SomeResource(
~   dangerous = False => True
    name = my-data
    not_changed = OtherClass(
      name = Same
    )
~   other = OtherClass(
~     name = OB => OA
~   )
~   price = 3.3 => 2.3
    quantity = 4
~ )

> diff(old, None)
----------------------------------------
- SomeResource(
-   dangerous = False
-   name = my-data
-   not_changed = OtherClass(
-     name = Same
-   )
-   other = OtherClass(
-     name = OB
-   )
-   price = 3.3
-   quantity = 4
- )

Development

All code is formatted and analyzed with ruff. Tests are run with pytest.

 poetry run ruff check .
› poetry run ruff format .
› poetry run mypy .
› poetry run pytest tests/

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

classdiff-0.5.0.tar.gz (8.5 kB view details)

Uploaded Source

Built Distribution

classdiff-0.5.0-py3-none-any.whl (8.7 kB view details)

Uploaded Python 3

File details

Details for the file classdiff-0.5.0.tar.gz.

File metadata

  • Download URL: classdiff-0.5.0.tar.gz
  • Upload date:
  • Size: 8.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.11.6 Darwin/23.5.0

File hashes

Hashes for classdiff-0.5.0.tar.gz
Algorithm Hash digest
SHA256 1224b5858e88b388acfe301f594a34b4b23245f5b02a3826f232c9a1c05e2073
MD5 779e44df734cff0c89377ac2b269b275
BLAKE2b-256 64ccb019afeb7fb18d08b4e11dcc18be461cdb5c6ee29140eb9ee91425ebf94f

See more details on using hashes here.

File details

Details for the file classdiff-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: classdiff-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 8.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.11.6 Darwin/23.5.0

File hashes

Hashes for classdiff-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2ea3765a76992a5b09ef224ddd8a044b6ac0f6856e01df0f3205c29a0af23828
MD5 fff85136bfc870bfda4fd4b62423cd90
BLAKE2b-256 20d7c0692275a877f1bc3a20ac7ef9e8067b10a3ef536316fce7de870fa7fa1f

See more details on using hashes here.

Supported by

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