コード例 #1
0
def change_reminder_status(remind_id: int) -> None:
    """The function changes the status in the database 
       on "disable" after sending a message with a reminder.
    """
    database_session.query(ReminderData).filter(
        ReminderData.id == remind_id).update({'status': 'deactive'})

    try:
        database_session.commit()
    except SQLAlchemyError:
        logger.error("Commit error")
コード例 #2
0
ファイル: utils.py プロジェクト: dumbturtle/botreminder
def reminder_delete(reminder_id: int) -> bool:
    """Removing a reminder from the database.
   
    :param reminder_id: Remind ID in database.
    :return: Returns True if the reminder is deleted from the database. Returns 
                     False if an error occurred while deleting the reminder 
                     from the database.
    """
    if reminder_get_from_database(reminder_id).get('id') is None:
        logger.error(f'Cannot deleting reminder {reminder_id}. Not found!')
        return False
    database_session.query(ReminderData).filter(
        ReminderData.id == reminder_id).delete()

    return try_to_commit(database_session)
コード例 #3
0
def sending_notification_reminder(user_id: int, reminder_date: datetime,
                                  comment: str) -> None:
    """The function sends a message with reminder to the user.
    """
    user_information = database_session.query(User).filter(
        User.id == user_id).first()
    reminder_bot = Bot(token=connect_settings.API_KEY)
    message_text = settings.REMIND_MESSAGE_TEXT.format(reminder_date, comment)
    reminder_bot.sendMessage(chat_id=user_information.chat_id,
                             text=message_text)
コード例 #4
0
ファイル: utils.py プロジェクト: dumbturtle/botreminder
def delete_user_from_database(telegramm_user_id: int) -> bool:
    """Delete user from database.
    
    User removed from database, return True
    An error occurred while deleting, return False
    If no user in database, return string 'NO USER'.
    
    :param telegramm_user_id: Telegram user ID
    :return:  If the user deletion from the database is successful, 
              returns True. If no user in database or an error 
              occurred while deleting, returns False.

    """
    if get_information_about_user(telegramm_user_id) is None:
        return False
    database_session.query(User).filter(
        User.telegramm_user_id == telegramm_user_id).delete()

    return try_to_commit(database_session)
コード例 #5
0
def index():
    """Page processing function "/index"
        If the user has registered on the site, he is redirected to the page with a reminder.
        If the user is not registered, a blank page is displayed.
    """
    if current_user.is_authenticated:
        telegramm_user_id = database_session.query(
            User.telegramm_user_id).filter(
                User.id == current_user.get_id()).first()
        return redirect(url_for('reminder', userid=telegramm_user_id))
    return render_template('index.html', title='Main')
コード例 #6
0
ファイル: utils.py プロジェクト: dumbturtle/botreminder
def reminder_list_from_database(
    telegramm_user_id: int
) -> List[Optional[Dict[str, Union[str, int, datetime]]]]:
    """Returns a list of user reminders.

    :param telegramm_user_id: Telegram user ID
    :return: If there are reminders in the database, the list
             with dict of user reminders is returned; if there are no 
             reminders, it is returned None.
    """
    user_id = database_session.query(
        User.id).filter(User.telegramm_user_id == telegramm_user_id).first()
    list_reminder_database = database_session.query(ReminderData).filter(
        ReminderData.user_id == user_id[0]).all()
    user_list_reminder = [{
        'id': reminder.id,
        'user_id': reminder.user_id,
        'comment': reminder.comment,
        'date_remind': reminder.date_remind,
        'status': reminder.status
    } for reminder in list_reminder_database]
    return user_list_reminder
コード例 #7
0
def check_time_reminder() -> None:
    """The function check base with reminders. 
       If there is a match in time, the message sending 
       function is called.
    """
    reminders_list = database_session.query(ReminderData).filter(
        ReminderData.status == 'active').all()

    for reminder in reminders_list:
        logger.info("Проверено напоминание: {}-{}-{}".format(
            reminder.user_id, reminder.date_remind, reminder.comment))
        if reminder.date_remind.strftime("%d-%m-%Y %H:%M") == (
            (datetime.now() + timedelta(hours=0)).strftime("%d-%m-%Y %H:%M")):
            sending_notification_reminder(reminder.user_id,
                                          reminder.date_remind,
                                          reminder.comment)
            change_reminder_status(reminder.id)
