Add your description here
Project description
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
-
Enhanced Type Safety:
- Leverages TypedDict for comprehensive type checking
- Provides full IDE support with type hints and autocompletion
-
Intelligent Field Generation:
- Selectively override specific fields while auto-generating others
- Maintains data integrity through validation-aware value generation
-
Validation-Aware Generation:
- Automatically respects field constraints (
ge,le, etc.) - Properly handles optional fields with
nullablesupport
- Automatically respects field constraints (
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fauxgen-0.3.1-py3-none-musllinux_1_1_x86_64.whl.
File metadata
- Download URL: fauxgen-0.3.1-py3-none-musllinux_1_1_x86_64.whl
- Upload date:
- Size: 2.3 MB
- Tags: Python 3, musllinux: musl 1.1+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
016c895ca0024494781ce25ead660717bfa8827984147626ac7cb73b1275a289
|
|
| MD5 |
84df0eaae5aeeb45429cbff40e47dd22
|
|
| BLAKE2b-256 |
c4ae2f2e4cbceab40e25a95a956eefa1994b6fc2d37e6658f28b2e603e23fdfd
|
File details
Details for the file fauxgen-0.3.1-py3-none-musllinux_1_1_armv7l.whl.
File metadata
- Download URL: fauxgen-0.3.1-py3-none-musllinux_1_1_armv7l.whl
- Upload date:
- Size: 2.0 MB
- Tags: Python 3, musllinux: musl 1.1+ ARMv7l
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
34b42a66e5f60f7cde0d6bd4c40afa5f2970152863001c2f4c608e7ebf8527fd
|
|
| MD5 |
627d3a5750eea6293c8f0352edeacef6
|
|
| BLAKE2b-256 |
9f500f3de684557a7913f54b157c9cda076fe3ffb5aa39a94a1b65df512f33aa
|
File details
Details for the file fauxgen-0.3.1-py3-none-musllinux_1_1_aarch64.whl.
File metadata
- Download URL: fauxgen-0.3.1-py3-none-musllinux_1_1_aarch64.whl
- Upload date:
- Size: 2.1 MB
- Tags: Python 3, musllinux: musl 1.1+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
133edf35a7b219d968ba1dcdfb3f07cc35e829cdcfc12d656f39bbe1756339aa
|
|
| MD5 |
c5d5cd0136edc0556611ebedd69776a4
|
|
| BLAKE2b-256 |
acf2ee3dfd424872aad481fefc24e0c0d5c7cb7d9f2109db44ba4a9b608bbc8c
|
File details
Details for the file fauxgen-0.3.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: fauxgen-0.3.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 2.3 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
92fc2989b84727a1119777aa89ba73206a2eee47c5a693b75ea909fe77065765
|
|
| MD5 |
3f2f36a84dede9e00584792a299e7e19
|
|
| BLAKE2b-256 |
bef29467e479f381cc01a0ecc0164353b4c5d752f12baf6901f61fdf2befc14c
|
File details
Details for the file fauxgen-0.3.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl.
File metadata
- Download URL: fauxgen-0.3.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl
- Upload date:
- Size: 2.4 MB
- Tags: Python 3, manylinux: glibc 2.17+ s390x
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7b26c093d451a773b7d01b7306adafe32de2f4212099268504edda7a8bf18b90
|
|
| MD5 |
ed4eeb6d977680756d9ea2869ecd9dbd
|
|
| BLAKE2b-256 |
617c0d6b456de988a73f9e1d8ed0868d3db1e1f9c4b5934fbcc423cd84a57206
|
File details
Details for the file fauxgen-0.3.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.
File metadata
- Download URL: fauxgen-0.3.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
- Upload date:
- Size: 2.6 MB
- Tags: Python 3, manylinux: glibc 2.17+ ppc64le
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2b9a94a43cf743f4b9bbc4d5cf62c82fad9bd3edce3874ca026fd51071f33da3
|
|
| MD5 |
a1418961886486c16c3168f6af0c9aaf
|
|
| BLAKE2b-256 |
3b8f6c6e3088753c304fe3aea4df89e38733c8532eb5afdb232b9d74ac5c836a
|
File details
Details for the file fauxgen-0.3.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl.
File metadata
- Download URL: fauxgen-0.3.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 2.3 MB
- Tags: Python 3, manylinux: glibc 2.17+ i686
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
91455447f5d4df32da81f27acca7f0428e9d7fe266eaa95304d50d17c8c2dc83
|
|
| MD5 |
e603442f1deae31d85c8ae3efe67c408
|
|
| BLAKE2b-256 |
8bb7f9941c2b5c4c508b184107901872af56765e7a2842c0efb83ef20d016b79
|
File details
Details for the file fauxgen-0.3.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.
File metadata
- Download URL: fauxgen-0.3.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
- Upload date:
- Size: 2.0 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARMv7l
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fab4b1611132d182a6e73e8a726b3a0eaf1c2be81115e42521b53466359a3af3
|
|
| MD5 |
1181ea6e66a93f966cfec8462a4f5c34
|
|
| BLAKE2b-256 |
93d8202a5b5f38857ac290f17d48162e8aec8ab0194e4e7a7b1ce44f145fafaa
|
File details
Details for the file fauxgen-0.3.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: fauxgen-0.3.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 2.1 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
60c837adfd9559ba859c78309c4d0fbea812052a359ce36cf73ebd99a0b6dc24
|
|
| MD5 |
ab03e0a5bc3863e253a5aa1c0c748962
|
|
| BLAKE2b-256 |
d1d93ae95670c4e42397d36b1f9b82c72291bda497c741dd5be9cdbfdb50d05b
|
File details
Details for the file fauxgen-0.3.1-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: fauxgen-0.3.1-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 2.1 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0e9754c822eed76d68e1db36d49a47a39ca8501082bb728f65370949faecd793
|
|
| MD5 |
a0306856d6de78d2ec2f04b9cccf46c8
|
|
| BLAKE2b-256 |
e70e191662c0d5a58c95e3f225f26e7a1e0e765c80a5aa2650574980619c7ff7
|
File details
Details for the file fauxgen-0.3.1-py3-none-macosx_10_12_x86_64.whl.
File metadata
- Download URL: fauxgen-0.3.1-py3-none-macosx_10_12_x86_64.whl
- Upload date:
- Size: 2.2 MB
- Tags: Python 3, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
448d01fb186caa4798ba53340c83cd0190a352985e4cf4b57b5af60ca5d6d001
|
|
| MD5 |
6b611444d1eaa0b7bb19e753434f23d4
|
|
| BLAKE2b-256 |
74caa2f78b9fc90513f5e6af0fe5c15457815ad8221b60f738fefe79200fd0fb
|