Esempio n. 1
0
def view_audio_file(request, pk, _):
    """Using the ID, return the oral argument page.

    We also test if the item is a favorite and send data as such.
    """
    af = get_object_or_404(Audio, pk=pk)
    title = trunc(af.case_name, 100)
    get_string = search_utils.make_get_string(request)

    try:
        fave = Favorite.objects.get(audio_id=af.pk, user=request.user)
    except (ObjectDoesNotExist, TypeError):
        # Not favorited or anonymous user
        favorite_form = FavoriteForm(
            initial={
                'audio_id': af.pk,
                'name': trunc(best_case_name(af.docket), 100, ellipsis='...'),
            })
    else:
        favorite_form = FavoriteForm(instance=fave)

    return render(
        request, 'oral_argument.html', {
            'title': title,
            'af': af,
            'favorite_form': favorite_form,
            'get_string': get_string,
            'private': af.blocked,
        })
Esempio n. 2
0
def view_recap_document(request, docket_id=None, doc_num=None,  att_num=None,
                        slug=''):
    """This view can either load an attachment or a regular document,
    depending on the URL pattern that is matched.
    """
    item = get_object_or_404(
        RECAPDocument,
        docket_entry__docket__id=docket_id,
        document_number=doc_num,
        attachment_number=att_num,
    )
    title = make_rd_title(item)
    if is_og_bot(request):
        make_thumb_if_needed(item)
        item.refresh_from_db()
    try:
        fave = Favorite.objects.get(recap_doc_id=item.pk, user=request.user)
    except (ObjectDoesNotExist, TypeError):
        # Not favorited or anonymous user
        favorite_form = FavoriteForm(initial={
            'recap_doc_id': item.pk,
            'name': trunc(title, 100, ellipsis='...'),
        })
    else:
        favorite_form = FavoriteForm(instance=fave)

    return render(request, 'recap_document.html', {
        'document': item,
        'title': title,
        'favorite_form': favorite_form,
        'private': True,  # Always True for RECAP docs.
    })
Esempio n. 3
0
def core_docket_data(request, pk):
    """Gather the core data for a docket, party, or IDB page."""
    docket = get_object_or_404(Docket, pk=pk)
    title = ', '.join([
        s for s in [
            trunc(best_case_name(docket), 100, ellipsis="..."),
            docket.docket_number,
        ] if s.strip()
    ])

    try:
        fave = Favorite.objects.get(docket_id=docket.pk, user=request.user)
    except (ObjectDoesNotExist, TypeError):
        # Not favorited or anonymous user
        favorite_form = FavoriteForm(
            initial={
                'docket_id': docket.pk,
                'name': trunc(best_case_name(docket), 100, ellipsis='...'),
            })
    else:
        favorite_form = FavoriteForm(instance=fave)

    has_alert = False
    if request.user.is_authenticated:
        has_alert = DocketAlert.objects.filter(docket=docket,
                                               user=request.user).exists()

    return docket, {
        'docket': docket,
        'title': title,
        'favorite_form': favorite_form,
        'has_alert': has_alert,
        'timezone': COURT_TIMEZONES.get(docket.court_id, 'US/Eastern'),
        'private': docket.blocked,
    }
Esempio n. 4
0
def save_or_update_favorite(request):
    """Uses ajax to save or update a favorite.

    Receives a request as an argument, and then uses that plus POST data to
    create or update a favorite in the database for a specific user. If the
    user already has the document favorited, it updates the favorite with the
    new information. If not, it creates a new favorite.
    """
    if request.is_ajax():
        fave = get_favorite(request)
        if fave is None:
            return HttpResponseServerError("Unknown document or audio id")

        f = FavoriteForm(request.POST, instance=fave)
        if f.is_valid():
            new_fave = f.save(commit=False)
            new_fave.user = request.user
            new_fave.save()
        else:
            # Validation errors fail silently. Probably could be better.
            return HttpResponseServerError("Failure. Form invalid")

        return HttpResponse("It worked")
    else:
        return HttpResponseNotAllowed(
            permitted_methods={'POST'},
            content="Not an ajax request."
        )
