DEV Community

Cover image for jsf - Faking JSON data from a schema
Andy Challis
Andy Challis

Posted on

4 2

jsf - Faking JSON data from a schema

https://github.com/ghandic/jsf

Use jsf along with fake data generators to provide consistent and meaningful fake data for your system.

Main Features

  • Provides out of the box data generation from any JSON schema 📦
  • Extendable custom data providers using any lambda functions 🔗
  • Multi level state for dependant data (eg multiple objects sharing value, such as children with same surname) 🤓
  • Inbuilt validation of fake JSON produced ✅
  • In memory conversion from JSON Schema to Pydantic Models with generated examples 🤯
  • Seamless integration with FastAPI 🚀

Installation

$ pip install jsf

---> 100%
Enter fullscreen mode Exit fullscreen mode

Usage

Basic 😊

from jsf import JSF

faker = JSF(
    {
        "type": "object",
        "properties": {
            "name": {"type": "string", "$provider": "faker.name"},
            "email": {"type": "string", "$provider": "faker.email"},
        },
        "required": ["name", "email"],
    }
)

fake_json = faker.generate()
Enter fullscreen mode Exit fullscreen mode

Results in ...

{
    'name': 'Jesse Phillips', 
    'email': 'xroberson@hotmail.com'
}
Enter fullscreen mode Exit fullscreen mode

From JSON file 📁

from jsf import JSF

faker = JSF.from_json("demo-schema.json")
fake_json = faker.generate()
Enter fullscreen mode Exit fullscreen mode

Or run stright from the commandline...

Native install

jsf --schema src/tests/data/custom.json --instance wow.json
Enter fullscreen mode Exit fullscreen mode

Docker

docker run -v $PWD:/data challisa/jsf jsf --schema /data/custom.json --instance /data/example.json
Enter fullscreen mode Exit fullscreen mode

FastAPI Integration 🚀

Create a file main.py with:

from jsf import JSF
from fastapi import FastAPI

app = FastAPI(docs_url="/")
generator = JSF.from_json("custom.json")


@app.get("/generate", response_model=generator.pydantic())
def read_root():
    return generator.generate()

Enter fullscreen mode Exit fullscreen mode

Run the server with:

$ uvicorn main:app --reload

INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [28720]
INFO:     Started server process [28722]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
Enter fullscreen mode Exit fullscreen mode

Navigate to http://127.0.0.1:8000 and check out your endpoint. Notice the following are all automatically created:

  • Schema with descriptions and examples
  • Example response
  • Data generation by clicking "try it out"

Example Swagger UI - Page 1
Example Swagger UI - Page 2
Example Swagger UI - Page 3
Example Swagger UI - Page 4

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs