le repertoire de l'utilisateur /$home/Eficas_install
"""
- rep_user_eficas= os.path.join(os.environ['HOME'],dir)
+ #rep_user_eficas= os.path.join(os.environ['HOME'],dir)
+ rep_user_eficas= os.path.join(os.path.expanduser("~"),dir)
if os.path.exists(rep_user_eficas):
if os.path.isfile(rep_user_eficas) :
print (tr("Un fichier de nom %s existe deja : impossible de creer un repertoire de meme nom", rep_user_eficas))
parser.error(tr("Nombre incorrect d'arguments"))
options.comm.append(file)
options.studies.append({"comm":file})
- elif len(args) == 1 and options.locale:
- print((tr("Localisation specifiee pour l'application.")))
+ elif len(args) == 2 :
+ if options.locale:
+ print((tr("Localisation specifiee pour l'application.")))
+ else:
+ parser.error(tr("Nombre incorrect d'arguments"))
else:
parser.error(tr("Nombre incorrect d'arguments"))
def ajouteAuxTextes(self,nomMC,indent,debug=False) :
- if nomMC=='N1' and self.nom == 'bloc_une_bloc_deux' : debug=True
if debug : print ('ajouteAuxTextes', nomMC, self.nom, self.entites[nomMC])
#if debug :
# traceback.print_stack()
#--------------------------------
class X_SIMP (X_definition):
#--------------------------------
- def dumpXsd(self, dansFactorisation=False, multiple = False, first=False):
+ def dumpXsd(self, dansFactorisation=False, multiple=False, first=False, debug=False):
#if PourTraduction : print (self.nom)
+ if debug : print ('X_SIMP dumpXsd pour', self.nom, '___________________________')
self.prepareDumpXSD()
# si inUnion la comparaison est fausse : on cree le nomDuType
if multiple : self.inUnion=True
# --> homonymie on peut utiliser genealogie ?
self.nomDuTypeDeBase = self.traduitType()
+ if debug : print ('nomDuTypeDeBase', self.nomDuTypeDeBase)
if not multiple :
self.nomDuTypePyxb = self.definitNomDuTypePyxb()
else :
self.aCreer = True
+ if debug : print ('nomDuTypePyxb', self.nomDuTypePyxb)
+ if debug : print ('aCreer', self.aCreer)
# on se sert des listes ou non pour la gestion des minOccurs /maxOccurs est > 0
if self.statut =='f' : minOccurs = 0
else : minOccurs = 1
for val in self.defaut : txtDefaut+=str(val) +" "
self.texteElt = eltWithDefautDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut)
else :
- if str(self.defaut) == 'True' : txtDefaut = 'true'
+ if str(self.defaut) == 'True' : txtDefaut = 'true'
elif str(self.defaut) == 'False' : txtDefaut = 'false'
else : txtDefaut = str(self.defaut)
self.texteElt = eltWithDefautDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut)
elif first:
self.texteElt = eltDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,1,1)
- #typeATraduire=self.type[0]
- #if (isinstance(typeATraduire, Accas.UserASSD) or issubclass(typeATraduire, Accas.UserASSD)) :
- # nomType = self.type[0].__name__
- # self.texteElt = self.texteElt[:-3]+">\n"
- # self.texteElt += "\t"+attributeNameName
- # if len(self.type) == 2 and self.type[1]=='createObject' : self.texteElt += attributeTypeForUserASSDCreation
- # else : self.texteElt += attributeTypeForUserASSDConsommation
- # self.texteElt += "\t"+attributeTypeUtilisateurName.format(nomType)
- # self.texteElt += finTexteElt
-
-
# self.aCreer est mis a jour ds definitNomDuTypePyxb
# ou si elt est le 1er d une liste identique
- #print ('je suis aCreer', self.aCreer)
+ if debug : print ('je suis aCreer', self.aCreer)
if not self.aCreer : return
+
+ typeATraduire=self.type[0]
+ if (not(isinstance(typeATraduire,str)) and issubclass(typeATraduire, Accas.UserASSD)) :
+ cata = CONTEXT.getCurrentCata()
+ if len(self.type) == 2 and self.type[1]=='createObject' : suffixe = 'C'
+ else : suffixe = 'U'
+ if typeATraduire.__name__+'_'+suffixe not in cata.listeUserASSDDumpes :
+ self.texteSimple = defUserAssd.format(typeATraduire.__name__, suffixe) + self.texteSimple
+ cata.listeUserASSDDumpes.add(typeATraduire.__name__+'_'+suffixe)
+ if cata.definitUserASSD ==False :
+ cata.definitUserASSD = True
+ self.texteSimple = defBaseXSDUserAssd + self.texteSimple
+
if not multiple : self.texteSimple += debutSimpleType.format(self.nomDuTypePyxb)
else : self.texteSimple += debutSimpleTypeSsNom
else :
typeATraduire=self.type[0]
if not (typeATraduire in list(dictNomsDesTypes.keys())) :
- if (isinstance(typeATraduire, Accas.ASSD) or issubclass(typeATraduire, Accas.ASSD)) :
+ #if (isinstance(typeATraduire, Accas.ASSD) or issubclass(typeATraduire, Accas.ASSD)) :
+ if (not(isinstance(typeATraduire,str)) and issubclass(typeATraduire, Accas.ASSD)) :
# cas d une creation
cata = CONTEXT.getCurrentCata()
+ # PNPNPN a Revoir pour la creation des keyrefs
if len(self.type) == 2 and self.type[1]=='createObject' :
if typeATraduire.__name__ not in list(cata.dictTypesASSDorUserASSDCrees) :
cata.dictTypesASSDorUserASSDCrees[typeATraduire.__name__]=[self,]
else :
cata.dictTypesASSDorUserASSDCrees[typeATraduire.__name__].append(self)
- return 'xs:string'
+ if issubclass(typeATraduire, Accas.UserASSD) : return typeATraduire.__name__+'_C'
+ else : return 'xs:string'
# cas d une consommation
if typeATraduire not in list(cata.dictTypesASSDorUserASSDUtilises) :
cata.dictTypesASSDorUserASSDUtilises[typeATraduire]=[self,]
else :
cata.dictTypesASSDorUserASSDUtilises[typeATraduire].append(self,)
- return 'xs:string'
+ if issubclass(typeATraduire, Accas.UserASSD) : return typeATraduire.__name__+'_U'
+ else : return 'xs:string'
else : return ('YYYYY')
return dictNomsDesTypes[typeATraduire]
#if self.objPyxb !=None : self.objPyxb.objAccas=self
- if isinstance(self.valeur,A_ASSD.ASSD) :
- setattr(self.valeur,'typeUtilisateur','toto')
- print (dir(self.definition))
- print (dir(self.valeur))
if debug : print ('X_MCSIMP', self.nom, self.objPyxb, )
if debug : print ('__________ fin X_MCSIMP', self.objPyxb, self.nom, self, self.maClasseModeleMetier,self.valeur)
if not self.cata or not self.cata.modeleMetier : return
if debug : print (' ___________________________ dans setValeurObjPyxb MCSIMP ', self.nom, newVal)
if debug : print (' self.perePyxb = ', self.perePyxb.nom)
- isUserASSD = False
- if inspect.isclass(newVal) and issubclass(newVal,A_ASSD) :
- isUserASSD = True
- newVal = newVal.nom
if debug : print (self.nom , ' a pour pere', self.perePyxb, self.perePyxb.nom, self.perePyxb.objPyxb)
if debug : print ('debut du setValeurObjPyxb pour ', self.nom, self.perePyxb.objPyxb.orderedContent())
indice+=1
if not trouve : print ('Attention souci au changement de valeur de ', self.nom)
self.objPyxb=nvlObj
- if isUserASSD : setattr(self.objPyxb,name,newVal)
- if isUserASSD : print(self.objPyxb.typeUtilisateur)
#self.objPyxb.objAccas=self
if debug : print ('fin du setValeurObjPyxb pour ', self.nom, self.perePyxb.objPyxb.orderedContent())
def metAJourNomASSD(self, nom,debug=False):
if not self.cata or not self.cata.modeleMetier : return
if debug : print ('X_ETAPE metAJourLesAttributs', self.nom, nom,' --------------------------')
- self.objPyxb.name=nom
+ self.objPyxb.accasName=nom
class X_JDC (X_MCCOMPO):
# ---------------------
return (self.objPyxb.toDOM().toprettyxml())
- def analyseFromXML(self,debug=True):
+ def analyseFromXML(self,debug=False):
print ("je suis ds analyseFromXML -- > appel ds analyseXML de I_JDC.py")
print (self.procedure)
if self.procedure == "" : return
for contentObjEtape in self.objPyxb.orderedContent():
objEtape=contentObjEtape.value
objEtape.dictArgs=(self.pyxbToDict(objEtape))
- # attention au call d Oper qui renomme l objet pyxb
- if hasattr(objEtape,'name') : sdName = objEtape.name
objEtape.monNomClasseAccas=objEtape._ExpandedName.localName()
objEtape.monNomClasseAccas=objEtape.monNomClasseAccas[2:]
# doute sur les 2 lignes suivantes : objEtape peut etre contentObjEtape 2juin20
objEtape.dictPyxb['objEnPyxb']=objEtape
objEtape.dictArgs['dicoPyxbDeConstruction']=objEtape.dictPyxb
- print ('dicoPyxbDeConstruction', objEtape.dictArgs['dicoPyxbDeConstruction'])
+ if debug : print ('dicoPyxbDeConstruction', objEtape.dictArgs['dicoPyxbDeConstruction'])
maClasseAccas=getattr(self.cata,objEtape.monNomClasseAccas)
if debug : print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
- if debug : print (maClasseAccas)
- if debug : print (objEtape , type(objEtape))
- if debug : print (objEtape.dictPyxb)
-
- if debug : print (objEtape.monNomClasseAccas, type(objEtape.monNomClasseAccas))
- if debug : print (objEtape._ExpandedName, type(objEtape._ExpandedName))
- if debug : print ('dictArgs',objEtape.dictArgs)
- if debug : print ('dictPyxb',objEtape.dictPyxb)
- objAccasEtape=maClasseAccas(**(objEtape.dictArgs))
- if hasattr(objEtape,'name') : objAccasEtape.setName(sdName)
- if debug : print (objAccasEtape)
+ if debug : print ('maClasseAccas ', maClasseAccas)
+ if debug : print ('objEtape ', objEtape , type(objEtape))
+ if debug : print ('nomClasseAccas ',objEtape.monNomClasseAccas, type(objEtape.monNomClasseAccas))
+ if debug : print ('_ExpandedName ', objEtape._ExpandedName, type(objEtape._ExpandedName))
+ if debug : print ('dictArgs ',objEtape.dictArgs)
+ if debug : print ('dictPyxb ',objEtape.dictPyxb)
+ # attention au call d Oper qui renomme l objet pyxb
+ if hasattr(objEtape,'accasName') :
+ if debug and hasattr(objEtape,'accasName') :print ('sdName',objEtape.accasName)
+ objAccasEtape=maClasseAccas(nomXML=objEtape.accasName, **(objEtape.dictArgs))
+ else : objAccasEtape=maClasseAccas(**(objEtape.dictArgs))
if debug : print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
# ---------------
if isinstance(objAAnalyser, pyxb.binding.basis.simpleTypeDefinition):
print ('je suis un MCSimple')
- # il faut traiter les UserASSD
# traitement scalaire
objAAnalyser.dictPyxb=objAAnalyser
if not (isinstance(objAAnalyser,pyxb.binding.basis.STD_list)):
- #print ('je suis un scalaire')
+ # print ('je suis un scalaire')
#try : # python 3
+ if isinstance(objAAnalyser,self.cata.modeleMetier.AccasUserAssd):
+ import inspect
+ laClassePyxbUserAssd=inspect.getmro(objAAnalyser.__class__)[1]
+ return self.creeUserAssd(objAAnalyser,laClassePyxbUserAssd)
if isinstance(objAAnalyser, str) : return str(objAAnalyser)
if isinstance(objAAnalyser, int) : return int(objAAnalyser)
if isinstance(objAAnalyser, float): return float(objAAnalyser)
#print ('fin pour ',objAAnalyser)
return dictArgs
+ def creeUserAssd(self,objAAnalyser,laClassePyxbUserAssd):
+
+ print ('ttttttttttttttttttt')
+ nomClasseAccasUserAssd=laClassePyxbUserAssd.__name__[:-2]
+ enCreation=False
+ if laClassePyxbUserAssd.__name__[-2:]== '_C' : enCreation = True
+ elif laClassePyxbUserAssd.__name__[-2:] != '_U' : print ('pb avec', laClassePyxbUserAssd); exit()
+ laClasseAccas=getattr(self.cata,nomClasseAccasUserAssd)
+ if not(enCreation):
+ if str(objAAnalyser) in self.g_context.keys():return self.g_context[str(objAAnalyser)]
+ else :
+ obj=laClasseAccas()
+ self.g_context[str(objAAnalyser)]=obj
+ return obj
+ if str(objAAnalyser) in self.g_context.keys():
+ if isinstance(self.g_context[str(objAAnalyser)],laClasseAccas):
+ return self.g_context[str(objAAnalyser)]
+ else :
+ nvlObj=laClasseAccas()
+ oldObj=self.g_context[str(objAAnalyser)]
+ nvlObj.transfere(oldObj)
+ self.g_context[str(objAAnalyser)]=nvlObj
+ return nvlObj
+ else :
+ obj=laClasseAccas()
+ self.g_context[str(objAAnalyser)]=obj
+ return obj
# def analyseContent(self,objAAnalyser):
# objAAnalyser.dictArgs={}
# User OR ASSD
-attributeNameName = '\t\t<xs:attribute name="name" type="xs:string"/>\n'
+attributeNameName = '\t\t<xs:attribute name="accasName" type="xs:string"/>\n'
attributeTypeForASSD = '\t\t<xs:attribute name="accasType" type="xs:string" fixed="ASSD"/>\n'
attributeTypeUtilisateurName = '\t\t<xs:attribute name="typeUtilisateur" type="xs:string" fixed="{}"/>\n'
producingASSDkeyRefDeclaration='\t<xs:key name="Key_Name_For_{}">\n\t\t<xs:selector xpath="."/>\n\t\t<xs:field xpath="{}"/>\n\t</xs:key>\n'
texteFieldUnitaire="./{}:{}/@name |"
+defBaseXSDUserAssd='\t<xs:simpleType name="AccasUserAssd">\n\t\t<xs:restriction base="xs:string">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n'
+defUserAssd='\t<xs:simpleType name="{}_{}">\n\t\t<xs:restriction base="AccasUserAssd">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n'
+
# CATA
debutTypeCata = '\t<xs:complexType name="T_{}">\n\t\t<xs:choice minOccurs="0" maxOccurs="unbounded">\n'
def analyseXML(self):
print ('analyseXML')
- print (self.procedure)
+ #print (self.procedure)
self.setCurrentContext()
self.analyseFromXML()
num=self.item.object.definition.type[0].ntuple
nomDeLaClasse = 'MonWidgetPlusieursTuple'+str(num)
nomDuFichier = 'InterfaceQT4.monWidgetPlusieursTupleN'
- #try:
- if 1 :
+ try:
_temp = __import__(nomDuFichier, globals(), locals(), [nomDeLaClasse], 0)
MonWidgetPlusieursTuple = getattr(_temp,nomDeLaClasse)
- #except :
- # print ("Pas de Tuple de longueur : ", num)
- # print ("Prevenir la maintenance ")
+ except :
+ print ("Pas de Tuple de longueur : ", num)
+ print ("Prevenir la maintenance ")
widget=MonWidgetPlusieursTuple(self,maDefinition,monNom,monObjet,parentQt,maCommande)
elif self.item.hasInto():
from Extensions.i18n import tr
from InterfaceQT4.feuille import Feuille
-from desWidgetPlusieursBase import Ui_WidgetPlusieursBase
+from desWidgetPlusieursBase import Ui_WidgetPlusieursBase
from InterfaceQT4.politiquesValidation import PolitiquePlusieurs
from InterfaceQT4.qtSaisie import SaisieValeur
from InterfaceQT4.gereListe import GereListe
class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille,GereListe,GerePlie):
def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
- #print ('MonWidgetPlusieursBase', nom)
+ print ('MonWidgetPlusieursBase', nom)
self.inFocusOutEvent = False
self.changeUnLineEdit = False
self.nomLine = "lineEditVal"
def initRecents(self):
self.recent = []
try :
- if sys.platform[0:5]=="linux" :
- rep=os.path.join(os.environ['HOME'],'.config/Eficas',self.code)
- else :
- rep=os.path.join('C:/','.config/Eficas',self.code)
+ #if sys.platform[0:5]=="linux" :
+ #rep=os.path.join(os.environ['HOME'],'.config/Eficas',self.code)
+ rep=os.path.join(os.path.expanduser("~"),'.config/Eficas',self.code)
+ #else :
+ # rep=os.path.join('C:/','.config/Eficas',self.code)
monFichier=rep+"/listefichiers_"+self.code
index=0
f=open(monFichier)
def setName(self, nom):
"""Positionne le nom de self
"""
- print ('uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu')
- print ('uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu')
- print ('uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu')
- print ('uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu')
- print ('uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu')
self.nom = nom
def isTypCO(self):
enregistrements necessaires
surcharge dans Ihm
"""
- #print ('makeRegister de ETAPE')
if self.parent:
self.jdc = self.parent.getJdcRoot()
self.id = self.parent.register(self)
CONTEXT.unsetCurrentCata()
CONTEXT.setCurrentCata(self)
self.fenetreIhm=None
+ self.definitUserASSD = False
self.dictTypesXSD={}
self.dictTypesXSDJumeaux={}
self.dictTypesASSDorUserASSDCrees={}
self.dictTypesASSDorUserASSDUtilises={}
+ self.listeUserASSDDumpes=set()
def __call__(self, procedure=None, cata=None, cata_ord_dico=None,
self.txtNomComplet=""
self.dejaPrepareDump=False
- def __call__(self, reuse=None, **args):
+ def __call__(self, reuse=None, nomXML=None,**args):
"""
Construit l'objet ETAPE a partir de sa definition (self),
puis demande la construction de ses sous-objets et du concept produit.
"""
- nomsd = self.nommage.getNomConceptResultat(self.nom)
+ if nomXML == None : nomsd = self.nommage.getNomConceptResultat(self.nom)
+ else : nomsd = nomXML
etape = self.class_instance(oper=self, reuse=reuse, args=args)
etape.MCBuild()
etape.metAJourNomASSD(nomsd)
"""
def __init__(self,nom='sansNom'):
+ #print ('dans init de UserASSD pour ', nom)
self.nom = nom
self.jdc = CONTEXT.getCurrentJdC()
self.parent = None
self.ptr_sdj = None
+
def initialiseParent(self, parent):
#print ('je passe initialiseParent pour : ', self, parent)
self.parent= parent
self.valeur=valeur
def ajoutUtilisePar(self,mc):
+ #print ('je passe ajoutUtilisePar pour : ', self.nom)
self.utilisePar.add(mc)
def enleveUtilisePar(self,mc):
self.jdc.delConcept(self.nom)
self.jdc.sdsDict[nouveauNom] = self
self.setName(nouveauNom)
- #print ('je suis dans renomme',nouveauNom, self.nom)
- #print (self.utilisePar)
for mc in (self.utilisePar):
mc.demandeRedessine()
+ def transfere (self,obj):
+ # uniquement utise pour les lectures XML
+ self.utilisePar=obj.utilisePar
+ self.id=obj.id
+ for mc in self.utilisePar: mc.valeur=self
+
def deleteReference(self):
print ('dans deleteReference')
for MC in self.utilisePar :
s=PythonGenerator.generMCSIMP(self,obj)
- # si le statut = Leger on peut vouloir forcer l ecriture
- if self.statut == 'Leger' and obj.definition.sortie == 'n':
+ # Attention pas sur --> ds certains cas non traite par MCFACT ?
+ # a reflechir avec Yoann
+ # ajouter le statut ?
+ if self.statut == 'Leger' :
if hasattr(obj.definition,'defaut') and (obj.definition.defaut == obj.valeur) and (obj.nom not in self.listeTelemac) : return s
if hasattr(obj.definition,'defaut') and obj.definition.defaut != None and (type(obj.valeur) == tuple or type(obj.valeur) == list) and (tuple(obj.definition.defaut) == tuple(obj.valeur)) and (obj.nom not in self.listeTelemac) : return s