コード例 #8
0
def loginkey():
    """Page processing function "/loginkey"
        When you click "OK", the function
        checks the entered PIN code. If the
        PIN code is correct, then the user logs
        in and is redirected to the reminder page.
        If the pin code is wrong, an error message is displayed.
    """
    keyform = UserKeyForm()
    userid = request.args.get('userid', None)
    user = database_session.query(User).filter(
        User.telegramm_user_id == userid).first()
    if keyform.validate_on_submit():
        keyform.userkey.data == str(key)
        login_user(user)
        return redirect(url_for('reminder', userid=userid))
    flash('Error PIN Code')
    return render_template('loginkey.html', title='Key In', form=keyform)
コード例 #9
0
ファイル: utils.py プロジェクト: dumbturtle/botreminder
def get_information_about_user(
        telegramm_user_id: int) -> Optional[Dict[str, Union[str, int]]]:
    """ Get information about user from database.
    
    :param telegramm_user_id: Telegram user ID
    :return: Returns a dictionary with user data from a database
    """
    information_from_database = database_session.query(User).filter(
        User.telegramm_user_id == telegramm_user_id).first()
    if information_from_database is not None:
        information_about_user = {
            'telegramm_user_id': information_from_database.telegramm_user_id,
            'first_name': information_from_database.first_name,
            'last_name': information_from_database.last_name,
            'username': information_from_database.username,
            'chat_id': information_from_database.chat_id,
        }
        return information_about_user
コード例 #10
0
ファイル: utils.py プロジェクト: dumbturtle/botreminder
def reminder_get_from_database(
        remind_id: int) -> Dict[str, Union[str, int, datetime, None]]:
    """Return information about reminder for delete.
    
    :param remind_id: Remind ID in database.
    :return:  Returned information about user reminder in Dict formate.
    """

    reminder_from_database = database_session.query(ReminderData).filter(
        ReminderData.id == remind_id).first()
    if reminder_from_database is not None:
        reminder = {
            'id': reminder_from_database.id,
            'user_id': reminder_from_database.user_id,
            'comment': reminder_from_database.comment,
            'date_remind': reminder_from_database.date_remind,
            'status': reminder_from_database.status
        }
    else:
        reminder = {'id': None}
    return reminder
コード例 #11
0
ファイル: utils.py プロジェクト: dumbturtle/botreminder
def reminder_add_new_to_database(telegramm_user_id: int, comment: str,
                                 date_remind: datetime, status: str) -> bool:
    """Adding a new reminder to the database.
    
    If reminder add to database, returned True.
    If an error occurred while add reimnder to database, return False.

    :param telegramm_user_id: Telegram user ID
    :param comment: User comment on reminder.
    :param date_remind: Date reminder
    :param status: Reminder status(Active/Deactive)
    :return: Returns True if a reminder is added to the database. Returns 
                     False if an error occurred while adding a reminder 
                     to the database. 
    """
    user_id = database_session.query(
        User.id).filter(User.telegramm_user_id == telegramm_user_id).first()
    information_about_reminder = ReminderData(user_id[0], comment, date_remind,
                                              status)
    database_session.add(information_about_reminder)

    return try_to_commit(database_session)
コード例 #12
0
def login():
    """Page processing function "/login"
        If the user is registered, he is immediately redirected to the page with reminders.
        When you click on the "OK" button, it checks if the user is in the database, 
        if there is no user, an error is displayed. If the user is in the system, 
        a PIN code is generated and sent to the user in the Telegram. 
        Redirected to the key entry page.
    """
    form = UserIdForm()
    user = database_session.query(User).filter(
        User.telegramm_user_id == form.userid.data).first()
    if current_user.is_authenticated:
        return redirect(url_for('reminder', userid=user.telegramm_user_id))
    if form.validate_on_submit():
        if user is None:
            flash('No user')
            return redirect(url_for('login'))
        key = userkey()
        usertext = f'Выш код для входа: {key}'
        sending_notification_reminder(user.telegramm_user_id, datetime.now(),
                                      usertext)
        return redirect(url_for('loginkey', userid=user.telegramm_user_id))
    return render_template('login.html', title='Login In', form=form)
コード例 #13
0
def load_user(user_id):
    """Function request data by user ID.
    :return: user information
    """
    return database_session.query(User).filter(User.id == user_id).first()