Beispiel #1
0
    def refreshProteinsTableWidget(self) -> None:
        search_text = self.proteinsSearchLineEdit.text().strip()
        search_mode = self.proteinsSearchTypeComboBox.currentIndex()

        if not search_text:
            return

        if search_mode == 0:
            results = self._database.search_proteins_by_name(
                search_text, limit=10000, callback=self._progressCallback)
        elif search_mode == 1:
            results = self._database.search_proteins_by_sequence(
                search_text, limit=10000, callback=self._progressCallback)
        elif search_mode == 2:
            try:
                digestion_settings = self._working_digestion_action_group.checkedAction(
                ).data()
            except AttributeError:
                results = []
            else:
                results = self._database.search_proteins_by_peptide_sequence(
                    search_text,
                    digestion_settings,
                    limit=10000,
                    callback=self._progressCallback)
        else:
            raise ValueError

        self.proteinsTableWidget.setRowCount(0)
        self.proteinsTableWidget.setSortingEnabled(False)

        try:
            for i, protein in enumerate(results):
                self.proteinsTableWidget.insertRow(i)
                index_item = QTableWidgetItem(str(i + 1).zfill(5))
                index_item.setData(TableItemDataRole.ROW_OBJECT, protein)
                name_item = QTableWidgetItem(protein.name)
                self.proteinsTableWidget.setItem(i, 0, index_item)
                self.proteinsTableWidget.setItem(i, 1, name_item)

        except ResultsLimitExceededError:
            commondialog.informationMessage(
                self, 'Your search returns too much results.\n'
                'Only the 10000 first results will be displayed.',
                dismissable=True)

        self.proteinsTableWidget.setSortingEnabled(True)
        self.proteinsTableWidget.resizeColumnToContents(-1)

        # Change search line edit text color to assure the user the search is done
        palette = self.proteinsSearchLineEdit.palette()

        if self.proteinsTableWidget.rowCount():
            palette.setColor(QPalette.Text, QColor(0, 180, 0))
        else:
            palette.setColor(QPalette.Text, QColor(180, 0, 0))

        self.proteinsSearchLineEdit.setPalette(palette)
    def update_list(self):
        self.table_widget.clear()
        self.table_widget.setHorizontalHeaderLabels([
            "Name", "Game", "Status", "Entrants", "Goal", "Info", "Opened At"
        ])

        name_filter = self.filter_name_edit.text().strip()

        displayed_status = set()
        for (check, status) in self._status_checks:
            if check.isChecked():
                displayed_status.add(status)

        displayed_games = set()
        for (check, game) in self._game_checks:
            if check.isChecked():
                displayed_games.add(game)

        visible_races = [
            race for race in self.races
            if (race.status in displayed_status and name_filter in race.name
                and race.game in displayed_games)
        ]

        self.table_widget.setRowCount(len(visible_races))
        for i, session in enumerate(visible_races):
            name = QTableWidgetItem(session.name)
            status = QTableWidgetItem(session.verbose_status)
            entrants = QTableWidgetItem(str(session.entrants))
            goal = QTableWidgetItem(session.goal)
            info = QTableWidgetItem(session.info)
            opened_at = QTableWidgetItem(
                session.opened_at.astimezone().strftime("%c"))
            game_name = QTableWidgetItem(session.game.short_name)

            name.setData(Qt.UserRole, session)
            self.table_widget.setItem(i, 0, name)
            self.table_widget.setItem(i, 1, game_name)
            self.table_widget.setItem(i, 2, status)
            self.table_widget.setItem(i, 3, entrants)
            self.table_widget.setItem(i, 4, goal)
            self.table_widget.setItem(i, 5, info)
            self.table_widget.setItem(i, 6, opened_at)

        self.status_label.setText(
            f"{len(self.races)} races total, {len(visible_races)} displayed.")
