Exemplo n.º 1
0
def get_dates():
    """
        Return a dictionary containing count of submissions
        on each date
    """

    if request.vars.user_id and request.vars.custom:
        user_id = int(request.vars.user_id)
        custom = (request.vars.custom == "True")
    else:
        raise HTTP(400, "Bad request")
        return

    if custom:
        attribute = "submission.custom_user_id"
    else:
        attribute = "submission.user_id"

    sql_query = """
                    SELECT status, time_stamp, COUNT(*)
                    FROM submission
                    WHERE %s=%d
                    GROUP BY DATE(submission.time_stamp), submission.status;
                """ % (attribute, user_id)

    row = db.executesql(sql_query)
    total_submissions = {}

    # For day streak
    streak = max_streak = 0
    prev = curr = None

    # For accepted solutions streak
    curr_accepted_streak = utilities.get_accepted_streak(user_id, custom)
    max_accepted_streak = utilities.get_max_accepted_streak(user_id, custom)

    for i in row:

        if prev is None and streak == 0:
            prev = time.strptime(str(i[1]), "%Y-%m-%d %H:%M:%S")
            prev = datetime.date(prev.tm_year, prev.tm_mon, prev.tm_mday)
            streak = 1
        else:
            curr = time.strptime(str(i[1]), "%Y-%m-%d %H:%M:%S")
            curr = datetime.date(curr.tm_year, curr.tm_mon, curr.tm_mday)

            if (curr - prev).days == 1:
                streak += 1
            elif curr != prev:
                streak = 1

            prev = curr

        if streak > max_streak:
            max_streak = streak

        sub_date = str(i[1]).split()[0]
        if total_submissions.has_key(sub_date):
            total_submissions[sub_date][i[0]] = i[2]
            total_submissions[sub_date]["count"] += i[2]
        else:
            total_submissions[sub_date] = {}
            total_submissions[sub_date][i[0]] = i[2]
            total_submissions[sub_date]["count"] = i[2]

    today = datetime.datetime.today().date()

    # Check if the last streak is continued till today
    if prev is None or (today - prev).days > 1:
        streak = 0

    return dict(total=total_submissions,
                max_streak=max_streak,
                curr_streak=streak,
                curr_accepted_streak=curr_accepted_streak,
                max_accepted_streak=max_accepted_streak)
Exemplo n.º 2
0
def get_dates():
    """
        Return a dictionary containing count of submissions
        on each date
    """

    if request.extension != "json" or \
       request.vars.user_id is None or \
       request.vars.custom is None:
        raise HTTP(400, "Bad request")
        return

    user_id = int(request.vars.user_id)
    custom = (request.vars.custom == "True")

    stopstalk_handle = utilities.get_stopstalk_handle(user_id, custom)
    redis_cache_key = "get_dates_" + stopstalk_handle

    # Check if data is present in REDIS
    data = current.REDIS_CLIENT.get(redis_cache_key)
    if data:
        return json.loads(data)

    if custom:
        attribute = "submission.custom_user_id"
    else:
        attribute = "submission.user_id"

    sql_query = """
                    SELECT status, time_stamp, COUNT(*)
                    FROM submission
                    WHERE %s=%d
                    GROUP BY DATE(submission.time_stamp), submission.status;
                """ % (attribute, user_id)

    row = db.executesql(sql_query)
    total_submissions = {}

    # For day streak
    streak = max_streak = 0
    prev = curr = None

    # For accepted solutions streak
    curr_accepted_streak = utilities.get_accepted_streak(user_id, custom)
    max_accepted_streak = utilities.get_max_accepted_streak(user_id, custom)

    for i in row:

        if prev is None and streak == 0:
            prev = time.strptime(str(i[1]), "%Y-%m-%d %H:%M:%S")
            prev = datetime.date(prev.tm_year, prev.tm_mon, prev.tm_mday)
            streak = 1
        else:
            curr = time.strptime(str(i[1]), "%Y-%m-%d %H:%M:%S")
            curr = datetime.date(curr.tm_year, curr.tm_mon, curr.tm_mday)

            if (curr - prev).days == 1:
                streak += 1
            elif curr != prev:
                streak = 1

            prev = curr

        if streak > max_streak:
            max_streak = streak

        sub_date = str(i[1]).split()[0]
        if total_submissions.has_key(sub_date):
            total_submissions[sub_date][i[0]] = i[2]
            total_submissions[sub_date]["count"] += i[2]
        else:
            total_submissions[sub_date] = {}
            total_submissions[sub_date][i[0]] = i[2]
            total_submissions[sub_date]["count"] = i[2]

    today = datetime.datetime.today().date()

    # Check if the last streak is continued till today
    if prev is None or (today - prev).days > 1:
        streak = 0

    if custom is False:
        uetable = db.user_editorials
        query = (uetable.user_id == user_id) & \
                (uetable.verification == "accepted")
        user_editorials = db(query).select()

        for editorial in user_editorials:
            this_date = str(editorial.added_on).split()[0]
            if total_submissions.has_key(this_date):
                if total_submissions[this_date].has_key("EAC"):
                    total_submissions[this_date]["EAC"] += 1
                else:
                    total_submissions[this_date]["EAC"] = 1
                total_submissions[this_date]["count"] += 1
            else:
                total_submissions[this_date] = {"count": 1}
                total_submissions[this_date]["EAC"] = 1

    data = dict(total=total_submissions,
                max_streak=max_streak,
                curr_streak=streak,
                curr_accepted_streak=curr_accepted_streak,
                max_accepted_streak=max_accepted_streak)

    current.REDIS_CLIENT.set(redis_cache_key,
                             json.dumps(data, separators=(",", ":")),
                             ex=5 * 60 * 60)
    return data
