ScolaSync  1.0
 Tout Classes Espaces de nommage Fichiers Fonctions Variables Pages
sconet.py
Aller à la documentation de ce fichier.
1 #!/usr/bin/python
2 # -*- coding: utf-8 -*-
3 
4 import xml.dom.minidom
5 
6 ##
7 #
8 # Une classe pour travailler avec des données Sconet
9 #
10 class Sconet:
11 
12  ##
13  #
14  # Le constructeur
15  # @param file le nom d'un fichier, ou un fichier ouvert en lecture
16  #
17  def __init__(self, file):
18  if type(file)==type(""):
19  file=open(file,"r")
20  self.donnees=xml.dom.minidom.parse(file)
21  self.makeCompact()
22 
23  ##
24  #
25  # removes useless thext nodes containing only spaces.
26  #
27  def makeCompact(self):
28  self.nullTexts={}
29  self.elementsWalk(self.donnees.documentElement, self.collectNullTexts)
30  for el in self.nullTexts.keys():
31  for e in self.nullTexts[el]:
32  el.removeChild(e)
33 
34  def collectNullTexts(self,el):
35  self.nullTexts[el]=[]
36  for e in el.childNodes:
37  if e.nodeType==e.TEXT_NODE and e.data.strip()=="":
38  self.nullTexts[el].append(e)
39 
40  ##
41  #
42  # @return the list of classes containg students
43  #
44  def collectClasses(self):
45  self.classes=set()
46  self.elementsWalk(self.donnees.documentElement, self.collectOneClass)
47  return self.classes
48 
49  ##
50  #
51  # @return the name of a class if it is a class with students
52  #
53  def collectOneClass(self,el):
54  if el.nodeName.lower()=="structure":
55  if el.getElementsByTagName("TYPE_STRUCTURE")[0].firstChild.data=="D":
56  self.classes.add(el.getElementsByTagName("CODE_STRUCTURE")[0].firstChild.data)
57 
58 
59 
60  ##
61  #
62  # implemente un parcour des éléments d'un arbre, pour y appliquer
63  # une procédure
64  # @param el un élément
65  # @param proc la procédure à appliquer (paramètres : l'élément)
66  #
67  def elementsWalk(self, el, proc):
68  proc(el)
69  for e in el.childNodes:
70  self.elementsWalk(e, proc)
71 
72  def __str__(self):
73  return self.donnees.toprettyxml(indent=" ",encoding="utf-8")
74 
75 
76 if __name__=="__main__":
77  s=Sconet("SCONET_test.xml")
78  # print s
79  print s.collectClasses()
80