コード例 #1
0
    def run(self):
        parser = argparse.ArgumentParser(
            description='a sms console helper to manage sms'
            )
        parser.add_argument('--create', '-c',
                            action='store_true',
                            help='create a new database')
        parser.add_argument('--list-messages', '-l',
                            action='store_true',
                            help='list all messages')
        parser.add_argument('--update-contact', '-u',
                            action='store_true',
                            help='update sms that contact is none')
        parser.add_argument('--import-best-message-storer', '-B',
                            type=argparse.FileType('r'),
                            metavar='FILE',
                            nargs='+',
                            help='import messages from Best MessageStorer backups')
        parser.add_argument('--import-sms-backup-and-restore', '-S',
                            type=argparse.FileType('r'),
                            metavar='FILE',
                            nargs='+',
                            help='import messages from Sms Backup & Restore')
        args = parser.parse_args()

        if args.create:
            self.create_all()
        elif args.list_messages:
            self.list_messages()
        elif args.update_contact:
            update_sms()
        elif args.import_best_message_storer != None:
            for text in args.import_best_message_storer:
                best_message_storer_parser = Best_message_storer_parser(
                    text.read().decode('utf-16le')
                    )
                smses = best_message_storer_parser.parse()
                session.add_all(smses)
                session.commit()
                best_message_storer_parser.print_result()
        elif not args.import_sms_backup_and_restore is None:
            for xml in args.import_sms_backup_and_restore:
                sms_backup_restore_parser = SmsBackupAndRestoreParser(
                    xml.read().decode('utf-8')
                    )
                smses = sms_backup_restore_parser.parse()
                session.add_all(smses)
                session.commit()
                sms_backup_restore_parser.print_result()
        else:
            parser.print_help()
コード例 #2
0
def add_records(target_meets_ids):  # 大会IDのリストから1大会ごとにRecordの行を生成しDBに追加
    notify_line(
        f"目標大会をセット。{target_meets_ids[0]}から{target_meets_ids[-1]}。{len(target_meets_ids)}大会の全記録調査開始"
    )
    record_length = 0  # 追加した行数
    erased = 0  # 削除した行数
    skipped = 0  # 飛ばした種目数
    events_count = 0  # 対象の種目数

    for meet_id in Takenoko(target_meets_ids):
        events_list = scraper.all_events(meet_id)  # Eventインスタンスのリスト
        events_count += (sub_total := len(events_list))

        # 既にDBにある同一大会IDの記録を抽出し、それぞれの種目IDが何行あるかを調べる
        # しかしこれでは記録数変わらずに記録の中身(タイムが空白からアップデートされたとき)に対応できない
        existing_records_in_meet = session.query(
            Record.event).filter_by(meet_id=meet_id).all()
        existing_event_id_list = [e.event for e in existing_records_in_meet]

        for event in events_list:
            event.crawl()
            # print(f'{event.event_id} / {sub_total} in {event.meet_id}')
            if existing_event_id_list.count(event.event_id) != len(
                    event.rows):  # 記録数が一致していなかったら削除して登録し直し
                erased += session.query(Record).filter_by(
                    meet_id=event.meet_id, event=event.event_id).delete()
                records = [Record(*args) for args in event.parse_table()]
                for rc in records:
                    rc.set_team()
                    rc.set_swimmer()
                session.add_all(records)
                record_length += len(records)
                session.commit()
            else:
                skipped += 1

    notify_line(
        f'{erased}件を削除 {record_length}件を新規に保存 現在:{format(count_records(), ",")}件\n{events_count}種目中{skipped}をスキップ'
    )
コード例 #3
0
ファイル: scan_controller.py プロジェクト: bbtfr/nibelung
 def scan(self):
   # init scan model
   scan = Scan()
   scan.scan_started_at = datetime.now()
   scan.scan_by = User.current_user()
   for key, value in self.selectMapper.iteritems():
     for plug in value['plugins']:
       options = getFormValue(plug.options)
       for ret in plug.execute(options):
         finding = Finding(**ret)
         if not finding.name: 
           finding.name = plug.name
         finding.scan = scan
         finding.plugin_name = plug.name
         finding.plugin_group = plug.group
         finding.plugin_options = str(options)
         scan.findings.append(finding)
   scan.scan_finished_at = datetime.now()
   try:
     session.add(scan)
     session.add_all(scan.findings)
     session.commit()
   except IntegrityError, e:
     QMessageBox.information(self, u"SQL错误", u"扫描结果储存失败\n" + e.message)
