Skip to main content

Factoreally

Generate realistic test data from real data patterns.

Factoreally involves two steps:

  1. Analyze sample data → create a factory spec based on input data
  2. Use the factory spec → generate realistic data based on the factory spec

It automatically detects patterns (UUIDs, timestamps, email formats, numeric distributions) and generates statistically accurate test data that matches your real data.

Features

  • Pattern detection: UUIDs, timestamps, emails, phone numbers, custom formats
  • Statistical accuracy: Maintains distributions and value frequencies
  • Dynamic objects: Detects and generates varying dictionary keys
  • Null handling: Preserves optional field probabilities
  • Batch generation: Efficiently generate thousands of records

Quick Start

1. Analyze sample data to create a factory spec

# Basic spec generation
factoreally create --in real_user_payloads.json --out user.spec.json

# With Pydantic model to identify dynamic dictionary fields
factoreally create \
  --in user_payloads.json \
  --out user.spec.json \
  --model myapp.models.UserModel

2. Use the factory spec to generate data

from factoreally import Factory

# Create factory from spec
user_factory = Factory("user.spec.json")

# Generate single object
user_data = user_factory.build()

# Generate batch
users = user_factory[:1000]

# Integrate with Pydantic models
user = UserModel.model_validate(user_factory.build())

Customization

# Create factory with built-in overrides
admin_factory = Factory(spec, role="admin", permissions__level="high")

# Per-generation overrides
user = user_factory.build(email="specific@example.com")

# Nested field overrides
user = user_factory.build(address__country="US", profile__verified=True)

# Array element overrides
user = user_factory.build(items__name="default", items__value=None)  # override all array elements
user = user_factory.build(items__0__name="first", items__0_value=1) # override specific array index

# Dynamic overrides with callables
user = user_factory.build(
    id=lambda: str(uuid.uuid4()),  # Generate new value
    name=lambda value: value.upper(),  # Transform generated value
    display_name=lambda value, obj: f"{value} ({obj['role']})"  # Use context of entire generated object
)

Pydantic Integration

Provide a Pydantic model to help identify dynamic dictionary fields:

class UserEvent(BaseModel):
    user_id: str
    metadata: dict[str, str]  # Factoreally treats this as dynamic dict
factoreally create --in events.json --out events.spec.json --model myapp.models.UserEvent

Download files

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

Source Distribution

factoreally-0.6.1.tar.gz (87.9 kB view details)

Uploaded Source

Built Distribution

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

factoreally-0.6.1-py3-none-any.whl (47.0 kB view details)

Uploaded Python 3

File details

Details for the file factoreally-0.6.1.tar.gz.

File metadata

  • Download URL: factoreally-0.6.1.tar.gz
  • Upload date:
  • Size: 87.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.6.5

File hashes

Hashes for factoreally-0.6.1.tar.gz
Algorithm Hash digest
SHA256 e910161496d802429f33dbe091a71f17458df8c63010b477ab4e5a6debb8244a
MD5 2df6b09ab62ffd3d5ff8aadf5614d9d1
BLAKE2b-256 8cf799406b5e671555b11c2f98d7d8402058bb7bf72cc62b7adaed567a12c8d3

See more details on using hashes here.

File details

Details for the file factoreally-0.6.1-py3-none-any.whl.

File metadata

File hashes

Hashes for factoreally-0.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3bd443cc69993b0f06bcb0a679df46795d30487b201296aa6c07f961ff186f0e
MD5 17ce5ee2493a7689446cd1f8f8be81c6
BLAKE2b-256 34e4bdad3ff45a598cc5eeb56f287edb162c3bc2c2d534eee1c0b1d6d3ce8941

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.6.1 This release

2 files

0.6.0

2 files

0.5.1

2 files

0.5.0

2 files

0.4.0

2 files

0.3.0

2 files

0.1.0

2 files

Supported by

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