diff --git a/r2/r2/controllers/promotecontroller.py b/r2/r2/controllers/promotecontroller.py index 1875d45cf..4ed712875 100644 --- a/r2/r2/controllers/promotecontroller.py +++ b/r2/r2/controllers/promotecontroller.py @@ -144,7 +144,7 @@ class PromoteController(ListingController): note = nop("note")) def POST_promote_note(self, form, jquery, link, note): if promote.is_promo(link): - text = promote.PromotionLog.add(link, note) + text = PromotionLog.add(link, note) form.find(".notes").children(":last").after( "

" + text + "

") diff --git a/r2/r2/lib/pages/pages.py b/r2/r2/lib/pages/pages.py index e00c17792..912a82f28 100755 --- a/r2/r2/lib/pages/pages.py +++ b/r2/r2/lib/pages/pages.py @@ -27,6 +27,7 @@ from r2.models import Friends, All, Sub, NotFound, DomainSR, Random, Mod, Random from r2.models import Link, Printable, Trophy, bidding, PromoCampaign, PromotionWeights, Comment from r2.models import Flair, FlairTemplate, FlairTemplateBySubredditIndex from r2.models import USER_FLAIR, LINK_FLAIR +from r2.models.promo import PromotionLog from r2.models.token import OAuth2Client, OAuth2AccessToken from r2.models import traffic from r2.models import ModAction @@ -3149,7 +3150,7 @@ class PromoteLinkForm(Templated): self.link = promote.wrap_promoted(link) campaigns = PromoCampaign._by_link(link._id) self.campaigns = promote.get_renderable_campaigns(link, campaigns) - self.promotion_log = promote.PromotionLog.get(link) + self.promotion_log = PromotionLog.get(link) if not c.user_is_sponsor: self.now = promote.promo_datetime_now().date() diff --git a/r2/r2/lib/promote.py b/r2/r2/lib/promote.py index 2822c5f7d..99b3c259f 100644 --- a/r2/r2/lib/promote.py +++ b/r2/r2/lib/promote.py @@ -30,7 +30,7 @@ from r2.models.bidding import SponsorBoxWeightings, WeightingRef from r2.models.keyvalue import NamedGlobals from r2.lib.wrapped import Wrapped from r2.lib import authorize -from r2.lib import emailer, filters +from r2.lib import emailer from r2.lib.template_helpers import get_domain from r2.lib.utils import Enum, UniqueIterator, tup from r2.lib.organic import keep_fresh_links @@ -41,7 +41,6 @@ from r2.lib.db.queries import set_promote_status import itertools import random -from uuid import uuid1 UPDATE_QUEUE = 'update_promos_q' @@ -897,6 +896,7 @@ def get_total_run(link): return earliest, latest +<<<<<<< HEAD class PromotionLog(tdb_cassandra.View): _use_db = True _connection_pool = 'main' diff --git a/r2/r2/models/promo.py b/r2/r2/models/promo.py index 7c7fd2809..bf60fe21a 100644 --- a/r2/r2/models/promo.py +++ b/r2/r2/models/promo.py @@ -21,9 +21,12 @@ ############################################################################### from datetime import datetime +from uuid import uuid1 -from pylons import g +from pylons import g, c +from r2.lib import filters +from r2.lib.db import tdb_cassandra from r2.lib.db.thing import Thing, NotFound from r2.lib.memoize import memoize from r2.lib.utils import Enum @@ -102,3 +105,33 @@ class PromoCampaign(Thing): self._deleted = True self._commit() +class PromotionLog(tdb_cassandra.View): + _use_db = True + _connection_pool = 'main' + _compare_with = tdb_cassandra.TIME_UUID_TYPE + + @classmethod + def _rowkey(cls, link): + return link._fullname + + @classmethod + def add(cls, link, text): + name = c.user.name if c.user_is_loggedin else "" + now = datetime.now(g.tz).strftime("%Y-%m-%d %H:%M:%S") + text = "[%s: %s] %s" % (name, now, text) + rowkey = cls._rowkey(link) + column = {uuid1(): filters._force_utf8(text)} + cls._set_values(rowkey, column) + return text + + @classmethod + def get(cls, link): + rowkey = cls._rowkey(link) + try: + row = cls._byID(rowkey) + except tdb_cassandra.NotFound: + return [] + tuples = sorted(row._values().items(), key=lambda t: t[0].time) + return [t[1] for t in tuples] + +