From 89a65e9eb137cdeed5ffee8d6e8f56b7c47eec25 Mon Sep 17 00:00:00 2001 From: bsimpson63 Date: Wed, 17 Oct 2012 16:16:33 -0400 Subject: [PATCH] Get rid of editable_add_props. It was doing too much, and also the last place where the campaigns dict attribute was still put onto promoted links. --- r2/r2/controllers/promotecontroller.py | 10 ++++++---- r2/r2/lib/pages/pages.py | 9 +++++---- r2/r2/lib/promote.py | 22 +++++++++++++--------- r2/r2/templates/promotelinkform.html | 8 ++++---- 4 files changed, 28 insertions(+), 21 deletions(-) diff --git a/r2/r2/controllers/promotecontroller.py b/r2/r2/controllers/promotecontroller.py index d4d290590..d08f9d2c0 100644 --- a/r2/r2/controllers/promotecontroller.py +++ b/r2/r2/controllers/promotecontroller.py @@ -377,12 +377,14 @@ class PromoteController(ListingController): if indx is not None: promote.edit_campaign(l, indx, dates, bid, sr) - l = promote.editable_add_props(l) - jquery.update_campaign(*l.campaigns[indx]) + renderable_campaigns = promote.get_renderable_campaigns(l) + campaign = renderable_campaigns[indx] + jquery.update_campaign(*campaign) else: indx = promote.new_campaign(l, dates, bid, sr) - l = promote.editable_add_props(l) - jquery.new_campaign(*l.campaigns[indx]) + renderable_campaigns = promote.get_renderable_campaigns(l) + campaign = renderable_campaigns[indx] + jquery.new_campaign(*campaign) @validatedForm(VSponsor('link_id'), VModhash(), diff --git a/r2/r2/lib/pages/pages.py b/r2/r2/lib/pages/pages.py index f1c80ac6e..ca30bbf99 100755 --- a/r2/r2/lib/pages/pages.py +++ b/r2/r2/lib/pages/pages.py @@ -3146,8 +3146,8 @@ class PromoteLinkForm(Templated): Subreddit.submit_sr_names(None)) self.default_sr = (self.subreddits[0] if self.subreddits else g.default_sr) - # have the promo code wrap the campaigns for rendering - self.link = promote.editable_add_props(link) + self.link = promote.wrap_promoted(link) + self.campaigns = promote.get_renderable_campaigns(link) self.promotion_log = promote.PromotionLog.get(link) if not c.user_is_sponsor: @@ -3351,8 +3351,9 @@ class PaymentForm(Templated): def __init__(self, link, indx, **kw): self.countries = [pycountry.countries.get(name=n) for n in g.allowed_pay_countries] - self.link = promote.editable_add_props(link) - self.campaign = self.link.campaigns[indx] + self.link = promote.wrap_promoted(link) + campaigns = promote.get_renderable_campaigns(link) + self.campaign = campaigns[indx] self.indx = indx Templated.__init__(self, **kw) diff --git a/r2/r2/lib/promote.py b/r2/r2/lib/promote.py index 8806dba03..b12715ee4 100644 --- a/r2/r2/lib/promote.py +++ b/r2/r2/lib/promote.py @@ -310,18 +310,22 @@ class RenderableCampaign(): for s in self.__slots__: yield getattr(self, s) -def editable_add_props(l): - if not isinstance(l, Wrapped): - l = Wrapped(l) - l.bids = get_transactions(l) +def get_renderable_campaigns(link): + campaigns = PromoCampaign._by_link(link._id) + bids = get_transactions(link) + renderable = {} + for campaign in campaigns: + rc = RenderableCampaign(link, campaign, bids.get(campaign._id)) + renderable[campaign._id] = rc + return renderable - campaigns = {} - for campaign in PromoCampaign._by_link(l._id): - campaigns[campaign._id] = RenderableCampaign(l, campaign, l.bids.get(campaign._id)) - l.campaigns = campaigns - return l +def wrap_promoted(link): + if not isinstance(link, Wrapped): + link = Wrapped(link) + return link + # These could be done with relationships, but that seeks overkill as # we never query based on user and only check per-thing diff --git a/r2/r2/templates/promotelinkform.html b/r2/r2/templates/promotelinkform.html index e77c3500b..f7b4e3de2 100644 --- a/r2/r2/templates/promotelinkform.html +++ b/r2/r2/templates/promotelinkform.html @@ -84,7 +84,7 @@ ${unsafe(js.use('sponsored'))}

-
@@ -217,7 +217,7 @@ ${unsafe(js.use('sponsored'))}
- +
@@ -233,7 +233,7 @@ ${unsafe(js.use('sponsored'))}
start end

+ style="${'display:none' if thing.campaigns else ''}"> You don't have any campaigns for this link yet. You should add one.