mirror of
https://github.com/reddit-archive/reddit.git
synced 2026-01-28 08:17:58 -05:00
Added support for multiple reddit names in the url. For example,
http://www.reddit.com/r/programming+politics Removed all the query_rules functions and references to them.
This commit is contained in:
@@ -241,7 +241,7 @@ class DomainMiddleware(object):
|
||||
|
||||
|
||||
class SubredditMiddleware(object):
|
||||
sr_pattern = re.compile(r'^/r/([^/]{3,20})')
|
||||
sr_pattern = re.compile(r'^/r/([^/]{3,})')
|
||||
|
||||
def __init__(self, app):
|
||||
self.app = app
|
||||
|
||||
@@ -77,13 +77,19 @@ class FrontController(RedditController):
|
||||
def GET_random(self):
|
||||
"""The Serendipity button"""
|
||||
n = rand.randint(0, 9)
|
||||
links = Link._query(*c.site.query_rules())
|
||||
links._sort = desc('_date') if n > 5 else desc('_hot')
|
||||
links._limit = 50
|
||||
links = list(links)
|
||||
l = links[rand.randint(0, len(links)-1)]
|
||||
l._load()
|
||||
return self.redirect(l.url)
|
||||
sort = 'new' if n > 5 else 'hot'
|
||||
links = c.site.get_links(sort, 'all')
|
||||
if isinstance(links, thing.Query):
|
||||
links._limit = 25
|
||||
links = [x._fullname for x in links]
|
||||
else:
|
||||
links = links[:25]
|
||||
if links:
|
||||
name = links[rand.randint(0, min(24, len(links)-1))]
|
||||
link = Link._by_fullname(name, data = True)
|
||||
return self.redirect(link.url)
|
||||
else:
|
||||
return self.redirect('/')
|
||||
|
||||
def GET_password(self):
|
||||
"""The 'what is my password' page"""
|
||||
@@ -253,9 +259,9 @@ class FrontController(RedditController):
|
||||
comments = Comment._query(Comment.c.reported != 0,
|
||||
Comment.c._spam == False)
|
||||
query = thing.Merge((links, comments),
|
||||
Link.c.sr_id == c.site._id,
|
||||
sort = desc('_date'),
|
||||
data = True,
|
||||
*c.site.query_rules())
|
||||
data = True)
|
||||
|
||||
builder = QueryBuilder(query, num = num, after = after,
|
||||
count = count, reverse = reverse,
|
||||
@@ -267,9 +273,9 @@ class FrontController(RedditController):
|
||||
links = Link._query(Link.c._spam == True)
|
||||
comments = Comment._query(Comment.c._spam == True)
|
||||
query = thing.Merge((links, comments),
|
||||
Link.c.sr_id == c.site._id,
|
||||
sort = desc('_date'),
|
||||
data = True,
|
||||
*c.site.query_rules())
|
||||
data = True)
|
||||
|
||||
builder = QueryBuilder(query, num = num, after = after,
|
||||
count = count, reverse = reverse,
|
||||
|
||||
@@ -217,9 +217,7 @@ def set_subreddit():
|
||||
sr_name = request.environ.get("subreddit", request.POST.get('r'))
|
||||
domain = request.environ.get("domain")
|
||||
|
||||
#we can get rid of the sr_name == Default.name constraint if
|
||||
#you're reading this. it was there to fix a stale html issue.
|
||||
if not sr_name or sr_name == Default.name:
|
||||
if not sr_name:
|
||||
#check for cnames
|
||||
sub_domain = request.environ.get('sub_domain')
|
||||
sr = Subreddit._by_domain(sub_domain) if sub_domain else None
|
||||
@@ -229,7 +227,16 @@ def set_subreddit():
|
||||
c.site = Sub
|
||||
else:
|
||||
try:
|
||||
c.site = Subreddit._by_name(sr_name)
|
||||
if '+' in sr_name:
|
||||
srs = set()
|
||||
sr_names = sr_name.split('+')
|
||||
real_path = sr_name
|
||||
for sr_name in sr_names:
|
||||
srs.add(Subreddit._by_name(sr_name))
|
||||
sr_ids = [sr._id for sr in srs]
|
||||
c.site = MultiReddit(sr_ids, real_path)
|
||||
else:
|
||||
c.site = Subreddit._by_name(sr_name)
|
||||
except NotFound:
|
||||
c.site = Default
|
||||
redirect_to("/reddits/create?name=%s" % sr_name)
|
||||
|
||||
@@ -225,10 +225,6 @@ class Subreddit(Thing, Printable):
|
||||
sr_ids = (self._id,)
|
||||
return sr_ids
|
||||
|
||||
def query_rules(self):
|
||||
#really we mean Link.c.sr_id, but rules are type agnostic
|
||||
return (self.c.sr_id == self._id,)
|
||||
|
||||
def get_links(self, sort, time):
|
||||
from r2.lib.db import queries
|
||||
return queries.get_links(self, sort, time)
|
||||
@@ -442,12 +438,6 @@ class FriendsSR(FakeSubreddit):
|
||||
name = 'friends'
|
||||
title = 'friends'
|
||||
|
||||
def query_rules(self):
|
||||
if c.user_is_loggedin:
|
||||
return (self.c.author_id == c.user.friends,)
|
||||
else:
|
||||
return (self.c.sr_id == self.default_srs(c.content_langs, ids = True),)
|
||||
|
||||
def get_links(self, sort, time):
|
||||
from r2.lib.db import queries
|
||||
from r2.models import Link
|
||||
@@ -466,12 +456,6 @@ class AllSR(FakeSubreddit):
|
||||
name = 'all'
|
||||
title = 'all'
|
||||
|
||||
def query_rules(self):
|
||||
if c.content_langs != 'all':
|
||||
return (self.c.lang == c.content_langs,)
|
||||
else:
|
||||
return ()
|
||||
|
||||
def get_links(self, sort, time):
|
||||
from r2.models import Link
|
||||
from r2.lib.db import queries
|
||||
@@ -487,11 +471,6 @@ class DefaultSR(FakeSubreddit):
|
||||
path = '/'
|
||||
header = 'http://static.reddit.com/reddit.com.header.png'
|
||||
|
||||
def query_rules(self):
|
||||
user = c.user if c.user_is_loggedin else None
|
||||
subreddits = Subreddit.user_subreddits(user)
|
||||
return (self.c.sr_id == subreddits,)
|
||||
|
||||
def get_links_sr_ids(self, sr_ids, sort, time):
|
||||
from r2.lib.db import queries
|
||||
from r2.models import Link
|
||||
@@ -524,7 +503,6 @@ class DefaultSR(FakeSubreddit):
|
||||
def title(self):
|
||||
return _("reddit.com: what's new online!")
|
||||
|
||||
#TODO: I'm not sure this is the best way to do this
|
||||
class MaskedSR(DefaultSR):
|
||||
def set_mask(self, mask):
|
||||
self.show_sr = []
|
||||
@@ -541,13 +519,6 @@ class MaskedSR(DefaultSR):
|
||||
return_dict = False)
|
||||
self.hide_sr = [s._id for s in self.hide_sr]
|
||||
|
||||
def query_rules(self):
|
||||
user = c.user if c.user_is_loggedin else None
|
||||
subreddits = Subreddit.user_subreddits(user)
|
||||
subreddits = [s for s in subreddits if s not in self.hide_sr]
|
||||
subreddits.extend(self.show_sr)
|
||||
return (self.c.sr_id == subreddits,)
|
||||
|
||||
def get_links(self, sort, time):
|
||||
user = c.user if c.user_is_loggedin else None
|
||||
sr_ids = Subreddit.user_subreddits(user)
|
||||
@@ -555,6 +526,20 @@ class MaskedSR(DefaultSR):
|
||||
sr_ids.extend(self.show_sr)
|
||||
return self.get_links_sr_ids(sr_ids, sort, time)
|
||||
|
||||
class MultiReddit(DefaultSR):
|
||||
name = 'multi'
|
||||
|
||||
def __init__(self, sr_ids, path):
|
||||
DefaultSR.__init__(self)
|
||||
self.real_path = path
|
||||
self.sr_ids = sr_ids
|
||||
|
||||
@property
|
||||
def path(self):
|
||||
return '/r/' + self.real_path
|
||||
|
||||
def get_links(self, sort, time):
|
||||
return self.get_links_sr_ids(self.sr_ids, sort, time)
|
||||
|
||||
class SubSR(FakeSubreddit):
|
||||
stylesheet = 'subreddit.css'
|
||||
|
||||
Reference in New Issue
Block a user