Skip to main content

Generate randomized instances of pydantic classes for testing

Project description

pydantic-rng

A simple library for generating random, valid Pydantic models.

This tool helps you quickly create mock data for testing, prototyping, and demonstration purposes by generating random values that conform to your Pydantic model schemas. It supports a wide range of types and validation constraints.

✨ Features

  • Type-aware Generation: Generates appropriate data for common Python types (str, int, float, bool, list, dict, set, etc.).
  • pydantic Integration: Works seamlessly with Pydantic's BaseModel for recursive data generation.
  • Constraint Support: Respects a wide variety of Pydantic validation constraints from the annotated_types library, including MinLen, MaxLen, Ge, Gt, Le, Lt, and MultipleOf.
  • Configurable: Customize the behavior of the random generator with global settings for things like numeric and string ranges, and the probability of generating None for optional fields.

🚀 Installation

Install the package (usually as a dev dependency):

uv add --dev pydantic-rng

Generate Basic Class RNG

from pydantic import BaseModel
from pydantic_rng import PydanticRandom

class User(BaseModel):
    user_id: int
    name: str
    is_active: bool
    email: str | None = None

random_user = PydanticRandom().generate(User)
print(random_user.model_dump_json(indent=2))

Or, more usually...

from typing import Annotated

from tqdm.rich import trange # requires `rich` as well
from pydantic import BaseModel, Field
from pydantic_rng import PydanticRandom

N = 1_000_000

class World(BaseModel):
    radius: Annotated[float, Field(gt=0, lt=360)]
    moons: list[str]

# set seed for consistency across runs
# also configure 
rng = PydanticRandom(seed=42).configure_rng(
    # max length of moon names
    max_sequence_length=10,
)

with open("random-data.jsonl", "w") as f:
    for _ in trange(N):
        item = generate(World)
        f.write(item.model_dump_json() + "\n")

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

pydantic_rng-0.2.0.tar.gz (4.4 kB view details)

Uploaded Source

Built Distribution

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

pydantic_rng-0.2.0-py3-none-any.whl (5.5 kB view details)

Uploaded Python 3

File details

Details for the file pydantic_rng-0.2.0.tar.gz.

File metadata

  • Download URL: pydantic_rng-0.2.0.tar.gz
  • Upload date:
  • Size: 4.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.8.14

File hashes

Hashes for pydantic_rng-0.2.0.tar.gz
Algorithm Hash digest
SHA256 37940ed1cb3b26d58a9b36c94124e242cc8074a2467c8ae4f735d3d974fb6b66
MD5 a940c0c3c1ddd6844e937701d607173c
BLAKE2b-256 ff788e0fd60b205461b00383603661d996cba350b35d17c2fc183258c09220a5

See more details on using hashes here.

File details

Details for the file pydantic_rng-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for pydantic_rng-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d40d7239b5e091ace0108ac1a33357620fc871c9da65f7a1a5b1b8b193423519
MD5 46006bb8f56324e5bb37ff1a6fc1fd91
BLAKE2b-256 837e3c5c6d74530a1f6889cd7d2d879171930892774b83ffe8b889a43d6016cd

See more details on using hashes here.

Supported by

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