def list_friends(request, user_id): asi_session = request.session['asi_session'] try: profile_user = api.people.get(user_id) except api.people.UserDoesNotExist: raise Http404 friend_ids = api.people.get_friends(user_id) friends = [] for friend_id in friend_ids: try: friend = api.people.get(friend_id) friend['num_mutual_friends'] = len(api.people.get_mutual_friends( asi_session.user_id, friend_id)) friend['num_mutual_courses'] = len(utils.mutual_courses( asi_session.user_id, friend_id)) friends.append(friend) except api.people.UserDoesNotExist: # Invalid friend relationship where friend does not exist in ASI pass pending_requests = [] if asi_session.user_id == user_id: pending_friend_ids = asi_session.get_pending_friend_requests() for friend_id in pending_friend_ids: try: pending = api.people.get(friend_id) pending['num_mutual_friends'] = len(api.people.get_mutual_friends( asi_session.user_id, friend_id)) pending['num_mutual_courses'] = len(utils.mutual_courses( asi_session.user_id, friend_id)) pending_requests.append(pending) except api.people.UserDoesNotExist: # Invalid friend relationship where friend does not exist in ASI pass template = loader.get_template("frontpage/friends.html") context = RequestContext(request, { 'asi_session': request.session['asi_session'], 'ASI_BASE_URL': ASI_BASE_URL, 'friends': friends, 'requests': pending_requests, 'profile_user': profile_user, 'template': 'friends' }) return HttpResponse(template.render(context))
def profile(request, user_id=None): template = loader.get_template("frontpage/profile.html") asi_session = request.session['asi_session'] user_id = user_id if user_id else asi_session.user_id try: user = api.people.get(user_id) except api.people.UserDoesNotExist: raise Http404 username = user['username'] try: realname = user['name']['unstructured'] except (KeyError, TypeError): realname = username try: avatar_url = '{0}{1}/large_thumbnail'.format( ASI_BASE_URL, user['avatar']['link']['href']) except (KeyError, TypeError): avatar_url = '' feedurl = 'frontpage/feeds.html' feeds = EventLog.constructor(user_ids=user_id) # mutual friends mutual_friends = [] mutual_friend_ids = api.people.get_mutual_friends( asi_session.user_id, user_id) for mutual_friend_id in mutual_friend_ids: mutual_friends.append(api.people.get(mutual_friend_id)) # mutual courses mutual_courses = [] mutual_course_ids = utils.mutual_courses( asi_session.user_id, user_id) for mutual_course_id in mutual_course_ids: try: mutual_courses.append(api.course.get_course(mutual_course_id)) except Exception: # Just ignore invalid course codes pass context = RequestContext(request, { 'asi_session': request.session['asi_session'], 'ASI_BASE_URL': ASI_BASE_URL, 'profile_user': user, 'username': username, 'realname': realname, 'avatar_url': avatar_url, 'template': 'profile', 'feedurl': feedurl, 'feeds': feeds, 'mutual_friends': mutual_friends, 'mutual_courses': mutual_courses }) return HttpResponse(template.render(context))
def search(request): template = loader.get_template("frontpage/search.html") searchform = SearchForm(request.GET) asi_session = request.session['asi_session'] if searchform.is_valid(): query = searchform.cleaned_data['query'] scope = searchform.cleaned_data['scope'] userresults = [] courseresults = [] if scope == 'all' or scope == 'users': for userid in api.people.search(query): try: details = api.people.get(userid) except api.people.UserDoesNotExist: continue # Note that is a set, template gets to count them details['mutual_friends'] = api.people.get_mutual_friends( asi_session.user_id, userid) details['mutual_courses'] = utils.mutual_courses( asi_session.user_id, userid) userresults.append(details) if scope == 'all' or scope == 'courses': for coursecode in api.course.search(query): try: details = api.course.get_course(coursecode) except Exception: # Just ignore invalid course codes. continue details['friendcount'] = utils. \ count_friends_taking_course(asi_session.user_id, coursecode) courseresults.append(details) context = RequestContext(request, { 'ASI_BASE_URL': ASI_BASE_URL, 'searchform': searchform, 'userresults': userresults, 'courseresults': courseresults, 'query': query, 'asi_session': request.session['asi_session'] }) else: context = RequestContext(request, { 'searchform': searchform, 'asi_session': request.session['asi_session'] }) return HttpResponse(template.render(context))