Пример #1
0
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
Пример #2
0
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
Пример #3
0
class Main(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)