Esempio n. 5
0
def save_or_update_favorite(request: HttpRequest) -> HttpResponse:
    """Uses ajax to save or update a favorite.

    Receives a request as an argument, and then uses that plus POST data to
    create or update a favorite in the database for a specific user. If the
    user already has the document favorited, it updates the favorite with the
    new information. If not, it creates a new favorite.
    """
    if is_ajax(request):
        fave = get_favorite(request)
        if fave is None:
            return HttpResponseServerError(
                "Unknown document, audio, docket or recap document id.")

        f = FavoriteForm(request.POST, instance=fave)
        if f.is_valid():
            new_fave = f.save(commit=False)
            new_fave.user = request.user
            try:
                new_fave.save()
            except IntegrityError:
                # User already has this favorite.
                return HttpResponse("It worked")
        else:
            # Validation errors fail silently. Probably could be better.
            return HttpResponseServerError("Failure. Form invalid")

        return HttpResponse("It worked")
    else:
        return HttpResponseNotAllowed(permitted_methods={"POST"},
                                      content="Not an ajax request.")
Esempio n. 6
0
def core_docket_data(
    request: HttpRequest,
    pk: int,
) -> Tuple[Docket, Dict[str, Union[bool, str, Docket, FavoriteForm]]]:
    """Gather the core data for a docket, party, or IDB page."""
    docket = get_object_or_404(Docket, pk=pk)
    title = make_docket_title(docket)

    try:
        fave = Favorite.objects.get(docket_id=docket.pk, user=request.user)
    except (ObjectDoesNotExist, TypeError):
        # Not favorited or anonymous user
        favorite_form = FavoriteForm(
            initial={
                "docket_id": docket.pk,
                "name": trunc(best_case_name(docket), 100, ellipsis="..."),
            }
        )
    else:
        favorite_form = FavoriteForm(instance=fave)

    has_alert = user_has_alert(request.user, docket)

    return (
        docket,
        {
            "docket": docket,
            "title": title,
            "favorite_form": favorite_form,
            "has_alert": has_alert,
            "timezone": COURT_TIMEZONES.get(docket.court_id, "US/Eastern"),
            "private": docket.blocked,
        },
    )
Esempio n. 7
0
def view_favorites(request):
    favorites = request.user.favorites.all().order_by("pk")
    favorite_forms = OrderedDict()
    favorite_forms["Dockets"] = []
    favorite_forms["RECAP Documents"] = []
    favorite_forms["Opinions"] = []
    favorite_forms["Oral Arguments"] = []
    for favorite in favorites:
        if favorite.cluster_id:
            key = "Opinions"
        elif favorite.audio_id:
            key = "Oral Arguments"
        elif favorite.recap_doc_id:
            key = "RECAP Documents"
        elif favorite.docket_id:
            key = "Dockets"
        favorite_forms[key].append(FavoriteForm(instance=favorite))

    return render(
        request,
        "profile/favorites.html",
        {
            "private": True,
            "favorite_forms": favorite_forms,
            "blank_favorite_form": FavoriteForm(),
        },
    )
