def _checkpoint_details(): """ Gets detailed information about a (User)Checkpoint given its id. """ CheckpointDetail = namedtuple("CheckpointDetail", ("user_checkpoint_obj", "total_likes", "total_shares", "current_user_like", "comments", "user", )) user_id = request.args.get("user_id") user_checkpoint_id = request.args.get("user_checkpoint_id") user_obj = get_user(user_id) user_checkpoint_obj = get_user_checkpoint(user_checkpoint_id) total_likes = get_total_likes(user_checkpoint_obj) total_shares = get_total_shares(user_checkpoint_obj) current_user_like = (not get_like_w_attr(user_obj, user_checkpoint_obj.checkpoint) is None) comments = get_checkpoint_comments(user_checkpoint_obj.checkpoint) checkpoint_user_obj = user_checkpoint_obj.user user = {"name": checkpoint_user_obj.facebook_user.name, "facebook_portrait_url": "https://graph.facebook.com/%s/picture" % checkpoint_user_obj.facebook_user.id, } res = CheckpointDetail(user_checkpoint_obj, total_likes, total_shares, current_user_like, comments, user ) return res
def sort_checkpoints(ucp_lis, sort_method, **kwargs): """ sorts checkpoints according to method supplied. methods available are: newest, nearest, popular if "nearest" method is chosen, longitude/latitude kw args should be provided. """ sorted_ucp = None if sort_method == "popular": sorted_ucp = sorted(ucp_lis, key=lambda ucp: get_total_likes(ucp), reverse=True) elif sort_method == "nearest": lat, lon = kwargs["latitude"], kwargs["longitude"] ucp_namedtuples = _checkpoints_to_location_namedtuples(ucp_lis) sorted_ucp = proximity_sort((lat, lon), ucp_namedtuples, len(ucp_namedtuples)) sorted_ucp = [ucp[1] for ucp in sorted_ucp] else: #newest sorted_ucp = sorted(ucp_lis, key=lambda ucp: ucp.checkpoint.date_created, reverse=True) return sorted_ucp