mirror of
https://github.com/reddit-archive/reddit.git
synced 2026-04-27 03:00:12 -04:00
vote: Add get_details method to fetch vote details.
This commit is contained in:
@@ -1429,14 +1429,6 @@ class View(ThingBase):
|
||||
# TODO: at present this only grabs max_column_count columns
|
||||
return self._t
|
||||
|
||||
@classmethod
|
||||
def get_time_sorted_columns(cls, rowkey, limit=None):
|
||||
q = cls._cf.xget(rowkey, include_timestamp=True)
|
||||
r = sorted(q, key=lambda i: i[1][1]) # (col_name, (col_val, timestamp))
|
||||
if limit:
|
||||
r = r[:limit]
|
||||
return OrderedDict([(i[0], i[1][0]) for i in r])
|
||||
|
||||
@classmethod
|
||||
@will_write
|
||||
def _set_values(cls, row_key, col_values,
|
||||
|
||||
@@ -208,6 +208,7 @@ class CommentVotesByAccount(VotesByAccount):
|
||||
class VoteDetailsByThing(tdb_cassandra.View):
|
||||
_use_db = False
|
||||
_ttl = 60 * 60 * 24 * 30
|
||||
_fetch_all_columns = True
|
||||
_extra_schema_creation_args = dict(key_validation_class=ASCII_TYPE,
|
||||
default_validation_class=UTF8_TYPE)
|
||||
|
||||
@@ -229,6 +230,25 @@ class VoteDetailsByThing(tdb_cassandra.View):
|
||||
|
||||
cls._set_values(votee._id36, {voter._id36: json.dumps(details)})
|
||||
|
||||
@classmethod
|
||||
def get_details(cls, thing):
|
||||
if isinstance(thing, Link):
|
||||
details_cls = VoteDetailsByLink
|
||||
elif isinstance(thing, Comment):
|
||||
details_cls = VoteDetailsByComment
|
||||
else:
|
||||
raise ValueError
|
||||
|
||||
raw_details = details_cls._byID(thing._id36)._values()
|
||||
details = []
|
||||
for key, value in raw_details.iteritems():
|
||||
data = Storage(json.loads(value))
|
||||
data["_id"] = key + "_" + thing._id36
|
||||
data["voter_id"] = key
|
||||
details.append(data)
|
||||
details.sort(key=lambda d: d["date"])
|
||||
return details
|
||||
|
||||
|
||||
@tdb_cassandra.view_of(LinkVotesByAccount)
|
||||
class VoteDetailsByLink(VoteDetailsByThing):
|
||||
|
||||
Reference in New Issue
Block a user