Skip to main content

validoopsie

A simple and easy to use Data Validation library for Python.

validoopsie

PyPI version PyPI Downloads Tests and Linters Documentation

Validoopsie

Validoopsie is a remarkably lightweight and user-friendly data validation library for Python. It’s designed to help you easily declare classes and chain validations together, in a style reminiscent of popular DataFrame libraries. This makes it a familiar and intuitive tool for developers who regularly work with dataframes.

Thanks to the excellent work by Narwhals, Validoopsie incorporates the "Bring Your Own DataFrame" (BYOD) concept. This flexibility allows you to use any DataFrame that Narwhals supports for your data validation tasks. To explore the full range of supported DataFrames, you can visit this link.

The syntax of Validoopsie has been thoughtfully crafted to ensure ease of use. Every validation function is encapsulated in its own method, which can be seamlessly linked together. This method-specific design prioritizes simplicity and readability, freeing you from the need to adapt to a new API each time you switch libraries. It allows you to focus on maintaining clean and understandable code.

Validoopsie draws significant inspiration from the Great Expectations library. It strives to distill the data validation process into something straightforward and efficient. Whether you're checking data integrity or ensuring compliance with data standards, Validoopsie provides a streamlined yet powerful solution to make these tasks accessible and straightforward.

Table of Contents

  1. Installation
  2. Getting Started
  3. Version
  4. Dunder Methods
  5. Validate Method
  6. Development
  7. License

Installation

  • pip

    pip install Validoopsie

  • uv

    uv add Validoopsie

Getting Started

Validoopsie is incredibly easy to use, so much so that you could do it half-asleep. The simplicity of the library is enhanced by the BYOD (Bring Your Own DataFrame) concept, where you merely need to utilize the Validate class and chain your desired validations together. This approach ensures that you can get started with minimal effort and without any unnecessary complexity.

import pandas as pd

from validoopsie import Validate

p_df = pd.DataFrame(
    {
        "name": ["John", "Doe", "Jane"],
        "target_name": ["John", "Doe", "Jane"],
        "last_name": ["Smith", "Smith", "Smith"],
        "age": [25, 30, 35],
    },
)

# `vd` stands for Validate Data
vd = Validate(p_df)
vd.EqualityValidation.PairColumnEquality(
    column="name",
    target_column="age",
    impact="high",
).UniqueValidation.ColumnUniqueValuesToBeInList(
    column="last_name",
    values=["Smith"],
).ValuesValidation.ColumnValuesToBeBetween(
    column="age",
    min_value=20,
    max_value=40,
)

vd.results

OUTPUT:

{
  "Summary": {
    "passed": false,
    "validations": [
      "PairColumnEquality_name",
      "ColumnUniqueValuesToBeInList_last_name",
      "ColumnValuesToBeBetween_age"
    ],
    "failed_validation": ["PairColumnEquality_name"]
  },
  "PairColumnEquality_name": {
    "validation": "PairColumnEquality",
    "impact": "high",
    "timestamp": "2025-10-07T11:25:04.213211+02:00",
    "column": "name",
    "result": {
      "status": "Fail",
      "threshold_pass": false,
      "message": "The column 'name' is not equal to the column'age'.",
      "failing_items": [
        "Doe - column name - column age - 30",
        "Jane - column name - column age - 35",
        "John - column name - column age - 25"
      ],
      "failed_number": 3,
      "frame_row_number": 3,
      "threshold": 0.0,
      "failed_percentage": 1.0
    }
  },
  "ColumnUniqueValuesToBeInList_last_name": {
    "validation": "ColumnUniqueValuesToBeInList",
    "impact": "low",
    "timestamp": "2025-10-07T11:25:04.216417+02:00",
    "column": "last_name",
    "result": {
      "status": "Success",
      "threshold_pass": true,
      "message": "All items passed the validation.",
      "frame_row_number": 3,
      "threshold": 0.0
    }
  },
  "ColumnValuesToBeBetween_age": {
    "validation": "ColumnValuesToBeBetween",
    "impact": "low",
    "timestamp": "2025-10-07T11:25:04.217300+02:00",
    "column": "age",
    "result": {
      "status": "Success",
      "threshold_pass": true,
      "message": "All items passed the validation.",
      "frame_row_number": 3,
      "threshold": 0.0
    }
  }
}

You can also display the validation results in a formatted table using the display_summary method, which provides a clean and readable view of your validation results:

vd.display_summary()

default display_summary

