#!/usr/bin/python #Version 4 import os import sys import zipfile import wx #from wxPython.wx import * #MUESTRA UNA VENTANA DE ERROR def error(id, mns): wx.MessageBox(mns, 'Error', wx.ICON_ERROR) sys.exit(id) #comprobamos estructura def comprobar_formato(z): bin = 0 xml = 0 lang = 0 formatocorrecto = 0 try: for f in z.namelist(): #~ print f partes = f.split("/") if ("conf.xml" == partes[len(partes)-1]): print "[INF]: Archivo xml encontrado: " + f xml = 1 elif ("dll" == partes[len(partes)-1].split(".")[1]): print "[INF]: Archivo dll encontrado: " + f bin = 1 elif ("so" == partes[len(partes)-1].split(".")[1]): print "[INF]: Archivo so encontrado: " + f bin = 1 elif ("lang.xml" == partes[len(partes)-1]): print "[INF]: Archivo de idioma encontrado: " + f lang = 1 formatocorrecto = bin * xml * lang if not(formatocorrecto): error(2,"[ERROR2]: No es un archivo .ra3 correcto") except OSError: error(5, "[ERROR5]: No se ha podido comprobar la estructura del directorio") return formatocorrecto #OBTIENE EL SISTEMA OPERATIVO def getOS(): operatingsystem = sys.platform if (operatingsystem.find("linux")>=0): return 1 if (operatingsystem.find("win")>=0): return 2 else: print "[WRN]: OS Desconocido: ", operatingsystem return 0 #EXTRAE EN LINUX def extract_linux(z): #comprobamos si tenemos derechos de escritura y si es asi extraemos pathdestino = "/usr/share/realitat3/content" if not(os.access(pathdestino, os.W_OK)): pathdestino = os.environ['HOME'] + "/.realitat3/content" print "[INF]: Destino :", pathdestino try: for f in z.namelist(): if (f.find(".dll")==-1): #si no es un .dll z.extract(f, pathdestino) print "\t[INF]: %s" % (f) return except IOError: error(4, "[ERROR4]: No tienes suficientes permisos: Prueba a ejecutar como root") #sys.exit(4) #EXTRAE EN WINDOWs def extract_windows(z): #comprobamos si tenemos derechos de escritura y si es asi extraemos pathdestino = os.environ['ProgramFiles'] pathdestino += "/Realitat3/content" if not(os.access(pathdestino, os.W_OK)): pathdestino = os.environ['HOMEDRIVE'] + os.environ['HOMEPATH'] + "/.realitat3/content" print "[INF]: Destino :", pathdestino try: for f in z.namelist(): if (f.find(".so")==-1): #si no es un .so z.extract(f, pathdestino) print "\t[INF]: %s" % (f) return except IOError: error(4, "[ERROR4]: No tienes suficientes permisos: Prueba a ejecutar como administrador") #sys.exit(4) #INTENTAMOS ABRIR EL ARCHIVO PASADO COMO ARGUMENTO def abrir(filename): try: z = zipfile.ZipFile(filename) print "[INF]: Instalando ", filename except IOError: error(1, "[ERROR1]: No existe el archivo o es incorrecto. Pasa como argumento un archivo .ra3") #sys.exit(1) ##OBTENEMOS EL SISTEMA OPERATIVO mos = getOS() ##COMPROBAMOS QUE SEA UN ARCHIVO .ra3 comprobar_formato(z) ##EXTRAEMOS EN EL DIRECTORIO CORRESPONDIENTE if (mos == 1): print "[INF]: SO Linux" extract_linux(z) elif (mos == 2): print "[INF]: SO Windows" extract_windows(z) else: error(3, "[ERROR3]: No conozco el SO") #sys.exit(3) ############################## ##EMPIEZA ############################## application = wx.PySimpleApp() # Create a list of filters # This should be fairly simple to follow, so no explanation is necessary filters = 'ra3 files (*.ra3)|*.ra3' dialog = wx.FileDialog ( None, message = 'Abre un archivo .ra3', wildcard = filters, style = wx.OPEN | wx.MULTIPLE ) if dialog.ShowModal() == wx.ID_OK: # We'll have to make room for multiple files here selected = dialog.GetPaths() for selection in selected: abrir(selection) wx.MessageBox('Instalacion completa', 'Info', wx.ICON_INFORMATION) dialog.Destroy() """ ##NOMBRE UNICO import time fileName = "RA3_" for t in time.localtime(): fileName += str(t) print fileName #Otra forma from time import strftime print "RA3_" + strftime("%Y%m%d%H%M%S") #Otra forma from time import strftime import random random.seed() print "RA3_" + strftime("%Y%m%d%H%M%S")+str(random.randint(1, 999)) #Otras Pruebas from datetime import * import uuid print date.today() print datetime.utcnow() print datetime(2002, 12, 25, 12).isoformat(' ') print uuid.uuid4() """ ######################################## #RECURSOS ######################################## #if (partes[1]=="bin" and partes[2].find(".dll") and mos == 2): # libreria = 1 #elif (partes[1]=="bin" and partes[2].split(".")[1]==".so" and mos == 1): # libreria = 1 #elif (f.find("resources")!=-1): # resources = 1 #if (f.find("bin/*.dll")!=-1 and mos == 2): # libreria = 1 #elif (f.find("bin/*.so")!=-1 and mos == 1): # libreria = 1 #z.extractall(pathdestino) #para extraer todo #print "PID: ", os.geteuid() #0->root en linux (solo va en linux) #os.access(path, os.W_OK) #->Use the real uid/gid to test for access to path, puede dar problemas, mejor intentar escribir y capturar la excepcion #print "os.uname(): ",os.uname() #print "os.name: ", os.name #print "sys.platform: ", sys.platform #print "sys.path: ", sys.path #Variables de entorno: #os.environ['HOME'] #os.getenv(varname[, value]) -> Return the value of the enviroment variable varname if it exists, or value if it doesn't. value defaults to None # Availability: most flavors of Unix, Windows. #os.putenv(varname, value) # Set the environment variable named varname to the string value. Such changes to the environment affect subprocesses started with os.system(), popen() or fork() and execv().