def bottom_users(self): if self.__bottom_users: return self.__bottom_users user_db = get_user_database() users = user_db.root.values() bykarma = sort_list(users, lambda x: -(x.get_karma_score()), count=self._list_count) self.__bottom_users = bykarma return self.__bottom_users
def recent_edits_by_author(self, author, count=10): """Return count pages most-recently edited by author.""" edits = [] for name, page in self.pages.items(): version = page.latest_edit_by(author) if version: edits.append(page) edits = sort_list(edits, lambda x: x.watchable_last_change(), count=count) return edits
def biggest_bank(self): if self.__biggest_bank: return self.__biggest_bank user_db = get_user_database() users = user_db.root.values() bybank = sort_list(users, lambda x: x.get_karma_bank_balance(read_only=True), count=self._list_count) self.__biggest_bank = bybank return self.__biggest_bank
def highest_score_items(wikis, count=10): """Return list of highest scoring items across multiple wikis. The order in which tied items are returned is not defined. """ wikis = coerce_to_list(wikis) items = [] for wiki in wikis: items.extend(wiki.highest_score_items(count)) bykarma = sort_list(items, lambda x: x.get_karma_score(), count=count) return bykarma
def highest_score_items(blogs, count=10): """Return list of highest scoring items across multiple blogs. The order in which tied items are returned is not defined. """ blogs = coerce_to_list(blogs) items = [] for blog in blogs: items.extend(blog.highest_score_items(count)) items = sort_list(items, lambda x: x.get_karma_score()) return items
def most_friends(self): if self.__most_friends: return self.__most_friends user_db = get_user_database() users = user_db.root.values() # elim zeros users = [u for u in users if u.positive_karma_givers()] byfriends = sort_list(users, lambda x: len(x.positive_karma_givers()), count=self._list_count) self.__most_friends = byfriends return self.__most_friends
def recent_items_by_author(blogs, author, count=10, not_by=0): """Return list of recent items by author(s) across multiple blogs. If not_by is not zero, returns the complement (i.e., items not by the given author(s). author may be given as a single User instance or a list of Users. """ blogs = coerce_to_list(blogs) items = [] for blog in blogs: items.extend(blog.recent_items_by_author(author, count, not_by)) items = sort_list(items, lambda x: x.last_modified(), count=count) return items
def newest_users(self): if self.__newest_users: return self.__newest_users user_db = get_user_database() users = user_db.root.values() # elim unnamed users (so that we don't expose new users' email addresses) users = [u for u in users if u.contact_name] bydate = sort_list(users, lambda x: x.get_user_data().member_since(), count=self._list_count) self.__newest_users = bydate return self.__newest_users
def most_critical(self): if self.__most_critical: return self.__most_critical user_db = get_user_database() users = user_db.root.values() # elim zeros users = [u for u in users if u.karma_minus_given()] bygiven = sort_list(users, lambda x: x.karma_minus_given(), count=self._list_count) self.__most_critical = bygiven return self.__most_critical
def most_active(self): _days_cutoff = 3 if self.__most_active: return self.__most_active user_db = get_user_database() users = user_db.root.values() # elim users who haven't even been on the site in the last 3 days cutoff_date = datetime.utcnow() - timedelta(days=_days_cutoff) users = [(u, u.get_activity().activity_count(_days_cutoff)) for u in users if u.last_hit and u.last_hit > cutoff_date] get_connection().cacheGC() byactivity = sort_list(users, lambda x: x[1], count=self._list_count) self.__most_active = byactivity return self.__most_active