27 |
import sys |
import sys |
28 |
from time import ctime |
from time import ctime |
29 |
from xml.dom import minidom |
from xml.dom import minidom |
30 |
|
from string import strip |
31 |
|
|
32 |
# --------------------------------------------------------------- |
# --------------------------------------------------------------- |
33 |
# Clase para excepciones dentro de juego (por ejemplo, el usuario |
# Clase para excepciones dentro de juego (por ejemplo, el usuario |
37 |
class ExcepcionDeJuego(Exception): |
class ExcepcionDeJuego(Exception): |
38 |
|
|
39 |
def __init__(self, mensaje=""): |
def __init__(self, mensaje=""): |
40 |
self.__mensaje = mensaje |
self.__mensaje = mensaje |
41 |
|
|
42 |
def __str__(self): |
def __str__(self): |
43 |
return self.__mensaje |
return self.__mensaje |
44 |
|
|
45 |
|
|
46 |
# --------------------------- |
# --------------------------- |
119 |
def extraer_contenido_xml(elem): |
def extraer_contenido_xml(elem): |
120 |
"""Extrae todo el texto contenido dentro del elemento. |
"""Extrae todo el texto contenido dentro del elemento. |
121 |
Parametros: |
Parametros: |
122 |
- elem(xml.dom.minidom.Node): una instancia de elemento XML |
- elem(xml.dom.minidom.Node): una instancia de elemento XML |
123 |
Requiere: |
Requiere: |
124 |
elem != None |
elem != None |
125 |
Asegura: |
Asegura: |
126 |
return != None |
return != None |
127 |
""" |
""" |
128 |
contenido = "" |
contenido = "" |
129 |
for sub_elem in elem.childNodes: |
for sub_elem in elem.childNodes: |
130 |
if sub_elem.nodeType == minidom.Node.TEXT_NODE: |
if sub_elem.nodeType == minidom.Node.TEXT_NODE: |
131 |
contenido = contenido + sub_elem.data.encode('ISO-8859-1') |
contenido = contenido + sub_elem.data.encode('ISO-8859-1') |
132 |
return contenido |
return contenido |
133 |
|
|
134 |
|
|
136 |
"""Extrae el valor de un atributo del elemento. |
"""Extrae el valor de un atributo del elemento. |
137 |
Si el elemento no contiene el atributo, produce una excepcion KeyError. |
Si el elemento no contiene el atributo, produce una excepcion KeyError. |
138 |
Parametros: |
Parametros: |
139 |
- elem(xml.dom.minidom.Node): una instancia de elemento XML |
- elem(xml.dom.minidom.Node): una instancia de elemento XML |
140 |
- nombre_atributo(string): el nombre del atributo a extraer |
- nombre_atributo(string): el nombre del atributo a extraer |
141 |
Requiere: |
Requiere: |
142 |
elem != None |
elem != None |
143 |
nombre_atributo != None |
nombre_atributo != None |
144 |
Asegura: |
Asegura: |
145 |
return != None |
return != None |
146 |
""" |
""" |
147 |
return elem.attributes[nombre_atributo].value.encode('ISO-8859-1') |
return elem.attributes[nombre_atributo].value.encode('ISO-8859-1') |
148 |
|
|
149 |
def extraer_nombre_xml(elem): |
def extraer_nombre_xml(elem): |
150 |
"""Extrae el nombre del tag de un elemento. |
"""Extrae el nombre del tag de un elemento. |
151 |
Parametros: |
Parametros: |
152 |
- elem(xml.dom.minidom.Node): una instancia de elemento XML |
- elem(xml.dom.minidom.Node): una instancia de elemento XML |
153 |
Requiere: |
Requiere: |
154 |
elem != None |
elem != None |
155 |
Asegura: |
Asegura: |
156 |
return != None |
return != None |
157 |
""" |
""" |
158 |
return elem.nodeName.encode('ISO-8859-1') |
return elem.nodeName.encode('ISO-8859-1') |
159 |
|
|
160 |
def limpiar_nodos_text_xml(elem): |
def limpiar_nodos_text_xml(elem): |
161 |
"""Elimina los nodos con nombre Text de un elemento |
"""Elimina los nodos con nombre Text de un elemento |
162 |
Parametros: |
Parametros: |
163 |
- elem(xml.dom.minidom.Node): una instancia de elemento XML |
- elem(xml.dom.minidom.Node): una instancia de elemento XML |
164 |
Requiere: |
Requiere: |
165 |
elem != None |
elem != None |
166 |
""" |
""" |
167 |
for nodo in elem.childNodes[:]: |
for nodo in elem.childNodes[:]: |
168 |
if not 'Element:' in str(nodo).split(): |
if not 'Element:' in str(nodo).split(): |
169 |
elem.childNodes.remove(nodo) |
elem.childNodes.remove(nodo) |
170 |
|
|
171 |
|
def listatributo(atributo): |
172 |
|
"""Convierte en lista un atributo de tipo string con esta forma: <item1, item2, ...> """ |
173 |
|
listablancos = atributo.split(',') |
174 |
|
lista = map(strip, listablancos) |
175 |
|
return lista |
176 |
|
|
177 |
# --------------- |
# --------------- |
178 |
# Miscelánea pura |
# Miscelánea pura |
179 |
# --------------- |
# --------------- |
190 |
if len(string) == 0: |
if len(string) == 0: |
191 |
return "" |
return "" |
192 |
else: |
else: |
193 |
ind_abrir = string.find("[") |
ind_abrir = string.find("[") |
194 |
ind_cerrar = string.find("]") |
ind_cerrar = string.find("]") |
195 |
if ind_abrir != -1 and ind_cerrar != -1: |
if ind_abrir != -1 and ind_cerrar != -1: |
196 |
return normalizar_id(string[ind_abrir+1 : ind_cerrar]) |
return normalizar_id(string[ind_abrir+1 : ind_cerrar]) |
197 |
else: |
else: |
198 |
for palabra in string.split(): |
for palabra in string.split(): |
199 |
if not palabra.lower() in ["el", "la", "los", "las", "un", "uno", "una", |
if not palabra.lower() in ["el", "la", "los", "las", "un", "uno", "una", |
200 |
"unos", "unas", "que", "El", "La", "Los", "Las", |
"unos", "unas", "que", "El", "La", "Los", "Las", |
201 |
"Un", "Uno", "Una", "Unos", "Unas", "Que"]: |
"Un", "Uno", "Una", "Unos", "Unas", "Que"]: |
202 |
return normalizar_id(palabra) |
return normalizar_id(palabra) |
203 |
return "no tiene id" |
return "no tiene id" |
204 |
|
|
205 |
|
|
206 |
def normalizar_id(id): |
def normalizar_id(id): |
226 |
|
|
227 |
texto = " Fichero " + \ |
texto = " Fichero " + \ |
228 |
code.co_filename + \ |
code.co_filename + \ |
229 |
", línea " + str(lineno) + \ |
", línea " + str(lineno) + \ |
230 |
" en " + code.co_name |
" en " + code.co_name |
231 |
if code.co_name != "?": |
if code.co_name != "?": |
232 |
# args = code.co_varnames[0:code.co_argcount] |
# args = code.co_varnames[0:code.co_argcount] |
233 |
# texto += ("(" + " ".join(args) + ")") |
# texto += ("(" + " ".join(args) + ")") |
234 |
texto += "()" |
texto += "()" |
235 |
|
|
236 |
escribir(texto) |
escribir(texto) |
237 |
|
|
238 |
traceback = traceback.tb_next |
traceback = traceback.tb_next |
239 |
|
|
240 |
escribir("Excepción " + \ |
escribir("Excepción " + \ |
241 |
str(sys.exc_info()[0]) + \ |
str(sys.exc_info()[0]) + \ |
242 |
": " + \ |
": " + \ |
243 |
str(sys.exc_info()[1])) |
str(sys.exc_info()[1])) |
244 |
|
|
245 |
def trazar(mensaje_depuracion, nombre_modulo, nivel_depuracion=1): |
def trazar(mensaje_depuracion, nombre_modulo=None, nivel_depuracion=1): |
246 |
"""Escribe un mensaje de traza (si el servidor se activa en modo depuracion) |
"""Escribe un mensaje de traza (si el servidor se activa en modo depuracion) |
247 |
|
|
248 |
Para activar el servidor en modo depuracion, usar |
Para activar el servidor en modo depuracion, usar |
249 |
./mine.py -d <nivel de depuracion> -m {<nombre de modulo a trazar>}* |
./mine.py -d <nivel de depuracion> -m {<nombre de modulo a trazar>}* |
250 |
""" |
""" |
251 |
from mundo import Mundo |
|
252 |
if nivel_depuracion <= Mundo.nivel_depuracion: # muestra solo trazas hasta el nivel de depuracion activo |
try: |
253 |
if nombre_modulo in Mundo.modulos_depurados: |
if not nombre_modulo: |
254 |
escribir("Traza " + nombre_modulo + ": " + mensaje_depuracion) |
import inspect |
255 |
|
#print "·",inspect.getmodule(mensaje_depuracion), "(",inspect.getmodule(mensaje_depuracion).name |
256 |
|
nombre_modulo = inspect.getmodule(mensaje_depuracion).name |
257 |
|
|
258 |
|
from mundo import Mundo |
259 |
|
if nivel_depuracion <= Mundo.nivel_depuracion: # muestra solo trazas hasta el nivel de depuracion activo |
260 |
|
if nombre_modulo in Mundo.modulos_depurados: |
261 |
|
escribir("Traza " + nombre_modulo + ": " + mensaje_depuracion) |
262 |
|
except: |
263 |
|
pass |
264 |
|
|
265 |
|
|
266 |
|
|
269 |
un indice en la primera posición de las tuplas. |
un indice en la primera posición de las tuplas. |
270 |
|
|
271 |
Ejemplo: |
Ejemplo: |
272 |
print izip(['a', 'b', 'c']) |
print izip(['a', 'b', 'c']) |
273 |
[(0, 'a'), (1, 'b'), (2, 'c')] |
[(0, 'a'), (1, 'b'), (2, 'c')] |
274 |
|
|
275 |
Útil para buscar la posición de un objeto en una lista: |
Útil para buscar la posición de un objeto en una lista: |
276 |
for (i, obj) in izip(lista_de_objetos): |
for (i, obj) in izip(lista_de_objetos): |
277 |
if cumple_condicion(obj): |
if cumple_condicion(obj): |
278 |
return i |
return i |
279 |
|
|
280 |
(c) Magnus Licka |
(c) Magnus Licka |
281 |
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/163525 |
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/163525 |
282 |
""" |
""" |
283 |
return zip(range(len(args[0])), *args) |
return zip(range(len(args[0])), *args) |
284 |
|
|
285 |
|
if (__name__ == '__main__'): |
286 |
|
print listatributo(" a, b, c ") |
287 |
|
pass |
288 |
|
|