def set_unread(messages, to, unread, mutator=None): # Maintain backwards compatability messages = tup(messages) if not mutator: m = CachedQueryMutator() else: m = mutator if isinstance(to, Subreddit): for i in ModeratorInbox.set_unread(messages, unread): q = get_unread_subreddit_messages(i._thing1_id) if unread: m.insert(q, [i]) else: m.delete(q, [i]) else: # All messages should be of the same type # (asserted by Inbox.set_unread) for i in Inbox.set_unread(messages, unread, to=to): query = None if isinstance(messages[0], Comment): if i._name == "inbox": query = get_unread_comments(i._thing1_id) elif i._name == "selfreply": query = get_unread_selfreply(i._thing1_id) elif isinstance(messages[0], Message): query = get_unread_messages(i._thing1_id) assert query is not None if unread: m.insert(query, [i]) else: m.delete(query, [i]) if not mutator: m.send()
def del_or_ban(things, why): query_cache_inserts = [] query_cache_deletes = [] by_srid, srs = _by_srid(things) if not by_srid: return for sr_id, sr_things in by_srid.iteritems(): sr = srs[sr_id] links = [x for x in sr_things if isinstance(x, Link)] comments = [x for x in sr_things if isinstance(x, Comment)] if links: results = [ get_links(sr, 'hot', 'all'), get_links(sr, 'new', 'all') ] for sort in time_filtered_sorts: for time in db_times.keys(): results.append(get_links(sr, sort, time)) add_queries(results, delete_items=links) if why == "ban": query_cache_inserts.append([get_spam_links(sr), links]) filtered = [l for l in links if was_spam_filtered(l)] not_filtered = [l for l in links if not was_spam_filtered(l)] query_cache_inserts.append( [get_spam_filtered_links(sr), filtered]) query_cache_deletes.append( [get_spam_filtered_links(sr), not_filtered]) if why == "del": query_cache_deletes.append([get_spam_links(sr), links]) query_cache_deletes.append( [get_spam_filtered_links(sr), links]) query_cache_deletes.append([get_reported_links(sr), links]) if comments: if why == "ban": query_cache_inserts.append([get_spam_comments(sr), comments]) filtered = [c for c in comments if was_spam_filtered(c)] not_filtered = [ c for c in comments if not was_spam_filtered(c) ] query_cache_inserts.append( [get_spam_filtered_comments(sr), filtered]) query_cache_deletes.append( [get_spam_filtered_comments(sr), not_filtered]) if why == "del": query_cache_deletes.append([get_spam_comments(sr), comments]) query_cache_deletes.append( [get_spam_filtered_comments(sr), comments]) query_cache_deletes.append([get_reported_comments(sr), comments]) by_author, authors = _by_author(things) for author_id, a_things in by_author.iteritems(): author = authors[author_id] links = [x for x in a_things if isinstance(x, Link)] comments = [x for x in a_things if isinstance(x, Comment)] if links and why == "del": results = [ get_submitted(author, 'hot', 'all'), get_submitted(author, 'new', 'all') ] for sort in time_filtered_sorts: for time in db_times.keys(): results.append(get_submitted(author, sort, time)) add_queries(results, delete_items=links) query_cache_inserts.append([get_deleted_links(author_id), links]) if comments and why == "del": results = [ get_comments(author, 'hot', 'all'), get_comments(author, 'new', 'all') ] for sort in time_filtered_sorts: for time in db_times.keys(): results.append(get_comments(author, sort, time)) add_queries(results, delete_items=comments) query_cache_inserts.append( [get_deleted_comments(author_id), comments]) with CachedQueryMutator() as m: for q, inserts in query_cache_inserts: m.insert(q, inserts) for q, deletes in query_cache_deletes: m.delete(q, deletes) changed(things)
import datetime from pylons import g from r2.lib.db.queries import get_gilded_comments, get_all_gilded_comments from r2.lib.utils import Storage from r2.models import GildingsByDay, Thing, Comment from r2.models.query_cache import CachedQueryMutator date = datetime.datetime.now(g.tz) earliest_date = datetime.datetime(2012, 10, 01, tzinfo=g.tz) already_seen = set() with CachedQueryMutator() as m: while date > earliest_date: gildings = GildingsByDay.get_gildings(date) fullnames = [x["thing"] for x in gildings] things = Thing._by_fullname(fullnames, data=True, return_dict=False) comments = {t._fullname: t for t in things if isinstance(t, Comment)} for gilding in gildings: fullname = gilding["thing"] if fullname in comments and fullname not in already_seen: thing = gilding["thing"] = comments[fullname] gilding_object = Storage(gilding) m.insert(get_gilded_comments(thing.sr_id), [gilding_object]) m.insert(get_all_gilded_comments(), [gilding_object]) already_seen.add(fullname) date -= datetime.timedelta(days=1)
def new_report(thing): with CachedQueryMutator() as m: if isinstance(thing, Link): m.insert(get_reported_links(thing.sr_id), [thing]) elif isinstance(thing, Comment): m.insert(get_reported_comments(thing.sr_id), [thing])