class Ratings_Interface(QtGui.QMainWindow): # ------------------------------------------------------------------------- # Definicion del constructor de la clase # ------------------------------------------------------------------------- def __init__(self): actdir = os.getcwd() self.R = Ratings(str(actdir)) self.link_courses = [] self.name_courses = [] self.loged = 0 # Inicializar el lanzamiento de ventanas self.app = QtGui.QApplication(sys.argv) QtGui.QMainWindow.__init__(self) # Crear ventana de Registro self.ventana = Ui_MainWindow() self.ventana.setupUi(self) # Activar conectores y señales de los botones self.connect(self.ventana.BCancelar, QtCore.SIGNAL('clicked()'), self.close_window) self.connect(self.ventana.BDescargar, QtCore.SIGNAL('clicked()'), self.download) self.connect(self.ventana.BEntregas, QtCore.SIGNAL('clicked()'), self.evaluate) self.connect(self.ventana.BAcceder, QtCore.SIGNAL('clicked()'), self.login) self.connect(self.ventana.CBAsignaturas, QtCore.SIGNAL('currentIndexChanged(QString)'), self.update_assigments) self.ventana.progressBar.setValue(0) # Mostrar y ejecutar la ventana self.show() self.app.exec_() # ------------------------------------------------------------------------- # Metodo que actualiza los items de la interfaz # ------------------------------------------------------------------------- def update_items(self): self.ventana.CBAsignaturas.clear() self.link_courses,self.name_courses = self.R.get_courses() for name in self.name_courses: value = self.ventana.progressBar.value() if 100 >= value+(60/len(self.name_courses)): self.ventana.progressBar.setValue(value+(60/len(self.name_courses))) self.ventana.CBAsignaturas.addItem(name) return 1 # ------------------------------------------------------------------------- # Metodo que actualiza las tareas para una asignatura seleccionada # ------------------------------------------------------------------------- def update_assigments(self): if self.loged == 1: self.ventana.CBTareas.clear() index = self.ventana.CBAsignaturas.currentIndex() self.link_assigments, self.name_assigments = self.R.get_assigments(self.link_courses[index]) for name in self.name_assigments: self.ventana.CBTareas.addItem(name) return 1 # ------------------------------------------------------------------------- # Metodo que logea al usuario para conocer sus datos # ------------------------------------------------------------------------- def login(self): if self.loged == 0: user = self.ventana.LUsuario.text() passwd = self.ventana.LPass.text() self.ventana.progressBar.setValue(10) self.R.login_account(user,passwd) self.loged = 1 self.ventana.progressBar.setValue(40) self.update_items() return 1 # ------------------------------------------------------------------------- # Metodo que cierra la interfaz # ------------------------------------------------------------------------- def close_window(self): self.app.quit() self.R.close_webdriver() return 1 # ------------------------------------------------------------------------- # Metodo que descarga las tareas en la subcarpeta descargas # ------------------------------------------------------------------------- def download(self): if self.loged == 1: course_index = self.ventana.CBAsignaturas.currentIndex() assig_index = self.ventana.CBTareas.currentIndex() self.R.download_assignment(self.link_courses[course_index],self.link_assigments[assig_index]) return 1 # ------------------------------------------------------------------------- # Metodo que evalua las las entregas de una tarea # ------------------------------------------------------------------------- def evaluate(self): if self.loged == 1: dir_name = self.ventana.LDir.text() course_name = self.ventana.CBAsignaturas.currentText() assig_name = self.ventana.CBTareas.currentText() self.R.driver.get("http://moodle.unican.es/moodle2/my/") self.R.eval_assigment_all(course_name,assig_name,dir_name) return 1
class Interfaz_Usuario(QtGui.QMainWindow): # Definicion del constructor de la clase def __init__(self): # Inicializar el lanzamiento de ventanas self.app = QtGui.QApplication(sys.argv) QtGui.QMainWindow.__init__(self) # Crear ventana de Registro self.ventana = Ui_MainWindow() self.ventana.setupUi(self) # Ocultar ventana de login self.ventana.webView.hide() # Activar conectores y señales de los botones self.connect(self.ventana.ButtonCancelar, QtCore.SIGNAL('clicked()'), self.cierra_ventana) self.connect(self.ventana.ButtonProcesar, QtCore.SIGNAL('clicked()'), self.arrancar_procesado) self.connect(self.ventana.ButtonDescargar, QtCore.SIGNAL('clicked()'), self.descargar) self.ventana.ComboBoxDestino.activated.connect(self.cambia_interfaz) # Añadir valores a la combo box para ser seleccionados self.ventana.ComboBoxOrigen.addItems(['DBLP Computer Science Bibliography']) self.ventana.ComboBoxDestino.addItems(['Copia Local','DBLP Computer Science Bibliography','Universidad de Cantabria']) # Mostrar y ejecutar la ventana self.show() self.app.exec_() # Metodo que modifica la interfaz a medida que es necesario def cambia_interfaz(self): destino = self.ventana.ComboBoxDestino.currentIndex() if destino == 0: self.ventana.label_8.show() self.ventana.NombreFichero.show() self.ventana.resize_window(self,480,509) self.ventana.webView.hide() elif destino == 1: self.ventana.label_8.hide() self.ventana.NombreFichero.hide() self.ventana.resize_window(self,480,509) self.ventana.webView.hide() elif destino == 2: self.ventana.resize_window(self,966,509) self.ventana.webView.show() return 1 # Metodo que cierra la ventana y no permite la apertura de mas def cierra_ventana(self): global THREADS for t in THREADS: t._Thread__stop() self.app.quit() # Metodo que arranca un nuevo thread para procesar los datos solicitados def arrancar_procesado(self): destino = self.ventana.ComboBoxDestino.currentIndex() if destino == 0: global THREADS t=threading.Thread(target=self.procesar_dblp_local) t.start() THREADS.append(t) elif destino == 2: url = "https://campusvirtual.unican.es/BienvenidaFrw.aspx" url_obj = QtCore.QUrl(url) self.ventana.webView.load(url_obj) return 1 # Funcion que procesa la peticion concreta def procesar_dblp_local(self): self.ventana.progressBar_2.setValue(0) # Obtenemos los valores de el origen y destino de los datos origen = self.ventana.ComboBoxOrigen.currentIndex() destino = self.ventana.ComboBoxDestino.currentIndex() # Obtenemos el termino por el cual filtrar nuestros datos termino_busqueda = str(self.ventana.TerminoBusqueda.toPlainText()) indices = [] fichero_origen = "dblp.xml" # Origen es la plataforma DBLP Computer Science Bibliography if origen == 0: if destino == 0: fich_nom = self.ventana.NombreFichero.toPlainText() fichero_destino = fich_nom+".xml" print fichero_destino if self.ventana.CheckBoxAutor.isChecked(): print("Calculo Indices de Autor") indices.extend(XML_PDFParser.buscar_fichero(fichero_origen,termino_busqueda,"<author")) self.ventana.progressBar_2.setValue(5) print indices if self.ventana.CheckBoxEditor.isChecked(): print("Calculo Indices de Editor") indices.extend(XML_PDFParser.buscar_fichero(fichero_origen,termino_busqueda,"<editor")) self.ventana.progressBar_2.setValue(10) print indices if self.ventana.CheckBoxPublicador.isChecked(): print("Calculo Indices de Publicador") indices.extend(XML_PDFParser.buscar_fichero(fichero_origen,termino_busqueda,"<publisher")) self.ventana.progressBar_2.setValue(15) print indices if self.ventana.CheckBoxTitulo.isChecked(): print("Calculo Indices de Titulo") indices.extend(XML_PDFParser.buscar_fichero(fichero_origen,termino_busqueda,"<title")) self.ventana.progressBar_2.setValue(20) print indices indices.sort() if self.ventana.RadioButtonArticulo.isChecked(): XML_PDFParser.obten_grupo_xml(fichero_origen,fichero_destino,indices,"<article","</article") self.ventana.progressBar_2.setValue(40) elif self.ventana.RadioButtonColeccion.isChecked(): XML_PDFParser.obten_grupo_xml(fichero_origen,fichero_destino,indices,"<incollection","</incollection") self.ventana.progressBar_2.setValue(60) elif self.ventana.RadioButtonDebate.isChecked(): XML_PDFParser.obten_grupo_xml(fichero_origen,fichero_destino,indices,"<proceedings","</proceedings") self.ventana.progressBar_2.setValue(70) elif self.ventana.RadioButtonTesis.isChecked(): XML_PDFParser.obten_grupo_xml(fichero_origen,fichero_destino,indices,"<phdthesis","</phdthesis") XML_PDFParser.obten_grupo_xml(fichero_origen,fichero_destino,indices,"<mastersthesis","</mastersthesis") self.ventana.progressBar_2.setValue(90) elif self.ventana.RadioButtonLibro.isChecked(): XML_PDFParser.obten_grupo_xml(fichero_origen,fichero_destino,indices,"<book","</book") self.ventana.progressBar_2.setValue(95) elif self.ventana.RadioButtonOtros.isChecked(): XML_PDFParser.obten_grupo_xml(fichero_origen,fichero_destino,indices,"<www","</www") XML_PDFParser.obten_grupo_xml(fichero_origen,fichero_destino,indices,"<inproceedings","</www") self.ventana.progressBar_2.setValue(100) print("PROCESADO FINALIZADO") self.ventana.progressBar_2.setValue(100) return 1 # Metodo que arranca un nuevo thread para descargar los ficheros solicitados def descargar(self): global FIN_DESCARGA global THREADS FIN_DESCARGA = 0 t1=threading.Thread(target=self.descargar_dblp) t2=threading.Thread(target=self.actualiza_bar) t1.start() t2.start() THREADS.append(t1) THREADS.append(t2) return 1 # Metodo que descarga los datos probenientes del dblp def descargar_dblp(self): global FIN_DESCARGA URL = "http://dblp.uni-trier.de/xml/dblp.xml" URLInteract.descargar_fichero(URL) FIN_DESCARGA = 1 return 1 # Metodo que mantiene informado al usuario de cuanto vamos de progreso def actualiza_bar(self): i = 0 while(FIN_DESCARGA==0): self.ventana.progressBar.setValue(i) i = i + 1 i = i % 100 self.ventana.progressBar.setValue(100) return 1
class Main(QtGui.QMainWindow): def __init__(self): QtGui.QMainWindow.__init__(self) self.ui = Ui_MainWindow() self.ui.setupUi(self)