Пример #1
0
 def tout_recharger(self):
     """Méthode appelée pour recharger TOUS les modules"""
     logger = type(self).man_logs.get_logger("sup")
     res = False
     Importeur.nb_hotboot += 1
     objets_base.clear()
     try:
          for nom_package in os.listdir(getcwd() + "/" + REP_PRIMAIRES):
              if not nom_package.startswith("__"):
                  py_compile.compile(getcwd() + "/" + \
                         REP_PRIMAIRES + "/" + nom_package + \
                         "/__init__.py", doraise=True)
     except py_compile.PyCompileError:
         logger.fatal(
             "Une erreur s'est produite lors de l'hotboot.")
         logger.fatal(traceback.format_exc())
     else:
         self.tout_detruire()
         self.tout_decharger()
         self.tout_charger()
         self.tout_instancier()
         self.tout_configurer()
         self.tout_initialiser()
         res = True
     return res
Пример #2
0
    def tout_charger(self):
        """Méthode appelée pour charger les modules primaires et secondaires.
        Par défaut, on importe tout mais on ne crée rien.

        """
        # On commence par parcourir les modules primaires
        Importeur.logger.debug("Chargement des modules :")
        for nom_package in os.listdir(getcwd() + "/" + REP_PRIMAIRES):
            if not nom_package.startswith("__"):
                self.charger_module("primaire", nom_package)
                Importeur.logger.debug("  Le module {0} a été chargé".format( \
                        nom_package))
        # On fait de même avec les modules secondaires
        for nom_package in os.listdir(getcwd() + "/" + REP_SECONDAIRES):
            if not nom_package.startswith("__"):
                self.charger_module("secondaire", nom_package)
                Importeur.logger.debug("  Le module {0} a été chargé".format( \
                        nom_package))
Пример #3
0
    def tout_charger(self):
        """Méthode appelée pour charger les modules primaires et secondaires.
        Par défaut, on importe tout mais on ne crée rien.

        """
        # On commence par parcourir les modules primaires
        Importeur.logger.debug("Chargement des modules :")
        for nom_package in os.listdir(getcwd() + "/" + REP_PRIMAIRES):
            if not nom_package.startswith("__"):
                self.charger_module("primaire", nom_package)
                Importeur.logger.debug("  Le module {0} a été chargé".format( \
                        nom_package))
        # On fait de même avec les modules secondaires
        for nom_package in os.listdir(getcwd() + "/" + REP_SECONDAIRES):
            if not nom_package.startswith("__"):
                self.charger_module("secondaire", nom_package)
                Importeur.logger.debug("  Le module {0} a été chargé".format( \
                        nom_package))
Пример #4
0
 def tout_recharger(self):
     """Méthode appelée pour recharger TOUS les modules"""
     logger = type(self).man_logs.get_logger("sup")
     res = False
     Importeur.nb_hotboot += 1
     objets_base.clear()
     try:
         for nom_package in os.listdir(getcwd() + "/" + REP_PRIMAIRES):
             if not nom_package.startswith("__"):
                 py_compile.compile(getcwd() + "/" + \
                        REP_PRIMAIRES + "/" + nom_package + \
                        "/__init__.py", doraise=True)
     except py_compile.PyCompileError:
         logger.fatal("Une erreur s'est produite lors de l'hotboot.")
         logger.fatal(traceback.format_exc())
     else:
         self.tout_detruire()
         self.tout_decharger()
         self.tout_charger()
         self.tout_instancier()
         self.tout_configurer()
         self.tout_initialiser()
         res = True
     return res
