Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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)
Ejemplo n.º 6
0
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)
Ejemplo n.º 7
0
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)
Ejemplo n.º 8
0
    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)
Ejemplo n.º 9
0
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)
Ejemplo n.º 10
0
    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
Ejemplo n.º 11
0
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)
Ejemplo n.º 12
0
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)
Ejemplo n.º 13
0
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)
Ejemplo n.º 14
0
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)
Ejemplo n.º 15
0
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)
Ejemplo n.º 16
0
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)
Ejemplo n.º 17
0
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)
Ejemplo n.º 18
0
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)
Ejemplo n.º 19
0
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)
Ejemplo n.º 20
0
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)
Ejemplo n.º 21
0
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)
Ejemplo n.º 22
0
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)
Ejemplo n.º 23
0
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)
Ejemplo n.º 24
0
    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)
Ejemplo n.º 25
0
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)
Ejemplo n.º 26
0
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)
Ejemplo n.º 27
0
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)
Ejemplo n.º 28
0
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)
Ejemplo n.º 29
0
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)
Ejemplo n.º 30
0
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)