Esempio n. 8
0
def view_docket(request, pk, slug):
    docket = get_object_or_404(Docket, pk=pk)
    if not is_bot(request):
        with suppress_autotime(docket, ['date_modified']):
            cached_count = docket.view_count
            docket.view_count = F('view_count') + 1
            docket.save()
            docket.view_count = cached_count + 1

    try:
        fave = Favorite.objects.get(docket_id=docket.pk, user=request.user)
    except (ObjectDoesNotExist, TypeError):
        # Not favorited or anonymous user
        favorite_form = FavoriteForm(
            initial={
                'docket_id': docket.pk,
                'name': trunc(best_case_name(docket), 100, ellipsis='...'),
            })
    else:
        favorite_form = FavoriteForm(instance=fave)

    de_list = docket.docket_entries.all().prefetch_related('recap_documents')
    form = DocketEntryFilterForm(request.GET)
    if form.is_valid():
        cd = form.cleaned_data
        if cd.get('entry_gte'):
            de_list = de_list.filter(entry_number__gte=cd['entry_gte'])
        if cd.get('entry_lte'):
            de_list = de_list.filter(entry_number__lte=cd['entry_lte'])
        if cd.get('filed_after'):
            de_list = de_list.filter(date_filed__gte=cd['filed_after'])
        if cd.get('filed_before'):
            de_list = de_list.filter(date_filed__lte=cd['filed_before'])
        if cd.get('order_by') == DocketEntryFilterForm.DESCENDING:
            de_list = de_list.order_by('-entry_number')

    paginator = Paginator(de_list, 100, orphans=5)
    page = request.GET.get('page')
    try:
        docket_entries = paginator.page(page)
    except PageNotAnInteger:
        docket_entries = paginator.page(1)
    except EmptyPage:
        docket_entries = paginator.page(paginator.num_pages)

    return render(
        request,
        'view_docket.html',
        {
            'docket': docket,
            'parties':
            docket.parties.exists(),  # Needed to show/hide parties tab.
            'docket_entries': docket_entries,
            'form': form,
            'favorite_form': favorite_form,
            'get_string': make_get_string(request),
            'timezone': COURT_TIMEZONES.get(docket.court_id, 'US/Eastern'),
            'private': docket.blocked,
        })
Esempio n. 9
0
def view_opinion(request, pk, _):
    """Using the cluster ID, return the cluster of opinions.

    We also test if the cluster ID is a favorite for the user, and send data
    if needed. If it's a favorite, we send the bound form for the favorite so
    it can populate the form on the page. If it is not a favorite, we send the
    unbound form.
    """
    # Look up the court, cluster, title and favorite information
    cluster = get_object_or_404(OpinionCluster, pk=pk)
    title = '%s, %s' % (
        trunc(best_case_name(cluster), 100),
        cluster.citation_string,
    )
    get_string = search_utils.make_get_string(request)

    try:
        fave = Favorite.objects.get(
            cluster_id=cluster.pk,
            user=request.user,
        )
        favorite_form = FavoriteForm(instance=fave)
    except (ObjectDoesNotExist, TypeError):
        # Not favorited or anonymous user
        favorite_form = FavoriteForm(
            initial={
                'cluster_id': cluster.pk,
                'name': trunc(best_case_name(cluster), 100, ellipsis='...'),
            }
        )

    # Get the citing results from Solr for speed.
    conn = sunburnt.SolrInterface(settings.SOLR_OPINION_URL, mode='r')
    q = {
        'q': 'cites:({ids})'.format(
            ids=' OR '.join([str(pk) for pk in
                             (cluster.sub_opinions
                              .values_list('pk', flat=True))])
        ),
        'rows': 5,
        'start': 0,
        'sort': 'citeCount desc',
        'caller': 'view_opinion',
    }
    citing_clusters = conn.raw_query(**q).execute()

    return render_to_response(
        'view_opinion.html',
        {
            'title': title,
            'cluster': cluster,
            'favorite_form': favorite_form,
            'get_string': get_string,
            'private': cluster.blocked,
            'citing_clusters': citing_clusters,
            'top_authorities': cluster.authorities[:5],
        },
        RequestContext(request)
    )
