Coverage for mongo/base.py: 100%
44 statements
« prev ^ index » next coverage.py v7.9.2, created at 2026-07-24 16:42 +0000
« prev ^ index » next coverage.py v7.9.2, created at 2026-07-24 16:42 +0000
1from . import engine
2from mongoengine.errors import *
3import logging
5__all__ = ['MongoBase']
8class MongoBase:
9 qs_filter = {}
11 def __init_subclass__(cls, engine, **kwargs):
12 super().__init_subclass__(**kwargs)
13 cls.engine = engine
15 def __new__(cls, pk, *args, **kwargs):
16 if isinstance(pk, cls):
17 return pk
18 new = super().__new__(cls)
19 # got a engine instance
20 if isinstance(pk, new.engine):
21 new.obj = pk
22 else:
23 try:
24 new.obj = new.engine.objects(pk=pk).get()
25 except engine.DoesNotExist:
26 new.obj = new.engine(id=pk)
27 return new
29 def __getattr__(self, name):
30 return self.obj.__getattribute__(name)
32 def __setattr__(self, name, value):
33 if name in self.engine._fields:
34 self.obj.__setattr__(name, value)
35 else:
36 super().__setattr__(name, value)
38 def __eq__(self, other):
39 return self and other is not None and self.pk == other.pk
41 def __bool__(self):
42 try:
43 return self._qs.filter(pk=self.pk, **self.qs_filter).__bool__()
44 except ValidationError:
45 return False
47 def __str__(self):
48 return f'{self.__class__.__name__.lower()} [{self.pk}]'
50 def __repr__(self):
51 return self.obj.to_json() if self else '{}'
53 def reload(self, *fields):
54 if self:
55 self.obj.reload(*fields)
56 return self
58 @property
59 def logger(self):
60 return logging.getLogger(__name__)