Models

DotDict

The DotDict is the base model used. It allows to use a dict with the DotNotation.

>>> dotdict = DotDict(foo="bar")
>>> dotdict2 = deepcopy(dotdict)
>>> dotdict2["foo"] = "baz"
>>> dotdict.foo = "bar"
>>> dotdict2.foo== "baz"
    True

ElasticSearchModel

It extends DotDict adding methods for common uses.

Every search return an ElasticSearchModel as result. Iterating on results, you iterate on ElasticSearchModel objects.

You can create a new one with the factory or get one by search/get methods.

obj = self.conn.factory_object(self.index_name, self.document_type, {"name": "test", "val": 1})
assert obj.name=="test"

You can change value via dot notation or dictionary.

obj.name = "aaa"
assert obj.name == "aaa"
assert obj.val == 1

You can change ES info via ._meta property or get_meta call.

assert obj._meta.id is None
obj._meta.id = "dasdas"
assert obj._meta.id == "dasdas"

Remember that it works as a dict object.

assert sorted(obj.keys()) == ["name", "val"]

You can save it.

obj.save()
obj.name = "test2"
obj.save()

reloaded = self.conn.get(self.index_name, self.document_type, obj._meta.id)
assert reloaded.name, "test2")