Exemplo n.º 1
0
def test_get_long_reminders(database, reddit):
    utils.debug_time = utils.parse_datetime_string("2019-01-01 12:00:00")
    user = database.get_or_add_user("Watchful1")
    requested_date = utils.parse_datetime_string("2019-01-01 04:00:00")
    target_date = utils.parse_datetime_string("2019-01-01 04:00:00")
    for i in range(60):
        database.add_reminder(
            Reminder(source=f"https://www.reddit.com/message/messages/XXX{i}",
                     message=f"{i}" * 50,
                     user=user,
                     requested_date=requested_date,
                     target_date=target_date + timedelta(days=1)))

    message = reddit_test.RedditObject(body="MyReminders!", author="Watchful1")
    messages.process_message(message, reddit, database)
    assert len(message.children) == 3
    assert "Click here to delete all your reminders" in message.children[
        0].body
    assert "Click here to delete all your reminders" not in message.children[
        1].body
    assert "Click here to delete all your reminders" not in message.children[
        2].body
    assert "|Source|Message|Date|In|Remove|" in message.children[0].body
    assert "|Source|Message|Date|In|Remove|" in message.children[1].body
    assert "|Source|Message|Date|In|Remove|" in message.children[2].body
    assert "[^(Info)]" not in message.children[0].body
    assert "[^(Info)]" not in message.children[1].body
    assert "[^(Info)]" in message.children[2].body
Exemplo n.º 2
0
    def get_reminder(self, reminder_id):
        log.debug(f"Fetching reminder by id: {reminder_id}")
        c = self.dbConn.cursor()
        c.execute(
            '''
			SELECT rm.ID, rm.Source, rm.RequestedDate, rm.TargetDate, rm.Message, rm.User, rm.Defaulted, us.TimeZone
			FROM reminders rm
				LEFT JOIN user_settings us
					ON us.User = rm.User
			WHERE rm.ID = ?
			''', (reminder_id, ))

        result = c.fetchone()
        if result is None or len(result) == 0:
            log.debug("Reminder not found")
            return None

        reminder = Reminder(source=result[1],
                            target_date=utils.parse_datetime_string(result[3]),
                            message=result[4],
                            user=result[5],
                            db_id=result[0],
                            requested_date=utils.parse_datetime_string(
                                result[2]),
                            defaulted=result[6] == 1,
                            timezone=result[7])

        return reminder
Exemplo n.º 3
0
def test_send_recurring_reminder_limit(database, reddit):
    old_limit = static.RECURRING_LIMIT
    static.RECURRING_LIMIT = 3
    reminder = Reminder(
        source="https://www.reddit.com/message/messages/XXXXX",
        message="KKKKK",
        user=database.get_or_add_user("Watchful1"),
        requested_date=utils.parse_datetime_string("2019-01-01 04:00:00"),
        target_date=utils.parse_datetime_string("2019-01-05 05:00:00"),
        recurrence="one day")
    database.add_reminder(reminder)

    utils.debug_time = utils.parse_datetime_string("2019-01-04 12:00:00")
    for i in range(static.RECURRING_LIMIT + 1):
        utils.debug_time = utils.debug_time + timedelta(days=1)
        notifications.send_reminders(reddit, database)
        assert "I've sent you at least" not in reddit.sent_messages[-1].body
        assert i + 1 == database.get_or_add_user("Watchful1").recurring_sent

    utils.debug_time = utils.debug_time + timedelta(days=1)
    notifications.send_reminders(reddit, database)
    assert "I've sent you at least" in reddit.sent_messages[-1].body
    reminders = database.get_all_user_reminders("Watchful1")
    assert len(reminders) == 0

    static.RECURRING_LIMIT = old_limit
Exemplo n.º 4
0
def test_send_recurring_reminder(database, reddit):
    reminder = Reminder(
        source="https://www.reddit.com/message/messages/XXXXX",
        message="KKKKK",
        user=database.get_or_add_user("Watchful1"),
        requested_date=utils.parse_datetime_string("2019-01-01 04:00:00"),
        target_date=utils.parse_datetime_string("2019-01-05 05:00:00"),
        recurrence="one day")
    database.add_reminder(reminder)

    utils.debug_time = utils.parse_datetime_string("2019-01-05 12:00:00")
    notifications.send_reminders(reddit, database)

    assert len(reddit.sent_messages) == 1

    message_body = reddit.sent_messages[0].body
    assert "I'm here to remind you" in message_body
    assert reminder.message in message_body
    assert "The source comment or message" in message_body
    assert reminder.source in message_body
    assert "This is a repeating reminder. I'll message you again in " in message_body
    assert reminder.recurrence in message_body

    reminders = database.get_all_user_reminders("Watchful1")
    assert len(reminders) == 1
    assert reminders[0].target_date == utils.parse_datetime_string(
        "2019-01-06 05:00:00")
