-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmetaclasses.py
More file actions
23 lines (21 loc) · 789 Bytes
/
metaclasses.py
File metadata and controls
23 lines (21 loc) · 789 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from .base import Factory
from .childrentree import ChildrenTree
class DictFactoryBuilder(type):
"""
A metaclass that builds DictFactory based classes.
"""
def __new__(meta, name, bases, dct):
_child_factory_tree = ChildrenTree()
_child_factory_tree.load_bases(bases)
_child_factory_tree.update(dct)
DictFactoryBuilder._clean_factories(dct)
dct["_child_factory_tree"] = _child_factory_tree
return super(DictFactoryBuilder, meta).__new__(meta, name, bases, dct)
@staticmethod
def _clean_factories(dct):
"""
After we create the children factory, we don't need it anymore
"""
for key in list(dct.keys()):
if issubclass(type(dct[key]), Factory):
dct.pop(key)