class PriorityLevel(object): name = '' _text = N_('') _description = N_('') value = 1 # Values are from 1 (highest) to 100 (lowest) default = False inventory_override = False cpm = True # Non-cpm is percentage, will fill unsold impressions def __repr__(self): return "<PriorityLevel %s: %s>" % (self.name, self.value) @property def text(self): return _(self._text) if self._text else '' @property def description(self): return _(self._description) if self._description else ''
class KindMenu(SortMenu): name = 'kind' _default = 'all' _options = ('links', 'comments', 'messages', 'all') _title = N_("kind") def make_title(self, attr): if attr == "all": return _("all") return menu[attr]
def notify_user_added(rel_type, author, user, target, message=None): msgs = user_added_messages.get(rel_type) if not msgs: return srname = target.path.rstrip("/") d = { "url": srname, "title": "%s: %s" % (srname, target.title), "author": "/u/" + author.name, "user": "******" + user.name, } if "pm" in msgs and author != user: subject = msgs["pm"]["subject"] % d msg = msgs["pm"]["msg"] % d if rel_type == "banned" and not user.has_interacted_with(target): return if rel_type == "banned" and message: msg += "\n\n" + N_("note from the moderators:\n\n\"%(message)s\"") msg %= {'message': message} if rel_type in ("banned", "moderator_invite"): # send the message from the subreddit item, inbox_rel = Message._new(author, user, subject, msg, request.ip, sr=target, from_sr=True) else: item, inbox_rel = Message._new(author, user, subject, msg, request.ip) queries.new_message(item, inbox_rel) if "modmail" in msgs: subject = msgs["modmail"]["subject"] % d msg = msgs["modmail"]["msg"] % d if rel_type == "moderator_invite": modmail_author = Account.system_user() else: modmail_author = author item, inbox_rel = Message._new(modmail_author, target, subject, msg, request.ip, sr=target) queries.new_message(item, inbox_rel)
class SubredditButton(NavButton): from r2.models.subreddit import Frontpage, Mod, All, Random, RandomSubscription, HomeSR, DefaultSR, AllSR # TRANSLATORS: This refers to /r/mod name_overrides = {Mod: N_("mod"), # TRANSLATORS: This refers to the user's front page Frontpage: N_(g.front_name), All: N_(g.all_name), Random: N_("random"), # TRANSLATORS: Gold feature, "myrandom", a random subreddit from your subscriptions RandomSubscription: N_("myrandom")} def __init__(self, sr, css_class='', data=None): self.path = sr.path name = self.name_overrides.get(sr) name = _(name) if name else sr.name self.isselected = (c.site == sr) self.pref_site_index = c.user.pref_site_index if isinstance(c.site, DynamicSR): self.isselected = True if sr.is_homepage: self.path = '/' NavButton.__init__(self, name, sr.path, sr_path=False, css_class=css_class, data=data) def build(self, base_path=''): self.bare_path = "" def is_selected(self): return self.isselected def cachable_attrs(self): return [ ('path', self.path), ('title', self.title), ('isselected', self.isselected), ('css_class', self.css_class), ('data', self.data), ('pref_site_index', self.pref_site_index), ]
class SubredditButton(NavButton): from r2.models.subreddit import Frontpage, Mod, All, Random, RandomSubscription, HomeSR, DefaultSR, AllSR # TRANSLATORS: This refers to /r/mod name_overrides = {Mod: N_("mod"), # TRANSLATORS: This refers to the user's front page Frontpage: N_("front"), All: N_("all"), Random: N_("random"), # TRANSLATORS: Gold feature, "myrandom", a random subreddit from your subscriptions RandomSubscription: N_("myrandom")} def __init__(self, sr, css_class='', data=None): self.path = sr.path name = self.name_overrides.get(sr) # CUSTOM: warning HomeSR extends AllSR, must be first if isinstance(sr, DefaultSR): name = g.live_config['all_on_front_front_name'] elif isinstance(sr, HomeSR): name = g.home_name elif isinstance(sr, AllSR): name = g.live_config['all_on_front_all_name'] name = _(name) if name else sr.name self.isselected = (c.site == sr) NavButton.__init__(self, name, sr.path, sr_path=False, css_class=css_class, data=data) def build(self, base_path=''): self.bare_path = "" def is_selected(self): return self.isselected def cachable_attrs(self): return [ ('path', self.path), ('title', self.title), ('isselected', self.isselected), ('css_class', self.css_class), ('data', self.data), ]
def deleteOrphaned(self): self.initChecks() settingsNamesDict = dict( (s.split('.')[1], s) for s in self.settings.keys()) orphanedSettings = filter(lambda key: g.OPT.getValueType(key) == None, settingsNamesDict.keys()) map(lambda s: Setting.getSetting(settingsNamesDict[s]).delete(), orphanedSettings) c.message = N_('Deleted %s orphaned settings.' % len(orphanedSettings)) c.returnUrl = h.url_for('hsCfgManage') return self.render('managementMessage')
def load_controllers(self): from r2.controllers.api_docs import api_section, section_info api_section["live"] = "live" section_info["live"] = { "title": "live threads", "description": sys.modules[__name__].__doc__, } from r2.models.token import OAuth2Scope OAuth2Scope.scope_info["livemanage"] = { "id": "livemanage", "name": N_("Manage live threads"), "description": N_("Manage settings and contributors of live threads " "I contribute to."), } from reddit_liveupdate.controllers import ( controller_hooks, LiveUpdateByIDController, LiveUpdateController, LiveUpdateEventsController, LiveUpdatePixelController, ) from r2.config.templates import api from reddit_liveupdate import pages api('liveupdateeventapp', pages.LiveUpdateEventAppJsonTemplate) api('liveupdatefocusapp', pages.LiveUpdateEventAppJsonTemplate) api('liveupdateevent', pages.LiveUpdateEventJsonTemplate) api('liveupdatereportedeventrow', pages.LiveUpdateEventJsonTemplate) api('liveupdate', pages.LiveUpdateJsonTemplate) api('liveupdatecontributortableitem', pages.ContributorTableItemJsonTemplate) controller_hooks.register_all() from reddit_liveupdate import scraper scraper.hooks.register_all()
class SortMenu(NavMenu): name = 'sort' hidden_options = [] button_cls = QueryButton # these are _ prefixed to avoid colliding with NavMenu attributes _default = 'hot' _options = ('hot', 'new', 'top', 'old', g.voting_upvote_path, g.voting_controversial_path) _type = 'lightdrop' _title = N_("sorted by") def __init__(self, default=None, title='', base_path='', separator='|', _id='', css_class=''): options = self.make_buttons() default = default or self._default base_path = base_path or request.path title = title or _(self._title) NavMenu.__init__(self, options, default=default, title=title, type=self._type, base_path=base_path, separator=separator, _id=_id, css_class=css_class) def make_buttons(self): buttons = [] for name in self._options: css_class = 'hidden' if name in self.hidden_options else '' button = self.button_cls(self.make_title(name), name, self.name, css_class=css_class) buttons.append(button) return buttons def make_title(self, attr): return menu[attr] _mapping = { "hot": operators.desc('_hot'), "new": operators.desc('_date'), "old": operators.asc('_date'), "top": operators.desc('_score'), g.voting_upvote_path: operators.desc('_upvotes'), g.voting_controversial_path: operators.desc('_controversy'), "confidence": operators.desc('_confidence'), "random": operators.shuffled('_confidence'), "qa": operators.desc('_qa'), } _reverse_mapping = {v: k for k, v in _mapping.iteritems()} @classmethod def operator(cls, sort): return cls._mapping.get(sort) @classmethod def sort(cls, operator): return cls._reverse_mapping.get(operator)
class TimeMenu(SortMenu): """Menu for setting the time interval of the listing (from 'hour' to 'all')""" name = 't' _default = 'all' _options = ('hour', 'day', 'week', 'month', 'year', 'all') _title = N_("links from") @classmethod def operator(self, time): from r2.models import Link if time != 'all': return Link.c._date >= timeago(time)
class SubredditButton(NavButton): from r2.models.subreddit import Frontpage, Mod, All, Random, RandomSubscription # TRANSLATORS: This refers to /r/mod name_overrides = { Mod: N_("mod"), # TRANSLATORS: This refers to the user's front page Frontpage: N_("front"), All: N_("all"), Random: N_("random"), # TRANSLATORS: Gold feature, "myrandom", a random subreddit from your subscriptions RandomSubscription: N_("myrandom") } def __init__(self, sr, css_class='', data=None): self.path = sr.path name = self.name_overrides.get(sr) name = _(name) if name else sr.name self.isselected = (c.site == sr) NavButton.__init__(self, name, sr.path, sr_path=False, nocname=True, css_class=css_class, data=data) def build(self, base_path=''): self.bare_path = "" def is_selected(self): return self.isselected def cachable_attrs(self): return [ ('path', self.path), ('title', self.title), ('isselected', self.isselected), ('css_class', self.css_class), ('data', self.data), ]
class ContributorPermissionSet(PermissionSet): info = { "update": { "title": N_("update"), "description": N_("post updates"), }, "manage": { "title": N_("manage contributors"), "description": N_("add, remove, and change permissions of contributors"), }, "settings": { "title": N_("settings"), "description": N_("change the title and description"), }, "edit": { "title": N_("edit"), "description": N_("strike and delete others' updates"), }, "close": { "title": N_("close live thread"), "description": N_("permanently close the live thread"), }, } def allow(self, permission): if self.is_superuser(): return True return self.get(permission, False) def without(self, permission): if self.is_superuser(): permissions = {k: True for k in self.info} else: permissions = self.copy() permissions.pop(permission, None) return ContributorPermissionSet(permissions)
class Meatspace(Plugin): needs_static_build = True js = { "meatspace-qrcode": Module( "meatspace-qrcode.js", "lib/jquery.qrcode.min.js", "meatspace-qrcode.js", ), } errors = { "MEETUP_NOT_WITH_SELF": N_("you can't connect with yourself"), "MEETUP_INVALID_CODE": N_("that is not the correct code"), } def add_routes(self, mc): mc("/meetup/:codename/:action", controller="qrcode", action="portal", conditions={"function": not_in_sr}) mc("/api/meetup_connect", controller="qrcode", action="connect", conditions={"function": not_in_sr}) # shortdomain stuff is handled in haproxy, but haproxy can only prefix # paths that come through during rewrite. we'll handle it from there. mc("/meetup/:codename/or/:user/:code", controller="qrcode", action="connect_shortlink", conditions={"function": not_in_sr}) def load_controllers(self): from reddit_meatspace.qrcode import QrCodeController
class SubredditButton(NavButton): from r2.models.subreddit import Frontpage, Mod, All, Random, RandomSubscription # Translation is deferred (N_); must be done per-request, # not at import/class definition time. # TRANSLATORS: This refers to /r/mod name_overrides = { Mod: N_("mod"), # TRANSLATORS: This refers to the user's front page Frontpage: N_("front"), All: N_("all"), Random: N_("random"), # TRANSLATORS: Gold feature, "myrandom", a random subreddit from your subscriptions RandomSubscription: N_("myrandom") } def __init__(self, sr, **kw): self.path = sr.path name = self.name_overrides.get(sr) # Run the name through deferred translation name = _(name) if name else sr.name NavButton.__init__(self, name, sr.path, False, isselected=(c.site == sr), **kw) def build(self, base_path=''): self.bare_path = "" def is_selected(self): return self.isselected def cachable_attrs(self): return [('path', self.path), ('title', self.title), ('isselected', self.isselected)]
class AdminNotesSidebar(Templated): EMPTY_MESSAGE = { "domain": N_("No notes for this domain"), "ip": N_("No notes for this IP address"), "subreddit": N_("No notes for this subreddit"), } SYSTEMS = { "domain": N_("domain"), "ip": N_("IP address"), "subreddit": N_("subreddit"), } def __init__(self, system, subject): from r2.models.admin_notes import AdminNotesBySystem self.system = system self.subject = subject self.author = c.user.name self.notes = AdminNotesBySystem.in_display_order(system, subject) # Convert timestamps for easier reading/translation for note in self.notes: note["timesince"] = timesince(note["when"]) Templated.__init__(self)
class ProfileOverviewTimeMenu(TimeMenu): """Time Menu with the title changed for a user overview""" _title = N_("links and comments from")
class CommentsTimeMenu(TimeMenu): """Time Menu with the title changed for comments""" _title = N_("comments from")
"scaley", "scalez", "skewx", "skewy", "steps", "translate", "translate3d", "translatex", "translatey", "translatez", } assert all(function == function.lower() for function in SAFE_FUNCTIONS) ERROR_MESSAGES = { "IMAGE_NOT_FOUND": N_('no image found with name "%(name)s"'), "NON_PLACEHOLDER_URL": N_("only uploaded images are allowed; reference " "them with the %%%%imagename%%%% system"), "SYNTAX_ERROR": N_("syntax error: %(message)s"), "UNKNOWN_AT_RULE": N_("@%(keyword)s is not allowed"), "UNKNOWN_PROPERTY": N_('unknown property "%(name)s"'), "UNKNOWN_FUNCTION": N_('unknown function "%(function)s"'), "UNEXPECTED_TOKEN": N_('unexpected token "%(token)s"'), "BACKSLASH": N_("backslashes are not allowed"),
class RemnantPriority(PriorityLevel): name = 'remnant' _text = N_('remnant') _description = N_('lower priority, impressions are not guaranteed') value = 20 inventory_override = True
class MediumPriority(PriorityLevel): name = 'standard' _text = N_('standard') value = 10 default = True
class HighPriority(PriorityLevel): name = 'high' _text = N_('highest') value = 5
class AuctionPriority(PriorityLevel): name = 'auction' _text = N_('auction') _description = N_('auction priority; all self-serve are auction priority') inventory_override = True
# All portions of the code written by reddit are Copyright (c) 2006-2015 reddit # Inc. All Rights Reserved. ############################################################################### from pylons import request from pylons.i18n import _, N_ from r2.models import Account, Message from r2.lib.db import queries from r2.lib.utils import blockquote_text user_added_messages = { "moderator": { "pm": { "subject": N_("you are a moderator"), "msg": N_("you have been added as a moderator to [%(title)s](%(url)s)."), }, }, "moderator_invite": { "pm": { "subject": N_("invitation to moderate %(url)s"), "msg": N_("**gadzooks! you are invited to become a moderator of [%(title)s](%(url)s)!**\n\n" "*to accept*, visit the [moderators page for %(url)s](%(url)s/about/moderators) and click \"accept\".\n\n" "*otherwise,* if you did not expect to receive this, you can simply ignore this invitation or report it." ), }, "modmail": {
class PromoteListingController(ListingController): where = 'promoted' render_cls = PromotePage titles = { 'future_promos': N_('unapproved promoted links'), 'pending_promos': N_('accepted promoted links'), 'unpaid_promos': N_('unpaid promoted links'), 'rejected_promos': N_('rejected promoted links'), 'live_promos': N_('live promoted links'), 'all': N_('all promoted links'), } base_path = '/promoted' def title(self): return _(self.titles[self.sort]) @property def title_text(self): return _('promoted by you') @property def menus(self): filters = [ NamedButton('all_promos', dest='', use_params=True, aliases=['/sponsor']), NamedButton('future_promos', use_params=True), NamedButton('unpaid_promos', use_params=True), NamedButton('rejected_promos', use_params=True), NamedButton('pending_promos', use_params=True), NamedButton('live_promos', use_params=True), ] menus = [ NavMenu(filters, base_path=self.base_path, title='show', type='lightdrop') ] return menus def keep_fn(self): def keep(item): if self.sort == "future_promos": # this sort is used to review links that need to be approved # skip links that don't have any paid campaigns campaigns = list(PromoCampaign._by_link(item._id)) if not any( promote.authed_or_not_needed(camp) for camp in campaigns): return False if item.promoted and not item._deleted: return True else: return False return keep def query(self): if self.sort == "future_promos": return queries.get_unapproved_links(c.user._id) elif self.sort == "pending_promos": return queries.get_accepted_links(c.user._id) elif self.sort == "unpaid_promos": return queries.get_unpaid_links(c.user._id) elif self.sort == "rejected_promos": return queries.get_rejected_links(c.user._id) elif self.sort == "live_promos": return queries.get_live_links(c.user._id) elif self.sort == "all": return queries.get_promoted_links(c.user._id) @validate(VSponsor()) def GET_listing(self, sort="all", **env): self.sort = sort return ListingController.GET_listing(self, **env)
class PromoteListingController(ListingController): where = 'promoted' render_cls = PromotePage titles = { 'future_promos': N_('unapproved promoted links'), 'pending_promos': N_('accepted promoted links'), 'unpaid_promos': N_('unpaid promoted links'), 'rejected_promos': N_('rejected promoted links'), 'live_promos': N_('live promoted links'), 'underdelivered': N_('underdelivered promoted links'), 'reported': N_('reported promoted links'), 'house': N_('house promoted links'), 'all': N_('all promoted links'), } def title(self): return _(self.titles[self.sort]) @property def title_text(self): return _('promoted by you') @classmethod @memoize('live_by_subreddit', time=300) def _live_by_subreddit(cls, sr_names): promotuples = promote.get_live_promotions(sr_names) return [pt.link for pt in promotuples] def live_by_subreddit(cls, sr): return cls._live_by_subreddit([sr.name]) @classmethod @memoize('house_link_names', time=60) def get_house_link_names(cls): now = promote.promo_datetime_now() pws = PromotionWeights.get_campaigns(now) campaign_ids = {pw.promo_idx for pw in pws} q = PromoCampaign._query(PromoCampaign.c._id.in_(campaign_ids), PromoCampaign.c.priority_name == 'house', data=True) link_names = {Link._fullname_from_id36(to36(camp.link_id)) for camp in q} return sorted(link_names, reverse=True) @property def menus(self): filters = [ NamedButton('all_promos', dest=''), NamedButton('future_promos'), NamedButton('unpaid_promos'), NamedButton('rejected_promos'), NamedButton('pending_promos'), NamedButton('live_promos'), ] menus = [NavMenu(filters, base_path='/promoted', title='show', type='lightdrop')] if self.sort == 'live_promos' and c.user_is_sponsor: srnames = promote.all_live_promo_srnames() buttons = [NavButton('all', '')] try: srnames.remove(Frontpage.name) frontbutton = NavButton('FRONTPAGE', Frontpage.name, aliases=['/promoted/live_promos/%s' % urllib.quote(Frontpage.name)]) buttons.append(frontbutton) except KeyError: pass srnames = sorted(srnames, key=lambda name: name.lower()) buttons.extend([NavButton(name, name) for name in srnames]) menus.append(NavMenu(buttons, base_path='/promoted/live_promos', title='subreddit', type='lightdrop')) return menus def keep_fn(self): def keep(item): if self.sort == "future_promos": # this sort is used to review links that need to be approved # skip links that don't have any paid campaigns campaigns = list(PromoCampaign._by_link(item._id)) if not any(promote.authed_or_not_needed(camp) for camp in campaigns): return False if item.promoted and not item._deleted: return True else: return False return keep def query(self): if c.user_is_sponsor: if self.sort == "future_promos": return queries.get_all_unapproved_links() elif self.sort == "pending_promos": return queries.get_all_accepted_links() elif self.sort == "unpaid_promos": return queries.get_all_unpaid_links() elif self.sort == "rejected_promos": return queries.get_all_rejected_links() elif self.sort == "live_promos" and self.sr: return self.live_by_subreddit(self.sr) elif self.sort == 'live_promos': return queries.get_all_live_links() elif self.sort == 'underdelivered': q = queries.get_underdelivered_campaigns() campaigns = PromoCampaign._by_fullname(list(q), data=True, return_dict=False) link_ids = [camp.link_id for camp in campaigns] return [Link._fullname_from_id36(to36(id)) for id in link_ids] elif self.sort == 'reported': return queries.get_reported_links(Subreddit.get_promote_srid()) elif self.sort == 'house': return self.get_house_link_names() elif self.sort == 'all': return queries.get_all_promoted_links() else: if self.sort == "future_promos": return queries.get_unapproved_links(c.user._id) elif self.sort == "pending_promos": return queries.get_accepted_links(c.user._id) elif self.sort == "unpaid_promos": return queries.get_unpaid_links(c.user._id) elif self.sort == "rejected_promos": return queries.get_rejected_links(c.user._id) elif self.sort == "live_promos": return queries.get_live_links(c.user._id) elif self.sort == "all": return queries.get_promoted_links(c.user._id) @validate(VSponsor(), sr=nop('sr')) def GET_listing(self, sr=None, sort="all", **env): if (sort in ('underdelivered', 'reported', 'house') and not c.user_is_sponsor): self.abort403() self.sort = sort self.sr = None if sr and sr == Frontpage.name: self.sr = Frontpage elif sr: try: self.sr = Subreddit._by_name(sr) except NotFound: pass return ListingController.GET_listing(self, **env)
class SortMenu(NavMenu): name = 'sort' hidden_options = [] button_cls = QueryButton # these are _ prefixed to avoid colliding with NavMenu attributes _default = 'hot' _options = ('hot', 'new', 'top', 'old', 'controversial') _type = 'lightdrop' _title = N_("sorted by") def __init__(self, default=None, title='', base_path='', separator='|', _id='', css_class=''): options = self.make_buttons() default = default or self._default base_path = base_path or request.path NavMenu.__init__(self, options, default=default, title=_(self._title), type=self._type, base_path=base_path, separator=separator, _id=_id, css_class=css_class) def make_buttons(self): buttons = [] for name in self._options: css_class = 'hidden' if name in self.hidden_options else '' button = self.button_cls(self.make_title(name), name, self.name, css_class=css_class) buttons.append(button) return buttons def make_title(self, attr): return menu[attr] @classmethod def operator(self, sort): if sort == 'hot': return operators.desc('_hot') elif sort == 'new': return operators.desc('_date') elif sort == 'old': return operators.asc('_date') elif sort == 'top': return operators.desc('_score') elif sort == 'controversial': return operators.desc('_controversy') elif sort == 'confidence': return operators.desc('_confidence') elif sort == 'random': return operators.shuffled('_confidence')
def __init__(self): config = {'name': N_('Thread import tool'), 'deps': ('adminpanel', )} BasePlugin.__init__(self, 'threadimport', config)
class SponsorListingController(PromoteListingController): titles = dict( PromoteListingController.titles.items() + { 'underdelivered': N_('underdelivered promoted links'), 'reported': N_('reported promoted links'), 'house': N_('house promoted links'), }.items()) base_path = '/sponsor/promoted' @property def title_text(self): return _('promos on reddit') @property def menus(self): if self.sort in {'underdelivered', 'reported', 'house'}: menus = [] else: menus = super(SponsorListingController, self).menus menus.append( NavMenu([ QueryButton("exclude managed", dest=None, query_param='include_managed'), QueryButton("include managed", dest="yes", query_param='include_managed'), ], base_path=request.path, type='lightdrop')) if self.sort == 'live_promos': srnames = promote.all_live_promo_srnames() buttons = [NavButton('all', '', use_params=True)] try: srnames.remove(Frontpage.name) frontbutton = NavButton('FRONTPAGE', Frontpage.name, use_params=True, aliases=[ '/promoted/live_promos/%s' % urllib.quote(Frontpage.name) ]) buttons.append(frontbutton) except KeyError: pass srnames = sorted(srnames, key=lambda name: name.lower()) buttons.extend( NavButton(name, name, use_params=True) for name in srnames) base_path = self.base_path + '/live_promos' menus.append( NavMenu(buttons, base_path=base_path, title='subreddit', type='lightdrop')) return menus @classmethod @memoize('live_by_subreddit', time=300) def _live_by_subreddit(cls, sr_names): promotuples = promote.get_live_promotions(sr_names) return [pt.link for pt in promotuples] def live_by_subreddit(cls, sr): return cls._live_by_subreddit([sr.name]) @classmethod @memoize('house_link_names', time=60) def get_house_link_names(cls): now = promote.promo_datetime_now() campaign_ids = PromotionWeights.get_campaign_ids(now) q = PromoCampaign._query(PromoCampaign.c._id.in_(campaign_ids), PromoCampaign.c.priority_name == 'house', data=True) link_names = { Link._fullname_from_id36(to36(camp.link_id)) for camp in q } return sorted(link_names, reverse=True) def keep_fn(self): base_keep_fn = PromoteListingController.keep_fn(self) def keep(item): if not self.include_managed and item.managed_promo: return False return base_keep_fn(item) return keep def query(self): if self.sort == "future_promos": return queries.get_all_unapproved_links() elif self.sort == "pending_promos": return queries.get_all_accepted_links() elif self.sort == "unpaid_promos": return queries.get_all_unpaid_links() elif self.sort == "rejected_promos": return queries.get_all_rejected_links() elif self.sort == "live_promos" and self.sr: return self.live_by_subreddit(self.sr) elif self.sort == 'live_promos': return queries.get_all_live_links() elif self.sort == 'underdelivered': q = queries.get_underdelivered_campaigns() campaigns = PromoCampaign._by_fullname(list(q), data=True, return_dict=False) link_ids = [camp.link_id for camp in campaigns] return [Link._fullname_from_id36(to36(id)) for id in link_ids] elif self.sort == 'reported': return queries.get_reported_links(Subreddit.get_promote_srid()) elif self.sort == 'house': return self.get_house_link_names() elif self.sort == 'all': return queries.get_all_promoted_links() @validate( VSponsorAdmin(), srname=nop('sr'), include_managed=VBoolean("include_managed"), ) def GET_listing(self, srname=None, include_managed=False, sort="all", **kw): self.sort = sort self.sr = None self.include_managed = include_managed if srname: try: self.sr = Subreddit._by_name(srname) except NotFound: pass return ListingController.GET_listing(self, **kw)
def __init__(self): config = {'name': N_('Personal tags module'), 'deps': ('base_view', )} BasePlugin.__init__(self, 'usertags', config)
filters.safemarkdown(thing.resources, nofollow=True) or "") elif attr == "websocket_url": if thing.state == "live": return websockets.make_url( "/live/" + thing._id, max_age=24 * 60 * 60) else: return None else: return ThingJsonTemplate.thing_attr(self, thing, attr) def kind(self, wrapped): return "LiveUpdateEvent" REPORT_TYPES = collections.OrderedDict(( ("spam", N_("spam")), ("vote-manipulation", N_("vote manipulation")), ("personal-information", N_("personal information")), ("sexualizing-minors", N_("sexualizing minors")), ("site-breaking", N_("breaking reddit")), )) class LiveUpdateEventApp(Templated): def __init__(self, event, listing, show_sidebar, report_type): self.event = event self.listing = listing if show_sidebar: self.discussions = LiveUpdateOtherDiscussions() self.show_sidebar = show_sidebar
class HousePriority(PriorityLevel): name = 'house' _text = N_('house') _description = N_('non-CPM, displays in all unsold impressions') inventory_override = True