Exemplo n.º 5
0
    def get_pending_reminders(self, count, timestamp):
        log.debug("Fetching pending reminders")
        c = self.dbConn.cursor()
        results = []
        for row in c.execute(
                '''
			SELECT rm.ID, rm.Source, rm.RequestedDate, rm.TargetDate, rm.Message, rm.User, rm.Defaulted, us.TimeZone
			FROM reminders rm
				LEFT JOIN user_settings us
					ON us.User = rm.User
			WHERE rm.TargetDate < ?
			ORDER BY rm.TargetDate
			LIMIT ?
			''', (utils.get_datetime_string(timestamp), count)):
            reminder = Reminder(
                source=row[1],
                target_date=utils.parse_datetime_string(row[3]),
                message=row[4],
                user=row[5],
                db_id=row[0],
                requested_date=utils.parse_datetime_string(row[2]),
                defaulted=row[6] == 1,
                timezone=row[7])
            results.append(reminder)

        log.debug(f"Found reminders: {len(results)}")
        return results
Exemplo n.º 6
0
def database_get_seen(database):
    result = database.get_keystore("comment_timestamp")
    if result is None:
        log.warning("Comment time not in database, returning now")
        now = utils.datetime_now()
        database_set_seen(database, now)
        return now
    return utils.parse_datetime_string(result)
Exemplo n.º 7
0
def test_remove_all_reminders(database, reddit):
    utils.debug_time = utils.parse_datetime_string("2019-01-01 12:00:00")
    message = reddit_test.RedditObject(body=f"RemoveAll!", author="Watchful1")
    messages.process_message(message, reddit, database)
    assert "Deleted" not in message.get_first_child().body

    reminder1 = Reminder(
        source="https://www.reddit.com/message/messages/XXXXX",
        message="KKKKK",
        user=database.get_or_add_user("Watchful1"),
        requested_date=utils.parse_datetime_string("2019-01-01 04:00:00"),
        target_date=utils.parse_datetime_string("2019-01-04 05:00:00"))
    reminder2 = Reminder(
        source="https://www.reddit.com/message/messages/YYYYY",
        message="FFFFF",
        user=database.get_or_add_user("Watchful1"),
        requested_date=utils.parse_datetime_string("2019-02-02 06:00:00"),
        target_date=utils.parse_datetime_string("2019-02-05 07:00:00"))
    reminder3 = Reminder(
        source="https://www.reddit.com/message/messages/ZZZZZ",
        message="JJJJJ",
        user=database.get_or_add_user("Watchful2"),
        requested_date=utils.parse_datetime_string("2019-03-02 06:00:00"),
        target_date=utils.parse_datetime_string("2019-03-05 07:00:00"))
    database.add_reminder(reminder1)
    database.add_reminder(reminder2)
    database.add_reminder(reminder3)

    message = reddit_test.RedditObject(body=f"RemoveAll!", author="Watchful1")
    messages.process_message(message, reddit, database)
    body = message.get_first_child().body
    assert "Deleted **2** reminders." in body

    assert len(database.get_all_user_reminders("Watchful1")) == 0
    assert len(database.get_all_user_reminders("Watchful2")) == 1
Exemplo n.º 8
0
def test_add_cakeday(database, reddit):
    username = "******"
    created = utils.parse_datetime_string("2015-05-05 15:25:17")
    user = reddit_test.User(username, created.timestamp())
    message = reddit_test.RedditObject(body="Cakeday!", author=user)

    utils.debug_time = utils.parse_datetime_string("2019-01-05 12:00:00")
    messages.process_message(message, reddit, database)
    result = message.get_first_child().body

    assert "to remind you of your cakeday" in result

    cakeday = database.get_cakeday(username)
    assert cakeday is not None
    assert cakeday.user == username
    assert cakeday.date_time == utils.parse_datetime_string(
        "2019-05-05 15:25:17")
    assert cakeday.db_id is not None
Exemplo n.º 9
0
def test_reset_recurring_reminder_limit(database, reddit):
    reminder = Reminder(
        source="https://www.reddit.com/message/messages/XXXXX",
        message="KKKKK",
        user=database.get_or_add_user("Watchful1"),
        requested_date=utils.parse_datetime_string("2019-01-01 04:00:00"),
        target_date=utils.parse_datetime_string("2019-01-05 05:00:00"),
        recurrence="one day")
    database.add_reminder(reminder)

    utils.debug_time = utils.parse_datetime_string("2019-01-05 12:00:00")
    notifications.send_reminders(reddit, database)
    assert database.get_or_add_user("Watchful1").recurring_sent == 1

    message = reddit_test.RedditObject(body="MyReminders!", author="Watchful1")
    messages.process_message(message, reddit, database)

    assert database.get_or_add_user("Watchful1").recurring_sent == 0
