def test_seconds_to_human():
    payload = 0
    assert time.seconds_to_human(payload) == '0 seconds ago'

    payload = 10000
    assert time.seconds_to_human(payload) == '2 hours, 46 minutes ago'

    payload = -2938124
    assert time.seconds_to_human(payload) == 'in 1 month, 3 days'
Example #2
0
def test_time_timedelta_formatter():
    payload = 10000
    assert time.seconds_to_human(payload) == '2 hours, 46 minutes ago'

    payload = -2938124
    assert time.seconds_to_human(payload) == 'in 1 month, 3 days'

    payload = datetime.timedelta(hours=4)
    assert time.seconds_to_human(payload) == '4 hours ago'

    payload = datetime.timedelta(hours=-4)
    assert time.seconds_to_human(payload) == 'in 4 hours'

    payload = datetime.timedelta(days=4)
    assert time.seconds_to_human(payload) == '4 days ago'

    payload = datetime.timedelta(days=4, hours=26)
    assert time.seconds_to_human(payload) == '5 days, 2 hours ago'

    payload = datetime.timedelta(days=4, hours=2, seconds=123)
    assert time.seconds_to_human(payload) == '4 days, 2 hours ago'

    payload = datetime.timedelta(days=4, seconds=123)
    assert time.seconds_to_human(payload) == '4 days, 2 minutes ago'

    payload = datetime.timedelta(days=365, seconds=5)
    assert time.seconds_to_human(payload) == '1 year, 5 seconds ago'
Example #3
0
def test_time_timedelta_formatter():
    payload = 10000
    assert seconds_to_human(payload) == '2 hours, 46 minutes ago'

    payload = -2938124
    assert seconds_to_human(payload) == 'in 1 month, 3 days'

    payload = timedelta(hours=4)
    assert seconds_to_human(payload) == '4 hours ago'

    payload = timedelta(hours=-4)
    assert seconds_to_human(payload) == 'in 4 hours'
Example #4
0
def seen(bot, trigger):
    """Reports when and where the user was last seen."""
    if not trigger.group(2):
        bot.reply("Use `%sseen <nick>` to know when <nick> was last seen." %
                  bot.settings.core.help_prefix)
        return

    nick = trigger.group(2).strip()
    if nick == bot.nick:
        bot.reply("I'm right here!")
        return

    timestamp = bot.db.get_nick_value(nick, 'seen_timestamp')
    if not timestamp:
        bot.reply("Sorry, I haven't seen {nick} around.".format(nick=nick))
        return

    channel = bot.db.get_nick_value(nick, 'seen_channel')
    message = bot.db.get_nick_value(nick, 'seen_message')
    action = bot.db.get_nick_value(nick, 'seen_action')

    saw = datetime.datetime.utcfromtimestamp(timestamp)
    delta = seconds_to_human((trigger.time - saw).total_seconds())

    msg = "I last saw " + nick
    if bot.make_identifier(channel) == trigger.sender:
        if action:
            msg += " in here {since}, doing: {nick} {action}".format(
                since=delta, nick=nick, action=message)
        else:
            msg += " in here {since}, saying: {message}".format(
                since=delta, message=message)
    else:
        msg += " in another channel {since}.".format(since=delta)
    bot.say(msg)
def test_seconds_to_human_granularity():
    assert time.seconds_to_human(3672) == '1 hour, 1 minute ago'
    assert time.seconds_to_human(3672, 3) == '1 hour, 1 minute, 12 seconds ago'
    assert time.seconds_to_human(3672, 1) == '1 hour ago'

    assert time.seconds_to_human(-3672) == 'in 1 hour, 1 minute'
    assert time.seconds_to_human(-3672, 3) == 'in 1 hour, 1 minute, 12 seconds'
    assert time.seconds_to_human(-3672, 1) == 'in 1 hour'
def test_seconds_to_human_timedelta():
    payload = datetime.timedelta(hours=4)
    assert time.seconds_to_human(payload) == '4 hours ago'

    payload = datetime.timedelta(hours=-4)
    assert time.seconds_to_human(payload) == 'in 4 hours'

    payload = datetime.timedelta(days=4)
    assert time.seconds_to_human(payload) == '4 days ago'

    payload = datetime.timedelta(days=4, hours=26)
    assert time.seconds_to_human(payload) == '5 days, 2 hours ago'

    payload = datetime.timedelta(days=4, hours=2, seconds=123)
    assert time.seconds_to_human(payload) == '4 days, 2 hours ago'

    payload = datetime.timedelta(days=4, seconds=123)
    assert time.seconds_to_human(payload) == '4 days, 2 minutes ago'

    payload = datetime.timedelta(days=365, seconds=5)
    assert time.seconds_to_human(payload) == '1 year, 5 seconds ago'
Example #7
0
def fetch_user(query):
    if not query:
        return "No search query provided."

    try:
        user = requests.get(api + uFilter % query, timeout=(10.0, 4.0))
    except requests.exceptions.ConnectTimeout:
        return "Connection timed out."
    except requests.exceptions.ConnectionError:
        return "Could not connect to server."
    except requests.exceptions.ReadTimeout:
        return "Server took too long to send results."

    try:
        user.raise_for_status()
    except requests.exceptions.HTTPError as e:
        return "HTTP error: " + e.message

    try:
        uData = user.json()
    except ValueError:
        return user.content

    try:
        uEntry = uData['data'][0]
    except IndexError:
        return "No results found."

    uid = uEntry['id']
    slug = uEntry['attributes']['slug']
    userName = uEntry['attributes']['name']

    waifuOrHusbando = uEntry['attributes'].get('waifuOrHusbando')
    if waifuOrHusbando:
        waifu = uData['included'][0]['attributes'].get('canonicalName')
    else:
        waifu = 'Not set!'

    statsLink = api + 'users/' + uid + sFilter
    stats = requests.get(statsLink)

    try:
        sData = stats.json()
    except ValueError:
        return stats.content

    try:
        sEntry = sData['data'][0]
        seconds = sEntry['attributes']['statsData'].get('time')
        lwoa = time.seconds_to_human(seconds)[:
                                              -4]  # Remove " ago" from the end

        libraryLink = api + 'users/' + uid + lFilter
        library = requests.get(libraryLink)
        lData = library.json()
        l0Name = lData['included'][0]['attributes'].get('canonicalTitle', None)
        if l0Name:
            l0Prog = lData['data'][0]['attributes'].get('progress')
            slug += '. Last Updated: {l0Name} to {l0Prog}'.format(
                l0Name=l0Name, l0Prog=l0Prog)
        l1Name = lData['included'][1]['attributes'].get('canonicalTitle', None)
        if l1Name:
            l1Prog = lData['data'][1]['attributes'].get('progress')
            slug += ', {l1Name} to {l1Prog}'.format(l1Name=l1Name,
                                                    l1Prog=l1Prog)
        l2Name = lData['included'][2]['attributes'].get('canonicalTitle', None)
        if l2Name:
            l2Prog = lData['data'][2]['attributes'].get('progress')
            slug += ', {l2Name} to {l2Prog}'.format(l2Name=l2Name,
                                                    l2Prog=l2Prog)
    except IndexError:
        return "No stats found for this user."

    return (
        "{userName}'s {waifuOrHusbando} is {waifu}, and they have wasted {lwoa} of their life on Japanese "
        "cartoons. Tell {userName} how much of a weeb they are at https://kitsu.io/users/{slug}"
        .format(userName=userName,
                waifuOrHusbando=waifuOrHusbando.lower(),
                waifu=waifu,
                lwoa=lwoa,
                slug=slug))