API Documentation

eve_mongoengine

This module implements Eve extension which enables Mongoengine models to be used as eve schema. If you use mongoengine in your application and simultaneously want to use eve, instead of writing schema again in cerberus format, you can use this extension, which takes your mongoengine models and auto-transforms it into creberus schema.

copyright:
  1. 2014 by Stanislav Heller.
license:

BSD, see LICENSE for more details.

class eve_mongoengine.__init__.EveMongoengine(app=None)[source]

Bases: object

An extension to Eve which allows Mongoengine models to be registered as an Eve’s “domain”.

Acts as Flask extension and implements its ‘protocol’.

Usage:

from eve_mongoengine import EveMongoengine
from eve import Eve

app = Eve()
ext = EveMongoengine(app)
ext.add_model([MyModel, MySuperModel])

This class tries hard to be extendable and hackable as possible, every possible value is either a method param (for IoC-DI) or class attribute, which can be overwriten in subclass.

add_model(models, lowercase=True, **settings)[source]

Creates Eve settings for mongoengine model classes.

Returns dict which has to be passed to the settings param in Eve’s constructor.

Parameters:
  • model – model or list of them (subclasses of mongoengine.Document).
  • lowercase – if true, all class names will be taken lowercase as resource names. Default True.
  • settings – any other keyword argument will be treated as param to settings dictionary.
datalayer_class

Datalayer class - instance of this class is pushed to app.data attribute and Eve does it’s magic. See datalayer.MongoengineDataLayer for more info.

alias of MongoengineDataLayer

default_item_methods = ['GET', 'PATCH', 'PUT', 'DELETE']

Default HTTP methods allowed to manipulate with items (single records). These are assigned to settings of every registered model, if not given others.

default_resource_methods = ['GET', 'POST', 'DELETE']

Default HTTP methods allowed to manipulate with whole resources. These are assigned to settings of every registered model, if not given others.

fix_model_class(model_cls)[source]

Internal method invoked during registering new model.

Adds necessary fields (updated and created) into model class to ensure Eve’s default functionality.

This is a helper for correct manipulation with mongoengine documents within Eve. Eve needs ‘updated’ and ‘created’ fields for it’s own purpose, but we cannot ensure that they are present in the model class. And even if they are, they may be of other field type or missbehave.

Parameters:model_cls – mongoengine’s model class (instance of subclass of mongoengine.Document) to be fixed up.
init_app(app)[source]

Binds EveMongoengine extension to created eve application.

Under the hood it fixes all registered models and overwrites default eve’s datalayer eve.io.mongo.Mongo into eve_mongoengine.datalayer.MongoengineDataLayer.

This method implements flask extension interface: :param app: eve application object, instance of eve.Eve.

schema_mapper_class

Mapper from mongoengine model into cerberus schema. This class may be subclassed in the future to support new mongoenigne’s fields.

alias of SchemaMapper

settings_class

The class used as settings dictionary. Usually subclass of dict with tuned methods/behaviour.

alias of Settings

validator_class

The class used as Eve validator, which is also one of Eve’s constructor params. In EveMongoengine, we need to overwrite it. If extending, assign only subclasses of EveMongoengineValidator.

alias of EveMongoengineValidator

eve_mongoengine.__init__.fix_last_updated(sender, document, **kwargs)[source]

Hook which updates LAST_UPDATED field before every Document.save() call.

eve_mongoengine.__init__.get_utc_time()[source]

Returns current datetime in system-wide UTC format wichout microsecond part.

eve_mongoengine.schema

Mapping mongoengine field types to cerberus schema.

copyright:
  1. 2014 by Stanislav Heller.
license:

BSD, see LICENSE for more details.

class eve_mongoengine.schema.SchemaMapper[source]

Bases: object

Default mapper from mongoengine model classes into cerberus dict-like schema.

classmethod create_schema(model_cls, lowercase=True)[source]
Parameters:
  • model_cls – Mongoengine model class, subclass of mongoengine.Document.
  • lowercase – True if names of resource for model class has to be treated as lowercase string of classname.
classmethod get_subresource_settings(model_cls, resource_name, resource_settings, lowercase=True)[source]

Yields name of subresource domain and it’s settings.

classmethod process_field(field, lowercase)[source]

Returns Eve field definition from Mongoengine field

Parameters:
  • field – Mongoengine field
  • lowercase – True if names of resource for model class has to be treated as lowercase string of classname.

eve_mongoengine.validation

This module implements custom validator based on eve.io.mongo.validation, which is cerberus-validator extension.

The purpose of this module is to enable validation for special mongoengine fields.

copyright:
  1. 2014 by Stanislav Heller.
license:

BSD, see LICENSE for more details.

class eve_mongoengine.validation.EveMongoengineValidator(schema, resource=None)[source]

Bases: eve.io.mongo.validation.Validator

Helper validator which adapts mongoengine special-purpose fields to cerberus validator API.

validate(document, schema=None, update=False, context=None)[source]

Main validation method which simply tries to validate against cerberus schema and if it does not fail, repeats the same against mongoengine validation machinery.

eve_mongoengine.struct

Datastructures for eve-mongoengine.

copyright:
  1. 2014 by Stanislav Heller.
license:

BSD, see LICENSE for more details.

eve_mongoengine.datalayer

This module implements eve’s data layer which uses mongoengine models instead of direct pymongo access.

copyright:
  1. 2014 by Stanislav Heller.
license:

BSD, see LICENSE for more details.

class eve_mongoengine.datalayer.MongoengineDataLayer(ext)[source]

Bases: eve.io.mongo.mongo.Mongo

Data layer for eve-mongoengine extension.

Most of functionality is copied from eve.io.mongo.Mongo.

default_queryset = 'objects'

name of default queryset, where datalayer asks for data

find(resource, req, sub_resource_lookup)[source]

Seach for results and return list of them.

Parameters:
  • resource – name of requested resource as string.
  • req – instance of eve.utils.ParsedRequest.
  • sub_resource_lookup – sub-resource lookup from the endpoint url.
find_one(resource, req, **lookup)[source]

Look for one object.

insert(resource, doc_or_docs)[source]

Called when performing POST request

json_encoder_class

default JSON encoder

alias of MongoengineJsonEncoder

mongoengine_options = {'use_atomic_update_for_patch': True}

Options for usage of mongoengine layer. use_atomic_update_for_patch - when set to True, Mongoengine layer will use update_one() method (which is atomic) for updating. But then you will loose your pre/post-save hooks. When you set this to False, for updating will be used save() method.

remove(resource, lookup)[source]

Called when performing DELETE request.

replace(resource, id_, document)[source]

Called when performing PUT request.

update(resource, id_, updates)[source]

Called when performing PATCH request.

class eve_mongoengine.datalayer.MongoengineJsonEncoder(skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, encoding='utf-8', default=None, use_decimal=True, namedtuple_as_object=True, tuple_as_array=True, bigint_as_string=False, item_sort_key=None, for_json=False, ignore_nan=False, int_as_string_bitcount=None)[source]

Bases: eve.io.mongo.mongo.MongoJSONEncoder

Propretary JSON encoder to support special mongoengine’s special fields.

default(obj)[source]
class eve_mongoengine.datalayer.PymongoQuerySet(qs)[source]

Bases: object

Dummy mongoenigne-like QuerySet behaving just like queryset with as_pymongo() called, but returning ALL fields in subdocuments (which as_pymongo() somehow filters).