Exemplo n.º 10
0
def test_send_reminder(database, reddit):
	reminder = Reminder(
			source="https://www.reddit.com/message/messages/XXXXX",
			message="KKKKK",
			user="******",
			requested_date=utils.parse_datetime_string("2019-01-01 04:00:00"),
			target_date=utils.parse_datetime_string("2019-01-05 05:00:00")
		)
	database.save_reminder(reminder)

	utils.debug_time = utils.parse_datetime_string("2019-01-05 12:00:00")
	notifications.send_reminders(reddit, database)

	assert len(reddit.sent_messages) == 1

	message_body = reddit.sent_messages[0].body
	assert "I'm here to remind you" in message_body
	assert reminder.message in message_body
	assert "The source comment or message" in message_body
	assert reminder.source in message_body
Exemplo n.º 11
0
def test_add_cakeday(database, reddit):
    username = "******"
    created = utils.parse_datetime_string("2015-05-05 15:25:17")
    user = reddit_test.User(username, created.timestamp())
    message = reddit_test.RedditObject(body="Cakeday!", author=user)

    utils.debug_time = utils.parse_datetime_string("2019-01-05 12:00:00")
    messages.process_message(message, reddit, database)
    result = message.get_first_child().body

    assert "to remind you of your cakeday" in result

    reminders = database.get_all_user_reminders(username)
    assert len(reminders) == 1
    assert reminders[0].user.name == username
    assert reminders[0].target_date == utils.parse_datetime_string(
        "2019-05-05 15:25:17")
    assert reminders[0].id is not None
    assert reminders[0].recurrence == "1 year"
    assert reminders[0].message == "Happy Cakeday!"
Exemplo n.º 12
0
def test_get_reminders(database, reddit):
    utils.debug_time = utils.parse_datetime_string("2019-01-01 12:00:00")
    message = reddit_test.RedditObject(body="MyReminders!", author="Watchful1")
    messages.process_message(message, reddit, database)
    result = message.get_first_child().body
    assert "You don't have any reminders." in result

    reminders = [
        Reminder(
            source="https://www.reddit.com/message/messages/XXXXX",
            message="KKKKK",
            user=database.get_or_add_user("Watchful1"),
            requested_date=utils.parse_datetime_string("2019-01-01 04:00:00"),
            target_date=utils.parse_datetime_string("2019-01-04 05:00:00")),
        Reminder(
            source="https://www.reddit.com/message/messages/YYYYY",
            message="FFFFF",
            user=database.get_or_add_user("Watchful1"),
            requested_date=utils.parse_datetime_string("2019-02-02 06:00:00"),
            target_date=utils.parse_datetime_string("2019-02-05 07:00:00")),
        Reminder(
            source="https://www.reddit.com/message/messages/ZZZZZ",
            message="GGGGG",
            user=database.get_or_add_user("Watchful1"),
            requested_date=utils.parse_datetime_string("2019-02-02 06:00:00"),
            target_date=utils.parse_datetime_string("2019-02-05 07:00:00"),
            recurrence="one day")
    ]
    for reminder in reminders:
        database.add_reminder(reminder)

    message = reddit_test.RedditObject(body="MyReminders!", author="Watchful1")
    messages.process_message(message, reddit, database)
    result = message.get_first_child().body

    assert "Click here to delete all your reminders" in result
    assert "|Source|Message|Date|In|Repeat|Remove|" in result
    assert "|Source|Message|Date|In|Remove|" in result

    assert reminders[0].source in result
    assert reminders[0].message in result
    assert "01-04 05" in result

    assert reminders[1].source in result
    assert reminders[1].message in result
    assert "02-05 07" in result

    assert reminders[2].recurrence in result

    user = database.get_or_add_user(user_name="Watchful1")
    user.timezone = "America/Los_Angeles"
    messages.process_message(message, reddit, database)
    result = message.get_last_child().body
    assert "Your timezone is currently set to: `America/Los_Angeles`" in result
    assert "01-03 21" in result
    assert "02-04 23" in result
Exemplo n.º 13
0
def test_remove_cakeday(database, reddit):
    cakeday1 = Cakeday(
        user="******",
        date_time=utils.parse_datetime_string("2015-05-05 15:25:17"))
    cakeday2 = Cakeday(
        user="******",
        date_time=utils.parse_datetime_string("2015-05-05 15:25:17"))
    database.add_cakeday(cakeday1)
    database.add_cakeday(cakeday2)

    message = reddit_test.RedditObject(body=f"Remove! cakeday",
                                       author="Watchful3")
    messages.process_message(message, reddit, database)
    assert "You don't have a cakeday reminder set." in message.get_first_child(
    ).body

    message = reddit_test.RedditObject(body=f"Remove! cakeday",
                                       author="Watchful1")
    messages.process_message(message, reddit, database)
    assert "Cakeday reminder deleted." in message.get_first_child().body
    assert database.get_cakeday("Watchful1") is None
    assert database.get_cakeday("Watchful2") is not None