Esempio n. 10
0
def view_parties(request, docket_id, slug):
    """Show the parties and attorneys tab on the docket."""
    docket = get_object_or_404(Docket, pk=docket_id)
    title = ', '.join([
        s for s in [
            trunc(best_case_name(docket), 100, ellipsis="..."),
            docket.docket_number,
        ] if s.strip()
    ])
    try:
        fave = Favorite.objects.get(docket_id=docket.pk, user=request.user)
    except (ObjectDoesNotExist, TypeError):
        # Not favorited or anonymous user
        favorite_form = FavoriteForm(
            initial={
                'docket_id': docket.pk,
                'name': trunc(best_case_name(docket), 100, ellipsis='...'),
            })
    else:
        favorite_form = FavoriteForm(instance=fave)

    # We work with this data at the level of party_types so that we can group
    # the parties by this field. From there, we do a whole mess of prefetching,
    # which reduces the number of queries needed for this down to four instead
    # of potentially thousands (good times!)
    party_types = docket.party_types.select_related('party').prefetch_related(
        Prefetch(
            'party__roles',
            queryset=Role.objects.filter(docket=docket).order_by(
                'attorney_id', 'role',
                'date_action').select_related('attorney').prefetch_related(
                    Prefetch(
                        'attorney__organizations',
                        queryset=AttorneyOrganization.objects.filter(
                            attorney_organization_associations__docket=docket).
                        distinct(),
                        to_attr='firms_in_docket',
                    )))).order_by('name', 'party__name')

    parties = []
    for party_type_name, party_types in groupby(party_types, lambda x: x.name):
        party_types = list(party_types)
        parties.append({
            'party_type_name': party_type_name,
            'party_type_objects': party_types
        })

    return render(
        request, 'docket_parties.html', {
            'docket': docket,
            'title': title,
            'parties': parties,
            'favorite_form': favorite_form,
            'timezone': COURT_TIMEZONES.get(docket.court_id, 'US/Eastern'),
            'private': docket.blocked,
        })
Esempio n. 11
0
def view_favorites(request):
    favorites = request.user.favorites.all().order_by('pk')
    favorite_forms = []
    for favorite in favorites:
        favorite_forms.append(FavoriteForm(instance=favorite))
    return render(request, 'profile/favorites.html', {
        'private': True,
        'favorite_forms': favorite_forms,
        'blank_favorite_form': FavoriteForm()
    })
Esempio n. 12
0
def view_recap_document(request,
                        docket_id=None,
                        doc_num=None,
                        att_num=None,
                        slug=""):
    """This view can either load an attachment or a regular document,
    depending on the URL pattern that is matched.
    """
    item = get_object_or_404(
        RECAPDocument,
        docket_entry__docket__id=docket_id,
        document_number=doc_num,
        attachment_number=att_num,
    )

    # Check if the user has requested automatic redirection to the document
    redirectToDownload = request.GET.get("redirectToDownload", False)
    if redirectToDownload:
        # Check if the document is available from Court Listener and
        # if it is, redirect the user to that
        # if it isn't, redirect the user to PACER
        if item.is_available:
            response = redirect(item.filepath_local)
        else:
            response = redirect(item.pacer_url)
        return response

    title = make_rd_title(item)
    if is_og_bot(request):
        make_thumb_if_needed(item)
        item.refresh_from_db()
    try:
        fave = Favorite.objects.get(recap_doc_id=item.pk, user=request.user)
    except (ObjectDoesNotExist, TypeError):
        # Not favorited or anonymous user
        favorite_form = FavoriteForm(initial={
            "recap_doc_id": item.pk,
            "name": trunc(title, 100, ellipsis="..."),
        })
    else:
        favorite_form = FavoriteForm(instance=fave)

    return render(
        request,
        "recap_document.html",
        {
            "document": item,
            "title": title,
            "favorite_form": favorite_form,
            "private": True,  # Always True for RECAP docs.
        },
    )
Esempio n. 13
0
def view_opinion(request, pk, _):
    """Using the cluster ID, return the cluster of opinions.

    We also test if the cluster ID is a favorite for the user, and send data
    if needed. If it's a favorite, we send the bound form for the favorite so
    it can populate the form on the page. If it is not a favorite, we send the
    unbound form.
    """
    # Look up the court, cluster, title and favorite information
    cluster = get_object_or_404(OpinionCluster, pk=pk)
    title = ", ".join([
        s for s in [
            trunc(best_case_name(cluster), 100, ellipsis="..."),
            cluster.citation_string,
        ] if s.strip()
    ])
    has_downloads = False
    for sub_opinion in cluster.sub_opinions.all():
        if sub_opinion.local_path or sub_opinion.download_url:
            has_downloads = True
            break
    get_string = make_get_string(request)

    try:
        fave = Favorite.objects.get(cluster_id=cluster.pk, user=request.user)
    except (ObjectDoesNotExist, TypeError):
        # Not favorited or anonymous user
        favorite_form = FavoriteForm(
            initial={
                "cluster_id": cluster.pk,
                "name": trunc(best_case_name(cluster), 100, ellipsis="..."),
            })
    else:
        favorite_form = FavoriteForm(instance=fave)

    citing_clusters = get_citing_clusters_with_cache(cluster, is_bot(request))

    return render(
        request,
        "view_opinion.html",
        {
            "title": title,
            "cluster": cluster,
            "has_downloads": has_downloads,
            "favorite_form": favorite_form,
            "get_string": get_string,
            "private": cluster.blocked,
            "citing_clusters": citing_clusters,
            "top_authorities": cluster.authorities_with_data[:5],
            "authorities_count": len(cluster.authorities_with_data),
        },
    )
