def main():
    """
    Основная процедура выполняет:
    1) Уведомление участников о необходимости оплаты.
    2) Получение списка должников и отправление его менеджерам.
    3) Вычищение из БД участников у которых последняя оплата была более года назад.
    4) Удаление писем старше года.
    Все процедуры выполняются независимо, т.е. при падении одной, происходит оповещение администратора и
    выполнение основной процедуры продолжается.
    Соединение с БД критично, поэтому при невозможности соединиться с БД осуществляется выход из приложения.
    :return:
    """
    import core.custom_logger as custom_logger
    import os

    levels = [1, 2]
    program_file = os.path.realpath(__file__)
    logger = custom_logger.get_logger(program_file=program_file)
    logger.info("Try connect to DB")
    try:
        db_connect = DBPostgres(
            dbname=PASSWORDS.settings['postgres_dbname'],
            user=PASSWORDS.settings['postgres_user'],
            password=PASSWORDS.settings['postgres_password'],
            host=PASSWORDS.settings['postgres_host'],
            port=PASSWORDS.settings['postgres_port'],
            logger=logger)
    except Exception:
        send_error_to_admin("DAILY WORKS ERROR: Can't connect to DB!!!",
                            logger,
                            prog_name="sf_daily_works.py")
        logger.error("Exit with error")
        sys.exit(1)
    logger.info('\n' + '#' * 120)

    # Уведомление участников о необходимости оплаты. Здесь падаем при первой же ошибке, т.к. тут скорее всего может
    # быть только проблема с почтой, а это будет для всех.
    try:
        participants_notification(db_connect, logger)
    except Exception:
        send_error_to_admin("DAILY WORKS ERROR: participants_notification()",
                            logger,
                            prog_name="sf_daily_works.py")
    logger.info('\n' + '#' * 120)

    # Блокировка участников у которых оплата просрочена на 5 дней. Здесь проверка на ошибку для каждого конкретного
    # участника.
    block_participants(db_connect, logger)
    logger.info('\n' + '#' * 120)

    # Получение списка должников и отправка его менеджерам
    # try:
    #     get_list_debtors(db_connect, logger)
    # except Exception:
    #     send_error("DAILY WORKS ERROR: get_list_debtors()")
    # logger.info('\n' + '#' * 120)

    # Получение полного списка участников и отправка его менеджерам
    for level in levels:
        try:
            get_full_list_participants(db_connect, logger, level)
        except Exception:
            send_error_to_admin(
                "DAILY WORKS ERROR: get_full_list_participants()",
                logger,
                prog_name="sf_daily_works.py")
        logger.info('\n' + '#' * 120)

    # Удаление лог файлов старше 31 дня
    try:
        delete_obsolete_files(os.path.dirname(logger.handlers[0].baseFilename),
                              31, logger)
    except Exception:
        send_error_to_admin("DAILY WORKS ERROR: delete_obsolete_files()",
                            logger,
                            prog_name="sf_daily_works.py")
    logger.info('\n' + '#' * 120)
    # Здесь дополнительные процедуры
    logger.info('#' * 120)
    logger.info('END gtp_daily_works')
