A library for generating fake Pydantic models for testing and development purposes
Project description
Fauxdantic
A library for generating fake Pydantic models for testing. Fauxdantic makes it easy to create realistic test data for your Pydantic models. Pairs well with testing of fastapi endpoints.
Installation
poetry add fauxdantic
Features
- Generate fake data for any Pydantic model
- Support for nested models
- Support for common Python types:
- Basic types (str, int, float, bool)
- Optional types
- Lists
- Dicts
- UUIDs
- Datetimes
- Enums
- Customizable values through keyword arguments
- Generate dictionaries of fake data without creating model instances
Usage
Basic Usage
from pydantic import BaseModel
from fauxdantic import faux, faux_dict
class User(BaseModel):
name: str
age: int
email: str
is_active: bool
# Generate a fake user
fake_user = faux(User)
print(fake_user)
# Output: name='Smith' age=2045 email='smith@example.com' is_active=True
# Generate a dictionary of fake values
fake_dict = faux_dict(User)
print(fake_dict)
# Output: {'name': 'Smith', 'age': 2045, 'email': 'smith@example.com', 'is_active': True}
Nested Models
from pydantic import BaseModel
from fauxdantic import faux, faux_dict
class Address(BaseModel):
street: str
city: str
zip_code: str
class User(BaseModel):
name: str
age: int
address: Address
# Generate a fake user with nested address
fake_user = faux(User)
print(fake_user)
# Output: name='Smith' age=2045 address=Address(street='123 Main St', city='Anytown', zip_code='12345')
# Generate a dictionary with nested address
fake_dict = faux_dict(User)
print(fake_dict)
# Output: {'name': 'Smith', 'age': 2045, 'address': {'street': '123 Main St', 'city': 'Anytown', 'zip_code': '12345'}}
Optional Fields
from typing import Optional
from pydantic import BaseModel
from fauxdantic import faux, faux_dict
class User(BaseModel):
name: str
age: Optional[int]
email: Optional[str]
# Generate a fake user with optional fields
fake_user = faux(User)
print(fake_user)
# Output: name='Smith' age=None email='smith@example.com'
# Generate a dictionary with optional fields
fake_dict = faux_dict(User)
print(fake_dict)
# Output: {'name': 'Smith', 'age': None, 'email': 'smith@example.com'}
Lists and Dicts
from typing import List, Dict
from pydantic import BaseModel
from fauxdantic import faux, faux_dict
class User(BaseModel):
name: str
tags: List[str]
preferences: Dict[str, str]
# Generate a fake user with lists and dicts
fake_user = faux(User)
print(fake_user)
# Output: name='Smith' tags=['tag1', 'tag2'] preferences={'key1': 'value1', 'key2': 'value2'}
# Generate a dictionary with lists and dicts
fake_dict = faux_dict(User)
print(fake_dict)
# Output: {'name': 'Smith', 'tags': ['tag1', 'tag2'], 'preferences': {'key1': 'value1', 'key2': 'value2'}}
Custom Values
from pydantic import BaseModel
from fauxdantic import faux, faux_dict
class User(BaseModel):
name: str
age: int
email: str
# Generate a fake user with custom values
fake_user = faux(User, name="John Doe", age=30)
print(fake_user)
# Output: name='John Doe' age=30 email='smith@example.com'
# Generate a dictionary with custom values
fake_dict = faux_dict(User, name="John Doe", age=30)
print(fake_dict)
# Output: {'name': 'John Doe', 'age': 30, 'email': 'smith@example.com'}
Enums
from enum import Enum
from pydantic import BaseModel
from fauxdantic import faux, faux_dict
class UserRole(str, Enum):
ADMIN = "admin"
USER = "user"
GUEST = "guest"
class User(BaseModel):
name: str
role: UserRole
# Generate a fake user with enum
fake_user = faux(User)
print(fake_user)
# Output: name='Smith' role=<UserRole.ADMIN: 'admin'>
# Generate a dictionary with enum
fake_dict = faux_dict(User)
print(fake_dict)
# Output: {'name': 'Smith', 'role': 'admin'}
Development
# Install dependencies
poetry install
# Run tests
poetry run pytest
# Format code
poetry run black .
poetry run isort .
# Type checking
poetry run mypy .
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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 fauxdantic-0.1.3.tar.gz.
File metadata
- Download URL: fauxdantic-0.1.3.tar.gz
- Upload date:
- Size: 4.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.2 CPython/3.10.3 Darwin/24.4.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9a0d4890f284b01755743846e2f74e5ba271b1817a70a980496b3530a3c4fca2
|
|
| MD5 |
27e3421d4222d2fcbec1c48d173f8f5b
|
|
| BLAKE2b-256 |
aae4b13cee5a99e6278633e3a5e3977c4553d54ca2b7a8edc1a5ca54628a0427
|
File details
Details for the file fauxdantic-0.1.3-py3-none-any.whl.
File metadata
- Download URL: fauxdantic-0.1.3-py3-none-any.whl
- Upload date:
- Size: 4.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.2 CPython/3.10.3 Darwin/24.4.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4199765bd5fd394d49ab51519149b4ef4b3298c3639aedf8f3b30597014dc6af
|
|
| MD5 |
8bebdbd6bf0fd8a00cf4d96d8a4fbe60
|
|
| BLAKE2b-256 |
a7b0912b0ec7458ae058b3ba40fa149729d3e260892a62063fdb4223f37d9790
|