예제 #1
0
    def on_btn_save_udf_param_clicked(self):
        """
        Slot documentation goes here.
        """
        msg = u'保存参数并同时更新UDF中建筑负载文件名,确定吗?'
        reply = self.show_yesno_msgbox(msg)
        if reply == 0:
            return
        fname = self.le_fluent_udf_file.text()
        if fname == '':
            msg = u'UDF文件名为空, 请先设置一个有效的UDF文件'
            self._show_tips(msg, tip_type=1)
            return
        # check if file path exists
        if not os.path.exists(fname):  
            msg = u'UDF文件路径不存在, 请打开一个有效的UDF文件!'
            self._show_tips(msg, tip_type=1)
            return

        # first, get params from widgets
        params = self.get_udf_param_from_widgets()
        # read the load file
        progress_dlg = QProgressDialog(self)
        progress_dlg.setModal(True)
        progress_dlg.setMinimumDuration(1)  
        progress_dlg.setWindowTitle(u"处理数据")  
        progress_dlg.setLabelText(u"正在处理建筑负荷数据...")  
        progress_dlg.setCancelButtonText("Cancel")  
        # we don't know how many lines in the load file
        progress_dlg.setMinimum(1)
        progress_dlg.setMaximum(10000)
        max_q = 0.0
        min_q = 0.0
        line_cnt = 0
        with open(params['load_file'], 'r') as rfh:
            for line in rfh:
                val = float(line)
                if val > max_q:
                    max_q = val
                if val < min_q:
                    min_q = val
                progress_dlg.setValue(line_cnt)  
                if progress_dlg.wasCanceled():
                    return
                line_cnt += 1
        # set the max value to terminate the progress dialog
        if line_cnt < 10000:
            QThread.sleep(1)
            progress_dlg.setValue(10000)  
        params['copc_max_q'] = max_q
        params['coph_max_q'] = min_q
        # modify the udf file
        result = self.udf_model.write_params(params, fname)
        if result == True:
            msg = u'文件%s更新成功' % fname
            self._show_tips(msg)
        else:
            msg = u'文件更新失败, 请确保%s是有效的UDF文件' % fname
            self._show_tips(msg, tip_type=1)
예제 #2
0
파일: uploadthread.py 프로젝트: BlueAaron/-
 def run(self):
     num = len(self.servers)
     for self.servers_index in range(num):        
         self.files_index = 0
         self.ftp.connectToHost(self.servers[self.servers_index]["host"], int(self.servers[self.servers_index]["port"]))
         self.uploading = True
         while self.uploading:
             QThread.sleep(1)
     
     self.information.emit(u"<font color=green>所有服务器上传完成。成功:%s 失败:%s</font><br />" % (self.succeed, num - self.succeed))
예제 #3
0
    def run(self):
        num = len(self.servers)
        for self.servers_index in range(num):
            self.files_index = 0
            self.ftp.connectToHost(
                self.servers[self.servers_index]["host"],
                int(self.servers[self.servers_index]["port"]))
            self.uploading = True
            while self.uploading:
                QThread.sleep(1)

        self.information.emit(
            u"<font color=green>所有服务器上传完成。成功:%s 失败:%s</font><br />" %
            (self.succeed, num - self.succeed))
예제 #4
0
    def new_project(self):
        # Support '.raftdb' file types
        file = QFileDialog.getSaveFileName(None, "Create new RAFT DB file", "", "RAFT Database File (*.raftdb)")

        if file:
            self.Progress.show()
            try:
                # Reinitialize with the database value set from new db name
                self.framework.closeDB()

                # 2 seconds to settle
                QThread.sleep(2) 

                self.db = str(file)
                self.databaseThread.connectDb(self.db, self)
            finally:
                self.Progress.close()
