Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (
Help us improve Python packaging - Donate today!

Hypothesis strategy for MongoEngine models

Project Description

This package contains a Hypothesis strategy for generating example documents from a MongoEngine model.

Here’s a minimal example:

from hypothesis import given, note
from hypothesis_mongoengine.strategies import documents
from mongoengine import Document, StringField

class Foo(Document):
    foo = StringField()

def test_something(foo):
    # Handy since the default __repr__ is unhelpful:

    assert hasattr(foo, 'id')

You can customize the generation of examples by passing alternate strategies for each field as keyword arguments:

@given(documents(Foo, foo=strategies.strings(max_size=7)))
def test_another thing(foo):

By default, all examples that would validate against the built-in MongoEngine restrictions are generated. If the field is not required, None will also be generated. If choices is specified, only those values will be generated.

If validation is specified, the default strategy will be filtered by the validation function. If the custom validation function accepts too few values, Hypothesis may fail the health check. In that case, supply a custom validator that generates acceptable examples more efficiently.

What’s Not Supported

ReferenceField is not generically supported and probably will never be. You can, and should, provide an application-specific strategy for these fields. This permits you to ensure that the referential-integrity constraints needed by your application are satisfied. Don’t forget that MongoEngine expects the documents to have been saved to the database before you try to reference them.

DynamicDocument (and DynamicEmbeddedDocument) currently generate only the explicitly-specified fields.

DynamicField is normally used internally by DynamicDocument, but if you have a model which references it explicitly, it won’t by handled generically.

Handling Custom Fields

If you have a custom field in use in your application, you can register a strategy to generate examples for it using the field_strat decorator.

For example, a strategy for the EnumField from extras-mongoengine could look like this:

from extras_mongoengine.fields import EnumField
from hypothesis import strategies
from hypothesis_mongoengine import field_strat

def my_custom_strat(field):
    return strategies.sampled_from(field.enum)

The fields are looked up in the registry by their names, so if you have a hierarchy of custom fields, you must register the leaf types. You can, however, stack the decorator several times if you need to:

from extras_mongoengine.fields import EnumField, IntEnumField, StringEnumField
from hypothesis import strategies
from hypothesis_mongoengine import field_strat

def my_custom_strat(field):
    return strategies.sampled_from(field.enum)

Release History

This version
History Node


History Node


Download Files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

File Name & Hash SHA256 Hash Help Version File Type Upload Date
(6.7 kB) Copy SHA256 Hash SHA256
py2.py3 Wheel Feb 13, 2018
(4.1 kB) Copy SHA256 Hash SHA256
Source Feb 13, 2018

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting