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)
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
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)