コード例 #1
0
ファイル: Base.py プロジェクト: Lbardoux/TER_2016_organizer
	def __init__(self):
		"""
		"""
		self._listeSalle = ListeSalle()
		self._listeFormation = ListeFormation()
		self._listeEnseignant = ListeEnseignant()
		self._parserXML()
コード例 #2
0
ファイル: Base.py プロジェクト: Lbardoux/TER_2016_organizer
class Base(object):
	"""
	"""
	def __init__(self):
		"""
		"""
		self._listeSalle = ListeSalle()
		self._listeFormation = ListeFormation()
		self._listeEnseignant = ListeEnseignant()
		self._parserXML()
	#__init__
	
	def _parserXML(self):
		"""
		@raise IOError: en cas de problème avec ouverture/lecture de fichier.
		"""
		fichier = open(os.path.dirname(os.path.realpath(__file__))+"/../../../data/base.xml","r")
		tree = etree.parse(fichier)
		fichier.close()
		for i in tree.xpath("/base/enseignants/enseignant"):
			self._listeEnseignant.ajouterEnseignant(Enseignant(int(i.find("idEnseignant").text),i.find("nom").text, i.find("prenom").text)) 
		#for
		self._parseFormation(tree)
		for i in tree.xpath("/base/salles/salle"):
			self._listeSalle.ajouterSalle(Salle(int(i.find("idSalle").text),i.find("nom").text, int(i.find("taille").text)))
		#for
	#_parserXML
	
	
	def _parseFormation(self, tree):
		"""
		Va parser le fichier xml pour récupérer les informations sur les L{Formation}s
		Ces informations seront ensuite stockées dans self._listeFormation.
		@param self: L'argument implicite.
		@type tree: un arbre contenaut du xml
		@param tree: le xml completement parsé, racine incluse.
		"""
		for formation in tree.xpath("/base/formations/formation"):
			# on parse les attributs intéressants
			idFormation = int(formation.find("idFormation").text)
			niveau = int(formation.find("niveau").text)
			nom = formation.find("nom").text
			idEnseignant = int(formation.find("idEnseignant").text)
			
			# on crée la nouvelle formation et on l'ajoute
			nouvelleFormation = Formation(idFormation, niveau, nom, idEnseignant)
			self._listeFormation.ajouterFormation(nouvelleFormation)
			
			# on passe au parsing des Ues s'il y en a
			lesUes = formation.find("ues")
			if lesUes is not None:
				self._parseUe(nouvelleFormation, lesUes)
			#if
		#for
	#_parseFormation
	
	
	def _parseUe(self, formation, element):
		"""
		Va lire la suite d'un bout de xml contenant les informations sur les Ues
		Le but sera alors de remplir la listeUes de I{formation}.
		@param self: L'argument implicite.
		@type formation: L{Formation}
		@param formation: La formation dans laquelle écrire les données coolectées.
		@type element: Element
		@param element: le conteneur actuel dans lequel continuer à I{parser}.
		"""
		for fils in element:
			code = fils.find("code").text
			nom = fils.find("nom").text
			idEnseignant = int(fils.find("idEnseignant").text)
			
			nouvelleUe = Ue(code, nom, idEnseignant)
			formation.ajouterUe(nouvelleUe)
			lesSeances = fils.find("seances")
			if lesSeances is not None:
				self._parseSeances(nouvelleUe, lesSeances)
			#if
		#for
	#_parseUe
	
	
	def _parseSeances(self, ue, element):
		"""
		Etape finale, va parser le contenu de chaque Seance, quelque soit son type.
		Chaque Seance lue avec succès entrainera sa création dans le modèle avec
		ajout dans I{ue}.
		@param self: L'argument implicite
		@type ue: L{Ue}
		@param ue: L'ue que l'on veut remplir avec les Seances trouvées.
		@type element: Element(xml)
		@param element: La suite du xml que l'on veut parser.
		"""
		usine = FabriqueCreneau()
		fils = ["cms", "tds", "tps", "examens", "autres"]
		attribut = [CP.CM, CP.TD, CP.TP, CP.EXAMEN, CP.AUTRE]
		for i, typeSeance in enumerate(fils):
			cible = element.find(str(typeSeance))
			if cible is not None:
				for seance in cible:
					idSeance = seance.find("idSeance").text
					nom = seance.find("nom").text
					salle = seance.find("salle").text
					enseignant = ""
					test = seance.find("enseignant")
					if test is not None:
						enseignant = test.text
					#if
					h = seance.find("horaire")
					d = int(h.find("debut").text) + 1
					f = int(h.find("fin").text) + 1
					nouvelleSeance = usine.fabrique(attribut[i], idSeance, Horaire(d, f))
					nouvelleSeance.nom = nom
					nouvelleSeance.salle = salle
					nouvelleSeance.enseignant = enseignant
					ue.ajouterSeance(nouvelleSeance)
				#for
			#if
		#for
	#_parseSeances
	
	
	@property
	def salles(self):
		"""
		"""
		return self._listeSalle
	#salles
	
	@property
	def formations(self):
		"""
		"""
		return self._listeFormation
	#formations
	
	@property
	def enseignants(self):
		"""
		"""
		return self._listeEnseignant