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
-
exclusiveMinimum
andexclusiveMaximum
in integers and numbers. -
number
multipleOf
keyword -
string
pattern
regex keyword -
required
keyword -
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
allOf
andnot
keywords- conditional keywords
if
,then
andelse
patternProperties
on objects- property and schema
dependencies
on 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 |