예제 #5
0
 def run(self):
     nTries = 0
     while nTries < self.NUMBER_OF_TRIES:
         if nTries > 0:
             self.target.seek(0)
             QThread.sleep(self.TIMEOUT)
         nTries += 1
         
         #try standard first (with proxy if environment variable is set)
         try:
             if not self._no_proxy:
                 try:
                     hdr = {'User-Agent': 'Mozilla/5.0', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'}
                     req = urllib2.Request(self.url.encode('utf-8'), headers=hdr)
                     with contextlib.closing(urllib2.urlopen(req)) as u:
                         self._readData(u)
                     break
                 except urllib2.URLError:
                     #very likely a proxy error
                     self.logger.debug("Downloading %s failed, forcing without proxy now", self.url)
         
             #try again without proxy
             req2 = urllib2.Request(self.url.encode('utf-8'), headers=hdr)
             proxy_handler = urllib2.ProxyHandler({})
             no_proxy_opener = urllib2.build_opener(proxy_handler)
             with contextlib.closing(no_proxy_opener.open(req2)) as n_u:
                 self._readData(n_u)
                                 
             # finished
             break
         except HTTPError as e:
             # don't print trace on HTTP error
             self.logger.warning("Error while downloading %s (%s)", self.url, e)
             if nTries >= self.NUMBER_OF_TRIES or e.code == 404:
                 self.error.emit(self, formatException())
                 
             if e.code == 404:
                 # no need to retry
                 break
         except:
             self.logger.warning("Error while downloading %s", self.url)
             self.error.emit(self, formatException())
             break
예제 #6
0
    def save_as(self):
        """ Dialog and logic to save the temp.raftdb file to a working database """
        
        # Support '.db' file types
        file = QFileDialog.getSaveFileName(None, "Save to RAFT DB file", "", "RAFT Database File (*.raftdb)")

        if file:
            self.Progress.show()
            try:
                # Reinitialize with the database value set from new db name
                self.framework.closeDB()

                # 5 seconds to settle
                QThread.sleep(2) 

                # New db location
                new_db = str(file)
                shutil.move(self.db, new_db)
                self.db = new_db

                self.databaseThread.connectDb(self.db, self)
            finally:
                self.Progress.close()
예제 #7
0
    def umount(self, device_folder, device, thread_object):
        """
        Unmount device

        Arguments:
        device_folder - Mount point folder
        device - Device name
        thread_object - Thread object that is connected to the mount point

        Return:
        None
        """

        if 'hdd' in device_folder or 'HDD' in device_folder:
            mount_folder = '{0}/{1}/{2}'.format(self.mount_directory,
                                                device_folder, device)
        else:
            mount_folder = '{0}/{1}'.format(self.mount_directory,
                                            device_folder)

        if not self._check_existence(mount_folder):
            try:
                os.rmdir(mount_folder)
            except OSError:
                self.sig_info.emit('\n'.join([
                    '{0} is not accessable!'.format(mount_folder),
                    'The computer might need to be restarted!',
                    'Please contact your system administrator!'
                ]))
            else:
                self.sig_info.emit('First mount {0}'.format(mount_folder))
            return None

        self.abort_finished = False
        if thread_object is None:
            pass
        elif thread_object.running:
            thread_object.kill_thread = True
            while not self.abort_finished:
                QThread.sleep(1)
            thread_object.kill_thread = False
        else:
            pass
        self.abort_finished = False

        cmd = 'sudo -S -k umount {0}'.format(mount_folder)
        idx, value = self._start_process(cmd)

        if 'mount error' in value:
            self.sig_info.emit('Could not umount {0}: {1}'.format(
                mount_folder, value))
        elif idx == 1:
            self.sig_info.emit('Could not umount {0}: {1}'.format(
                mount_folder, value))
        elif 'hdd_test' in mount_folder:
            os.rmdir(mount_folder)
        else:
            try:
                os.rmdir(mount_folder)
            except OSError:
                if self.password:
                    self.sig_info.emit('Could not umount {0}: {1}'.format(
                        mount_folder,
                        value.replace(self.password, 'SUDOPASSWORD')))
                else:
                    self.sig_info.emit('Could not umount {0}: {1}'.format(
                        mount_folder, value))
                return
            device = device.split('/')[-1]
            self.sig_success.emit('Not connected', device, 'purple')
            with open(self.save_files[device], 'w') as write:
                write.write('')

            if device_folder == 'HDD':
                hdd_folder = '{0}/{1}'.format(self.mount_directory,
                                              device_folder)
                if not os.listdir(hdd_folder):
                    os.rmdir(hdd_folder)

        self.refresh_quota()
예제 #8
0
 def run(self):
     self.appendToOutput("Test 1 Start.\n");
     QThread.sleep(10); #sleep for 10 seconds
     self.appendToOutput("Test 1 End.\n");
예제 #9
0
    def run(self, settings):
        """
        Start the process.

        Arguments:
        settings - Transphire settings

        Return:
        None
        """
        # Set settings
        self.settings = settings
        content_process = cp.deepcopy(self.content_process)

        # Set stop variable to the return value of the pre_check
        self.stop = bool(self.pre_check_programs())

        # Set paths
        self.settings['stack_folder'] = os.path.join(
            self.settings['project_folder'], 'Stack')
        self.settings['meta_folder'] = os.path.join(
            self.settings['project_folder'], 'Meta')
        self.settings['software_meta_folder'] = os.path.join(
            self.settings['project_folder'], 'Software_meta')
        self.settings['motion_folder'] = os.path.join(
            self.settings['motion_folder'],
            self.settings['Copy']['Motion'].replace(' ', '_'))
        self.settings['ctf_folder'] = os.path.join(
            self.settings['ctf_folder'],
            self.settings['Copy']['CTF'].replace(' ', '_'))
        self.settings['scratch_motion_folder'] = os.path.join(
            self.settings['scratch_folder'],
            self.settings['Copy']['Motion'].replace(' ', '_'))
        self.settings['compress_folder'] = os.path.join(
            self.settings['compress_folder'], 'Compress')
        self.settings['Copy_hdd_folder'] = os.path.join(
            self.settings['Copy_hdd_folder'], 'HDD')
        self.settings['Copy_work_folder'] = os.path.join(
            self.settings['Copy_work_folder'],
            self.settings['Copy']['Copy to work'].replace(' ', '_'))
        self.settings['Copy_backup_folder'] = os.path.join(
            self.settings['Copy_backup_folder'],
            self.settings['Copy']['Copy to backup'].replace(' ', '_'))

        # Set CTF settings
        self.settings['CTF_folder'] = {}
        for entry in self.settings['Copy']['CTF_entries']:
            self.settings['CTF_folder'][entry] = os.path.join(
                self.settings['project_folder'], entry.replace(' ', '_'))
            self.sig_plot_ctf.emit(entry, self.settings['CTF_folder'][entry],
                                   self.settings)

        # Set Motion settings
        self.settings['Motion_folder'] = {}
        for entry in self.settings['Copy']['Motion_entries']:
            self.settings['Motion_folder'][entry] = os.path.join(
                self.settings['project_folder'], entry.replace(' ', '_'))
            self.sig_plot_motion.emit(entry,
                                      self.settings['Motion_folder'][entry],
                                      self.settings)

        # Set default values for folder list and thread list
        folder_list = ['stack_folder', 'meta_folder']
        use_threads_list = ['Meta', 'Find', 'Copy']

        # Fill folder list and threads list
        for name in ['work', 'backup']:
            short_name = 'Copy_{0}'.format(name)
            long_name = 'Copy to {0}'.format(name)
            folder_name = '{0}_folder'.format(short_name)
            user_name = '{0}_user'.format(short_name)
            self.settings['Copy'][short_name] = \
                self.settings['Copy'][long_name]

            if self.settings['Copy'][long_name] != 'False':
                if self.settings['Copy'][long_name] == 'Later':
                    pass
                elif not os.path.ismount(self.settings[folder_name]):
                    try:
                        os.listdir(self.settings[folder_name])
                    except PermissionError:
                        pass
                    except FileNotFoundError:
                        self.sig_error.emit(
                            '{0} folder {1} not mounted!'.format(
                                name, self.settings['Copy'][long_name]))
                        self.sig_finished.emit()
                        return None
                    except OSError as err:
                        if 'Required key' in str(err):
                            self.sig_error.emit('\n'.join([
                                '{0} folder {1} no longer mounted! '.format(
                                    name, self.settings['Copy'][long_name]),
                                'Use kinit to refresh the key'
                            ]))
                            self.sig_finished.emit()
                            return None
                        else:
                            print('\n'.join([
                                'Unknown Error occured!',
                                'Please contact the TranSPHIRE authors!'
                            ]))
                            raise
                    else:
                        self.sig_error.emit(
                            '{0} folder {1} not mounted!'.format(
                                name, self.settings['Copy'][long_name]))
                        self.sig_finished.emit()
                        return None

                else:
                    pass
                try:
                    self.settings[user_name] = self.settings['user_{0}'.format(
                        self.settings['Copy'][long_name].replace(' ', '_'))]
                except KeyError:
                    self.sig_error.emit('{0} needs remount! '.format(name))
                    self.sig_finished.emit()
                    return None
                use_threads_list.append(short_name)
            else:
                pass

        # Decide if one will use copy to HDD
        self.settings['Copy']['Copy_hdd'] = self.settings['Copy'][
            'Copy to HDD']
        if self.settings['Copy']['Copy to HDD'] != 'False':
            if self.settings['Copy']['Copy to HDD'] == 'Later':
                pass
            else:
                try:
                    for folder in glob.glob('{0}/*'.format(
                            self.settings['Copy_hdd_folder'])):
                        if not os.path.ismount(folder):
                            try:
                                os.listdir(folder)
                            except PermissionError:
                                pass
                            else:
                                self.sig_error.emit(
                                    'HDD not mounted or not well unmounted!' +
                                    'Please remount if you want to use HDD')
                                self.sig_finished.emit()
                                return None
                        else:
                            pass
                except FileNotFoundError:
                    self.sig_error.emit(
                        'HDD not mounted or not well unmounted!' +
                        'Please remount if you want to use HDD!')
                    self.sig_finished.emit()
                    return None
            use_threads_list.append('Copy_hdd')
        else:
            pass

        # Set CTF settings
        if self.settings['Copy']['CTF'] != 'False':
            folder_list.append('ctf_folder')
            use_threads_list.append('CTF')
            ctf_name = self.settings['Copy']['CTF']
            try:
                if self.settings[ctf_name]['Use movies'] == 'True':
                    self.settings['Copy']['CTF_frames'] = 'True'
                    self.settings['Copy']['CTF_sum'] = 'False'
                else:
                    self.settings['Copy']['CTF_frames'] = 'False'
                    self.settings['Copy']['CTF_sum'] = 'True'
            except KeyError:
                self.settings['Copy']['CTF_frames'] = 'False'
                self.settings['Copy']['CTF_sum'] = 'True'
        else:
            self.settings['Copy']['CTF_frames'] = 'False'
            self.settings['Copy']['CTF_sum'] = 'False'

        # Set Compress settings
        if self.settings['Copy']['Compress data'] != 'False':
            folder_list.append('compress_folder')
            use_threads_list.append('Compress')
        else:
            pass

        # Set Motion settings
        if self.settings['Copy']['Motion'] != 'False':
            folder_list.append('motion_folder')
            use_threads_list.append('Motion')
        else:
            pass

        # Create output directories
        for entry in folder_list:
            try:
                tu.mkdir_p(self.settings[entry])
            except PermissionError:
                continue
            except OSError as err:
                print(str(err))
                self.sig_error.emit(str(err))
                self.sig_finished.emit()
                return None

        # Queue communication dictionary
        queue_com = {
            'status': qu.Queue(),
            'notification': qu.Queue(),
            'error': qu.Queue(),
            'plot_ctf': qu.Queue(),
            'plot_motion': qu.Queue()
        }

        # Fill different dictionarys with process information
        typ_dict = {}
        wait_dict = {}
        share_dict = {}
        bad_dict = {}
        queue_dict = {}
        full_content = []
        idx_number = 0
        idx_values = 1
        for entry in content_process:
            for process in entry:
                for key in process:
                    process[key][idx_values]['group'], process[key][idx_values]['aim'] = \
                        process[key][idx_values]['group'].split(';')
                    process[key][idx_values]['aim'] = process[key][idx_values][
                        'aim'].split(',')
                    wait_dict[key] = False
                    share_dict[key] = []
                    bad_dict[key] = []
                    queue_dict[key] = qu.Queue()
                    typ_dict[key] = {
                        'file_number':
                        0,
                        'spot':
                        False,
                        'lost_input_meta':
                        False,
                        'lost_input_frames':
                        False,
                        'lost_work':
                        False,
                        'lost_backup':
                        False,
                        'lost_hdd':
                        False,
                        'full_transphire':
                        False,
                        'full_work':
                        False,
                        'full_backup':
                        False,
                        'full_hdd':
                        False,
                        'unknown_error':
                        False,
                        'queue_lock':
                        QMutex(),
                        'save_lock':
                        QMutex(),
                        'count_lock':
                        QMutex(),
                        'error_lock':
                        QMutex(),
                        'bad_lock':
                        QMutex(),
                        'share_lock':
                        QMutex(),
                        'spot_dict':
                        self.fill_spot_dict(),
                        'number_file':
                        '{0}/last_filenumber.txt'.format(
                            self.settings['project_folder']),
                        'save_file':
                        '{0}/Queue_{1}'.format(self.settings['queue_folder'],
                                               key),
                        'done_file':
                        '{0}/Queue_{1}_done'.format(
                            self.settings['queue_folder'], key),
                        'error_file':
                        '{0}/Queue_{1}_error'.format(
                            self.settings['error_folder'], key),
                    }

                    if process[key][idx_number] == '1':
                        full_content.append([key, process[key]])
                    else:
                        for idx in range(int(process[key][idx_number])):
                            full_content.append(
                                ['{0}_{1}'.format(key, idx + 1), process[key]])

        # Shared dictionary
        shared_dict = {
            'share': share_dict,
            'bad': bad_dict,
            'queue': queue_dict,
            'translate_lock': QMutex(),
            'ctf_star_lock': QMutex(),
            'ctf_partres_lock': QMutex(),
            'global_lock': QMutex(),
            'typ': typ_dict
        }

        # Fill process queues
        for entry in content_process:
            for process in entry:
                for key in process:
                    self.prefill_queue(shared_dict=shared_dict,
                                       entry=process[key][1])

        # Define file number and check if file already exists
        shared_dict['typ']['Copy']['file_number'] = int(
            self.settings['General']['Start number']) - 1

        if self.settings['General']['Rename micrographs'] == 'True':
            new_name = '{0}/{1}{2:0{3}d}{4}'.format(
                self.settings['meta_folder'],
                self.settings['General']['Rename prefix'],
                shared_dict['typ']['Copy']['file_number'] + 1,
                len(self.settings['General']['Estimated mic number']),
                self.settings['General']['Rename suffix'])

            if os.path.exists('{0}.jpg'.format(new_name)):
                self.stop = True
                try:
                    with open(shared_dict['typ']['Copy']['number_file'],
                              'r') as read:
                        shared_dict['typ']['Copy']['file_number'] = int(
                            read.readline())
                except FileNotFoundError:
                    shared_dict['typ']['Copy']['file_number'] = int(
                        self.settings['General']['Start number'])
                message = '{0}: File {1} already exists!\n'.format(
                    'Copy',
                    new_name
                    ) + \
                    'Check Startnumber!'
                queue_com['error'].put(message)
                queue_com['notification'].put(message)
            else:
                pass
        else:
            pass

        # Start threads
        thread_list = []
        use_threads_set = set(use_threads_list)
        for key, settings_content in full_content:
            content_settings = settings_content[idx_values]
            thread = ProcessThread(shared_dict=shared_dict,
                                   name=key,
                                   content_settings=content_settings,
                                   queue_com=queue_com,
                                   settings=self.settings,
                                   mount_directory=self.mount_directory,
                                   password=self.password,
                                   use_threads_set=use_threads_set,
                                   stop=self.stop,
                                   parent=self)
            thread.start()
            thread_list.append([thread, key, content_settings])
            QThread.sleep(1)

        # Run until the user stops the processes
        go_on = True
        while go_on:
            try:
                self.check_queue(queue_com=queue_com)
            except BrokenPipeError:
                pass
            if self.stop:
                go_on = False
            else:
                pass
            QThread.sleep(3)

        # Indicate to stop all processes
        for key, settings_content in full_content:
            typ = settings_content[idx_values]['name']
            size = shared_dict['queue'][typ].qsize()
            self.sig_status.emit(
                'Stopping {0} {1}'.format(
                    size, shared_dict['typ'][typ]['file_number']), key, 'red')

        # Send the stop signals to all threads
        for thread, name, setting in thread_list:
            thread.stop = True

        # Wait for all threads to finish
        for thread, name, setting in thread_list:
            typ = setting['name']
            thread.quit()
            thread.wait()
            self.check_queue(queue_com=queue_com)
            size = shared_dict['queue'][typ].qsize()
            self.sig_status.emit(
                'Not running {0} {1}'.format(
                    size, shared_dict['typ'][typ]['file_number']), name,
                'purple')

        self.sig_finished.emit()
예제 #10
0
파일: konsol.py 프로젝트: COMU/cink
def close():
    QThread.sleep(10)
    w.hide()    
예제 #11
0
 def foo(self, i, s):
     for _ in range(3):
         QThread.sleep(1)
         print i, str(s.toUtf8()).encode('utf-8').strip(), threading.currentThread().ident