def __init__(self, meetup, connections): self.meetup = meetup self.connections = [] for account in connections: wrapped = WrappedUser(account) wrapped.is_friend = account._id in c.user.friends self.connections.append(wrapped) self.my_fullname = c.user._fullname Templated.__init__(self)
def add_props(cls, user, wrapped): user_fullnames = {w.user_fullname for w in wrapped} target_fullnames = {w.target_fullname for w in wrapped} users = Account._by_fullname(user_fullnames, data=True, return_dict=True) targets = Thing._by_fullname(target_fullnames, data=True, return_dict=True) author_ids = { t.author_id for t in targets.itervalues() if hasattr(t, 'author_id') } link_ids = { t.link_id for t in targets.itervalues() if hasattr(t, 'link_id') } sr_ids = {t.sr_id for t in targets.itervalues() if hasattr(t, 'sr_id')} authors = Account._byID(author_ids, data=True, return_dict=True) links = Link._byID(link_ids, data=True, return_dict=True) subreddits = Subreddit._byID(sr_ids, data=True, return_dict=True) target_things = {} for fullname, target in targets.iteritems(): if isinstance(target, (Comment, Link)): author = authors[target.author_id] if isinstance(target, Link): subreddit = subreddits[target.sr_id] path = target.make_permalink(subreddit) else: link = links[target.link_id] subreddit = subreddits[link.sr_id] path = target.make_permalink(link, subreddit) target_things[fullname] = GameLogTarget( target, path, author, subreddit) elif isinstance(target, Account): target_things[fullname] = WrappedUser(target) for w in wrapped: w.is_self = (c.user_is_loggedin and w.user_fullname == c.user._fullname) w.user = WrappedUser(users[w.user_fullname]) w.target = target_things[w.target_fullname] w.item = g.f2pitems[w.item] w.user_team = scores.get_user_team(users[w.user_fullname]) if isinstance(w.target, WrappedUser): target_user = targets[w.target.fullname] else: target_user = authors[targets[w.target_fullname].author_id] w.target_team = scores.get_user_team(target_user)
def add_props(cls, user, wrapped): from r2.lib.menus import NavButton from r2.lib.db.thing import Thing from r2.lib.pages import WrappedUser from r2.lib.filters import _force_unicode TITLE_MAX_WIDTH = 50 request_path = request.path target_fullnames = [item.target_fullname for item in wrapped if hasattr(item, 'target_fullname')] targets = Thing._by_fullname(target_fullnames, data=True) authors = Account._byID([t.author_id for t in targets.values() if hasattr(t, 'author_id')], data=True) links = Link._byID([t.link_id for t in targets.values() if hasattr(t, 'link_id')], data=True) sr_ids = set([t.sr_id for t in targets.itervalues() if hasattr(t, 'sr_id')] + [w.sr_id for w in wrapped]) subreddits = Subreddit._byID(sr_ids, data=True) # Assemble target links target_links = {} target_accounts = {} for fullname, target in targets.iteritems(): if isinstance(target, Link): author = authors[target.author_id] title = _force_unicode(target.title) if len(title) > TITLE_MAX_WIDTH: short_title = title[:TITLE_MAX_WIDTH] + '...' else: short_title = title text = '%(link)s "%(title)s" %(by)s %(author)s' % { 'link': _('link'), 'title': short_title, 'by': _('by'), 'author': author.name} path = target.make_permalink(subreddits[target.sr_id]) target_links[fullname] = (text, path, title) elif isinstance(target, Comment): author = authors[target.author_id] link = links[target.link_id] title = _force_unicode(link.title) if len(title) > TITLE_MAX_WIDTH: short_title = title[:TITLE_MAX_WIDTH] + '...' else: short_title = title text = '%(comment)s %(by)s %(author)s %(on)s "%(title)s"' % { 'comment': _('comment'), 'by': _('by'), 'author': author.name, 'on': _('on'), 'title': short_title} path = target.make_permalink(link, subreddits[link.sr_id]) target_links[fullname] = (text, path, title) elif isinstance(target, Account): target_accounts[fullname] = WrappedUser(target) for item in wrapped: # Can I move these buttons somewhere else? Not great to have request stuff in here css_class = 'modactions %s' % item.action item.button = NavButton('', item.action, opt='type', css_class=css_class) item.button.build(base_path=request_path) mod_name = item.author.name item.mod = NavButton(mod_name, mod_name, opt='mod') item.mod.build(base_path=request_path) item.text = ModAction._text.get(item.action, '') item.details = item.get_extra_text() if hasattr(item, 'target_fullname') and item.target_fullname: target = targets[item.target_fullname] if isinstance(target, Account): item.target_wrapped_user = target_accounts[item.target_fullname] elif isinstance(target, Link) or isinstance(target, Comment): item.target_text, item.target_path, item.target_title = target_links[item.target_fullname] item.bgcolor = ModAction.get_rgb(item.sr_id) item.sr_name = subreddits[item.sr_id].name item.sr_path = subreddits[item.sr_id].path Printable.add_props(user, wrapped)
def add_props(cls, user, wrapped): from r2.lib.db.thing import Thing from r2.lib.menus import QueryButton from r2.lib.pages import WrappedUser from r2.models import ( Account, Link, ModSR, MultiReddit, Subreddit, ) target_names = { item.target_fullname for item in wrapped if hasattr(item, "target_fullname") } targets = Thing._by_fullname(target_names, data=True) # get moderators moderators = Account._byID36({item.mod_id36 for item in wrapped}, data=True) # get authors for targets that are Links or Comments target_author_names = { target.author_id for target in targets.values() if hasattr(target, "author_id") } target_authors = Account._byID(target_author_names, data=True) # get parent links for targets that are Comments parent_link_names = { target.link_id for target in targets.values() if hasattr(target, "link_id") } parent_links = Link._byID(parent_link_names, data=True) # get subreddits srs = Subreddit._byID36({item.sr_id36 for item in wrapped}, data=True) for item in wrapped: item.moderator = moderators[item.mod_id36] item.subreddit = srs[item.sr_id36] item.text = cls._text.get(item.action, '') item.details = item.get_extra_text() item.target = None item.target_author = None if hasattr(item, "target_fullname") and item.target_fullname: item.target = targets[item.target_fullname] if hasattr(item.target, "author_id"): author_name = item.target.author_id item.target_author = target_authors[author_name] if hasattr(item.target, "link_id"): parent_link_name = item.target.link_id item.parent_link = parent_links[parent_link_name] if isinstance(item.target, Account): item.target_author = item.target if c.render_style == "html": request_path = request.path # make wrapped users for targets that are accounts user_targets = filter(lambda target: isinstance(target, Account), targets.values()) wrapped_user_targets = { user._fullname: WrappedUser(user) for user in user_targets } for item in wrapped: if isinstance(item.target, Account): user_name = item.target._fullname item.wrapped_user_target = wrapped_user_targets[user_name] css_class = 'modactions %s' % item.action action_button = QueryButton('', item.action, query_param='type', css_class=css_class) action_button.build(base_path=request_path) item.action_button = action_button mod_button = QueryButton(item.moderator.name, item.moderator.name, query_param='mod') mod_button.build(base_path=request_path) item.mod_button = mod_button if isinstance(c.site, ModSR) or isinstance( c.site, MultiReddit): item.bgcolor = 'rgb(%s,%s,%s)' % cls.get_rgb(item) item.is_multi = True else: item.bgcolor = "rgb(255,255,255)" item.is_multi = False
def get_printable_authors(cls, revisions): from r2.lib.pages import WrappedUser authors = cls.get_authors(revisions) return dict([(id36, WrappedUser(v)) for id36, v in authors.iteritems() if v])
def add_props(cls, user, wrapped): from r2.lib.template_helpers import add_attr, get_domain from r2.lib import promote from r2.lib.wrapped import CachedVariable from r2.lib.pages import WrappedUser #fetch parent links links = Link._byID(set(l.link_id for l in wrapped), data=True, return_dict=True, stale=True) # fetch authors authors = Account._byID(set(l.author_id for l in links.values()), data=True, return_dict=True, stale=True) #get srs for comments that don't have them (old comments) for cm in wrapped: if not hasattr(cm, 'sr_id'): cm.sr_id = links[cm.link_id].sr_id subreddits = Subreddit._byID(set(cm.sr_id for cm in wrapped), data=True, return_dict=False, stale=True) cids = dict((w._id, w) for w in wrapped) parent_ids = set( cm.parent_id for cm in wrapped if getattr(cm, 'parent_id', None) and cm.parent_id not in cids) parents = {} if parent_ids: parents = Comment._byID(parent_ids, data=True, stale=True) can_reply_srs = set(s._id for s in subreddits if s.can_comment(user)) \ if c.user_is_loggedin else set() can_reply_srs.add(promote.get_promote_srid()) min_score = user.pref_min_comment_score profilepage = c.profilepage user_is_admin = c.user_is_admin user_is_loggedin = c.user_is_loggedin focal_comment = c.focal_comment cname = c.cname site = c.site for item in wrapped: # for caching: item.profilepage = c.profilepage item.link = links.get(item.link_id) if (item.link._score <= 1 or item.score < 3 or item.link._spam or item._spam or item.author._spam): item.nofollow = True else: item.nofollow = False if not hasattr(item, 'subreddit'): item.subreddit = item.subreddit_slow if item.author_id == item.link.author_id and not item.link._deleted: add_attr(item.attribs, 'S', link=item.link.make_permalink(item.subreddit)) if not hasattr(item, 'target'): item.target = "_top" if cname else None if item.parent_id: if item.parent_id in cids: item.parent_permalink = '#' + utils.to36(item.parent_id) else: parent = parents[item.parent_id] item.parent_permalink = parent.make_permalink( item.link, item.subreddit) else: item.parent_permalink = None item.can_reply = False if c.can_reply or (item.sr_id in can_reply_srs): age = datetime.now(g.tz) - item._date if age.days < g.REPLY_AGE_LIMIT: item.can_reply = True # not deleted on profile pages, # deleted if spam and not author or admin item.deleted = ( not profilepage and (item._deleted or (item._spam and item.author != user and not item.show_spam))) extra_css = '' if item.deleted: extra_css += "grayed" if not user_is_admin: item.author = DeletedUser() item.body = '[deleted]' if focal_comment == item._id36: extra_css += " border" if profilepage: item.link_author = WrappedUser(authors[item.link.author_id]) item.subreddit_path = item.subreddit.path if cname: item.subreddit_path = ("http://" + get_domain( cname=(site == item.subreddit), subreddit=False)) if site != item.subreddit: item.subreddit_path += item.subreddit.path item.full_comment_path = item.link.make_permalink(item.subreddit) # don't collapse for admins, on profile pages, or if deleted item.collapsed = False if ((item.score < min_score) and not (profilepage or item.deleted or user_is_admin)): item.collapsed = True item.collapsed_reason = _("comment score below threshold") if user_is_loggedin and item.author_id in c.user.enemies: if "grayed" not in extra_css: extra_css += " grayed" item.collapsed = True item.collapsed_reason = _("blocked user") item.editted = getattr(item, "editted", False) item.render_css_class = "comment %s" % CachedVariable( "time_period") #will get updated in builder item.num_children = 0 item.score_fmt = Score.points item.permalink = item.make_permalink(item.link, item.subreddit) item.is_author = (user == item.author) item.is_focal = (focal_comment == item._id36) item_age = c.start_time - item._date if item_age.days > g.VOTE_AGE_LIMIT: item.votable = False else: item.votable = True #will seem less horrible when add_props is in pages.py from r2.lib.pages import UserText item.usertext = UserText(item, item.body, editable=item.is_author, nofollow=item.nofollow, target=item.target, extra_css=extra_css) # Run this last Printable.add_props(user, wrapped)