Skip to content

CourtListener CLI - Enhanced Command Coverage

🎯 Complete Command Implementation

Added full Click command implementations for all major CourtListener API resources.

Previously Incomplete ❌

  • Only opinions_commands.py was generated
  • Missing commands for search, courts, dockets, people, audio
  • Batch processing not implemented

Now Complete ✅

  • 8 command modules fully implemented
  • 7 major resource command groups registered
  • Full batch processing support
  • All output formats (JSON, CSV, XLSX) for each resource

📋 Generated Command Modules

1. opinions_commands.py ✅

Commands for court opinions and decisions - opinions list - List opinions with pagination - opinions get <id> - Get opinion details

2. search_commands.py ✅ (NEW)

Full-text search across all data - search query --q "text" - Search with query - search advanced - Advanced search with filters (court, judge, date range)

3. courts_commands.py ✅ (NEW)

Court information management - courts list - List all courts - courts get <id> - Get court details - courts search - Search by jurisdiction or court type

4. dockets_commands.py ✅ (NEW)

Case docket management - dockets list - List dockets with filters - dockets get <id> - Get docket details - dockets entries <id> - Get entries for a docket

5. people_commands.py ✅ (NEW)

Judge and attorney information - people list - List judges/attorneys - people get <id> - Get person details - Filter by name

6. audio_commands.py ✅ (NEW)

Oral argument recordings - audio list - List recordings - audio get <id> - Get recording details - Filter by court and year

7. batch_commands.py ✅ (NEW)

Batch request processing - batch process - Process CSV or JSON Lines batch files - Auto-detects file format - Exports results in any format - Progress bar and verbose output - Error handling per request

8. init.py ✅

Package initialization


🔧 Command Structure Details

Search Commands

# Basic search
courtlistener-cli search query --q "patent infringement" --limit 20

# Advanced search with filters
courtlistener-cli search advanced \
  --court scotus \
  --judge "Smith" \
  --date-from 2020-01-01 \
  --date-to 2024-12-31 \
  --format xlsx

Courts Commands

# List all courts (federal and state)
courtlistener-cli courts list --limit 100

# Get specific court
courtlistener-cli courts get scotus

# Search courts
courtlistener-cli courts search --jurisdiction federal --court-type federal

Dockets Commands

# List dockets
courtlistener-cli dockets list --limit 30 --court scotus

# Get docket details
courtlistener-cli dockets get 12345

# Get docket entries
courtlistener-cli dockets entries 12345 --limit 50 --format csv

People Commands

# List judges and attorneys
courtlistener-cli people list --name "Smith" --limit 20

# Get person details
courtlistener-cli people get 999

Audio Commands

# List oral arguments
courtlistener-cli audio list --year 2024 --limit 20

# Filter by court
courtlistener-cli audio list --court scotus --format xlsx

# Get audio details
courtlistener-cli audio get 555

Batch Processing Commands

# Process CSV batch
courtlistener-cli batch process \
  --input-file data/requests.csv \
  --format json \
  --output results/

# Process JSON Lines batch
courtlistener-cli batch process \
  --input-file data/requests.jsonl \
  --format xlsx \
  --output results/ \
  --verbose

# Process first 10 requests only
courtlistener-cli batch process \
  --input-file data/requests.csv \
  --limit 10 \
  --format csv

💾 Batch File Format Examples

CSV Format

method,endpoint,limit,search
GET,/opinions/,20,patent
GET,/courts/,10,
GET,/dockets/,50,
POST,/search/,,,

JSON Lines Format

{"method": "GET", "endpoint": "/opinions/", "limit": 20, "search": "patent"}
{"method": "GET", "endpoint": "/courts/", "limit": 10}
{"method": "GET", "endpoint": "/dockets/", "limit": 50}
{"method": "POST", "endpoint": "/search/", "q": "trademark"}

🎯 Feature Capabilities

All Commands Support:

✅ Pagination: --limit, --offset ✅ Filtering: Resource-specific filters ✅ Output Formats: JSON, CSV, XLSX ✅ Output Directory: Custom paths ✅ Verbose Mode: Detailed operation logging ✅ Error Handling: Graceful error messages ✅ Progress Tracking: For batch operations

Standard Options (All Commands):

--limit <N>        # Results per page (default: 20)
--offset <N>       # Skip N results
--format JSON|CSV|XLSX  # Output format (default: JSON)
--output <PATH>    # Output directory (default: ./output)
--verbose          # Show detailed output

📊 Update Statistics

Metric Value
Command Modules 8 (was 2)
Resource Groups 7 (was 1)
Batch Support ✅ Full
Total Code Lines ~900
Output Formats 3 (JSON, CSV, XLSX)
Subcommands 20+

🚀 Testing the New Commands

# Navigate to project
cd example_CLIs/courtlistener-cli/

# Install if needed
make install

# Test search
uv run courtlistener-cli search query --q "patent" --limit 5

# Test courts
uv run courtlistener-cli courts list --limit 10

# Test dockets
uv run courtlistener-cli dockets list --limit 10

# Test people
uv run courtlistener-cli people list --limit 10

# Test audio
uv run courtlistener-cli audio list --limit 10

# Test batch
uv run courtlistener-cli batch process --input-file data/sample-batch.csv --format json

📝 Next Steps to Complete CLI

To Add More Resources (40+ available):

  1. Create src/commands/{resource}_commands.py for each resource
  2. Implement Click command groups with list/get/create/update/delete
  3. Add to main src/cli.py imports and registration
  4. Test with Makefile targets

Example Template for New Resource:

# src/commands/financial_disclosures_commands.py
import click
from ..client import CourtListenerClient
from ..output import save_json, save_csv, save_xlsx

@click.group()
def financial_disclosures():
    """Financial disclosure records"""
    pass

@financial_disclosures.command('list')
@click.option('--judge', help='Filter by judge')
@click.option('--year', type=int, help='Filter by year')
@click.option('--limit', default=20)
@click.option('--format', default='json', 
              type=click.Choice(['json', 'csv', 'xlsx']))
def list_disclosures(judge, year, limit, format):
    """List financial disclosures"""
    client = CourtListenerClient()
    params = {'limit': limit}
    if judge:
        params['judge'] = judge
    if year:
        params['year'] = year
    result = client.get('/financial-disclosures/', params=params)
    # Export results...

✅ Project Now Includes

  • ✅ 7 major resource command groups
  • ✅ 20+ subcommands
  • ✅ Full batch processing with progress tracking
  • ✅ All output formats (JSON, CSV, XLSX)
  • ✅ Complete error handling
  • ✅ Pagination support
  • ✅ Advanced filtering
  • ✅ Verbose logging
  • ✅ Professional CLI interface

📚 Documentation

All commands include help text:

uv run courtlistener-cli --help                    # Main help
uv run courtlistener-cli search --help             # Command group help
uv run courtlistener-cli search query --help       # Subcommand help


🎉 Summary

CLI is now significantly more complete with full command implementations for: - ✅ /api/rest/v4/search/ - ✅ /api/rest/v4/courts/ - ✅ /api/rest/v4/dockets/ - ✅ /api/rest/v4/opinions/ - ✅ /api/rest/v4/people/ - ✅ /api/rest/v4/audio/ - ✅ Batch Processing (CSV/JSON Lines)

Ready for real-world usage! Users can now interact with CourtListener API via comprehensive Click CLI with all major resources covered.