Exemplo n.º 14
0
def test_add_cakeday_exists(database, reddit):
    username = "******"
    created = utils.parse_datetime_string("2015-05-05 15:25:17")
    user = reddit_test.User(username, created.timestamp())
    message = reddit_test.RedditObject(body="Cakeday!", author=user)
    messages.process_message(message, reddit, database)

    message2 = reddit_test.RedditObject(body="Cakeday!", author=user)
    messages.process_message(message2, reddit, database)

    result = message2.get_first_child().body

    assert "It looks like you already have a cakeday reminder set." in result
Exemplo n.º 15
0
def test_process_cakeday_comment(database, reddit):
    username = "******"
    user = reddit_test.User(
        username,
        utils.parse_datetime_string("2015-05-05 15:25:17").timestamp())
    reddit.add_user(user)
    created = utils.parse_datetime_string("2019-01-05 11:00:00")
    comment_id = reddit_test.random_id()
    thread_id = reddit_test.random_id()
    comment = reddit_test.RedditObject(
        body=f"{static.TRIGGER_CAKEDAY}!",
        author=username,
        created=created,
        id=comment_id,
        link_id="t3_" + thread_id,
        permalink=f"/r/test/{thread_id}/_/{comment_id}/",
        subreddit="test")

    reddit.add_comment(comment)

    utils.debug_time = utils.parse_datetime_string("2019-01-05 12:00:00")
    comments.process_comment(comment.get_pushshift_dict(), reddit, database)
    result = comment.get_first_child().body

    assert "to remind you of your cakeday" in result

    reminders = database.get_all_user_reminders(username)
    assert len(reminders) == 1
    assert reminders[0].user.name == username
    assert reminders[0].source == utils.reddit_link(comment.permalink)
    assert reminders[0].requested_date == created
    assert reminders[0].target_date == utils.parse_datetime_string(
        "2019-05-05 15:25:17")
    assert reminders[0].id is not None
    assert reminders[0].recurrence == "1 year"
    assert reminders[0].message == "Happy Cakeday!"
Exemplo n.º 16
0
    def get_pending_cakedays(self, count, timestamp):
        log.debug("Fetching pending cakedays")
        c = self.dbConn.cursor()
        results = []
        for row in c.execute(
                '''
			SELECT ID, CakedayDate, User
			FROM cakedays
			WHERE CakedayDate < ?
			ORDER BY CakedayDate ASC
			LIMIT ?
			''', (utils.get_datetime_string(timestamp), count)):
            cakeday = Cakeday(user=row[2],
                              date_time=utils.parse_datetime_string(row[1]),
                              db_id=row[0])
            results.append(cakeday)

        log.debug(f"Found cakedays: {len(results)}")
        return results
Exemplo n.º 17
0
def test_get_reminders(database, reddit):
    utils.debug_time = utils.parse_datetime_string("2019-01-01 12:00:00")
    message = reddit_test.RedditObject(body="MyReminders!", author="Watchful1")
    messages.process_message(message, reddit, database)
    result = message.get_first_child().body
    assert "You don't have any reminders." in result

    reminder1 = Reminder(
        source="https://www.reddit.com/message/messages/XXXXX",
        message="KKKKK",
        user="******",
        requested_date=utils.parse_datetime_string("2019-01-01 04:00:00"),
        target_date=utils.parse_datetime_string("2019-01-04 05:00:00"))
    reminder2 = Reminder(
        source="https://www.reddit.com/message/messages/YYYYY",
        message="FFFFF",
        user="******",
        requested_date=utils.parse_datetime_string("2019-02-02 06:00:00"),
        target_date=utils.parse_datetime_string("2019-02-05 07:00:00"))
    database.save_reminder(reminder1)
    database.save_reminder(reminder2)
    cakeday = Cakeday(
        user="******",
        date_time=utils.parse_datetime_string("2019-05-05 15:25:17"))
    database.add_cakeday(cakeday)

    message = reddit_test.RedditObject(body="MyReminders!", author="Watchful1")
    messages.process_message(message, reddit, database)
    result = message.get_first_child().body

    assert "Click here to delete all your reminders" in result

    assert "Happy cakeday!" in result

    assert reminder1.source in result
    assert reminder1.message in result
    assert "01-04 05" in result

    assert reminder2.source in result
    assert reminder2.message in result
    assert "02-05 07" in result

    database.save_settings(
        UserSettings(user="******", timezone="America/Los_Angeles"))
    messages.process_message(message, reddit, database)
    result = message.get_last_child().body
    assert "Your timezone is currently set to: `America/Los_Angeles`" in result
    assert "01-03 21" in result
    assert "02-04 23" in result
Exemplo n.º 18
0
    def get_cakeday(self, user):
        log.debug(f"Fetching cake by user: {user}")
        c = self.dbConn.cursor()
        c.execute(
            '''
			SELECT ID, CakedayDate, User
			FROM cakedays
			WHERE User = ?
			''', (user, ))

        result = c.fetchone()
        if result is None or len(result) == 0:
            log.debug("Cakeday not found")
            return None

        cakeday = Cakeday(user=result[2],
                          date_time=utils.parse_datetime_string(result[1]),
                          db_id=result[0])

        return cakeday
