Skip to main content

MongoEngine JSON Schema Generator

Project description

JSON Schema Generator for MongoEngine Documents

📖 About the project

What is this and why?

This package provides a mixin class that extends a MongoEngine document's functionality by adding a .json_schema() method and allows generating a JSON schema directly from the document. Generated schema then can be used in API documentation or form validation and automatic form generation on a web application frontend, etc.

Generated schema should be compatible with JSON schema specification version Draft-7 and newer.

Tested on

  • Python 3.10
  • MongoEngine 0.27.0

but should work on Python >= 3.7 and MongoEngine >= 0.20.0 without any problems.

🛠 Installation

pip install mongoengine-jsonschema

💻 Getting started

Add JsonSchemaMixin to your document class as parent. Resolution order matters, so always place MongoEngine document first.

import mongoengine as me
from mongoengine_jsonschema import JsonSchemaMixin

class Person(me.Document, JsonSchemaMixin):
    name = me.StringField(required=True, min_length=1, max_length=32)
    age = me.IntField(min_value=0)

Then you can generate JSON schema by calling .json_schema() method.

Person.json_schema()

which returns the schema as a Python dictionary

{
    '$id': '/schemas/Person',
    'title': 'Person',
    'type': 'object',
    'properties': {
        'age': {
            'type': 'integer',
            'title': 'Age',
            'minimum': 0
        },
        'name': {
            'type': 'string',
            'title': 'Name',
            'minLength': 1,
            'maxLength': 32
        }
    },
    'required': ['name'],
    'additionalProperties': False
}

Example

Check out example.md for a more extensive example.

Features

  • Inheritance is supported. Make sure you add mixin to parent class.
  • additionalProperties is set to False for DynamicDocument and DynamicEmbeddedDocument classes.
  • required keyword can be removed by setting strict argument to False (.json_schema(strict=False)). This is useful for partial validation when updating documents using HTTP PATCH method.
  • Constraints for special StringField types such as EmailField, URLField, UUIDField, DateTimeField etc. are applied to schema using format and/or pattern keywords.
  • Fields derived from GeoJsonBaseField can be validated for both array and object types as supported by MongoEngine.
  • Field arguments/constraints required, min_length, max_length, min_value, max_value, default, choices, regex and url_regex (for URLField) are supported and reflected to schema.
  • Excluding a field from schema is possible with setting field argument exclude_from_schema to True. Example:
    name = me.StringField(exclude_from_schema=True)
    
  • Auto-generates human-friendly (first-letter capitalized, separate words) title from both document (PascalCase) and field names (snake_case). Keeps uppercase acronyms as is, e.g. page_URL -> Page URL.
  • For ListField types, required=True means it cannot be empty, therefore, schema defines this constraint with minItems keyword.
  • Custom schemas can be defined directly in model class with _JSONSCHEMA class attribute. Setting a _JSONSCHEMA attribute will bypass JSON schema generation.

Limitations

  • FileField, ImageField fields are not supported
  • PolygonField and MultiPolygonField must start and end at the same point, but this is not enforced by generated schema
  • schemes argument is ignored for URLField
  • domain_whitelist, allow_utf8_user, allow_ip_domain arguments are ignored for EmailField
  • The following fields are defined in schema as strings and may require field specific conversion before assigning to a document's attribute:
    • ObjectIdField
    • BinaryField
    • DateTimeField
    • ComplexDateTimeField
    • DateField
    • ReferenceField
    • LazyReferenceField
    • CachedReferenceField
    • GenericReferenceField
    • GenericLazyReferenceField

👥 Contact

🤝 Contributing

Contributions, issues, and feature requests are welcome!

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

mongoengine-jsonschema-0.1.3.tar.gz (13.0 kB view details)

Uploaded Source

Built Distribution

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

mongoengine_jsonschema-0.1.3-py3-none-any.whl (7.7 kB view details)

Uploaded Python 3

File details

Details for the file mongoengine-jsonschema-0.1.3.tar.gz.

File metadata

  • Download URL: mongoengine-jsonschema-0.1.3.tar.gz
  • Upload date:
  • Size: 13.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.17

File hashes

Hashes for mongoengine-jsonschema-0.1.3.tar.gz
Algorithm Hash digest
SHA256 b1709517df8b57ae8acb7aa963331e007a94c76167e6eb305a64a29b479dbc0d
MD5 abe2c0f28d3d5af4eef14bebea557fdb
BLAKE2b-256 cdb776cd5a4a5cbecaceb2f58c5bebf6159b7ada53ec7f2144d644fc7e99ba26

See more details on using hashes here.

File details

Details for the file mongoengine_jsonschema-0.1.3-py3-none-any.whl.

File metadata

File hashes

Hashes for mongoengine_jsonschema-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 1661e92854aedb902b35c4ed1cd509b766c12f960b63f8996b26ea4704fd364c
MD5 3c4cd315c0d9ad35e135bdba65bdee3c
BLAKE2b-256 6f2e21016824ac3ddaf8292706ac5ec7cb15d190cb93191536890e3c41a4b78c

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