def _abrir(self, action): """ Abre la ventana de la entrada de menú recibida. """ import pclases, utils idventana = int(action.get_name().replace("V", "")) ventana = pclases.Ventana.get(idventana) clase = ventana.clase archivo = ventana.fichero if archivo.endswith('.py'): # Al importar no hay que indicar extensión archivo = archivo[:archivo.rfind('.py')] if clase == 'gajim' and archivo == 'gajim': utils.escribir_barra_estado(self.wids['barra_estado'], "Iniciar: gajim...", self.logger, self.__usuario.usuario) self.abrir_gajim() elif clase == 'acerca_de' and archivo == 'acerca_de': utils.escribir_barra_estado(self.wids['barra_estado'], 'Abrir: "acerca de..."', self.logger, self.__usuario.usuario) self.acerca_de() elif 'usuario' in archivo: self.wids['ventana'].window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) utils.escribir_barra_estado(self.wids['barra_estado'], "Cargar: %s.py" % archivo, self.logger, self.__usuario.usuario) exec "import %s" % archivo v = None gobject.timeout_add(100, self.volver_a_cursor_original) if archivo == "usuarios": v = usuarios.Usuarios(self.__usuario) elif archivo == "ventana_usuario": v = ventana_usuario.Usuarios(self.__usuario) else: try: self.wids['ventana'].window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) utils.escribir_barra_estado(self.wids['barra_estado'], "Cargar: %s.py" % archivo, self.logger, self.__usuario.usuario) while gtk.events_pending(): gtk.main_iteration(False) try: exec "reload(%s)" % archivo except NameError: exec "import %s" % archivo v = None gobject.timeout_add(100, self.volver_a_cursor_original) # Solo se permite una instancia de cada tipo de ventana. It's not a bug. It's a feature! (sí, ya :P) v = eval('%s.%s' % (archivo, clase)) v(usuario = self.__usuario) except Exception, msg: self.logger.error("ventana.py::_abrir -> Excepción importando fichero ventana: %s" % msg) self.wids['ventana'].window.set_cursor(None) utils.escribir_barra_estado(self.wids['barra_estado'], "Error detectado. Iniciando informe por correo.", self.logger, self.__usuario.usuario) print "Se ha detectado un error" texto = '' for e in sys.exc_info(): texto += "%s\n" % e tb = sys.exc_info()[2] texto += "Línea %s\n" % tb.tb_lineno from menu import Metaf, enviar_correo info = Metaf() import traceback traceback.print_tb(tb, file = info) texto += "%s\n" % info enviar_correo(texto, self.__usuario)
def abrir_gajim(self): """ Calcado de menu.py. Sólo lleva las modificaciones necesarias para hacerlo funcionar desde aquí. """ try: pwd = os.path.abspath(os.curdir) os.chdir(os.path.join('gajim-0.9.1', 'src')) sys.path.append('.') if os.name == 'posix': os.system("cd .. && ./launch.sh >/dev/null &") elif os.name == 'nt': os.startfile("gajim.pyw") else: utils.dialogo_info(titulo = "PLATAFORMA NO SOPORTADA", texto = "La ayuda on-line solo funciona en arquitecturas con plataformas POSIX o NT\n(GNU/Linux, MS-Windows, *BSD...).", padre = self.wids['ventana']) except: print "Se ha detectado un error. Volviendo a %s." % (pwd) if '.' in sys.path: sys.path.remove('.') os.chdir(pwd) texto = '' for e in sys.exc_info(): texto += "%s\n" % e tb = sys.exc_info()[2] texto += "Línea %s\n" % tb.tb_lineno from menu import Metaf, enviar_correo info = Metaf() import traceback traceback.print_tb(tb, file = info) texto += "%s\n" % info enviar_correo(texto, self.__usuario) else: if '.' in sys.path: sys.path.remove('.') os.chdir(pwd)