コード例 #4
0
def add_meets(year, force=False):
    notify_line(f"各地域の大会情報の収集を開始。対象:20{year}年")
    meet_ids = []
    # for area_int in Takenoko(range(14,15)): # ローカル用
    for area_int in Takenoko(list(range(1, 54)) +
                             [70, 80]):  # 本番用 1から53までと全国70国際80がarea番号になる
        meet_ids.extend(scraper.find_meet(year, area_int))

    saved_meets = session.query(func.sum(
        Meet.meet_id)).filter_by(year=year).scalar()
    if force or sum(meet_ids) != saved_meets:  # 大会IDの合計値が一致しないか、強制実行の場合
        notify_line(f'全{len(meet_ids)}の大会を検出')

        meets = []
        for id in Takenoko(meet_ids, 20):
            area = id // 100000
            year = (id % 100000) // 1000
            start, end, name, place, pool = scraper.meet_info(id)
            meets.append(
                Meet(meet_id=id,
                     meet_name=name,
                     place=place,
                     pool=pool,
                     start=start,
                     end=end,
                     area=area,
                     year=year))

        erased = session.query(Meet).filter_by(
            year=year).delete()  # 同じ年度を二重に登録しないように削除する
        session.add_all(meets)
        session.commit()
        notify_line(f'{erased}件を削除 全{len(meets)}の大会情報を保存')

    else:
        notify_line(f'大会情報に更新はありませんでした')
コード例 #5
0
    def run(self):
        parser = argparse.ArgumentParser(
            description='a sms console helper to manage sms')
        parser.add_argument('--create',
                            '-c',
                            action='store_true',
                            help='create a new database')
        parser.add_argument('--list-messages',
                            '-l',
                            action='store_true',
                            help='list all messages')
        parser.add_argument('--update-contact',
                            '-u',
                            action='store_true',
                            help='update sms that contact is none')
        parser.add_argument('--merge-contact',
                            '-m',
                            type=str,
                            metavar='CONTACT',
                            nargs=2,
                            help='merge A contact to B contact')
        parser.add_argument(
            '--import-best-message-storer',
            '-B',
            type=argparse.FileType('r'),
            metavar='FILE',
            nargs='+',
            help='import messages from Best MessageStorer backups')
        parser.add_argument('--import-sms-backup-and-restore',
                            '-S',
                            type=argparse.FileType('r'),
                            metavar='FILE',
                            nargs='+',
                            help='import messages from Sms Backup & Restore')
        args = parser.parse_args()

        if args.create:
            self.create_all()
        elif args.list_messages:
            self.list_messages()
        elif args.update_contact:
            update_sms()
        elif args.merge_contact:
            try:
                merge_contact(
                    args.merge_contact[0].decode(sys.getfilesystemencoding()),
                    args.merge_contact[1].decode(sys.getfilesystemencoding()))
            except ValueError:
                print 'Error keyword'
        elif args.import_best_message_storer != None:
            for text in args.import_best_message_storer:
                best_message_storer_parser = Best_message_storer_parser(
                    text.read().decode('utf-16le'))
                smses = best_message_storer_parser.parse()
                session.add_all(smses)
                session.commit()
                best_message_storer_parser.print_result()
        elif not args.import_sms_backup_and_restore is None:
            for xml in args.import_sms_backup_and_restore:
                sms_backup_restore_parser = SmsBackupAndRestoreParser(
                    xml.read().decode('utf-8'))
                smses = sms_backup_restore_parser.parse()
                session.add_all(smses)
                session.commit()
                sms_backup_restore_parser.print_result()
        else:
            parser.print_help()
コード例 #6
0
ファイル: transactions.py プロジェクト: opbishop/budget-app
def save_to_db(objs):
    session.add_all(objs)
    session.commit()