Exemple #1
0
def do_test(path, chat_id, path_db, num, task_files):
    for task_file in task_files:
        TW = TaskWorker()
        TW.load_config_from_yaml(f'{path}/tasks.d/{task_file}')
        app = Client(TW.task_name)
        app.start()

        for task in TW.tasks:
            print(TW.tasks)
            delta = 0
            if task.task_type == 'text':
                app.send_message('AV100_bot', task.command)
            elif task.task_type == 'call_back':
                if getattr(task, 'id_msg', False):
                    app.request_callback_answer("AV100_bot", task.id_msg,
                                                task.command)
                else:
                    TW.errors.append(
                        Error(task.description, f'',
                              "Не было найдено сообщение с данной кнопкой",
                              TW.description))
                    continue
            elif task.task_type == 'image':
                app.send_photo('AV100_bot', path + task.command)
                last_task = task.timeout
            elif task.task_type == 'result':
                delta = last_task
            else:
                continue

            command_time = datetime.now().timestamp(
            ) - 2  # Поправка на милисекунды
            command_time -= delta  # Костыль для проверки ответа на картинку

            sleep(task.timeout)
            messages = []
            while True:
                msg = app.get_history("AV100_bot",
                                      limit=1,
                                      offset=len(messages))[0]
                if command_time >= msg.date or msg.from_user.is_self:
                    break
                else:
                    messages.append(msg)

            if messages:
                result_flag = False
                for i, sub_tusk in enumerate(task.messages, 1):
                    try:
                        result = TW.check_task(sub_tusk, messages)
                    except Exception as ex:
                        # print(ex)
                        result = {'status': False, 'alert': 'Упал с ошибкой'}
                    if not result['status']:
                        result_flag = True
                        TW.errors.append(
                            Error(task.description, f'Подзадача №{i}',
                                  result['alert'], TW.description))

            else:
                result = {
                    'status': False,
                    'alert': 'Ответ не пришел за отведенное время'
                }
                TW.errors.append(
                    Error(task.description, '', result['alert'],
                          TW.description))
            TW.results.append(
                Result(task.description, "Провал" if result_flag else "Успех",
                       TW.description))
        app.__exit__()
        conn = sqlite3.connect(path_db)
        cursor = conn.cursor()

        for er in TW.errors:
            cursor.execute(
                f"""INSERT INTO errors VALUES ('{er.task}', '{er.sub_task}\n{er.alert}', {num}, '{er.description}')"""
            )
        for res in TW.results:
            cursor.execute(
                f"""INSERT INTO results VALUES ('{res.task}', '{res.result}', {num}, '{res.description}')"""
            )

        conn.commit()
        conn.close()

    for _ in range(3):
        try:
            send_message(chat_id, path)
            break
        except:
            sleep(1)