mirror of
https://github.com/reddit-archive/reddit.git
synced 2026-04-27 03:00:12 -04:00
* Activate negative-result caching for HardCache chain
* begin migration to pylibmc:
* Add pylibmc to the list of required packages in preparation for the replacement of the memcached library
* Start using pylibmc for the rendercaches
* Tweak the computation of the normalized hot page to be a bit faster when the precomputer is available, by relying on the precomputer's internal permacached structure.
* Default to a SelfEmptyingCache for scripts run from `paster run'. Note that processes that run forever are still responsible for resetting their local-caches, but this can now be done with g.reset_caches()
* threaded messaging patch part 1: backend changes only. This will allow migrate.py to be run to move new onto inbox and will start tracking message trees for users.
* Specify some queries to run at most once per day
* Refactored safemarkdown() and added soup testing
Additions:
* Added _byID_rel()
* Made error messages more verbose for:
1. byID lookups of too-big thing_ids
2. memcache failures
3. Solr Nones
* Award._all_awards() now sorts by date
* Trophy.by_{account,award}() now cache properly
* new feedback page with helpful links
* Try to reduce the length of the query-queue by not adding known-long queries at all, rather than adding them and skipping them
* whitespace clean up
* simplify the 'why did my CC get denied' email checking.
* added missing translation strings and users now get PMs when they are added as translators
Bugfixes:
* Fix a bug in unsaving
* BeautifulSoup stopped hosting 3.0.7a, but 3.0.8 still uses the good parser
* Better search error handling
* Properly reset the cache-chains (incl. the hardcache; d'oh!) per-request
* Fix an attribute error on listings where some items have author_ids and some don't
* Bug when forcing recalculation of memoized functions
* the subreddit creation and edit form aren't dealing with errors properly
* buttons fix
85 lines
3.4 KiB
Python
85 lines
3.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-2010
|
|
# CondeNet, Inc. All Rights Reserved.
|
|
################################################################################
|
|
from pylons import c, request
|
|
from r2.lib.strings import Score
|
|
class Printable(object):
|
|
show_spam = False
|
|
show_reports = False
|
|
is_special = False
|
|
can_ban = False
|
|
deleted = False
|
|
rowstyle = 'even'
|
|
collapsed = False
|
|
author = None
|
|
margin = 0
|
|
is_focal = False
|
|
childlisting = None
|
|
cache_ignore = set(['c', 'author', 'score_fmt', 'child',
|
|
# displayed score is cachable, so remove score
|
|
# related fields.
|
|
'voting_score', 'display_score',
|
|
'render_score', 'score', '_score',
|
|
'upvotes', '_ups',
|
|
'downvotes', '_downs',
|
|
'subreddit_slow', '_deleted', '_spam',
|
|
'cachable', 'make_permalink', 'permalink',
|
|
'timesince', 'votehash'
|
|
])
|
|
|
|
@classmethod
|
|
def add_props(cls, user, wrapped):
|
|
from r2.lib.wrapped import CachedVariable
|
|
for item in wrapped:
|
|
# insert replacement variable for timesince to allow for
|
|
# caching of thing templates
|
|
item.display = CachedVariable("display")
|
|
item.timesince = CachedVariable("timesince")
|
|
item.votehash = CachedVariable("votehash")
|
|
item.childlisting = CachedVariable("childlisting")
|
|
|
|
score_fmt = getattr(item, "score_fmt", Score.number_only)
|
|
item.display_score = map(score_fmt, item.voting_score)
|
|
|
|
if item.cachable:
|
|
item.render_score = item.display_score
|
|
item.display_score = map(CachedVariable,
|
|
["scoredislikes", "scoreunvoted",
|
|
"scorelikes"])
|
|
|
|
@property
|
|
def permalink(self, *a, **kw):
|
|
raise NotImplementedError
|
|
|
|
def keep_item(self, wrapped):
|
|
return True
|
|
|
|
@staticmethod
|
|
def wrapped_cache_key(wrapped, style):
|
|
s = [wrapped._fullname, wrapped._spam, wrapped.reported]
|
|
|
|
if style == 'htmllite':
|
|
s.extend([c.bgcolor, c.bordercolor,
|
|
request.get.has_key('style'),
|
|
request.get.get("expanded"),
|
|
getattr(wrapped, 'embed_voting_style', None)])
|
|
return s
|