Display a full detailed table with all available information

vd.display_summary(information="full")

full display_summary

Customize the table format (supports tabulate formatting options)

vd.display_summary(tablefmt="pipe", maxcolwidths=20)

kwargs display_summary

The display_summary method supports two information levels:

  • "short" (default): Shows key metrics like timestamp, impact, status, validation type, column, threshold, and failure details
  • "full": Shows all available validation and result fields

You can also customize the table appearance using any tabulate formatting options such as tablefmt for different table styles (e.g., "github", "grid", "pipe", "html") and maxcolwidths to control column width.

Version

You can check the installed version of Validoopsie at any time:

from validoopsie import __version__

print(__version__)

Dunder Methods

The Validate class supports several Python dunder methods for convenience:

  • repr(vd) — returns a summary string with row count and number of validations:

    >>> repr(vd)
    'Validate(rows=3, validations=3)'
    
  • str(vd) — returns a human-readable status string:

    >>> str(vd)
    'Validate: 3 validation(s), passed=False'
    
  • len(vd) — returns the number of validations:

    >>> len(vd)
    3
    

Validate Method

To ensure that all your validations have been correctly executed and to handle any potential errors that may arise during the validation process, you can use the validate method. However, it's important to note that errors will only be raised if the impact level is set to high. Without this setting, potential issues may not trigger an error message.

NOTE: Raised error is a custom ValueError.

import pandas as pd

from validoopsie import Validate

p_df = pd.DataFrame(
    {
        "name": ["John", "Doe", "Jane"],
        "target_name": ["John", "Doe", "Jane"],
        "last_name": ["Smith", "Smith", "Smith"],
        "age": [25, 30, 35],
    },
)

# `vd` stands for Validate Data
vd = Validate(p_df)
vd.EqualityValidation.PairColumnEquality(
    column="name",
    target_column="age",
    impact="high",
).UniqueValidation.ColumnUniqueValuesToBeInList(
    column="last_name",
    values=["Smith"],
).ValuesValidation.ColumnValuesToBeBetween(
    column="age",
    min_value=20,
    max_value=40,
).validate()

Thanks to loguru output will provide a very condenced information on validations and their status in a colorful way.

validation output

Development

Validoopsie includes a Makefile to simplify development tasks:

# Install dependencies
make setup

# Run linters (mypy, ruff)
make lint

# Run tests (includes doctests, stubtest)
make test

# Run both lint and test
make all

For more information on development, check the contribution guidelines.

License

MIT © Validoopsie

Original Creator - Akmal Soliev

Metadata

Release files for Validoopsie 1.8.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for Validoopsie 1.8.1
File Size Uploaded
validoopsie-1.8.1.tar.gz 26.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for Validoopsie 1.8.1
File Interpreter ABI Platform
validoopsie-1.8.1-py3-none-any.whl Python 3 none any Details

Total release size: 76.8 kB

Release files / validoopsie-1.8.1.tar.gz

Download URL validoopsie-1.8.1.tar.gz
Size 26.2 kB
Tags Source
SHA-256 checksum
How to use checksums
cf75d050d50805d3498a641bbc427ac4ee1dc151702709f405ebd2827b230f19
BLAKE2b-256 checksum
How to use checksums
ac4526a9cfe12e9616440eca5a8f3c521d9351706af3c85631ee2191a41af919
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.

Transparency log

Release files / validoopsie-1.8.1-py3-none-any.whl

Download URL validoopsie-1.8.1-py3-none-any.whl
Size 50.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0f393de425ab9e6089a0cee5e062af0bf20ca80b6c4f2cae8702b240011d79ab
BLAKE2b-256 checksum
How to use checksums
91218848a635eed3055958becc62e3680878a935e120fc891624ed49bb68fe4c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.8.1 This release

2 release files

1.8.0

2 release files

1.7.3

2 release files

1.7.2

2 release files

1.7.1

2 release files

1.7.0

2 release files

1.6.7

2 release files

1.6.6

2 release files

1.6.5

2 release files

1.6.4

2 release files

1.6.3

2 release files

1.6.2

2 release files

1.6.1

2 release files

1.6.0

2 release files

1.5.0

2 release files

1.4.2

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.0.13

2 release files

0.0.12

2 release files

0.0.11

2 release files

0.0.10

2 release files

0.0.9

2 release files

0.0.8

2 release files

0.0.6

2 release files

0.0.4

2 release files

0.0.3

2 release 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