Exemplo n.º 3
0
def get_dates():
    """
        Return a dictionary containing count of submissions
        on each date
    """

    if len(request.args) != 1:
        if auth.is_logged_in():
            handle = str(session.handle)
        else:
            redirect(URL("default", "index"))
    else:
        handle = str(request.args[0])

    sql_query = """
                    SELECT status, time_stamp, COUNT(*)
                    FROM submission
                    WHERE submission.stopstalk_handle='%s'
                    GROUP BY DATE(submission.time_stamp), submission.status;
                """ % (handle)

    row = db.executesql(sql_query)
    total_submissions = {}

    # For day streak
    streak = max_streak = 0
    prev = curr = None

    # For accepted solutions streak
    curr_accepted_streak = utilities.get_accepted_streak(handle)
    max_accepted_streak = utilities.get_max_accepted_streak(handle)

    for i in row:

        if prev is None and streak == 0:
            prev = time.strptime(str(i[1]), "%Y-%m-%d %H:%M:%S")
            prev = datetime.date(prev.tm_year, prev.tm_mon, prev.tm_mday)
            streak = 1
        else:
            curr = time.strptime(str(i[1]), "%Y-%m-%d %H:%M:%S")
            curr = datetime.date(curr.tm_year, curr.tm_mon, curr.tm_mday)

            if (curr - prev).days == 1:
                streak += 1
            elif curr != prev:
                streak = 1

            prev = curr

        if streak > max_streak:
            max_streak = streak

        sub_date = str(i[1]).split()[0]
        if total_submissions.has_key(sub_date):
            total_submissions[sub_date][i[0]] = i[2]
            total_submissions[sub_date]["count"] += i[2]
        else:
            total_submissions[sub_date] = {}
            total_submissions[sub_date][i[0]] = i[2]
            total_submissions[sub_date]["count"] = i[2]

    today = datetime.datetime.today().date()

    # Check if the last streak is continued till today
    if prev is None or (today - prev).days > 1:
        streak = 0

    return dict(total=total_submissions,
                max_streak=max_streak,
                curr_streak=streak,
                curr_accepted_streak=curr_accepted_streak,
                max_accepted_streak=max_accepted_streak)
Exemplo n.º 4
0
def get_dates():
    """
        Return a dictionary containing count of submissions
        on each date
    """

    if request.vars.user_id and request.vars.custom:
        user_id = int(request.vars.user_id)
        custom = (request.vars.custom == "True")
    else:
        raise HTTP(400, "Bad request")
        return

    if custom:
        attribute = "submission.custom_user_id"
    else:
        attribute = "submission.user_id"

    sql_query = """
                    SELECT status, time_stamp, COUNT(*)
                    FROM submission
                    WHERE %s=%d
                    GROUP BY DATE(submission.time_stamp), submission.status;
                """ % (attribute, user_id)

    row = db.executesql(sql_query)
    total_submissions = {}

    # For day streak
    streak = max_streak = 0
    prev = curr = None

    # For accepted solutions streak
    curr_accepted_streak = utilities.get_accepted_streak(user_id, custom)
    max_accepted_streak = utilities.get_max_accepted_streak(user_id, custom)

    for i in row:

        if prev is None and streak == 0:
            prev = time.strptime(str(i[1]), "%Y-%m-%d %H:%M:%S")
            prev = datetime.date(prev.tm_year, prev.tm_mon, prev.tm_mday)
            streak = 1
        else:
            curr = time.strptime(str(i[1]), "%Y-%m-%d %H:%M:%S")
            curr = datetime.date(curr.tm_year, curr.tm_mon, curr.tm_mday)

            if (curr - prev).days == 1:
                streak += 1
            elif curr != prev:
                streak = 1

            prev = curr

        if streak > max_streak:
            max_streak = streak

        sub_date = str(i[1]).split()[0]
        if total_submissions.has_key(sub_date):
            total_submissions[sub_date][i[0]] = i[2]
            total_submissions[sub_date]["count"] += i[2]
        else:
            total_submissions[sub_date] = {}
            total_submissions[sub_date][i[0]] = i[2]
            total_submissions[sub_date]["count"] = i[2]

    today = datetime.datetime.today().date()

    # Check if the last streak is continued till today
    if prev is None or (today - prev).days > 1:
        streak = 0

    return dict(total=total_submissions,
                max_streak=max_streak,
                curr_streak=streak,
                curr_accepted_streak=curr_accepted_streak,
                max_accepted_streak=max_accepted_streak)