# Objet re pour controler les identificateurs Python
concept_re=re.compile(r'[a-zA-Z_]\w*$')
-# import rajoutés suite à l'ajout de Build_sd --> à résorber
+# import rajoutés suite à l'ajout de Build_sd --> à résorber
import traceback
import Noyau
from Noyau import N_Exception
from Noyau.N_Exception import AsException
import Validation
-# fin import à résorber
+# fin import à résorber
# Modules EFICAS
import I_MCCOMPO
else:
if self.sd:sdname=self.sd.get_name()
if string.find(sdname,'sansnom') != -1 or string.find(sdname,'SD_') != -1:
- # dans le cas où la SD est 'sansnom' ou 'SD_' on retourne la chaîne vide
+ # dans le cas où la SD est 'sansnom' ou 'SD_' on retourne la chaîne vide
return ''
return sdname
def init_modif(self):
"""
- Met l'état de l'étape à : modifié
+ Met l'état de l'étape à : modifié
Propage la modification au parent
"""
- # init_modif doit etre appelé avant de réaliser une modification
- # La validité devra etre recalculée apres cette modification
- # mais dans l'appel à fin_modif pour préserver l'état modified
+ # init_modif doit etre appelé avant de réaliser une modification
+ # La validité devra etre recalculée apres cette modification
+ # mais dans l'appel à fin_modif pour préserver l'état modified
# de tous les objets entre temps
#print "init_modif",self,self.parent
self.state = 'modified'
def fin_modif(self):
"""
- Méthode appelée une fois qu'une modification a été faite afin de
- déclencher d'éventuels traitements post-modification
+ Méthode appelée une fois qu'une modification a été faite afin de
+ déclencher d'éventuels traitements post-modification
ex : INCLUDE et POURSUITE
Ne pas mettre de traitement qui risque d'induire des recursions (soit a peu pres rien)
"""
def nomme_sd(self,nom) :
"""
- Cette méthode a pour fonction de donner un nom (nom) au concept
- produit par l'étape (self).
- - si le concept n'existe pas, on essaye de le créer (à condition que l'étape soit valide ET non réentrante)
- - si il existe déjà, on le renomme et on répercute les changements dans les autres étapes
+ Cette méthode a pour fonction de donner un nom (nom) au concept
+ produit par l'étape (self).
+ - si le concept n'existe pas, on essaye de le créer (à condition que l'étape soit valide ET non réentrante)
+ - si il existe déjà, on le renomme et on répercute les changements dans les autres étapes
Les valeurs de retour sont :
- - 0 si le nommage n'a pas pu etre mené à son terme,
+ - 0 si le nommage n'a pas pu etre mené à son terme,
- 1 dans le cas contraire
"""
# Le nom d'un concept doit etre un identificateur Python (toujours vrai ?)
return 0,"Un nom de concept doit etre un identificateur Python"
if len(nom) > 8 and self.jdc.definition.code == 'ASTER':
- return 0,"Nom de concept trop long (maxi 8 caractères)"
+ return 0,"Nom de concept trop long (maxi 8 caractères)"
self.init_modif()
#
# On verifie d'abord si les mots cles sont valides
#
- if not self.isvalid(sd='non') : return 0,"Nommage du concept refusé : l'opérateur n'est pas valide"
+ if not self.isvalid(sd='non') : return 0,"Nommage du concept refusé : l'opérateur n'est pas valide"
#
- # Cas particulier des opérateurs obligatoirement réentrants
+ # Cas particulier des opérateurs obligatoirement réentrants
#
if self.definition.reentrant == 'o':
self.sd = self.reuse = self.jdc.get_sd_avant_etape(nom,self)
self.fin_modif()
return 1,"Concept existant"
else:
- return 0,"Opérateur réentrant mais concept non existant"
+ return 0,"Opérateur réentrant mais concept non existant"
#
- # Cas particulier des opérateurs facultativement réentrants
+ # Cas particulier des opérateurs facultativement réentrants
#
old_reuse=None
if self.definition.reentrant == 'f' :
sd = self.jdc.get_sd_avant_etape(nom,self)
if sd != None :
- # FR : il faut tester que la sd trouvée est du bon type !!!!!!!!!!!!!!!!!
+ # FR : il faut tester que la sd trouvée est du bon type !!!!!!!!!!!!!!!!!
if isinstance(sd,self.get_type_produit()) :
self.sd = self.reuse = sd
self.sdnom = sd.nom
self.fin_modif()
- return 1,"Opérateur facultativement réentrant et concept existant trouvé"
+ return 1,"Opérateur facultativement réentrant et concept existant trouvé"
else:
- return 0,"Concept déjà existant et de mauvais type"
+ return 0,"Concept déjà existant et de mauvais type"
else :
# il faut enlever le lien vers une SD existante car si on passe ici
- # cela signifie que l'opérateur n'est pas utilisé en mode réentrant.
- # Si on ne fait pas cela, on risque de modifier une SD produite par un autre opérateur
+ # cela signifie que l'opérateur n'est pas utilisé en mode réentrant.
+ # Si on ne fait pas cela, on risque de modifier une SD produite par un autre opérateur
if self.reuse :
old_reuse=self.reuse
self.sd = self.reuse = self.sdnom = None
#
- # On est dans le cas ou l'opérateur n'est pas réentrant ou est facultativement reentrant
- # mais est utilisé en mode non réentrant
+ # On est dans le cas ou l'opérateur n'est pas réentrant ou est facultativement reentrant
+ # mais est utilisé en mode non réentrant
#
if self.sd == None :
#Pas de concept produit preexistant
return 0,"Nommage du concept refuse : un concept de meme nom existe deja"
else:
# Il n'existe pas de concept de ce nom dans le voisinage de l'etape courante
- # On peut donc créer le concept retourné.
- # Il est créé sans nom mais enregistré dans la liste des concepts existants
+ # On peut donc créer le concept retourné.
+ # Il est créé sans nom mais enregistré dans la liste des concepts existants
try:
self.get_sd_prod()
# Renommage du concept : Il suffit de changer son attribut nom pour le nommer
self.sdnom=nom
self.parent.update_concept_after_etape(self,self.sd)
self.fin_modif()
- return 1,"Nommage du concept effectué"
+ return 1,"Nommage du concept effectué"
except:
return 0,"Nommage impossible"+str(sys.exc_info()[1])
else :
#Un concept produit preexiste
old_nom=self.sd.nom
if string.find(old_nom,'sansnom') :
- # Dans le cas où old_nom == sansnom, isvalid retourne 0 alors que ...
- # par contre si le concept existe et qu'il s'appelle sansnom c'est que l'étape est valide
- # on peut donc le nommer sans test préalable
+ # Dans le cas où old_nom == sansnom, isvalid retourne 0 alors que ...
+ # par contre si le concept existe et qu'il s'appelle sansnom c'est que l'étape est valide
+ # on peut donc le nommer sans test préalable
if self.parent.get_sd_autour_etape(nom,self):
return 0,"Nommage du concept refuse : un concept de meme nom existe deja"
else:
self.sdnom=nom
self.parent.update_concept_after_etape(self,self.sd)
self.fin_modif()
- return 1,"Nommage du concept effectué"
+ return 1,"Nommage du concept effectué"
if self.isvalid() :
# Normalement l appel de isvalid a mis a jour le concept produit (son type)
- # Il suffit de spécifier l attribut nom de sd pour le nommer si le nom n est pas
- # deja attribué
+ # Il suffit de spécifier l attribut nom de sd pour le nommer si le nom n est pas
+ # deja attribué
if self.parent.get_sd_autour_etape(nom,self):
return 0,"Nommage du concept refuse : un concept de meme nom existe deja"
else:
self.sdnom=nom
self.parent.update_concept_after_etape(self,self.sd)
self.fin_modif()
- return 1,"Nommage du concept effectué"
+ return 1,"Nommage du concept effectué"
else:
# Normalement on ne devrait pas passer ici
return 0,'Normalement on ne devrait pas passer ici'
"""
Rend l'etape courante active.
Il faut ajouter la sd si elle existe au contexte global du JDC
- et à la liste des sd
+ et à la liste des sd
"""
if self.actif:return
self.actif = 1
"""
Fonction:
Lors d'une destruction d'etape, detruit tous les concepts produits
- Un opérateur n a qu un concept produit
+ Un opérateur n a qu un concept produit
Une procedure n'en a aucun
- Une macro en a en général plus d'un
+ Une macro en a en général plus d'un
"""
#print "supprime_sdprods",self
if self.reuse is self.sd :return
- # l'étape n'est pas réentrante
- # le concept retourné par l'étape est à supprimer car il était
- # créé par l'étape
+ # l'étape n'est pas réentrante
+ # le concept retourné par l'étape est à supprimer car il était
+ # créé par l'étape
if self.sd != None :
self.parent.del_sdprod(self.sd)
self.parent.delete_concept(self.sd)
Fonction :
Mettre a jour les mots cles de l etape et eventuellement
le concept produit si reuse
- suite à la disparition du concept sd
+ suite à la disparition du concept sd
Seuls les mots cles simples MCSIMP font un traitement autre
que de transmettre aux fils
"""
def get_noms_sd_oper_reentrant(self):
"""
- Retourne la liste des noms de concepts utilisés à l'intérieur de la commande
+ Retourne la liste des noms de concepts utilisés à l'intérieur de la commande
qui sont du type que peut retourner cette commande
"""
liste_sd = self.get_sd_utilisees()
def get_genealogie(self):
"""
Retourne la liste des noms des ascendants de l'objet self
- en s'arretant à la première ETAPE rencontrée
+ en s'arretant à la première ETAPE rencontrée
"""
return [self.nom]
def verif_existence_sd(self):
"""
- Vérifie que les structures de données utilisées dans self existent bien dans le contexte
- avant étape, sinon enlève la référence à ces concepts
+ Vérifie que les structures de données utilisées dans self existent bien dans le contexte
+ avant étape, sinon enlève la référence à ces concepts
"""
#print "verif_existence_sd",self.sd
for motcle in self.mc_liste :
def update_mc_global(self):
"""
- Met a jour les mots cles globaux enregistrés dans l'étape
+ Met a jour les mots cles globaux enregistrés dans l'étape
et dans le jdc parent.
Une etape ne peut pas etre globale. Elle se contente de passer
- la requete a ses fils apres avoir reinitialisé le dictionnaire
+ la requete a ses fils apres avoir reinitialisé le dictionnaire
des mots cles globaux.
"""
self.mc_globaux={}
def get_objet_commentarise(self,format):
"""
- Cette méthode retourne un objet commande commentarisée
+ Cette méthode retourne un objet commande commentarisée
representant la commande self
"""
import generator
g=generator.plugins[format]()
texte_commande = g.gener(self,format='beautifie')
- # Il faut enlever la première ligne vide de texte_commande que
+ # Il faut enlever la première ligne vide de texte_commande que
# rajoute le generator
#rebut,texte_commande = string.split(texte_commande,'\n',1)
- # on construit l'objet COMMANDE_COMM repésentatif de self mais non
- # enregistré dans le jdc (pas ajouté dans jdc.etapes)
+ # on construit l'objet COMMANDE_COMM repésentatif de self mais non
+ # enregistré dans le jdc (pas ajouté dans jdc.etapes)
parent=self.parent
pos=self.parent.etapes.index(self)
commande_comment = commande_comm.COMMANDE_COMM(texte=texte_commande,
except AsException,e:
# Une erreur s'est produite lors de la construction du concept
# Comme on est dans EFICAS, on essaie de poursuivre quand meme
- # Si on poursuit, on a le choix entre deux possibilités :
- # 1. on annule la sd associée à self
+ # Si on poursuit, on a le choix entre deux possibilités :
+ # 1. on annule la sd associée à self
# 2. on la conserve mais il faut la retourner
# En plus il faut rendre coherents sdnom et sd.nom
self.sd=None
return self.sd
-#ATTENTION SURCHARGE: cette methode doit etre gardée en synchronisation avec Noyau
+#ATTENTION SURCHARGE: cette methode doit etre gardée en synchronisation avec Noyau
def make_register(self):
"""
- Initialise les attributs jdc, id, niveau et réalise les
- enregistrements nécessaires
+ Initialise les attributs jdc, id, niveau et réalise les
+ enregistrements nécessaires
Pour EFICAS, on tient compte des niveaux
Surcharge la methode make_register du package Noyau
"""
self.id= self.parent.register(self)
self.UserError=self.jdc.UserError
if self.definition.niveau :
- # La définition est dans un niveau. En plus on
+ # La définition est dans un niveau. En plus on
# l'enregistre dans le niveau
self.nom_niveau_definition = self.definition.niveau.nom
self.niveau = self.parent.dict_niveaux[self.nom_niveau_definition]
self.niveau.register(self)
else:
- # La définition est au niveau global
+ # La définition est au niveau global
self.nom_niveau_definition = 'JDC'
self.niveau=self.parent
else:
def report(self):
cr= Validation.V_ETAPE.ETAPE.report(self)
- #rafraichissement de la validité de l'etape (probleme avec l'ordre dans les macros : etape puis mots cles)
+ #rafraichissement de la validité de l'etape (probleme avec l'ordre dans les macros : etape puis mots cles)
self.isvalid()
return cr