def initvars(): global Logueado Logueado = False config = ConfigParser() config.read("conf/config.ini") tipo = config.get('CUENTA', 'Tipo') ps = b64decode('MjAxMDE3MzMtOTYwOTkyNg==') xorps = XOR.new(str(ps)) global Tipo Tipo = xorps.decrypt(b64decode(str(tipo))) webserver = config.get('WEB', 'srv') ps = b64decode('MjAxMDE3MzMtOTYwOTkyNg==') xorps = XOR.new(str(ps)) global WEBServer WEBServer = xorps.decrypt(b64decode(str(webserver))) print WEBServer global DatosUsuario DatosUsuario = {} global DictSenales DictSenales = {} global BD BD = BasedeDatos() BD.Conectar() global DictColaResultados DictColaResultados = {} t = threading.Thread(target=GetIps) t.start()
def ObtenerNombreClienteBD(self): if Modo == "1": BDNombreCliente = BasedeDatos() BDNombreCliente.Conectar() Nombre = BDNombreCliente.SeleccionarUno( "select top 1 nombre from t365_Empresas where master = ?", 1) elif Modo == "2": Nombre = "Sin Nombre Modo StandAlone" return Nombre
class GetSS365Disprog(QtCore.QThread): def __init__(self): QtCore.QThread.__init__(self) self.Timeout = 45 self.detener = False def ConectarBD(self): self.BD1 = BasedeDatos() self.BD1.Conectar() def SearchSS365Disprog(self): #print "Entre" Result = self.BD1.Seleccionar( "SELECT id, id_cliente, zona FROM t365_SS365Disprog WHERE status = 0" "") print 'Arranco GetSS365Disprog' print Result if Result: for r in Result: global listass365disprog disp = str(r.id_cliente) + ',' + str(r.zona) listass365disprog.append(disp) def Error(self, excep): self.dia = LaFecha.damedia() self.fecha = LaFecha.damefecha() self.ErrorLog = open('history/' + str(self.dia) + 'ErrorLog.txt', 'a') self.ErrorLog.write("ERROR" + ' - ' + str(excep) + ' - ' + str(self.fecha) + "\n") self.ErrorLog.close() def Inicio(self): #try: while True: if self.Timeout == 45: self.SearchSS365Disprog() self.Timeout = 0 #Mejorar el Uso del CPU self.Timeout = self.Timeout + 1 if self.detener == True: break time.sleep(1) #except Exception as e: # self.Error(e) # self.Inicio() def run(self): try: self.ConectarBD() except: print 'No se pudo conectar a BD [GetSS365Disprog]' self.Inicio()
def handle(self): self.trama = 'vacia' numpuerto = self.server.num_puerto prefijo = self.server.prefijo listass365disprog = self.server.listass365disprog print "Cliente Conectado", self.client_address while len(self.trama): self.trama = self.request.recv(1024) print self.trama + ' - OK' self.trama = self.trama.replace("", "") self.tramadiv = self.trama.split(',') self.trama = self.tramadiv[0] self.idcliente = self.tramadiv[1] self.patron = re.compile( '(?P<Identificador>5)(?P<Receptor>\d\d)(?P<Linea>[0-9a-zA-Z]{1,3})(?P<Espacio> )(?P<ID>18)(?P<Espacio1> )(?P<Abonado>[^ ]{1,20})(?P<Espacio2> )(?P<Evento>[^ ]{1,20})(?P<Espacio3> )(?P<Particion>[^ ]{1,20})(?P<Espacio4> )(?P<ZonaUsuario>[^ ]{1,20})' ) self.dividida = self.patron.search(self.trama) zonausuario = self.dividida.group("ZonaUsuario") cuentadisp = str(self.idcliente) + ',' + str(zonausuario) Borrardelista = False if cuentadisp in listass365disprog: bd = BasedeDatos() bd.Conectar() cuentazona = cuentadisp.split(',') cuenta = cuentadisp[0] zona = cuentazona[1] bd.Borrar( "DELETE FROM t365_SS365Disprog WHERE id_cliente = ? and zona = ?", [str(cuenta), str(zona)]) self.request.send("Desprog") Borrardelista = True if Borrardelista == True: listass365disprog.remove(cuentadisp) else: self.request.send("\x06") self.identificar(self.trama, numpuerto, prefijo, self.idcliente) print "Cliente Desconectado", self.client_address self.request.close()
def ConectarBD(self): self.BD1 = BasedeDatos() self.BD1.Conectar()
class GuardarTramaBD(QtCore.QThread): def __init__(self): QtCore.QThread.__init__(self) self.LogoutOperadores = 0.0 def ConectarBD(self): self.BD1 = BasedeDatos() self.BD1.Conectar() def VerificarOperadoresBD(self): self.OperadoresBD = True try: config = ConfigParser() config.read("conf/config.ini") Res = config.get('CUENTA', 'OperadoresBD') if Res == 'False': self.OperadoresBD = False else: self.OperadoresBD = True except: pass def InsertarBD(self): #print 'Insentando 1' if len(ColaParaGuardar) > 0: self.BD1.Insertar( "INSERT INTO t365_ReceiveSignal(signal,num_line,customer,event,zone_user,protocol,partition,id_receptor,status)values(?,?,?,?,?,?,?,?,?); " "", ColaParaGuardar.pop(0)) #self.emit(QtCore.SIGNAL("signalNotifySMSA")) print 'Insentando 2' if len(ColaParaGuardarSenalSistema) > 0: self.BD1.Insertar( "exec jssp_InsertarTramaSistema ?,?,?,?,?,?,?,?,?", ColaParaGuardarSenalSistema.pop(0)) # print 'Insentando 3' #Para manejar Logueo y Reparticion de Senales por Base de Datos con nuevos Stores y Triggers. if self.OperadoresBD: # print 'Insentando 4' if self.LogoutOperadores > 5: self.BD1.Actualizar("exec sp365_LogoutOperador") # print 'Insentando 5' #print 'Enviando Logout Operadores' self.LogoutOperadores = 0.0 self.BD1.Actualizar("exec sp365_AsignarSenal") #print 'Asignando Senal' #Cree esta funcion para poder reiniciar en caso de error, no estoy seguro #Si RUN al iniciar un hilo pueda invocarla de nuevo def Error(self, excep): self.dia = LaFecha.damedia() self.fecha = LaFecha.damefecha() self.ErrorLog = open('history/' + str(self.dia) + 'ErrorLog.txt', 'a') self.ErrorLog.write("ERROR" + ' - ' + str(excep) + ' - ' + str(self.fecha) + "\n") self.ErrorLog.close() def Inicio(self): try: self.VerificarOperadoresBD() while True: self.InsertarBD() #Mejorar el Uso del CPU time.sleep(0.5) if self.OperadoresBD: self.LogoutOperadores = self.LogoutOperadores + 0.5 except Exception as e: print 'Error al guardar Trama' + str(e) self.Error(e) self.Inicio() def run(self): try: self.ConectarBD() except: print 'No se pudo conectar a BD [GTO]' self.Inicio()
from flask import Flask, request, jsonify import json import threading import base64 import datetime from bd import BasedeDatos app = Flask(__name__) BD = BasedeDatos() BD.Conectar() def shutdown_server(): func = request.environ.get('werkzeug.server.shutdown') if func is None: raise RuntimeError('Not running with the Werkzeug Server') func() @app.route('/shutdown', methods=['GET']) def shutdown(): shutdown_server() return 'Server shutting down...' @app.route("/authenticate", methods=['POST']) def autenticacion(): Json = request.get_json(force=True) print type(Json)
def __init__(self): QtGui.QWidget.__init__(self) self.MainWindow = Ui_MainWindow() self.MainWindow.setupUi(self) self.iconoeditar = QtGui.QIcon() self.iconoeditar.addPixmap(QtGui.QPixmap(":/ico/edit-icon.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.iconoborrar = QtGui.QIcon() self.iconoborrar.addPixmap(QtGui.QPixmap(":/ico/Delete_Icon.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.iconocam = QtGui.QIcon() self.setWindowIcon(QtGui.QIcon("icon.png")) self.MainWindow.tableWidget_TareasConfig.verticalHeader().setVisible( False) self.MainWindow.tableWidget_TareasConfig.setShowGrid(False) self.MainWindow.tableWidget_TareasConfig.setAlternatingRowColors(True) self.MainWindow.tableWidget_TareasConfig.verticalHeader( ).setDefaultSectionSize(20) self.MainWindow.tableWidget_TareasConfig.setEditTriggers( QtGui.QAbstractItemView.NoEditTriggers) self.MainWindow.tableWidget_TareasConfig.setSelectionBehavior( QtGui.QAbstractItemView.SelectRows) self.MainWindow.tableWidget_Tareas.verticalHeader().setVisible(False) self.MainWindow.tableWidget_Tareas.setShowGrid(False) self.MainWindow.tableWidget_Tareas.setAlternatingRowColors(True) self.MainWindow.tableWidget_Tareas.verticalHeader( ).setDefaultSectionSize(20) self.MainWindow.tableWidget_Tareas.setEditTriggers( QtGui.QAbstractItemView.NoEditTriggers) self.MainWindow.tableWidget_Tareas.setSelectionBehavior( QtGui.QAbstractItemView.SelectRows) self.connect(self.MainWindow.actionAgregar_Tarea, QtCore.SIGNAL("triggered()"), self.AbrirAgregarTarea) self.connect(self.MainWindow.actionProgramar_Tarea, QtCore.SIGNAL("triggered()"), self.AbrirProgramarTarea) self.scheduler = QtScheduler() self.BD = BasedeDatos() self.BD.Conectar() self.CargarTareasProgramadas() self.CargarTareas() self.ProgramarTareas() self.ListarTareas() self.ListarTareasProgramadas() ################## FUNCIONES PARA EL SYSTEM TRAY ICON ####################### self.exitOnClose = False exit = QtGui.QAction(QtGui.QIcon("icon.png"), "Cerrar 365Jobs", self) self.connect(exit, QtCore.SIGNAL("triggered()"), self.exitEvent) self.trayIcon = QtGui.QSystemTrayIcon(QtGui.QIcon("icon.png"), self) menu = QtGui.QMenu(self) menu.addAction(exit) self.trayIcon.setContextMenu(menu) self.connect(self.trayIcon, \ QtCore.SIGNAL("activated(QSystemTrayIcon::ActivationReason)"), \ self.trayIconActivated) self.trayIcon.show() self.trayIcon.showMessage( "365Jobs Abierto!", "Click para abrir la Ventana\nBoton derecho para Menu") self.trayIcon.setToolTip("365Jobs") print self.DictTareasProgramadasByID
class MainClass(QtGui.QMainWindow): def __init__(self): QtGui.QWidget.__init__(self) self.MainWindow = Ui_MainWindow() self.MainWindow.setupUi(self) self.iconoeditar = QtGui.QIcon() self.iconoeditar.addPixmap(QtGui.QPixmap(":/ico/edit-icon.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.iconoborrar = QtGui.QIcon() self.iconoborrar.addPixmap(QtGui.QPixmap(":/ico/Delete_Icon.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.iconocam = QtGui.QIcon() self.setWindowIcon(QtGui.QIcon("icon.png")) self.MainWindow.tableWidget_TareasConfig.verticalHeader().setVisible( False) self.MainWindow.tableWidget_TareasConfig.setShowGrid(False) self.MainWindow.tableWidget_TareasConfig.setAlternatingRowColors(True) self.MainWindow.tableWidget_TareasConfig.verticalHeader( ).setDefaultSectionSize(20) self.MainWindow.tableWidget_TareasConfig.setEditTriggers( QtGui.QAbstractItemView.NoEditTriggers) self.MainWindow.tableWidget_TareasConfig.setSelectionBehavior( QtGui.QAbstractItemView.SelectRows) self.MainWindow.tableWidget_Tareas.verticalHeader().setVisible(False) self.MainWindow.tableWidget_Tareas.setShowGrid(False) self.MainWindow.tableWidget_Tareas.setAlternatingRowColors(True) self.MainWindow.tableWidget_Tareas.verticalHeader( ).setDefaultSectionSize(20) self.MainWindow.tableWidget_Tareas.setEditTriggers( QtGui.QAbstractItemView.NoEditTriggers) self.MainWindow.tableWidget_Tareas.setSelectionBehavior( QtGui.QAbstractItemView.SelectRows) self.connect(self.MainWindow.actionAgregar_Tarea, QtCore.SIGNAL("triggered()"), self.AbrirAgregarTarea) self.connect(self.MainWindow.actionProgramar_Tarea, QtCore.SIGNAL("triggered()"), self.AbrirProgramarTarea) self.scheduler = QtScheduler() self.BD = BasedeDatos() self.BD.Conectar() self.CargarTareasProgramadas() self.CargarTareas() self.ProgramarTareas() self.ListarTareas() self.ListarTareasProgramadas() ################## FUNCIONES PARA EL SYSTEM TRAY ICON ####################### self.exitOnClose = False exit = QtGui.QAction(QtGui.QIcon("icon.png"), "Cerrar 365Jobs", self) self.connect(exit, QtCore.SIGNAL("triggered()"), self.exitEvent) self.trayIcon = QtGui.QSystemTrayIcon(QtGui.QIcon("icon.png"), self) menu = QtGui.QMenu(self) menu.addAction(exit) self.trayIcon.setContextMenu(menu) self.connect(self.trayIcon, \ QtCore.SIGNAL("activated(QSystemTrayIcon::ActivationReason)"), \ self.trayIconActivated) self.trayIcon.show() self.trayIcon.showMessage( "365Jobs Abierto!", "Click para abrir la Ventana\nBoton derecho para Menu") self.trayIcon.setToolTip("365Jobs") print self.DictTareasProgramadasByID def trayIconActivated(self, reason): if reason == QtGui.QSystemTrayIcon.Context: self.trayIcon.contextMenu().show() elif reason == QtGui.QSystemTrayIcon.Trigger: self.show() self.raise_() def closeEvent(self, event): if self.exitOnClose: self.trayIcon.hide() del self.trayIcon #event.accept() else: self.hide() event.setAccepted(True) event.ignore() def exitEvent(self): self.exitOnClose = True self.close() def AbrirAgregarTarea(self): self.DialogAgregarTarea = DialogAgregarTarea(self) self.DialogAgregarTarea.show() def AbrirProgramarTarea(self): self.DialogProgramarTarea = DialogProgramarTarea(self) self.DialogProgramarTarea.show() def AbrirEditarTarea(self, idtarea): self.DialogEditarTarea = DialogEditarTarea(self, idtarea) self.DialogEditarTarea.show() def CargarTareas(self): self.Tareas = self.BD.Seleccionar("""SELECT * FROM t365_Jobs """) def CargarTareasProgramadas(self): self.TareasProg = self.BD.Seleccionar( """SELECT t365_JobsTipos.Nombre AS nombretipo, t365_Jobs.nombre AS nombretarea, t365_JobsConfig.id_tareaconfig,t365_JobsConfig.id_tarea, t365_JobsConfig.id_tipo, t365_JobsConfig.day_run_date, t365_JobsConfig.interval_weeks, t365_JobsConfig.interval_days, t365_JobsConfig.interval_hours, t365_JobsConfig.interval_seconds, t365_JobsConfig.interval_minutes, t365_JobsConfig.start_date, t365_JobsConfig.end_date, t365_JobsConfig.cron_year, t365_JobsConfig.cron_month, t365_JobsConfig.cron_day, t365_JobsConfig.cron_week, t365_JobsConfig.cron_day_of_week, t365_JobsConfig.cron_hour, t365_JobsConfig.cron_minute, t365_JobsConfig.cron_second, t365_Jobs.query, t365_Jobs.params FROM t365_Jobs INNER JOIN t365_JobsConfig ON t365_Jobs.id_tarea = t365_JobsConfig.id_tarea INNER JOIN t365_JobsTipos ON t365_JobsConfig.id_tipo = t365_JobsTipos.id_tipo""" ) def ListarTareas(self): while self.MainWindow.tableWidget_Tareas.rowCount() > 0: self.MainWindow.tableWidget_Tareas.removeRow(0) for datostarea in self.Tareas: Siguiente = self.MainWindow.tableWidget_Tareas.rowCount() self.MainWindow.tableWidget_Tareas.insertRow(Siguiente) columna = 0 texto = QtGui.QTableWidgetItem(datostarea.nombre) self.MainWindow.tableWidget_Tareas.setItem(Siguiente, columna, texto) columna = 1 texto = QtGui.QTableWidgetItem(datostarea.query) self.MainWindow.tableWidget_Tareas.setItem(Siguiente, columna, texto) columna = 2 texto = QtGui.QTableWidgetItem(datostarea.params) self.MainWindow.tableWidget_Tareas.setItem(Siguiente, columna, texto) columna = 3 ly = QtGui.QHBoxLayout() ly.setContentsMargins(0, 0, 0, 0) wdg = QtGui.QWidget() btneditar = QtGui.QPushButton(self.MainWindow.tableWidget_Tareas) btneditar.setFlat(True) btneditar.setIcon(self.iconoeditar) ly.addWidget(btneditar) ##################################################################################### btnborrar = QtGui.QPushButton(self.MainWindow.tableWidget_Tareas) btnborrar.setFlat(True) btnborrar.setIcon(self.iconoborrar) ly.addWidget(btnborrar) wdg.setLayout(ly) self.MainWindow.tableWidget_Tareas.setCellWidget( Siguiente, columna, wdg) btneditar.clicked.connect( partial(self.AbrirEditarTarea, datostarea.id_tarea)) btnborrar.clicked.connect( partial(self.BorrarTareayConfigPorIDTarea, str(datostarea.id_tarea))) def ListarTareasProgramadas(self): while self.MainWindow.tableWidget_TareasConfig.rowCount() > 0: self.MainWindow.tableWidget_TareasConfig.removeRow(0) for datostarea in self.TareasProg: Siguiente = self.MainWindow.tableWidget_TareasConfig.rowCount() self.MainWindow.tableWidget_TareasConfig.insertRow(Siguiente) columna = 0 texto = QtGui.QTableWidgetItem(datostarea.nombretarea) self.MainWindow.tableWidget_TareasConfig.setItem( Siguiente, columna, texto) columna = 1 texto = QtGui.QTableWidgetItem(datostarea.nombretipo) self.MainWindow.tableWidget_TareasConfig.setItem( Siguiente, columna, texto) columna = 3 ly = QtGui.QHBoxLayout() ly.setContentsMargins(0, 0, 0, 0) wdg = QtGui.QWidget() ##################################################################################### btnborrar = QtGui.QPushButton( self.MainWindow.tableWidget_TareasConfig) btnborrar.setFlat(True) btnborrar.setIcon(self.iconoborrar) ly.addWidget(btnborrar) wdg.setLayout(ly) self.MainWindow.tableWidget_TareasConfig.setCellWidget( Siguiente, columna, wdg) btnborrar.clicked.connect( partial(self.BorrarTareaConfig, str(datostarea.id_tareaconfig))) def ProgramarTareas(self): Siguiente = -1 columna = 2 #Siempre 2 porque es donde van los botones self.DictTareasProgramadasFilasColumnas = {} self.DictTareasProgramadasByID = {} self.ListaOrdenJobs = [] for datostarea in self.TareasProg: Siguiente = Siguiente + 1 if datostarea.nombretipo == 'Fecha': self.trigger = DateTrigger(run_date=datostarea.day_run_date) self.job = self.scheduler.add_job( id=str(datostarea.id_tareaconfig), name=datostarea.nombretarea, func=self.EjecutarQuery, trigger=self.trigger, args=[datostarea.query, datostarea.params]) elif datostarea.nombretipo == 'Cronometro': self.trigger = CronTrigger( year=datostarea.cron_year, month=datostarea.cron_month, day=datostarea.cron_day, week=datostarea.cron_week, day_of_week=datostarea.cron_day_of_week, hour=datostarea.cron_hour, minute=datostarea.cron_minute, second=datostarea.cron_second, start_date=datostarea.start_date, end_date=datostarea.end_date) self.job = self.scheduler.add_job( id=str(datostarea.id_tareaconfig), name=datostarea.nombretarea, func=self.EjecutarQuery, trigger=self.trigger, args=[datostarea.query, datostarea.params]) elif datostarea.nombretipo == 'Interval': self.trigger = IntervalTrigger( weeks=datostarea.interval_weeks, days=datostarea.interval_days, hours=datostarea.interval_hours, minutes=datostarea.interval_minutes, seconds=datostarea.interval_seconds, start_date=datostarea.start_date, end_date=datostarea.end_date) self.job = self.scheduler.add_job( id=str(datostarea.id_tareaconfig), name=datostarea.nombretarea, func=self.EjecutarQuery, trigger=self.trigger, args=[datostarea.query, datostarea.params]) self.ListaOrdenJobs.append(self.job) self.DictTareasProgramadasFilasColumnas[self.job] = [ Siguiente, columna ] self.DictTareasProgramadasByID[str( datostarea.id_tareaconfig)] = self.job self.scheduler.start() self.scheduler.print_jobs() self.PintarFechasProxEjec() def PintarFechasProxEjec(self): for idtp in self.ListaOrdenJobs: proximaejecucion = idtp.next_run_time.strftime("%d %b %Y %H:%M:%S") texto = QtGui.QTableWidgetItem(proximaejecucion) self.MainWindow.tableWidget_TareasConfig.setItem( self.DictTareasProgramadasFilasColumnas[idtp][0], self.DictTareasProgramadasFilasColumnas[idtp][1], texto) print self.DictTareasProgramadasFilasColumnas def EjecutarQuery(self, query, params): if not params: self.BD.Insertar('exec ' + str(query)) else: listapar = [] for par in params: listapar.append(par) cantidadparametros = len(params) query = 'exec ' + str(query) + ' ?' for arg in range(cantidadparametros - 1): query = query + ' ,?' print query self.BD.Insertar(query, listapar) self.PintarFechasProxEjec() def BorrarTareaConfig(self, idtareaconfig): self.BD.Borrar('DELETE FROM t365_JobsConfig WHERE id_tareaconfig = ? ', str(idtareaconfig)) jobeliminado = self.DictTareasProgramadasByID[str(idtareaconfig)] jobeliminado.remove() del self.DictTareasProgramadasByID[str(idtareaconfig)] del self.DictTareasProgramadasFilasColumnas[jobeliminado] self.ListaOrdenJobs.remove(jobeliminado) self.CargarTareasProgramadas() self.ListarTareasProgramadas() def BorrarTareayConfigPorIDTarea(self, idtarea): tareasborrar = self.BD.Seleccionar( 'SELECT id_tareaconfig FROM t365_JobsConfig WHERE id_tarea = ?', str(idtarea)) for tar in tareasborrar: self.BD.Borrar( 'DELETE FROM t365_JobsConfig WHERE id_tareaconfig = ? ', str(tar.id_tareaconfig)) jobeliminado = self.DictTareasProgramadasByID[str( tar.id_tareaconfig)] jobeliminado.remove() del self.DictTareasProgramadasByID[str(tar.id_tareaconfig)] del self.DictTareasProgramadasFilasColumnas[jobeliminado] self.ListaOrdenJobs.remove(jobeliminado) self.CargarTareasProgramadas() self.ListarTareasProgramadas() self.BD.Borrar('DELETE FROM t365_Jobs WHERE id_tarea = ? ', str(idtarea)) def AgregarTareaProgramada(self, idtareaconfig): self.CargarTareasProgramadas() self.ListarTareasProgramadas() self.NuevaTareaProg = self.BD.Seleccionar( """SELECT t365_JobsTipos.Nombre AS nombretipo, t365_Jobs.nombre AS nombretarea, t365_JobsConfig.id_tareaconfig,t365_JobsConfig.id_tarea, t365_JobsConfig.id_tipo, t365_JobsConfig.day_run_date, t365_JobsConfig.interval_weeks, t365_JobsConfig.interval_days, t365_JobsConfig.interval_hours, t365_JobsConfig.interval_seconds, t365_JobsConfig.interval_minutes, t365_JobsConfig.start_date, t365_JobsConfig.end_date, t365_JobsConfig.cron_year, t365_JobsConfig.cron_month, t365_JobsConfig.cron_day, t365_JobsConfig.cron_week, t365_JobsConfig.cron_day_of_week, t365_JobsConfig.cron_hour, t365_JobsConfig.cron_minute, t365_JobsConfig.cron_second, t365_Jobs.query, t365_Jobs.params FROM t365_Jobs INNER JOIN t365_JobsConfig ON t365_Jobs.id_tarea = t365_JobsConfig.id_tarea INNER JOIN t365_JobsTipos ON t365_JobsConfig.id_tipo = t365_JobsTipos.id_tipo Where id_tareaconfig = ?""", str(idtareaconfig[0][0])) if self.NuevaTareaProg[0].nombretipo == 'Fecha': self.trigger = DateTrigger( run_date=self.NuevaTareaProg[0].day_run_date) self.job = self.scheduler.add_job( id=str(self.NuevaTareaProg[0].id_tareaconfig), name=self.NuevaTareaProg[0].nombretarea, func=self.EjecutarQuery, trigger=self.trigger, args=[ self.NuevaTareaProg[0].query, self.NuevaTareaProg[0].params ]) elif self.NuevaTareaProg[0].nombretipo == 'Cronometro': self.trigger = CronTrigger( year=self.NuevaTareaProg[0].cron_year, month=self.NuevaTareaProg[0].cron_month, day=self.NuevaTareaProg[0].cron_day, week=self.NuevaTareaProg[0].cron_week, day_of_week=self.NuevaTareaProg[0].cron_day_of_week, hour=self.NuevaTareaProg[0].cron_hour, minute=self.NuevaTareaProg[0].cron_minute, second=self.NuevaTareaProg[0].cron_second, start_date=self.NuevaTareaProg[0].start_date, end_date=self.NuevaTareaProg[0].end_date) self.job = self.scheduler.add_job( id=str(self.NuevaTareaProg[0].id_tareaconfig), name=self.NuevaTareaProg[0].nombretarea, func=self.EjecutarQuery, trigger=self.trigger, args=[ self.NuevaTareaProg[0].query, self.NuevaTareaProg[0].params ]) elif self.NuevaTareaProg[0].nombretipo == 'Interval': self.trigger = IntervalTrigger( weeks=self.NuevaTareaProg[0].interval_weeks, days=self.NuevaTareaProg[0].interval_days, hours=self.NuevaTareaProg[0].interval_hours, minutes=self.NuevaTareaProg[0].interval_minutes, seconds=self.NuevaTareaProg[0].interval_seconds, start_date=self.NuevaTareaProg[0].start_date, end_date=self.NuevaTareaProg[0].end_date) self.job = self.scheduler.add_job( id=str(self.NuevaTareaProg[0].id_tareaconfig), name=self.NuevaTareaProg[0].nombretarea, func=self.EjecutarQuery, trigger=self.trigger, args=[ self.NuevaTareaProg[0].query, self.NuevaTareaProg[0].params ]) self.ListaOrdenJobs.append(self.job) posicion = self.ListaOrdenJobs.index(self.job) self.DictTareasProgramadasFilasColumnas[self.job] = [posicion, 2] self.DictTareasProgramadasByID[str( self.NuevaTareaProg[0].id_tareaconfig)] = self.job self.PintarFechasProxEjec()
class MainClass(QtGui.QMainWindow): def __init__(self): QtGui.QWidget.__init__(self) self.MainWindow = Ui_MainWindow() self.MainWindow.setupUi(self) #Consola Negra pal = QtGui.QPalette() bgc = QtGui.QColor(0, 0, 0) pal.setColor(QtGui.QPalette.Base, bgc) textc = QtGui.QColor(255, 255, 255) pal.setColor(QtGui.QPalette.Text, textc) self.MainWindow.plainTextEdit_Consola.setPalette(pal) self.setWindowIcon(QtGui.QIcon("icons/SystemTrey.png")) self.setWindowTitle('Soluciones SMS (www.soluciones-sms.com)') #Colocando Fecha de Apertura self.MainWindow.label_FechaApertura.setText(str(LaFecha.damefecha())) #Creando QActions self.accionSalir = QtGui.QAction('Exit', self) self.accionSalir.setStatusTip('Exit App - Ctl+E') self.accionSalir.setShortcut('Ctl+E') self.accionSalir.setIcon(QtGui.QIcon('icons/Exit.png')) self.accionIniciar = QtGui.QAction('Excel', self) self.accionIniciar.setStatusTip('Load Excel File - Ctl+L') self.accionIniciar.setShortcut('Ctl+L') self.accionIniciar.setIcon(QtGui.QIcon('icons/excel.png')) self.accionDetener = QtGui.QAction('Simulator', self) #Simular SMS Automatic self.accionDetener.setStatusTip('Simulator - Ctl+S') self.accionDetener.setShortcut('Ctl+S') self.accionDetener.setIcon(QtGui.QIcon('icons/sms.png')) self.accionLimpiar = QtGui.QAction('Reset', self) self.accionLimpiar.setStatusTip('Reset Device - Ctl+R') self.accionLimpiar.setShortcut('Ctl+R') self.accionLimpiar.setIcon(QtGui.QIcon('icons/ResetModem.png')) #Creando ToolBar self.toolbar = QtGui.QToolBar(self) #Indicandole donde arrancara por defecto self.addToolBar(QtCore.Qt.TopToolBarArea,self.toolbar) #Agregandole a la ToolBar los QtGui.QActions self.toolbar.addAction(self.accionIniciar) self.toolbar.addAction(self.accionDetener) self.toolbar.addSeparator() self.toolbar.addAction(self.accionLimpiar) self.toolbar.addSeparator() self.toolbar.addAction(self.accionSalir) self.setWindowState(QtCore.Qt.WindowMaximized) if self.Iniciar(): self.connect(self.modemseleccionado, QtCore.SIGNAL("signalEscribirConsola"),self.EscribirConsola) self.connect(self.modemseleccionado, QtCore.SIGNAL("signalModificarSenal"),self.ModificarSenal) self.connect(self.modemseleccionado, QtCore.SIGNAL("signalModificarOperadora"),self.ModificarOperadora) self.connect(self.modemseleccionado, QtCore.SIGNAL("signalModificarStatusBar"),self.ModificarStatusBar) self.connect(self.modemseleccionado, QtCore.SIGNAL("signalModificarStatusBar2"),self.ModificarStatusBar2) self.connect(self.modemseleccionado, QtCore.SIGNAL("signalModificarBateria"),self.ModificarBateria) self.connect(self.modemseleccionado, QtCore.SIGNAL("signalDetenerCliente"),self.DetenerCliente) self.connect(self.modemseleccionado, QtCore.SIGNAL("signalAddTabMensajeEnviado"),self.AddMensajeEnviado) self.connect(self.modemseleccionado, QtCore.SIGNAL("signalAddTabMensajeFallido"),self.AddMensajeFallido) self.connect(self.modemseleccionado, QtCore.SIGNAL("signalAddTabMensajeRecibido"),self.AddMensajeRecibido) self.connect(self.modemseleccionado, QtCore.SIGNAL("signalAddTabMensajeCola"),self.AddMensajeCola) self.connect(self.modemseleccionado, QtCore.SIGNAL("signalStatusToLabel"),self.StatusToLabel) self.connect(self.accionIniciar, QtCore.SIGNAL("triggered()"), self.IniciarModem) self.connect(self.accionDetener, QtCore.SIGNAL("triggered()"), self.DetenerModem) self.connect(self.accionSalir, QtCore.SIGNAL("triggered()"), self.exitEvent) #Para abrir la ventana del Nuevo Mensaje Simulador self.connect(self.MainWindow.actionNuevo_Mensaje, QtCore.SIGNAL("triggered()"), self.AbrirNuevoMensaje) #Para Salir del Sistema self.connect(self.MainWindow.actionNueva_Cola_de_Mensajes, QtCore.SIGNAL("triggered()"), self.exitEvent) self.connect(self.cliente, QtCore.SIGNAL("signalSlaveTrue"),self.SlaveToLabel) self.connect(self.server, QtCore.SIGNAL("signalMasterTrue"),self.MasterToLabel) self.connect(self.server, QtCore.SIGNAL("signalMastertoBD"),self.ArrancarBD) self.connect(self.server, QtCore.SIGNAL("signalCrearCliente"),self.CrearCliente) self.connect(self.modemseleccionado, QtCore.SIGNAL("signalCrearServer"),self.CrearServer) ##################FUNCIONES PARA EL SYSTEM TRAY ICON####################### self.exitOnClose = False exit = QtGui.QAction(QtGui.QIcon("icons/SystemTrey.png"), "Close Modem ("+str(self.puerto)+")", self) self.connect(exit, QtCore.SIGNAL("triggered()"), self.exitEvent) self.trayIcon = QtGui.QSystemTrayIcon(QtGui.QIcon("icons/SystemTrey.png"), self) menu = QtGui.QMenu(self) menu.addAction(exit) self.trayIcon.setContextMenu(menu) self.connect(self.trayIcon, \ QtCore.SIGNAL("activated(QSystemTrayIcon::ActivationReason)"), \ self.trayIconActivated) self.trayIcon.show() self.trayIcon.showMessage("Soluciones SMS!", "Boton izquierdo para Open\nBoton derecho para Close" ) self.trayIcon.setToolTip("Soluciones SMS COM"+str(self.puerto)) def trayIconActivated(self, reason): if reason == QtGui.QSystemTrayIcon.Context: self.trayIcon.contextMenu().show() elif reason == QtGui.QSystemTrayIcon.Trigger: self.show() self.raise_() def closeEvent(self, event): if self.exitOnClose: self.trayIcon.hide() del self.trayIcon #event.accept() else: self.hide() event.setAccepted(True) event.ignore() def exitEvent(self): self.exitOnClose = True self.PuertoCOM.close() self.close() ################################################################################ def AbrirNuevoMensaje(self): QNuevoMensaje = NuevoMensaje(self) QNuevoMensaje.show() def StatusToLabel(self,status): self.MainWindow.label_Estado.setText(status) def MasterToLabel(self): self.MainWindow.label_Modo.setText("M1") def SlaveToLabel(self): self.MainWindow.label_Modo.setText("S2") def AddMensajeEnviado(self,telefono,mensaje,pk,smsenviados): try: #Variables para Insertar datos = ["1",str(pk),str(telefono),str(mensaje),str(LaFecha.damefechaJerm())] fila = 0 columna = 0 self.MainWindow.tableWidget_Enviados.insertRow(0) for item in datos: texto = QtGui.QTableWidgetItem(item) self.MainWindow.tableWidget_Enviados.setItem(fila,columna,texto) columna = columna + 1 #Eliminamor el primero de la cola self.MainWindow.tableWidget_Cola.removeRow(0) #Contamos la cantidad de columnas en la tabla if self.MainWindow.tableWidget_Enviados.rowCount() > 100: self.MainWindow.tableWidget_Enviados.removeRow(101) #Sumo el numero al Label Contador self.MainWindow.label_TotalEnviados.setText(str(smsenviados)) #Actualizar el Label de la Cola self.AddMensajeCola() except Exception as exc: GuardarTXTObjeto.GuardarErrorLog(0,str(traceback.format_exc())) def AddMensajeFallido(self,telefono,mensaje,pk,smsfallidos): try: #Variables para Insertar datos = ["1",str(pk),str(telefono),str(mensaje),str(LaFecha.damefechaJerm())] fila = 0 columna = 0 self.MainWindow.tableWidget_Fallidos.insertRow(0) for item in datos: texto = QtGui.QTableWidgetItem(item) self.MainWindow.tableWidget_Fallidos.setItem(fila,columna,texto) columna = columna + 1 #Eliminamor el primero de la cola self.MainWindow.tableWidget_Cola.removeRow(0) #Contamos la cantidad de columnas en la tabla if self.MainWindow.tableWidget_Fallidos.rowCount() > 100: self.MainWindow.tableWidget_Fallidos.removeRow(101) #Sumo el numero al Label Contador self.MainWindow.label_MensajesFallidos.setText("SMS Fail ("+str(smsfallidos)+")") #Actualizar el Label de la Cola self.AddMensajeCola() except Exception as exc: GuardarTXTObjeto.GuardarErrorLog(0,str(traceback.format_exc())) def AddMensajeCola(self,telefono=None,mensaje=None,pk=None): try: #Variables para Insertar if telefono != None: datos = ["1",str(pk),str(telefono),str(mensaje),str(LaFecha.damefechaJerm())] fila = 0 columna = 0 self.MainWindow.tableWidget_Cola.insertRow(0) for item in datos: texto = QtGui.QTableWidgetItem(item) self.MainWindow.tableWidget_Cola.setItem(fila,columna,texto) columna = columna + 1 #Contamos la cantidad de columnas en la tabla if self.MainWindow.tableWidget_Cola.rowCount() > 100: self.MainWindow.tableWidget_Cola.removeRow(101) #Cambiamos el label de Contador filas = self.MainWindow.tableWidget_Cola.rowCount() self.MainWindow.label_TotalCola.setText(str(filas)) except Exception as exc: GuardarTXTObjeto.GuardarErrorLog(0,str(traceback.format_exc())) def AddMensajeRecibido(self,telefono,mensaje,smsrecibidos): try: datos = [str(telefono),str(mensaje),str(LaFecha.damefechaJerm())] fila = 0 columna = 0 self.MainWindow.tableWidget_Recibidos.insertRow(0) for item in datos: texto = QtGui.QTableWidgetItem(item) self.MainWindow.tableWidget_Recibidos.setItem(fila,columna,texto) columna = columna + 1 #Contamos la cantidad de columnas en la tabla if self.MainWindow.tableWidget_Recibidos.rowCount() > 100: self.MainWindow.tableWidget_Recibidos.removeRow(101) #Cambiamos el label de Contador self.MainWindow.label_MensajesRecibidos.setText("SMS Incoming ("+str(smsrecibidos)+")") except Exception as exc: GuardarTXTObjeto.GuardarErrorLog(0,str(traceback.format_exc())) def EscribirConsola(self,text): self.MainWindow.plainTextEdit_Consola.appendPlainText(time.strftime('%H:%M:%S') + " >> " + text) def ModificarSenal(self,senal): self.MainWindow.progressBar_Senal.setValue(int(senal)) def ModificarBateria(self,bateria): self.MainWindow.progressBar_Bateria.setValue(int(bateria)) def ModificarOperadora(self,operadora): self.MainWindow.label_Operadora.setText(str(operadora)) def ModificarStatusBar2(self,marca,modelo,version,operadora,imei): self.MainWindow.statusbar.insertPermanentWidget(0,QtGui.QLabel("Version 8.1"),1) self.MainWindow.statusbar.insertPermanentWidget(1,QtGui.QLabel("COM ("+str(self.puerto)+")"),1) self.MainWindow.statusbar.insertPermanentWidget(2,QtGui.QLabel(str(marca)),1) self.MainWindow.statusbar.insertPermanentWidget(3,QtGui.QLabel(str(modelo)),1) self.MainWindow.statusbar.insertPermanentWidget(4,QtGui.QLabel(str(version)),1) self.MainWindow.statusbar.insertPermanentWidget(5,QtGui.QLabel(str(operadora)),1) self.MainWindow.statusbar.insertPermanentWidget(6,QtGui.QLabel(str(imei)),1) self.MainWindow.statusbar.insertPermanentWidget(7,QtGui.QLabel(str(self.MainWindow.label_Modo.text())),1) self.MainWindow.statusbar.insertPermanentWidget(8,QtGui.QLabel(str(time.strftime('%d/%m/%y' + ' %H:%M:%S'))),1) def ModificarStatusBar(self,marca,modelo,version,operadora,imei): self.ModificarStatusBar2(marca,modelo,version,operadora,imei) self.MainWindow.statusbar.insertPermanentWidget(9,QtGui.QLabel(str(" ")),1) def IniciarModem(self): #self.Iniciar() file_name = QtGui.QFileDialog.getOpenFileName(self, "Open Data File", "", "Excel data files (*.xlsx)") wb = openpyxl.load_workbook(file_name) sheet = wb.get_active_sheet() def DetenerModem(self): #self.PuertoCOM.close() numero = "04142788259" mensaje = "Prueba SMS Modem ("+str(self.puerto)+") "+str(time.strftime('%d/%m/%y' + ' %H:%M:%S')) mensajecompleto = str(numero)+"|"+str(mensaje)+"|"+"151589" globalvars.ColaparaEnviar.append(mensajecompleto) #self.accionIniciar.setEnabled(True) #self.accionDetener.setEnabled(False) def CrearServer(self): self.server.start() def CrearCliente(self): #Le cambiamos el Status a Falso al Modem en Master, para #que si esta pegado, se desconecte del server. self.modemseleccionado.Master = False self.cliente.start() def DetenerCliente(self): self.cliente.cliente.toStop = True print self.cliente.cliente.toStop def ArrancarBD(self,master): self.getsms = GetSMSBD(master) self.getsms.start() def Iniciar(self): print globalvars.Modo try: if globalvars.Modo == '1': self.puertomodem = 23 #sys.argv[1] Es el parametro que llega de afuerta al correo el sistema self.BasedeDatos = BasedeDatos() self.BasedeDatos.Conectar() self.BasedeDatos.SeleccionarUno("""SELECT id_modem,tipo,config FROM t365_Modem WHERE id_modem = ?""", self.puertomodem) self.configpuerto = str(self.BasedeDatos.resultado.config).split(',') #460800,8,N,1 self.configmodem = ['23',460800,'8','N','1','1'] elif globalvars.Modo == '2': archivoconfiguracion = open('conf/config.txt','r') self.lineaconfig = archivoconfiguracion.readline() self.configmodem = self.lineaconfig.split(",") elif globalvars.Modo == None: self.configmodem = 23 #sys.argv[1] Es el parametro que llega de afuerta al correo el sistema #Pasando los argumentos a los objetos de PySerial self.puerto = 22 #self.configmodem[0] self.baudrate = 921600 #self.configmodem[1] self.bitesize = 8 #globalvars.nombresPySerial['BiteSize'][self.configmodem[2]] self.parity = 'N' #globalvars.nombresPySerial["Parity"][self.configmodem[3]] self.stopbits = 1 #globalvars.nombresPySerial["StopBits"][self.configmodem[4]] self.modem = 1 #self.configmodem[5].rstrip('\n') #Le cambiamos el nombre a la ventana y le colocamos el COM antes del Titulo self.setWindowTitle("("+str(self.puerto)+")"+" .: www.soluciones-sms.com :.") #serial.Serial(int(self.puerto)-1,self.baudrate,eval(self.bitesize),eval(self.parity),eval(self.stopbits)) self.PuertoCOM = serial.Serial(port='COM22', baudrate=921600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, write_timeout=None, dsrdtr=False, inter_byte_timeout=None) #23,460800,8,serial.PARITY_NONE,1) print "Modem:" print self.modem self.modem = '2' if self.modem == '1': self.modemseleccionado = Modem_EnforaSerial(self.PuertoCOM,self.puerto) self.modemseleccionado.start() self.accionIniciar.setEnabled(True) self.accionDetener.setEnabled(True) #Creamos el hilo del Server, pero no lo arrancamos si no con una senal desde el mismo Modem cuando compruebe que inicio bien self.server = HiloServer() #Creamos el hilo del Cliente, pero no lo arrancamos al menos que ya halla server. self.cliente = HiloCliente() elif self.modem == '2': self.modemseleccionado = Modem_HuaweiUSB(self.PuertoCOM,self.puerto) self.modemseleccionado.start() self.accionIniciar.setEnabled(True) self.accionDetener.setEnabled(True) #Creamos el hilo del Server, pero no lo arrancamos si no con una senal desde el mismo Modem cuando compruebe que inicio bien self.server = HiloServer() #Creamos el hilo del Cliente, pero no lo arrancamos al menos que ya halla server. self.cliente = HiloCliente() return True except Exception as exc: GuardarTXTObjeto.GuardarErrorLog(0,str(traceback.format_exc())) self.EscribirConsola("Port "+str(self.puerto)+" in use...") self.EscribirConsola(str(traceback.format_exc())) return False
def Iniciar(self): print globalvars.Modo try: if globalvars.Modo == '1': self.puertomodem = 23 #sys.argv[1] Es el parametro que llega de afuerta al correo el sistema self.BasedeDatos = BasedeDatos() self.BasedeDatos.Conectar() self.BasedeDatos.SeleccionarUno("""SELECT id_modem,tipo,config FROM t365_Modem WHERE id_modem = ?""", self.puertomodem) self.configpuerto = str(self.BasedeDatos.resultado.config).split(',') #460800,8,N,1 self.configmodem = ['23',460800,'8','N','1','1'] elif globalvars.Modo == '2': archivoconfiguracion = open('conf/config.txt','r') self.lineaconfig = archivoconfiguracion.readline() self.configmodem = self.lineaconfig.split(",") elif globalvars.Modo == None: self.configmodem = 23 #sys.argv[1] Es el parametro que llega de afuerta al correo el sistema #Pasando los argumentos a los objetos de PySerial self.puerto = 22 #self.configmodem[0] self.baudrate = 921600 #self.configmodem[1] self.bitesize = 8 #globalvars.nombresPySerial['BiteSize'][self.configmodem[2]] self.parity = 'N' #globalvars.nombresPySerial["Parity"][self.configmodem[3]] self.stopbits = 1 #globalvars.nombresPySerial["StopBits"][self.configmodem[4]] self.modem = 1 #self.configmodem[5].rstrip('\n') #Le cambiamos el nombre a la ventana y le colocamos el COM antes del Titulo self.setWindowTitle("("+str(self.puerto)+")"+" .: www.soluciones-sms.com :.") #serial.Serial(int(self.puerto)-1,self.baudrate,eval(self.bitesize),eval(self.parity),eval(self.stopbits)) self.PuertoCOM = serial.Serial(port='COM22', baudrate=921600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, write_timeout=None, dsrdtr=False, inter_byte_timeout=None) #23,460800,8,serial.PARITY_NONE,1) print "Modem:" print self.modem self.modem = '2' if self.modem == '1': self.modemseleccionado = Modem_EnforaSerial(self.PuertoCOM,self.puerto) self.modemseleccionado.start() self.accionIniciar.setEnabled(True) self.accionDetener.setEnabled(True) #Creamos el hilo del Server, pero no lo arrancamos si no con una senal desde el mismo Modem cuando compruebe que inicio bien self.server = HiloServer() #Creamos el hilo del Cliente, pero no lo arrancamos al menos que ya halla server. self.cliente = HiloCliente() elif self.modem == '2': self.modemseleccionado = Modem_HuaweiUSB(self.PuertoCOM,self.puerto) self.modemseleccionado.start() self.accionIniciar.setEnabled(True) self.accionDetener.setEnabled(True) #Creamos el hilo del Server, pero no lo arrancamos si no con una senal desde el mismo Modem cuando compruebe que inicio bien self.server = HiloServer() #Creamos el hilo del Cliente, pero no lo arrancamos al menos que ya halla server. self.cliente = HiloCliente() return True except Exception as exc: GuardarTXTObjeto.GuardarErrorLog(0,str(traceback.format_exc())) self.EscribirConsola("Port "+str(self.puerto)+" in use...") self.EscribirConsola(str(traceback.format_exc())) return False
class GetSMSBD(QtCore.QThread): def __init__(self, master): QtCore.QThread.__init__(self) self.master = master def ConectarBD(self): self.BD1 = BasedeDatos() self.BD1.Conectar() def BuscarMensajes(self): self.BD1.Seleccionar( "SELECT id_salida, movil, sms, fecha_creada, status FROM t365_BsalidaSpeed WHERE status = 0" ) for SMS in self.BD1.resultado: ValidacionNum = Validar.Validar(str(SMS.movil)) if ValidacionNum == 'Ok': self.BD1.Actualizar( "UPDATE t365_BsalidaSpeed SET status = 5 WHERE id_salida = ?", int(SMS.id_salida)) self.Mensaje = str(SMS.movil) + "|" + str(SMS.sms) + "|" + str( SMS.id_salida) globalvars.ColaGeneral.append(self.Mensaje) elif ValidacionNum == None: #Si el formato del numero no es valido self.BD1.Actualizar( "UPDATE t365_BsalidaSpeed SET status = 3 WHERE id_salida = ?", int(SMS.id_salida)) def ActualizarEnviados(self): #Lista donde se almacenan los PK que ya se colocaron como enviados, para luego borrarlos de la lista pkaborrar = [] for PKMensaje in globalvars.ColaEnviados: self.BD1.Actualizar( "UPDATE t365_BsalidaSpeed SET status = 1 WHERE id_salida = ?", int(PKMensaje)) pkaborrar.append(PKMensaje) #Borrando de la lista los PK ya actualizados cantidad = len(pkaborrar) for i in range(cantidad): globalvars.ColaEnviados.remove(pkaborrar[i]) def ActualizarFallidos(self): #Lista donde se almacenan los PK que ya se colocaron como enviados, para luego borrarlos de la lista pkaborrar = [] for PKMensaje in globalvars.ColaFallidos: self.BD1.Actualizar( "UPDATE t365_BsalidaSpeed SET status = 2 WHERE id_salida = ?", int(PKMensaje)) pkaborrar.append(PKMensaje) #Borrando de la lista los PK ya actualizados cantidad = len(pkaborrar) for i in range(cantidad): globalvars.ColaFallidos.remove(pkaborrar[i]) def InsertarRecibidos(self): cantidadrecibidos = len(globalvars.ColaRecibidos) for PKMensaje in range(cantidadrecibidos): self.BD1.Insertar( "INSERT INTO t365_Bentrada(id_cliente,id_user,movil,sms,fecha,status,modem)values(?,?,?,?,?,?,?); " "", globalvars.ColaRecibidos.pop(0)) def Iniciar(self): #Esta funcion iniciar la creo porque no se puede llamar a run directamente. self.ConectarBD() while True: try: #Solo si es Master busca mensajes en la Base de datos if self.master == True: self.BuscarMensajes() else: pass #Pero igualmente al ser Slave Actualiza sus propios Mensajes en BD self.ActualizarEnviados() self.ActualizarFallidos() self.InsertarRecibidos() time.sleep(1) except Exception as exc: GuardarTXTObjeto.GuardarErrorLog('GETSMS Error...', str(traceback.format_exc())) print 'NO DATA BASE CONECTION...' time.sleep(10) self.Iniciar() def run(self): self.Iniciar()