Skip to main content

fauxgen

A factory method generator that streamlines test data creation by automating field value generation.

Overview

Testing classes with numerous fields often requires extensive boilerplate code. fauxgen addresses this challenge by automatically generating factory methods from class definitions, significantly reducing test code complexity.

Currently supports pandera.DataFrameModel with plans for future expansions.

Quick Start

uv add fauxgen
uv run fauxgen gen --module-dir <your_module>

Usage Example

Example project can be found in the examples.

Traditional Approach (Without fauxgen)

Testing DataFrame models traditionally requires explicit specification of all fields, even when testing a single validation:

import pandera as pa
from pandera.typing import Series

class UserSchema(pa.DataFrameModel):
    id: Series[int] = pa.Field(ge=1)
    age: Series[int] = pa.Field(ge=0, le=150)
    name: Series[str] = pa.Field()
    email: Series[str] = pa.Field(nullable=True)
    active: Series[bool] = pa.Field()

def test_user_registration():
    # Forced to specify every field when testing age validation
    df_user = pd.DataFrame([
        {
            "id": 1,            # Unrelated to test
            "age": 151,         # Actual test target
            "name": "test",     # Unrelated to test
            "email": "test@example.com",  # Unrelated to test
            "active": True,     # Unrelated to test
        },
    ]).pipe(DataFrame[UserSchema])
    # Test age validation...

Simplified Testing (With fauxgen)

fauxgen generates factory methods that enable focused testing by automatically handling irrelevant fields:

from .factories import user_schema_record  # Generated by fauxgen

def test_user_registration():
    # Focus solely on the field under test
    # Other fields are automatically populated with valid values
    df_user = pd.DataFrame([
        user_schema_record(age=151), # Set specific age for test
    ]).pipe(DataFrame[UserSchema])  # Test age validation...

def test_user_email_optional():
    # Effortlessly test specific scenarios
    # without worrying about irrelevant fields
    df_user = pd.DataFrame([
        user_schema_record(email=None)  # Set email to None for test
    ]).pipe(DataFrame[UserSchema])  # Test nullable email...

How It Works

Input: pandera.DataFrameModel Definition

import pandera as pa
from pandera.typing import Series

class TestSchema(pa.DataFrameModel):
    int_col: Series[int] = pa.Field(ge=0.1, le=10.0)
    float_col_only_ge: Series[float] = pa.Field(ge=10)
    float_col_only_le: Series[float] = pa.Field(le=10)
    pa_bool_col: Series[pa.Bool] = pa.Field(nullable=True)

Output: Generated Factory Method

import fauxgen as f

class TestSchemaRecord(TypedDict):
    int_col: int
    float_col_only_ge: float
    float_col_only_le: float
    pa_bool_col: bool | None

def test_schema_record(
    *,
    int_col: int | f.Unset = f.UNSET,
    float_col_only_ge: float | f.Unset = f.UNSET,
    float_col_only_le: float | f.Unset = f.UNSET,
    pa_bool_col: bool | None | f.Unset = f.UNSET,
    seed_: int | None = None,
) -> TestSchemaRecord:
    return {
        "int_col": f.Unset.unwrap_or_else(int_col, lambda: f.gen_int(ge=0.1, le=10, seed=seed_)),
        "float_col_only_ge": f.Unset.unwrap_or_else(float_col_only_ge, lambda: f.gen_float(ge=10, le=110, seed=seed_)),
        "float_col_only_le": f.Unset.unwrap_or_else(float_col_only_le, lambda: f.gen_float(ge=-90, le=10, seed=seed_)),
        "pa_bool_col": f.Unset.unwrap_or_else(pa_bool_col, lambda: f.gen_bool(seed=seed_)),
    }

Key Features

  1. Enhanced Type Safety:

    • Leverages TypedDict for comprehensive type checking
    • Provides full IDE support with type hints and autocompletion
  2. Intelligent Field Generation:

    • Selectively override specific fields while auto-generating others
    • Maintains data integrity through validation-aware value generation
  3. Validation-Aware Generation:

    • Automatically respects field constraints (ge, le, etc.)
    • Properly handles optional fields with nullable support

Metadata

Release files for fauxgen 0.2.2

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

Built distributions (wheels)

Table of built distributions (wheels) for fauxgen 0.2.2
File
fauxgen-0.2.2-py3-none-musllinux_1_1_x86_64.whl Python 3 none Linux musl 1.1+ x86-64 Details
fauxgen-0.2.2-py3-none-musllinux_1_1_armv7l.whl Python 3 none Linux musl 1.1+ ARMv7l Details
fauxgen-0.2.2-py3-none-musllinux_1_1_aarch64.whl Python 3 none Linux musl 1.1+ ARM64 Details
fauxgen-0.2.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details
fauxgen-0.2.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl Python 3 none Linux glibc 2.17+ IBM System/390x Details
fauxgen-0.2.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl Python 3 none Linux glibc 2.17+ PowerPC 64-le Details
fauxgen-0.2.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl Python 3 none Linux glibc 2.17+ x86-32 Details
fauxgen-0.2.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl Python 3 none Linux glibc 2.17+ ARMv7l Details
fauxgen-0.2.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl Python 3 none Linux glibc 2.17+ ARM64 Details
fauxgen-0.2.2-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details
fauxgen-0.2.2-py3-none-macosx_10_12_x86_64.whl Python 3 none macOS 10.12+ x86-64 Details

Total release size: 23.1 MB

Release files / fauxgen-0.2.2-py3-none-musllinux_1_1_x86_64.whl