Exemplo n.º 19
0
def test_remove_reminder(database, reddit):
    reminder1 = Reminder(
        source="https://www.reddit.com/message/messages/XXXXX",
        message="KKKKK",
        user="******",
        requested_date=utils.parse_datetime_string("2019-01-01 04:00:00"),
        target_date=utils.parse_datetime_string("2019-01-04 05:00:00"))
    reminder2 = Reminder(
        source="https://www.reddit.com/message/messages/YYYYY",
        message="FFFFF",
        user="******",
        requested_date=utils.parse_datetime_string("2019-02-02 06:00:00"),
        target_date=utils.parse_datetime_string("2019-02-05 07:00:00"))
    reminder3 = Reminder(
        source="https://www.reddit.com/message/messages/ZZZZZ",
        message="JJJJJ",
        user="******",
        requested_date=utils.parse_datetime_string("2019-03-02 06:00:00"),
        target_date=utils.parse_datetime_string("2019-03-05 07:00:00"))
    database.save_reminder(reminder1)
    database.save_reminder(reminder2)
    database.save_reminder(reminder3)

    message = reddit_test.RedditObject(body=f"Remove! test",
                                       author="Watchful2")
    messages.process_message(message, reddit, database)
    assert "I couldn't find a reminder id to remove." in message.get_first_child(
    ).body

    message = reddit_test.RedditObject(body=f"Remove! {reminder1.db_id}",
                                       author="Watchful2")
    messages.process_message(message, reddit, database)
    assert "It looks like you don't own this reminder or it doesn't exist." in message.get_first_child(
    ).body

    message = reddit_test.RedditObject(body=f"Remove! {reminder1.db_id}",
                                       author="Watchful1")
    messages.process_message(message, reddit, database)
    assert "Reminder deleted." in message.get_first_child().body

    assert len(database.get_user_reminders("Watchful1")) == 1
    assert len(database.get_user_reminders("Watchful2")) == 1
Exemplo n.º 20
0
                cal = pdt.Calendar()
                holdTime = cal.parse(time_string, current)
                old_date = time.strftime('%Y-%m-%d %H:%M:%S', holdTime[0])
            except Exception:
                old_date = "None"

            try:
                new_date = utils.get_datetime_string(
                    utils.parse_time(time_string, current, None),
                    format_string='%Y-%m-%d %H:%M:%S')
            except Exception:
                new_date = "None"

            if old_date != new_date and old_date != utils.get_datetime_string(
                    current, format_string='%Y-%m-%d %H:%M:%S'):
                old_date_time = utils.parse_datetime_string(old_date)
                new_date_time = utils.parse_datetime_string(new_date)
                if old_date_time is None or new_date_time is None or \
                  not (old_date_time.replace(year=1, month=1, day=1) == current_hour and
                  new_date_time.replace(year=1, month=1, day=1) == zero_hour):
                    log.info(
                        f"{old_date.ljust(19)} | {new_date.ljust(19)} | {time_string}"
                    )
#{utils.reddit_link(comment['permalink']).ljust(120)} |
        count += 1
        # if count % 1000 == 0:
        # 	log.info("comments: {}, {}".format(count, datetime.fromtimestamp(previousEpoch).strftime("%Y-%m-%d")))
        if count > 2000:
            breakOut = True
            break
    if breakOut:
Exemplo n.º 21
0
import sys
from dateparser.search import search_dates

log = discord_logging.init_logging()

import utils

cal = parsedatetime.Calendar()

input_string = '''RemindMe May 7, 2021 16:00 PM "Reminder, an AMA with Shane Mauss, Dr. Peter McGraw - Comedian Shane Mauss Dr. Peter McGraw behavioral economist to start in /r/IAmA right now!"'''
base_time_string = None  #"2020-07-25 20:00:00 -0800"
timezone_string = None  #"America/Los_Angeles"

if base_time_string:
    base_time = utils.datetime_as_timezone(
        utils.parse_datetime_string(base_time_string, False,
                                    '%Y-%m-%d %H:%M:%S %z'), "UTC")
else:
    base_time = utils.datetime_now()

format_string = '%Y-%m-%d %H:%M:%S %Z'

log.info(f"Input string: {input_string}")
times = re.findall(r'(?:remindme.? +)(.*?)(?:\[|\n|\"|“|$)',
                   input_string.lower(),
                   flags=re.IGNORECASE)
if len(times) > 0 and times[0] != "":
    log.info(f"Result: {times[0]}")
    time_string = times[0][:50]
    log.info(f"Result truncated: {time_string}")
else:
    log.info(f"No string found")