Esempio n. 14
0
def view_docket(request, pk, _):
    docket = get_object_or_404(Docket, pk=pk)
    if not is_bot(request):
        docket.view_count = F('view_count') + 1
        docket.save()

    try:
        fave = Favorite.objects.get(docket_id=docket.pk, user=request.user)
    except (ObjectDoesNotExist, TypeError):
        # Not favorited or anonymous user
        favorite_form = FavoriteForm(
            initial={
                'docket_id': docket.pk,
                'name': trunc(best_case_name(docket), 100, ellipsis='...'),
            })
    else:
        favorite_form = FavoriteForm(instance=fave)

    de_list = docket.docket_entries.all()
    form = DocketEntryFilterForm(request.GET)
    if form.is_valid():
        cd = form.cleaned_data
        if cd.get('entry_gte'):
            de_list = de_list.filter(entry_number__gte=cd['entry_gte'])
        if cd.get('entry_lte'):
            de_list = de_list.filter(entry_number__lte=cd['entry_lte'])
        if cd.get('filed_after'):
            de_list = de_list.filter(date_filed__gte=cd['filed_after'])
        if cd.get('filed_before'):
            de_list = de_list.filter(date_filed__lte=cd['filed_before'])
        if cd.get('order_by') == DocketEntryFilterForm.DESCENDING:
            de_list = de_list.order_by('-entry_number')

    paginator = Paginator(de_list, 500, orphans=25)
    page = request.GET.get('page')
    try:
        docket_entries = paginator.page(page)
    except PageNotAnInteger:
        docket_entries = paginator.page(1)
    except EmptyPage:
        docket_entries = paginator.page(paginator.num_pages)

    return render(
        request, 'view_docket.html', {
            'docket': docket,
            'docket_entries': docket_entries,
            'form': form,
            'favorite_form': favorite_form,
            'get_string': make_get_string(request),
            'private': docket.blocked,
        })
Esempio n. 15
0
def view_favorites(request):
    favorites = request.user.favorites.all().order_by("pk")
    favorite_forms = []
    for favorite in favorites:
        favorite_forms.append(FavoriteForm(instance=favorite))
    return render(
        request,
        "profile/favorites.html",
        {
            "private": True,
            "favorite_forms": favorite_forms,
            "blank_favorite_form": FavoriteForm(),
        },
    )
Esempio n. 16
0
def view_favorites(request: AuthenticatedHttpRequest) -> HttpResponse:
    favorites = request.user.favorites.all().order_by("pk")
    favorite_forms = OrderedDict()
    favorite_forms["Dockets"] = []
    favorite_forms["RECAP Documents"] = []
    favorite_forms["Opinions"] = []
    favorite_forms["Oral Arguments"] = []
    for favorite in favorites:
        if favorite.cluster_id:
            key = "Opinions"
        elif favorite.audio_id:
            key = "Oral Arguments"
        elif favorite.recap_doc_id:
            key = "RECAP Documents"
        elif favorite.docket_id:
            key = "Dockets"
        favorite_forms[key].append(FavoriteForm(instance=favorite))
    docket_search_url = ("/?type=r&q=xxx AND docket_id:(" + " OR ".join(
        [str(a.instance.docket_id.pk)
         for a in favorite_forms["Dockets"]]) + ")")
    oral_search_url = ("/?type=oa&q=xxx AND id:(" + " OR ".join([
        str(a.instance.audio_id.pk) for a in favorite_forms["Oral Arguments"]
    ]) + ")")
    recap_search_url = ("/?type=r&q=xxx AND docket_entry_id:(" + " OR ".join([
        str(a.instance.recap_doc_id.pk)
        for a in favorite_forms["RECAP Documents"]
    ]) + ")")
    opinion_search_url = (
        "/?q=xxx AND cluster_id:(" + " OR ".join([
            str(a.instance.cluster_id.pk) for a in favorite_forms["Opinions"]
        ]) +
        ")&stat_Precedential=on&stat_Non-Precedential=on&stat_Errata=on&stat_Separate%20Opinion=on&stat_In-chambers=on&stat_Relating-to%20orders=on&stat_Unknown%20Status=on"
    )
    return render(
        request,
        "profile/favorites.html",
        {
            "private": True,
            "favorite_forms": favorite_forms,
            "blank_favorite_form": FavoriteForm(),
            "docket_search_url": docket_search_url,
            "oral_search_url": oral_search_url,
            "recap_search_url": recap_search_url,
            "opinion_search_url": opinion_search_url,
        },
    )
Esempio n. 17
0
def view_recap_document(
    request: HttpRequest,
    docket_id: Optional[int] = None,
    doc_num: Optional[int] = None,
    att_num: Optional[int] = None,
    slug: str = "",
) -> HttpResponse:
    """This view can either load an attachment or a regular document,
    depending on the URL pattern that is matched.
    """
    try:
        rd = RECAPDocument.objects.filter(
            docket_entry__docket__id=docket_id,
            document_number=doc_num,
            attachment_number=att_num,
        ).order_by("pk")[0]
    except IndexError:
        raise Http404("No RECAPDocument matches the given query.")

    title = make_rd_title(rd)
    rd = make_thumb_if_needed(request, rd)
    try:
        fave = Favorite.objects.get(recap_doc_id=rd.pk, user=request.user)
    except (ObjectDoesNotExist, TypeError):
        # Not favorited or anonymous user
        favorite_form = FavoriteForm(
            initial={
                "recap_doc_id": rd.pk,
                "name": trunc(title, 100, ellipsis="..."),
            }
        )
    else:
        favorite_form = FavoriteForm(instance=fave)

    return render(
        request,
        "recap_document.html",
        {
            "rd": rd,
            "title": title,
            "favorite_form": favorite_form,
            "private": True,  # Always True for RECAP docs.
        },
    )
Esempio n. 18
0
def view_recap_document(request,
                        docket_id=None,
                        doc_num=None,
                        att_num=None,
                        slug=''):
    """This view can either load an attachment or a regular document,
    depending on the URL pattern that is matched.
    """
    item = get_object_or_404(
        RECAPDocument,
        docket_entry__docket__id=docket_id,
        document_number=doc_num,
        attachment_number=att_num,
    )
    title = '%sDocument #%s%s in %s' % (
        '%s – ' % item.description if item.description else '',
        item.document_number,
        ', Attachment #%s' % item.attachment_number
        if item.document_type == RECAPDocument.ATTACHMENT else '',
        best_case_name(item.docket_entry.docket),
    )
    try:
        fave = Favorite.objects.get(recap_doc_id=item.pk, user=request.user)
    except (ObjectDoesNotExist, TypeError):
        # Not favorited or anonymous user
        favorite_form = FavoriteForm(initial={
            'recap_doc_id': item.pk,
            'name': trunc(title, 100, ellipsis='...'),
        })
    else:
        favorite_form = FavoriteForm(instance=fave)

    return render(
        request,
        'recap_document.html',
        {
            'document': item,
            'title': title,
            'favorite_form': favorite_form,
            'private': True,  # Always True for RECAP docs.
        })
