57 |
return (version, linea, i) |
return (version, linea, i) |
58 |
|
|
59 |
|
|
60 |
def convertir_contenido(contenido): |
def convertir_contenido(contenido, conversiones): |
61 |
"""Esta es la funcion que hace el trabajo real. Recibe una lista de strings, |
"""Esta es la funcion que hace el trabajo real. Recibe una lista de strings, |
62 |
uno por cada linea del fichero, y modifica los que sean necesarios. Al final |
uno por cada linea del fichero, y modifica los que sean necesarios. Al final |
63 |
devuelve true si no ha habido errores y ha cambiado algo del contenido.""" |
devuelve true si no ha habido errores y ha cambiado algo del contenido. |
64 |
|
|
65 |
|
El parametro conversiones es un diccionario que se actualiza si se |
66 |
|
ha convertido el fichero con exito. Si por ejemplo, el fichero era de la |
67 |
|
version 1.0 y se ha subido a la 1.2, al diccionario le seran añadidas las |
68 |
|
siguientes claves: { "1.0":1, "1.1":1, "1.2":1 }. |
69 |
|
""" |
70 |
|
|
71 |
try: |
try: |
72 |
|
|
80 |
|
|
81 |
# Versión 1.0 -> 1.1: no hay que modificar el fichero (excepto el numero de |
# Versión 1.0 -> 1.1: no hay que modificar el fichero (excepto el numero de |
82 |
# version), porque los cambios consisten en añadir tags nuevos. |
# version), porque los cambios consisten en añadir tags nuevos. |
83 |
|
print "->Convirtiendo a versión 1.1" |
84 |
version = "1.1" |
version = "1.1" |
85 |
contenido[nlinea_version] = linea_version.replace("1.0", "1.1") |
contenido[nlinea_version] = linea_version.replace("1.0", "1.1") |
|
print "->Convertido a versión 1.1" |
|
86 |
convertido_ok = 1 |
convertido_ok = 1 |
87 |
|
conversiones["1.0"] = 1 |
88 |
|
|
89 |
else: |
else: |
90 |
raise Exception, "Numero de version desconocido: " + version |
raise Exception, "Numero de version desconocido: " + version |
97 |
return 0 |
return 0 |
98 |
|
|
99 |
|
|
100 |
def convertir_fichero(nombre_fichero): |
def convertir_fichero(nombre_fichero, conversiones): |
101 |
"""Funcion generica que convierte un fichero: lo lee en memoria, convierte |
"""Funcion generica que convierte un fichero: lo lee en memoria, convierte |
102 |
el contenido y luego lo vuelve a escribir. El fichero original se guarda |
el contenido y luego lo vuelve a escribir. El fichero original se guarda |
103 |
añadiendole la extension .bkp""" |
añadiendole la extension .bkp. |
104 |
|
""" |
105 |
|
|
106 |
print "Analizando fichero " + nombre_fichero + "..." |
print "Analizando fichero " + nombre_fichero + "..." |
107 |
fichero = open(nombre_fichero) |
fichero = open(nombre_fichero) |
108 |
contenido = fichero.readlines() |
contenido = fichero.readlines() |
109 |
fichero.close() |
fichero.close() |
110 |
|
|
111 |
modificado_ok = convertir_contenido(contenido) |
convertido_ok = convertir_contenido(contenido, conversiones) |
112 |
|
|
113 |
if modificado_ok: |
if convertido_ok: |
114 |
print "->Convertido OK" |
print "->Convertido OK" |
115 |
os.rename(nombre_fichero, nombre_fichero + ".bkp") |
os.rename(nombre_fichero, nombre_fichero + ".bkp") |
116 |
fichero = open(nombre_fichero, "w") |
fichero = open(nombre_fichero, "w") |
123 |
|
|
124 |
os.chdir("./desc_salas") |
os.chdir("./desc_salas") |
125 |
|
|
126 |
|
conversiones = {} |
127 |
|
|
128 |
for nombre_fichero in os.listdir("."): |
for nombre_fichero in os.listdir("."): |
129 |
if sre.match(".*\.xml$", nombre_fichero): |
if sre.match(".*\.xml$", nombre_fichero): |
130 |
convertir_fichero(nombre_fichero) |
convertir_fichero(nombre_fichero, conversiones) |
131 |
|
|
132 |
while 1: |
if len(conversiones) > 0: |
133 |
borrar_bkp = raw_input("¿Borrar ficheros .bkp?: ").lower() |
while 1: |
134 |
if borrar_bkp == "s" or borrar_bkp == "si": |
print "Durante la conversion se han guardado copias de los ficheros originales" |
135 |
for nombre_fichero in os.listdir("."): |
print "de descripcion de salas, con el mismo nombre y extension .bkp. Ahora" |
136 |
if sre.match(".*\.xml\.bkp$", nombre_fichero): |
print "puedes borrar los ficheros de copia, o conservarlos." |
137 |
os.remove(nombre_fichero) |
borrar_bkp = raw_input("¿Borrar ficheros .bkp?: ").lower() |
138 |
break |
if borrar_bkp == "s" or borrar_bkp == "si": |
139 |
elif borrar_bkp == "n" or borrar_bkp == "no": |
for nombre_fichero in os.listdir("."): |
140 |
break |
if sre.match(".*\.xml\.bkp$", nombre_fichero): |
141 |
|
os.remove(nombre_fichero) |
142 |
|
break |
143 |
|
elif borrar_bkp == "n" or borrar_bkp == "no": |
144 |
|
break |
145 |
|
|
146 |
|
if conversiones.has_key("1.0"): |
147 |
|
print """ |
148 |
|
Se han convertido ficheros de version 1.0. Hay que revisarlos a mano para |
149 |
|
añadir articulos en los titulos de sala, las salidas y los nombres de |
150 |
|
objetos (los articulos iran en minusculas). Por ejemplo, cambiar |
151 |
|
<nombre>Salon principal de la posada</nombre> |
152 |
|
por |
153 |
|
<nombre>el salon principal de la posada</nombre> |
154 |
|
""" |
155 |
|
|