Provides random samples of given json schema
Project description
freddy
Provides randomized json data (samples) that complies with a given schema.
Works both for json schema and pydantic models.
Usage
pydantic
import datetime
from pprint import pprint
from typing import List, Optional
from pydantic import BaseModel, Field
import freddy
class User(BaseModel):
id: int
name = 'John Doe'
signup_ts: Optional[datetime.datetime] = None
friends: List[int] = []
pattern_field: str = Field(..., regex=r"^[-_a-zA-Z0-9]+$")
sample = freddy.sample(User)
pprint(sample)
{'id': 452, 'signup_ts': '1903-03-12T20:20:00', 'friends': [675, 408], 'pattern_field': 'EUvKs7BIK-Ne', 'name': 'xfphlync'}
User.validate(sample)
User(id=452, signup_ts=datetime.datetime(1903, 3, 12, 20, 20), friends=[675, 408], pattern_field='EUvKs7BIK-Ne', name='xfphlync')
jsonschema
from pprint import pprint
import jsonschema
import freddy
family_schema = {
"type": "array",
"items": {
"properties": {
"member": {"$ref": "#/definitions/person"},
"role": {"$ref": "#/definitions/role"},
},
"type": "object",
},
"maxItems": 5,
"minItems": 1,
"definitions": {
"person": {
"properties": {
"age": {"type": "integer"},
"name": {"type": "string"},
"pets": {
"items": {"$ref": "#/definitions/pet"},
"maxItems": 2,
"type": "array",
},
},
"type": "object",
},
"pet": {
"properties": {
"kind": {"enum": ["dog", "cat"], "type": "string"},
"name": {"type": "string"},
},
"type": "object",
},
"role": {
"enum": [
"father",
"mather",
"son",
"daughter",
"aunt",
"grandma",
"grandpa",
],
"type": "string",
},
}
}
# Get 10 random samples
for i in range(10):
sample_family = freddy.sample(family_schema)
# Validate against schema
jsonschema.validate(sample_family, family_schema)
pprint(sample_family)
[
{"member": {"age": 77, "name": "k", "pets": []}, "role": "grandma"},
{"member": {"age": 64, "name": "naifvxf", "pets": []}, "role": "grandpa"},
{
"member": {
"age": 23,
"name": "itruydotrj",
"pets": [{"kind": "cat", "name": "o"}, {"kind": "cat", "name": "uonmvfgd"}],
},
"role": "son",
},
]
Install
pip install freddy
Development
# Clone the repo
git@github.com:lferran/freddy.git
cd freddy
make develop
# Run tests
make tests
JSON Schema support
Conforms to JSON Schema Draft 7. The following features are supported:
-
boolean type
-
null type
-
string type
-
number type
-
integer type
-
array type
-
object type
-
definitions/references
-
Boolean type
-
consts
-
exclusiveMinimumandexclusiveMaximumin integers and numbers. -
number
multipleOfkeyword -
string
patternregex keyword -
requiredkeyword -
additionalProperties -
all string built-in formats
-
be able to provide custom basic type factories
-
multiple types:
{"type": ["string", "array"]} -
look into
allOf: generate multiple objects + merge
Does not support:
- ID referencing
allOfandnotkeywords- conditional keywords
if,thenandelse patternPropertieson objects- property and schema
dependencieson objects.
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
File details
Details for the file freddy-3.1.0.tar.gz.
File metadata
- Download URL: freddy-3.1.0.tar.gz
- Upload date:
- Size: 6.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.6.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.8.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
37f6e075efede218a6b1870589d39eadb930a88fc908e3ecbdd47be73b0f7eb5
|
|
| MD5 |
25bdab09ea95fa12f6b59dfe5b220534
|
|
| BLAKE2b-256 |
831efe1299025001761a1cd0c29ed8fff15a4ca98f332ee6fa8fc372a4dfb9f9
|