Skip to main content

Generate MongoDB validation schemas from Python type annotations and Pydantic models.

Project description

mongo-validations-generator

mongo-validations-generator is a lightweight Python library for generating MongoDB JSON Schema validation rules using standard Python type annotations and Pydantic models.

It allows you to define your MongoDB collection schemas declaratively with Python classes, while supporting advanced typing features like Annotated, Literal, Union, custom validation markers, and nested models.


Features

  • ✅ Auto-generates $jsonSchema validation for MongoDB
  • ✅ Support for Python type hints: str, int, float, bool, list, None
  • ✅ Nested objects using Pydantic-style inheritance
  • ✅ Annotated constraints using Annotated[..., Len(...)]
  • ✅ Support for Union, Optional, and Literal types
  • ✅ Custom BSON type markers (e.g., Long)
  • ✅ Ability to ignore fields with SchemaIgnored

🚀 Getting Started

1. Define a model

from annotated_types import Len
from mongo_validations_generator import MongoValidator, Long, SchemaIgnored
from typing import Annotated, Literal

class Product(MongoValidator):
    name: str
    description: str
    categories: list[str]
    price: Annotated[int, Long]
    tags: Annotated[list[str], Len(1)]
    internal_code: Annotated[str, SchemaIgnored]
    status: Literal["active", "archived"]

2. Generate the schema

import json

print(json.dumps(Product.generate_validation_rules("Product"), indent=2))

output:

{
  "$jsonSchema": {
    "title": "Product Validation",
    "bsonType": "object",
    "required": [
      "name",
      "description",
      "categories",
      "price",
      "tags",
      "status"
    ],
    "properties": {
      "name": {
        "bsonType": "string",
        "description": "'name' must match schema"
      },
      "description": {
        "bsonType": "string",
        "description": "'description' must match schema"
      },
      "categories": {
        "bsonType": "array",
        "items": {
          "bsonType": "string"
        },
        "description": "'categories' must match schema"
      },
      "price": {
        "bsonType": "long",
        "description": "'price' must match schema"
      },
      "tags": {
        "bsonType": "array",
        "items": {
          "bsonType": "string"
        },
        "minItems": 1,
        "description": "'tags' must match schema"
      },
      "status": {
        "enum": ["active", "archived"],
        "bsonType": "string",
        "description": "'status' must match schema"
      }
    }
  }
}

📦 Supported BSON Types

The following BSON types are currently supported by the schema generator:

Python Type BSON Type Notes
str "string"
int "int"
float "double"
bool "bool"
list[...] "array" Supports nested items, constraints, and unions
None / Optional[...] "null" Supports Union[Type, None] and Optional[...]
Annotated[int, Long] "long" Use Annotated[int, Long] to convert to "long"
Literal[...] "enum" Will emit enum values and infer BSON type if homogeneous
Enum / StrEnum / IntEnum "enum" Maps to the BSON enum validator using the enum's members
MongoValidator subclass "object" Nested objects are fully supported
Annotated[list[T], Len(...)] "array" Adds minItems and maxItems constraints to list validation
BSONDecimal128 "decimal" Outputs a decimal-compatible field using MongoDB's Decimal128 format

❗ Not supported: dict, set, tuple, frozenset, or other complex built-in containers.

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

mongo_validations_generator-1.2.0.tar.gz (28.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mongo_validations_generator-1.2.0-py3-none-any.whl (11.0 kB view details)

Uploaded Python 3

File details

Details for the file mongo_validations_generator-1.2.0.tar.gz.

File metadata

File hashes

Hashes for mongo_validations_generator-1.2.0.tar.gz
Algorithm Hash digest
SHA256 6033990dc8b1ac23fe3e8d320b9e70f3e327b5e8729d65835c6a11befdbad574
MD5 1faf8ad4b75a59e614870d2d1561c1b9
BLAKE2b-256 035468db87b622b9d92bd82f40890f2a5fec9ddceeac8a3ad686e875966a3716

See more details on using hashes here.

File details

Details for the file mongo_validations_generator-1.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for mongo_validations_generator-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d4bede5fbadcb18d139953ddde49590ef033104948daf2573ae361cfaf483458
MD5 96dec04cccf7487dead2d1172a895f26
BLAKE2b-256 98c95a7838ebb8b46819ea1cf8529b05b1e894006a7d98f62072622602f8c07c

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