Пример #5
0
 def get_config(nom):
     """Retourne, si peut être chargée, la configuration YAML de l'éditeur.
     
     On doit préciser en paramètre :
         nom -- le nom du répertoire dans laquel récupérer l'information
     
     Est retourné :
         None si le fichier ne peut être trouvée
         Une liste de dictionnaires permettant d'étendre la configuration
     
     Si une erreur se produit dans le parsage du fichier YAML ou si
     le fichier n'a pas la bonne structure, une exception est levée.
     
     """
     chemin = getcwd() + os.sep.join(("primaires", "autoquetes", "types",
             nom, "editeur.yml"))
     if not os.path.exists(chemin):
         return None
     
     if not os.path.isfile(chemin):
         raise os.error(chemin + " n'est pas un fichier")
     
     if not os.access(chemin, os.R_OK):
         raise os.error(chemin + " ne peut être lu")
     
     with open(chemin, "r", encoding="Utf-8") as fichier:
         config = load(fichier)
     
     # Vérifie la syntaxe du fichier
     if not isinstance(config, list):
         raise ValueError("la syntaxe du fichier YAML {} n'est pas " \
                 "valide. Une liste de dictionnaires est attendue".format(chemin))
     
     for elt in config:
         if not isinstance(elt, dict):
             raise ValueError("la syntaxe du fichier YAML {} n'est pas " \
                     "valide. Une liste de dictionnaires est " \
                     "attendue".format(chemin))
     
     return config
Пример #6
0
 def charger_types(self):
     """Charge les types d'autoquêtes définis dans le sous-package types."""
     chemin = getcwd() + "/primaires/autoquetes/types"
     for nom in os.listdir(chemin):
         if not nom.startswith("_") and os.path.isdir(chemin + os.sep + nom):
             t_type = __import__("primaires.autoquetes.types." + nom)
             module = getattr(t_type.autoquetes.types, nom)
             if not hasattr(module, "AutoQuete"):
                 raise ValueError("le fichier primaires/autoquetes/" \
                         "types/" + nom + "/__init__.py ne contient pas de classe AutoQuete")
             
             classe = module.AutoQuete
             for attr in ATTRIBUTS_AUTOQUETE:
                 if not hasattr(classe, attr):
                     raise ValueError("la classe d'autoquête " + nom + \
                             " n'a pas d'attribut ou méthode " + repr(attr))
             
             if not hasattr(classe, "parent"):
                 raise ValueError("le type d'autoquête " + nom + \
                         " n'a pas de parent défini")
             
             classe.nom_rep = nom
             self.types[classe.nom_type] = classe
     
     # On ordonne les classes pour qu'elle soit dans l'ordre de plus
     # petit besoin au début. On doit avoir donc en-tête la classe définissant
     # la base qui ne définit rien), puis celle de premier niveau, et ainsi de
     # suite
     noms = []
     for nom, t_type in self.types.items():
         if nom in noms:
             continue
         
         if t_type.parent is None:
             noms.insert(0, nom)
         else:
             if t_type.parent not in self.types:
                 raise ValueError("le parent {} de {} ne peut être " \
                         "trouvé".format(t_type.parent, t_type.nom_type))
             
             if t_type.parent in noms:
                 indice = noms.index(t_type.parent)
                 noms.insert(indice + 1, nom)
             else:
                 noms.append(t_type.parent)
                 noms.append(nom)
     
     classes = [self.types[n] for n in noms]
     
     # On réécrit les classes à présent
     for classe in classes:
         if classe.parent is not None:
             parent = self.types[classe.parent]
             nom_c = classe.nom_type
             nom_c = "".join([(m[0].upper() + m[1:]) for m in \
                     nom_c.split("_")])
             n_classe = type(nom_c, (parent, ), dict(
                     classe.__dict__))
             self.types[classe.nom_type] = n_classe
             classe = n_classe
         
         # Chargement de la configuration des éditeurs du type
         config = ValidateurEditeur.get_config(classe.nom_rep)
         if config:
             ValidateurEditeur.valider_config(config)
         
         ValidateurEditeur.etendre_config(classe, config)
Пример #7
0
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
# OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.


"""Ce fichier permet d'ajouter le chemin des bibliothèques aux chemins des
modules Python.

Ce fichier n'a besoin d'être importé qu'une seule fois, dans le fichier
principal.
Vous pouvez ensuite importer directement les bibliothèques contenues dans
le répertoire lib.
Par exemple :
>>> from yaml import load, dump

"""

import os
import sys

from corps.arborescence import getcwd

sys.path.append(os.path.join(getcwd(), "../lib"))

Пример #8
0
 def chemin(self):
     """Retourne le chemin du module"""
     rel = self.importeur.chemins_modules[self.type] + os.sep + self.nom
     return os.path.join(getcwd(), rel)