Skip to main content

ocdiff

Fast and simple side-by-side diff library for Python - wraps similar, inspired by icdiff.

Usage

pip install ocdiff
ocdiff.html_diff(
    a: str,
    b: str,
    context_lines: int | None = None,
    max_total_width: int | None = None,
) -> str
ocdiff.console_diff(
    a: str,
    b: str,
    context_lines: int | None = None,
    max_total_width: int | None = None,
) -> str

Example Output

Screenshot

CLI usage

ocdiff a.txt b.txt

Usage in pytest with rich

In your conftest.py, add:

import ocdiff
import ocdiff.helpers
import rich.console

def rich_repr(o: Any) -> str:
    string_io = io.StringIO()
    rich.console.Console(
        file=string_io,
        width=ocdiff.helpers.terminal_width() // 2 - 10,
        tab_size=4,
        no_color=True,
        highlight=False,
        log_time=False,
        log_path=False,
    ).print(o)
    string_io.seek(0)
    return string_io.getvalue()


def pytest_assertrepr_compare(config: Any, op: str, left: Any, right: Any) -> list[str] | None:
    very_verbose = config.option.verbose >= 2
    if not very_verbose:
        return None

    if op != "==":
        return None

    try:
        if abs(left + right) < 100:
            return None
    except TypeError:
        pass

    try:
        if isinstance(left, str) and isinstance(right, str):
            pretty_left = left
            pretty_right = right
        else:
            pretty_left = rich_repr(left)
            pretty_right = rich_repr(right)
        return ocdiff.console_diff(
            pretty_left,
            pretty_right,
            context_lines=10,
            max_total_width=ocdiff.helpers.terminal_width() - len("E     "),
        ).splitlines()
    except Exception:
        return None



Install/Develop

uv pip install -e '.[dev]'
maturin develop

Make release

  • Add pypi token and user = __token__ to settings (do this once).
  • Upversion pyproject.toml.
export VERSION=$(python -c 'import tomllib; print(tomllib.load(open("pyproject.toml", "rb"))["project"]["version"])'); git tag -a v$VERSION head -m v$VERSION && git push origin v$VERSION

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