Exemplo n.º 22
0
def database_get_seen(database):
    result = database.get_keystore("remindme_comment")
    if result is None:
        log.warning("Comment time not in database, returning now")
        return utils.datetime_now()
    return utils.parse_datetime_string(result)
Exemplo n.º 23
0
def test_update_incorrect_comments(database, reddit):
    comment_id1 = reddit_test.random_id()
    thread_id1 = reddit_test.random_id()
    comment1 = reddit_test.RedditObject(
        body=f"{static.TRIGGER}! 1 day",
        author="Watchful1",
        created=utils.datetime_now(),
        id=comment_id1,
        link_id="t3_" + thread_id1,
        permalink=f"/r/test/{thread_id1}/_/{comment_id1}/",
        subreddit="test")
    reddit.add_comment(comment1)
    comments.process_comment(comment1.get_pushshift_dict(), reddit, database)

    comment_id2 = reddit_test.random_id()
    thread_id2 = reddit_test.random_id()
    comment2 = reddit_test.RedditObject(
        body=f"{static.TRIGGER}! 1 day",
        author="Watchful1",
        created=utils.datetime_now(),
        id=comment_id2,
        link_id="t3_" + thread_id2,
        permalink=f"/r/test/{thread_id2}/_/{comment_id2}/",
        subreddit="test")
    reddit.add_comment(comment2)
    comments.process_comment(comment2.get_pushshift_dict(), reddit, database)

    comment_id3 = reddit_test.random_id()
    thread_id3 = reddit_test.random_id()
    comment3 = reddit_test.RedditObject(
        body=f"{static.TRIGGER}! 1 day",
        author="Watchful1",
        created=utils.datetime_now(),
        id=comment_id3,
        link_id="t3_" + thread_id3,
        permalink=f"/r/test/{thread_id3}/_/{comment_id3}/",
        subreddit="test")
    reddit.add_comment(comment3)
    comments.process_comment(comment3.get_pushshift_dict(), reddit, database)

    reminders = [
        Reminder(
            source="https://www.reddit.com/message/messages/XXXXX",
            message=utils.reddit_link(comment1.permalink),
            user=database.get_or_add_user("Watchful1"),
            requested_date=utils.parse_datetime_string("2019-01-01 04:00:00"),
            target_date=utils.parse_datetime_string("2019-01-05 05:00:00")),
        Reminder(
            source="https://www.reddit.com/message/messages/XXXXX",
            message=utils.reddit_link(comment1.permalink),
            user=database.get_or_add_user("Watchful1"),
            requested_date=utils.parse_datetime_string("2019-01-01 04:00:00"),
            target_date=utils.parse_datetime_string("2019-01-06 05:00:00")),
        Reminder(
            source="https://www.reddit.com/message/messages/XXXXX",
            message=utils.reddit_link(comment1.permalink),
            user=database.get_or_add_user("Watchful1"),
            requested_date=utils.parse_datetime_string("2019-01-01 04:00:00"),
            target_date=utils.parse_datetime_string("2019-01-07 05:00:00")),
        Reminder(
            source="https://www.reddit.com/message/messages/XXXXX",
            message=utils.reddit_link(comment2.permalink),
            user=database.get_or_add_user("Watchful1"),
            requested_date=utils.parse_datetime_string("2019-01-01 04:00:00"),
            target_date=utils.parse_datetime_string("2019-01-08 05:00:00")),
        Reminder(
            source="https://www.reddit.com/message/messages/XXXXX",
            message=utils.reddit_link(comment2.permalink),
            user=database.get_or_add_user("Watchful1"),
            requested_date=utils.parse_datetime_string("2019-01-01 04:00:00"),
            target_date=utils.parse_datetime_string("2019-01-09 05:00:00"))
    ]
    for reminder in reminders:
        database.add_reminder(reminder)

    comments.update_comments(reddit, database)

    assert "3 OTHERS CLICKED THIS LINK" in reddit.get_comment(
        comment_id1).get_first_child().body
    assert "2 OTHERS CLICKED THIS LINK" in reddit.get_comment(
        comment_id2).get_first_child().body
    assert "CLICK THIS LINK" in reddit.get_comment(
        comment_id3).get_first_child().body
Exemplo n.º 24
0
            if response.status_code != 200:
                log.warning(
                    f"Bad response code, trying again: {response.status_code}")
                time.sleep(5)
                continue
            comments = response.json()['data']
            return comments
        except Exception as err:
            log.warning(f"Exception in request, trying again: {err}")
            time.sleep(5)
            continue
    log.warning(f"Hit 10 exceptions, giving up")
    return None


end_time = utils.parse_datetime_string("2021-01-01 00:00:00")
start_time = utils.parse_datetime_string("2021-04-01 00:00:00")
log.info(
    f"Counting comments from {utils.get_datetime_string(start_time, False)} to {utils.get_datetime_string(end_time, False)}, {int((start_time - end_time).total_seconds())} seconds"
)
current_time = start_time