Esempio n. 19
0
def view_opinion(request, pk, _):
    """Using the cluster ID, return the cluster of opinions.

    We also test if the cluster ID is a favorite for the user, and send data
    if needed. If it's a favorite, we send the bound form for the favorite so
    it can populate the form on the page. If it is not a favorite, we send the
    unbound form.
    """
    # Look up the court, cluster, title and favorite information
    cluster = get_object_or_404(OpinionCluster, pk=pk)
    title = ", ".join([
        s for s in [
            trunc(best_case_name(cluster), 100, ellipsis="..."),
            cluster.citation_string,
        ] if s.strip()
    ])
    has_downloads = False
    for sub_opinion in cluster.sub_opinions.all():
        if sub_opinion.local_path or sub_opinion.download_url:
            has_downloads = True
            break
    get_string = search_utils.make_get_string(request)

    try:
        fave = Favorite.objects.get(cluster_id=cluster.pk, user=request.user)
    except (ObjectDoesNotExist, TypeError):
        # Not favorited or anonymous user
        favorite_form = FavoriteForm(
            initial={
                "cluster_id": cluster.pk,
                "name": trunc(best_case_name(cluster), 100, ellipsis="..."),
            })
    else:
        favorite_form = FavoriteForm(instance=fave)

    if not is_bot(request):
        # Get the citing results from Solr for speed. Only do this for humans
        # to save on disk usage.
        conn = sunburnt.SolrInterface(settings.SOLR_OPINION_URL, mode="r")
        q = {
            "q":
            "cites:({ids})".format(ids=" OR ".join([
                str(pk)
                for pk in (cluster.sub_opinions.values_list("pk", flat=True))
            ])),
            "rows":
            5,
            "start":
            0,
            "sort":
            "citeCount desc",
            "caller":
            "view_opinion",
        }
        citing_clusters = conn.raw_query(**q).execute()
    else:
        citing_clusters = None

    return render(
        request,
        "view_opinion.html",
        {
            "title": title,
            "cluster": cluster,
            "has_downloads": has_downloads,
            "favorite_form": favorite_form,
            "get_string": get_string,
            "private": cluster.blocked,
            "citing_clusters": citing_clusters,
            "top_authorities": cluster.authorities_with_data[:5],
            "authorities_count": len(cluster.authorities_with_data),
        },
    )
Esempio n. 20
0
def view_opinion(request, pk, _):
    """Using the cluster ID, return the cluster of opinions.

    We also test if the cluster ID is a favorite for the user, and send data
    if needed. If it's a favorite, we send the bound form for the favorite so
    it can populate the form on the page. If it is not a favorite, we send the
    unbound form.
    """
    # Look up the court, cluster, title and favorite information
    cluster = get_object_or_404(OpinionCluster, pk=pk)
    title = ', '.join([
        s for s in [
            trunc(best_case_name(cluster), 100, ellipsis="..."),
            cluster.citation_string,
        ] if s.strip()
    ])
    has_downloads = False
    for sub_opinion in cluster.sub_opinions.all():
        if sub_opinion.local_path or sub_opinion.download_url:
            has_downloads = True
            break
    get_string = search_utils.make_get_string(request)

    try:
        fave = Favorite.objects.get(cluster_id=cluster.pk, user=request.user)
    except (ObjectDoesNotExist, TypeError):
        # Not favorited or anonymous user
        favorite_form = FavoriteForm(
            initial={
                'cluster_id': cluster.pk,
                'name': trunc(best_case_name(cluster), 100, ellipsis='...'),
            })
    else:
        favorite_form = FavoriteForm(instance=fave)

    if not is_bot(request):
        # Get the citing results from Solr for speed. Only do this for humans
        # to save on disk usage.
        conn = sunburnt.SolrInterface(settings.SOLR_OPINION_URL, mode='r')
        q = {
            'q':
            'cites:({ids})'.format(ids=' OR '.join([
                str(pk)
                for pk in (cluster.sub_opinions.values_list('pk', flat=True))
            ])),
            'rows':
            5,
            'start':
            0,
            'sort':
            'citeCount desc',
            'caller':
            'view_opinion',
        }
        citing_clusters = conn.raw_query(**q).execute()
    else:
        citing_clusters = None

    return render(
        request, 'view_opinion.html', {
            'title': title,
            'cluster': cluster,
            'has_downloads': has_downloads,
            'favorite_form': favorite_form,
            'get_string': get_string,
            'private': cluster.blocked,
            'citing_clusters': citing_clusters,
            'top_authorities': cluster.authorities[:5],
        })