Beispiel #2
0
        # ("_1904_1", r"c:\!SAVE\Посещение\1904-1.csv", datetime(2020, 4, 19, 8, 00, 00),
        #  datetime(2020, 4, 19, 9, 00, 00)),
        # ("_1904_2", r"c:\!SAVE\Посещение\1904-2.csv", datetime(2020, 4, 19, 15, 00, 00),
        #  datetime(2020, 4, 19, 16, 30, 00)),
        # ("_1904_3", r"c:\!SAVE\Посещение\1904-3.csv", datetime(2020, 4, 19, 20, 00, 00),
        #  datetime(2020, 4, 19, 21, 30, 00))
        ("_2004_1", r"c:\!SAVE\Посещение\2004-1.csv",
         datetime(2020, 4, 20, 8, 00, 00), datetime(2020, 4, 20, 9, 00, 00))
    ]

    import core.custom_logger as custom_logger
    import os

    program_file = os.path.realpath(__file__)
    main_logger = custom_logger.get_logger(program_file=program_file)

    main_logger.info("Try connect to DB")
    db = None
    try:
        db = DBPostgres(dbname=PASSWORDS.settings['postgres_dbname'],
                        user=PASSWORDS.settings['postgres_user'],
                        password=PASSWORDS.settings['postgres_password'],
                        host=PASSWORDS.settings['postgres_host'],
                        port=PASSWORDS.settings['postgres_port'],
                        logger=main_logger)
    except:  # noqa: E722
        error_fixing(f"ERROR: Connect to Postgres:\n{traceback.format_exc()}",
                     main_logger)
    main_logger.info("Connect to DB is OK")
    list_columns = []
                       PASSWORDS.settings['zoom11_api_secret'])
    zoom_user.print_list_meetings_for_user(user_id='*****@*****.**',
                                           meeting_type="upcoming")
    zoom_user = ZoomUS(logger, PASSWORDS.settings['zoom12_api_key'],
                       PASSWORDS.settings['zoom12_api_secret'])
    zoom_user.print_list_meetings_for_user(user_id='*****@*****.**',
                                           meeting_type="upcoming")


# ==========================================================================================
if __name__ == '__main__':
    import core.custom_logger as custom_logger
    import os

    program_file = os.path.realpath(__file__)
    logger = custom_logger.get_logger(program_file=program_file)

    # Получение Bearer
    # print(ZoomUS.generate_jwt(PASSWORDS.logins['zoom03_api_key'], PASSWORDS.logins['zoom03_api_secret']))

    # Создание пользователя Zoom
    # print(create_zoom_user('*****@*****.**', "name", "surname", "password", logger=logger))

    # Получение списка встреч
    get_list_meetings(logger)

# ==========================================================================================
"""
if __name__ == '__main__':
    # Список участников (можно получить только простых участников
    # https://marketplace.zoom.us/docs/api-reference/zoom-api/users/users
Beispiel #4
0
if __name__ == '__main__':  # noqa: C901
    """ Логика работы. Оповещение нужно слать только тем кто оплатил (просто добавить себе бота не достаточно)
    Если участник оплатил, но не добавил себе бота, значит он получает только оповещение по email.
    Никаких даже попыток отправить что-то в telegram при регистрации нового участника не делается.
    Добавил ли себе участник бота проверяется только в этом скрипте.
    Идём по сообщениям полученных ботом и сравнимаем telegram username с тем что в participants.
    Если участник находиться в participants - значит он оплатил и ему можно отправить сообщение.
    Иначе - участник добавил себе бота но пока не оплатил, заносим его в список проверки telegram_bot_added.
    Отдельно обрабатываем список проверки, если пользователь находиться в participants = оплатил = оповещение.
    Записи в списке проверки храняться 31 день.
    """
    import core.custom_logger as custom_logger
    import os

    logger = custom_logger.get_logger(program_file=os.path.realpath(__file__))
    logger.info("Try connect to DB")
    try:
        dbconnect = DBPostgres(dbname=PASSWORDS.settings['postgres_dbname'], user=PASSWORDS.settings['postgres_user'],
                               password=PASSWORDS.settings['postgres_password'],
                               host=PASSWORDS.settings['postgres_host'],
                               port=PASSWORDS.settings['postgres_port'], logger=logger)
    except Exception:
        raise_error("Can't connect to DB!!!", logger, prog_name="sf_telegram_bot.py")
        sys.exit(1)
    # logger.info('\n' + '#' * 120)
    # Получить update_id из БД
    rows = dbconnect.execute_select(r"select value from settings where key='telegram_update_id';", None)
    logger.info(f"rows={rows}")
    if not rows:
        raise_error("Select для telegram_update_id ничего не возвращает", logger, prog_name="sf_telegram_bot.py")