mirror of
https://github.com/reddit-archive/reddit.git
synced 2026-04-27 03:00:12 -04:00
68 lines
2.4 KiB
Python
68 lines
2.4 KiB
Python
# "The contents of this file are subject to the Common Public Attribution
|
|
# License Version 1.0. (the "License"); you may not use this file except in
|
|
# compliance with the License. You may obtain a copy of the License at
|
|
# http://code.reddit.com/LICENSE. The License is based on the Mozilla Public
|
|
# License Version 1.1, but Sections 14 and 15 have been added to cover use of
|
|
# software over a computer network and provide for limited attribution for the
|
|
# Original Developer. In addition, Exhibit A has been modified to be consistent
|
|
# with Exhibit B.
|
|
#
|
|
# Software distributed under the License is distributed on an "AS IS" basis,
|
|
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
|
|
# the specific language governing rights and limitations under the License.
|
|
#
|
|
# The Original Code is Reddit.
|
|
#
|
|
# The Original Developer is the Initial Developer. The Initial Developer of the
|
|
# Original Code is CondeNet, Inc.
|
|
#
|
|
# All portions of the code written by CondeNet are Copyright (c) 2006-2008
|
|
# CondeNet, Inc. All Rights Reserved.
|
|
################################################################################
|
|
from pylons import g, c
|
|
from r2.models.link import Link, Subreddit
|
|
from r2.lib import utils
|
|
from r2.lib import count
|
|
|
|
from datetime import datetime
|
|
|
|
cache = g.cache
|
|
|
|
def calc_rising():
|
|
sr_count = count.get_link_counts()
|
|
link_count = dict((k, v[0]) for k,v in sr_count.iteritems())
|
|
link_names = Link._by_fullname(sr_count.keys(), data=True)
|
|
|
|
#max is half the average of the top 10 counts
|
|
counts = link_count.values()
|
|
counts.sort(reverse=True)
|
|
maxcount = sum(counts[:10]) / 20
|
|
|
|
#prune the list
|
|
rising = [(n, link_names[n].sr_id)
|
|
for n in link_names.keys() if link_count[n] < maxcount]
|
|
|
|
cur_time = datetime.now(g.tz)
|
|
|
|
def score(pair):
|
|
name = pair[0]
|
|
link = link_names[name]
|
|
hours = (cur_time - link._date).seconds / 3600 + 1
|
|
return float(link._ups) / (max(link_count[name], 1) * hours)
|
|
|
|
def r(x):
|
|
return 1 if x > 0 else -1 if x < 0 else 0
|
|
|
|
rising.sort(lambda x, y: r(score(y) - score(x)))
|
|
return rising
|
|
|
|
def set_rising():
|
|
rising = calc_rising()
|
|
cache.set('rising', rising)
|
|
|
|
def get_rising(sr):
|
|
#get the sr_ids
|
|
sr_ids = sr.rising_srs()
|
|
rising = cache.get('rising') or ()
|
|
return [p[0] for p in filter(lambda pair: pair[1] in sr_ids, rising)]
|