コード例 #1
0
ファイル: setting.py プロジェクト: jpli/tafor
    def setValue(self, path, option, category='text'):
        option = getattr(self, option)

        if category == 'text':
            val = option.text()

        if category == 'bool':
            val = option.isChecked()

        if category == 'combox':
            val = option.currentText()

        if category == 'slider':
            val = option.value()

        if category == 'plaintext':
            val = option.toPlainText()

        if category == 'list':
            items = [option.item(i).text() for i in range(option.count())]
            val = json.dumps(items)

        if category == 'mobile':
            name = option.currentText()
            person = db.query(User).filter_by(name=name).first()
            val = person.mobile if person else ''

        conf.setValue(path, val)
コード例 #2
0
ファイル: send.py プロジェクト: ajelcode/tafor
    def autoSend(self):
        tasks = db.query(Task).filter_by(taf_id=None).order_by(
            Task.planning).all()
        now = datetime.datetime.utcnow()
        sendStatus = False

        for task in tasks:

            if task.planning <= now:

                message = '\n'.join([task.head, task.rpt])
                aftn = AFTNMessage(message, time=task.planning)
                item = Taf(tt=task.tt,
                           sign=task.head,
                           rpt=task.rpt,
                           raw=aftn.toJson())
                db.add(item)
                db.flush()
                task.taf_id = item.id
                db.merge(task)
                db.commit()

                sendStatus = True

        logger.debug('Tasks ' + ' '.join(task.rpt for task in tasks))

        if sendStatus:
            logger.debug('Task complete')
コード例 #3
0
ファイル: setting.py プロジェクト: jpli/tafor
    def loadValue(self, path, option, category='text'):
        val = conf.value(path)
        option = getattr(self, option)

        if val is None:
            return 0

        if category in ['text', 'plaintext']:
            option.setText(val)

        if category == 'bool':
            val = boolean(val)
            option.setChecked(val)

        if category == 'combox':
            index = option.findText(val, Qt.MatchFixedString)
            option.setCurrentIndex(index)

        if category == 'slider':
            option.setValue(int(val))

        if category == 'list':
            try:
                items = json.loads(val)
                option.addItems(items)
            except (ValueError, TypeError):
                pass

        if category == 'mobile':
            person = db.query(User).filter_by(mobile=val).first()
            if person:
                index = option.findText(person.name, Qt.MatchFixedString)
                option.setCurrentIndex(index)
コード例 #4
0
    def latest(self):
        """查询本地最新的报文

        :return: ORM 对象
        """
        last = db.query(Taf).filter_by(tt=self.tt).order_by(
            Taf.sent.desc()).first()
        return last
コード例 #5
0
    def remove(self):
        row = self.table.currentRow()
        rpt = self.table.item(row, 1).text()

        item = db.query(Task).filter_by(rpt=rpt).first()
        db.delete(item)
        db.commit()

        self.updateGui()
コード例 #6
0
ファイル: main.py プロジェクト: jpli/tafor
 def updateContractMenu(self):
     mobile = conf.value('Monitor/SelectedMobile')
     person = db.query(User).filter_by(mobile=mobile).first()
     if person:
         action = getattr(self, 'contract' + str(person.id), None)
         if action:
             action.setChecked(True)
     else:
         self.contractNo.setChecked(True)
コード例 #7
0
    def save(self):
        """储存远程报文数据"""
        last = db.query(Metar).filter_by(tt=self.tt).order_by(
            Metar.created.desc()).first()

        if last is None or last.rpt != self.message:
            item = Metar(tt=self.tt, rpt=self.message)
            db.add(item)
            db.commit()
            logger.info('Save {} {}'.format(self.tt, self.message))
コード例 #8
0
ファイル: setting.py プロジェクト: jpli/tafor
    def delPerson(self):
        """删除联系人"""
        row = self.contractTable.currentRow()
        name = self.contractTable.item(row, 0).text()

        person = db.query(User).filter_by(name=name).first()
        db.delete(person)
        db.commit()

        self.updateContract()
コード例 #9
0
    def isExist(self):
        """查询有没有已经入库的报文

        :return: ORM 对象
        """
        expired = datetime.datetime.utcnow() - datetime.timedelta(hours=24)
        taf = TafParser(self.message)
        last = db.query(Taf).filter(
            or_(Taf.rpt == self.message, Taf.rpt == taf.renderer()),
            Taf.sent > expired).order_by(Taf.sent.desc()).first()
        return last
コード例 #10
0
ファイル: widget.py プロジェクト: jpli/tafor
    def item(self):
        item = None
        recent = datetime.datetime.utcnow() - datetime.timedelta(hours=24)

        if self.tt in ['FC', 'FT']:
            item = db.query(Taf).filter(Taf.sent > recent,
                                        Taf.tt == self.tt).order_by(
                                            Taf.sent.desc()).first()

        if self.tt in ['WS', 'WC', 'WV']:
            item = db.query(Sigmet).filter(Sigmet.sent > recent).order_by(
                Sigmet.sent.desc()).first()

        if self.tt == 'TREND':
            item = db.query(Trend).filter(Trend.sent > recent).order_by(
                Trend.sent.desc()).first()
            if item and item.isNosig():
                item = None

        return item
コード例 #11
0
    def setText(self):
        last = db.query(Sigmet).filter(Sigmet.tt == self.type.tt, ~Sigmet.rpt.contains('CNL')).order_by(Sigmet.sent.desc()).first()
        if last:
            fir = conf.value('Message/FIR')
            _, text = last.rpt.split('\n')
            text = text.replace(fir, '')
            text = text.replace('=', '').strip()

            self.content.text.setText(text)
        else:
            self.content.text.clear()
