Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tarsil/pyfactories
Mock data generation for pydantic and dataclasses
https://github.com/tarsil/pyfactories
Last synced: 10 days ago
JSON representation
Mock data generation for pydantic and dataclasses
- Host: GitHub
- URL: https://github.com/tarsil/pyfactories
- Owner: tarsil
- License: mit
- Created: 2023-06-21T10:15:42.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2023-07-05T18:12:11.000Z (over 1 year ago)
- Last Synced: 2024-10-30T03:49:30.790Z (about 2 months ago)
- Language: Python
- Size: 774 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: docs/contributing.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Security: SECURITY.md
Awesome Lists containing this project
README
# PyFactories
🚀 Mock data generation for pydantic and dataclasses. 🚀---
**Documentation**: [https://pyfactories.tarsild.io][docs] 📚
**Source Code**: [https://github.com/tarsil/pyfactories][github]
---
## Motivation
[Pydantic Factories][pydantic_factories] was initially created and used by a lot of people and it
is an extremely powerful package that was heavily tested by the same authors of Starlite, now,
Litestar. During their own evolution and development they felt the need to add more support to the
package that was no longer only pydantic and therefore they created the [Polyfactory][polyfactory]
and archived the [Pydantic Factories][pydantic_factories].PyFactories is a literal fork from the latest Pydantic Factories and aims to continue the same
work set by the previous creators with the difference that will be only maintaining the factories
for Pydantic and the upcoming Pydantic 2.0+.The team behind Pydantic Factories did a fantastic job and the credit goes to them while
**PyFactories** continues its own fork path.If you aim to use something more than just Pydantic, it is strongly recommended to visit
[Polyfactory][polyfactory] and migrate to it and of course, leave them a ⭐️.In the meantime if you only want the Pydantic side of things, then you can use **PyFactories** in
the same fashion as its ancestor.## Installation
```shell
pip install pyfactories
```## Migrate from Pydantic Factories
It is actually straightforward, you simply need to replace `pydantic_factories` with `pyfactories`
in your imports and that is it.## Example
```python
from datetime import date, datetime
from typing import List, Unionfrom pydantic import UUID4, BaseModel
from pyfactories import ModelFactory
class Person(BaseModel):
id: UUID4
name: str
hobbies: List[str]
age: Union[float, int]
birthday: Union[datetime, date]class PersonFactory(ModelFactory):
__model__ = Personresult = PersonFactory.build()
```And just its own ancestor, this is it. Almost no work, you are able to create mock data objects
that fits the `Person` Pydantic class model definition.This is possible because of the typing information available on the pydantic model and model-fields,
which are used as a source of truth for data generation.The factory parses the information stored in the pydantic model and generates a dictionary of kwargs
that are passed to the `Person` class' `init` method.## Features
Being initially the fork of [Pydantic Factories][pydantic_factories], that also means:
- ✅ Supports both built-in and pydantic types
- ✅ Supports pydantic field constraints
- ✅ Supports complex field types
- ✅ Supports custom model fields
- ✅ Supports dataclasses
- ✅ Supports TypedDicts## Why This Library
This library was widely used before because of its powerfull features and therefore with the
upcoming Pydantic 2.0, it will be even more robust with the core done in Rust.- 💯 Powerful
- 💯 Extensible
- 💯 Simple
- 💯 Rigorously tested## Contributing
This library is open to contributions. [Please see the contribution guide!][contributing]
## Star the initial authors
Although the intial [Pydantic Factories][pydantic_factories] is no longer maintained, there is
always the [Polyfactory][polyfactory] that deserves a ⭐️.[docs]: https://pyfactories.tarsild.io
[github]: https://github.com/tarsil/pyfactories
[pydantic_factories]: https://github.com/litestar-org/pydantic-factories
[polyfactory]: https://pypi.org/project/polyfactory/
[contributing]: https://pyfactories.tarsild.io/contributing