def single(request): searchParams = dict(request.GET._iterlists()) if searchParams.get('defaults'): searchParams['inTitle'] = 'true' searchParams['sort'] = 'date' url, params, headers = Search.build_request(request.get_host(), params=searchParams, access_token=request.access_token) request.view_requests.append(grequests.get(url, params=params, headers=headers)) try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) search = Search.from_api_response(responses[url]) view_data = { 'user': Profile(responses[request.whoami_url], summary=False) if request.whoami_url else None, 'site': Site(responses[request.site_url]), 'content': search, } if responses[url].get('results'): view_data['pagination'] = build_pagination_links(responses[url]['results']['links'], search.results) return render(request, single_template, view_data)
def list(request): # Offset for paging of huddles try: offset = int(request.GET.get('offset', 0)) except ValueError: offset = 0 huddle_url, params, headers = HuddleList.build_request(request.get_host(), offset=offset, access_token=request.access_token) request.view_requests.append(grequests.get(huddle_url, params=params, headers=headers)) try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) huddles = HuddleList(responses[huddle_url]) view_data = { 'user': Profile(responses[request.whoami_url], summary=False) if request.whoami_url else None, 'site': Site(responses[request.site_url]), 'content': huddles, 'pagination': build_pagination_links(responses[huddle_url]['huddles']['links'], huddles.huddles) } return render(request, list_template, view_data)
def testLinks(self): """ Assert that a response containing a 'next page' link is correctly represnted in navigation. """ host = generate_location() path = '/conversations/1' # Create a request for a list of microcosms request = self.factory.get(path, HTTP_HOST=host) request.access_token = None request.whoami = None request.site = None data = json.loads( open( os.path.join(TEST_ROOT, 'data', 'conversation_with_paginated_comments.json')). read())['data'] conversation = Conversation.from_api_response(data) with patch('requests.get') as mock: mock.return_value.json.return_value = conversation pagination_nav = build_pagination_links(request, conversation.comments) assert pagination_nav['page'] == 1 assert pagination_nav['offset'] == 0 assert pagination_nav['total_pages'] == 2 assert pagination_nav['limit'] == 25
def ignored(request): try: offset = int(request.GET.get('offset', 0)) except ValueError: offset = 0 url, params, headers = Ignored.build_request( request.get_host(), offset=offset, access_token=request.access_token) request.view_requests.append( grequests.get(url, params=params, headers=headers)) try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) ignoredItems = Ignored.from_api_response(responses[url]) view_data = { 'user': Profile(responses[request.whoami_url], summary=False) if request.whoami_url else None, 'site': Site(responses[request.site_url]), 'content': ignoredItems, 'pagination': build_pagination_links(responses[url]['ignored']['links'], ignoredItems), 'site_section': 'ignored', } return render(request, template_name, view_data)
def watchers(request): if request.method == 'POST': if 'watcher_id' in request.POST: watchers = request.POST.getlist('watcher_id') for w in watchers: if request.POST.get('delete_watcher_' + str(w)): Watcher.delete(request.get_host(), w, request.access_token) else: postdata = { 'id': int(w), 'sendEmail': bool(request.POST.get('send_email_' + str(w))), 'receiveSMS': False, } Watcher.update(request.get_host(), int(w), postdata, request.access_token) return HttpResponseRedirect(reverse('watchers')) if request.method == 'GET': # pagination offset offset = int(request.GET.get('offset', 0)) url, params, headers = WatcherList.build_request(request.get_host(), offset=offset, access_token=request.access_token) request.view_requests.append(grequests.get(url, params=params, headers=headers)) responses = response_list_to_dict(grequests.map(request.view_requests)) watchers_list = WatcherList(responses[url]) view_data = { 'user': Profile(responses[request.whoami_url], summary=False), 'site': Site(responses[request.site_url]), 'content': watchers_list, 'pagination': build_pagination_links(responses[url]['watchers']['links'], watchers_list.watchers) } return render(request, watchers_template, view_data)
def create_members(request, microcosm_id): if request.method == 'POST': pass elif request.method == 'GET': offset = int(request.GET.get('offset', 0)) microcosm_url, params, headers = Microcosm.build_request(request.get_host(), id=microcosm_id, offset=offset, access_token=request.access_token) request.view_requests.append(grequests.get(microcosm_url, params=params, headers=headers)) try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) microcosm = Microcosm.from_api_response(responses[microcosm_url]) view_data = { 'user': Profile(responses[request.whoami_url], summary=False) if request.whoami_url else None, 'site': Site(responses[request.site_url]), 'site_section': 'memberships', 'content': microcosm, 'item_type': 'memberships', 'pagination': build_pagination_links(responses[microcosm_url]['items']['links'], microcosm.items) } return render(request, members_form_template, view_data)
def list_updates(request): if not request.access_token: try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) view_data = { 'user': False, 'site_section': 'updates', 'site': Site(responses[request.site_url]), } else: # pagination offset offset = int(request.GET.get('offset', 0)) url, params, headers = UpdateList.build_request(request.get_host(), offset=offset, access_token=request.access_token) request.view_requests.append(grequests.get(url, params=params, headers=headers)) try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) updates_list = UpdateList(responses[url]) view_data = { 'user': Profile(responses[request.whoami_url], summary=False), 'content': updates_list, 'pagination': build_pagination_links(responses[url]['updates']['links'], updates_list.updates), 'site_section': 'updates', 'site': Site(responses[request.site_url]), } return render(request, list_template, view_data)
def list(request): # TODO: need a user friendly error page for unregistered users # TODO: remove 'site_section' if not request.access_token: responses = response_list_to_dict(grequests.map(request.view_requests)) view_data = { 'user': False, 'site_section': 'updates', 'site': Site(responses[request.site_url]), } else: # pagination offset try: offset = int(request.GET.get('offset', 0)) except ValueError: offset = 0 url, params, headers = UpdateList.build_request(request.get_host(), offset=offset, access_token=request.access_token) request.view_requests.append(grequests.get(url, params=params, headers=headers)) responses = response_list_to_dict(grequests.map(request.view_requests)) updates_list = UpdateList(responses[url]) view_data = { 'user': Profile(responses[request.whoami_url], summary=False), 'content': updates_list, 'pagination': build_pagination_links(responses[url]['updates']['links'], updates_list.updates), 'site_section': 'updates', 'site': Site(responses[request.site_url]), } return render(request, UpdateView.list_template, view_data)
def single_microcosm(request, microcosm_id): # Pagination offset of items within the microcosm. try: offset = int(request.GET.get('offset', 0)) except ValueError: offset = 0 microcosm_url, params, headers = Microcosm.build_request(request.get_host(), id=microcosm_id, offset=offset, access_token=request.access_token) request.view_requests.append(grequests.get(microcosm_url, params=params, headers=headers)) try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) microcosm = Microcosm.from_api_response(responses[microcosm_url]) view_data = { 'user': Profile(responses[request.whoami_url], summary=False) if request.whoami_url else None, 'site': Site(responses[request.site_url]), 'content': microcosm, 'item_type': 'microcosm', 'pagination': build_pagination_links(responses[microcosm_url]['items']['links'], microcosm.items) } return render(request, microcosm_single_template, view_data)
def testLinks(self): """ Assert that a response containing a 'next page' link is correctly represnted in navigation. """ host = generate_location() path = "/conversations/1" # Create a request for a list of microcosms request = self.factory.get(path, HTTP_HOST=host) request.access_token = None request.whoami = None request.site = None data = json.loads(open(os.path.join(TEST_ROOT, "data", "conversation_with_paginated_comments.json")).read())[ "data" ] conversation = Conversation.from_api_response(data) with patch("requests.get") as mock: mock.return_value.json.return_value = conversation pagination_nav = build_pagination_links(request, conversation.comments) assert pagination_nav["page"] == 1 assert pagination_nav["offset"] == 0 assert pagination_nav["total_pages"] == 2 assert pagination_nav["limit"] == 25
def list_members(request, microcosm_id): try: offset = int(request.GET.get('offset', 0)) except ValueError: offset = 0 microcosm_url, params, headers = Microcosm.build_request(request.get_host(), id=microcosm_id, offset=offset, access_token=request.access_token) request.view_requests.append(grequests.get(microcosm_url, params=params, headers=headers)) try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) microcosm = Microcosm.from_api_response(responses[microcosm_url]) roles_url, params, headers = RoleList.build_request(request.META['HTTP_HOST'], id=microcosm_id, offset=offset, access_token=request.access_token) request.view_requests.append(grequests.get(roles_url, params=params, headers=headers)) try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) roles = RoleList.from_api_response(responses[roles_url]) view_data = { 'user': Profile(responses[request.whoami_url], summary=False) if request.whoami_url else None, 'site': Site(responses[request.site_url]), 'site_section': 'memberships', 'content': microcosm, 'memberships': roles, 'item_type': 'microcosm', 'pagination': build_pagination_links(responses[roles_url]['roles']['links'], roles.items) } return render(request, members_list_template, view_data)
def list(request): # Offset for paging of huddles try: offset = int(request.GET.get('offset', 0)) except ValueError: offset = 0 unread = bool(request.GET.get('unread', False)) huddle_url, params, headers = HuddleList.build_request(request.get_host(), offset=offset, unread=unread, access_token=request.access_token) request.view_requests.append(grequests.get(huddle_url, params=params, headers=headers)) try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) huddles = HuddleList(responses[huddle_url]) filter_name = [] if unread: filter_name.append("unread") view_data = { 'user': Profile(responses[request.whoami_url], summary=False) if request.whoami_url else None, 'site': Site(responses[request.site_url]), 'content': huddles, 'unread': unread, 'pagination': build_pagination_links(responses[huddle_url]['huddles']['links'], huddles.huddles) } return render(request, list_template, view_data)
def ignored(request): try: offset = int(request.GET.get('offset', 0)) except ValueError: offset = 0 url, params, headers = Ignored.build_request( request.get_host(), offset=offset, access_token=request.access_token ) request.view_requests.append( grequests.get(url, params=params, headers=headers) ) try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) ignoredItems = Ignored.from_api_response(responses[url]) view_data = { 'user': Profile( responses[request.whoami_url], summary=False ) if request.whoami_url else None, 'site': Site(responses[request.site_url]), 'content': ignoredItems, 'pagination': build_pagination_links(responses[url]['ignored']['links'], ignoredItems), 'site_section': 'ignored', } return render(request, template_name, view_data)
def single(request): searchParams = dict(request.GET._iterlists()) if searchParams.get('defaults'): searchParams['inTitle'] = 'true' searchParams['sort'] = 'date' url, params, headers = Search.build_request( request.get_host(), params=searchParams, access_token=request.access_token) request.view_requests.append( grequests.get(url, params=params, headers=headers)) try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) search = Search.from_api_response(responses[url]) view_data = { 'user': Profile(responses[request.whoami_url], summary=False) if request.whoami_url else None, 'site': Site(responses[request.site_url]), 'content': search, } if responses[url].get('results'): view_data['pagination'] = build_pagination_links( responses[url]['results']['links'], search.results) return render(request, single_template, view_data)
def single(request, conversation_id): # Offset of comments. try: offset = int(request.GET.get('offset', 0)) except ValueError: offset = 0 conversation_url, params, headers = Conversation.build_request( request.get_host(), id=conversation_id, offset=offset, access_token=request.access_token) request.view_requests.append( grequests.get(conversation_url, params=params, headers=headers)) try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) conversation = Conversation.from_api_response(responses[conversation_url]) comment_form = CommentForm( initial=dict(itemId=conversation_id, itemType='conversation')) # get attachments attachments = {} for comment in conversation.comments.items: c = comment.as_dict if 'attachments' in c: c_attachments = Attachment.retrieve( request.get_host(), "comments", c['id'], access_token=request.access_token) attachments[str(c['id'])] = c_attachments view_data = { 'user': Profile(responses[request.whoami_url], summary=False) if request.whoami_url else None, 'site': Site(responses[request.site_url]), 'content': conversation, 'comment_form': comment_form, 'pagination': build_pagination_links( responses[conversation_url]['comments']['links'], conversation.comments), 'item_type': 'conversation', 'attachments': attachments } return render(request, single_template, view_data)
def list(request): # Record offset for paging of profiles. try: offset = int(request.GET.get('offset', 0)) except ValueError: offset = 0 top = bool(request.GET.get('top', False)) q = request.GET.get('q', "") following = bool(request.GET.get('following', False)) online = bool(request.GET.get('online', False)) profiles_url, params, headers = ProfileList.build_request(request.get_host(), offset=offset, top=top, q=q, following=following, online=online, access_token=request.access_token) request.view_requests.append(grequests.get(profiles_url, params=params, headers=headers)) try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) profiles = ProfileList(responses[profiles_url]) subtitle = False if q != "" and len(q) == 1: subtitle = "names starting with %s" % (q.upper()) filter_name = [] if following: filter_name.append("following") if online: filter_name.append("online now") if top: filter_name.append("most comments") if len(filter_name) < 1: filter_name.append("sorted alphabetically") view_data = { 'user': Profile(responses[request.whoami_url], summary=False) if request.whoami_url else None, 'site': Site(responses[request.site_url]), 'content': profiles, 'pagination': build_pagination_links(responses[profiles_url]['profiles']['links'], profiles.profiles), 'q': q, 'top': top, 'following': following, 'alphabet': string.ascii_lowercase, 'site_section': 'people', 'filter_name': ", ".join(filter_name), 'subtitle': subtitle, 'online': online } return render(request, list_template, view_data)
def list_members(request, microcosm_id): try: offset = int(request.GET.get('offset', 0)) except ValueError: offset = 0 microcosm_url, params, headers = Microcosm.build_request( request.get_host(), id=microcosm_id, offset=offset, access_token=request.access_token) request.view_requests.append( grequests.get(microcosm_url, params=params, headers=headers)) try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) microcosm = Microcosm.from_api_response(responses[microcosm_url]) roles_url, params, headers = RoleList.build_request( request.META['HTTP_HOST'], id=microcosm_id, offset=offset, access_token=request.access_token) request.view_requests.append( grequests.get(roles_url, params=params, headers=headers)) try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) roles = RoleList.from_api_response(responses[roles_url]) view_data = { 'user': Profile(responses[request.whoami_url], summary=False) if request.whoami_url else None, 'site': Site(responses[request.site_url]), 'site_section': 'memberships', 'content': microcosm, 'memberships': roles, 'item_type': 'microcosm', 'pagination': build_pagination_links(responses[roles_url]['roles']['links'], roles.items) } return render(request, members_list_template, view_data)
def edit_members(request, microcosm_id, group_id): if request.method == 'POST': pass elif request.method == 'GET': try: offset = int(request.GET.get('offset', 0)) except ValueError: offset = 0 microcosm_url, params, headers = Microcosm.build_request(request.get_host(), id=microcosm_id, offset=offset, access_token=request.access_token) request.view_requests.append(grequests.get(microcosm_url, params=params, headers=headers)) role_url, params, headers = Role.build_request(request.get_host(), microcosm_id=microcosm_id, id=group_id, offset=offset, access_token=request.access_token) request.view_requests.append(grequests.get(role_url, params=params, headers=headers)) criteria_url, params, headers = RoleCriteriaList.build_request(request.get_host(), microcosm_id=microcosm_id, id=group_id, offset=offset, access_token=request.access_token) request.view_requests.append(grequests.get(criteria_url, params=params, headers=headers)) profiles_url, params, headers = RoleProfileList.build_request(request.get_host(), microcosm_id=microcosm_id, id=group_id, offset=offset, access_token=request.access_token) request.view_requests.append(grequests.get(profiles_url, params=params, headers=headers)) try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) microcosm = Microcosm.from_api_response(responses[microcosm_url]) role = Role.from_api_response(responses[role_url]) criteria = RoleCriteriaList(responses[criteria_url]) profiles = RoleProfileList(responses[profiles_url]) view_data = { 'user': Profile(responses[request.whoami_url], summary=False) if request.whoami_url else None, 'site': Site(responses[request.site_url]), 'site_section': 'memberships', 'content': microcosm, 'role': role, 'criteria': criteria, 'profiles': profiles, 'item_type': 'memberships', 'state_edit': True, 'pagination': build_pagination_links(responses[microcosm_url]['items']['links'], microcosm.items) } return render(request, members_form_template, view_data)
def list(request): url, params, headers = Trending.build_request(request.get_host(), access_token=request.access_token) request.view_requests.append(grequests.get(url, params=params, headers=headers)) try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) trending = Trending.from_api_response(responses[url]) view_data = { "user": Profile(responses[request.whoami_url], summary=False) if request.whoami_url else None, "site": Site(responses[request.site_url]), "content": trending, "pagination": build_pagination_links(responses[url]["items"]["links"], trending.items), "site_section": "trending", } return render(request, list_template, view_data)
def list(request): url, params, headers = Trending.build_request(request.get_host(), access_token=request.access_token) request.view_requests.append(grequests.get(url, params=params, headers=headers)) try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) trending = Trending.from_api_response(responses[url]) view_data = { 'user': Profile(responses[request.whoami_url], summary=False) if request.whoami_url else None, 'site': Site(responses[request.site_url]), 'content': trending, 'pagination': build_pagination_links(responses[url]['items']['links'], trending.items), 'site_section': 'trending' } return render(request, list_template, view_data)
def single(request, huddle_id): # Comment offset. try: offset = int(request.GET.get('offset', 0)) except ValueError: offset = 0 huddle_url, params, headers = Huddle.build_request(request.get_host(), id=huddle_id, offset=offset, access_token=request.access_token) request.view_requests.append(grequests.get(huddle_url, params=params, headers=headers)) try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) huddle = Huddle.from_api_response(responses[huddle_url]) comment_form = CommentForm(initial=dict(itemId=huddle_id, itemType='huddle')) # Fetch attachments. attachments = {} for comment in huddle.comments.items: c = comment.as_dict if 'attachments' in c: c_attachments = Attachment.retrieve(request.get_host(), "comments", c['id'], access_token=request.access_token) attachments[str(c['id'])] = c_attachments # Fetch huddle participants. participants_json = [p.as_dict for p in huddle.participants] view_data = { 'user': Profile(responses[request.whoami_url], summary=False) if request.whoami_url else None, 'site': Site(responses[request.site_url]), 'content': huddle, 'comment_form': comment_form, 'pagination': build_pagination_links(responses[huddle_url]['comments']['links'], huddle.comments), 'item_type': 'huddle', 'attachments': attachments, 'participants_json': json.dumps(participants_json) } return render(request, single_template, view_data)
def single(request, conversation_id): # Offset of comments. try: offset = int(request.GET.get('offset', 0)) except ValueError: offset = 0 conversation_url, params, headers = Conversation.build_request(request.get_host(), id=conversation_id, offset=offset, access_token=request.access_token) request.view_requests.append(grequests.get(conversation_url, params=params, headers=headers)) try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) conversation = Conversation.from_api_response(responses[conversation_url]) comment_form = CommentForm(initial=dict(itemId=conversation_id, itemType='conversation')) # get attachments attachments = {} for comment in conversation.comments.items: c = comment.as_dict if 'attachments' in c: c_attachments = Attachment.retrieve(request.get_host(), "comments", c['id'], access_token=request.access_token) attachments[str(c['id'])] = c_attachments view_data = { 'user': Profile(responses[request.whoami_url], summary=False) if request.whoami_url else None, 'site': Site(responses[request.site_url]), 'content': conversation, 'comment_form': comment_form, 'pagination': build_pagination_links(responses[conversation_url]['comments']['links'], conversation.comments), 'item_type': 'conversation', 'attachments': attachments } return render(request, single_template, view_data)
def list(request): if request.method == 'POST': if 'watcher_id' in request.POST: watchers = request.POST.getlist('watcher_id') # TODO: get rid of casts for w in watchers: if request.POST.get('delete_watcher_' + str(w)): Watcher.delete(request.get_host(), w, request.access_token) else: postdata = { 'id': int(w), 'sendEmail': bool(request.POST.get('send_email_' + str(w))), 'receiveSMS': False, } Watcher.update(request.get_host(), int(w), postdata, request.access_token) return HttpResponseRedirect(reverse('list-watchers')) if request.method == 'GET': # pagination offset try: offset = int(request.GET.get('offset', 0)) except ValueError: offset = 0 url, params, headers = WatcherList.build_request(request.get_host(), offset=offset, access_token=request.access_token) request.view_requests.append(grequests.get(url, params=params, headers=headers)) responses = response_list_to_dict(grequests.map(request.view_requests)) watchers_list = WatcherList(responses[url]) view_data = { 'user': Profile(responses[request.whoami_url], summary=False), 'site': Site(responses[request.site_url]), 'content': watchers_list, 'pagination': build_pagination_links(responses[url]['watchers']['links'], watchers_list.watchers) } return render(request, WatcherView.list_template, view_data)
def root_microcosm(request): # Pagination offset of items within the microcosm. try: offset = int(request.GET.get('offset', 0)) except ValueError: offset = 0 microcosm_id = 0 microcosm_url, params, headers = Microcosm.build_request( request.get_host(), id=microcosm_id, offset=offset, access_token=request.access_token) request.view_requests.append( grequests.get(microcosm_url, params=params, headers=headers)) try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) microcosm = Microcosm.from_api_response(responses[microcosm_url]) view_data = { 'user': Profile(responses[request.whoami_url], summary=False) if request.whoami_url else None, 'site': Site(responses[request.site_url]), 'content': microcosm, 'item_type': 'microcosm', 'pagination': build_pagination_links(responses[microcosm_url]['items']['links'], microcosm.items) } return render(request, microcosm_root_template, view_data)
def list_microcosms(request): # Pagination offset of microcosms. offset = int(request.GET.get('offset', 0)) microcosms_url, params, headers = MicrocosmList.build_request(request.get_host(), offset=offset, access_token=request.access_token) request.view_requests.append(grequests.get(microcosms_url, params=params, headers=headers)) try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) microcosms = MicrocosmList(responses[microcosms_url]) view_data = { 'user': Profile(responses[request.whoami_url], summary=False) if request.whoami_url else None, 'site': Site(responses[request.site_url]), 'content': microcosms, 'item_type': 'site', 'pagination': build_pagination_links(responses[microcosms_url]['microcosms']['links'], microcosms.microcosms) } return render(request, microcosm_list_template, view_data)
def edit_members(request, microcosm_id, group_id): if request.method == 'POST': pass elif request.method == 'GET': try: offset = int(request.GET.get('offset', 0)) except ValueError: offset = 0 microcosm_url, params, headers = Microcosm.build_request( request.get_host(), id=microcosm_id, offset=offset, access_token=request.access_token) request.view_requests.append( grequests.get(microcosm_url, params=params, headers=headers)) role_url, params, headers = Role.build_request( request.get_host(), microcosm_id=microcosm_id, id=group_id, offset=offset, access_token=request.access_token) request.view_requests.append( grequests.get(role_url, params=params, headers=headers)) criteria_url, params, headers = RoleCriteriaList.build_request( request.get_host(), microcosm_id=microcosm_id, id=group_id, offset=offset, access_token=request.access_token) request.view_requests.append( grequests.get(criteria_url, params=params, headers=headers)) profiles_url, params, headers = RoleProfileList.build_request( request.get_host(), microcosm_id=microcosm_id, id=group_id, offset=offset, access_token=request.access_token) request.view_requests.append( grequests.get(profiles_url, params=params, headers=headers)) try: responses = response_list_to_dict( grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) microcosm = Microcosm.from_api_response(responses[microcosm_url]) role = Role.from_api_response(responses[role_url]) criteria = RoleCriteriaList(responses[criteria_url]) profiles = RoleProfileList(responses[profiles_url]) view_data = { 'user': Profile(responses[request.whoami_url], summary=False) if request.whoami_url else None, 'site': Site(responses[request.site_url]), 'site_section': 'memberships', 'content': microcosm, 'role': role, 'criteria': criteria, 'profiles': profiles, 'item_type': 'memberships', 'state_edit': True, 'pagination': build_pagination_links(responses[microcosm_url]['items']['links'], microcosm.items) } return render(request, members_form_template, view_data)
def list(request): # Record offset for paging of profiles. try: offset = int(request.GET.get('offset', 0)) except ValueError: offset = 0 top = bool(request.GET.get('top', False)) q = request.GET.get('q', "") following = bool(request.GET.get('following', False)) online = bool(request.GET.get('online', False)) profiles_url, params, headers = ProfileList.build_request( request.get_host(), offset=offset, top=top, q=q, following=following, online=online, access_token=request.access_token) request.view_requests.append( grequests.get(profiles_url, params=params, headers=headers)) try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) profiles = ProfileList(responses[profiles_url]) subtitle = False if q != "" and len(q) == 1: subtitle = "names starting with %s" % (q.upper()) filter_name = [] if following: filter_name.append("following") if online: filter_name.append("online now") if top: filter_name.append("most comments") if len(filter_name) < 1: filter_name.append("sorted alphabetically") view_data = { 'user': Profile(responses[request.whoami_url], summary=False) if request.whoami_url else None, 'site': Site(responses[request.site_url]), 'content': profiles, 'pagination': build_pagination_links(responses[profiles_url]['profiles']['links'], profiles.profiles), 'q': q, 'top': top, 'following': following, 'alphabet': string.ascii_lowercase, 'site_section': 'people', 'filter_name': ", ".join(filter_name), 'subtitle': subtitle, 'online': online } return render(request, list_template, view_data)
def single(request, event_id): """ Display a single event with comments and attendees. """ # Comment offset. try: offset = int(request.GET.get('offset', 0)) except ValueError: offset = 0 # Create request for event resource. event_url, event_params, event_headers = Event.build_request( request.get_host(), id=event_id, offset=offset, access_token=request.access_token) request.view_requests.append( grequests.get(event_url, params=event_params, headers=event_headers)) # Create request for event attendees. att_url, att_params, att_headers = Event.build_attendees_request( request.get_host(), event_id, request.access_token) request.view_requests.append( grequests.get(att_url, params=att_params, headers=att_headers)) # Perform requests and instantiate view objects. try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) event = Event.from_api_response(responses[event_url]) comment_form = CommentForm(initial=dict(itemId=event_id, itemType='event')) user = Profile(responses[request.whoami_url], summary=False) if request.whoami_url else None attendees = AttendeeList(responses[att_url]) attendees_yes = [] attendees_invited = [] user_is_attending = False for attendee in attendees.items.items: if attendee.rsvp == 'yes': attendees_yes.append(attendee) if request.whoami_url: if attendee.profile.id == user.id: user_is_attending = True elif attendee.rsvp == 'maybe': attendees_invited.append(attendee) # Determine whether the event spans more than one day and if it has expired. # TODO: move stuff that is purely rendering to the template. today = datetime.datetime.now() if hasattr(event, 'when'): end_date = event.when + datetime.timedelta(minutes=event.duration) is_same_day = False if end_date.strftime('%d%m%y') == event.when.strftime('%d%m%y'): is_same_day = True event_dates = { 'type': 'multiple' if not is_same_day else 'single', 'end': end_date } is_expired = True if int(end_date.strftime('%s')) < int( today.strftime('%s')) else False else: event_dates = {'type': 'tba'} is_expired = False # Why is this a minimum of 10%? rsvp_percentage = event.rsvp_percentage if len(attendees_yes) and event.rsvp_percentage < 10: rsvp_percentage = 10 # Fetch attachments for all comments on this page. # TODO: the code that does this should be in one place. attachments = {} for comment in event.comments.items: c = comment.as_dict if 'attachments' in c: c_attachments = Attachment.retrieve( request.get_host(), "comments", c['id'], access_token=request.access_token) attachments[str(c['id'])] = c_attachments view_data = { 'user': user, 'site': Site(responses[request.site_url]), 'content': event, 'comment_form': comment_form, 'pagination': build_pagination_links(responses[event_url]['comments']['links'], event.comments), 'item_type': 'event', 'attendees': attendees, 'attendees_yes': attendees_yes, 'attendees_invited': attendees_invited, 'user_is_attending': user_is_attending, 'event_dates': event_dates, 'rsvp_num_attending': len(attendees_yes), 'rsvp_num_invited': len(attendees_invited), 'rsvp_percentage': rsvp_percentage, 'is_expired': is_expired, 'attachments': attachments } return render(request, single_template, view_data)
def single(request, event_id): """ Display a single event with comments and attendees. """ # Comment offset. offset = int(request.GET.get('offset', 0)) # Create request for event resource. event_url, event_params, event_headers = Event.build_request(request.get_host(), id=event_id, offset=offset, access_token=request.access_token) request.view_requests.append(grequests.get(event_url, params=event_params, headers=event_headers)) # Create request for event attendees. att_url, att_params, att_headers = Event.build_attendees_request(request.get_host(), event_id, request.access_token) request.view_requests.append(grequests.get(att_url, params=att_params, headers=att_headers)) # Perform requests and instantiate view objects. try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) event = Event.from_api_response(responses[event_url]) comment_form = CommentForm(initial=dict(itemId=event_id, itemType='event')) user = Profile(responses[request.whoami_url], summary=False) if request.whoami_url else None attendees = AttendeeList(responses[att_url]) attendees_yes = [] attendees_invited = [] user_is_attending = False for attendee in attendees.items.items: if attendee.rsvp == 'yes': attendees_yes.append(attendee) if request.whoami_url: if attendee.profile.id == user.id: user_is_attending = True elif attendee.rsvp == 'maybe': attendees_invited.append(attendee) # Determine whether the event spans more than one day and if it has expired. # TODO: move stuff that is purely rendering to the template. today = datetime.datetime.now() if hasattr(event, 'when'): end_date = event.when + datetime.timedelta(minutes=event.duration) is_same_day = False if end_date.strftime('%d%m%y') == event.when.strftime('%d%m%y'): is_same_day = True event_dates = { 'type': 'multiple' if not is_same_day else 'single', 'end': end_date } is_expired = True if int(end_date.strftime('%s')) < int(today.strftime('%s')) else False else: event_dates = { 'type': 'tba' } is_expired = False # Why is this a minimum of 10%? rsvp_percentage = event.rsvp_percentage if len(attendees_yes) and event.rsvp_percentage < 10: rsvp_percentage = 10 # Fetch attachments for all comments on this page. # TODO: the code that does this should be in one place. attachments = {} for comment in event.comments.items: c = comment.as_dict if 'attachments' in c: c_attachments = Attachment.retrieve(request.get_host(), "comments", c['id'], access_token=request.access_token) attachments[str(c['id'])] = c_attachments view_data = { 'user': user, 'site': Site(responses[request.site_url]), 'content': event, 'comment_form': comment_form, 'pagination': build_pagination_links(responses[event_url]['comments']['links'], event.comments), 'item_type': 'event', 'attendees': attendees, 'attendees_yes': attendees_yes, 'attendees_invited': attendees_invited, 'user_is_attending': user_is_attending, 'event_dates': event_dates, 'rsvp_num_attending': len(attendees_yes), 'rsvp_num_invited': len(attendees_invited), 'rsvp_percentage': rsvp_percentage, 'is_expired': is_expired, 'attachments': attachments } return render(request, single_template, view_data)