Beispiel #3
0
    def refreshPeptidesTableWidget(self) -> None:
        selected_items = self.proteinsTableWidget.selectedItems()
        selected_protein = selected_items[0].data(
            TableItemDataRole.ROW_OBJECT) if selected_items else None
        selected_protein_id = selected_protein.id if selected_protein else None
        digestion_settings = self._working_digestion_action_group.checkedAction(
        ).data()

        if selected_protein_id and digestion_settings:
            results = self.database.search_peptides_by_protein_id(
                selected_protein_id,
                digestion_settings,
                limit=10000,
                callback=self._progressCallback)
        else:
            results = []

        self.peptidesTableWidget.setRowCount(0)
        self.peptidesTableWidget.setSortingEnabled(False)

        try:
            for i, peptide in enumerate(results):
                self.peptidesTableWidget.insertRow(i)
                index_item = QTableWidgetItem(str(i + 1).zfill(5))
                index_item.setData(TableItemDataRole.ROW_OBJECT, peptide)
                sequence_item = QTableWidgetItem(peptide.sequence)
                missed_cleavages_item = QTableWidgetItem(
                    str(peptide.missed_cleavages))
                digest_unique_item = QTableWidgetItem(
                    'Yes' if peptide.digest_unique else 'No')
                sequence_unique_item = QTableWidgetItem(
                    'Yes' if peptide.sequence_unique else 'No')
                self.peptidesTableWidget.setItem(i, 0, index_item)
                self.peptidesTableWidget.setItem(i, 1, sequence_item)
                self.peptidesTableWidget.setItem(i, 2, missed_cleavages_item)
                self.peptidesTableWidget.setItem(i, 3, digest_unique_item)
                self.peptidesTableWidget.setItem(i, 4, sequence_unique_item)

        except ResultsLimitExceededError:
            commondialog.informationMessage(
                self, 'Your search returns too much results.\n'
                'Only the 10000 first results will be displayed.',
                dismissable=True)

        self.peptidesTableWidget.setSortingEnabled(True)
        self.proteinsTableWidget.resizeColumnToContents(-1)
Beispiel #4
0
    def update_list(self):
        self.table_widget.clear()
        self.table_widget.setHorizontalHeaderLabels([
            "Name", "State", "Players", "Password?", "Creator", "Creation Date"
        ])

        name_filter = self.filter_name_edit.text().strip()

        displayed_has_password = set()
        if self.has_password_yes_check.isChecked():
            displayed_has_password.add(True)
        if self.has_password_no_check.isChecked():
            displayed_has_password.add(False)

        displayed_states = set()
        for (check, state) in ((self.state_setup_check,
                                GameSessionState.SETUP),
                               (self.state_inprogress_check,
                                GameSessionState.IN_PROGRESS),
                               (self.state_finished_check,
                                GameSessionState.FINISHED)):
            if check.isChecked():
                displayed_states.add(state)

        dont_filter_age = not self.filter_age_check.isChecked()
        now = datetime.datetime.now(tz=datetime.timezone.utc)
        max_session_age = datetime.timedelta(days=self.filter_age_spin.value())

        visible_sessions = [
            session for session in reversed(self.sessions)
            if (session.has_password in displayed_has_password and session.
                state in displayed_states and name_filter in session.name and (
                    dont_filter_age or
                    (now - session.creation_date) < max_session_age))
        ]
        self.visible_sessions = visible_sessions

        self.table_widget.setRowCount(len(visible_sessions))
        for i, session in enumerate(visible_sessions):
            name = QTableWidgetItem(session.name)
            state = QTableWidgetItem(session.state.user_friendly_name)
            players_item = QTableWidgetItem(str(session.num_players))
            has_password = QTableWidgetItem(
                "Yes" if session.has_password else "No")
            creator = QTableWidgetItem(session.creator)
            creation_date = QTableWidgetItem(
                session.creation_date.astimezone().strftime("%Y-%m-%d %H:%M"))

            name.setData(Qt.UserRole, session)
            self.table_widget.setItem(i, 0, name)
            self.table_widget.setItem(i, 1, state)
            self.table_widget.setItem(i, 2, players_item)
            self.table_widget.setItem(i, 3, has_password)
            self.table_widget.setItem(i, 4, creator)
            self.table_widget.setItem(i, 5, creation_date)

        for i in range(6):
            self.table_widget.resizeColumnToContents(i)

        self.status_label.setText(
            f"{len(self.sessions)} sessions total, {len(visible_sessions)} displayed."
        )
