Embedded documents fields

Work with embedded documents.

class EDoc(EmbeddedDocument):
    i = fields.IntegerField()

class Doc(Document):
    __collection__ = 'docs'
    edoc = EmbeddedDocumentField(EDoc)

doc = Doc()
doc.edoc = EDoc()
doc.edoc.i = 13
db.insert(doc)
class yadm.fields.embedded.BaseEmbeddedDocumentField(smart_null=False)
from_mongo(document, value)

Convert mongo value to python value.

Parameters:
  • document (BaseDocument) – document
  • value – mongo value
Returns:

python value

get_embedded_document_class(document, value)

Return class of embedded document for field.

prepare_value(document, value)

The method is called when value is assigned for the attribute.

Parameters:
Returns:

prepared value

It must be accept value argument and return processed (e.g. casted) analog. Also it is called once for the default value.

to_mongo(document, value)

Convert python value to mongo value.

Parameters:
  • document (BaseDocument) – document
  • value – python value
Returns:

mongo value

class yadm.fields.embedded.EmbeddedDocumentField(embedded_document_class, *, auto_create=True, **kwargs)

Field for embedded objects.

Parameters:
  • embedded_document_class (EmbeddedDocument) – class for embedded document
  • auto_create (bool) – automatic creation embedded document from access
copy()

Return copy of field.

get_embedded_document_class(document=None, value=None)

Return class of embedded document for field.

get_fake(document, faker, depth)

Return fake data for testing.

get_if_attribute_not_set(document)

Call if key not exist in document.

If auto_create is True, create and return new embedded document. Else AttributeError is raised.

prepare_value(document, value)

The method is called when value is assigned for the attribute.

Parameters:
Returns:

prepared value

It must be accept value argument and return processed (e.g. casted) analog. Also it is called once for the default value.

class yadm.fields.embedded.SimpleEmbeddedDocumentField(fields, *, auto_create=True, **kwargs)

Field for simply create embedded documents.

Usage:

class Doc(Document):
embedded = SimpleEmbeddedDocumentField({
‘i’: IntegerField(), ‘s’: StringField(),

})

contribute_to_class(document_class, name)

Add field for document_class.

Parameters:document_class (MetaDocument) – document class for add
class yadm.fields.embedded.TypedEmbeddedDocumentField(type_field=None, types=None, **kwargs)

Field for embedded document with variable types.

Parameters:
  • type_field (str) – name of field in embedded document for select type
  • types (dict) – map of type names to embedded document classes
get_embedded_document_class(document, value)

Return class of embedded document for field.

get_fake(document, faker, depth)

Return fake data for testing.