def testExcludeNegativeLookups(self): self.cache.get_multi.return_value = {"doesnotexist": Subreddit.SRNAME_NOTFOUND} with self.assertRaises(NotFound): Subreddit._by_name("doesnotexist") self.assertEqual(self.subreddit_query.call_count, 0) self.assertEqual(self.subreddit_byID.call_count, 0) self.assertEqual(self.cache.set_multi.call_count, 0)
def testCacheNegativeResults(self): self.cache.get_multi.return_value = {} self.subreddit_query.return_value = [] self.subreddit_byID.return_value = [] with self.assertRaises(NotFound): Subreddit._by_name("doesnotexist") self.cache.add_multi.assert_called_once_with( {"doesnotexist": Subreddit.SRNAME_NOTFOUND}, prefix="srid:")
def testExcludeNegativeLookups(self): self.cache.get_multi.return_value = { "doesnotexist": Subreddit.SRNAME_NOTFOUND } with self.assertRaises(NotFound): Subreddit._by_name("doesnotexist") self.assertEqual(self.subreddit_query.call_count, 0) self.assertEqual(self.subreddit_byID.call_count, 0) self.assertEqual(self.cache.add_multi.call_count, 0)
def testCacheNegativeResults(self): self.cache.get_multi.return_value = {} self.subreddit_query.return_value = [] self.subreddit_byID.return_value = [] with self.assertRaises(NotFound): Subreddit._by_name("doesnotexist") self.cache.set_multi.assert_called_once_with( {"doesnotexist": Subreddit.SRNAME_NOTFOUND}, prefix="srid:")
def set_subreddit(): #the r parameter gets added by javascript for POST requests so we #can reference c.site in api.py sr_name = request.environ.get("subreddit", request.POST.get('r')) domain = request.environ.get("domain") can_stale = request.method.upper() in ('GET', 'HEAD') c.site = Frontpage if not sr_name: #check for cnames cname = request.environ.get('legacy-cname') if cname: sr = Subreddit._by_domain(cname) or Frontpage domain = g.domain if g.domain_prefix: domain = ".".join((g.domain_prefix, domain)) redirect_to('http://%s%s' % (domain, sr.path), _code=301) elif sr_name == 'r': #reddits c.site = Sub elif '+' in sr_name: sr_names = sr_name.split('+') srs = set(Subreddit._by_name(sr_names, stale=can_stale).values()) if All in srs: c.site = All elif Friends in srs: c.site = Friends else: srs = [sr for sr in srs if not isinstance(sr, FakeSubreddit)] if len(srs) == 0: c.site = MultiReddit([], sr_name) elif len(srs) == 1: c.site = srs.pop() else: sr_ids = [sr._id for sr in srs] c.site = MultiReddit(sr_ids, sr_name) else: try: c.site = Subreddit._by_name(sr_name, stale=can_stale) except NotFound: sr_name = chksrname(sr_name) if sr_name: redirect_to("/reddits/search?q=%s" % sr_name) elif not c.error_page and not request.path.startswith( "/api/login/"): abort(404) #if we didn't find a subreddit, check for a domain listing if not sr_name and isinstance(c.site, DefaultSR) and domain: c.site = DomainSR(domain) if isinstance(c.site, FakeSubreddit): c.default_sr = True
def set_subreddit(): #the r parameter gets added by javascript for POST requests so we #can reference c.site in api.py sr_name = request.environ.get("subreddit", request.POST.get('r')) domain = request.environ.get("domain") can_stale = request.method.upper() in ('GET','HEAD') c.site = Frontpage if not sr_name: #check for cnames cname = request.environ.get('legacy-cname') if cname: sr = Subreddit._by_domain(cname) or Frontpage domain = g.domain if g.domain_prefix: domain = ".".join((g.domain_prefix, domain)) redirect_to('http://%s%s' % (domain, sr.path), _code=301) elif sr_name == 'r': #reddits c.site = Sub elif '+' in sr_name: sr_names = sr_name.split('+') srs = set(Subreddit._by_name(sr_names, stale=can_stale).values()) if All in srs: c.site = All elif Friends in srs: c.site = Friends else: srs = [sr for sr in srs if not isinstance(sr, FakeSubreddit)] if len(srs) == 0: c.site = MultiReddit([], sr_name) elif len(srs) == 1: c.site = srs.pop() else: sr_ids = [sr._id for sr in srs] c.site = MultiReddit(sr_ids, sr_name) else: try: c.site = Subreddit._by_name(sr_name, stale=can_stale) except NotFound: sr_name = chksrname(sr_name) if sr_name: redirect_to("/reddits/search?q=%s" % sr_name) elif not c.error_page and not request.path.startswith("/api/login/") : abort(404) #if we didn't find a subreddit, check for a domain listing if not sr_name and isinstance(c.site, DefaultSR) and domain: c.site = DomainSR(domain) if isinstance(c.site, FakeSubreddit): c.default_sr = True
def set_subreddit(): #the r parameter gets added by javascript for POST requests so we #can reference c.site in api.py sr_name = request.environ.get("subreddit", request.POST.get('r')) domain = request.environ.get("domain") can_stale = request.method.upper() in ('GET','HEAD') default_sr = DefaultSR() c.site = default_sr if not sr_name: #check for cnames sub_domain = request.environ.get('sub_domain') if sub_domain and not sub_domain.endswith(g.media_domain): c.site = Subreddit._by_domain(sub_domain) or default_sr elif sr_name == 'r': #reddits c.site = Sub else: try: if '+' in sr_name: srs = set() sr_names = sr_name.split('+') real_path = sr_name srs = Subreddit._by_name(sr_names, stale=can_stale).values() if len(srs) != len(sr_names): abort(404) elif any(isinstance(sr, FakeSubreddit) for sr in srs): if All in srs: c.site = All elif Friend in srs: c.site = Friend else: abort(400) else: sr_ids = [sr._id for sr in srs] c.site = MultiReddit(sr_ids, real_path) else: c.site = Subreddit._by_name(sr_name, stale=can_stale) except NotFound: sr_name = chksrname(sr_name) if sr_name: redirect_to("/reddits/search?q=%s" % sr_name) elif not c.error_page and not request.path.startswith("/api/login/") : abort(404) #if we didn't find a subreddit, check for a domain listing if not sr_name and isinstance(c.site, DefaultSR) and domain: c.site = DomainSR(domain) if isinstance(c.site, FakeSubreddit): c.default_sr = True
def set_subreddit(): #the r parameter gets added by javascript for POST requests so we #can reference c.site in api.py sr_name = request.environ.get("subreddit", request.POST.get('r')) domain = request.environ.get("domain") can_stale = request.method.upper() in ('GET','HEAD') default_sr = DefaultSR() c.site = default_sr if not sr_name: #check for cnames sub_domain = request.environ.get('sub_domain') if sub_domain and not sub_domain.endswith(g.media_domain): c.site = Subreddit._by_domain(sub_domain) or default_sr elif sr_name == 'r': #reddits c.site = Sub else: try: if '+' in sr_name: srs = set() sr_names = sr_name.split('+') real_path = sr_name srs = Subreddit._by_name(sr_names, stale=can_stale).values() if len(srs) != len(sr_names): abort(404) elif any(isinstance(sr, FakeSubreddit) for sr in srs): if All in srs: c.site = All elif Friend in srs: c.site = Friend else: abort(400) else: sr_ids = [sr._id for sr in srs] c.site = MultiReddit(sr_ids, real_path) else: c.site = Subreddit._by_name(sr_name, stale=can_stale) except NotFound: sr_name = chksrname(sr_name) if sr_name: redirect_to("/reddits/search?q=%s" % sr_name) elif not c.error_page: abort(404) #if we didn't find a subreddit, check for a domain listing if not sr_name and isinstance(c.site, DefaultSR) and domain: c.site = DomainSR(domain) if isinstance(c.site, FakeSubreddit): c.default_sr = True
def set_subreddit(): # the r parameter gets added by javascript for POST requests so we # can reference c.site in api.py sr_name = request.environ.get("subreddit", request.POST.get("r")) domain = request.environ.get("domain") can_stale = request.method.upper() in ("GET", "HEAD") default_sr = DefaultSR() c.site = default_sr if not sr_name: # check for cnames sub_domain = request.environ.get("sub_domain") if sub_domain and not sub_domain.endswith(g.media_domain): c.site = Subreddit._by_domain(sub_domain) or default_sr elif sr_name == "r": # reddits c.site = Sub elif "+" in sr_name: sr_names = sr_name.split("+") srs = set(Subreddit._by_name(sr_names, stale=can_stale).values()) if All in srs: c.site = All elif Friends in srs: c.site = Friends else: srs = [sr for sr in srs if not isinstance(sr, FakeSubreddit)] if len(srs) == 0: c.site = MultiReddit([], sr_name) elif len(srs) == 1: c.site = srs.pop() else: sr_ids = [sr._id for sr in srs] c.site = MultiReddit(sr_ids, sr_name) else: try: c.site = Subreddit._by_name(sr_name, stale=can_stale) except NotFound: sr_name = chksrname(sr_name) if sr_name: redirect_to("/reddits/search?q=%s" % sr_name) elif not c.error_page and not request.path.startswith("/api/login/"): abort(404) # if we didn't find a subreddit, check for a domain listing if not sr_name and isinstance(c.site, DefaultSR) and domain: c.site = DomainSR(domain) if isinstance(c.site, FakeSubreddit): c.default_sr = True
def set_subreddit(): #the r parameter gets added by javascript for POST requests so we #can reference c.site in api.py sr_name = request.environ.get("subreddit", request.POST.get('r')) domain = request.environ.get("domain") 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 c.site = sr or Default elif sr_name == 'r': #reddits c.site = Sub else: try: 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 if chksrname(sr_name): redirect_to("/categories/create?name=%s" % sr_name) elif not c.error_page: abort(404, "not found") #if we didn't find a subreddit, check for a domain listing if not sr_name and c.site == Default and domain: c.site = DomainSR(domain) if isinstance(c.site, FakeSubreddit): c.default_sr = True try: c.current_or_default_sr = Subreddit._by_name(g.default_sr) except NotFound: c.current_or_default_sr = None else: c.current_or_default_sr = c.site # check that the site is available: if c.site._spam and not c.user_is_admin and not c.error_page: abort(404, "not found")
def set_subreddit(): # the r parameter gets added by javascript for POST requests so we # can reference c.site in api.py sr_name = request.environ.get("subreddit", request.POST.get("r")) domain = request.environ.get("domain") c.site = Default if not sr_name: # check for cnames sub_domain = request.environ.get("sub_domain") if sub_domain and not sub_domain.endswith(g.media_domain): c.site = Subreddit._by_domain(sub_domain) or Default elif sr_name == "r": # reddits c.site = Sub else: try: if "+" in sr_name: srs = set() sr_names = sr_name.split("+") real_path = sr_name srs = Subreddit._by_name(sr_names).values() if len(srs) != len(sr_names): abort(404) elif any(isinstance(sr, FakeSubreddit) for sr in srs): if All in srs: c.site = All elif Friend in srs: c.site = Friend else: abort(400) else: 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: sr_name = chksrname(sr_name) if sr_name: redirect_to("/reddits/search?q=%s" % sr_name) elif not c.error_page: abort(404) # if we didn't find a subreddit, check for a domain listing if not sr_name and c.site == Default and domain: c.site = DomainSR(domain) if isinstance(c.site, FakeSubreddit): c.default_sr = True
def _add_multi_srs(self, multi, sr_datas): srs = Subreddit._by_name(sr_data['name'] for sr_data in sr_datas) for sr in srs.itervalues(): if isinstance(sr, FakeSubreddit): raise RedditError('MULTI_SPECIAL_SUBREDDIT', msg_params={'path': sr.path}, code=400) sr_props = {} for sr_data in sr_datas: try: sr = srs[sr_data['name']] except KeyError: raise RedditError('SUBREDDIT_NOEXIST', code=400) else: # name is passed in via the API data format, but should not be # stored on the model. del sr_data['name'] sr_props[sr] = sr_data try: multi.add_srs(sr_props) except TooManySubredditsError as e: raise RedditError('MULTI_TOO_MANY_SUBREDDITS', code=409) return sr_props
def GET_document(self): try: #no cookies on errors c.cookies.clear() code = request.GET.get('code', '') srname = request.GET.get('srname', '') if srname: c.site = Subreddit._by_name(srname) if c.render_style not in self.allowed_render_styles: return str(code) elif code == '403': return self.send403() elif code == '500': return redditbroke % rand_strings.sadmessages elif code == '503': c.response.status_code = 503 c.response.headers['Retry-After'] = 1 c.response.content = toofast return c.response elif code == '304': if request.GET.has_key('x-sup-id'): c.response.headers['x-sup-id'] = request.GET.get('x-sup-id') return c.response elif c.site: return self.send404() else: return "page not found" except: return handle_awful_failure("something really bad just happened.")
def GET_document(self): try: c.errors = c.errors or ErrorSet() # clear cookies the old fashioned way c.cookies = Cookies() code = request.GET.get('code', '') try: code = int(code) except ValueError: code = 404 srname = request.GET.get('srname', '') takedown = request.GET.get('takedown', "") # StatusBasedRedirect will override this anyway, but we need this # here for pagecache to see. response.status_int = code if srname: c.site = Subreddit._by_name(srname) if request.GET.has_key('allow_framing'): c.allow_framing = bool(request.GET['allow_framing'] == '1') if code in (204, 304): # NEVER return a content body on 204/304 or downstream # caches may become very confused. if request.GET.has_key('x-sup-id'): x_sup_id = request.GET.get('x-sup-id') if '\r\n' not in x_sup_id: response.headers['x-sup-id'] = x_sup_id return "" elif c.render_style not in self.allowed_render_styles: return str(code) elif c.render_style in extensions.API_TYPES: data = request.environ.get('extra_error_data', {'error': code}) if request.environ.get("WANT_RAW_JSON"): return scriptsafe_dumps(data) return websafe_json(json.dumps(data)) elif takedown and code == 404: link = Link._by_fullname(takedown) return pages.TakedownPage(link).render() elif code == 403: return self.send403() elif code == 429: return self.send429() elif code == 500: randmin = {'admin': random.choice(self.admins)} failien_url = make_failien_url() sad_message = safemarkdown(rand_strings.sadmessages % randmin) return redditbroke % (failien_url, sad_message) elif code == 503: return self.send503() elif c.site: return self.send404() else: return "page not found" except Exception as e: return handle_awful_failure("ErrorController.GET_document: %r" % e)
def subreddits_slow(self): if self._subreddits is not None: return self._subreddits sr_names = self.subreddit_names srs = Subreddit._by_name(sr_names).values() self._subreddits = srs return srs
def testSingleCached(self): subreddit = Subreddit(id=1, name="exists") self.cache.get_multi.return_value = {"exists": subreddit._id} self.subreddit_byID.return_value = [subreddit] ret = Subreddit._by_name("exists") self.assertEqual(ret, subreddit) self.assertEqual(self.subreddit_query.call_count, 0)
def testSingleFromDB(self): subreddit = Subreddit(id=1, name="exists") self.cache.get_multi.return_value = {} self.subreddit_query.return_value = [subreddit] self.subreddit_byID.return_value = [subreddit] ret = Subreddit._by_name("exists") self.assertEqual(ret, subreddit) self.assertEqual(self.cache.set_multi.call_count, 1)
def testSingleFromDB(self): subreddit = Subreddit(id=1, name="exists") self.cache.get_multi.return_value = {} self.subreddit_query.return_value = [subreddit] self.subreddit_byID.return_value = [subreddit] ret = Subreddit._by_name("exists") self.assertEqual(ret, subreddit) self.assertEqual(self.cache.add_multi.call_count, 1)
def testMultiSomeInvalid(self): sr = Subreddit(id=1, name="exists") self.cache.get_multi.return_value = {sr.name: sr._id} self.subreddit_query.return_value = [] self.subreddit_byID.return_value = [sr] ret = Subreddit._by_name(["exists", "_illegalunderscore"]) self.assertEqual(ret, {sr.name: sr}) self.assertEqual(self.cache.get_multi.call_count, 1) self.assertEqual(self.subreddit_query.call_count, 0)
def testMultiSomeDontExist(self): sr = Subreddit(id=1, name="exists") self.cache.get_multi.return_value = {sr.name: sr._id} self.subreddit_query.return_value = [] self.subreddit_byID.return_value = [sr] ret = Subreddit._by_name(["exists", "doesnt"]) self.assertEqual(ret, {sr.name: sr}) self.assertEqual(self.cache.get_multi.call_count, 1) self.assertEqual(self.subreddit_query.call_count, 1)
def testForceUpdate(self): sr = Subreddit(id=1, name="exists") self.cache.get_multi.return_value = {sr.name: sr._id} self.subreddit_query.return_value = [sr] self.subreddit_byID.return_value = [sr] ret = Subreddit._by_name("exists", _update=True) self.assertEqual(ret, sr) self.cache.set_multi.assert_called_once_with( {sr.name: sr._id}, prefix="srid:")
def get_promote_srid(name = 'promos'): try: sr = Subreddit._by_name(name, stale=True) except NotFound: sr = Subreddit._new(name = name, title = "promoted links", # negative author_ids make this unlisable author_id = -1, type = "public", ip = '0.0.0.0') return sr._id
def testForceUpdate(self): sr = Subreddit(id=1, name="exists") self.cache.get_multi.return_value = {sr.name: sr._id} self.subreddit_query.return_value = [sr] self.subreddit_byID.return_value = [sr] ret = Subreddit._by_name("exists", _update=True) self.assertEqual(ret, sr) self.cache.add_multi.assert_called_once_with({sr.name: sr._id}, prefix="srid:")
def testMultiCached(self): srs = [ Subreddit(id=1, name="exists"), Subreddit(id=2, name="also"), ] self.cache.get_multi.return_value = {sr.name: sr._id for sr in srs} self.subreddit_byID.return_value = srs ret = Subreddit._by_name(["exists", "also"]) self.assertEqual(ret, {sr.name: sr for sr in srs}) self.assertEqual(self.subreddit_query.call_count, 0)
def _get_multi_sr_owner(self, path_info): try: sr = Subreddit._by_name(path_info['owner']) except NotFound: raise RedditError('SUBREDDIT_NOEXIST', code=404) if (not sr.is_moderator_with_perms(c.user, 'config') and not c.user_is_admin): raise RedditError('MULTI_CANNOT_EDIT', code=403, fields='multipath') return sr
def GET_document(self): try: c.errors = c.errors or ErrorSet() # clear cookies the old fashioned way c.cookies = Cookies() code = request.GET.get("code", "") try: code = int(code) except ValueError: code = 404 srname = request.GET.get("srname", "") takedown = request.GET.get("takedown", "") # StatusBasedRedirect will override this anyway, but we need this # here for pagecache to see. response.status_int = code if srname: c.site = Subreddit._by_name(srname) if code in (204, 304): # NEVER return a content body on 204/304 or downstream # caches may become very confused. if request.GET.has_key("x-sup-id"): x_sup_id = request.GET.get("x-sup-id") if "\r\n" not in x_sup_id: response.headers["x-sup-id"] = x_sup_id return "" elif c.render_style not in self.allowed_render_styles: return str(code) elif c.render_style in extensions.API_TYPES: data = request.environ.get("extra_error_data", {"error": code}) return websafe_json(json.dumps(data)) elif takedown and code == 404: link = Link._by_fullname(takedown) return pages.TakedownPage(link).render() elif code == 403: return self.send403() elif code == 429: return self.send429() elif code == 500: randmin = {"admin": random.choice(self.admins)} failien_url = make_failien_url() return redditbroke % (failien_url, rand_strings.sadmessages % randmin) elif code == 503: return self.send503() elif c.site: return self.send404() else: return "page not found" except: return handle_awful_failure("something really bad just happened.")
def GET_document(self): try: # clear cookies the old fashioned way c.cookies = Cookies() code = request.GET.get('code', '') try: code = int(code) except ValueError: code = 404 srname = request.GET.get('srname', '') takedown = request.GET.get('takedown', "") if srname: c.site = Subreddit._by_name(srname) if c.render_style not in self.allowed_render_styles: if code not in (204, 304): c.response.content = str(code) c.response.status_code = code return c.response elif c.render_style == "api": data = request.environ.get('extra_error_data', {'error': code}) c.response.content = json.dumps(data) return c.response elif takedown and code == 404: link = Link._by_fullname(takedown) return pages.TakedownPage(link).render() elif code == 403: return self.send403() elif code == 429: return self.send429() elif code == 500: randmin = {'admin': rand.choice(self.admins)} failien_name = 'youbrokeit%d.png' % rand.randint( 1, NUM_FAILIENS) failien_url = static(failien_name) return redditbroke % (failien_url, rand_strings.sadmessages % randmin) elif code == 503: return self.send503() elif code == 304: if request.GET.has_key('x-sup-id'): x_sup_id = request.GET.get('x-sup-id') if '\r\n' not in x_sup_id: c.response.headers['x-sup-id'] = x_sup_id return c.response elif c.site: return self.send404() else: return "page not found" except: return handle_awful_failure("something really bad just happened.")
def _check_sr_multi_path(self, path_info): try: sr = Subreddit._by_name(path_info['owner']) except NotFound: raise RedditError('SUBREDDIT_NOEXIST', code=404) if (not sr.is_moderator_with_perms(c.user, 'config') and not c.user_is_admin): raise RedditError('MULTI_CANNOT_EDIT', code=403, fields='multipath') return sr
def set_subreddit(): #the r parameter gets added by javascript for POST requests so we #can reference c.site in api.py sr_name = request.environ.get("subreddit", request.POST.get('r')) domain = request.environ.get("domain") c.site = Default if not sr_name: #check for cnames sub_domain = request.environ.get('sub_domain') if sub_domain and not sub_domain.endswith(g.media_domain): c.site = Subreddit._by_domain(sub_domain) or Default elif sr_name == 'r': #reddits c.site = Sub else: try: 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: sr_name = chksrname(sr_name) if sr_name: redirect_to("/reddits/search?q=%s" % sr_name) elif not c.error_page: abort(404, "not found") #if we didn't find a subreddit, check for a domain listing if not sr_name and c.site == Default and domain: c.site = DomainSR(domain) if isinstance(c.site, FakeSubreddit): c.default_sr = True
def GET_document(self): try: c.errors = c.errors or ErrorSet() # clear cookies the old fashioned way c.cookies = Cookies() code = request.GET.get('code', '') try: code = int(code) except ValueError: code = 404 srname = request.GET.get('srname', '') takedown = request.GET.get('takedown', "") if srname: c.site = Subreddit._by_name(srname) if c.render_style not in self.allowed_render_styles: if code not in (204, 304): c.response.content = str(code) c.response.status_code = code return c.response elif c.render_style in extensions.API_TYPES: data = request.environ.get('extra_error_data', {'error': code}) c.response.content = websafe_json(json.dumps(data)) return c.response elif takedown and code == 404: link = Link._by_fullname(takedown) return pages.TakedownPage(link).render() elif code == 403: return self.send403() elif code == 429: return self.send429() elif code == 500: randmin = {'admin': rand.choice(self.admins)} failien_name = 'youbrokeit%d.png' % rand.randint(1, NUM_FAILIENS) failien_url = static(failien_name) return redditbroke % (failien_url, rand_strings.sadmessages % randmin) elif code == 503: return self.send503() elif code == 304: if request.GET.has_key('x-sup-id'): x_sup_id = request.GET.get('x-sup-id') if '\r\n' not in x_sup_id: c.response.headers['x-sup-id'] = x_sup_id return c.response elif c.site: return self.send404() else: return "page not found" except: return handle_awful_failure("something really bad just happened.")
def GET_document(self): try: c.errors = c.errors or ErrorSet() # clear cookies the old fashioned way c.cookies = Cookies() code = request.GET.get('code', '') try: code = int(code) except ValueError: code = 404 srname = request.GET.get('srname', '') takedown = request.GET.get('takedown', "") if srname: c.site = Subreddit._by_name(srname) if code in (204, 304): # NEVER return a content body on 204/304 or downstream # caches may become very confused. if request.GET.has_key('x-sup-id'): x_sup_id = request.GET.get('x-sup-id') if '\r\n' not in x_sup_id: response.headers['x-sup-id'] = x_sup_id return "" elif c.render_style not in self.allowed_render_styles: return str(code) elif c.render_style in extensions.API_TYPES: data = request.environ.get('extra_error_data', {'error': code}) return websafe_json(json.dumps(data)) elif takedown and code == 404: link = Link._by_fullname(takedown) return pages.TakedownPage(link).render() elif code == 403: return self.send403() elif code == 429: return self.send429() elif code == 500: randmin = {'admin': random.choice(self.admins)} failien_url = make_failien_url() return redditbroke % (failien_url, rand_strings.sadmessages % randmin) elif code == 503: return self.send503() elif c.site: return self.send404() else: return "page not found" except: return handle_awful_failure("something really bad just happened.")
def GET_document(self): try: # clear cookies the old fashioned way c.cookies = Cookies() code = request.GET.get('code', '') try: code = int(code) except ValueError: code = 404 srname = request.GET.get('srname', '') takedown = request.GET.get('takedown', "") if srname: c.site = Subreddit._by_name(srname) if c.render_style not in self.allowed_render_styles: if code not in (204, 304): c.response.content = str(code) return c.response elif c.render_style == "api": c.response.content = "{error: %s}" % code return c.response elif takedown and code == 404: link = Link._by_fullname(takedown) return pages.TakedownPage(link).render() elif code == 403: return self.send403() elif code == 500: randmin = {'admin': rand.choice(self.admins)} return redditbroke % (rand.randint(1,NUM_FAILIENS), rand_strings.sadmessages % randmin) elif code == 503: return self.send503() elif code == 304: if request.GET.has_key('x-sup-id'): x_sup_id = request.GET.get('x-sup-id') if '\r\n' not in x_sup_id: c.response.headers['x-sup-id'] = x_sup_id return c.response elif c.site: return self.send404() else: return "page not found" except: return handle_awful_failure("something really bad just happened.")
def GET_document(self): try: # clear cookies the old fashioned way c.cookies = Cookies() code = request.GET.get('code', '') try: code = int(code) except ValueError: code = 404 srname = request.GET.get('srname', '') takedown = request.GET.get('takedown', "") if srname: c.site = Subreddit._by_name(srname) if c.render_style not in self.allowed_render_styles: if code not in (204, 304): c.response.content = str(code) return c.response elif c.render_style == "api": c.response.content = "{error: %s}" % code return c.response elif takedown and code == 404: link = Link._by_fullname(takedown) return pages.TakedownPage(link).render() elif code == 403: return self.send403() elif code == 500: return redditbroke % (rand.randint( 1, NUM_FAILIENS), rand_strings.sadmessages) elif code == 503: return self.send503() elif code == 304: if request.GET.has_key('x-sup-id'): c.response.headers['x-sup-id'] = request.GET.get( 'x-sup-id') return c.response elif c.site: return self.send404() else: return "page not found" except: return handle_awful_failure("something really bad just happened.")
def set_subreddit(): sr_name=request.environ.get("subreddit", request.params.get('r')) if not sr_name or sr_name == Default.name: c.site = Default elif sr_name == 'r': c.site = Sub else: try: c.site = Subreddit._by_name(sr_name) except NotFound: c.site = Default redirect_to("/reddits/create?name=%s" % sr_name) if isinstance(c.site, FakeSubreddit): c.default_sr = True # check that the site is available: if c.site._spam and not c.user_is_admin: abort(404, "not found")
def __init__(self): self.srs, self.invalid_srs, self.report = [], [], [] self.textarea = request.params.get("subreddits") if self.textarea: requested_srs = [srname.strip() for srname in self.textarea.splitlines()] subreddits = Subreddit._by_name(requested_srs) for srname in requested_srs: if srname in subreddits: self.srs.append(srname) else: self.invalid_srs.append(srname) if subreddits: self.report = make_subreddit_traffic_report(subreddits.values()) param = urllib.quote(self.textarea) self.csv_url = "/traffic/subreddits/report.csv?subreddits=" + param Templated.__init__(self)
def GET_document(self): try: code = request.GET.get('code', '') srname = request.GET.get('srname', '') if srname: c.site = Subreddit._by_name(srname) if c.render_style not in self.allowed_render_styles: return str(code) elif code == '403': return self.send403() elif code == '500': return redditbroke % rand_strings.sadmessages elif code == '503': c.response.status_code = 503 c.response.headers['Retry-After'] = 1 c.response.content = toofast return c.response elif c.site: return self.send404() else: return "page not found" except: return handle_awful_failure("something really bad just happened.")
from r2.lib.db.thing import NotFound from r2.models.account import Account, AccountExists, register from r2.models.link import Tag, TagExists from r2.models.subreddit import Subreddit try: register('admin', 'swordfish', '') except AccountExists: pass admin = Account._by_name('admin') admin.email_validated = True admin._commit() try: Subreddit._by_name('lesswrong') except NotFound: Subreddit._create_and_subscribe('lesswrong', admin, { 'title': 'Less Wrong', 'type': 'restricted', 'default_listing': 'blessed' }) try: Subreddit._by_name('discussion') except NotFound: s = Subreddit._create_and_subscribe( 'discussion', admin, { 'title': 'Less Wrong Discussion', 'type': 'public', 'default_listing': 'new'
def GET_document(self): try: c.errors = c.errors or ErrorSet() # clear cookies the old fashioned way c.cookies = Cookies() code = request.GET.get('code', '') try: code = int(code) except ValueError: code = 404 srname = request.GET.get('srname', '') takedown = request.GET.get('takedown', '') error_name = request.GET.get('error_name', '') if isinstance(c.user, basestring): # somehow requests are getting here with c.user unset c.user_is_loggedin = False c.user = UnloggedUser(browser_langs=None) if srname: c.site = Subreddit._by_name(srname) if request.GET.has_key('allow_framing'): c.allow_framing = bool(request.GET['allow_framing'] == '1') if (error_name == 'IN_TIMEOUT' and not 'usable_error_content' in request.environ): timeout_days_remaining = c.user.days_remaining_in_timeout errpage = pages.InterstitialPage( _("suspended"), content=pages.InTimeoutInterstitial( timeout_days_remaining=timeout_days_remaining, ), ) request.environ['usable_error_content'] = errpage.render() if code in (204, 304): # NEVER return a content body on 204/304 or downstream # caches may become very confused. return "" elif c.render_style not in self.allowed_render_styles: return str(code) elif c.render_style in extensions.API_TYPES: data = request.environ.get('extra_error_data', {'error': code}) message = request.GET.get('message', '') if message: data['message'] = message if request.environ.get("WANT_RAW_JSON"): return scriptsafe_dumps(data) return websafe_json(json.dumps(data)) elif takedown and code == 404: link = Link._by_fullname(takedown) return pages.TakedownPage(link).render() elif code == 400: return self.send400() elif code == 403: return self.send403() elif code == 429: return self.send429() elif code == 500: failien_url = make_failien_url() sad_message = get_funny_translated_string("500_page") sad_message %= {'admin': random.choice(self.admins)} sad_message = safemarkdown(sad_message) return redditbroke % (failien_url, sad_message) elif code == 503: return self.send503() elif c.site: return self.send404() else: return "page not found" except Exception as e: return handle_awful_failure("ErrorController.GET_document: %r" % e)
from r2.lib.db.thing import NotFound from r2.models.account import Account, AccountExists, register from r2.models.link import Tag, TagExists from r2.models.subreddit import Subreddit try: register('admin', 'swordfish', '', False) except AccountExists: pass admin = Account._by_name('admin') admin.email_validated = True admin._commit() try: Subreddit._by_name('main') except NotFound: Subreddit._create_and_subscribe( 'main', admin, { 'title': 'Effective Altruism Forum', 'type': 'restricted', 'default_listing': 'new' }) try: Subreddit._by_name('admin') except NotFound: Subreddit._create_and_subscribe('admin', admin, { 'title': 'Admin', 'type': 'restricted', 'default_listing': 'new'
def testSingleNotFound(self): self.cache.get_multi.return_value = {} self.subreddit_query.return_value = [] with self.assertRaises(NotFound): Subreddit._by_name("doesnotexist")
def testSingleInvalid(self): with self.assertRaises(NotFound): Subreddit._by_name("_illegalunderscore") self.assertEqual(self.cache.get_multi.call_count, 0) self.assertEqual(self.subreddit_query.call_count, 0)