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, })
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. })
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, }
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." )
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.")
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, }, )
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(), }, )
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, })
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) )
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, })
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() })
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. }, )
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), }, )
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, })
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(), }, )
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, }, )
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. }, )
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. })
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), }, )
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], })