Aller à la documentation de ce fichier.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 import xml.dom.minidom, copy
00012
00013 class AbstractGestClasse:
00014
00015
00016
00017
00018
00019
00020
00021 def __init__(self,f):
00022 return
00023
00024
00025
00026
00027
00028 def collectClasses(self):
00029 return []
00030
00031
00032
00033
00034
00035
00036 def elevesDeClasse(self, cl):
00037 return[]
00038
00039
00040
00041
00042
00043
00044 def unique_name(self, el):
00045 return "Cette fonction est abstraite, ne l'appelez pas ainsi."
00046
00047
00048
00049
00050
00051
00052 def showable_name(self,el):
00053 return "Cette fonction est abstraite, ne l'appelez pas ainsi."
00054
00055
00056
00057
00058
00059 class Sconet(AbstractGestClasse):
00060
00061
00062
00063
00064
00065
00066 def __init__(self, f):
00067 AbstractGestClasse.__init__(self,f)
00068 if type(f)==type(""):
00069 f=open(f,"r")
00070 self.donnees=xml.dom.minidom.parse(f)
00071 self.makeCompact()
00072
00073
00074
00075
00076
00077 def makeCompact(self):
00078 self.nullTexts={}
00079 self.elementsWalk(self.donnees.documentElement, self.collectNullTexts)
00080 for el in self.nullTexts.keys():
00081 for e in self.nullTexts[el]:
00082 el.removeChild(e)
00083
00084 def collectNullTexts(self,el):
00085 self.nullTexts[el]=[]
00086 for e in el.childNodes:
00087 if e.nodeType==e.TEXT_NODE and e.data.strip()=="":
00088 self.nullTexts[el].append(e)
00089
00090
00091
00092
00093
00094 def collectClasses(self):
00095 self.classes=set()
00096 self.elementsWalk(self.donnees.documentElement, self.collectOneClass)
00097 return self.classes
00098
00099
00100
00101
00102
00103
00104 def elevesDeClasse(self, className):
00105 self.currentResult=[]
00106 self.currentClassName=className
00107 self.elementsWalk(self.donnees.documentElement, self.unIDEleveDeClasse)
00108 ids=copy.copy(self.currentResult)
00109 self.currentResult=[]
00110 for i in ids:
00111 self.currentID=i
00112 self.elementsWalk(self.donnees.documentElement, self.eleveParID)
00113 return copy.copy(self.currentResult)
00114
00115
00116
00117
00118
00119
00120
00121 def eleveParID(self,el):
00122 if el.nodeName.lower()=="eleve" and el.getAttribute("ELEVE_ID")==self.currentID:
00123 self.currentResult.append(el)
00124
00125
00126
00127
00128
00129
00130
00131 def unIDEleveDeClasse(self, el):
00132 if el.nodeName.lower()=="structures_eleve":
00133 structures=el.getElementsByTagName("STRUCTURE")
00134 if len (structures) > 0:
00135 if structures[0].getElementsByTagName("TYPE_STRUCTURE")[0].firstChild.data=="D":
00136 if structures[0].getElementsByTagName("CODE_STRUCTURE")[0].firstChild.data==self.currentClassName:
00137 idEleve=el.getAttribute("ELEVE_ID")
00138 self.currentResult.append(idEleve)
00139
00140
00141
00142
00143
00144
00145 def collectOneClass(self,el):
00146 if el.nodeName.lower()=="structure":
00147 if el.getElementsByTagName("TYPE_STRUCTURE")[0].firstChild.data=="D":
00148 self.classes.add(el.getElementsByTagName("CODE_STRUCTURE")[0].firstChild.data)
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158 def unique_name(self, el, fields=["NOM", "PRENOM"]):
00159 items=[]
00160 for f in fields:
00161 items.append(el.getElementsByTagName(f)[0].firstChild.data)
00162 items.append(el.getAttribute("ELEVE_ID"))
00163 return "_".join(items)
00164
00165
00166
00167
00168
00169
00170
00171 def showable_name(self,el, fields=["NOM", "PRENOM"]):
00172 items=[]
00173 for f in fields:
00174 items.append(el.getElementsByTagName(f)[0].firstChild.data)
00175 return " ".join(items)
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185 def elementsWalk(self, el, proc):
00186 proc(el)
00187 for e in el.childNodes:
00188 self.elementsWalk(e, proc)
00189
00190 def __str__(self):
00191 return self.donnees.toprettyxml(indent=" ",encoding="utf-8")
00192
00193