vote: Add get_details method to fetch vote details.

This commit is contained in:
Neil Williams
2012-09-12 20:39:33 -07:00
parent 57f20be12e
commit 34d93cac28
2 changed files with 20 additions and 8 deletions

View File

@@ -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,

View File

@@ -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):