def edit(request, comment_id): """ Edit a comment. """ try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) view_data = { 'user': Profile(responses[request.whoami_url], summary=False), 'site': Site(responses[request.site_url]), } if request.method == 'POST': form = CommentForm(request.POST) if form.is_valid(): comment_request = Comment.from_edit_form(form.cleaned_data) try: comment = comment_request.update(request.get_host(), access_token=request.access_token) except APIException as exc: return respond_with_error(request, exc) try: process_attachments(request, comment) except ValidationError: try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) comment_form = CommentForm( initial = { 'itemId': comment.item_id, 'itemType': comment.item_type, 'comment_id': comment.id, 'markdown': request.POST['markdown'], }) view_data = { 'user': Profile(responses[request.whoami_url], summary=False), 'site': Site(responses[request.site_url]), 'content': comment, 'comment_form': comment_form, 'error': 'Sorry, one of your files was over 5MB. Please try again.', } return render(request, form_template, view_data) if comment.meta.links.get('commentPage'): return HttpResponseRedirect(build_comment_location(comment)) else: return HttpResponseRedirect(reverse('single-comment', args=(comment.id,))) else: view_data['form'] = form return render(request, form_template, view_data) if request.method == 'GET': try: comment = Comment.retrieve(request.get_host(), comment_id, access_token=request.access_token) except APIException as exc: return respond_with_error(request, exc) view_data['form'] = CommentForm(comment.as_dict) return render(request, form_template, view_data)
def create(request): """ Create a comment, processing any attachments (including deletion of attachments) and redirecting to the single comment form if there are any validation errors. """ # TODO: determine whether the single comment creation form will use this view. # Remove the conditional if not. if request.method == 'POST': form = CommentForm(request.POST) # If invalid, load single comment view showing validation errors. if not form.is_valid(): try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) view_data = { 'user': Profile(responses[request.whoami_url], summary=False), 'site': Site(responses[request.site_url]), 'form': form, } return render(request, form_template, view_data) # Create comment with API. comment_request = Comment.from_create_form(form.cleaned_data) try: comment = comment_request.create(request.get_host(), access_token=request.access_token) except APIException as exc: return respond_with_error(request, exc) try: process_attachments(request, comment) except ValidationError: try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) comment_form = CommentForm( initial = { 'itemId': comment.item_id, 'itemType': comment.item_type, 'comment_id': comment.id, 'markdown': request.POST['markdown'], } ) view_data = { 'user': Profile(responses[request.whoami_url], summary=False), 'site': Site(responses[request.site_url]), 'content': comment, 'comment_form': comment_form, 'error': 'Sorry, one of your files was over 5MB. Please try again.', } return render(request, form_template, view_data) # API returns which page in the thread this comments appear in, so redirect there. if comment.meta.links.get('commentPage'): return HttpResponseRedirect(build_comment_location(comment))
def create(request): """ Create a huddle. """ try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) view_data = { 'user': Profile(responses[request.whoami_url], summary=False), 'site': Site(responses[request.site_url]), } if request.method == 'POST': form = create_form(request.POST) if form.is_valid(): hud_request = Huddle.from_create_form(form.cleaned_data) try: hud_response = hud_request.create(request.get_host(), request.access_token) except APIException as exc: return respond_with_error(request, exc) if request.POST.get('invite'): ids = [int(x) for x in request.POST.get('invite').split(',')] Huddle.invite(request.get_host(), hud_response.id, ids, request.access_token) if request.POST.get('firstcomment') and len(request.POST.get('firstcomment')) > 0: payload = { 'itemType': 'huddle', 'itemId': hud_response.id, 'markdown': request.POST.get('firstcomment'), 'inReplyTo': 0 } comment_req = Comment.from_create_form(payload) try: comment = comment_req.create(request.get_host(), request.access_token) except APIException as exc: return respond_with_error(request, exc) try: process_attachments(request, comment) except ValidationError: responses = response_list_to_dict(grequests.map(request.view_requests)) comment_form = CommentForm( initial={ 'itemId': comment.item_id, 'itemType': comment.item_type, 'comment_id': comment.id, 'markdown': request.POST['markdown'], } ) view_data = { 'user': Profile(responses[request.whoami_url], summary=False), 'site': Site(responses[request.site_url]), 'content': comment, 'comment_form': comment_form, 'error': 'Sorry, one of your files was over 3MB. Please try again.', } return render(request, form_template, view_data) return HttpResponseRedirect(reverse('single-huddle', args=(hud_response.id,))) else: view_data['form'] = form return render(request, form_template, view_data) if request.method == 'GET': if request.GET.get('to'): recipients = [] list_of_recipient_ids = request.GET.get('to').split(",") for recipient_id in list_of_recipient_ids: try: recipient_profile = Profile.retrieve(request.get_host(), recipient_id) except APIException: # Skip this recipient, but don't return as we may be able to load the others. continue recipients.append({ 'id': recipient_profile.id, 'profileName': recipient_profile.profile_name, 'avatar': recipient_profile.avatar }) view_data['recipients_json'] = json.dumps(recipients) view_data['form'] = create_form(initial=dict()) return render(request, form_template, view_data)
def create(request, microcosm_id): """ Create a conversation and first comment in the conversation. """ try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) view_data = { 'user': Profile(responses[request.whoami_url], summary=False), 'site': Site(responses[request.site_url]), } if request.method == 'POST': form = create_form(request.POST) if form.is_valid(): conv_req = Conversation.from_create_form(form.cleaned_data) try: conv = conv_req.create(request.get_host(), request.access_token) except APIException as exc: return respond_with_error(request, exc) if request.POST.get('firstcomment') and len(request.POST.get('firstcomment')) > 0: payload = { 'itemType': 'conversation', 'itemId': conv.id, 'markdown': request.POST.get('firstcomment'), 'inReplyTo': 0, } comment_req = Comment.from_create_form(payload) try: comment = comment_req.create(request.get_host(), request.access_token) except APIException as exc: return respond_with_error(request, exc) try: process_attachments(request, comment) except ValidationError: responses = response_list_to_dict(grequests.map(request.view_requests)) comment_form = CommentForm( initial={ 'itemId': comment.item_id, 'itemType': comment.item_type, 'comment_id': comment.id, 'markdown': request.POST['markdown'], } ) view_data = { 'user': Profile(responses[request.whoami_url], summary=False), 'site': Site(responses[request.site_url]), 'content': comment, 'comment_form': comment_form, 'error': 'Sorry, one of your files was over 5MB. Please try again.', } return render(request, form_template, view_data) return HttpResponseRedirect(reverse('single-conversation', args=(conv.id,))) else: view_data['form'] = form return render(request, form_template, view_data) if request.method == 'GET': view_data['form'] = create_form(initial=dict(microcosmId=microcosm_id)) view_data['microcosm_id'] = microcosm_id return render(request, form_template, view_data)
def edit(request, comment_id): """ Edit a comment. """ try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) view_data = { 'user': Profile(responses[request.whoami_url], summary=False), 'site': Site(responses[request.site_url]), } if request.method == 'POST': form = CommentForm(request.POST) if form.is_valid(): comment_request = Comment.from_edit_form(form.cleaned_data) try: comment = comment_request.update( request.get_host(), access_token=request.access_token) except APIException as exc: return respond_with_error(request, exc) try: process_attachments(request, comment) except ValidationError: try: responses = response_list_to_dict( grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) comment_form = CommentForm( initial={ 'itemId': comment.item_id, 'itemType': comment.item_type, 'comment_id': comment.id, 'markdown': request.POST['markdown'], }) view_data = { 'user': Profile(responses[request.whoami_url], summary=False), 'site': Site(responses[request.site_url]), 'content': comment, 'comment_form': comment_form, 'error': 'Sorry, one of your files was over 5MB. Please try again.', } return render(request, form_template, view_data) if comment.meta.links.get('commentPage'): return HttpResponseRedirect(build_comment_location(comment)) else: return HttpResponseRedirect( reverse('single-comment', args=(comment.id, ))) else: view_data['form'] = form return render(request, form_template, view_data) if request.method == 'GET': try: comment = Comment.retrieve(request.get_host(), comment_id, access_token=request.access_token) except APIException as exc: return respond_with_error(request, exc) view_data['form'] = CommentForm(comment.as_dict) return render(request, form_template, view_data)
def create(request): """ Create a comment, processing any attachments (including deletion of attachments) and redirecting to the single comment form if there are any validation errors. """ # TODO: determine whether the single comment creation form will use this view. # Remove the conditional if not. if request.method == 'POST': form = CommentForm(request.POST) # If invalid, load single comment view showing validation errors. if not form.is_valid(): try: responses = response_list_to_dict( grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) view_data = { 'user': Profile(responses[request.whoami_url], summary=False), 'site': Site(responses[request.site_url]), 'form': form, } return render(request, form_template, view_data) # Create comment with API. comment_request = Comment.from_create_form(form.cleaned_data) try: comment = comment_request.create(request.get_host(), access_token=request.access_token) except APIException as exc: return respond_with_error(request, exc) try: process_attachments(request, comment) except ValidationError: try: responses = response_list_to_dict( grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) comment_form = CommentForm( initial={ 'itemId': comment.item_id, 'itemType': comment.item_type, 'comment_id': comment.id, 'markdown': request.POST['markdown'], }) view_data = { 'user': Profile(responses[request.whoami_url], summary=False), 'site': Site(responses[request.site_url]), 'content': comment, 'comment_form': comment_form, 'error': 'Sorry, one of your files was over 5MB. Please try again.', } return render(request, form_template, view_data) # API returns which page in the thread this comments appear in, so redirect there. if comment.meta.links.get('commentPage'): return HttpResponseRedirect(build_comment_location(comment))
def create(request, microcosm_id): """ Create an event within a microcosm. """ try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) view_data = { 'user': Profile(responses[request.whoami_url], summary=False), 'site': Site(responses[request.site_url]), } user = Profile(responses[request.whoami_url], summary=False) if request.whoami_url else None if request.method == 'POST': form = create_form(request.POST) if form.is_valid(): event_request = Event.from_create_form(form.cleaned_data) try: event_response = event_request.create(request.get_host(), request.access_token) except APIException as exc: return respond_with_error(request, exc) # invite attendees invites = request.POST.get('invite') if len(invites.strip()) > 0: invited_list = invites.split(",") attendees = [] if len(invited_list) > 0: for userid in invited_list: if userid != "": attendees.append({ 'rsvp': 'maybe', 'profileId': int(userid) }) if len(attendees) > 0: try: Event.rsvp(request.get_host(), event_response.id, user.id, attendees, access_token=request.access_token) except APIException as exc: return respond_with_error(request, exc) # create comment if request.POST.get('firstcomment') and len(request.POST.get('firstcomment')) > 0: payload = { 'itemType': 'event', 'itemId': event_response.id, 'markdown': request.POST.get('firstcomment'), 'inReplyTo': 0 } comment_req = Comment.from_create_form(payload) try: comment = comment_req.create(request.get_host(), request.access_token) except APIException as exc: return respond_with_error(request, exc) try: process_attachments(request, comment) except ValidationError: responses = response_list_to_dict(grequests.map(request.view_requests)) comment_form = CommentForm( initial={ 'itemId': comment.item_id, 'itemType': comment.item_type, 'comment_id': comment.id, 'markdown': request.POST['markdown'], }) view_data = { 'user': Profile(responses[request.whoami_url], summary=False), 'site': Site(responses[request.site_url]), 'content': comment, 'comment_form': comment_form, 'error': 'Sorry, one of your files was over 5MB. Please try again.', } return render(request, form_template, view_data) return HttpResponseRedirect(reverse('single-event', args=(event_response.id,))) else: print 'Event form is not valid' view_data['form'] = form view_data['microcosm_id'] = microcosm_id return render(request, form_template, view_data) if request.method == 'GET': view_data['form'] = create_form(initial=dict(microcosmId=microcosm_id)) view_data['microcosm_id'] = microcosm_id return render(request, form_template, view_data)
def create(request, microcosm_id): """ Create a conversation and first comment in the conversation. """ try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) view_data = { 'user': Profile(responses[request.whoami_url], summary=False), 'site': Site(responses[request.site_url]), } if request.method == 'POST': form = create_form(request.POST) if form.is_valid(): conv_req = Conversation.from_create_form(form.cleaned_data) try: conv = conv_req.create(request.get_host(), request.access_token) except APIException as exc: return respond_with_error(request, exc) if request.POST.get('firstcomment') and len( request.POST.get('firstcomment')) > 0: payload = { 'itemType': 'conversation', 'itemId': conv.id, 'markdown': request.POST.get('firstcomment'), 'inReplyTo': 0, } comment_req = Comment.from_create_form(payload) try: comment = comment_req.create(request.get_host(), request.access_token) except APIException as exc: return respond_with_error(request, exc) try: process_attachments(request, comment) except ValidationError: responses = response_list_to_dict( grequests.map(request.view_requests)) comment_form = CommentForm( initial={ 'itemId': comment.item_id, 'itemType': comment.item_type, 'comment_id': comment.id, 'markdown': request.POST['markdown'], }) view_data = { 'user': Profile(responses[request.whoami_url], summary=False), 'site': Site(responses[request.site_url]), 'content': comment, 'comment_form': comment_form, 'error': 'Sorry, one of your files was over 5MB. Please try again.', } return render(request, form_template, view_data) return HttpResponseRedirect( reverse('single-conversation', args=(conv.id, ))) else: view_data['form'] = form return render(request, form_template, view_data) if request.method == 'GET': view_data['form'] = create_form(initial=dict(microcosmId=microcosm_id)) view_data['microcosm_id'] = microcosm_id return render(request, form_template, view_data)
def create(request, microcosm_id): """ Create an event within a microcosm. """ try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) view_data = { 'user': Profile(responses[request.whoami_url], summary=False), 'site': Site(responses[request.site_url]), } user = Profile(responses[request.whoami_url], summary=False) if request.whoami_url else None if request.method == 'POST': form = create_form(request.POST) if form.is_valid(): event_request = Event.from_create_form(form.cleaned_data) try: event_response = event_request.create(request.get_host(), request.access_token) except APIException as exc: return respond_with_error(request, exc) # invite attendees invites = request.POST.get('invite') if len(invites.strip()) > 0: invited_list = invites.split(",") attendees = [] if len(invited_list) > 0: for userid in invited_list: if userid != "": attendees.append({ 'rsvp': 'maybe', 'profileId': int(userid) }) if len(attendees) > 0: try: response = Event.rsvp_api( request.get_host(), event_response.id, user.id, attendees, access_token=request.access_token) except APIException as exc: return respond_with_error(request, exc) if response.status_code != requests.codes.ok: return HttpResponseBadRequest() # create comment if request.POST.get('firstcomment') and len( request.POST.get('firstcomment')) > 0: payload = { 'itemType': 'event', 'itemId': event_response.id, 'markdown': request.POST.get('firstcomment'), 'inReplyTo': 0 } comment_req = Comment.from_create_form(payload) try: comment = comment_req.create(request.get_host(), request.access_token) except APIException as exc: return respond_with_error(request, exc) try: process_attachments(request, comment) except ValidationError: responses = response_list_to_dict( grequests.map(request.view_requests)) comment_form = CommentForm( initial={ 'itemId': comment.item_id, 'itemType': comment.item_type, 'comment_id': comment.id, 'markdown': request.POST['markdown'], }) view_data = { 'user': Profile(responses[request.whoami_url], summary=False), 'site': Site(responses[request.site_url]), 'content': comment, 'comment_form': comment_form, 'error': 'Sorry, one of your files was over 5MB. Please try again.', } return render(request, form_template, view_data) return HttpResponseRedirect( reverse('single-event', args=(event_response.id, ))) else: print 'Event form is not valid' view_data['form'] = form view_data['microcosm_id'] = microcosm_id return render(request, form_template, view_data) if request.method == 'GET': view_data['form'] = create_form(initial=dict(microcosmId=microcosm_id)) view_data['microcosm_id'] = microcosm_id return render(request, form_template, view_data)