Skip to main content

Add your description here

Project description

Jambo - JSON Schema to Pydantic Converter

Jambo is a Python package that automatically converts JSON Schema definitions into Pydantic models. It's designed to streamline schema validation and enforce type safety using Pydantic's powerful validation features.

Created to simplifying the process of dynamically generating Pydantic models for AI frameworks like LangChain, CrewAI, and others.


✨ Features

  • ✅ Convert JSON Schema into Pydantic models dynamically
  • 🔒 Supports validation for strings, integers, floats, booleans, arrays, and nested objects
  • ⚙️ Enforces constraints like minLength, maxLength, pattern, minimum, maximum, uniqueItems, and more
  • 📦 Zero config — just pass your schema and get a model

📦 Installation

pip install jambo

🚀 Usage

from jambo.schema_converter import SchemaConverter

schema = {
    "title": "Person",
    "type": "object",
    "properties": {
        "name": {"type": "string"},
        "age": {"type": "integer"},
    },
    "required": ["name"],
}

Person = SchemaConverter.build(schema)

obj = Person(name="Alice", age=30)
print(obj)

✅ Example Validations

Strings with constraints

schema = {
    "title": "EmailExample",
    "type": "object",
    "properties": {
        "email": {
            "type": "string",
            "minLength": 5,
            "maxLength": 50,
            "pattern": r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$",
        },
    },
    "required": ["email"],
}

Model = SchemaConverter.build(schema)
obj = Model(email="user@example.com")
print(obj)

Integers with bounds

schema = {
    "title": "AgeExample",
    "type": "object",
    "properties": {
        "age": {"type": "integer", "minimum": 0, "maximum": 120}
    },
    "required": ["age"],
}

Model = SchemaConverter.build(schema)
obj = Model(age=25)
print(obj)

Nested Objects

schema = {
    "title": "NestedObjectExample",
    "type": "object",
    "properties": {
        "address": {
            "type": "object",
            "properties": {
                "street": {"type": "string"},
                "city": {"type": "string"},
            },
            "required": ["street", "city"],
        }
    },
    "required": ["address"],
}

Model = SchemaConverter.build(schema)
obj = Model(address={"street": "Main St", "city": "Gotham"})
print(obj)

🧪 Running Tests

To run the test suite:

poe tests

Or manually:

python -m unittest discover -s tests -v

🛠 Development Setup

To set up the project locally:

  1. Clone the repository
  2. Install uv (if not already installed)
  3. Install dependencies:
uv sync
  1. Set up git hooks:
poe create-hooks

📌 Roadmap / TODO

  • Support for enum and const
  • Support for anyOf, allOf, oneOf
  • Schema ref ($ref) resolution
  • Better error reporting for unsupported schema types

🤝 Contributing

PRs are welcome! This project uses MIT for licensing, so feel free to fork and modify as you see fit.


🧾 License

MIT License.

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

jambo-0.1.0.tar.gz (42.1 kB view details)

Uploaded Source

File details

Details for the file jambo-0.1.0.tar.gz.

File metadata

  • Download URL: jambo-0.1.0.tar.gz
  • Upload date:
  • Size: 42.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.6.14

File hashes

Hashes for jambo-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e2b6a109f8353bdaed8c6e3f442d45b4075fdb63431895caa02a5933885cc6b8
MD5 47d59634378b824596a2515d483fa309
BLAKE2b-256 5ec71d35de6c088654d4d2da4ccaaa44e9692d48ef23b47991b8ece559db95b6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page