/[ambar]/ambar/item.py
ViewVC logotype

Diff of /ambar/item.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2.0 by pabloruiz, Sat Aug 17 21:11:09 2002 UTC revision 2.1 by amoyav, Fri Aug 23 12:51:18 2002 UTC
# Line 19  Line 19 
19  #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA  #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20  #  #
21  #  #
22  #Fichero: item.py  #Fichero: item.py
23    
24  """Clase Item."""  """Clase Item."""
25    
26    
27  from xml.dom import minidom  from xml.dom import minidom
28  import random  import random
29  import sys  import sys
30  import string  import string
31  import os  import os
32    
33  from utils import *  from utils import *
34  from bloquedialogo import *  from bloquedialogo import *
35  from fragmento import *  from fragmento import *
36    
37  class Item(BloqueDialogo):  class Item(BloqueDialogo):
38      """Secuencia de texto que se presenta al activar un tema de la conversación.      """Secuencia de texto que se presenta al activar un tema de la conversación.
39            
40      Contiene los siguientes atributos:      Contiene los siguientes atributos:
41       - _tema: tema en el que está contenido este item       - _tema: tema en el que está contenido este item
42       - _relacionados: diccionario con los contextos de los temas relacionados con este item, indexados por nombre del tema       - _relacionados: diccionario con los contextos de los temas relacionados con este item, indexados por nombre del tema
43       - _fragmentos: lista de bloques de texto.       - _fragmentos: lista de bloques de texto.
44            
45      Invariantes:      Invariantes:
46        _tema != None        _tema != None
47        _relacionados != None        _relacionados != None
48    
49      """      """
50      REPETICIONES_INFINITAS = -1      REPETICIONES_INFINITAS = -1
51            
52      def __init__(self, item_xml, tema):      def __init__(self, item_xml, tema):
53          """Crea un item nuevo a partir de un arbol XML de descripción de item.          """Crea un item nuevo a partir de un arbol XML de descripción de item.
54                    
55            item_xml: corresponde con un nodo DOM de tema            item_xml: corresponde con un nodo DOM de tema
56            tema != None            tema != None
57          """          """
58                    
59          self._tema = tema          self._tema = tema
60          self._limpiar_comentarios(item_xml)          self._limpiar_comentarios(item_xml)
61          self._fragmentos = self._parsear_fragmentos(item_xml)          self._fragmentos = self._parsear_fragmentos(item_xml)
62          self._relacionados = self._parsear_temas_relacionados(item_xml)          self._relacionados = self._parsear_temas_relacionados(item_xml)
63          self._requisitos = self._parsear_requisitos(item_xml)          self._requisitos = self._parsear_requisitos(item_xml)
64          self._repeticiones = 0          self._repeticiones = 0
65          self._comando = "preguntar"          self._comando = "preguntar"
# Line 71  class Item(BloqueDialogo): Line 71  class Item(BloqueDialogo):
71                  self._repeticiones = self.REPETICIONES_INFINITAS                  self._repeticiones = self.REPETICIONES_INFINITAS
72             else:             else:
73                  self._repeticiones = string.atoi(item_xml.getAttribute("repeticiones"))                  self._repeticiones = string.atoi(item_xml.getAttribute("repeticiones"))
74                    
75      def tema(self):      def tema(self):
76          return self._tema          return self._tema
77            
78      def relacionados(self):      def relacionados(self):
79          return self._relacionados          return self._relacionados
80            
81      def relacionado(self, nombretema):      def relacionado(self, nombretema):
82          """Devuelve el nombre del contexto que contiene el tema, si éste se encuentra relacionado con este item."""          """Devuelve el nombre del contexto que contiene el tema, si éste se encuentra relacionado con este item."""
83          if self._relacionados.has_key(nombretema):          if self._relacionados.has_key(nombretema):
84              return self._relacionados[nombretema]              return self._relacionados[nombretema]
85          else:          else:
86              return ""              return ""
87            
88      def satisfecho_en(self, visita):      def satisfecho_en(self, visita):
89          """Determina si los requisitos de este item se cumplen en esa visita"""          """Determina si los requisitos de este item se cumplen en esa visita"""
90                    
91          for requisito in self._requisitos:          for requisito in self._requisitos:
# Line 101  class Item(BloqueDialogo): Line 101  class Item(BloqueDialogo):
101                  # Requisito con nodo de texto                  # Requisito con nodo de texto
102                  if not visita.hito(requisito) == self._requisitos[requisito].mensaje_formateado(visita):                  if not visita.hito(requisito) == self._requisitos[requisito].mensaje_formateado(visita):
103                          return 0                          return 0
104          return 1          return 1
105                    
106      def repeticiones(self):      def repeticiones(self):
107          return self._repeticiones          return self._repeticiones
108            
109      def __str__(self):      def __str__(self):
110          texto = "\t\t<Item -\n\t\t\tTexto:\n"          texto = "\t\t<Item -\n\t\t\tTexto:\n"
111          for fragmento in self._fragmentos:          for fragmento in self._fragmentos:
112              texto = texto + "\t\t\t" + str(fragmento) + "\n"              texto = texto + "\t\t\t" + str(fragmento) + "\n"
113          texto = texto + "\t\t\tRelacionados:\n"          texto = texto + "\t\t\tRelacionados:\n"
114          for tema in self._relacionados.keys():          for tema in self._relacionados.keys():
115              texto = texto + "\t\t\t" + self._relacionados[tema] + "." + tema + "\n"              texto = texto + "\t\t\t" + self._relacionados[tema] + "." + tema + "\n"
116          texto = texto + "\t\t/>\n"          texto = texto + "\t\t/>\n"
117          return texto          return texto
118    
119  # Código para pruebas unitarias del módulo.  # Código para pruebas unitarias del módulo.
120    
121  if (__name__ == '__main__'):  if (__name__ == '__main__'):
122      archivo = os.path.join(BloqueDialogo.DIR_DESC_DIALOGOS, "tutor",  "tutor-cortesia" + BloqueDialogo.EXT_DESC_DIALOGOS)      archivo = os.path.join(BloqueDialogo.DIR_DESC_DIALOGOS, "tutor",  "tutor-cortesia" + BloqueDialogo.EXT_DESC_DIALOGOS)
123      print archivo      print archivo
124      stream = open(archivo)      stream = open(archivo)
125      doc_xml = minidom.parse(stream).documentElement      doc_xml = minidom.parse(stream).documentElement
126      aux = doc_xml.getElementsByTagName("tema")[0].getElementsByTagName("item")[0]      aux = doc_xml.getElementsByTagName("tema")[0].getElementsByTagName("item")[0]
127            
128      item = Item(aux, None)      item = Item(aux, None)
129      stream.close()      stream.close()
130    
131      print "Item cargado correctamente.\n" + str(item) # + item._fragmentos[0].mensaje_formateado(None)      print "Item cargado correctamente.\n" + str(item) # + item._fragmentos[0].mensaje_formateado(None)

Legend:
Removed from v.2.0  
changed lines
  Added in v.2.1

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26