current_count = 0
while current_time > end_time:
    current_comments = get_comments(current_time)
    if current_comments is None:
        break
    ingest_delay_seconds = int(
        (utils.datetime_from_timestamp(current_comments[0]['retrieved_on']) -
         utils.datetime_from_timestamp(
             current_comments[0]['created_utc'])).total_seconds())
Exemplo n.º 25
0
new_c.execute(Database.tables['reminders'])

default_comment = "Hello, I'm here to remind you to see the parent comment!"
info_page = "http://np.reddit.com/r/RemindMeBot/comments/24duzp/remindmebot_info/"

startTime = time.perf_counter()
loop = 0
count_default_comment = 0
count_info_page = 0
for row in old_c.execute('''
	SELECT permalink, message, new_date, origin_date, userID
	FROM message_date
	'''):
    loop += 1
    reminder = Reminder(source=row[0],
                        target_date=utils.parse_datetime_string(row[2]),
                        message=row[1],
                        user=row[4],
                        requested_date=utils.parse_datetime_string(row[3]))
    try:
        if isinstance(reminder.message, (bytes, bytearray)):
            reminder.message = reminder.message.decode("utf-8")
        reminder.message = reminder.message.strip(' "')
        if reminder.message == default_comment:
            count_default_comment += 1
            reminder.message = None

        if isinstance(reminder.source, (bytes, bytearray)):
            reminder.source = reminder.source.decode("utf-8")
        if reminder.source == info_page:
            count_info_page += 1
Exemplo n.º 26
0
def test_send_cakedays(database, reddit):
	cakedays = [
		Cakeday(
			user="******",
			date_time=utils.parse_datetime_string("2019-01-01 04:00:00")
		),
		Cakeday(
			user="******",
			date_time=utils.parse_datetime_string("2019-01-02 04:00:00")
		),
		Cakeday(
			user="******",
			date_time=utils.parse_datetime_string("2019-01-03 04:00:00")
		),
		Cakeday(
			user="******",
			date_time=utils.parse_datetime_string("2019-01-04 04:00:00")
		)
	]
	for cakeday in cakedays:
		database.add_cakeday(cakeday)

	utils.debug_time = utils.parse_datetime_string("2019-01-01 02:00:00")
	notifications.send_cakeday_notifications(reddit, database)
	assert len(reddit.sent_messages) == 0

	utils.debug_time = utils.parse_datetime_string("2019-01-01 06:00:00")
	notifications.send_cakeday_notifications(reddit, database)
	assert len(reddit.sent_messages) == 1
	assert database.get_cakeday("Watchful1").date_time == utils.parse_datetime_string("2020-01-01 04:00:00")

	utils.debug_time = utils.parse_datetime_string("2019-01-03 06:00:00")
	notifications.send_cakeday_notifications(reddit, database)
	assert len(reddit.sent_messages) == 3
	assert database.get_cakeday("Watchful1").date_time == utils.parse_datetime_string("2020-01-01 04:00:00")
	assert database.get_cakeday("Watchful2").date_time == utils.parse_datetime_string("2020-01-02 04:00:00")
	assert database.get_cakeday("Watchful4").date_time == utils.parse_datetime_string("2019-01-04 04:00:00")
Exemplo n.º 27
0
	def get_incorrect_comments(self, count):
		log.debug(f"Fetching incorrect comments")
		c = self.dbConn.cursor()
		results = []
		for row in c.execute('''
			SELECT cm.ID,
				cm.ThreadID,
				cm.CommentID,
				cm.ReminderId,
				cm.CurrentCount,
				cm.User,
				cm.Source,
				rm.ID,
				rm.Source,
				rm.RequestedDate,
				rm.TargetDate,
				rm.Message,
				rm.User,
				rm.Defaulted,
				rm.TimeZone,
				rm.NewCount
			FROM comments cm
			LEFT JOIN
				(
					SELECT rm1.ID,
						rm1.Source,
						rm1.RequestedDate,
						rm1.TargetDate,
						rm1.Message,
						rm1.User,
						rm1.Defaulted,
						us.TimeZone,
						count(*) as NewCount
					FROM reminders rm1
						INNER JOIN reminders rm2
							ON rm1.Source = rm2.Message
						LEFT JOIN user_settings us
							ON us.User = rm1.User
					GROUP BY rm1.ID
				) AS rm
					ON cm.ReminderId = rm.ID
			WHERE rm.NewCount != cm.CurrentCount
			LIMIT ?
			''', (count,)):
			db_comment = DbComment(
				thread_id=row[1],
				comment_id=row[2],
				reminder_id=row[3],
				user=row[5],
				source=row[6],
				current_count=row[4],
				db_id=row[0]
			)
			reminder = Reminder(
				source=row[8],
				target_date=utils.parse_datetime_string(row[10]),
				message=row[11],
				user=row[12],
				db_id=row[7],
				requested_date=utils.parse_datetime_string(row[9]),
				count_duplicates=row[15],
				thread_id=row[1],
				timezone=row[14],
				defaulted=row[13] == 1
			)
			results.append((db_comment, reminder))

		log.debug(f"Found incorrect comments: {len(results)}")
		return results
