Brain.py 1.2KB

123456789101112131415161718192021222324252627282930313233343536
  1. from intelligine.core.exceptions import BrainPartAlreadyExist
  2. from intelligine.cst import BRAIN_SCHEMA
  3. class Brain():
  4. _brain_parts = {}
  5. def __init__(self, context, host):
  6. self._context = context
  7. self._host = host
  8. self._schema = {}
  9. self._parts = {}
  10. self._init_parts()
  11. def _init_parts(self):
  12. for brain_part_name in self._brain_parts:
  13. self._set_brain_part(brain_part_name, self._brain_parts[brain_part_name](self))
  14. def _set_brain_part(self, name, brain_part, replace=False):
  15. if name in self._parts and not replace:
  16. raise BrainPartAlreadyExist()
  17. self._parts[name] = brain_part
  18. self._update_schema()
  19. def get_part(self, name):
  20. return self._parts[name]
  21. def _update_schema(self):
  22. self._schema = {}
  23. for part_name in self._parts:
  24. self._schema[part_name] = self._parts[part_name].__class__
  25. # TODO: N'est-ce pas un schema appartenant a la classe ? Ne suffirai t-il pas de stocker ce schema par classe
  26. # plutôt que par objet ?
  27. self._context.metas.value.set(BRAIN_SCHEMA, self._host.get_id(), self._schema)