Example #1
0
    def btnIniciar_clicked(self, checked=None):
        self.n = 0
        def status(x): self.status.setText(x); QtGui.QApplication.processEvents()
        def count_step(n=1): self.n = (self.n + n) % 99 + 1; self.progress.setValue(self.n);  QtGui.QApplication.processEvents()
        def end_step(): self.n = 100; self.progress.setValue(self.n);  QtGui.QApplication.processEvents()
        status(u"Analizando la carpeta del proyecto . . . ")
        count_step()
        app_folder = str(self.dbProyecto.value())
        conn = self.parent.conn
        cur = self.parent.cur
        sysprefix = str(settings.value(KEY_SYSTEM_TABLE_PREFIX).toString())            

        if not os.path.exists(app_folder): raise ValueError(u"La carpeta especificada no existe")
        if not os.path.isdir(app_folder): raise ValueError(u"La carpeta especificada no es una carpeta")
        folders = [ x for x in os.listdir(app_folder) if os.path.isdir(os.path.join(app_folder,x)) ]
        file_upload_list = {}
        for fname in folders:
            ftype = KNOWN_FOLDERS.get(fname,None)
            if ftype is None: continue # ignorar las carpetas que no conocemos
            for filename in os.listdir(os.path.join(app_folder,fname)):
                file_obj = Struct()
                file_obj.name = filename
                file_obj.ftype = ftype
                file_obj.path = os.path.join(app_folder,fname,filename)
                file_upload_list[filename] = file_obj
        
        if len(file_upload_list) == 0: raise ValueError(u"No hay ningún fichero de proyecto aquí.")
        
        status(u"Obteniendo la lista de versiones subidas actualmente . . . ")
        count_step()
        max_version = 1 # AlephERP tiene un bug con la version 1, asi que la primera sera la version 2
        cur.execute("""
            SELECT nombre, version
            FROM %s_system
            """ % sysprefix)
        uploaded_files = {}
        for (nombre, version) in cur:
            if version > max_version: max_version = version
            uploaded_files[nombre] = version
        next_version = max_version + 1

        status(u"Borrando ficheros anteriores . . . ")
        stepsz = 20/(len(uploaded_files)+1)
        for filename in uploaded_files.keys():
            cur.execute("""
                DELETE FROM %s_system WHERE nombre = %%s
                """ % sysprefix, [filename])
            count_step(stepsz)

        status(u"Subiendo ficheros . . . ")
        stepsz = 60/(len(file_upload_list))
        for filename, obj in file_upload_list.items():
            cur.execute("""
                INSERT INTO %s_system (nombre,contenido,type,version) 
                VALUES ( %%s,  %%s,  %%s,  %%s )
                """ % sysprefix, [filename, open(obj.path).read(), obj.ftype, next_version])
            count_step(stepsz)
        
        status(u"Proceso completado. El proyecto ha sido cargado con versión %d." % next_version)
        end_step()
        self.completed = True
        self.emit(QtCore.SIGNAL("completeChanged()"))