Johan713 commited on
Commit
53a2571
·
verified ·
1 Parent(s): f47d39c

Update app2.py

Browse files
Files changed (1) hide show
  1. app2.py +60 -43
app2.py CHANGED
@@ -318,50 +318,67 @@ def fetch_detailed_content(url: str) -> str:
318
 
319
  def query_public_case_law(query: str) -> List[Dict[str, Any]]:
320
  """
321
- Query publicly available case law databases and perform a web search to find related cases.
 
322
  """
323
- # Perform a web search to find relevant case law
324
- search_url = f"https://www.google.com/search?q={query}+case+law+site:law.justia.com"
325
- headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}
326
-
 
 
 
327
  try:
328
- response = requests.get(search_url, headers=headers)
329
- response.raise_for_status()
330
- soup = BeautifulSoup(response.text, 'html.parser')
331
-
332
- search_results = soup.find_all('div', class_='g')
333
- cases = []
334
-
335
- for result in search_results[:5]: # Limit to top 5 results
336
- title_elem = result.find('h3', class_='r')
337
- link_elem = result.find('a')
338
- snippet_elem = result.find('div', class_='s')
339
-
340
- if title_elem and link_elem and snippet_elem:
341
- title = title_elem.text
342
- link = link_elem['href']
343
- snippet = snippet_elem.text
344
-
345
- # Extract case name and citation from the title
346
- case_info = title.split(' - ')
347
- if len(case_info) >= 2:
348
- case_name = case_info[0]
349
- citation = case_info[1]
350
- else:
351
- case_name = title
352
- citation = "Citation not found"
353
-
354
- cases.append({
355
- "case_name": case_name,
356
- "citation": citation,
357
- "summary": snippet,
358
- "url": link
359
- })
360
-
361
- return cases
362
  except requests.RequestException as e:
363
- print(f"Error querying case law: {e}")
364
- return []
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
365
 
366
  def comprehensive_document_analysis(content: str) -> Dict[str, Any]:
367
  """Performs a comprehensive analysis of the document, including web and Wikipedia searches."""
@@ -1551,8 +1568,8 @@ elif feature == "Case Precedent Finder":
1551
 
1552
  st.write("### Related Cases from Public Databases")
1553
  for i, case in enumerate(precedents["public_cases"], 1):
1554
- st.write(f"**{i}. {case['case_name']} - {case['citation']}**")
1555
- st.write(f"Summary: {case['summary']}")
1556
  st.write(f"[Read full case]({case['url']})")
1557
  st.write("---")
1558
 
 
318
 
319
  def query_public_case_law(query: str) -> List[Dict[str, Any]]:
320
  """
321
+ Query publicly available case law databases (Justia and CourtListener)
322
+ and perform a web search to find related cases.
323
  """
324
+ cases = []
325
+
326
+ # --- Justia Search (Using BeautifulSoup) ---
327
+ justia_url = f"https://law.justia.com/cases/?q={query}"
328
+ justia_headers = {
329
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
330
+ }
331
  try:
332
+ justia_response = requests.get(justia_url, headers=justia_headers)
333
+ justia_response.raise_for_status()
334
+ justia_soup = BeautifulSoup(justia_response.text, 'html.parser')
335
+ justia_results = justia_soup.find_all('div', class_='case-listing')
336
+
337
+ for result in justia_results[:3]: # Limit Justia results to 3
338
+ title = result.find('h6').text.strip()
339
+ citation = result.find('p', class_='citation').text.strip()
340
+ summary = result.find('p', class_='summary').text.strip()
341
+ url = result.find('a')['href']
342
+ cases.append({
343
+ "source": "Justia",
344
+ "case_name": title,
345
+ "citation": citation,
346
+ "summary": summary,
347
+ "url": url
348
+ })
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
349
  except requests.RequestException as e:
350
+ print(f"Error querying Justia: {e}")
351
+
352
+ # --- CourtListener Search (Using API) ---
353
+ courtlistener_url = f"https://www.courtlistener.com/api/rest/v3/search/?q={query}&type=o&format=json"
354
+ for attempt in range(3): # Retry up to 3 times
355
+ try:
356
+ courtlistener_response = requests.get(courtlistener_url)
357
+ courtlistener_response.raise_for_status()
358
+ courtlistener_data = courtlistener_response.json()
359
+ break
360
+ except (requests.RequestException, ValueError) as e:
361
+ print(f"Attempt {attempt + 1} failed: {e}")
362
+ if attempt == 2:
363
+ print(
364
+ f"Failed to retrieve or parse data from CourtListener: {e}"
365
+ )
366
+ break
367
+ time.sleep(2)
368
+
369
+ if 'results' in courtlistener_data:
370
+ for result in courtlistener_data['results'][:3]: # Limit to 3 results
371
+ case_url = f"https://www.courtlistener.com{result['absolute_url']}"
372
+ cases.append({
373
+ "source": "CourtListener",
374
+ "case_name": result['caseName'],
375
+ "date_filed": result['dateFiled'],
376
+ "docket_number": result.get('docketNumber', 'Not available'),
377
+ "court": result['court'],
378
+ "url": case_url
379
+ })
380
+
381
+ return cases
382
 
383
  def comprehensive_document_analysis(content: str) -> Dict[str, Any]:
384
  """Performs a comprehensive analysis of the document, including web and Wikipedia searches."""
 
1568
 
1569
  st.write("### Related Cases from Public Databases")
1570
  for i, case in enumerate(precedents["public_cases"], 1):
1571
+ st.write(f"**{i}. {case['case_name']} ({case['source']}) - {case.get('citation', '')}**") # Display the source
1572
+ st.write(f"Summary: {case.get('summary', 'Not available')}")
1573
  st.write(f"[Read full case]({case['url']})")
1574
  st.write("---")
1575