def tout_instancier(self): """Cette méthode permet d'instancier les modules chargés auparavant. On se base sur le type du module (classe ou objet) pour le créer ou non. En effet, cette méthode doit pouvoir être appelée quand certains modules sont instanciés, et d'autres non. NOTE IMPORTANTE: on passe au constructeur de chaque module self, c'est-à-dire l'importeur. Les modules en ont en effet besoin pour interagir entre eux et avoir accès au parser de la ligne de commande, à l'analyseur des fichiers de configuration et au gestionnaire des loggers. L'ordre d'instanciation des modules est contenu dans la configuration globale ('modules_a_instancier'). Les modules à ignorer sont également définis dans cette configuration globale. Leur instance est supprimée de l'importeur. """ conf_glb = Importeur.anaconf.get_config("globale") # On supprime avant tout les modules à ignorer Importeur.logger.debug("Suppression des modules à ignorer :") for nom_module in conf_glb.modules_a_ignorer: if hasattr(self, nom_module): # le module est chargé delattr(self, nom_module) Importeur.logger.debug(" Le module {0} a été ignoré et " \ "supprimé de l'importeur".format(nom_module)) else: Importeur.logger.warning(" Le module {0} n'a pas été " \ "instancié et ne peut être ignoré".format(nom_module)) # On instancie d'abord les modules prioritaires # (c'est-à-dire ceux définis dans la donnée de configuration) Importeur.logger.debug("Instanciation des modules prioritaires :") for nom_module in conf_glb.modules_a_instancier: if hasattr(self, nom_module): # le module est chargé module = getattr(self, nom_module) if type(module) is type: # on doit l'instancier setattr(self, nom_module, module(self)) Importeur.logger.debug(" Le module {0} a été " \ "instancié".format(nom_module)) elif isinstance(module, BaseModule): pass else: Importeur.logger.warning(" Le module {0} n'a pas été " \ "instancié".format(nom_module)) # On charge les modules restants Importeur.logger.debug("Instanciation des modules restants :") for nom_module, module in self.__dict__.items(): if type(module) is type: # on doit l'instancier setattr(self, nom_module, module(self)) Importeur.logger.debug(" Le module {0} a été " \ "instancié".format(nom_module))
def charger_module(self, parser_cmd, m_type, nom): """Méthode permettant de charger un module en fonction de son type et de son nom. Si le module est déjà chargé, on ne fait rien. Note: à la différence de tout_charger, cette méthode créée directement l'objet gérant le module. """ if m_type == "primaire": rep = REP_PRIMAIRES elif m_type == "secondaire": rep = REP_SECONDAIRES else: raise ValueError("le type {0} n'est ni primaire ni secondaire" \ .format(type)) if self.module_est_charge(nom): print("Le module {0} est déjà chargé.".format(nom)) else: package = __import__(rep + "." + nom) module = getattr(getattr(package, nom), \ nom.capitalize()) setattr(self, nom, module(self, parser_cmd))
def tout_instancier(self, parser_cmd): """Cette méthode permet d'instancier les modules chargés auparavant. On se base sur le type du module (classe ou objet) pour le créer ou non. En effet, cette méthode doit pouvoir être appelée quand certains modules sont instanciés, et d'autres non. NOTE IMPORTANTE: on passe au constructeur de chaque module self, c'est-à-dire l'importeur. Les modules en ont en effet besoin pour interragir entre eux. """ for nom_module, module in self.__dict__.items(): if type(module) is type: # on doit l'instancier setattr(self, nom_module, module(self, parser_cmd))