Example #1
0
def change_username(user_id, new_name, change_time=None):
    """
    changes username (user_id in db) if it has not been changed in the last six months
    :param user_id:
    :param new_name:
    :param change_time:
    :return:
    """
    email = get_email_by_id(user_id)

    if not user_exists(email):
        return "User doesn't exist"

    if len(new_name) < 8 or len(new_name) > 30:
        return "Username needs to be between 8 to 30 characters"

    new_time = datetime.now()
    if change_time:
        new_time = datetime.strptime(change_time, '%Y-%m-%d %H:%M:%S')

    change_date_list = exec_get_all('SELECT userid_reset FROM users WHERE email = %s', (email,))
    change_date = change_date_list[0][0]
    six_months_later = relativedelta(months=6)

    if not change_date or (change_date + six_months_later <= new_time):
        exec_commit('UPDATE users SET userid_reset = %s WHERE email = %s', (new_time, email))
        exec_commit('UPDATE users SET user_id = %s WHERE email = %s', (new_name, email))
        return "User successfully changed username to " + new_name
    return "User changed their username in the last 6 months"
Example #2
0
def create_direct_message(message_id: int, sender_id: str,
                          receiver_id: str, time_sent: None, message: str) -> str:
    """
    adds a message to db
    :param message_id: message id
    :param sender_id: sender's id
    :param receiver_id: receiver's id
    :param time_sent:
    :param message: text i.e. message content
    :return:
    """
    sender_email = get_email_by_id(sender_id)
    receiver_email = get_email_by_id(receiver_id)
    if not user_exists(sender_email):
        return "User" + sender_email + "doesn't exist"
    if not user_exists(receiver_email):
        return "User" + receiver_email + "doesn't exist"
    init_time = datetime.now()
    init_time = str(init_time)
    if time_sent:
        init_time = datetime.strptime(time_sent, '%Y-%m-%d %H:%M:%S')

    suspension_dates = exec_get_all('SELECT suspended_since, suspended_till FROM users WHERE email = %s',
                                    (sender_email,))
    suspended_since = suspension_dates[0][0]
    suspended_till = suspension_dates[0][1]
    if suspended_since and suspended_till:
        if suspended_since < init_time < suspended_till:
            return sender_email + " is currently suspended until " + suspended_till.strftime("%Y/%m/%d %H:%M:%S")

    # If no time was given it will default to the current time
    exec_commit(f'INSERT INTO direct_messages(message_id, sender_id, receiver_id, time_sent, message)'
                f' VALUES (%s,%s,%s,%s,%s)',
                (message_id, sender_id, receiver_id, init_time, message))
    return "Message sent successfully"
Example #3
0
def get_mentions(user_id):
    """
    This will get a list of all unread post and return the list and the number of them
    """
    if not user_exists(get_email_by_id(user_id)):
        return [], 0
    mention_list = exec_get_all('SELECT * FROM mentions WHERE user_id = %s', (user_id,))
    return [message_id[0] for message_id in mention_list], len(mention_list)
Example #4
0
def get_unread_posts(user_id):
    """
    This function will return the list of all unread posts
    """
    if not user_exists(get_email_by_id(user_id)):
        return [], 0
    unread_list = exec_get_all('SELECT post_id FROM unread_posts WHERE user_id = %s', (user_id,))
    return [message_id[0] for message_id in unread_list], len(unread_list)
Example #5
0
def user_exists(email):
    """
    checks if a user exists in the system by email
    :param email:
    :return:
    """
    matches = exec_get_all('SELECT email FROM users WHERE email = %s', (email,))
    return len(matches) == 1
Example #6
0
def get_unread_messages(receiver_id):
    """
    can be used to view unread texts as well as count number of unread texts
    :param receiver_id:
    :return:
    """
    if not user_exists(get_email_by_id(receiver_id)):
        return []
    unreads = exec_get_all('SELECT * FROM direct_messages WHERE is_read = FALSE AND receiver_id = %s', (receiver_id,))
    return unreads
Example #7
0
def get_users_in_community(community):
    """
    This function will get the list of all users that are in the given channel
    """
    if not community_exists(community):
        return []

    user_list = exec_get_all('SELECT user_id FROM memberships WHERE community_name = %s', (community,))

    return [user[0] for user in user_list]
Example #8
0
def read_message(message_id, receiver_id):
    """
    marks message as read
    :param message_id:
    :param receiver_id:
    :return: text content
    """
    texts = exec_get_all('SELECT message FROM direct_messages WHERE message_id = %s AND receiver_id = %s',
                         (message_id, receiver_id))
    if len(texts) == 1:
        exec_commit('UPDATE direct_messages SET is_read = TRUE WHERE message_id = %s', (message_id,))
        return texts[0][0]
Example #9
0
def populate_tables_db3():
    rebuild_tables()
    populate_tables_db1()
    create_user('DrMarvin', 'Marvin', 5855556656, '*****@*****.**', '1991-05-16 00:00:00', None, None, None)
    create_user('Bob12345', 'Bob', 5855654534, '*****@*****.**', '1991-05-17 00:00:00', None, None, None)
    add_community('Metropolis', ['DailyPlanet', 'Random'])
    add_community('Comedy', ['ArgumentClinic', 'Dialogs'])
    user_list = exec_get_all('SELECT user_id FROM users')
    for user in user_list:
        add_user_to_community(user[0], 'Comedy')
    create_user('clarknotsuperman', 'Clark', 5855556434, '*****@*****.**', '1991-05-16 00:00:00', None, None, None)
    create_user('lex12345', 'Lex', 5855556234, '*****@*****.**', '1991-05-16 00:00:00', None, None, None)
    add_user_to_community('clarknotsuperman', 'Metropolis')
    create_direct_message(8, 'lex12345', 'Moe1234', '1991-05-18 00:00:00', 'Hi Moe!')
    create_direct_message(9, 'Moe1234', 'lex12345', '1991-05-18 00:00:10', 'Hi Lex!')
Example #10
0
def get_messages_from(receiver_id, sender_id):
    """
    this will return messages between two given people
    :param receiver_id:
    :param sender_id:
    :return:
    """
    sender_email = get_email_by_id(sender_id)
    receiver_email = get_email_by_id(receiver_id)
    if not user_exists(sender_email):
        return "User" + sender_email + "doesn't exist"
    if not user_exists(receiver_email):
        return "User" + receiver_email + "doesn't exist"
    return exec_get_all('SELECT message FROM direct_messages WHERE sender_id = %s AND receiver_id = %s',
                        (sender_id, receiver_id))
Example #11
0
def channel_exists(channel_name, community_name):
    matching_channels = exec_get_all('SELECT id FROM channels WHERE name = %s AND community_name = %s',
                                     (channel_name, community_name))
    return len(matching_channels) == 1
Example #12
0
def community_exists(community_name):
    matching_communities = exec_get_all('SELECT name FROM communities WHERE name = %s', (community_name,))
    return len(matching_communities) == 1
Example #13
0
def get_email_by_id(user_id):
    matches = exec_get_all('SELECT email FROM users WHERE user_id = %s', (user_id,))
    return matches[0]