Beispiel #5
0
    def refreshSubProteinsTableWidget(self) -> None:
        selected_items = self.peptidesTableWidget.selectedItems()
        selected_peptide = selected_items[0].data(
            TableItemDataRole.ROW_OBJECT) if selected_items else None
        selected_peptide_id = selected_peptide.id if selected_peptide else None
        selected_peptide_sequence = selected_peptide.sequence if selected_peptide else None
        digestion_settings = self._working_digestion_action_group.checkedAction(
        ).data()
        by_id_results_ids_set = set()
        limit_reached = False

        self.subProteinsTableWidget.setRowCount(0)
        self.subProteinsTableWidget.setSortingEnabled(False)

        if selected_peptide_id:
            by_id_results = self.database.search_proteins_by_peptide_id(
                selected_peptide_id,
                digestion_settings,
                limit=10000,
                callback=self._progressCallback)
        else:
            by_id_results = []

        try:
            for i, protein in enumerate(by_id_results):
                self.subProteinsTableWidget.insertRow(i)
                index_item = QTableWidgetItem(str(i + 1).zfill(5))
                index_item.setData(TableItemDataRole.ROW_OBJECT, protein)
                name_item = QTableWidgetItem(protein.name)
                origin_item = QTableWidgetItem('by digest')
                self.subProteinsTableWidget.setItem(i, 0, index_item)
                self.subProteinsTableWidget.setItem(i, 1, name_item)
                self.subProteinsTableWidget.setItem(i, 2, origin_item)
                by_id_results_ids_set.add(protein.id)

        except ResultsLimitExceededError:
            commondialog.informationMessage(
                self, 'Your search returns too much results.\n'
                'Only the 10000 first results will be displayed.',
                dismissable=True)
            limit_reached = True

        if selected_peptide_sequence and not limit_reached:
            by_sequence_results = self.database.search_proteins_by_sequence(
                selected_peptide_sequence,
                limit=10000,
                callback=self._progressCallback)
        else:
            by_sequence_results = []

        try:
            for i, protein in enumerate(
                (filtered_protein for filtered_protein in by_sequence_results
                 if filtered_protein.id not in by_id_results_ids_set),
                    start=len(by_id_results_ids_set)):
                self.subProteinsTableWidget.insertRow(i)
                index_item = QTableWidgetItem(str(i + 1).zfill(5))
                index_item.setData(TableItemDataRole.ROW_OBJECT, protein)
                name_item = QTableWidgetItem(protein.name)
                origin_item = QTableWidgetItem('by sequence')
                self.subProteinsTableWidget.setItem(i, 0, index_item)
                self.subProteinsTableWidget.setItem(i, 1, name_item)
                self.subProteinsTableWidget.setItem(i, 2, origin_item)

        except ResultsLimitExceededError:
            commondialog.informationMessage(
                self, 'Your search returns too much by_id_results.\n'
                'Only the 10000 first results will be displayed.',
                dismissable=True)

        self.subProteinsTableWidget.setSortingEnabled(True)
        self.subProteinsTableWidget.resizeColumnToContents(-1)
    app = QApplication(sys.argv)

    # Create and populate the tableWidget
    tableWidget = QTableWidget(4, 4)
    tableWidget.setItemDelegate(StarDelegate())
    tableWidget.setEditTriggers(QAbstractItemView.DoubleClicked
                                | QAbstractItemView.SelectedClicked)
    tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)
    tableWidget.setHorizontalHeaderLabels(
        ["Title", "Genre", "Artist", "Rating"])

    data = [["Mass in B-Minor", "Baroque", "J.S. Bach", 5],
            ["Three More Foxes", "Jazz", "Maynard Ferguson", 4],
            ["Sex Bomb", "Pop", "Tom Jones", 3],
            ["Barbie Girl", "Pop", "Aqua", 5]]

    for r in range(len(data)):
        tableWidget.setItem(r, 0, QTableWidgetItem(data[r][0]))
        tableWidget.setItem(r, 1, QTableWidgetItem(data[r][1]))
        tableWidget.setItem(r, 2, QTableWidgetItem(data[r][2]))
        item = QTableWidgetItem()
        item.setData(0, StarRating(data[r][3]).starCount)
        tableWidget.setItem(r, 3, item)

    tableWidget.resizeColumnsToContents()
    tableWidget.resize(500, 300)
    tableWidget.show()

    sys.exit(app.exec_())
    async def validateUrl(self, url: str) -> bool:
        self.download.setDisabled(True)
        self.files.setDisabled(True)
        self.files.clearSelection()
        self.files.clearFocus()
        self.files.clearContents()
        self.files.setRowCount(0)
        self.files.setSortingEnabled(False)
        self.url.setStyleSheet('')
        self.modId = 0
        if not url:
            self.urlInfo.setText('''
                <font color="#888">Please enter a valid mod url.</font>
                ''')
            return False
        modId = getModId(url)
        if not modId:
            self.files.setDisabled(True)
            self.url.setStyleSheet('''
                *{
                    border: 1px solid #B22222;
                    padding: 1px 0px;
                }
                ''')
            self.urlInfo.setText('''
                <font color="#888">Please enter a valid mod url.</font>
                ''')
            return False
        self.urlInfo.setText('🌐')
        try:
            filesResponse = await getModFiles(modId)
        except (RequestError, ResponseError, Exception) as e:
            self.url.setStyleSheet('''
                *{
                    border: 1px solid #B22222;
                    padding: 1px 0px;
                }
                ''')
            self.urlInfo.setText(f'''
                <font color="#888">Could not get mod files: {e}.</font>
                ''')
            return False
        try:
            files = filesResponse['files']
            if not len(files):
                self.urlInfo.setText(f'''
                    <font color="#888">Mod "{modId}" has no files!</font>
                    ''')
                return False

            self.files.setRowCount(len(files))
            for i in range(len(files)):
                file = files[i]
                fileid = int(file['file_id'])
                name = str(file['name'])
                version = str(file['version'])
                _uploadtime = dateparser.parse(file['uploaded_time'])
                uploadtime = _uploadtime.astimezone(tz=None).strftime(
                    '%Y-%m-%d %H:%M:%S') if _uploadtime else '?'
                description = html.unescape(str(file['description']))
                nameItem = QTableWidgetItem(name)
                nameItem.setToolTip(name)
                nameItem.setData(Qt.UserRole, fileid)
                self.files.setItem(i, 0, nameItem)
                versionItem = QTableWidgetItem(version)
                versionItem.setToolTip(version)
                self.files.setItem(i, 1, versionItem)
                uploadtimeItem = QTableWidgetItem(uploadtime)
                uploadtimeItem.setToolTip(uploadtime)
                self.files.setItem(i, 2, uploadtimeItem)
                descriptionItem = QTableWidgetItem(description)
                descriptionItem.setToolTip(description)
                self.files.setItem(i, 3, descriptionItem)
        except KeyError as e:
            logger.exception(
                f'Could not find key "{str(e)}" in mod files response')
            self.urlInfo.setText(f'''
                <font color="#888">Could not find key "{str(e)}" in mod files response.</font>
                ''')
            return False

        self.urlInfo.setText(f'''
            <font color="#888">Found {len(files)} available files.</font>
            ''')
        self.files.resizeColumnsToContents()
        self.files.setDisabled(False)
        self.files.setSortingEnabled(True)
        self.modId = modId
        return True