ocdiff-0.0.44-cp314-cp314-manylinux_2_28_x86_64.whl (276.1 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

ocdiff-0.0.44-cp314-cp314-manylinux_2_28_aarch64.whl (257.1 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

ocdiff-0.0.44-cp314-cp314-macosx_11_0_arm64.whl (239.5 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

ocdiff-0.0.44-cp313-cp313-manylinux_2_28_x86_64.whl (276.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

ocdiff-0.0.44-cp313-cp313-manylinux_2_28_aarch64.whl (257.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

ocdiff-0.0.44-cp313-cp313-macosx_11_0_arm64.whl (239.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

ocdiff-0.0.44-cp312-cp312-manylinux_2_28_x86_64.whl (276.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

ocdiff-0.0.44-cp312-cp312-manylinux_2_28_aarch64.whl (257.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

ocdiff-0.0.44-cp312-cp312-macosx_11_0_arm64.whl (239.7 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

ocdiff-0.0.44-cp311-cp311-manylinux_2_28_x86_64.whl (277.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

ocdiff-0.0.44-cp311-cp311-manylinux_2_28_aarch64.whl (258.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

ocdiff-0.0.44-cp311-cp311-macosx_11_0_arm64.whl (240.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

Details for the file ocdiff-0.0.44-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ocdiff-0.0.44-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 84ebf2374137c82a8a832de70e32bc3d672cb3f714fa449ab13de23e0bd29c0b
MD5 ba28eb16e1214ec8345bd99afe4306c3
BLAKE2b-256 0ec36c0ba6b767059d9a7f14d8605678e21af4942c097913689f2ccb13080002

See more details on using hashes here.

File details

Details for the file ocdiff-0.0.44-cp314-cp314-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for ocdiff-0.0.44-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 14f69f8ec9f601cb07aa3b8afdd1e84455267ce0495b317402bebb6ab7e5c48e
MD5 378e68a3cac56e36b25940fb0bf164e2
BLAKE2b-256 80523fa60f9c28bf6a6ef00ae84f960714163325856036ba0baaca1fb050b60b

See more details on using hashes here.

File details

Details for the file ocdiff-0.0.44-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ocdiff-0.0.44-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 32e2e1c7b3bbf257dc9d57fa27f1b09882caf68071e4e2b76b8a8fd529e497e2
MD5 56e7ca53491a78d168a4b67334ccfbb9
BLAKE2b-256 88219b7d4f811f9a2bfab19f7cef2be4ec4d7a27502d0310f36ede2a8665a886

See more details on using hashes here.

File details

Details for the file ocdiff-0.0.44-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ocdiff-0.0.44-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 598fb4c1b5013c1304226ff9db61da6382b3761f7f3b9864fc4615a4a8c25141
MD5 16fdbc0be50114499e505e7bb57a0fce
BLAKE2b-256 185b235483ea80d44f3c8dcd342f6eef9e79a3b5911d76c2b4b3bad2ea1a16f4

See more details on using hashes here.

File details

Details for the file ocdiff-0.0.44-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for ocdiff-0.0.44-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 fdd5c73298d8098e39cc11820c42c11669ee213f11442b8ac6b6cae2082da1b7
MD5 f6fd6fb72663a13eeba2a20e8f5b4ce1
BLAKE2b-256 de92f31a7bde4d24012cbe703e0d738117675309c54ff699a4d881920a0c83f3

See more details on using hashes here.

File details

Details for the file ocdiff-0.0.44-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ocdiff-0.0.44-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 01e26c5118cea49bb466f0d89d8fd4c1a653b3d505dc5a1647174aece5cd9293
MD5 6f3f5acfb9c04bab04ed240806d3f945
BLAKE2b-256 772f0349cf98a182ef9737a83b3f31d3e8e3aeb61c7756caf4fbe8741b95b532

See more details on using hashes here.

File details

Details for the file ocdiff-0.0.44-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ocdiff-0.0.44-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8a32142d36933c8dbf8e06fe70969fbea6fd9dcdf9f5b4071c7e1c9d3e01497c
MD5 7631826578a569c702e0af5461a3617c
BLAKE2b-256 edc4818bc08c7e731aa430c66b07ab0e963004af515396fbcc85e5b48d0e374d

See more details on using hashes here.

File details

Details for the file ocdiff-0.0.44-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for ocdiff-0.0.44-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7893175f9174286d7ffa6ba891c78d50724d643d7765c3497836eb8c021dd95f
MD5 45b296f0de4ae97f5e6f613b4458a27d
BLAKE2b-256 a9825df659b5c4c50b3ccf6f852e74a888d888340b4b136e67ea81f7a78b0b05

See more details on using hashes here.

File details

Details for the file ocdiff-0.0.44-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ocdiff-0.0.44-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0ad3d19283a9f17b736faf5266040e54822441b8d7381536e4a672170bb5a235
MD5 80f0cb573af00c52363cc358de472a17
BLAKE2b-256 909dfd2d896a7b350d7e2077d4801631705edb1493c0287f57cc847b9444656a

See more details on using hashes here.

File details

Details for the file ocdiff-0.0.44-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ocdiff-0.0.44-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c143e1e65d8bd8ce708abced7a4bc9564ccc422318d1754652ec3a727ffbee3d
MD5 76669d4beec307b7ba37bc2a510cc99d
BLAKE2b-256 28635dbdabeb98b295c3aeaddb2a4b1b1871378acbbaf6307ed813df719e7cd5

See more details on using hashes here.

File details

Details for the file ocdiff-0.0.44-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for ocdiff-0.0.44-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 9f62d82e5e2c97d41cd11e6ccf5cc8aa594b0043d3105693590a310f573f9665
MD5 aa1f6a850ad971d594dab5da8eb25724
BLAKE2b-256 73bc4292354dc01cf049c3b4139cab5be2f7b897081c620938055ce27aec2475

See more details on using hashes here.

File details

Details for the file ocdiff-0.0.44-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ocdiff-0.0.44-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 947d8d148af3ea4646c1630523653b34f717d54b00bfa3e372d20f05f957421a
MD5 da767fb6820d36394ff72e16f23da5dd
BLAKE2b-256 c58d61e96e2cb3f90fb91054402c1d0e845f523f0bc79b75f55a18cdf84b2d1a

See more details on using hashes here.

Release history Release notifications | RSS feed

0.0.51

9 files

0.0.50

9 files

0.0.49

9 files

0.0.48

9 files

0.0.47

9 files

0.0.46

9 files

0.0.45

9 files

This release

0.0.44 This release

12 files

0.0.43

12 files

0.0.42

12 files

0.0.33

15 files

0.0.32

12 files

0.0.31

4 files

0.0.30

7 files

0.0.29

10 files

0.0.28

10 files

0.0.27

8 files

0.0.26

4 files

0.0.23

4 files

0.0.22

4 files

0.0.21

4 files

0.0.20

4 files

0.0.19

4 files

0.0.18

4 files

0.0.17

3 files

0.0.15

2 files

0.0.14

2 files

0.0.13

3 files

0.0.12

3 files

0.0.10

1 file

0.0.7

3 files

0.0.6

3 files

0.0.5

3 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page