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'))}
-
+
| start |
end |
@@ -233,7 +233,7 @@ ${unsafe(js.use('sponsored'))}
+ style="${'display:none' if thing.campaigns else ''}">
You don't have any campaigns for this link yet. You should add one.