Exemplo n.º 28
0
def test_send_reminders(database, reddit):
    reminders = [
        Reminder(
            source="https://www.reddit.com/message/messages/XXXXX",
            message="KKKKK",
            user=database.get_or_add_user("Watchful1"),
            requested_date=utils.parse_datetime_string("2019-01-01 04:00:00"),
            target_date=utils.parse_datetime_string("2019-01-05 05:00:00")),
        Reminder(
            source="https://www.reddit.com/message/messages/XXXXX",
            message="KKKKK",
            user=database.get_or_add_user("Watchful1"),
            requested_date=utils.parse_datetime_string("2019-01-01 04:00:00"),
            target_date=utils.parse_datetime_string("2019-01-06 05:00:00")),
        Reminder(
            source="https://www.reddit.com/message/messages/XXXXX",
            message="KKKKK",
            user=database.get_or_add_user("Watchful1"),
            requested_date=utils.parse_datetime_string("2019-01-01 04:00:00"),
            target_date=utils.parse_datetime_string("2019-01-07 05:00:00")),
        Reminder(
            source="https://www.reddit.com/message/messages/XXXXX",
            message="KKKKK",
            user=database.get_or_add_user("Watchful1"),
            requested_date=utils.parse_datetime_string("2019-01-01 04:00:00"),
            target_date=utils.parse_datetime_string("2019-01-08 05:00:00")),
        Reminder(
            source="https://www.reddit.com/message/messages/XXXXX",
            message="KKKKK",
            user=database.get_or_add_user("Watchful1"),
            requested_date=utils.parse_datetime_string("2019-01-01 04:00:00"),
            target_date=utils.parse_datetime_string("2019-01-09 05:00:00"))
    ]
    for reminder in reminders:
        database.add_reminder(reminder)

    utils.debug_time = utils.parse_datetime_string("2019-01-05 12:00:00")
    notifications.send_reminders(reddit, database)

    assert len(database.get_all_user_reminders("Watchful1")) == 4

    utils.debug_time = utils.parse_datetime_string("2019-01-08 12:00:00")
    notifications.send_reminders(reddit, database)

    assert len(database.get_all_user_reminders("Watchful1")) == 1
Exemplo n.º 29
0
            if response.status_code != 200:
                log.warning(
                    f"Bad response code, trying again: {response.status_code}")
                time.sleep(5)
                continue
            comments = response.json()['data']
            return comments
        except Exception as err:
            log.warning(f"Exception in request, trying again: {err}")
            time.sleep(5)
            continue
    log.warning(f"Hit 10 exceptions, giving up")
    return None


end_time = utils.parse_datetime_string("2020-10-19 00:00:00")
start_time = utils.parse_datetime_string("2020-10-20 11:00:00")
log.info(
    f"Counting comments from {utils.get_datetime_string(start_time, False)} to {utils.get_datetime_string(end_time, False)}, {int((start_time - end_time).total_seconds())} seconds"
)
current_time = start_time

current_count = 0
while current_time > end_time:
    current_comments = get_comments(current_time)
    if current_comments is None:
        break
    ingest_delay_seconds = int(
        (utils.datetime_from_timestamp(current_comments[0]['retrieved_on']) -
         utils.datetime_from_timestamp(
             current_comments[0]['created_utc'])).total_seconds())
			response = requests.get(url, headers={'User-Agent': USER_AGENT}, timeout=10)
			if response.status_code != 200:
				log.warning(f"Bad response code, trying again: {response.status_code} : {url}")
				time.sleep(5)
				continue
			comments = response.json()['data']
			return comments
		except Exception as err:
			log.warning(f"Exception in request, trying again: {err}")
			time.sleep(5)
			continue
	log.warning(f"Hit 10 exceptions, giving up")
	return None


end_time = utils.parse_datetime_string("2021-06-03 02:45:00")
start_time = utils.datetime_now() - timedelta(seconds=30)
log.info(f"Counting comments from {utils.get_datetime_string(start_time, False)} to {utils.get_datetime_string(end_time, False)}, {int((start_time - end_time).total_seconds())} seconds")
current_time = start_time

current_count = 0
while current_time > end_time:
	current_comments = get_comments(current_time)
	if current_comments is None:
		break
	ingest_delay_seconds = int((utils.datetime_from_timestamp(current_comments[0]['retrieved_utc']) - utils.datetime_from_timestamp(current_comments[0]['created_utc'])).total_seconds())
	for comment in current_comments:
		comment_time = utils.datetime_from_timestamp(comment['created_utc'])
		if comment_time != current_time:
			log.info(f"{utils.get_datetime_string(current_time)}	{current_count}	{ingest_delay_seconds if current_count > 0 else 0}")
			current_count = 0