Download URL fauxgen-0.2.2-py3-none-musllinux_1_1_x86_64.whl
Size 2.2 MB
Tags Linux musl 1.1+ x86-64 Python 3
SHA-256 checksum
How to use checksums
f6b47caa5713c3dc9312de63ad8de6015828871d74e3c511b3e48ba574dcf6e4
BLAKE2b-256 checksum
How to use checksums
8e4415163c408da4d620fa43e4ad4521fb23cd11cdb81b2315e47bb38d3c4035
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / fauxgen-0.2.2-py3-none-musllinux_1_1_armv7l.whl

Download URL fauxgen-0.2.2-py3-none-musllinux_1_1_armv7l.whl
Size 1.9 MB
Tags Linux musl 1.1+ ARMv7l Python 3
SHA-256 checksum
How to use checksums
6f51987a763683123b3c7acde48b661b63c3287d510f552da98f4ca4dab13b69
BLAKE2b-256 checksum
How to use checksums
87cfdb440c2d9ffb1684d175ddaf7a668613a9d76a1307ec6a328d8dc90c1047
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / fauxgen-0.2.2-py3-none-musllinux_1_1_aarch64.whl

Download URL fauxgen-0.2.2-py3-none-musllinux_1_1_aarch64.whl
Size 2.0 MB
Tags Linux musl 1.1+ ARM64 Python 3
SHA-256 checksum
How to use checksums
934ab7c8d906319c0f36c762a7d7e990b734bd6b9bf7cc822c2f2741d69a60cd
BLAKE2b-256 checksum
How to use checksums
16653f14afcd94d2cbb5abc56e812c0212507c2e664e1630863cf705660447d1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / fauxgen-0.2.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL fauxgen-0.2.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 2.1 MB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
9e3e3969b21a727ad39ac17bf4f89febd3d93b5bbd1e7cc87cb7b5fcf92fff81
BLAKE2b-256 checksum
How to use checksums
2f3dc8abd51583689b198955200a5e7ea346f0876382ca364f4c4026895235f4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / fauxgen-0.2.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl

Download URL fauxgen-0.2.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl
Size 2.4 MB
Tags Linux glibc 2.17+ IBM System/390x Python 3
SHA-256 checksum
How to use checksums
cdacc0ac8123d398e6401bc5b31fec5767ddce988db4726f4b09f32af7d03055
BLAKE2b-256 checksum
How to use checksums
f07b3ad7b0dbb3a13a35804d82072594abd4b8c1db8d5db3e42f34ae58db3a45
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / fauxgen-0.2.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl

Download URL fauxgen-0.2.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Size 2.3 MB
Tags Linux glibc 2.17+ PowerPC 64-le Python 3
SHA-256 checksum
How to use checksums
0a76a2fa92cf964ee1fdfe60b6b4be5cf0b34e40aad36d16c05ee637505e7a11
BLAKE2b-256 checksum
How to use checksums
3dda8b626e0897d12b5a0ec201c3b5ee9934b9461369c119dd60b32e132967cb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / fauxgen-0.2.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl

Download URL fauxgen-0.2.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
Size 2.2 MB
Tags Linux glibc 2.17+ x86-32 Python 3
SHA-256 checksum
How to use checksums
c572afc8f84a7068d4294112034065c6ffff8749500cf5359b6f8d7aa4fa8aef
BLAKE2b-256 checksum
How to use checksums
3b4bb0b993481f5a96d56d96af382bb5354d71d89dabdf33d920955c3702abcb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / fauxgen-0.2.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl

Download URL fauxgen-0.2.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Size 1.9 MB
Tags Linux glibc 2.17+ ARMv7l Python 3
SHA-256 checksum
How to use checksums
c76750523746c8d9009e230ab9c968e45d3d0beb9a4c25c4e7664eadc29bc38f
BLAKE2b-256 checksum
How to use checksums
f89194a44f024dfe12914c989e506f5720880073c0aa59f7a71f962886b36840
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / fauxgen-0.2.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL fauxgen-0.2.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 2.0 MB
Tags Linux glibc 2.17+ ARM64 Python 3
SHA-256 checksum
How to use checksums
d7f97dae0ff0433ede9e5d912e7393f2ffb09d7fa664f4921f54ad1689dd9885
BLAKE2b-256 checksum
How to use checksums
98e8efd8ec612b3c6f7408680c3188b7c6489ce8c9c66593550db84a92bbf87a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / fauxgen-0.2.2-py3-none-macosx_11_0_arm64.whl

Download URL fauxgen-0.2.2-py3-none-macosx_11_0_arm64.whl
Size 1.9 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
603c4022fa270dbfd9699e132d081ad5aeb1cc1c0457eef2744c9ab10fe07373
BLAKE2b-256 checksum
How to use checksums
7a7cd95e94db58b2920aad54890b4d465e3e341da4a007cb9a71a017b6420278
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / fauxgen-0.2.2-py3-none-macosx_10_12_x86_64.whl

Download URL fauxgen-0.2.2-py3-none-macosx_10_12_x86_64.whl
Size 2.1 MB
Tags Python 3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
ff91f9f42cf873251182b60b6c010d1022f47de17923cdc9210d67e8f13bf4af
BLAKE2b-256 checksum
How to use checksums
fe695f9e06acd93a8c63c257e5ef6ac23eade62188d3d73ff912806257104b5e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release history Release notifications | RSS feed

0.3.1

11 release files

This release

0.2.2 This release

11 release files

0.2.0

11 release files

0.1.1

11 release files

0.1.0

11 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