def actualizar(): ind = ES.entradaConLista(droid, 'Busqueda del servidor',\ 'Seleccione servidor', lSitios) # Busca el servidor. if (None == ind) or (ind == (len(lSitios)-1)) or (len(lSitios) <= ind) or \ (0 > ind): # Se asegura de tener el indice correcto. return ES.muestraFin() sys.exit() IPServ = lIPs[ind] if ((ind == (len(lSitios) - 2)) or ('' == IPServ)): IPServ = ES.entradaNombre(droid, 'IP del servidor', 'Introduzca IP del servidor', IPServ[0:10]) print("Obteniendo archivo desde %s (%s)." % (lSitios[ind], IPServ)) if droid: decip = droid.wifiGetConnectionInfo().result['ip_address'] hexip = hex(decip).split('x')[1] dirL = int(hexip, 16) miDirIP = socket.inet_ntoa(struct.pack("<L", dirL)) else: miDirIP = obtenerIP( IPServ) # Esta rutina fue la unica que encontre para mi IP. print("Mi direccion IP es: %s" % miDirIP) try: if IPServ[0:IPServ.rindex('.')] != miDirIP[0:miDirIP.rindex( '.' )]: # Las tres primeras partes de ambos IPv4 deben ser iguales. print("El servidor seleccionado %s es errado." % IPServ) return ES.muestraFin() sys.exit() except ValueError: # La funcion rindex (busca indece desde el final de la cadena), no consigue el '.'. print("ERROR EXTRA#O DE RED") # Este error NUNCA deberia ocurrir. return ES.muestraFin() sys.exit() # Se trata de saber, cuando se actualizo por ultima vez un archivo. En el nuevo control.txt, # ademas de la informacion del sistema, tambien se guardara la fecha de descarga de cada archivo. # dControl = ES.cargaDicc("control.txt") # Diccionario de control, antes de recibir el nuevo. No implementado 27/08/2019. URL = "http://" + IPServ + ':8080/storage/' bImpar = True data = urlopen(URL + CONTROL, None, 10).read().decode( 'ISO-8859-1' ) # None, ningun parametro es enviado al servidor; 10, timeout. if None == data: print('ERROR. No hubo carga.') sys.exit() f = open(DIR + CONTROL, "w") if f: archivos = data.split('\n') fechaGrabado = archivos.pop(0) f.write('Datos grabados: ' + fechaGrabado) ahora = strftime("\nDatos descargados: %a, %d/%m/%Y %-l:%M:%S %p\n", localtime()) f.write(ahora) f.close() else: print('ERROR. No se pudo escribir en el archivo.') sys.exit() for nombreArchivo in archivos: # if nombreArchivo[5:6].isdigit(): continue # La primera linea es una fecha. El primer caracter es un digito. nombreArchivo = nombreArchivo.rstrip(' \t\n\r') if not nombreArchivo: continue sColor, bImpar = ES.colorLinea(bImpar, CO.VERDE, CO.AZUL) print("%sLeyendo%s %s remoto." % (sColor, CO.FIN, nombreArchivo)) try: data = urlopen(URL + nombreArchivo, None, 10).read().decode( 'ISO-8859-1' ) # None, ningun parametro es enviado al servidor; 10, timeout. bLeido = True # No hubo error de lectura desde el servidor. except: print("%sERROR LEYENDO%s %s %sREMOTO.%s" % (CO.ROJO, CO.FIN, nombreArchivo, CO.ROJO, CO.FIN)) bLeido = False if bLeido: # Si no hubo error de lectura desde el servidor. try: f = open(DIR + nombreArchivo, "w") bAbierto = True # No hubo error al abrir para escribir en archivo local. except: print("%sERROR AL TRATAR DE ABRIR%s %s%s %sPARA ESCRITURA.%s" % \ (CO.ROJO, CO.FIN, DIR, nombreArchivo, CO.ROJO, CO.FIN)) bAbierto = False if bAbierto: # Si no hubo error al abrir para escribir en archivo local. print("%sEscribiendo%s %s local..." % (sColor, CO.FIN, nombreArchivo)) try: f.write(data) bEscrito = True # No hubo error escribiendo en el archivo local. except: print("%sERROR AL TRATAR DE ESCRIBIR%s %s." % (CO.ROJO, CO.FIN, nombreArchivo)) bEscrito = False finally: f.close() if bEscrito: print( "%s %sactualizado con%s %d lineas!" % (nombreArchivo, (CO.CYAN if 'heute.txt' == nombreArchivo else sColor), CO.FIN, ES.cLineas(nombreArchivo))) # Fin if bEscrito # Fin if bAbierto # Fin if bLeido # Fin for return ES.muestraFin() # Funcion actualizar
lControl = [['0', nombArch] for nombArch in lDATA] dControl = {linea[1].strip():[linea[0].strip(), linea[0].strip()] for linea in lControl if FG.esEntero(linea[0].strip())} lBancosHoy = None # La lista de bancos de hoy esta vacia al principio. for DATA in lDATA: if 'control.txt' != DATA: (timeAnterior, timeNuevo) = dControl.get(DATA, ['0', '-1']) else: timeAnterior = timeNuevo = 0 segsDiferencia = int(timeNuevo) - int(timeAnterior) sColor, bImpar = ES.colorLinea(bImpar, CO.VERDE, CO.AZUL) print("%sLeyendo%s %s remoto. Local modificado hace: %d seg del remoto" % (sColor, CO.FIN, DATA, segsDiferencia)) if 'control.txt' != DATA and 0 >= segsDiferencia: if 0 == segsDiferencia: print("%s, %slocal; ya esta actualizado con%s %d lineas! El %s" % \ (DATA, sColor, CO.FIN, ES.cLineas(DATA), ctime(int(timeAnterior)))) continue elif 'archsBanco.txt' != DATA: print("%s %sno está en el archivo de control!%s" % (DATA, CO.ROJO, CO.FIN)) try: data = urlopen(URL + DATA, None, 10).read().decode('ISO-8859-1') # None, ningun parametro es enviado al servidor; 10, timeout. bLeido = True # No hubo error de lectura desde el servidor. except: print("%sERROR LEYENDO%s %s %sREMOTO.%s" % (CO.ROJO, CO.FIN, DATA, CO.ROJO, CO.FIN)) bLeido = False if bLeido: # Si no hubo error de lectura desde el servidor. if 'control.txt' == DATA: lControl = [linea.strip().split(';')
print("%sERROR AL TRATAR DE ABRIR%s %s%s %sPARA ESCRITURA.%s" % \ (CO.ROJO, CO.FIN, DIR, DATA, CO.ROJO, CO.FIN)) bAbierto = False if bAbierto: # Si no hubo error al abrir para escribir en archivo local. print("%sEscribiendo%s %s local..." % (sColor, CO.FIN, DATA)) try: f.write(data) bEscrito = True # No hubo error escribiendo en el archivo local. except: print("%sERROR AL TRATAR DE ESCRIBIR%s %s." % (CO.ROJO, CO.FIN, DATA)) bEscrito = False finally: f.close() if bEscrito: print("%s %sactualizado con%s %d lineas!" % (DATA, (CO.CYAN if 'heute.txt' == DATA else sColor), CO.FIN, ES.cLineas(DATA))) # Fin if bEscrito # Fin if bAbierto # Fin if bLeido ''' elif 'control.txt' == DATA: # El primer archivo a leer, no se pudo descargar. print(("%sPARECIERA QUE EXISTE ALGUN PROBLEMA CON INTERNET O LOS " "ARCHIVOS NO EXISTEN.%s") % (CO.ROJO, CO.FIN)) ES.muestraFin() sys.exit()''' # Fin for ES.muestraFin() # Fin del programa