コード例 #12
0
ファイル: taf.py プロジェクト: jpli/tafor
 def amendNumber(self, sort):
     expired = datetime.datetime.utcnow() - datetime.timedelta(hours=24)
     query = db.query(Taf).filter(Taf.rpt.contains(self.amdPeriod), Taf.sent > expired)
     if sort == 'COR':
         items = query.filter(Taf.rpt.contains('COR')).all()
         order = chr(ord('A') + len(items))
         return 'CC' + order
     elif sort == 'AMD':
         items = query.filter(Taf.rpt.contains('AMD')).all()
         order = chr(ord('A') + len(items))
         return 'AA' + order
コード例 #13
0
ファイル: table.py プロジェクト: jpli/tafor
    def updateResendButton(self, item):
        if not item:
            return

        text = item.text()
        self.resendButton.hide()
        if text.startswith('TAF'):
            expired = datetime.datetime.utcnow() - datetime.timedelta(hours=6)
            taf = Parser(text)
            self.selected = db.query(Taf).filter(or_(Taf.rpt == text, Taf.rpt == taf.renderer()), Taf.sent > expired).order_by(Taf.sent.desc()).first()
            if self.selected and not self.selected.confirmed:
                self.resendButton.show()
コード例 #14
0
    def local(self, period=None):
        """返回本地数据当前时次的最新报文,忽略 AMD COR 报文

        :param period: 报文的有效时段
        :return: ORM 对象
        """
        period = self.warningPeriod() if period is None else period
        expired = datetime.datetime.utcnow() - datetime.timedelta(hours=24)
        recent = db.query(Taf).filter(
            Taf.rpt.contains(period), ~Taf.rpt.contains('AMD'),
            ~Taf.rpt.contains('COR'),
            Taf.sent > expired).order_by(Taf.sent.desc()).first()
        return recent
コード例 #15
0
ファイル: main.py プロジェクト: jpli/tafor
    def changeContract(self):
        target = self.contractsActionGroup.checkedAction()

        if self.contractNo == target:
            conf.setValue('Monitor/SelectedMobile', '')
            logger.info('关闭电话提醒')
        else:
            name = target.text()
            person = db.query(User).filter_by(name=name).first()
            mobile = person.mobile if person else ''

            conf.setValue('Monitor/SelectedMobile', mobile)
            logger.info('切换联系人 %s %s' % (name, mobile))
コード例 #16
0
ファイル: setting.py プロジェクト: jpli/tafor
    def updateContract(self):
        """更新联系人列表"""
        items = db.query(User).all()
        self.contractTable.setRowCount(len(items))

        for row, item in enumerate(items):
            self.contractTable.setItem(row, 0,  QTableWidgetItem(item.name))
            self.contractTable.setItem(row, 1,  QTableWidgetItem(item.mobile))

        self.selectedContract.clear()
        options = [item.name for item in items]
        options.insert(0, QCoreApplication.translate('MainWindow', 'None'))
        self.selectedContract.addItems(options)
コード例 #17
0
ファイル: table.py プロジェクト: jpli/tafor
    def queryset(self):
        if hasattr(self.model, 'sent'):
            dateField = self.model.sent
        else:
            dateField = self.model.created

        query = db.query(self.model).order_by(dateField.desc())

        if self.date:
            delta = datetime.timedelta(days=1)
            query = query.filter(and_(dateField >= self.date, dateField < self.date + delta))

        return query
コード例 #18
0
    def setPrev(self):
        expired = datetime.datetime.utcnow() - datetime.timedelta(hours=self.head.duration)
        last = db.query(Sigmet).filter(Sigmet.sent > expired, Sigmet.tt == self.type.tt).order_by(Sigmet.sent.desc()).first()

        if last:
            validPattern = re.compile(r'(\d{6})/(\d{6})')
            sequencePattern = re.compile(r'\b(\d)\b')

            beginningTime, endingTime = validPattern.search(last.rpt).groups()
            sequence = sequencePattern.search(last.rpt).group()

            self.content.beginningTime.setText(beginningTime)
            self.content.endingTime.setText(endingTime)
            self.content.sequence.setText(sequence)
コード例 #19
0
ファイル: main.py プロジェクト: jpli/tafor
    def setContractMenu(self):
        self.contractsActionGroup = QActionGroup(self)
        self.contractsActionGroup.addAction(self.contractNo)

        contacts = db.query(User).all()

        for person in contacts:
            setattr(self, 'contract' + str(person.id), QAction(self))
            target = getattr(self, 'contract' + str(person.id))
            target.setText(person.name)
            target.setCheckable(True)

            self.contractsActionGroup.addAction(target)
            self.contractsMenu.addAction(target)

        self.updateContractMenu()
コード例 #20
0
    def updateGui(self):
        items = db.query(Task).filter(Task.taf_id == None).order_by(
            Task.planning.desc()).all()
        self.table.setRowCount(len(items))
        self.table.resizeRowsToContents()

        for row, item in enumerate(items):
            self.table.setItem(row, 0, QTableWidgetItem(item.tt))
            self.table.setItem(row, 1, QTableWidgetItem(item.rpt))
            self.table.setItem(
                row, 2,
                QTableWidgetItem(item.planning.strftime("%m-%d %H:%M:%S")))
            self.table.setItem(
                row, 3,
                QTableWidgetItem(item.created.strftime("%m-%d %H:%M:%S")))

        self.table.resizeRowsToContents()
コード例 #21
0
 def setSquence(self):
     time = datetime.datetime.utcnow()
     begin = datetime.datetime(time.year, time.month, time.day)
     count = db.query(Sigmet).filter(Sigmet.sent > begin).count() + 1
     self.sequence.setText(str(count))